Some work on KDM UI.
authorCarl Hetherington <cth@carlh.net>
Sun, 6 Jan 2013 02:09:08 +0000 (02:09 +0000)
committerCarl Hetherington <cth@carlh.net>
Sun, 6 Jan 2013 02:09:08 +0000 (02:09 +0000)
src/lib/cinema.h [new file with mode: 0644]
src/lib/util.cc
src/tools/dvdomatic.cc
src/wx/kdm_dialog.cc [new file with mode: 0644]
src/wx/kdm_dialog.h [new file with mode: 0644]
src/wx/wscript

diff --git a/src/lib/cinema.h b/src/lib/cinema.h
new file mode 100644 (file)
index 0000000..232fc5e
--- /dev/null
@@ -0,0 +1,23 @@
+#include <libdcp/certificates.h>
+
+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<Screen> screens;
+};
index 424c736c2a7640418bc3e35b0f1c9f7f1332d291..9d42a52e50f06a980464b3f1e17debb5b2b38edb 100644 (file)
@@ -43,6 +43,7 @@
 #include <magick/MagickCore.h>
 #include <magick/version.h>
 #include <libdcp/version.h>
+#include <libdcp/util.h>
 extern "C" {
 #include <libavcodec/avcodec.h>
 #include <libavformat/avformat.h>
@@ -230,7 +231,7 @@ seconds (struct timeval t)
 void
 dvdomatic_setup ()
 {
-       libdcp_setup ();
+       libdcp::init ();
        
        Format::setup_formats ();
        DCPContentType::setup_dcp_content_types ();
index d5dca2ab4eb3d185cd59e2851a2b498dcbed8883..cfdd03a30549c3f7e7e58dd4374944eb550f03ee 100644 (file)
@@ -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 (file)
index 0000000..ba478f7
--- /dev/null
@@ -0,0 +1,140 @@
+/*
+    Copyright (C) 2012 Carl Hetherington <cth@carlh.net>
+
+    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 <wx/treectrl.h>
+#include <wx/datectrl.h>
+#include <wx/timectrl.h>
+#include "lib/cinema.h"
+#include "kdm_dialog.h"
+#include "wx_util.h"
+#ifdef __WXMSW__
+#include "dir_picker_ctrl.h"
+#else
+#include <wx/filepicker.h>
+#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<Cinema> csy (new Cinema ("City Screen York"));
+       add_cinema (csy);
+       add_screen (csy, shared_ptr<Screen> (new Screen ("Screen 1")));
+       add_screen (csy, shared_ptr<Screen> (new Screen ("Screen 2")));
+       add_screen (csy, shared_ptr<Screen> (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<Cinema> c)
+{
+       _cinemas[_targets->AppendItem (_root, std_to_wx (c->name))] = c;
+}
+
+void
+KDMDialog::add_screen (shared_ptr<Cinema> c, shared_ptr<Screen> s)
+{
+       map<wxTreeItemId, shared_ptr<Cinema> >::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 (file)
index 0000000..fe44bb8
--- /dev/null
@@ -0,0 +1,60 @@
+/*
+    Copyright (C) 2012 Carl Hetherington <cth@carlh.net>
+
+    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 <map>
+#include <boost/shared_ptr.hpp>
+#include <wx/wx.h>
+#include <wx/treectrl.h>
+
+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<Cinema>);
+       void add_screen (boost::shared_ptr<Cinema>, boost::shared_ptr<Screen>);
+       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<wxTreeItemId, boost::shared_ptr<Cinema> > _cinemas;
+       std::map<wxTreeItemId, boost::shared_ptr<Screen> > _screens;
+};
index 4dbb04eeacaa4cc0da3155f09e6243e5934b7dbb..255c5ab33e55954f529cc81f1fe442dc8f005ef2 100644 (file)
@@ -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