changes to Bindings and Keyboard API to support (mostly) GTK-free keyboard bindings
[ardour.git] / libs / gtkmm2ext / gtkmm2ext / bindings.h
index 31fea82a3587395db4baf607b8c74241f223d573..7685d8cf32ab109a7f82ff285b291adc6b000a62 100644 (file)
@@ -5,7 +5,6 @@
 #include <stdint.h>
 #include <gdk/gdkkeysyms.h>
 #include <gtkmm/action.h>
-#include <gtkmm/action.h>
 #include <gtkmm/radioaction.h>
 #include <gtkmm/toggleaction.h>
 
@@ -21,12 +20,12 @@ class LIBGTKMM2EXT_API KeyboardKey
         KeyboardKey () {
                 _val = GDK_VoidSymbol;
         }
-        
+
         KeyboardKey (uint32_t state, uint32_t keycode);
-        
+
         uint32_t state() const { return _val >> 32; }
         uint32_t key() const { return _val & 0xffff; }
-        
+
         bool operator<(const KeyboardKey& other) const {
                 return _val < other._val;
         }
@@ -62,13 +61,9 @@ class LIBGTKMM2EXT_API MouseButton {
 
         std::string name() const;
         static bool make_button (const std::string&, MouseButton&);
-        static void set_ignored_state (int mask) {
-                _ignored_state = mask;
-        }
 
   private:
         uint64_t _val;
-        static uint32_t _ignored_state;
 };
 
 class LIBGTKMM2EXT_API ActionMap {
@@ -76,13 +71,27 @@ class LIBGTKMM2EXT_API ActionMap {
         ActionMap() {}
         ~ActionMap() {}
 
-       Glib::RefPtr<Gtk::Action> register_action (const char* path,
+        Glib::RefPtr<Gtk::ActionGroup> create_action_group (const std::string& group_name);
+        void install_action_group (Glib::RefPtr<Gtk::ActionGroup>);
+        
+        Glib::RefPtr<Gtk::Action> register_action (Glib::RefPtr<Gtk::ActionGroup> group, const char* name, const char* label);
+        Glib::RefPtr<Gtk::Action> register_action (Glib::RefPtr<Gtk::ActionGroup> group,
                                                   const char* name, const char* label, sigc::slot<void> sl);
+<<<<<<< HEAD
        Glib::RefPtr<Gtk::Action> register_radio_action (const char* path, Gtk::RadioAction::Group&,
+                                                        const char* name, const char* label,
+=======
+        Glib::RefPtr<Gtk::Action> register_radio_action (Glib::RefPtr<Gtk::ActionGroup> group,
+                                                        Gtk::RadioAction::Group&,
                                                         const char* name, const char* label, 
+>>>>>>> changes to Bindings and Keyboard API to support (mostly) GTK-free keyboard bindings
                                                          sigc::slot<void,GtkAction*> sl,
                                                          int value);
-       Glib::RefPtr<Gtk::Action> register_toggle_action (const char*path,
+        Glib::RefPtr<Gtk::Action> register_radio_action (Glib::RefPtr<Gtk::ActionGroup> group,
+                                                        Gtk::RadioAction::Group&,
+                                                        const char* name, const char* label, 
+                                                         sigc::slot<void> sl);
+       Glib::RefPtr<Gtk::Action> register_toggle_action (Glib::RefPtr<Gtk::ActionGroup> group,
                                                          const char* name, const char* label, sigc::slot<void> sl);
 
         Glib::RefPtr<Gtk::Action> find_action (const std::string& name);
@@ -90,18 +99,22 @@ class LIBGTKMM2EXT_API ActionMap {
   private:
         typedef std::map<std::string, Glib::RefPtr<Gtk::Action> > _ActionMap;
         _ActionMap actions;
-};        
+};
 
 class LIBGTKMM2EXT_API Bindings {
   public:
-        enum Operation { 
+        enum Operation {
                 Press,
                 Release
         };
-        
+
         Bindings();
         ~Bindings ();
 
+        bool empty() const;
+        bool empty_keys () const;
+        bool empty_mouse () const;
+        
         void add (KeyboardKey, Operation, Glib::RefPtr<Gtk::Action>);
         void remove (KeyboardKey, Operation);
         bool activate (KeyboardKey, Operation);
@@ -114,7 +127,7 @@ class LIBGTKMM2EXT_API Bindings {
         void load (const XMLNode& node);
         bool save (const std::string& path);
         void save (XMLNode& root);
-        
+
         void set_action_map (ActionMap&);
 
         static void set_ignored_state (int mask) {
@@ -127,7 +140,7 @@ class LIBGTKMM2EXT_API Bindings {
 
         KeybindingMap press_bindings;
         KeybindingMap release_bindings;
-
+        
         typedef std::map<MouseButton,Glib::RefPtr<Gtk::Action> > MouseButtonBindingMap;
         MouseButtonBindingMap button_press_bindings;
         MouseButtonBindingMap button_release_bindings;
@@ -138,4 +151,6 @@ class LIBGTKMM2EXT_API Bindings {
 
 } // namespace
 
+std::ostream& operator<<(std::ostream& out, Gtkmm2ext::KeyboardKey const & k);
+
 #endif /* __libgtkmm2ext_bindings_h__ */