correct CANVAS_STRING_VARIABLE macro in UIConfiguration constructor
[ardour.git] / gtk2_ardour / option_editor.h
index 68ffe1f969ed91d8462a279ffb308553b96974d6..47afa77868f6186be211db07894235c8992619e0 100644 (file)
@@ -175,9 +175,10 @@ private:
 
        void toggled ();
 
-       sigc::slot<bool> _get; ///< slot to get the configuration variable's value
+       sigc::slot<bool>       _get; ///< slot to get the configuration variable's value
        sigc::slot<bool, bool> _set;  ///< slot to set the configuration variable's value
-       Gtk::CheckButton* _button; ///< UI button
+       Gtk::CheckButton*      _button; ///< UI button
+       Gtk::Label*            _label; ///< label for button, so we can use markup
 };
 
 /** Component which provides the UI to handle a string option using a GTK Entry */
@@ -226,9 +227,9 @@ public:
                  _get (g),
                  _set (s)
        {
-               _label = manage (new Gtk::Label (n + ":"));
+               _label = Gtk::manage (new Gtk::Label (n + ":"));
                _label->set_alignment (0, 0.5);
-               _combo = manage (new Gtk::ComboBoxText);
+               _combo = Gtk::manage (new Gtk::ComboBoxText);
                _combo->signal_changed().connect (sigc::mem_fun (*this, &ComboOption::changed));
        }
 
@@ -304,12 +305,37 @@ public:
                )
                : Option (i, n)
        {
-               _label = manage (new Gtk::Label (n + ":"));
+               _label = Gtk::manage (new Gtk::Label (n + ":"));
                _label->set_alignment (0, 0.5);
-               _hscale = manage (new Gtk::HScale(adj));
+               _hscale = Gtk::manage (new Gtk::HScale(adj));
+               _adj = NULL;
        }
 
-       void set_state_from_config () { }
+       HSliderOption (
+               std::string const & i,
+               std::string const & n,
+               Gtk::Adjustment *adj,
+               sigc::slot<float> g,
+               sigc::slot<bool, float> s
+               )
+               : Option (i, n)
+               , _get (g)
+               , _set (s)
+               , _adj (adj)
+       {
+               _label = Gtk::manage (new Gtk::Label (n + ":"));
+               _label->set_alignment (0, 0.5);
+               _hscale = Gtk::manage (new Gtk::HScale(*_adj));
+               _adj->signal_value_changed().connect (sigc::mem_fun (*this, &HSliderOption::changed));
+       }
+
+       void set_state_from_config () {
+               if (_adj) _adj->set_value (_get());
+       }
+
+       void changed () {
+               if (_adj) _set (_adj->get_value ());
+       }
 
        void add_to_page (OptionEditorPage* p)
        {
@@ -323,8 +349,11 @@ public:
        Gtk::Widget& tip_widget() { return *_hscale; }
 
 private:
+       sigc::slot<float> _get;
+       sigc::slot<bool, float> _set;
        Gtk::Label* _label;
        Gtk::HScale* _hscale;
+       Gtk::Adjustment* _adj;
 };
 
 /** Component which provides the UI to handle an enumerated option using a GTK ComboBox.
@@ -350,9 +379,9 @@ public:
                  _get (g),
                  _set (s)
        {
-               _label = manage (new Gtk::Label (n + ":"));
+               _label = Gtk::manage (new Gtk::Label (n + ":"));
                _label->set_alignment (0, 0.5);
-               _combo = manage (new Gtk::ComboBoxText);
+               _combo = Gtk::manage (new Gtk::ComboBoxText);
                _combo->signal_changed().connect (sigc::mem_fun (*this, &ComboStringOption::changed));
        }
 
@@ -464,18 +493,18 @@ public:
                  _set (s),
                  _scale (scale)
        {
-               _label = manage (new Gtk::Label (n + ":"));
+               _label = Gtk::manage (new Gtk::Label (n + ":"));
                _label->set_alignment (0, 0.5);
 
-               _spin = manage (new Gtk::SpinButton);
+               _spin = Gtk::manage (new Gtk::SpinButton);
                _spin->set_range (min, max);
                _spin->set_increments (step, page);
 
-               _box = manage (new Gtk::HBox);
+               _box = Gtk::manage (new Gtk::HBox);
                _box->pack_start (*_spin, true, true);
                _box->set_spacing (4);
                if (unit.length()) {
-                       _box->pack_start (*manage (new Gtk::Label (unit)), false, false);
+                       _box->pack_start (*Gtk::manage (new Gtk::Label (unit)), false, false);
                }
 
                _spin->signal_value_changed().connect (sigc::mem_fun (*this, &SpinOption::changed));
@@ -522,8 +551,6 @@ private:
 
        Gtk::Adjustment _db_adjustment;
        Gtkmm2ext::HSliderController* _db_slider;
-       Glib::RefPtr<Gdk::Pixbuf> _pix;
-       Glib::RefPtr<Gdk::Pixbuf> _pix_desensitised;
        Gtk::Entry _db_display;
        Gtk::Label _label;
        Gtk::HBox _box;
@@ -535,19 +562,21 @@ private:
 class ClockOption : public Option
 {
 public:
-       ClockOption (std::string const &, std::string const &, sigc::slot<ARDOUR::framecnt_t>, sigc::slot<bool, ARDOUR::framecnt_t>);
+       ClockOption (std::string const &, std::string const &, sigc::slot<std::string>, sigc::slot<bool, std::string>);
        void set_state_from_config ();
        void add_to_page (OptionEditorPage *);
        void set_session (ARDOUR::Session *);
 
         Gtk::Widget& tip_widget() { return _clock; }
+        AudioClock& clock() { return _clock; }
 
 private:
        void save_clock_time ();
        Gtk::Label _label;
        AudioClock _clock;
-       sigc::slot<ARDOUR::framecnt_t> _get;
-       sigc::slot<bool, ARDOUR::framecnt_t> _set;
+       sigc::slot<std::string> _get;
+       sigc::slot<bool, std::string> _set;
+       ARDOUR::Session *_session;
 };
 
 class DirectoryOption : public Option