#include <string>
-#include <gtkmm2ext/stateful_button.h>
-#include "binding_proxy.h"
+#include "pbd/signals.h"
+
+#include "gtkmm2ext/visibility.h"
+#include "gtkmm2ext/stateful_button.h"
+#include "gtkmm2ext/binding_proxy.h"
namespace PBD {
class Controllable;
}
-class BindableToggleButton : public Gtkmm2ext::StatefulToggleButton
+class LIBGTKMM2EXT_API BindableToggleButton : public Gtkmm2ext::StatefulToggleButton
{
public:
- BindableToggleButton (PBD::Controllable& c) : binding_proxy (c) {}
-
- explicit BindableToggleButton (PBD::Controllable& c, const std::string &label)
- : Gtkmm2ext::StatefulToggleButton (label), binding_proxy (c) {}
+ BindableToggleButton (const std::string &label)
+ : Gtkmm2ext::StatefulToggleButton (label) {}
+ BindableToggleButton () {}
virtual ~BindableToggleButton() {}
-
+
bool on_button_press_event (GdkEventButton *ev) {
if (!binding_proxy.button_press_handler (ev)) {
StatefulToggleButton::on_button_press_event (ev);
}
}
+ boost::shared_ptr<PBD::Controllable> get_controllable() { return binding_proxy.get_controllable(); }
+ void set_controllable (boost::shared_ptr<PBD::Controllable> c);
+ void watch ();
+
+ protected:
+ void controllable_changed ();
+ PBD::ScopedConnection watch_connection;
+
private:
BindingProxy binding_proxy;
};
-class BindableButton : public Gtkmm2ext::StatefulButton
+class LIBGTKMM2EXT_API BindableButton : public Gtkmm2ext::StatefulButton
{
public:
- BindableButton (PBD::Controllable& c) : binding_proxy (c) {}
-
- explicit BindableButton (PBD::Controllable& c, const std::string &label)
- : Gtkmm2ext::StatefulButton (label), binding_proxy (c) {}
-
+ BindableButton (boost::shared_ptr<PBD::Controllable> c) : binding_proxy (c) {}
~BindableButton() {}
-
+
bool on_button_press_event (GdkEventButton *ev) {
if (!binding_proxy.button_press_handler (ev)) {
StatefulButton::on_button_press_event (ev);
}
}
+ boost::shared_ptr<PBD::Controllable> get_controllable() { return binding_proxy.get_controllable(); }
+ void set_controllable (boost::shared_ptr<PBD::Controllable> c) { binding_proxy.set_controllable (c); }
+
private:
BindingProxy binding_proxy;
};