X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fwx%2Fkdm_dialog.cc;h=5679cf0cb14c2822338d4a78d62e03574b8e9984;hb=e4d7f575fab50b6d255821d6d6a8171c8e1f13f6;hp=ee164518aed47070613f53f267cb8c5dd35b0dd5;hpb=736b3a068ba5a402b541d32f270669e6e1a4e5c4;p=dcpomatic.git diff --git a/src/wx/kdm_dialog.cc b/src/wx/kdm_dialog.cc index ee164518a..5679cf0cb 100644 --- a/src/wx/kdm_dialog.cc +++ b/src/wx/kdm_dialog.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2012-2015 Carl Hetherington + Copyright (C) 2012-2016 Carl Hetherington This file is part of DCP-o-matic. @@ -24,14 +24,23 @@ #include "kdm_timing_panel.h" #include "kdm_output_panel.h" #include "kdm_cpl_panel.h" +#include "confirm_kdm_email_dialog.h" #include "lib/film.h" #include "lib/screen.h" +#include "lib/screen_kdm.h" +#include "lib/send_kdm_email_job.h" +#include "lib/job_manager.h" +#include "lib/cinema_kdms.h" +#include "lib/config.h" +#include "lib/cinema.h" #include +#include #include #include #include using std::string; +using std::exception; using std::map; using std::list; using std::pair; @@ -39,12 +48,19 @@ using std::cout; using std::vector; using std::make_pair; using boost::shared_ptr; +using boost::bind; -KDMDialog::KDMDialog (wxWindow* parent, boost::shared_ptr film) +KDMDialog::KDMDialog (wxWindow* parent, shared_ptr film) : wxDialog (parent, wxID_ANY, _("Make KDMs")) + , _film (film) { - /* Main sizer */ - wxBoxSizer* vertical = new wxBoxSizer (wxVERTICAL); + /* Main sizers */ + wxBoxSizer* horizontal = new wxBoxSizer (wxHORIZONTAL); + wxBoxSizer* left = new wxBoxSizer (wxVERTICAL); + wxBoxSizer* right = new wxBoxSizer (wxVERTICAL); + + horizontal->Add (left, 1, wxEXPAND | wxRIGHT, DCPOMATIC_SIZER_X_GAP * 4); + horizontal->Add (right, 1, wxEXPAND); /* Font for sub-headings */ wxFont subheading_font (*wxNORMAL_FONT); @@ -53,51 +69,45 @@ KDMDialog::KDMDialog (wxWindow* parent, boost::shared_ptr film) /* Sub-heading: Screens */ wxStaticText* h = new wxStaticText (this, wxID_ANY, _("Screens")); h->SetFont (subheading_font); - vertical->Add (h, 0, wxALIGN_CENTER_VERTICAL); + left->Add (h, 0, wxALIGN_CENTER_VERTICAL | wxBOTTOM, DCPOMATIC_SIZER_Y_GAP); _screens = new ScreensPanel (this); - /* Hack to stop KDM dialogs that are taller than my laptop screen; this - really isn't the right way to fix it... - */ - _screens->SetMaxSize (wxSize (-1, 280)); - vertical->Add (_screens, 1, wxEXPAND); + left->Add (_screens, 1, wxEXPAND | wxBOTTOM, DCPOMATIC_SIZER_Y_GAP); /* Sub-heading: Timing */ /// TRANSLATORS: translate the word "Timing" here; do not include the "KDM|" prefix h = new wxStaticText (this, wxID_ANY, S_("KDM|Timing")); h->SetFont (subheading_font); - vertical->Add (h, 0, wxALIGN_CENTER_VERTICAL | wxTOP, DCPOMATIC_SIZER_Y_GAP * 2); + right->Add (h, 0, wxALIGN_CENTER_VERTICAL, DCPOMATIC_SIZER_Y_GAP * 2); _timing = new KDMTimingPanel (this); - vertical->Add (_timing); + right->Add (_timing); /* Sub-heading: CPL */ h = new wxStaticText (this, wxID_ANY, _("CPL")); h->SetFont (subheading_font); - vertical->Add (h, 0, wxALIGN_CENTER_VERTICAL, DCPOMATIC_SIZER_Y_GAP * 2); + right->Add (h, 0, wxALIGN_CENTER_VERTICAL, DCPOMATIC_SIZER_Y_GAP * 2); _cpl = new KDMCPLPanel (this, film->cpls ()); - vertical->Add (_cpl, 0, wxEXPAND); + right->Add (_cpl, 0, wxEXPAND); /* Sub-heading: Output */ h = new wxStaticText (this, wxID_ANY, _("Output")); h->SetFont (subheading_font); - vertical->Add (h, 0, wxALIGN_CENTER_VERTICAL | wxTOP, DCPOMATIC_SIZER_Y_GAP * 2); + right->Add (h, 0, wxALIGN_CENTER_VERTICAL | wxTOP, DCPOMATIC_SIZER_Y_GAP * 2); _output = new KDMOutputPanel (this, film->interop ()); - vertical->Add (_output, 0, wxEXPAND | wxTOP, DCPOMATIC_SIZER_GAP); - + right->Add (_output, 0, wxEXPAND | wxTOP, DCPOMATIC_SIZER_GAP); - wxSizer* buttons = CreateSeparatedButtonSizer (wxOK | wxCANCEL); - if (buttons) { - vertical->Add (buttons, 0, wxEXPAND | wxALL, DCPOMATIC_SIZER_Y_GAP); - } + _make = new wxButton (this, wxID_ANY, _("Make KDMs")); + right->Add (_make, 0, wxTOP | wxBOTTOM, DCPOMATIC_SIZER_GAP); - /* Make an overall sizer to get a nice border, and put some buttons in */ + /* Make an overall sizer to get a nice border */ wxBoxSizer* overall_sizer = new wxBoxSizer (wxVERTICAL); - overall_sizer->Add (vertical, 0, wxEXPAND | wxTOP | wxLEFT | wxRIGHT, DCPOMATIC_DIALOG_BORDER); + overall_sizer->Add (horizontal, 0, wxEXPAND | wxTOP | wxLEFT | wxRIGHT, DCPOMATIC_DIALOG_BORDER); /* Bind */ _screens->ScreensChanged.connect (boost::bind (&KDMDialog::setup_sensitivity, this)); _timing->TimingChanged.connect (boost::bind (&KDMDialog::setup_sensitivity, this)); + _make->Bind (wxEVT_BUTTON, boost::bind (&KDMDialog::make_clicked, this)); setup_sensitivity (); @@ -111,67 +121,39 @@ KDMDialog::setup_sensitivity () { _screens->setup_sensitivity (); _output->setup_sensitivity (); - - bool const sd = _cpl->has_selected (); - - wxButton* ok = dynamic_cast (FindWindowById (wxID_OK, this)); - if (ok) { - ok->Enable (!_screens->screens().empty() && _timing->valid() && sd); - } -} - -boost::filesystem::path -KDMDialog::cpl () const -{ - return _cpl->cpl (); -} - -list > -KDMDialog::screens () const -{ - return _screens->screens (); -} - -boost::posix_time::ptime -KDMDialog::from () const -{ - return _timing->from (); -} - -boost::posix_time::ptime -KDMDialog::until () const -{ - return _timing->until (); -} - -boost::filesystem::path -KDMDialog::directory () const -{ - return _output->directory (); + _make->Enable (!_screens->screens().empty() && _timing->valid() && _cpl->has_selected()); } bool -KDMDialog::write_to () const +KDMDialog::confirm_overwrite (boost::filesystem::path path) { - return _output->write_to (); + return confirm_dialog ( + this, + wxString::Format (_("File %s already exists. Do you want to overwrite it?"), std_to_wx(path.string()).data()) + ); } -dcp::Formulation -KDMDialog::formulation () const +void +KDMDialog::make_clicked () { - return _output->formulation (); -} + shared_ptr film = _film.lock (); + DCPOMATIC_ASSERT (film); -KDMNameFormat -KDMDialog::name_format () const -{ - return _output->name_format (); -} + list screen_kdms = film->make_kdms ( + _screens->screens(), _cpl->cpl(), _timing->from(), _timing->until(), _output->formulation() + ); -int -KDMDialog::ShowModal () -{ - int const r = wxDialog::ShowModal (); - _output->save_kdm_name_format (); - return r; + pair, int> result = _output->make (screen_kdms, film->name(), _timing, bind (&KDMDialog::confirm_overwrite, this, _1), film->log()); + if (result.first) { + JobManager::instance()->add (result.first); + } + + if (result.second > 0) { + /* XXX: proper plural form support in wxWidgets? */ + wxString s = result.second == 1 ? _("%d KDM written to %s") : _("%d KDMs written to %s"); + message_dialog ( + this, + wxString::Format (s, result.second, std_to_wx(_output->directory().string()).data()) + ); + } }