X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Factions.cc;h=d38287858248d8c707c1626bce5f082cbad9d063;hb=76c25a4a4459b8e550c3c687458d04db0beaee77;hp=b8bf6bd4611254ce11b01fd2ce20619dd7f39276;hpb=feed0fc3339364ae987f1e76ed7c7d67a67ca5a7;p=ardour.git diff --git a/gtk2_ardour/actions.cc b/gtk2_ardour/actions.cc index b8bf6bd461..d382878582 100644 --- a/gtk2_ardour/actions.cc +++ b/gtk2_ardour/actions.cc @@ -19,7 +19,7 @@ */ #include -#include +#include #include #include @@ -39,12 +39,19 @@ using namespace std; using namespace Gtk; using namespace Glib; using namespace sigc; +using namespace PBD; +using namespace ARDOUR; vector > ActionManager::session_sensitive_actions; vector > ActionManager::region_list_selection_sensitive_actions; +vector > ActionManager::plugin_selection_sensitive_actions; vector > ActionManager::region_selection_sensitive_actions; vector > ActionManager::track_selection_sensitive_actions; -vector > ActionManager::plugin_selection_sensitive_actions; +vector > ActionManager::point_selection_sensitive_actions; +vector > ActionManager::time_selection_sensitive_actions; +vector > ActionManager::line_selection_sensitive_actions; +vector > ActionManager::playlist_selection_sensitive_actions; + vector > ActionManager::range_sensitive_actions; vector > ActionManager::jack_sensitive_actions; vector > ActionManager::jack_opposite_sensitive_actions; @@ -58,23 +65,24 @@ void ActionManager::init () { ui_manager = UIManager::create (); + + std::string ui_file = ARDOUR::find_config_file("ardour.menus"); + bool loaded = false; + try { - ui_manager->add_ui_from_file (ARDOUR::find_config_file("ardour-menus.xml")); + ui_manager->add_ui_from_file (ui_file); + loaded = true; } catch (Glib::MarkupError& err) { - error << "badly formatted UI definition file" << endmsg; + error << _("badly formatted UI definition file") << endmsg; } catch (...) { - error << "Ardour menu definition file not found" << endmsg; + error << _("Ardour menu definition file not found") << endmsg; } -} -RefPtr -ActionManager::register_action (RefPtr group, const char * name, const char * label, slot sl, guint key, Gdk::ModifierType mods) -{ - RefPtr act = register_action (group, name, label, sl); - AccelMap::add_entry (act->get_accel_path(), key, mods); - - return act; + if (!loaded) { + error << _("ardour will not work without a valid ardour.menus file") << endmsg; + exit(1); + } } RefPtr @@ -100,15 +108,6 @@ ActionManager::register_action (RefPtr group, const char * name, co } -RefPtr -ActionManager::register_radio_action (RefPtr group, RadioAction::Group& rgroup, const char * name, const char * label, slot sl, guint key, Gdk::ModifierType mods) -{ - RefPtr act = register_radio_action (group, rgroup, name, label, sl); - AccelMap::add_entry (act->get_accel_path(), key, mods); - - return act; -} - RefPtr ActionManager::register_radio_action (RefPtr group, RadioAction::Group& rgroup, const char * name, const char * label, slot sl) { @@ -120,16 +119,6 @@ ActionManager::register_radio_action (RefPtr group, RadioAction::Gr return act; } - -RefPtr -ActionManager::register_toggle_action (RefPtr group, const char * name, const char * label, slot sl, guint key, Gdk::ModifierType mods) -{ - RefPtr act = register_toggle_action (group,name, label, sl); - AccelMap::add_entry (act->get_accel_path(), key, mods); - - return act; -} - RefPtr ActionManager::register_toggle_action (RefPtr group, const char * name, const char * label, slot sl) { @@ -262,9 +251,59 @@ ActionManager::uncheck_toggleaction (const char * name) RefPtr tact = RefPtr::cast_dynamic(act); tact->set_active (false); } else { - error << "Unknown action name: " << name << endmsg; + error << string_compose (_("Unknown action name: %1"), name) << endmsg; } delete [] group_name; } +void +ActionManager::toggle_config_state (const char* group, const char* action, bool (Configuration::*set)(bool), bool (Configuration::*get)(void) const) +{ + Glib::RefPtr act = ActionManager::get_action (group, action); + if (act) { + Glib::RefPtr tact = Glib::RefPtr::cast_dynamic(act); + + if (tact) { + bool x = (Config->*get)(); + + if (x != tact->get_active()) { + (Config->*set) (!x); + } + } + } +} + +void +ActionManager::toggle_config_state (const char* group, const char* action, sigc::slot theSlot) +{ + Glib::RefPtr act = ActionManager::get_action (group, action); + if (act) { + Glib::RefPtr tact = Glib::RefPtr::cast_dynamic(act); + if (tact->get_active()) { + theSlot (); + } + } +} + +void +ActionManager::map_some_state (const char* group, const char* action, bool (Configuration::*get)() const) +{ + Glib::RefPtr act = ActionManager::get_action (group, action); + if (act) { + Glib::RefPtr tact = Glib::RefPtr::cast_dynamic(act); + + if (tact) { + + bool x = (Config->*get)(); + + if (tact->get_active() != x) { + tact->set_active (x); + } + } else { + cerr << group << ':' << action << " is not a toggle\n"; + } + } else { + cerr << group << ':' << action << " not an action\n"; + } +}