Add simple/full interface option and make DCP panel respect it.
authorCarl Hetherington <cth@carlh.net>
Thu, 6 Sep 2018 13:19:33 +0000 (14:19 +0100)
committerCarl Hetherington <cth@carlh.net>
Thu, 6 Sep 2018 13:19:33 +0000 (14:19 +0100)
src/lib/config.cc
src/lib/config.h
src/wx/dcp_panel.cc
src/wx/dcp_panel.h
src/wx/full_config_dialog.cc
src/wx/wx_util.cc
src/wx/wx_util.h

index 76c70ed5dacbf75ca78b66f0077e18af1ba78de8..22eb5b0e2b49e01309184f17ce9f1965060884d7 100644 (file)
@@ -162,6 +162,7 @@ Config::set_defaults ()
        _christie_password = optional<string>();
        _gdc_username = optional<string>();
        _gdc_password = optional<string>();
+       _interface_complexity = INTERFACE_FULL;
 
        _allowed_dcp_frame_rates.clear ();
        _allowed_dcp_frame_rates.push_back (24);
@@ -476,6 +477,11 @@ try
        _gdc_username = f.optional_string_child("GDCUsername");
        _gdc_password = f.optional_string_child("GDCPassword");
 
+       optional<string> ic = f.optional_string_child("InterfaceComplexity");
+       if (ic && *ic == "simple") {
+               _interface_complexity = INTERFACE_SIMPLE;
+       }
+
        /* Replace any cinemas from config.xml with those from the configured file */
        if (boost::filesystem::exists (_cinemas_file)) {
                cxml::Document f ("Cinemas");
@@ -840,6 +846,15 @@ Config::write_config () const
                root->add_child("GDCPassword")->add_child_text(*_gdc_password);
        }
 
+       switch (_interface_complexity) {
+       case INTERFACE_SIMPLE:
+               root->add_child("InterfaceComplexity")->add_child_text("simple");
+               break;
+       case INTERFACE_FULL:
+               root->add_child("InterfaceComplexity")->add_child_text("full");
+               break;
+       }
+
        try {
                doc.write_to_file_formatted(config_file().string());
        } catch (xmlpp::exception& e) {
index 0be3b20b9740c2e435c2adf986bb7f2545812ef4..58db9c2802175a728c29caa73e2f3c6a719534d7 100644 (file)
@@ -75,6 +75,7 @@ public:
                CINEMAS,
                SOUND,
                SOUND_OUTPUT,
+               INTERFACE_COMPLEXITY,
                OTHER
        };
 
@@ -447,6 +448,15 @@ public:
                return _gdc_password;
        }
 
+       enum Interface {
+               INTERFACE_SIMPLE,
+               INTERFACE_FULL
+       };
+
+       Interface interface_complexity () const {
+               return _interface_complexity;
+       }
+
        /* SET (mostly) */
 
        void set_master_encoding_threads (int n) {
@@ -841,6 +851,10 @@ public:
                maybe_set (_gdc_password, boost::optional<std::string>());
        }
 
+       void set_interface_complexity (Interface i) {
+               maybe_set (_interface_complexity, i, INTERFACE_COMPLEXITY);
+       }
+
        void changed (Property p = OTHER);
        boost::signals2::signal<void (Property)> Changed;
        /** Emitted if read() failed on an existing Config file.  There is nothing
@@ -1022,6 +1036,7 @@ private:
        boost::optional<std::string> _christie_password;
        boost::optional<std::string> _gdc_username;
        boost::optional<std::string> _gdc_password;
+       Interface _interface_complexity;
 
        static int const _current_version;
 
index 5c4d3148d233a7b5850ca68329e2a77e330bd1e7..353080928a043039ac167301260f013eeb413a40 100644 (file)
@@ -65,35 +65,16 @@ DCPPanel::DCPPanel (wxNotebook* n, boost::shared_ptr<Film> film)
        _sizer = new wxBoxSizer (wxVERTICAL);
        _panel->SetSizer (_sizer);
 
-       wxGridBagSizer* grid = new wxGridBagSizer (DCPOMATIC_SIZER_X_GAP, DCPOMATIC_SIZER_Y_GAP);
-       _sizer->Add (grid, 0, wxEXPAND | wxALL, 8);
-
-       int r = 0;
+       _grid = new wxGridBagSizer (DCPOMATIC_SIZER_X_GAP, DCPOMATIC_SIZER_Y_GAP);
+       _sizer->Add (_grid, 0, wxEXPAND | wxALL, 8);
 
-       add_label_to_sizer (grid, _panel, _("Name"), true, wxGBPosition (r, 0));
+       _name_label = create_label (_panel, _("Name"), true);
        _name = new wxTextCtrl (_panel, wxID_ANY);
-       grid->Add (_name, wxGBPosition(r, 1), wxDefaultSpan, wxEXPAND | wxLEFT | wxRIGHT);
-       ++r;
-
        FocusManager::instance()->add(_name);
 
-       int flags = wxALIGN_CENTER_VERTICAL;
-#ifdef __WXOSX__
-       flags |= wxALIGN_RIGHT;
-#endif
-
        _use_isdcf_name = new wxCheckBox (_panel, wxID_ANY, _("Use ISDCF name"));
-       grid->Add (_use_isdcf_name, wxGBPosition (r, 0), wxDefaultSpan, flags);
-
-       {
-               wxBoxSizer* s = new wxBoxSizer (wxHORIZONTAL);
-               _edit_isdcf_button = new wxButton (_panel, wxID_ANY, _("Details..."));
-               s->Add (_edit_isdcf_button, 1, wxEXPAND | wxRIGHT, DCPOMATIC_SIZER_X_GAP);
-               _copy_isdcf_name_button = new wxButton (_panel, wxID_ANY, _("Copy as name"));
-               s->Add (_copy_isdcf_name_button, 1, wxEXPAND | wxLEFT, DCPOMATIC_SIZER_X_GAP);
-               grid->Add (s, wxGBPosition (r, 1), wxDefaultSpan, wxEXPAND);
-               ++r;
-       }
+       _edit_isdcf_button = new wxButton (_panel, wxID_ANY, _("Details..."));
+       _copy_isdcf_name_button = new wxButton (_panel, wxID_ANY, _("Copy as name"));
 
        /* wxST_ELLIPSIZE_MIDDLE works around a bug in GTK2 and/or wxWidgets, see
           http://trac.wxwidgets.org/ticket/12539
@@ -103,79 +84,49 @@ DCPPanel::DCPPanel (wxNotebook* n, boost::shared_ptr<Film> film)
                wxALIGN_CENTRE_HORIZONTAL | wxST_NO_AUTORESIZE | wxST_ELLIPSIZE_MIDDLE
                );
 
-       grid->Add (_dcp_name, wxGBPosition(r, 0), wxGBSpan (1, 2), wxALIGN_CENTER_VERTICAL | wxEXPAND);
-       ++r;
-
-       add_label_to_sizer (grid, _panel, _("Content Type"), true, wxGBPosition (r, 0));
+       _dcp_content_type_label = create_label (_panel, _("Content Type"), true);
        _dcp_content_type = new wxChoice (_panel, wxID_ANY);
-       grid->Add (_dcp_content_type, wxGBPosition (r, 1));
-       ++r;
-
-       _notebook = new wxNotebook (_panel, wxID_ANY);
-       _sizer->Add (_notebook, 1, wxEXPAND | wxTOP, 6);
-
-       _notebook->AddPage (make_video_panel (), _("Video"), false);
-       _notebook->AddPage (make_audio_panel (), _("Audio"), false);
 
        _signed = new wxCheckBox (_panel, wxID_ANY, _("Signed"));
-       grid->Add (_signed, wxGBPosition (r, 0), wxGBSpan (1, 2));
-       ++r;
-
        _encrypted = new wxCheckBox (_panel, wxID_ANY, _("Encrypted"));
-       grid->Add (_encrypted, wxGBPosition (r, 0), wxGBSpan (1, 2));
-       ++r;
 
         wxClientDC dc (_panel);
         wxSize size = dc.GetTextExtent (wxT ("GGGGGGGG..."));
         size.SetHeight (-1);
 
-       {
-               add_label_to_sizer (grid, _panel, _("Key"), true, wxGBPosition (r, 0));
-               wxBoxSizer* s = new wxBoxSizer (wxHORIZONTAL);
-               _key = new wxStaticText (_panel, wxID_ANY, "", wxDefaultPosition, size);
-               s->Add (_key, 1, wxALIGN_CENTER_VERTICAL);
-               _edit_key = new wxButton (_panel, wxID_ANY, _("Edit..."));
-               s->Add (_edit_key);
-               grid->Add (s, wxGBPosition (r, 1));
-               ++r;
-       }
+       _key_label = create_label (_panel, _("Key"), true);
+       _key = new wxStaticText (_panel, wxID_ANY, "", wxDefaultPosition, size);
+       _edit_key = new wxButton (_panel, wxID_ANY, _("Edit..."));
 
-       add_label_to_sizer (grid, _panel, _("Reels"), true, wxGBPosition (r, 0));
+       _reels_label = create_label (_panel, _("Reels"), true);
        _reel_type = new wxChoice (_panel, wxID_ANY);
-       grid->Add (_reel_type, wxGBPosition (r, 1), wxDefaultSpan, wxALIGN_CENTER_VERTICAL);
-       ++r;
 
-       add_label_to_sizer (grid, _panel, _("Reel length"), true, wxGBPosition (r, 0));
+       _reel_length_label = create_label (_panel, _("Reel length"), true);
+       _reel_length = new wxSpinCtrl (_panel, wxID_ANY);
+       _reel_length_gb_label = create_label (_panel, _("GB"), false);
 
-       {
-               wxBoxSizer* s = new wxBoxSizer (wxHORIZONTAL);
-               _reel_length = new wxSpinCtrl (_panel, wxID_ANY);
-               s->Add (_reel_length);
-               add_label_to_sizer (s, _panel, _("GB"), false);
-               grid->Add (s, wxGBPosition (r, 1));
-               ++r;
-       }
-
-       add_label_to_sizer (grid, _panel, _("Standard"), true, wxGBPosition (r, 0));
+       _standard_label = create_label (_panel, _("Standard"), true);
        _standard = new wxChoice (_panel, wxID_ANY);
-       grid->Add (_standard, wxGBPosition (r, 1), wxDefaultSpan, wxALIGN_CENTER_VERTICAL);
-       ++r;
 
        _upload_after_make_dcp = new wxCheckBox (_panel, wxID_ANY, _("Upload DCP to TMS after it is made"));
-       grid->Add (_upload_after_make_dcp, wxGBPosition (r, 0), wxGBSpan (1, 2));
-       ++r;
+
+       _notebook = new wxNotebook (_panel, wxID_ANY);
+       _sizer->Add (_notebook, 1, wxEXPAND | wxTOP, 6);
+
+       _notebook->AddPage (make_video_panel (), _("Video"), false);
+       _notebook->AddPage (make_audio_panel (), _("Audio"), false);
 
        _name->Bind                  (wxEVT_TEXT,     boost::bind (&DCPPanel::name_changed, this));
        _use_isdcf_name->Bind        (wxEVT_CHECKBOX, boost::bind (&DCPPanel::use_isdcf_name_toggled, this));
        _edit_isdcf_button->Bind     (wxEVT_BUTTON,   boost::bind (&DCPPanel::edit_isdcf_button_clicked, this));
        _copy_isdcf_name_button->Bind(wxEVT_BUTTON,   boost::bind (&DCPPanel::copy_isdcf_name_button_clicked, this));
-       _dcp_content_type->Bind      (wxEVT_CHOICE,  boost::bind (&DCPPanel::dcp_content_type_changed, this));
+       _dcp_content_type->Bind      (wxEVT_CHOICE,   boost::bind (&DCPPanel::dcp_content_type_changed, this));
        _signed->Bind                (wxEVT_CHECKBOX, boost::bind (&DCPPanel::signed_toggled, this));
        _encrypted->Bind             (wxEVT_CHECKBOX, boost::bind (&DCPPanel::encrypted_toggled, this));
        _edit_key->Bind              (wxEVT_BUTTON,   boost::bind (&DCPPanel::edit_key_clicked, this));
-       _reel_type->Bind             (wxEVT_CHOICE,  boost::bind (&DCPPanel::reel_type_changed, this));
+       _reel_type->Bind             (wxEVT_CHOICE,   boost::bind (&DCPPanel::reel_type_changed, this));
        _reel_length->Bind           (wxEVT_SPINCTRL, boost::bind (&DCPPanel::reel_length_changed, this));
-       _standard->Bind              (wxEVT_CHOICE,  boost::bind (&DCPPanel::standard_changed, this));
+       _standard->Bind              (wxEVT_CHOICE,   boost::bind (&DCPPanel::standard_changed, this));
        _upload_after_make_dcp->Bind (wxEVT_CHECKBOX, boost::bind (&DCPPanel::upload_after_make_dcp_changed, this));
 
        BOOST_FOREACH (DCPContentType const * i, DCPContentType::all()) {
@@ -192,7 +143,100 @@ DCPPanel::DCPPanel (wxNotebook* n, boost::shared_ptr<Film> film)
        _standard->Append (_("SMPTE"));
        _standard->Append (_("Interop"));
 
-       Config::instance()->Changed.connect (boost::bind (&DCPPanel::config_changed, this));
+       Config::instance()->Changed.connect (boost::bind (&DCPPanel::config_changed, this, _1));
+
+       add_to_grid ();
+}
+
+void
+DCPPanel::add_to_grid ()
+{
+       Config::Interface interface = Config::instance()->interface_complexity ();
+
+       int r = 0;
+
+       add_label_to_sizer (_grid, _name_label, true, wxGBPosition (r, 0));
+       _grid->Add (_name, wxGBPosition(r, 1), wxDefaultSpan, wxEXPAND | wxLEFT | wxRIGHT);
+       ++r;
+
+       int flags = wxALIGN_CENTER_VERTICAL;
+#ifdef __WXOSX__
+       flags |= wxALIGN_RIGHT;
+#endif
+
+       _use_isdcf_name->Show (interface == Config::INTERFACE_FULL);
+       _edit_isdcf_button->Show (interface == Config::INTERFACE_FULL);
+       _copy_isdcf_name_button->Show (interface == Config::INTERFACE_FULL);
+
+       if (interface == Config::INTERFACE_FULL) {
+               _grid->Add (_use_isdcf_name, wxGBPosition (r, 0), wxDefaultSpan, flags);
+               {
+                       wxBoxSizer* s = new wxBoxSizer (wxHORIZONTAL);
+                       s->Add (_edit_isdcf_button, 1, wxEXPAND | wxRIGHT, DCPOMATIC_SIZER_X_GAP);
+                       s->Add (_copy_isdcf_name_button, 1, wxEXPAND | wxLEFT, DCPOMATIC_SIZER_X_GAP);
+                       _grid->Add (s, wxGBPosition (r, 1), wxDefaultSpan, wxEXPAND);
+               }
+               ++r;
+       }
+
+       _grid->Add (_dcp_name, wxGBPosition(r, 0), wxGBSpan (1, 2), wxALIGN_CENTER_VERTICAL | wxEXPAND);
+       ++r;
+
+       add_label_to_sizer (_grid, _dcp_content_type_label, true, wxGBPosition (r, 0));
+       _grid->Add (_dcp_content_type, wxGBPosition (r, 1));
+       ++r;
+
+       _signed->Show (interface == Config::INTERFACE_FULL);
+       if (interface == Config::INTERFACE_FULL) {
+               _grid->Add (_signed, wxGBPosition (r, 0), wxGBSpan (1, 2));
+               ++r;
+       }
+
+       _grid->Add (_encrypted, wxGBPosition (r, 0), wxGBSpan (1, 2));
+       ++r;
+
+       _key_label->Show (interface == Config::INTERFACE_FULL);
+       _key->Show (interface == Config::INTERFACE_FULL);
+       _edit_key->Show (interface == Config::INTERFACE_FULL);
+       _reels_label->Show (interface == Config::INTERFACE_FULL);
+       _reel_type->Show (interface == Config::INTERFACE_FULL);
+       _reel_length_label->Show (interface == Config::INTERFACE_FULL);
+       _reel_length->Show (interface == Config::INTERFACE_FULL);
+       _reel_length_gb_label->Show (interface == Config::INTERFACE_FULL);
+       _standard_label->Show (interface == Config::INTERFACE_FULL);
+       _standard->Show (interface == Config::INTERFACE_FULL);
+       _upload_after_make_dcp->Show (interface == Config::INTERFACE_FULL);
+
+       if (interface == Config::INTERFACE_FULL) {
+               add_label_to_sizer (_grid, _key_label, true, wxGBPosition (r, 0));
+               {
+                       wxBoxSizer* s = new wxBoxSizer (wxHORIZONTAL);
+                       s->Add (_key, 1, wxALIGN_CENTER_VERTICAL);
+                       s->Add (_edit_key);
+                       _grid->Add (s, wxGBPosition (r, 1));
+               }
+               ++r;
+
+               add_label_to_sizer (_grid, _reels_label, true, wxGBPosition (r, 0));
+               _grid->Add (_reel_type, wxGBPosition (r, 1), wxDefaultSpan, wxALIGN_CENTER_VERTICAL);
+               ++r;
+
+               add_label_to_sizer (_grid, _reel_length_label, true, wxGBPosition (r, 0));
+               {
+                       wxBoxSizer* s = new wxBoxSizer (wxHORIZONTAL);
+                       s->Add (_reel_length);
+                       add_label_to_sizer (s, _reel_length_gb_label, false);
+                       _grid->Add (s, wxGBPosition (r, 1));
+               }
+               ++r;
+
+               add_label_to_sizer (_grid, _standard_label, true, wxGBPosition (r, 0));
+               _grid->Add (_standard, wxGBPosition (r, 1), wxDefaultSpan, wxALIGN_CENTER_VERTICAL);
+               ++r;
+
+               _grid->Add (_upload_after_make_dcp, wxGBPosition (r, 0), wxGBSpan (1, 2));
+               ++r;
+       }
 }
 
 void
@@ -624,10 +668,17 @@ DCPPanel::three_d_changed ()
 }
 
 void
-DCPPanel::config_changed ()
+DCPPanel::config_changed (Config::Property p)
 {
        _j2k_bandwidth->SetRange (1, Config::instance()->maximum_j2k_bandwidth() / 1000000);
        setup_frame_rate_widget ();
+
+       if (p == Config::INTERFACE_COMPLEXITY) {
+               _grid->Clear ();
+               add_to_grid ();
+               _sizer->Layout ();
+               _grid->Layout ();
+       }
 }
 
 void
index b8a67b2f5613c8acae69632749ecb1260060c394..0311b063e318e2c9fcbc529dad7c5d1a250a942b 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2012-2014 Carl Hetherington <cth@carlh.net>
+    Copyright (C) 2012-2018 Carl Hetherington <cth@carlh.net>
 
     This file is part of DCP-o-matic.
 
@@ -18,6 +18,7 @@
 
 */
 
+#include "lib/config.h"
 #include <boost/shared_ptr.hpp>
 #include <boost/noncopyable.hpp>
 
@@ -31,6 +32,7 @@ class wxChoice;
 class wxButton;
 class wxSpinCtrl;
 class wxSizer;
+class wxGridBagSizer;
 
 class AudioDialog;
 class Film;
@@ -79,6 +81,7 @@ private:
        void setup_frame_rate_widget ();
        void setup_container ();
        void setup_dcp_name ();
+       void add_to_grid ();
 
        int minimum_allowed_audio_channels () const;
 
@@ -86,14 +89,16 @@ private:
        wxPanel* make_video_panel ();
        wxPanel* make_audio_panel ();
 
-       void config_changed ();
+       void config_changed (Config::Property p);
 
        void setup_sensitivity ();
 
        wxPanel* _panel;
        wxNotebook* _notebook;
        wxBoxSizer* _sizer;
+       wxGridBagSizer* _grid;
 
+       wxStaticText* _name_label;
        wxTextCtrl* _name;
        wxStaticText* _dcp_name;
        wxCheckBox* _use_isdcf_name;
@@ -102,6 +107,7 @@ private:
        wxButton* _edit_isdcf_button;
        wxButton* _copy_isdcf_name_button;
        wxSpinCtrl* _j2k_bandwidth;
+       wxStaticText* _dcp_content_type_label;
        wxChoice* _dcp_content_type;
        wxChoice* _frame_rate_choice;
        wxSpinCtrl* _frame_rate_spin;
@@ -112,12 +118,17 @@ private:
        wxButton* _best_frame_rate;
        wxCheckBox* _three_d;
        wxChoice* _resolution;
+       wxStaticText* _standard_label;
        wxChoice* _standard;
        wxCheckBox* _signed;
        wxCheckBox* _encrypted;
+       wxStaticText* _key_label;
        wxStaticText* _key;
        wxButton* _edit_key;
+       wxStaticText* _reels_label;
        wxChoice* _reel_type;
+       wxStaticText* _reel_length_label;
+       wxStaticText* _reel_length_gb_label;
        wxSpinCtrl* _reel_length;
        wxCheckBox* _upload_after_make_dcp;
 
index d21c8a2c11e8d01384fa59f8ce84ede1f2c75127..bb4f43bea667c12b7a42fad3b3d55fe66d81b7c7 100644 (file)
@@ -85,6 +85,11 @@ private:
                int r = 0;
                add_language_controls (table, r);
 
+               add_label_to_sizer (table, _panel, _("Interface complexity"), true, wxGBPosition(r, 0));
+               _interface_complexity = new wxChoice (_panel, wxID_ANY);
+               table->Add (_interface_complexity, wxGBPosition (r, 1));
+               ++r;
+
                add_label_to_sizer (table, _panel, _("Number of threads DCP-o-matic should use"), true, wxGBPosition (r, 0));
                _master_encoding_threads = new wxSpinCtrl (_panel);
                table->Add (_master_encoding_threads, wxGBPosition (r, 1));
@@ -138,6 +143,10 @@ private:
                _config_file->Bind  (wxEVT_FILEPICKER_CHANGED, boost::bind (&FullGeneralPage::config_file_changed,   this));
                _cinemas_file->Bind (wxEVT_FILEPICKER_CHANGED, boost::bind (&FullGeneralPage::cinemas_file_changed,  this));
 
+               _interface_complexity->Append (_("Simple"));
+               _interface_complexity->Append (_("Full"));
+               _interface_complexity->Bind (wxEVT_CHOICE, boost::bind(&FullGeneralPage::interface_complexity_changed, this));
+
                _master_encoding_threads->SetRange (1, 128);
                _master_encoding_threads->Bind (wxEVT_SPINCTRL, boost::bind (&FullGeneralPage::master_encoding_threads_changed, this));
                _server_encoding_threads->SetRange (1, 128);
@@ -157,6 +166,14 @@ private:
        {
                Config* config = Config::instance ();
 
+               switch (config->interface_complexity()) {
+               case Config::INTERFACE_SIMPLE:
+                       checked_set (_interface_complexity, 0);
+                       break;
+               case Config::INTERFACE_FULL:
+                       checked_set (_interface_complexity, 1);
+                       break;
+               }
                checked_set (_master_encoding_threads, config->master_encoding_threads ());
                checked_set (_server_encoding_threads, config->server_encoding_threads ());
 #ifdef DCPOMATIC_HAVE_EBUR128_PATCHED_FFMPEG
@@ -184,6 +201,15 @@ private:
                d->Destroy ();
        }
 
+       void interface_complexity_changed ()
+       {
+               if (_interface_complexity->GetSelection() == 0) {
+                       Config::instance()->set_interface_complexity (Config::INTERFACE_SIMPLE);
+               } else {
+                       Config::instance()->set_interface_complexity (Config::INTERFACE_FULL);
+               }
+       }
+
 
 #ifdef DCPOMATIC_HAVE_EBUR128_PATCHED_FFMPEG
        void analyse_ebur128_changed ()
@@ -248,6 +274,7 @@ private:
                Config::instance()->set_cinemas_file (wx_to_std (_cinemas_file->GetPath ()));
        }
 
+       wxChoice* _interface_complexity;
        wxSpinCtrl* _master_encoding_threads;
        wxSpinCtrl* _server_encoding_threads;
        FilePickerCtrl* _config_file;
index 4fde32674c2129721c3b8c87839c2f14227238e7..7edcabf40e379305d1c336f8e3702610d438d15f 100644 (file)
@@ -36,6 +36,21 @@ using namespace std;
 using namespace boost;
 using dcp::locale_convert;
 
+wxStaticText *
+#ifdef __WXOSX__
+create_label (wxWindow* p, wxString t, bool left)
+#else
+create_label (wxWindow* p, wxString t, bool)
+#endif
+{
+#ifdef __WXOSX__
+       if (left) {
+               t += wxT (":");
+       }
+#endif
+       return new wxStaticText (p, wxID_ANY, t);
+}
+
 /** Add a wxStaticText to a wxSizer, aligning it at vertical centre.
  *  @param s Sizer to add to.
  *  @param p Parent window for the wxStaticText.
@@ -45,42 +60,65 @@ using dcp::locale_convert;
  *  @param prop Proportion to pass when calling Add() on the wxSizer.
  */
 wxStaticText *
-#ifdef __WXOSX__
 add_label_to_sizer (wxSizer* s, wxWindow* p, wxString t, bool left, int prop, int flags)
-#else
-add_label_to_sizer (wxSizer* s, wxWindow* p, wxString t, bool, int prop, int flags)
-#endif
 {
 #ifdef __WXOSX__
        if (left) {
                flags |= wxALIGN_RIGHT;
-               t += wxT (":");
        }
 #endif
-       wxStaticText* m = new wxStaticText (p, wxID_ANY, t);
+       wxStaticText* m = create_label (p, t, left);
        s->Add (m, prop, flags, 6);
        return m;
 }
 
 wxStaticText *
 #ifdef __WXOSX__
-add_label_to_sizer (wxGridBagSizer* s, wxWindow* p, wxString t, bool left, wxGBPosition pos, wxGBSpan span)
+add_label_to_sizer (wxSizer* s, wxStaticText* t, bool left, int prop, int flags)
 #else
-add_label_to_sizer (wxGridBagSizer* s, wxWindow* p, wxString t, bool, wxGBPosition pos, wxGBSpan span)
+add_label_to_sizer (wxSizer* s, wxStaticText* t, bool, int prop, int flags)
 #endif
+{
+#ifdef __WXOSX__
+       if (left) {
+               flags |= wxALIGN_RIGHT;
+       }
+#endif
+       s->Add (t, prop, flags, 6);
+       return t;
+}
+
+wxStaticText *
+add_label_to_sizer (wxGridBagSizer* s, wxWindow* p, wxString t, bool left, wxGBPosition pos, wxGBSpan span)
 {
        int flags = wxALIGN_CENTER_VERTICAL | wxLEFT | wxRIGHT;
 #ifdef __WXOSX__
        if (left) {
                flags |= wxALIGN_RIGHT;
-               t += wxT (":");
        }
 #endif
-       wxStaticText* m = new wxStaticText (p, wxID_ANY, t);
+       wxStaticText* m = create_label (p, t, left);
        s->Add (m, pos, span, flags);
        return m;
 }
 
+wxStaticText *
+#ifdef __WXOSX__
+add_label_to_sizer (wxGridBagSizer* s, wxStaticText* t, bool left, wxGBPosition pos, wxGBSpan span)
+#else
+add_label_to_sizer (wxGridBagSizer* s, wxStaticText* t, bool, wxGBPosition pos, wxGBSpan span)
+#endif
+{
+       int flags = wxALIGN_CENTER_VERTICAL | wxLEFT | wxRIGHT;
+#ifdef __WXOSX__
+       if (left) {
+               flags |= wxALIGN_RIGHT;
+       }
+#endif
+       s->Add (t, pos, span, flags);
+       return t;
+}
+
 /** Pop up an error dialogue box.
  *  @param parent Parent.
  *  @param m Message.
index e1a7af1aaf060f1d1d11262dc6e6dff55eb50d4f..f59f5d68376cc41109981d89543a4f8582f1b30e 100644 (file)
@@ -72,8 +72,11 @@ class wxSplashScreen;
 extern void error_dialog (wxWindow *, wxString, boost::optional<wxString> e = boost::optional<wxString>());
 extern void message_dialog (wxWindow *, wxString);
 extern bool confirm_dialog (wxWindow *, wxString);
+extern wxStaticText* create_label (wxWindow* p, wxString t, bool left);
 extern wxStaticText* add_label_to_sizer (wxSizer *, wxWindow *, wxString, bool left, int prop = 0, int flags = wxALIGN_CENTER_VERTICAL | wxLEFT | wxRIGHT);
+extern wxStaticText* add_label_to_sizer (wxSizer *, wxStaticText *, bool left, int prop = 0, int flags = wxALIGN_CENTER_VERTICAL | wxLEFT | wxRIGHT);
 extern wxStaticText* add_label_to_sizer (wxGridBagSizer *, wxWindow *, wxString, bool, wxGBPosition, wxGBSpan span = wxDefaultSpan);
+extern wxStaticText* add_label_to_sizer (wxGridBagSizer *, wxStaticText *, bool, wxGBPosition, wxGBSpan span = wxDefaultSpan);
 extern std::string wx_to_std (wxString);
 extern wxString std_to_wx (std::string);
 extern void dcpomatic_setup_i18n ();