X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Factions.cc;h=2aa0546a095a3ab18e449f20c2ba7a564f9a6afd;hb=e96e4bacbeadd832e9deb251d91124eb012a5a49;hp=ee688c366006d72e710e15e5769d053523761311;hpb=7ff370e79895d7eb293e7214689b791bd98415fb;p=ardour.git diff --git a/gtk2_ardour/actions.cc b/gtk2_ardour/actions.cc index ee688c3660..2aa0546a09 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 @@ -33,6 +32,7 @@ #include #include "actions.h" +#include "opts.h" #include "i18n.h" using namespace std; @@ -40,6 +40,7 @@ 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; @@ -65,7 +66,7 @@ ActionManager::init () { ui_manager = UIManager::create (); - std::string ui_file = ARDOUR::find_config_file("ardour.menus"); + std::string ui_file = ARDOUR::find_config_file (ARDOUR_COMMAND_LINE::menus_file); bool loaded = false; @@ -73,26 +74,17 @@ ActionManager::init () 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; } 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) { @@ -116,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) { @@ -136,15 +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) { @@ -277,9 +251,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"; + } +}