Delta Cursor option backported from trunk
authorDoug McLain <doug@nostar.net>
Thu, 5 Jul 2007 06:12:46 +0000 (06:12 +0000)
committerDoug McLain <doug@nostar.net>
Thu, 5 Jul 2007 06:12:46 +0000 (06:12 +0000)
git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@2111 d708f5d6-7413-0410-9779-e7cbd77b26cf

gtk2_ardour/ardour.menus
gtk2_ardour/ardour2_ui_dark.rc
gtk2_ardour/ardour2_ui_light.rc
gtk2_ardour/ardour_ui.cc
gtk2_ardour/ardour_ui.h
gtk2_ardour/ardour_ui2.cc
gtk2_ardour/ardour_ui_ed.cc
gtk2_ardour/ardour_ui_options.cc
gtk2_ardour/audio_clock.cc
gtk2_ardour/audio_clock.h
libs/ardour/ardour/configuration_vars.h

index dcb79d4c0b935a03ce42b83e6d043cbc64c3d404..b872a8d500f0ad93a6299e6aa02fae057a5cd1c7 100644 (file)
                <menuitem action='StopRecordingOnXrun'/>
                <menuitem action='StopTransportAtEndOfSession'/>
                <menuitem action='GainReduceFastTransport'/>
+                               <menuitem action='PrimaryClockDeltaEditCursor'/>
+                               <menuitem action='SecondaryClockDeltaEditCursor'/>
+                               <separator/>
          </menu>
         <menu name='Help' action='Help'>
             <menuitem action='About'/>
index 631ef4b92e2a3a222cc1cf691f5f77c0e45457b0..c84ec1d231519feb37d143f874d67819a59358e6 100644 (file)
@@ -667,6 +667,11 @@ style "transport_clock_display_delta" = "transport_clock_display"
        fg[NORMAL] = { 0.30, 0.30, 1.0 }
 }
 
+style "transport_clock_display_delta" = "transport_clock_display"
+{
+       fg[NORMAL] = { 0.30, 0.30, 1.0 }
+}
+
 style "tempo_meter_clock_display"
 {
        font_name = "sans 7"
@@ -1523,4 +1528,6 @@ widget "*ChannelCountSelector" style:highest "medium_bold_entry"
 widget "*ChannelCountSelector.GtkArrow" style:highest "default_buttons_menus"
 widget "*RegionListWholeFile" style:highest "treeview_parent_node"
 widget "*EditorHScrollbar" style:highest "editor_hscrollbar"
+widget "*TransportClockDisplayDelta" style:highest "transport_clock_display_delta"
+widget "*SecondaryClockDisplayDelta" style:highest "transport_clock_display_delta"
 
index b713af4a8fad0a9339fd1d210d283e72ff901f3b..955171b40745dec50bbbff77d64a11d660049c3b 100644 (file)
@@ -671,6 +671,11 @@ style "transport_clock_display_delta" = "transport_clock_display"
        fg[NORMAL] = { 0.30, 0.30, 1.0 }
 }
 
+style "transport_clock_display_delta" = "transport_clock_display"
+{
+       fg[NORMAL] = { 0.30, 0.30, 1.0 }
+}
+
 style "tempo_meter_clock_display"
 {
        font_name = "sans 7"
@@ -1522,4 +1527,6 @@ widget "*ChannelCountSelector" style:highest "medium_bold_entry"
 widget "*ChannelCountSelector.GtkArrow" style:highest "default_buttons_menus"
 widget "*RegionListWholeFile" style:highest "treeview_parent_node"
 widget "*EditorHScrollbar" style:highest "editor_hscrollbar"
+widget "*TransportClockDisplayDelta" style:highest "transport_clock_display_delta"
+widget "*SecondaryClockDisplayDelta" style:highest "transport_clock_display_delta"
 
index e7297df483dc8ba409f596db5541906cf49de960..5022e6e6ee84e8300b4ef602e2a8773dc78a24c9 100644 (file)
@@ -92,7 +92,7 @@ UIConfiguration *ARDOUR_UI::ui_config = 0;
 sigc::signal<void,bool> ARDOUR_UI::Blink;
 sigc::signal<void>      ARDOUR_UI::RapidScreenUpdate;
 sigc::signal<void>      ARDOUR_UI::SuperRapidScreenUpdate;
-sigc::signal<void,nframes_t> ARDOUR_UI::Clock;
+sigc::signal<void,nframes_t, bool, nframes_t> ARDOUR_UI::Clock;
 
 ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[])
 
@@ -1486,7 +1486,7 @@ void
 ARDOUR_UI::update_clocks ()
 {
        if (!editor || !editor->dragging_playhead()) {
-               Clock (session->audible_frame()); /* EMIT_SIGNAL */
+               Clock (session->audible_frame(), false, editor->edit_cursor_position(false)); /* EMIT_SIGNAL */
        }
 }
 
@@ -2609,8 +2609,17 @@ ARDOUR_UI::use_config ()
 void
 ARDOUR_UI::update_transport_clocks (nframes_t pos)
 {
-       primary_clock.set (pos);
-       secondary_clock.set (pos);
+       if (Config->get_primary_clock_delta_edit_cursor()) {
+               primary_clock.set (pos, false, editor->edit_cursor_position(false), 1);
+       } else {
+               primary_clock.set (pos, 0, true);
+       }
+
+       if (Config->get_secondary_clock_delta_edit_cursor()) {
+               secondary_clock.set (pos, false, editor->edit_cursor_position(false), 2);
+       } else {
+               secondary_clock.set (pos);
+       }
 
        if (big_clock_window) {
                big_clock.set (pos);
index 750a56db7dac3a2d468aa494d7fbc9a3e91969d3..628206f70ee6339ffd8fbfac8dc688c5fc1fd31e 100644 (file)
@@ -160,7 +160,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI
        static sigc::signal<void,bool> Blink;
        static sigc::signal<void>      RapidScreenUpdate;
        static sigc::signal<void>      SuperRapidScreenUpdate;
-       static sigc::signal<void,nframes_t> Clock;
+       static sigc::signal<void,nframes_t, bool, nframes_t> Clock;
 
        /* this is a helper function to centralize the (complex) logic for
           blinking rec-enable buttons.
@@ -692,6 +692,8 @@ class ARDOUR_UI : public Gtkmm2ext::UI
        void toggle_ShowSoloMutes();
        void toggle_LatchedRecordEnable ();
        void toggle_RegionEquivalentsOverlap ();
+       void toggle_PrimaryClockDeltaEditCursor ();
+       void toggle_SecondaryClockDeltaEditCursor ();
 
        void mtc_port_changed ();
        void map_solo_model ();
index da2b2262ea2bf1f4d1c598a396932f59f59bc37e..ff4b84467fa41551744544b8a0dea3def5767b53 100644 (file)
@@ -271,8 +271,8 @@ ARDOUR_UI::setup_transport ()
 
        /* clocks, etc. */
 
-       ARDOUR_UI::Clock.connect (bind (mem_fun (primary_clock, &AudioClock::set), false));
-       ARDOUR_UI::Clock.connect (bind (mem_fun (secondary_clock, &AudioClock::set), false));
+       ARDOUR_UI::Clock.connect (bind (mem_fun (primary_clock, &AudioClock::set), 1));
+       ARDOUR_UI::Clock.connect (bind (mem_fun (secondary_clock, &AudioClock::set), 2));
 
        primary_clock.ValueChanged.connect (mem_fun(*this, &ARDOUR_UI::primary_clock_value_changed));
        secondary_clock.ValueChanged.connect (mem_fun(*this, &ARDOUR_UI::secondary_clock_value_changed));
index 3b70f9c801daad7b53e5dd55b6ad1fdb8c7cfff8..78c7a3dcf9157945ed391678d44b81bb71fc3210 100644 (file)
@@ -413,6 +413,8 @@ ARDOUR_UI::install_actions ()
        ActionManager::register_toggle_action (option_actions, X_("GainReduceFastTransport"), _("-12dB gain reduce ffwd/rewind"), mem_fun (*this, &ARDOUR_UI::toggle_GainReduceFastTransport));
        ActionManager::register_toggle_action (option_actions, X_("LatchedRecordEnable"), _("Rec-enable stays engaged at stop"), mem_fun (*this, &ARDOUR_UI::toggle_LatchedRecordEnable));
        ActionManager::register_toggle_action (option_actions, X_("RegionEquivalentsOverlap"), _("Region equivalents overlap"), mem_fun (*this, &ARDOUR_UI::toggle_RegionEquivalentsOverlap));
+       ActionManager::register_toggle_action (option_actions, X_("PrimaryClockDeltaEditCursor"), _("Primary Clock delta to edit cursor"), mem_fun (*this, &ARDOUR_UI::toggle_PrimaryClockDeltaEditCursor));
+       ActionManager::register_toggle_action (option_actions, X_("SecondaryClockDeltaEditCursor"), _("Secondary Clock delta to edit cursor"), mem_fun (*this, &ARDOUR_UI::toggle_SecondaryClockDeltaEditCursor));      
 
        RadioAction::Group denormal_group;
 
index b59fdf803b77205ae4ab17094159377b98600e75..813c615d397f96014ae3d0e014c1ae144b3324d9 100644 (file)
@@ -479,6 +479,18 @@ ARDOUR_UI::toggle_ShowSoloMutes()
        ActionManager::toggle_config_state ("options", "ShowSoloMutes", &Configuration::set_show_solo_mutes, &Configuration::get_show_solo_mutes);
 }
 
+void
+ARDOUR_UI::toggle_PrimaryClockDeltaEditCursor()
+{
+       ActionManager::toggle_config_state ("options", "PrimaryClockDeltaEditCursor", &Configuration::set_primary_clock_delta_edit_cursor, &Configuration::get_primary_clock_delta_edit_cursor);
+}
+
+void
+ARDOUR_UI::toggle_SecondaryClockDeltaEditCursor()
+{
+       ActionManager::toggle_config_state ("options", "SecondaryClockDeltaEditCursor", &Configuration::set_secondary_clock_delta_edit_cursor, &Configuration::get_secondary_clock_delta_edit_cursor);
+}
+
 void
 ARDOUR_UI::mtc_port_changed ()
 {
@@ -1039,7 +1051,11 @@ ARDOUR_UI::parameter_changed (const char* parameter_name)
                }
        } else if (PARAM_IS ("use-overlap-equivalency")) {
                ActionManager::map_some_state ("options", "RegionEquivalentsOverlap", &Configuration::get_use_overlap_equivalency);
-       }
+       } else if (PARAM_IS ("primary-clock-delta-edit-cursor")) {
+               ActionManager::map_some_state ("options",  "PrimaryClockDeltaEditCursor", &Configuration::get_primary_clock_delta_edit_cursor);
+       } else if (PARAM_IS ("secondary-clock-delta-edit-cursor")) {
+               ActionManager::map_some_state ("options",  "SecondaryClockDeltaEditCursor", &Configuration::get_secondary_clock_delta_edit_cursor);
+       } 
                           
 
 #undef PARAM_IS
index 0aa8ff8ab6fb5c04794a646db540b47159d3c83d..1220729b1824746d6e3c6b2ee75fbf99948c48c1 100644 (file)
@@ -77,6 +77,8 @@ AudioClock::AudioClock (std::string clock_name, bool transient, std::string widg
 {
        session = 0;
        last_when = 0;
+       last_pdelta = 0;
+       last_sdelta = 0;
        key_entry_state = 0;
        ops_menu = 0;
        dragging = false;
@@ -404,17 +406,41 @@ AudioClock::on_realize ()
 }
 
 void
-AudioClock::set (nframes_t when, bool force)
+AudioClock::set (nframes_t when, bool force, nframes_t offset, int which)
 {
 
        if ((!force && !is_visible()) || session == 0) {
                return;
        }
        
-       if (when == last_when && !force) {
+       if (when == last_when && !offset && !force) {
                return;
        }
 
+       bool pdelta = Config->get_primary_clock_delta_edit_cursor();
+       bool sdelta = Config->get_secondary_clock_delta_edit_cursor();
+
+       if (offset && which == 1 && pdelta) {
+               when = (when > offset) ? when - offset : offset - when;
+       } else if (offset && which == 2 && sdelta) {
+               when = (when > offset) ? when - offset : offset - when;
+       }
+
+       if (which == 1 && pdelta && !last_pdelta) {
+               cout << "set_widget_name() called" << endl;
+               set_widget_name("TransportClockDisplayDelta");
+               last_pdelta = true;
+       } else if (which == 1 && !pdelta && last_pdelta) {
+               set_widget_name("TransportClockDisplay");
+               last_pdelta = false;
+       } else if (which == 2  && sdelta && !last_sdelta) {
+               set_widget_name("SecondaryClockDisplayDelta");
+               last_sdelta = true;
+       } else if (which == 2 && !sdelta && last_sdelta) {
+               set_widget_name("SecondaryClockDisplay");
+               last_sdelta = false;
+       }
+
        switch (_mode) {
        case SMPTE:
                set_smpte (when, force);
index 6c2f9c838c13124012c7ef543efaa96d8f9160dc..fe56add4b52b37f01afa6f9cb88894d18344b16d 100644 (file)
@@ -46,7 +46,7 @@ class AudioClock : public Gtk::HBox
 
        Mode mode() const { return _mode; }
        
-       void set (nframes_t, bool force = false);
+       void set (nframes_t, bool force = false, nframes_t offset = 0, int which = 0);
        void set_mode (Mode);
        
        void set_widget_name (std::string);
@@ -151,6 +151,8 @@ class AudioClock : public Gtk::HBox
        Gtk::Frame     clock_frame;
 
        nframes_t last_when;
+       bool last_pdelta;
+       bool last_sdelta;
 
        uint32_t last_hrs;
        uint32_t last_mins;
index 8003dc4a4ca3dc9f14dbbee182f32d58b6a6fd7f..61dc1bd225eaf4ed80c7e1de4b0b99417d975006 100644 (file)
@@ -112,6 +112,8 @@ CONFIG_VARIABLE (SlaveSource, slave_source, "slave-source", None)
 CONFIG_VARIABLE (ShuttleBehaviour, shuttle_behaviour, "shuttle-behaviour", Sprung)
 CONFIG_VARIABLE (ShuttleUnits, shuttle_units, "shuttle-units", Percentage)
 CONFIG_VARIABLE (bool, quieten_at_speed, "quieten-at-speed", true)
+CONFIG_VARIABLE (bool, primary_clock_delta_edit_cursor, "primary-clock-delta-edit-cursor", false)
+CONFIG_VARIABLE (bool, secondary_clock_delta_edit_cursor, "secondary-clock-delta-edit-cursor", false)
 
 /* timecode and sync */