rollback to 3428, before the mysterious removal of libs/* at 3431/3432
[ardour.git] / libs / gtkmm2ext / gtkmm2ext / bindable_button.h
index 11f5ab45e7c70d8250059db33968001e585a001a..1cde32c5bab3da9f613bb4fe73f345a5fb0249ce 100644 (file)
     along with this program; if not, write to the Free Software
     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
-    $Id$
 */
 
-#ifndef __pbd_gtkmm_bindable_button_h__
-#define __pbd_gtkmm_bindable_button_h__
+#ifndef __bindable_button_h__
+#define __bindable_button_h__
 
-#include <gtkmm.h>
-#include <gtkmm2ext/popup.h>
+#include <string>
 
+#include <gtkmm2ext/stateful_button.h>
+#include "binding_proxy.h"
 
-namespace MIDI {
+namespace PBD {
        class Controllable;
 }
 
-
-namespace Gtkmm2ext {
-
-class BindableToggleButton : public Gtk::ToggleButton
+class BindableToggleButton : public Gtkmm2ext::StatefulToggleButton
 {
    public:
-       BindableToggleButton(MIDI::Controllable *);
+       BindableToggleButton (PBD::Controllable& c) : binding_proxy (c) {}
 
-       //: Create a check button with a label.
-       //- You won't be able
-       //- to add a widget in this button since it already has a {\class Gtk_Label}
-       //- in it.
-       explicit BindableToggleButton(MIDI::Controllable *, const string &label);
+       explicit BindableToggleButton (PBD::Controllable& c, const std::string &label)
+               : Gtkmm2ext::StatefulToggleButton (label), binding_proxy (c) {}
 
        virtual ~BindableToggleButton() {}
        
-       void set_bind_button_state (guint button, guint statemask);
-       void get_bind_button_state (guint &button, guint &statemask);
-       
-       void midicontrol_set_tip ();
-
-       void midi_learn ();
+       bool on_button_press_event (GdkEventButton *ev) {
+               if (!binding_proxy.button_press_handler (ev)) {
+                       StatefulToggleButton::on_button_press_event (ev);
+                       return false;
+               } else {
+                       return true;
+               }
+       }
        
-  protected:
+       PBD::Controllable* get_controllable() { return binding_proxy.get_controllable(); }
+  private:
+       BindingProxy binding_proxy;
+};
 
-       Gtkmm2ext::PopUp     prompter;
-       
-       MIDI::Controllable* midi_control;
+class BindableButton : public Gtkmm2ext::StatefulButton
+{
+   public:
+       BindableButton (PBD::Controllable& c) : binding_proxy (c) {}
 
-       guint bind_button;
-       guint bind_statemask;
+       explicit BindableButton (PBD::Controllable& c, const std::string &label)
+               : Gtkmm2ext::StatefulButton (label), binding_proxy (c) {}
 
-       bool prompting, unprompting;
-       
-       void init_events ();
-       bool prompter_hiding (GdkEventAny *);
-       void midicontrol_prompt ();
-       void midicontrol_unprompt ();
+       ~BindableButton() {}
        
-       bool on_button_press_event (GdkEventButton *);
-};
-
+       bool on_button_press_event (GdkEventButton *ev) {
+               if (!binding_proxy.button_press_handler (ev)) {
+                       StatefulButton::on_button_press_event (ev);
+                       return false;
+               } else {
+                       return true;
+               }
+       }
+
+       PBD::Controllable* get_controllable() { return binding_proxy.get_controllable(); }
+
+  private:
+       BindingProxy binding_proxy;
 };
 
 #endif