summaryrefslogtreecommitdiff
path: root/src/wx
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2014-06-02 12:06:20 +0100
committerCarl Hetherington <cth@carlh.net>2014-06-02 12:06:20 +0100
commit3574212ee42b2bd924eb95d5c0f4f69ec9e0a2f0 (patch)
tree24e46f4f566bfb98aa48e9dab602ec1c8d0591d6 /src/wx
parent24d54ea7fe1ba128cf8d3521d6738fc73a7c623e (diff)
parent8fb0f4eaa6d91ca9369f45dd7a57c29149edaaac (diff)
Merge master.
Diffstat (limited to 'src/wx')
-rw-r--r--src/wx/about_dialog.cc2
-rw-r--r--src/wx/config_dialog.cc125
-rw-r--r--src/wx/film_editor.cc18
-rw-r--r--src/wx/kdm_dialog.cc193
-rw-r--r--src/wx/kdm_dialog.h12
-rw-r--r--src/wx/wx_util.h8
6 files changed, 274 insertions, 84 deletions
diff --git a/src/wx/about_dialog.cc b/src/wx/about_dialog.cc
index 276f5507a..105831014 100644
--- a/src/wx/about_dialog.cc
+++ b/src/wx/about_dialog.cc
@@ -162,8 +162,10 @@ AboutDialog::AboutDialog (wxWindow* parent)
tested_by.Add (wxT ("Andreas Eli"));
tested_by.Add (wxT ("Maurizio GiampĂ "));
tested_by.Add (wxT ("Luke Granger-Brown"));
+ tested_by.Add (wxT ("Sumit Guha"));
tested_by.Add (wxT ("Steve Guttag"));
tested_by.Add (wxT ("Patrick Haderer"));
+ tested_by.Add (wxT ("Bill Hamell"));
tested_by.Add (wxT ("Jonathan Jensen"));
tested_by.Add (wxT ("Thierry Journet"));
tested_by.Add (wxT ("Ada de Kamper"));
diff --git a/src/wx/config_dialog.cc b/src/wx/config_dialog.cc
index f06670dfb..631628e1d 100644
--- a/src/wx/config_dialog.cc
+++ b/src/wx/config_dialog.cc
@@ -106,14 +106,6 @@ public:
_num_local_encoding_threads = new wxSpinCtrl (panel);
table->Add (_num_local_encoding_threads, 1);
- add_label_to_sizer (table, panel, _("Maximum JPEG2000 bandwidth"), true);
- _maximum_j2k_bandwidth = new wxSpinCtrl (panel);
- table->Add (_maximum_j2k_bandwidth, 1);
-
- _allow_any_dcp_frame_rate = new wxCheckBox (panel, wxID_ANY, _("Allow any DCP frame rate"));
- table->Add (_allow_any_dcp_frame_rate, 1, wxEXPAND | wxALL);
- table->AddSpacer (0);
-
add_label_to_sizer (table, panel, _("Outgoing mail server"), true);
_mail_server = new wxTextCtrl (panel, wxID_ANY);
table->Add (_mail_server, 1, wxEXPAND | wxALL);
@@ -171,10 +163,6 @@ public:
_num_local_encoding_threads->SetValue (config->num_local_encoding_threads ());
_num_local_encoding_threads->Bind (wxEVT_COMMAND_SPINCTRL_UPDATED, boost::bind (&GeneralPage::num_local_encoding_threads_changed, this));
- _maximum_j2k_bandwidth->SetRange (1, 500);
- _maximum_j2k_bandwidth->SetValue (config->maximum_j2k_bandwidth() / 1000000);
- _maximum_j2k_bandwidth->Bind (wxEVT_COMMAND_SPINCTRL_UPDATED, boost::bind (&GeneralPage::maximum_j2k_bandwidth_changed, this));
-
_mail_server->SetValue (std_to_wx (config->mail_server ()));
_mail_server->Bind (wxEVT_COMMAND_TEXT_UPDATED, boost::bind (&GeneralPage::mail_server_changed, this));
_mail_user->SetValue (std_to_wx (config->mail_user ()));
@@ -187,8 +175,6 @@ public:
_check_for_updates->Bind (wxEVT_COMMAND_CHECKBOX_CLICKED, boost::bind (&GeneralPage::check_for_updates_changed, this));
_check_for_test_updates->SetValue (config->check_for_test_updates ());
_check_for_test_updates->Bind (wxEVT_COMMAND_CHECKBOX_CLICKED, boost::bind (&GeneralPage::check_for_test_updates_changed, this));
- _allow_any_dcp_frame_rate->SetValue (config->allow_any_dcp_frame_rate ());
- _allow_any_dcp_frame_rate->Bind (wxEVT_COMMAND_CHECKBOX_CLICKED, boost::bind (&GeneralPage::allow_any_dcp_frame_rate_changed, this));
return panel;
}
@@ -271,21 +257,9 @@ private:
Config::instance()->set_num_local_encoding_threads (_num_local_encoding_threads->GetValue ());
}
- void maximum_j2k_bandwidth_changed ()
- {
- Config::instance()->set_maximum_j2k_bandwidth (_maximum_j2k_bandwidth->GetValue() * 1000000);
- }
-
- void allow_any_dcp_frame_rate_changed ()
- {
- Config::instance()->set_allow_any_dcp_frame_rate (_allow_any_dcp_frame_rate->GetValue ());
- }
-
wxCheckBox* _set_language;
wxChoice* _language;
wxSpinCtrl* _num_local_encoding_threads;
- wxSpinCtrl* _maximum_j2k_bandwidth;
- wxCheckBox* _allow_any_dcp_frame_rate;
wxTextCtrl* _mail_server;
wxTextCtrl* _mail_user;
wxTextCtrl* _mail_password;
@@ -742,6 +716,104 @@ private:
wxTextCtrl* _kdm_email;
};
+class AdvancedPage : public wxStockPreferencesPage, public Page
+{
+public:
+
+ AdvancedPage (wxSize panel_size, int border)
+ : wxStockPreferencesPage (Kind_Advanced)
+ , Page (panel_size, border)
+ {}
+
+ wxWindow* CreateWindow (wxWindow* parent)
+ {
+ wxPanel* panel = new wxPanel (parent);
+
+ wxBoxSizer* s = new wxBoxSizer (wxVERTICAL);
+ panel->SetSizer (s);
+
+ wxFlexGridSizer* table = new wxFlexGridSizer (2, DCPOMATIC_SIZER_X_GAP, DCPOMATIC_SIZER_Y_GAP);
+ table->AddGrowableCol (1, 1);
+ s->Add (table, 1, wxALL | wxEXPAND, _border);
+
+ add_label_to_sizer (table, panel, _("Maximum JPEG2000 bandwidth"), true);
+ _maximum_j2k_bandwidth = new wxSpinCtrl (panel);
+ table->Add (_maximum_j2k_bandwidth, 1);
+
+ _allow_any_dcp_frame_rate = new wxCheckBox (panel, wxID_ANY, _("Allow any DCP frame rate"));
+ table->Add (_allow_any_dcp_frame_rate, 1, wxEXPAND | wxALL);
+ table->AddSpacer (0);
+
+ add_label_to_sizer (table, panel, _("Log"), true);
+ _log_general = new wxCheckBox (panel, wxID_ANY, _("General"));
+ table->Add (_log_general, 1, wxEXPAND | wxALL);
+ _log_warning = new wxCheckBox (panel, wxID_ANY, _("Warnings"));
+ table->AddSpacer (0);
+ table->Add (_log_warning, 1, wxEXPAND | wxALL);
+ _log_error = new wxCheckBox (panel, wxID_ANY, _("Errors"));
+ table->AddSpacer (0);
+ table->Add (_log_error, 1, wxEXPAND | wxALL);
+ _log_timing = new wxCheckBox (panel, wxID_ANY, _("Timing"));
+ table->AddSpacer (0);
+ table->Add (_log_timing, 1, wxEXPAND | wxALL);
+
+ Config* config = Config::instance ();
+
+ _maximum_j2k_bandwidth->SetRange (1, 500);
+ _maximum_j2k_bandwidth->SetValue (config->maximum_j2k_bandwidth() / 1000000);
+ _maximum_j2k_bandwidth->Bind (wxEVT_COMMAND_SPINCTRL_UPDATED, boost::bind (&AdvancedPage::maximum_j2k_bandwidth_changed, this));
+ _allow_any_dcp_frame_rate->SetValue (config->allow_any_dcp_frame_rate ());
+ _allow_any_dcp_frame_rate->Bind (wxEVT_COMMAND_CHECKBOX_CLICKED, boost::bind (&AdvancedPage::allow_any_dcp_frame_rate_changed, this));
+ _log_general->SetValue (config->log_types() & Log::TYPE_GENERAL);
+ _log_general->Bind (wxEVT_COMMAND_CHECKBOX_CLICKED, boost::bind (&AdvancedPage::log_changed, this));
+ _log_warning->SetValue (config->log_types() & Log::TYPE_WARNING);
+ _log_warning->Bind (wxEVT_COMMAND_CHECKBOX_CLICKED, boost::bind (&AdvancedPage::log_changed, this));
+ _log_error->SetValue (config->log_types() & Log::TYPE_ERROR);
+ _log_error->Bind (wxEVT_COMMAND_CHECKBOX_CLICKED, boost::bind (&AdvancedPage::log_changed, this));
+ _log_timing->SetValue (config->log_types() & Log::TYPE_TIMING);
+ _log_timing->Bind (wxEVT_COMMAND_CHECKBOX_CLICKED, boost::bind (&AdvancedPage::log_changed, this));
+
+ return panel;
+ }
+
+private:
+
+ void maximum_j2k_bandwidth_changed ()
+ {
+ Config::instance()->set_maximum_j2k_bandwidth (_maximum_j2k_bandwidth->GetValue() * 1000000);
+ }
+
+ void allow_any_dcp_frame_rate_changed ()
+ {
+ Config::instance()->set_allow_any_dcp_frame_rate (_allow_any_dcp_frame_rate->GetValue ());
+ }
+
+ void log_changed ()
+ {
+ int types = 0;
+ if (_log_general->GetValue ()) {
+ types |= Log::TYPE_GENERAL;
+ }
+ if (_log_warning->GetValue ()) {
+ types |= Log::TYPE_WARNING;
+ }
+ if (_log_error->GetValue ()) {
+ types |= Log::TYPE_ERROR;
+ }
+ if (_log_timing->GetValue ()) {
+ types |= Log::TYPE_TIMING;
+ }
+ Config::instance()->set_log_types (types);
+ }
+
+ wxSpinCtrl* _maximum_j2k_bandwidth;
+ wxCheckBox* _allow_any_dcp_frame_rate;
+ wxCheckBox* _log_general;
+ wxCheckBox* _log_warning;
+ wxCheckBox* _log_error;
+ wxCheckBox* _log_timing;
+};
+
wxPreferencesEditor*
create_config_dialog ()
{
@@ -768,5 +840,6 @@ create_config_dialog ()
e->AddPage (new ColourConversionsPage (ps, border));
e->AddPage (new TMSPage (ps, border));
e->AddPage (new KDMEmailPage (ps, border));
+ e->AddPage (new AdvancedPage (ps, border));
return e;
}
diff --git a/src/wx/film_editor.cc b/src/wx/film_editor.cc
index c20a12324..a6cb77f85 100644
--- a/src/wx/film_editor.cc
+++ b/src/wx/film_editor.cc
@@ -275,25 +275,19 @@ FilmEditor::make_content_panel ()
_content->InsertColumn (0, wxT(""));
_content->SetColumnWidth (0, 512);
-#ifdef DCPOMATIC_OSX
- int const pad = 2;
-#else
- int const pad = 0;
-#endif
-
wxBoxSizer* b = new wxBoxSizer (wxVERTICAL);
_content_add_file = new wxButton (_content_panel, wxID_ANY, _("Add file(s)..."));
- b->Add (_content_add_file, 1, wxEXPAND | wxALL, pad);
+ b->Add (_content_add_file, 1, wxEXPAND | wxALL, DCPOMATIC_BUTTON_STACK_GAP);
_content_add_folder = new wxButton (_content_panel, wxID_ANY, _("Add folder..."));
- b->Add (_content_add_folder, 1, wxEXPAND | wxALL, pad);
+ b->Add (_content_add_folder, 1, wxEXPAND | wxALL, DCPOMATIC_BUTTON_STACK_GAP);
_content_remove = new wxButton (_content_panel, wxID_ANY, _("Remove"));
- b->Add (_content_remove, 1, wxEXPAND | wxALL, pad);
+ b->Add (_content_remove, 1, wxEXPAND | wxALL, DCPOMATIC_BUTTON_STACK_GAP);
_content_earlier = new wxButton (_content_panel, wxID_ANY, _("Up"));
- b->Add (_content_earlier, 1, wxEXPAND | wxALL, pad);
+ b->Add (_content_earlier, 1, wxEXPAND | wxALL, DCPOMATIC_BUTTON_STACK_GAP);
_content_later = new wxButton (_content_panel, wxID_ANY, _("Down"));
- b->Add (_content_later, 1, wxEXPAND | wxALL, pad);
+ b->Add (_content_later, 1, wxEXPAND | wxALL, DCPOMATIC_BUTTON_STACK_GAP);
_content_timeline = new wxButton (_content_panel, wxID_ANY, _("Timeline..."));
- b->Add (_content_timeline, 1, wxEXPAND | wxALL, pad);
+ b->Add (_content_timeline, 1, wxEXPAND | wxALL, DCPOMATIC_BUTTON_STACK_GAP);
s->Add (b, 0, wxALL, 4);
diff --git a/src/wx/kdm_dialog.cc b/src/wx/kdm_dialog.cc
index 5fb031324..42b8297f0 100644
--- a/src/wx/kdm_dialog.cc
+++ b/src/wx/kdm_dialog.cc
@@ -22,6 +22,7 @@
#include <wx/timectrl.h>
#include <wx/stdpaths.h>
#include <wx/listctrl.h>
+#include <libcxml/cxml.h>
#include "lib/cinema.h"
#include "lib/config.h"
#include "lib/film.h"
@@ -40,17 +41,29 @@ using std::map;
using std::list;
using std::pair;
using std::cout;
+using std::vector;
using std::make_pair;
using boost::shared_ptr;
KDMDialog::KDMDialog (wxWindow* parent, boost::shared_ptr<const Film> film)
: wxDialog (parent, wxID_ANY, _("Make KDMs"))
{
+ /* Main sizer */
wxBoxSizer* vertical = new wxBoxSizer (wxVERTICAL);
- wxBoxSizer* targets = new wxBoxSizer (wxHORIZONTAL);
+
+ /* Font for sub-headings */
+ wxFont subheading_font (*wxNORMAL_FONT);
+ subheading_font.SetWeight (wxFONTWEIGHT_BOLD);
+
+
+ /* Sub-heading: Screens */
+ wxStaticText* h = new wxStaticText (this, wxID_ANY, _("Screens"));
+ h->SetFont (subheading_font);
+ vertical->Add (h, 0, wxALIGN_CENTER_VERTICAL);
+ 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);
+ targets->Add (_targets, 1, wxEXPAND | wxTOP | wxRIGHT, DCPOMATIC_SIZER_GAP);
_root = _targets->AddRoot ("Foo");
@@ -64,24 +77,30 @@ KDMDialog::KDMDialog (wxWindow* parent, boost::shared_ptr<const Film> film)
wxBoxSizer* target_buttons = new wxBoxSizer (wxVERTICAL);
_add_cinema = new wxButton (this, wxID_ANY, _("Add Cinema..."));
- target_buttons->Add (_add_cinema, 1, wxEXPAND, 6);
+ target_buttons->Add (_add_cinema, 1, wxEXPAND | wxALL, DCPOMATIC_BUTTON_STACK_GAP);
_edit_cinema = new wxButton (this, wxID_ANY, _("Edit Cinema..."));
- target_buttons->Add (_edit_cinema, 1, wxEXPAND, 6);
+ target_buttons->Add (_edit_cinema, 1, wxEXPAND | wxALL, DCPOMATIC_BUTTON_STACK_GAP);
_remove_cinema = new wxButton (this, wxID_ANY, _("Remove Cinema"));
- target_buttons->Add (_remove_cinema, 1, wxEXPAND, 6);
+ target_buttons->Add (_remove_cinema, 1, wxEXPAND | wxALL, DCPOMATIC_BUTTON_STACK_GAP);
_add_screen = new wxButton (this, wxID_ANY, _("Add Screen..."));
- target_buttons->Add (_add_screen, 1, wxEXPAND, 6);
+ target_buttons->Add (_add_screen, 1, wxEXPAND | wxALL, DCPOMATIC_BUTTON_STACK_GAP);
_edit_screen = new wxButton (this, wxID_ANY, _("Edit Screen..."));
- target_buttons->Add (_edit_screen, 1, wxEXPAND, 6);
+ target_buttons->Add (_edit_screen, 1, wxEXPAND | wxALL, DCPOMATIC_BUTTON_STACK_GAP);
_remove_screen = new wxButton (this, wxID_ANY, _("Remove Screen"));
- target_buttons->Add (_remove_screen, 1, wxEXPAND, 6);
+ target_buttons->Add (_remove_screen, 1, wxEXPAND | wxALL, DCPOMATIC_BUTTON_STACK_GAP);
+
+ targets->Add (target_buttons, 0, 0);
- targets->Add (target_buttons, 0, 0, 6);
+ vertical->Add (targets, 1, wxEXPAND);
- vertical->Add (targets, 1, wxEXPAND | wxALL, 6);
- wxFlexGridSizer* table = new wxFlexGridSizer (3, 2, 6);
+ /* Sub-heading: Timing */
+ h = new wxStaticText (this, wxID_ANY, _("Timing"));
+ h->SetFont (subheading_font);
+ vertical->Add (h, 0, wxALIGN_CENTER_VERTICAL | wxTOP, DCPOMATIC_SIZER_Y_GAP * 2);
+
+ wxFlexGridSizer* table = new wxFlexGridSizer (3, DCPOMATIC_SIZER_X_GAP, DCPOMATIC_SIZER_Y_GAP);
add_label_to_sizer (table, this, _("From"), true);
wxDateTime from;
from.SetToCurrent ();
@@ -99,30 +118,46 @@ KDMDialog::KDMDialog (wxWindow* parent, boost::shared_ptr<const Film> film)
_until_time = new wxTimePickerCtrl (this, wxID_ANY, to);
table->Add (_until_time, 1, wxEXPAND);
- vertical->Add (table, 0, wxEXPAND | wxALL, 6);
+ vertical->Add (table, 0, wxEXPAND | wxTOP, DCPOMATIC_SIZER_GAP);
+
- _dcps = new wxListCtrl (this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLC_REPORT | wxLC_SINGLE_SEL);
- wxListItem ip;
- ip.SetId (0);
- ip.SetText (_("DCP"));
- ip.SetWidth (400);
- _dcps->InsertColumn (0, ip);
- vertical->Add (_dcps, 0, wxEXPAND | wxALL, 6);
+ /* Sub-heading: CPL */
+ h = new wxStaticText (this, wxID_ANY, _("CPL"));
+ h->SetFont (subheading_font);
+ vertical->Add (h, 0, wxALIGN_CENTER_VERTICAL | wxTOP, DCPOMATIC_SIZER_Y_GAP * 2);
- list<boost::filesystem::path> dcps = film->dcps ();
- for (list<boost::filesystem::path>::const_iterator i = dcps.begin(); i != dcps.end(); ++i) {
- wxListItem item;
- int const n = _dcps->GetItemCount ();
- item.SetId (n);
- _dcps->InsertItem (item);
- _dcps->SetItem (n, 0, std_to_wx (i->string ()));
-
- if (dcps.size() == 1 || i->string() == film->dcp_name ()) {
- _dcps->SetItemState (n, wxLIST_STATE_SELECTED, wxLIST_STATE_SELECTED);
- }
- }
+ /* CPL choice */
+ wxBoxSizer* s = new wxBoxSizer (wxHORIZONTAL);
+ add_label_to_sizer (s, this, _("CPL"), true);
+ _cpl = new wxChoice (this, wxID_ANY);
+ s->Add (_cpl, 1, wxEXPAND);
+ _cpl_browse = new wxButton (this, wxID_ANY, _("Browse..."));
+ s->Add (_cpl_browse, 0);
+ vertical->Add (s, 0, wxEXPAND | wxTOP, DCPOMATIC_SIZER_GAP + 2);
+
+ /* CPL details */
+ table = new wxFlexGridSizer (2, DCPOMATIC_SIZER_X_GAP, DCPOMATIC_SIZER_Y_GAP);
+ add_label_to_sizer (table, this, _("DCP directory"), true);
+ _dcp_directory = new wxStaticText (this, wxID_ANY, "");
+ table->Add (_dcp_directory);
+ add_label_to_sizer (table, this, _("CPL ID"), true);
+ _cpl_id = new wxStaticText (this, wxID_ANY, "");
+ table->Add (_cpl_id);
+ add_label_to_sizer (table, this, _("CPL annotation text"), true);
+ _cpl_annotation_text = new wxStaticText (this, wxID_ANY, "");
+ table->Add (_cpl_annotation_text);
+ vertical->Add (table, 0, wxEXPAND | wxTOP, DCPOMATIC_SIZER_GAP + 2);
+
+ _cpls = film->cpls ();
+ update_cpl_choice ();
- table = new wxFlexGridSizer (2, 2, 6);
+
+ /* 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);
+
+ table = new wxFlexGridSizer (2, DCPOMATIC_SIZER_X_GAP, 0);
_write_to = new wxRadioButton (this, wxID_ANY, _("Write to"));
table->Add (_write_to, 1, wxEXPAND);
@@ -141,15 +176,22 @@ KDMDialog::KDMDialog (wxWindow* parent, boost::shared_ptr<const Film> film)
table->Add (_email, 1, wxEXPAND);
table->AddSpacer (0);
- vertical->Add (table, 0, wxEXPAND | wxALL, 6);
+ vertical->Add (table, 0, wxEXPAND | wxTOP, DCPOMATIC_SIZER_GAP);
+
+ /* Make an overall sizer to get a nice border, and put some buttons in */
+
+ wxBoxSizer* overall_sizer = new wxBoxSizer (wxVERTICAL);
+ overall_sizer->Add (vertical, 0, wxEXPAND | wxTOP | wxLEFT | wxRIGHT, DCPOMATIC_DIALOG_BORDER);
wxSizer* buttons = CreateSeparatedButtonSizer (wxOK | wxCANCEL);
if (buttons) {
- vertical->Add (buttons, wxSizerFlags().Expand().DoubleBorder());
+ overall_sizer->Add (buttons, 0, wxEXPAND | wxTOP, DCPOMATIC_SIZER_Y_GAP);
}
_write_to->SetValue (true);
+ /* Bind */
+
_targets->Bind (wxEVT_COMMAND_TREE_SEL_CHANGED, boost::bind (&KDMDialog::setup_sensitivity, this));
_add_cinema->Bind (wxEVT_COMMAND_BUTTON_CLICKED, boost::bind (&KDMDialog::add_cinema_clicked, this));
@@ -160,17 +202,17 @@ KDMDialog::KDMDialog (wxWindow* parent, boost::shared_ptr<const Film> film)
_edit_screen->Bind (wxEVT_COMMAND_BUTTON_CLICKED, boost::bind (&KDMDialog::edit_screen_clicked, this));
_remove_screen->Bind (wxEVT_COMMAND_BUTTON_CLICKED, boost::bind (&KDMDialog::remove_screen_clicked, this));
- _dcps->Bind (wxEVT_COMMAND_LIST_ITEM_SELECTED, boost::bind (&KDMDialog::setup_sensitivity, this));
- _dcps->Bind (wxEVT_COMMAND_LIST_ITEM_DESELECTED, boost::bind (&KDMDialog::setup_sensitivity, this));
+ _cpl->Bind (wxEVT_COMMAND_CHOICE_SELECTED, boost::bind (&KDMDialog::update_cpl_summary, this));
+ _cpl_browse->Bind (wxEVT_COMMAND_BUTTON_CLICKED, boost::bind (&KDMDialog::cpl_browse_clicked, this));
_write_to->Bind (wxEVT_COMMAND_RADIOBUTTON_SELECTED, boost::bind (&KDMDialog::setup_sensitivity, this));
_email->Bind (wxEVT_COMMAND_RADIOBUTTON_SELECTED, boost::bind (&KDMDialog::setup_sensitivity, this));
setup_sensitivity ();
-
- SetSizer (vertical);
- vertical->Layout ();
- vertical->SetSizeHints (this);
+
+ SetSizer (overall_sizer);
+ overall_sizer->Layout ();
+ overall_sizer->SetSizeHints (this);
}
list<pair<wxTreeItemId, shared_ptr<Cinema> > >
@@ -212,7 +254,7 @@ KDMDialog::setup_sensitivity ()
{
bool const sc = selected_cinemas().size() == 1;
bool const ss = selected_screens().size() == 1;
- bool const sd = _dcps->GetNextItem (-1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED) != -1;
+ bool const sd = _cpl->GetSelection() != -1;
_edit_cinema->Enable (sc);
_remove_cinema->Enable (sc);
@@ -419,11 +461,11 @@ KDMDialog::until () const
}
boost::filesystem::path
-KDMDialog::dcp () const
+KDMDialog::cpl () const
{
- int const item = _dcps->GetNextItem (-1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED);
+ int const item = _cpl->GetSelection ();
assert (item >= 0);
- return wx_to_std (_dcps->GetItemText (item));
+ return _cpls[item].cpl_file;
}
boost::filesystem::path
@@ -437,3 +479,66 @@ KDMDialog::write_to () const
{
return _write_to->GetValue ();
}
+
+void
+KDMDialog::update_cpl_choice ()
+{
+ _cpl->Clear ();
+
+ for (vector<CPLSummary>::const_iterator i = _cpls.begin(); i != _cpls.end(); ++i) {
+ _cpl->Append (std_to_wx (i->cpl_id));
+
+ if (_cpls.size() > 0) {
+ _cpl->SetSelection (0);
+ }
+ }
+
+ update_cpl_summary ();
+}
+
+void
+KDMDialog::update_cpl_summary ()
+{
+ int const n = _cpl->GetSelection();
+ if (n == wxNOT_FOUND) {
+ return;
+ }
+
+ _dcp_directory->SetLabel (std_to_wx (_cpls[n].dcp_directory));
+ _cpl_id->SetLabel (std_to_wx (_cpls[n].cpl_id));
+ _cpl_annotation_text->SetLabel (std_to_wx (_cpls[n].cpl_annotation_text));
+}
+
+void
+KDMDialog::cpl_browse_clicked ()
+{
+ wxFileDialog d (this, _("Select CPL XML file"), wxEmptyString, wxEmptyString, "*.xml");
+ if (d.ShowModal() == wxID_CANCEL) {
+ return;
+ }
+
+ boost::filesystem::path cpl_file (wx_to_std (d.GetPath ()));
+ boost::filesystem::path dcp_dir = cpl_file.parent_path ();
+
+ /* XXX: hack alert */
+ cxml::Document cpl_document ("CompositionPlaylist");
+ cpl_document.read_file (cpl_file);
+
+ try {
+ _cpls.push_back (
+ CPLSummary (
+ dcp_dir.filename().string(),
+ cpl_document.string_child("Id").substr (9),
+ cpl_document.string_child ("ContentTitleText"),
+ cpl_file
+ )
+ );
+ } catch (cxml::Error) {
+ error_dialog (this, _("This is not a valid CPL file"));
+ return;
+ }
+
+ update_cpl_choice ();
+ _cpl->SetSelection (_cpls.size() - 1);
+ update_cpl_summary ();
+}
diff --git a/src/wx/kdm_dialog.h b/src/wx/kdm_dialog.h
index db51d6d03..6327b29e8 100644
--- a/src/wx/kdm_dialog.h
+++ b/src/wx/kdm_dialog.h
@@ -45,7 +45,7 @@ public:
/** @return KDM until time in local time */
boost::posix_time::ptime until () const;
- boost::filesystem::path dcp () const;
+ boost::filesystem::path cpl () const;
boost::filesystem::path directory () const;
bool write_to () const;
@@ -61,6 +61,9 @@ private:
std::list<std::pair<wxTreeItemId, boost::shared_ptr<Cinema> > > selected_cinemas () const;
std::list<std::pair<wxTreeItemId, boost::shared_ptr<Screen> > > selected_screens () const;
void setup_sensitivity ();
+ void update_cpl_choice ();
+ void update_cpl_summary ();
+ void cpl_browse_clicked ();
static boost::posix_time::ptime posix_time (wxDatePickerCtrl *, wxTimePickerCtrl *);
@@ -75,7 +78,11 @@ private:
wxDatePickerCtrl* _until_date;
wxTimePickerCtrl* _from_time;
wxTimePickerCtrl* _until_time;
- wxListCtrl* _dcps;
+ wxChoice* _cpl;
+ wxButton* _cpl_browse;
+ wxStaticText* _dcp_directory;
+ wxStaticText* _cpl_id;
+ wxStaticText* _cpl_annotation_text;
wxRadioButton* _write_to;
#ifdef DCPOMATIC_USE_OWN_DIR_PICKER
DirPickerCtrl* _folder;
@@ -87,4 +94,5 @@ private:
wxTreeItemId _root;
std::map<wxTreeItemId, boost::shared_ptr<Cinema> > _cinemas;
std::map<wxTreeItemId, boost::shared_ptr<Screen> > _screens;
+ std::vector<CPLSummary> _cpls;
};
diff --git a/src/wx/wx_util.h b/src/wx/wx_util.h
index 585541150..56ed500f6 100644
--- a/src/wx/wx_util.h
+++ b/src/wx/wx_util.h
@@ -35,8 +35,16 @@ class wxGridBagSizer;
#define DCPOMATIC_SIZER_X_GAP 8
#define DCPOMATIC_SIZER_Y_GAP 8
+#define DCPOMATIC_SIZER_GAP 8
#define DCPOMATIC_DIALOG_BORDER 12
+/** Spacing to use between buttons in a vertical line */
+#ifdef DCPOMATIC_OSX
+#define DCPOMATIC_BUTTON_STACK_GAP 2
+#else
+#define DCPOMATIC_BUTTON_STACK_GAP 0
+#endif
+
/** @file src/wx/wx_util.h
* @brief Some utility functions and classes.
*/