fix inconsistent display on selection clocks when in join-object-range mode, and...
authorPaul Davis <paul@linuxaudiosystems.com>
Fri, 27 Jan 2012 19:05:03 +0000 (19:05 +0000)
committerPaul Davis <paul@linuxaudiosystems.com>
Fri, 27 Jan 2012 19:05:03 +0000 (19:05 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@11366 d708f5d6-7413-0410-9779-e7cbd77b26cf

gtk2_ardour/editor.cc
gtk2_ardour/time_info_box.cc
libs/gtkmm2ext/actions.cc
libs/gtkmm2ext/gtkmm2ext/actions.h

index 01777f54a300adbddb33445bffef2ca397303fb6..8a00a3e501882aa4e1b3223d6f4faeaee40f9743 100644 (file)
@@ -2263,7 +2263,7 @@ Editor::set_state (const XMLNode& node, int /*version*/)
        }
 
        if ((prop = node.property ("join-object-range"))) {
-               join_object_range_button.set_active (string_is_affirmative (prop->value ()));
+               ActionManager::set_toggle_action ("MouseMode", "set-mouse-mode-object-range", string_is_affirmative (prop->value ()));
        }
 
        if ((prop = node.property ("edit-point"))) {
index 515d49f72b6faf18c73c9e040c666c8940f0d348..00b760952cff4a9d3930d81a53c303cc6e0efd23 100644 (file)
@@ -247,9 +247,22 @@ TimeInfoBox::selection_changed ()
                } else {
                        if (selection.regions.empty()) {
                                if (selection.points.empty()) {
-                                       selection_start->set_off (true);
-                                       selection_end->set_off (true);
-                                       selection_length->set_off (true);
+                                       Glib::RefPtr<Action> act = ActionManager::get_action ("MouseMode", "set-mouse-mode-object-range");
+                                       Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic (act);
+
+                                       if (tact && tact->get_active() && !selection.time.empty()) {
+                                               /* show selected range */
+                                               selection_start->set_off (false);
+                                               selection_end->set_off (false);
+                                               selection_length->set_off (false);
+                                               selection_start->set (selection.time.start());
+                                               selection_end->set (selection.time.end_frame());
+                                               selection_length->set (selection.time.length());
+                                       } else {
+                                               selection_start->set_off (true);
+                                               selection_end->set_off (true);
+                                               selection_length->set_off (true);
+                                       }
                                } else {
                                        s = max_framepos;
                                        e = 0;
@@ -279,9 +292,24 @@ TimeInfoBox::selection_changed ()
 
        case Editing::MouseRange:
                if (selection.time.empty()) {
-                       selection_start->set_off (true);
-                       selection_end->set_off (true);
-                       selection_length->set_off (true);
+                       Glib::RefPtr<Action> act = ActionManager::get_action ("MouseMode", "set-mouse-mode-object-range");
+                       Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic (act);
+
+                       if (tact && tact->get_active() &&  !selection.regions.empty()) {        
+                               /* show selected regions */
+                               s = selection.regions.start();
+                               e = selection.regions.end_frame();
+                               selection_start->set_off (false);
+                               selection_end->set_off (false);
+                               selection_length->set_off (false);
+                               selection_start->set (s);
+                               selection_end->set (e);
+                               selection_length->set (e - s + 1);
+                       } else {
+                               selection_start->set_off (true);
+                               selection_end->set_off (true);
+                               selection_length->set_off (true);
+                       }
                } else {
                        selection_start->set_off (false);
                        selection_end->set_off (false);
index c9aae4568b03167103bd5bc585b1de21dc4125c2..02e99f23e96737163eafd9de8b69221b00ca3956 100644 (file)
@@ -353,3 +353,15 @@ ActionManager::do_action (const char* group, const char*action)
        }
 }
 
+void
+ActionManager::set_toggle_action (const char* group, const char*action, bool yn)
+{
+       Glib::RefPtr<Gtk::Action> act = ActionManager::get_action (group, action);
+       if (act) {
+               Glib::RefPtr<Gtk::ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic (act);
+               if (tact) {
+                       tact->set_active (yn);
+               }
+       }
+}
+
index d9082ffbff0efd5a5f4ac146825f7b460b00fb9e..0c53e9c10d9a6dce08975fd605d7dbad711ab1fd 100644 (file)
@@ -44,6 +44,7 @@ namespace ActionManager {
        extern Glib::RefPtr<Gtk::Action> get_action (const char* group, const char* name);
        extern Glib::RefPtr<Gtk::Action> get_action (const char* path);
        extern void do_action (const char* group, const char* name);
+       extern void set_toggle_action (const char* group, const char* name, bool);
 
        extern void add_action_group (Glib::RefPtr<Gtk::ActionGroup>);