Use a label rather than a tooltip to tell users why they can't refer to DCPs.
authorCarl Hetherington <cth@carlh.net>
Tue, 27 Mar 2018 22:43:43 +0000 (23:43 +0100)
committerCarl Hetherington <cth@carlh.net>
Tue, 27 Mar 2018 22:43:43 +0000 (23:43 +0100)
Tooltips don't seem to work on disabled widgets in Windows (at least).

ChangeLog
src/wx/audio_panel.cc
src/wx/audio_panel.h
src/wx/content_sub_panel.cc
src/wx/content_sub_panel.h
src/wx/subtitle_panel.cc
src/wx/subtitle_panel.h
src/wx/video_panel.cc
src/wx/video_panel.h

index 709ca463acfe1e1a5bb95d8a8a526ddae9e132d0..129e9ce2cf5ec9d77fccbba4c90f0e81fd061de7 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2018-03-27  Carl Hetherington  <cth@carlh.net>
+
+       * Use a label rather than a tooltip to tell users why they can't
+       refer to DCPs.
+
 2018-03-26  Carl Hetherington  <cth@carlh.net>
 
        * Add real-time mouse cursor readout in audio analysis (rest of #1082)
index 14d8db07e5798339947a882ba25817885dd97113..b60d5d1213f2ad728d48e7361476a080042b8e06 100644 (file)
@@ -48,15 +48,26 @@ AudioPanel::AudioPanel (ContentPanel* p)
        : ContentSubPanel (p, _("Audio"))
        , _audio_dialog (0)
 {
+       wxBoxSizer* reference_sizer = new wxBoxSizer (wxVERTICAL);
+
+       _reference = new wxCheckBox (this, wxID_ANY, _("Use this DCP's audio as OV and make VF"));
+       reference_sizer->Add (_reference, 0, wxLEFT | wxRIGHT | wxTOP, DCPOMATIC_SIZER_GAP);
+
+       _reference_note = new wxStaticText (this, wxID_ANY, _(""));
+       _reference_note->Wrap (200);
+       reference_sizer->Add (_reference_note, 0, wxLEFT | wxRIGHT, DCPOMATIC_SIZER_GAP);
+       wxFont font = _reference_note->GetFont();
+       font.SetStyle(wxFONTSTYLE_ITALIC);
+       font.SetPointSize(font.GetPointSize() - 1);
+       _reference_note->SetFont(font);
+
+       _sizer->Add (reference_sizer);
+
        wxGridBagSizer* grid = new wxGridBagSizer (DCPOMATIC_SIZER_X_GAP, DCPOMATIC_SIZER_Y_GAP);
        _sizer->Add (grid, 0, wxALL, 8);
 
        int r = 0;
 
-       _reference = new wxCheckBox (this, wxID_ANY, _("Use this DCP's audio as OV and make VF"));
-       grid->Add (_reference, wxGBPosition (r, 0), wxGBSpan (1, 3));
-       ++r;
-
        _show = new wxButton (this, wxID_ANY, _("Show graph of audio levels..."));
        grid->Add (_show, wxGBPosition (r, 0), wxGBSpan (1, 2));
        _peak = new wxStaticText (this, wxID_ANY, wxT (""));
@@ -100,9 +111,6 @@ AudioPanel::AudioPanel (ContentPanel* p)
 
        _description = new wxStaticText (this, wxID_ANY, wxT (" \n"), wxDefaultPosition, wxDefaultSize);
        _sizer->Add (_description, 0, wxALL, 12);
-       wxFont font = _description->GetFont();
-       font.SetStyle (wxFONTSTYLE_ITALIC);
-       font.SetPointSize (font.GetPointSize() - 1);
        _description->SetFont (font);
        ++r;
 
@@ -269,7 +277,7 @@ AudioPanel::setup_sensitivity ()
 
        string why_not;
        bool const can_reference = dcp && dcp->can_reference_audio (why_not);
-       setup_refer_button (_reference, dcp, can_reference, why_not);
+       setup_refer_button (_reference, _reference_note, dcp, can_reference, why_not);
 
        if (_reference->GetValue ()) {
                _gain->wrapped()->Enable (false);
index ede0ddb26689a6f6e0107dbd34489f0f12360601..5551b396dc990b6cd4f89ca047c923a428e0962c 100644 (file)
@@ -51,6 +51,7 @@ private:
        void reference_clicked ();
 
        wxCheckBox* _reference;
+       wxStaticText* _reference_note;
        wxButton* _show;
        ContentSpinCtrlDouble<AudioContent>* _gain;
        wxButton* _gain_calculate_button;
index 92eb5a32fd1fca1fc8c351a50b1ad692b77b858d..dc6c1d2b8666ba94b1f6da86f0824f5e2a65ba2c 100644 (file)
@@ -42,16 +42,23 @@ ContentSubPanel::ContentSubPanel (ContentPanel* p, wxString name)
 }
 
 void
-ContentSubPanel::setup_refer_button (wxCheckBox* button, shared_ptr<DCPContent> dcp, bool can_reference, string why_not) const
+ContentSubPanel::setup_refer_button (wxCheckBox* button, wxStaticText* note, shared_ptr<DCPContent> dcp, bool can_reference, string why_not) const
 {
        button->Enable (can_reference);
 
        wxString s;
-       if (!dcp) {
-               s = _("No DCP selected.");
-       } else if (!can_reference) {
+       if (dcp && !can_reference) {
                s = _("Cannot reference this DCP.  ") + std_to_wx(why_not);
        }
 
-       button->SetToolTip (s);
+       note->SetLabel (s);
+       note->Wrap (400);
+
+       if (s.IsEmpty ()) {
+               note->Hide ();
+       } else {
+               note->Show ();
+       }
+
+       _sizer->Layout ();
 }
index fb22b3a22970c243c506ca8a29959f3f5835db2e..9afd50d4027dd53111de1028dbcde4deded5b8e0 100644 (file)
@@ -42,7 +42,7 @@ public:
 
 protected:
 
-       void setup_refer_button (wxCheckBox* button, boost::shared_ptr<DCPContent> dcp, bool can_reference, std::string why_not) const;
+       void setup_refer_button (wxCheckBox* button, wxStaticText* note, boost::shared_ptr<DCPContent> dcp, bool can_reference, std::string why_not) const;
 
        ContentPanel* _parent;
        wxSizer* _sizer;
index 5bba1ec2ca006e681248f722a42d31edc1ddbcc0..ff215c31d418ede4e28e1d017172d81ea15737b8 100644 (file)
@@ -48,14 +48,25 @@ SubtitlePanel::SubtitlePanel (ContentPanel* p)
        , _subtitle_view (0)
        , _fonts_dialog (0)
 {
+       wxBoxSizer* reference_sizer = new wxBoxSizer (wxVERTICAL);
+
+       _reference = new wxCheckBox (this, wxID_ANY, _("Use this DCP's subtitle as OV and make VF"));
+       reference_sizer->Add (_reference, 0, wxLEFT | wxRIGHT | wxTOP, DCPOMATIC_SIZER_GAP);
+
+       _reference_note = new wxStaticText (this, wxID_ANY, _(""));
+       _reference_note->Wrap (200);
+       reference_sizer->Add (_reference_note, 0, wxLEFT | wxRIGHT, DCPOMATIC_SIZER_GAP);
+       wxFont font = _reference_note->GetFont();
+       font.SetStyle(wxFONTSTYLE_ITALIC);
+       font.SetPointSize(font.GetPointSize() - 1);
+       _reference_note->SetFont(font);
+
+       _sizer->Add (reference_sizer);
+
        wxGridBagSizer* grid = new wxGridBagSizer (DCPOMATIC_SIZER_X_GAP, DCPOMATIC_SIZER_Y_GAP);
        _sizer->Add (grid, 0, wxALL, 8);
        int r = 0;
 
-       _reference = new wxCheckBox (this, wxID_ANY, _("Use this DCP's subtitle as OV and make VF"));
-       grid->Add (_reference, wxGBPosition (r, 0), wxGBSpan (1, 2));
-       ++r;
-
        _use = new wxCheckBox (this, wxID_ANY, _("Use subtitles"));
        grid->Add (_use, wxGBPosition (r, 0), wxGBSpan (1, 2));
        ++r;
@@ -277,7 +288,7 @@ SubtitlePanel::setup_sensitivity ()
 
        string why_not;
        bool const can_reference = dcp && dcp->can_reference_subtitle (why_not);
-       setup_refer_button (_reference, dcp, can_reference, why_not);
+       setup_refer_button (_reference, _reference_note, dcp, can_reference, why_not);
 
        bool const reference = _reference->GetValue ();
 
index 5e619a995b9d5cbeaed16e15cba3dc62926ef34f..cb69e676eec95db2535175b6621234ee9502ae4c 100644 (file)
@@ -52,6 +52,7 @@ private:
        void setup_sensitivity ();
 
        wxCheckBox* _reference;
+       wxStaticText* _reference_note;
        wxCheckBox* _use;
        wxCheckBox* _burn;
        wxSpinCtrl* _x_offset;
index 5fbe518c46196318564087c45c7032069f7b75a1..2c6b4597dceb65b7a058ee15f33f46aaf9605bd2 100644 (file)
@@ -74,15 +74,26 @@ scale_to_index (VideoContentScale scale)
 VideoPanel::VideoPanel (ContentPanel* p)
        : ContentSubPanel (p, _("Video"))
 {
+       wxBoxSizer* reference_sizer = new wxBoxSizer (wxVERTICAL);
+
+       _reference = new wxCheckBox (this, wxID_ANY, _("Use this DCP's video as OV and make VF"));
+       reference_sizer->Add (_reference, 0, wxLEFT | wxRIGHT | wxTOP, DCPOMATIC_SIZER_GAP);
+
+       _reference_note = new wxStaticText (this, wxID_ANY, _(""));
+       _reference_note->Wrap (200);
+       reference_sizer->Add (_reference_note, 0, wxLEFT | wxRIGHT, DCPOMATIC_SIZER_GAP);
+       wxFont font = _reference_note->GetFont();
+       font.SetStyle(wxFONTSTYLE_ITALIC);
+       font.SetPointSize(font.GetPointSize() - 1);
+       _reference_note->SetFont(font);
+
+       _sizer->Add (reference_sizer);
+
        wxGridBagSizer* grid = new wxGridBagSizer (DCPOMATIC_SIZER_X_GAP, DCPOMATIC_SIZER_Y_GAP);
        _sizer->Add (grid, 0, wxALL, 8);
 
        int r = 0;
 
-       _reference = new wxCheckBox (this, wxID_ANY, _("Use this DCP's video as OV and make VF"));
-       grid->Add (_reference, wxGBPosition (r, 0), wxGBSpan (1, 2));
-       ++r;
-
        add_label_to_sizer (grid, this, _("Type"), true, wxGBPosition (r, 0));
        _frame_type = new ContentChoice<VideoContent, VideoFrameType> (
                this,
@@ -215,9 +226,6 @@ VideoPanel::VideoPanel (ContentPanel* p)
 
        _description = new wxStaticText (this, wxID_ANY, wxT ("\n \n \n \n \n"), wxDefaultPosition, wxDefaultSize);
        grid->Add (_description, wxGBPosition (r, 0), wxGBSpan (1, 4), wxEXPAND | wxALIGN_CENTER_VERTICAL, 6);
-       wxFont font = _description->GetFont();
-       font.SetStyle(wxFONTSTYLE_ITALIC);
-       font.SetPointSize(font.GetPointSize() - 1);
        _description->SetFont(font);
        ++r;
 
@@ -464,7 +472,7 @@ VideoPanel::setup_sensitivity ()
 
        string why_not;
        bool const can_reference = dcp && dcp->can_reference_video (why_not);
-       setup_refer_button (_reference, dcp, can_reference, why_not);
+       setup_refer_button (_reference, _reference_note, dcp, can_reference, why_not);
 
        if (_reference->GetValue ()) {
                _frame_type->wrapped()->Enable (false);
index 2be7eb049ffa69e1ad3043c8b2c5df9318dd9c3d..a1579bf62ef8e82c974779513ce91ff1750e9162 100644 (file)
@@ -57,6 +57,7 @@ private:
        void setup_sensitivity ();
 
        wxCheckBox* _reference;
+       wxStaticText* _reference_note;
        ContentChoice<VideoContent, VideoFrameType>*    _frame_type;
        ContentSpinCtrl<VideoContent>*                  _left_crop;
        ContentSpinCtrl<VideoContent>*                  _right_crop;