X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Foption_editor.h;h=f76ba2df93e41c3270a70e2bf131add803abb6c7;hb=8dd31447be22c20a51f019c8ea77c27ba975815c;hp=0f0c5956f85aa5f01e1db8c5d991b7fe2cdbff6f;hpb=f4e6f8fec5c4ed705b2f0124666d632c392dbbc3;p=ardour.git diff --git a/gtk2_ardour/option_editor.h b/gtk2_ardour/option_editor.h index 0f0c5956f8..f76ba2df93 100644 --- a/gtk2_ardour/option_editor.h +++ b/gtk2_ardour/option_editor.h @@ -25,7 +25,9 @@ #include #include #include +#include "gtkmm2ext/slider_controller.h" #include "ardour_dialog.h" +#include "ardour/types.h" /** @file option_editor.h * @brief Base class for option editing dialog boxes. @@ -53,6 +55,8 @@ class OptionEditorPage; class OptionEditorComponent { public: + virtual ~OptionEditorComponent() {} + /** Called when a configuration parameter's value has changed. * @param p parameter name */ @@ -99,13 +103,13 @@ public: void add_to_page (OptionEditorPage *); protected: - + Gtk::VBox* _box; ///< constituent box for subclasses to add widgets to }; /** Base class for components which provide UI to change an option */ -class Option : public OptionEditorComponent { - +class Option : public OptionEditorComponent +{ public: /** Construct an Option. * @param i Option id (e.g. "plugins-stop-with-transport") @@ -124,43 +128,64 @@ public: set_state_from_config (); } } - + virtual void set_state_from_config () = 0; virtual void add_to_page (OptionEditorPage*) = 0; std::string id () const { return _id; } - + private: - + std::string _id; std::string _name; }; /** Component which provides the UI to handle a boolean option using a GTK CheckButton */ -class BoolOption : public Option { - +class BoolOption : public Option +{ public: - + BoolOption (std::string const &, std::string const &, sigc::slot, sigc::slot); void set_state_from_config (); - void toggled (); void add_to_page (OptionEditorPage*); - + private: - + + void toggled (); + sigc::slot _get; ///< slot to get the configuration variable's value sigc::slot _set; ///< slot to set the configuration variable's value Gtk::CheckButton* _button; ///< UI button }; +/** Component which provides the UI to handle a string option using a GTK Entry */ +class EntryOption : public Option +{ +public: + + EntryOption (std::string const &, std::string const &, sigc::slot, sigc::slot); + void set_state_from_config (); + void add_to_page (OptionEditorPage*); + +private: + + void activated (); + + sigc::slot _get; ///< slot to get the configuration variable's value + sigc::slot _set; ///< slot to set the configuration variable's value + Gtk::Label* _label; ///< UI label + Gtk::Entry* _entry; ///< UI entry +}; + + /** Component which provides the UI to handle an enumerated option using a GTK CheckButton. * The template parameter is the enumeration. */ template -class ComboOption : public Option { - +class ComboOption : public Option +{ public: /** Construct an ComboOption. @@ -180,7 +205,7 @@ public: _set (s) { _label = manage (new Gtk::Label (n + ":")); - _label->set_alignment (1, 0.5); + _label->set_alignment (0, 0.5); _combo = manage (new Gtk::ComboBoxText); _combo->signal_changed().connect (sigc::mem_fun (*this, &ComboOption::changed)); } @@ -190,7 +215,7 @@ public: while (r < _options.size() && _get () != _options[r]) { ++r; } - + if (r < _options.size()) { _combo->set_active (r); } @@ -209,7 +234,12 @@ public: _options.push_back (e); _combo->append_text (o); } - + + void clear () { + _combo->clear_items(); + _options.clear (); + } + void changed () { uint32_t const r = _combo->get_active_row_number (); if (r < _options.size()) { @@ -217,8 +247,12 @@ public: } } + void set_sensitive (bool yn) { + _combo->set_sensitive (yn); + } + private: - + sigc::slot _get; sigc::slot _set; Gtk::Label* _label; @@ -241,6 +275,8 @@ public: * @param max Variable maximum value. * @param step Step for the spin button. * @param page Page step for the spin button. + * @param unit Unit name. + * @param scale Scaling factor (such that for a value x in the spinbutton, x * scale is written to the config) */ SpinOption ( std::string const & i, @@ -250,42 +286,77 @@ public: T min, T max, T step, - T page + T page, + std::string const & unit = "", + float scale = 1 ) : Option (i, n), _get (g), - _set (s) + _set (s), + _scale (scale) { _label = manage (new Gtk::Label (n + ":")); - _label->set_alignment (1, 0.5); + _label->set_alignment (0, 0.5); + _spin = manage (new Gtk::SpinButton); _spin->set_range (min, max); _spin->set_increments (step, page); + + _box = 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); + } + _spin->signal_value_changed().connect (sigc::mem_fun (*this, &SpinOption::changed)); } void set_state_from_config () { - _spin->set_value (_get ()); + _spin->set_value (_get () / _scale); } void add_to_page (OptionEditorPage* p) { - add_widgets_to_page (p, _label, _spin); + add_widgets_to_page (p, _label, _box); } - + void changed () { - _set (static_cast (_spin->get_value ())); + _set (static_cast (_spin->get_value ()) * _scale); } - + private: sigc::slot _get; sigc::slot _set; + float _scale; Gtk::Label* _label; + Gtk::HBox* _box; Gtk::SpinButton* _spin; }; +class FaderOption : public Option +{ +public: + + FaderOption (std::string const &, std::string const &, sigc::slot g, sigc::slot s); + void set_state_from_config (); + void add_to_page (OptionEditorPage *); + +private: + void db_changed (); + + Gtk::Adjustment _db_adjustment; + Gtkmm2ext::HSliderController* _db_slider; + Glib::RefPtr _pix; + Gtk::Entry _db_display; + Gtk::Label _label; + Gtk::HBox _box; + sigc::slot _get; + sigc::slot _set; +}; + /** Class to represent a single page in an OptionEditor's notebook. * Pages are laid out using a 3-column table; the 1st column is used * to indent non-headings, and the 2nd and 3rd for actual content. @@ -310,11 +381,13 @@ public: void add_option (std::string const &, OptionEditorComponent *); protected: - + ARDOUR::Configuration* _config; - + private: + void parameter_changed (std::string const &); + PBD::ScopedConnection config_connection; Gtk::Notebook _notebook; std::map _pages;