fix inconsistent display on selection clocks when in join-object-range mode, and fix restore of that mode from session state via new ActionManager::set_toggle_action()

git-svn-id: svn://localhost/ardour2/branches/3.0@11366 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Paul Davis 2012-01-27 19:05:03 +00:00
parent ea655d711c
commit f56bbe2799
4 changed files with 48 additions and 7 deletions

View 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"))) {

View 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);

View 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);
}
}
}

View 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>);