From: Carl Hetherington Date: Sun, 6 Jan 2013 02:09:08 +0000 (+0000) Subject: Some work on KDM UI. X-Git-Tag: v2.0.48~1356 X-Git-Url: https://main.carlh.net/gitweb/?p=dcpomatic.git;a=commitdiff_plain;h=d093a5268e64af44bc55aec06d4c9b8efca6d9d6 Some work on KDM UI. --- diff --git a/src/lib/cinema.h b/src/lib/cinema.h new file mode 100644 index 000000000..232fc5ec8 --- /dev/null +++ b/src/lib/cinema.h @@ -0,0 +1,23 @@ +#include + +class Screen +{ +public: + Screen (std::string const & n) + : name (n) + {} + + std::string name; + libdcp::Certificate certificate; +}; + +class Cinema +{ +public: + Cinema (std::string const & n) + : name (n) + {} + + std::string name; + std::list screens; +}; diff --git a/src/lib/util.cc b/src/lib/util.cc index 424c736c2..9d42a52e5 100644 --- a/src/lib/util.cc +++ b/src/lib/util.cc @@ -43,6 +43,7 @@ #include #include #include +#include extern "C" { #include #include @@ -230,7 +231,7 @@ seconds (struct timeval t) void dvdomatic_setup () { - libdcp_setup (); + libdcp::init (); Format::setup_formats (); DCPContentType::setup_dcp_content_types (); diff --git a/src/tools/dvdomatic.cc b/src/tools/dvdomatic.cc index d5dca2ab4..cfdd03a30 100644 --- a/src/tools/dvdomatic.cc +++ b/src/tools/dvdomatic.cc @@ -31,6 +31,7 @@ #include "wx/new_film_dialog.h" #include "wx/properties_dialog.h" #include "wx/wx_ui_signaller.h" +#include "wx/kdm_dialog.h" #include "lib/film.h" #include "lib/format.h" #include "lib/config.h" @@ -137,6 +138,7 @@ enum { ID_file_quit, ID_edit_preferences, ID_jobs_make_dcp, + ID_jobs_make_kdms, ID_jobs_send_dcp_to_tms, ID_jobs_examine_content, ID_jobs_make_dcp_from_existing_transcode, @@ -161,6 +163,7 @@ setup_menu (wxMenuBar* m) wxMenu* jobs = new wxMenu; add_item (jobs, "&Make DCP", ID_jobs_make_dcp, NEEDS_FILM); + add_item (jobs, "Make &KDMs...", ID_jobs_make_kdms, NEEDS_FILM); add_item (jobs, "&Send DCP to TMS", ID_jobs_send_dcp_to_tms, NEEDS_FILM); jobs->AppendSeparator (); add_item (jobs, "&Examine content", ID_jobs_examine_content, NEEDS_FILM); @@ -199,6 +202,7 @@ public: Connect (ID_file_quit, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler (Frame::file_quit)); Connect (ID_edit_preferences, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler (Frame::edit_preferences)); Connect (ID_jobs_make_dcp, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler (Frame::jobs_make_dcp)); + Connect (ID_jobs_make_kdms, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler (Frame::jobs_make_kdms)); Connect (ID_jobs_send_dcp_to_tms, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler (Frame::jobs_send_dcp_to_tms)); Connect (ID_jobs_examine_content, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler (Frame::jobs_examine_content)); Connect (ID_jobs_make_dcp_from_existing_transcode, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler (Frame::jobs_make_dcp_from_existing_transcode)); @@ -330,6 +334,13 @@ public: { JobWrapper::make_dcp (this, film, true); } + + void jobs_make_kdms (wxCommandEvent &) + { + KDMDialog* d = new KDMDialog (this); + d->ShowModal (); + d->Destroy (); + } void jobs_make_dcp_from_existing_transcode (wxCommandEvent &) { diff --git a/src/wx/kdm_dialog.cc b/src/wx/kdm_dialog.cc new file mode 100644 index 000000000..ba478f7d5 --- /dev/null +++ b/src/wx/kdm_dialog.cc @@ -0,0 +1,140 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#include +#include +#include +#include "lib/cinema.h" +#include "kdm_dialog.h" +#include "wx_util.h" +#ifdef __WXMSW__ +#include "dir_picker_ctrl.h" +#else +#include +#endif + +using namespace std; +using boost::shared_ptr; + +KDMDialog::KDMDialog (wxWindow* parent) + : wxDialog (parent, wxID_ANY, _("Make KDMs")) +{ + wxBoxSizer* vertical = new wxBoxSizer (wxVERTICAL); + + add_label_to_sizer (vertical, this, "Make KDMs for"); + + wxBoxSizer* targets = new wxBoxSizer (wxHORIZONTAL); + + _targets = new wxTreeCtrl (this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTR_HIDE_ROOT | wxTR_MULTIPLE | wxTR_HAS_BUTTONS); + targets->Add (_targets, 1, wxEXPAND | wxALL, 6); + + _root = _targets->AddRoot ("Foo"); + shared_ptr csy (new Cinema ("City Screen York")); + add_cinema (csy); + add_screen (csy, shared_ptr (new Screen ("Screen 1"))); + add_screen (csy, shared_ptr (new Screen ("Screen 2"))); + add_screen (csy, shared_ptr (new Screen ("Screen 3"))); + _targets->ExpandAll (); + + wxBoxSizer* target_buttons = new wxBoxSizer (wxVERTICAL); + + _new_cinema = new wxButton (this, wxID_ANY, _("New Cinema...")); + target_buttons->Add (_new_cinema, 1, wxEXPAND | wxALL, 6); + _new_screen = new wxButton (this, wxID_ANY, _("New Screen...")); + target_buttons->Add (_new_screen, 1, wxEXPAND | wxALL, 6); + + targets->Add (target_buttons, 0, wxEXPAND | wxALL, 6); + + vertical->Add (targets, 0, wxEXPAND | wxALL, 6); + + wxFlexGridSizer* table = new wxFlexGridSizer (3, 2, 6); + add_label_to_sizer (table, this, "From"); + _from_date = new wxDatePickerCtrl (this, wxID_ANY); + table->Add (_from_date, 1, wxEXPAND); + _from_time = new wxTimePickerCtrl (this, wxID_ANY); + table->Add (_from_time, 1, wxEXPAND); + + add_label_to_sizer (table, this, "To"); + _to_date = new wxDatePickerCtrl (this, wxID_ANY); + table->Add (_to_date, 1, wxEXPAND); + _to_time = new wxTimePickerCtrl (this, wxID_ANY); + table->Add (_to_time, 1, wxEXPAND); + + add_label_to_sizer (table, this, "Write to"); + +#ifdef __WXMSW__ + _folder = new DirPickerCtrl (this); +#else + _folder = new wxDirPickerCtrl (this, wxDD_DIR_MUST_EXIST); +#endif + + table->Add (_folder, 1, wxEXPAND); + + vertical->Add (table, 1, wxEXPAND | wxALL, 6); + + wxSizer* buttons = CreateSeparatedButtonSizer (wxOK); + if (buttons) { + vertical->Add (buttons, wxSizerFlags().Expand().DoubleBorder()); + } + + _targets->Connect (wxID_ANY, wxEVT_COMMAND_TREE_SEL_CHANGED, wxCommandEventHandler (KDMDialog::targets_selection_changed), 0, this); + + _new_screen->Enable (false); + + SetSizer (vertical); + vertical->Layout (); + vertical->SetSizeHints (this); +} + +void +KDMDialog::targets_selection_changed (wxCommandEvent &) +{ + wxArrayTreeItemIds s; + _targets->GetSelections (s); + + bool selected_cinema = false; + for (size_t i = 0; i < s.GetCount(); ++i) { + if (_cinemas.find (s[i]) != _cinemas.end()) { + selected_cinema = true; + } + } + + _new_screen->Enable (selected_cinema); +} + +void +KDMDialog::add_cinema (shared_ptr c) +{ + _cinemas[_targets->AppendItem (_root, std_to_wx (c->name))] = c; +} + +void +KDMDialog::add_screen (shared_ptr c, shared_ptr s) +{ + map >::const_iterator i = _cinemas.begin(); + while (i != _cinemas.end() && i->second != c) { + ++i; + } + + if (i == _cinemas.end()) { + return; + } + + _screens[_targets->AppendItem (i->first, std_to_wx (s->name))] = s; +} diff --git a/src/wx/kdm_dialog.h b/src/wx/kdm_dialog.h new file mode 100644 index 000000000..fe44bb83a --- /dev/null +++ b/src/wx/kdm_dialog.h @@ -0,0 +1,60 @@ +/* + Copyright (C) 2012 Carl Hetherington + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#include +#include +#include +#include + +class wxTreeCtrl; +class wxDatePickerCtrl; +class wxTimePickerCtrl; +class wxDirPickerCtrl; +class DirPickerCtrl; + +class Cinema; +class Screen; + +class KDMDialog : public wxDialog +{ +public: + KDMDialog (wxWindow *); + +private: + void add_cinema (boost::shared_ptr); + void add_screen (boost::shared_ptr, boost::shared_ptr); + void targets_selection_changed (wxCommandEvent &); + + wxTreeCtrl* _targets; + wxButton* _new_cinema; + wxButton* _new_screen; + wxDatePickerCtrl* _from_date; + wxDatePickerCtrl* _to_date; + wxTimePickerCtrl* _from_time; + wxTimePickerCtrl* _to_time; +#ifdef __WXMSW__ + DirPickerCtrl* _folder; +#else + wxDirPickerCtrl* _folder; +#endif + + wxTreeItemId _root; + std::map > _cinemas; + std::map > _screens; +}; diff --git a/src/wx/wscript b/src/wx/wscript index 4dbb04eea..255c5ab33 100644 --- a/src/wx/wscript +++ b/src/wx/wscript @@ -23,6 +23,7 @@ def build(bld): gain_calculator_dialog.cc job_manager_view.cc job_wrapper.cc + kdm_dialog.cc new_film_dialog.cc properties_dialog.cc server_dialog.cc