add syntactic sugar for fetching toggle and radio actions
[ardour.git] / libs / gtkmm2ext / gtkmm2ext / bindings.h
index d216e0475274719d2ae79d10b2787aee6364a8f3..1cbb6af904bff2011b179cb2fa0a696efc0cf5f5 100644 (file)
@@ -106,6 +106,11 @@ class LIBGTKMM2EXT_API ActionMap {
                                                          const char* name, const char* label, sigc::slot<void> sl);
 
        Glib::RefPtr<Gtk::Action> find_action (const std::string& name);
+       Glib::RefPtr<Gtk::Action> find_action (char const * group_name, char const * action_name);
+       Glib::RefPtr<Gtk::ToggleAction> find_toggle_action (const std::string& name);
+       Glib::RefPtr<Gtk::ToggleAction> find_toggle_action (char const * group_name, char const * action_name);
+       Glib::RefPtr<Gtk::RadioAction> find_radio_action (const std::string& name);
+       Glib::RefPtr<Gtk::RadioAction> find_radio_action (char const * group_name, char const * action_name);
 
        void set_bindings (Bindings*);
        Bindings* bindings() const { return _bindings; }
@@ -138,6 +143,24 @@ class LIBGTKMM2EXT_API ActionMap {
 
 };
 
+class LIBGTKMM2EXT_API ActionMapOwner {
+  protected:
+       Gtkmm2ext::ActionMap myactions;
+  public:
+       ActionMapOwner (std::string const & map_name) : myactions (map_name) {}
+       Glib::RefPtr<Gtk::Action> find_action (const std::string& name) { return myactions.find_action (name); }
+       Glib::RefPtr<Gtk::Action> find_action (char const * group_name, char const * action_name) { return myactions.find_action (group_name, action_name); }
+};
+
+class LIBGTKMM2EXT_API StaticActionMapOwner {
+  protected:
+       virtual Gtkmm2ext::ActionMap& my_actions() const = 0;
+  public:
+       virtual ~StaticActionMapOwner() {}
+       Glib::RefPtr<Gtk::Action> find_action (const std::string& name) { return my_actions().find_action (name); }
+       Glib::RefPtr<Gtk::Action> find_action (char const * group_name, char const * action_name) { return my_actions().find_action (group_name, action_name); }
+};
+
 class LIBGTKMM2EXT_API Bindings {
   public:
        enum Operation {
@@ -178,6 +201,7 @@ class LIBGTKMM2EXT_API Bindings {
        bool activate (MouseButton, Operation);
 
        bool is_bound (KeyboardKey const&, Operation) const;
+       std::string bound_name (KeyboardKey const&, Operation) const;
        bool is_registered (Operation op, std::string const& action_name) const;
 
        KeyboardKey get_binding_for_action (Glib::RefPtr<Gtk::Action>, Operation& op);
@@ -185,7 +209,7 @@ class LIBGTKMM2EXT_API Bindings {
        bool load (XMLNode const& node);
        void load_operation (XMLNode const& node);
        void save (XMLNode& root);
-       void save_as_html (std::ostream&) const;
+       void save_as_html (std::ostream&, bool) const;
 
        /* GTK has the following position a Gtk::Action:
         *
@@ -212,6 +236,7 @@ class LIBGTKMM2EXT_API Bindings {
                              std::vector<Glib::RefPtr<Gtk::Action> >& actions);
 
        /* all bindings currently in existence, as grouped into Bindings */
+       static void reset_bindings () { bindings.clear (); }
        static std::list<Bindings*> bindings;
        static Bindings* get_bindings (std::string const& name, ActionMap&);
        static void associate_all ();