Merge branch 'master' into cairocanvas
[ardour.git] / libs / gtkmm2ext / gtkmm2ext / barcontroller.h
index a6883238ea6fadc7715518cdf2ebd93699b2504e..76dc8f2d49fd0208dd1cd4d21982fc1bc71bbb25 100644 (file)
     along with this program; if not, write to the Free Software
     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
-    $Id$
 */
 
 #ifndef __gtkmm2ext_bar_controller_h__
 #define __gtkmm2ext_bar_controller_h__
 
-#include <gtkmm.h>
+#include <gtkmm/frame.h>
+#include <gtkmm/drawingarea.h>
 #include <gtkmm2ext/binding_proxy.h>
+#include <cairo.h>
 
-namespace ARDOUR {
-       class Controllable;
-}
 
 namespace Gtkmm2ext {
 
 class BarController : public Gtk::Frame
 {
   public:
-       BarController (Gtk::Adjustment& adj, PBD::Controllable&, sigc::slot<void,char*,unsigned int>);
-       virtual ~BarController () {}
-       
-       enum Style {
+       BarController (Gtk::Adjustment& adj, boost::shared_ptr<PBD::Controllable>);
+
+       virtual ~BarController ();
+
+       enum barStyle {
                LeftToRight,
                RightToLeft,
                Line,
+                Blob,
                CenterOut,
+               
                TopToBottom,
                BottomToTop
        };
 
-       Style style() const { return _style; }
-       void set_style (Style);
-       void set_with_text (bool yn);
+       barStyle style() const { return _style; }
+       void set_style (barStyle);
        void set_use_parent (bool yn);
 
        void set_sensitive (bool yn);
-
-       Gtk::SpinButton& get_spin_button() { return spinner; }
+       
+       void set_logarithmic (bool yn) { logarithmic = yn; }
 
        sigc::signal<void> StartGesture;
        sigc::signal<void> StopGesture;
@@ -60,22 +60,39 @@ class BarController : public Gtk::Frame
 
        Gtk::Widget& event_widget() { return darea; }
 
+       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); }
+
+       /** Emitted when the adjustment spinner is activated or deactivated;
+        *  the parameter is true on activation, false on deactivation.
+        */
+       sigc::signal<void, bool> SpinnerActive;
+
   protected:
        Gtk::Adjustment&    adjustment;
        BindingProxy        binding_proxy;
        Gtk::DrawingArea    darea;
-       sigc::slot<void,char*,unsigned int> label_callback;
        Glib::RefPtr<Pango::Layout> layout;
-       Style              _style;
+       barStyle              _style;
        bool                grabbed;
        bool                switching;
        bool                switch_on_release;
-       bool                with_text;
        double              initial_value;
        double              grab_x;
        GdkWindow*          grab_window;
        Gtk::SpinButton     spinner;
        bool                use_parent;
+       bool                logarithmic;
+        sigc::slot<std::string> _label_slot;
+        bool                    _use_slot;
+
+       virtual std::string get_label (double& /*x*/) {
+               return "";
+       }
+       
+       void create_patterns();
+       Cairo::RefPtr<Cairo::Pattern> pattern;
+       Cairo::RefPtr<Cairo::Pattern> shine_pattern;
 
        virtual bool button_press (GdkEventButton *);
        virtual bool button_release (GdkEventButton *);
@@ -90,6 +107,10 @@ class BarController : public Gtk::Frame
        gint switch_to_spinner ();
 
        void entry_activated ();
+       void drop_grab ();
+       
+       int entry_input (double* new_value);
+       bool entry_output ();
 };