add syntactic sugar for fetching toggle and radio actions
[ardour.git] / libs / gtkmm2ext / bindings.cc
index 11b55932a4d1336f13c5b05f05bff4173a53646b..cf98bbca4dd6b2080411497d00b6a32436951bef 100644 (file)
@@ -781,6 +781,7 @@ Bindings::save_all_bindings_as_html (ostream& ostr)
        ostr << "<html>\n<head>\n<title>";
        ostr << PROGRAM_NAME;
        ostr << "</title>\n";
+       ostr << "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n";
 
        ostr << "</head>\n<body>\n";
 
@@ -1173,6 +1174,7 @@ ActionMap::get_actions (ActionMap::Actions& acts)
        }
 }
 
+
 RefPtr<Action>
 ActionMap::find_action (const string& name)
 {
@@ -1182,9 +1184,76 @@ ActionMap::find_action (const string& name)
                return a->second;
        }
 
+       cerr << "Failed to find action: [" << name << ']' << endl;
+       return RefPtr<Action>();
+}
+
+RefPtr<ToggleAction>
+ActionMap::find_toggle_action (const string& name)
+{
+       RefPtr<Action> act = find_action (name);
+
+       if (!act) {
+               return RefPtr<ToggleAction>();
+       }
+
+       return Glib::RefPtr<ToggleAction>::cast_dynamic (act);
+}
+
+RefPtr<RadioAction>
+ActionMap::find_radio_action (const string& name)
+{
+       RefPtr<Action> act = find_action (name);
+
+       if (!act) {
+               return RefPtr<RadioAction>();
+       }
+
+       return Glib::RefPtr<RadioAction>::cast_dynamic (act);
+}
+
+RefPtr<Action>
+ActionMap::find_action (char const * group_name, char const * action_name)
+{
+       string fullpath (group_name);
+       fullpath += '/';
+       fullpath += action_name;
+
+       _ActionMap::iterator a = _actions.find (fullpath);
+
+       if (a != _actions.end()) {
+               return a->second;
+       }
+
+       cerr << "Failed to find action (2): [" << fullpath << ']' << endl;
        return RefPtr<Action>();
 }
 
+RefPtr<ToggleAction>
+ActionMap::find_toggle_action (char const * group_name, char const * action_name)
+{
+       RefPtr<Action> act = find_action (group_name, action_name);
+
+       if (!act) {
+               return RefPtr<ToggleAction>();
+       }
+
+       return Glib::RefPtr<ToggleAction>::cast_dynamic (act);
+}
+
+RefPtr<RadioAction>
+ActionMap::find_radio_action (char const * group_name, char const * action_name)
+{
+       RefPtr<Action> act = find_action (group_name, action_name);
+
+       if (!act) {
+               return RefPtr<RadioAction>();
+       }
+
+       return Glib::RefPtr<RadioAction>::cast_dynamic (act);
+}
+
+
 RefPtr<ActionGroup>
 ActionMap::create_action_group (const string& name)
 {