X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Factions.cc;h=5835292cf9bfd4af96c31483ff5fd981635c5316;hb=f420fed45db5417b5360c525ae1fcc8e919f3ac9;hp=78acffd6d1f01b7f583b88992c58d378fa2920e6;hpb=eb3fc0d966626aacae113a225cb6175614418a40;p=ardour.git diff --git a/gtk2_ardour/actions.cc b/gtk2_ardour/actions.cc index 78acffd6d1..5835292cf9 100644 --- a/gtk2_ardour/actions.cc +++ b/gtk2_ardour/actions.cc @@ -15,11 +15,10 @@ along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - $Id$ */ #include -#include +#include #include #include @@ -29,8 +28,10 @@ #include #include +#include #include +#include #include "actions.h" #include "i18n.h" @@ -39,6 +40,8 @@ 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; @@ -63,35 +66,30 @@ void ActionManager::init () { ui_manager = UIManager::create (); - - std::string ui_file = ARDOUR::find_config_file("ardour.menus"); + + sys::path ui_file; + + SearchPath spath = ardour_search_path() + user_config_directory() + system_config_search_path(); + + find_file_in_search_path (spath, "ardour.menus", ui_file); bool loaded = false; try { - ui_manager->add_ui_from_file (ui_file); + ui_manager->add_ui_from_file (ui_file.to_string()); 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; } if (!loaded) { - error << "ardour will not work without a valid ardour.menus file" << endmsg; + error << _("ardour will not work without a valid ardour.menus file") << endmsg; exit(1); } } -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; -} - RefPtr ActionManager::register_action (RefPtr group, const char * name, const char * label, slot sl) { @@ -115,15 +113,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) { @@ -135,15 +124,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) { @@ -276,9 +256,72 @@ 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; } +/** Examine the state of a Configuration setting and a toggle action, and toggle the Configuration + * setting if its state doesn't match the toggle action. + * @param group Action group. + * @param action Action name. + * @param Method to set the state of the Configuration setting. + * @param Method to get the state of the Configuration setting. + */ +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 (); + } + } +} + + +/** Set the state of a ToggleAction using a particular Configuration get() method + * @param group Action group. + * @param action Action name. + * @param get Method to obtain the state that the ToggleAction should have. + */ +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"; + } +}