Desensitize trim-up-to buttons as appropriate (#737).
authorCarl Hetherington <cth@carlh.net>
Mon, 9 Nov 2015 00:43:48 +0000 (00:43 +0000)
committerCarl Hetherington <cth@carlh.net>
Mon, 9 Nov 2015 00:43:48 +0000 (00:43 +0000)
ChangeLog
src/wx/timing_panel.cc
src/wx/timing_panel.h

index 38d0ab14a3e1684e45b792cc5a8788ecd14cf99e..9a17f1e8d9d08e4126e4eac56ef9a2beb7fa57da 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,7 @@
 2015-11-09  Carl Hetherington  <cth@carlh.net>
 
+       * Desensitise trim-playhead buttons as appropriate (#737).
+
        * Keep same frame visible after trimming content start (#737).
 
        * Trim frames after the current one with "trim after current", leaving
index bb0547b9c62368553d8c58bd2c08b3f66476fad6..9f5aa78ead191be6e0434205d20e0834fdb3a99d 100644 (file)
@@ -147,6 +147,10 @@ TimingPanel::TimingPanel (ContentPanel* p, FilmViewer* viewer)
        _play_length->Changed.connect (boost::bind (&TimingPanel::play_length_changed, this));
        _video_frame_rate->Bind       (wxEVT_COMMAND_TEXT_UPDATED, boost::bind (&TimingPanel::video_frame_rate_changed, this));
        _set_video_frame_rate->Bind   (wxEVT_COMMAND_BUTTON_CLICKED, boost::bind (&TimingPanel::set_video_frame_rate, this));
+
+       _viewer->ImageChanged.connect (boost::bind (&TimingPanel::setup_sensitivity, this));
+
+       setup_sensitivity ();
 }
 
 void
@@ -294,6 +298,7 @@ TimingPanel::film_content_changed (int property)
        _full_length->set_editable (have_still);
        _play_length->set_editable (!have_still);
        _set_video_frame_rate->Enable (false);
+       setup_sensitivity ();
 }
 
 void
@@ -324,7 +329,6 @@ TimingPanel::trim_start_changed ()
        }
 }
 
-
 void
 TimingPanel::trim_end_changed ()
 {
@@ -372,14 +376,7 @@ TimingPanel::set_video_frame_rate ()
 void
 TimingPanel::content_selection_changed ()
 {
-       bool const e = !_parent->selected().empty ();
-
-       _position->Enable (e);
-       _full_length->Enable (e);
-       _trim_start->Enable (e);
-       _trim_end->Enable (e);
-       _play_length->Enable (e);
-       _video_frame_rate->Enable (e);
+       setup_sensitivity ();
 
        film_content_changed (ContentProperty::POSITION);
        film_content_changed (ContentProperty::LENGTH);
@@ -430,6 +427,29 @@ TimingPanel::trim_end_to_playhead_clicked ()
                        FrameRateChange const frc = _parent->film()->active_frame_rate_change (i->position ());
                        i->set_trim_end (ContentTime (i->position() + i->full_length() - ph - DCPTime::from_frames (1, frc.dcp), frc) - i->trim_start());
                }
+       }
+}
+
+void
+TimingPanel::setup_sensitivity ()
+{
+       bool const e = !_parent->selected().empty ();
+
+       _position->Enable (e);
+       _full_length->Enable (e);
+       _trim_start->Enable (e);
+       _trim_end->Enable (e);
+       _play_length->Enable (e);
+       _video_frame_rate->Enable (e);
 
+       DCPTime const ph = _viewer->position ();
+       bool any_over_ph = false;
+       BOOST_FOREACH (shared_ptr<const Content> i, _parent->selected ()) {
+               if (i->position() <= ph && ph < i->end()) {
+                       any_over_ph = true;
+               }
        }
+
+       _trim_start_to_playhead->Enable (any_over_ph);
+       _trim_end_to_playhead->Enable (any_over_ph);
 }
index d1f5ea5495a3b902aa92a6fee5b7be7c81eed9ee..f73fbed55bef4bb598aaef113dcfc6343aa72007 100644 (file)
@@ -43,6 +43,7 @@ private:
        void set_video_frame_rate ();
        void update_full_length ();
        void update_play_length ();
+       void setup_sensitivity ();
 
        FilmViewer* _viewer;