show last received and when for timecode timestamps in transport masters widget
authorPaul Davis <paul@linuxaudiosystems.com>
Thu, 27 Sep 2018 04:09:08 +0000 (00:09 -0400)
committerPaul Davis <paul@linuxaudiosystems.com>
Thu, 27 Sep 2018 15:31:13 +0000 (11:31 -0400)
gtk2_ardour/transport_masters_dialog.cc
gtk2_ardour/transport_masters_dialog.h

index 540f39fbbd653932f336490f784ac1c51c1cbe41..7947f50df2ad7291305706069607c37962edf528 100644 (file)
@@ -188,6 +188,7 @@ TransportMastersWidget::rebuild ()
 TransportMastersWidget::Row::Row ()
        : request_option_menu (0)
        , name_editor (0)
+       , save_when (0)
        , ignore_active_change (false)
 {
 }
@@ -400,38 +401,57 @@ TransportMastersWidget::Row::update (Session* s, samplepos_t now)
 
        samplepos_t pos;
        double speed;
-       samplepos_t last;
+       samplepos_t most_recent;
        samplepos_t when;
        stringstream ss;
        Time t;
+       Time l;
        boost::shared_ptr<TimecodeTransportMaster> ttm;
        boost::shared_ptr<MIDIClock_TransportMaster> mtm;
 
        if (s) {
 
-               if (tm->speed_and_position (speed, pos, last, when, now)) {
+               if (tm->speed_and_position (speed, pos, most_recent, when, now)) {
 
                        sample_to_timecode (pos, t, false, false, 25, false, AudioEngine::instance()->sample_rate(), 100, false, 0);
+                       sample_to_timecode (most_recent, l, false, false, 25, false, AudioEngine::instance()->sample_rate(), 100, false, 0);
 
                        if ((ttm = boost::dynamic_pointer_cast<TimecodeTransportMaster> (tm))) {
                                format.set_text (timecode_format_name (ttm->apparent_timecode_format()));
+                               last.set_text (Timecode::timecode_format_time (l));
                        } else if ((mtm = boost::dynamic_pointer_cast<MIDIClock_TransportMaster> (tm))) {
                                char buf[8];
                                snprintf (buf, sizeof (buf), "%.1f", mtm->bpm());
                                format.set_text (buf);
+                               last.set_text ("");
                        } else {
                                format.set_text ("");
+                               last.set_text ("");
                        }
                        current.set_text (Timecode::timecode_format_time (t));
                        timestamp.set_markup (tm->position_string());
                        delta.set_markup (tm->delta_string ());
 
+                       char gap[32];
+                       snprintf (gap, sizeof (gap), "%.3fs", (when - now) / (float) AudioEngine::instance()->sample_rate());
+                       timestamp.set_text (gap);
+                       save_when = when;
+
+               } else {
+
+                       if (save_when) {
+                               char gap[32];
+
+                               snprintf (gap, sizeof (gap), "%.3fs", (save_when - now) / (float) AudioEngine::instance()->sample_rate());
+                               timestamp.set_text (gap);
+                               save_when = when;
+                       }
                }
        }
 }
 
 void
-TransportMastersWidget::update (samplepos_t audible)
+       TransportMastersWidget::update (samplepos_t /* audible */)
 {
        samplepos_t now = AudioEngine::instance()->sample_time ();
 
index 5848328f8ab152074bb4f5ce09f0a0acc43050dd..4433a80b0b22514c3fed95f9292f15d2c6908183 100644 (file)
@@ -73,6 +73,7 @@ class TransportMastersWidget : public Gtk::VBox, public ARDOUR::SessionHandlePtr
                Gtk::Button request_options;
                Gtk::Menu* request_option_menu;
                FloatingTextEntry* name_editor;
+               samplepos_t save_when;
 
                void build_request_options();