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