X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Foption_editor.h;h=6ea38648b0b8eaa92d22e923b5c1438487526106;hb=3e59452fa0182ace7785c62acef83cb0d213cc86;hp=c70e6c6bab76a330c7ad48d96291bf6d79cc8ab8;hpb=66cd3d365cd798045364493426aab11ca7421b01;p=ardour.git diff --git a/gtk2_ardour/option_editor.h b/gtk2_ardour/option_editor.h index c70e6c6bab..6ea38648b0 100644 --- a/gtk2_ardour/option_editor.h +++ b/gtk2_ardour/option_editor.h @@ -74,6 +74,8 @@ public: void set_note (std::string const &); + virtual Gtk::Widget& tip_widget() = 0; + private: void maybe_add_note (OptionEditorPage *, int); @@ -90,6 +92,8 @@ public: void set_state_from_config () {} void add_to_page (OptionEditorPage *); + Gtk::Widget& tip_widget() { return *_label; } + private: Gtk::Label* _label; ///< the label used for the heading }; @@ -110,6 +114,8 @@ public: void set_state_from_config () = 0; void add_to_page (OptionEditorPage *); + Gtk::Widget& tip_widget() { return *_box->children().front().get_widget(); } + protected: Gtk::VBox* _box; ///< constituent box for subclasses to add widgets to @@ -163,6 +169,8 @@ public: _button->set_sensitive (yn); } + Gtk::Widget& tip_widget() { return *_button; } + private: void toggled (); @@ -181,6 +189,8 @@ public: void set_state_from_config (); void add_to_page (OptionEditorPage*); + Gtk::Widget& tip_widget() { return *_entry; } + private: void activated (); @@ -192,7 +202,7 @@ private: }; -/** Component which provides the UI to handle an enumerated option using a GTK CheckButton. +/** Component which provides the UI to handle an enumerated option using a GTK ComboBox. * The template parameter is the enumeration. */ template @@ -263,6 +273,8 @@ public: _combo->set_sensitive (yn); } + Gtk::Widget& tip_widget() { return *_combo; } + private: sigc::slot _get; @@ -273,6 +285,109 @@ private: }; +/** Component which provides the UI to handle an enumerated option using a GTK ComboBox. + * The template parameter is the enumeration. + */ +class ComboStringOption : public Option +{ +public: + + /** Construct an ComboOption. + * @param i id + * @param n User-visible name. + * @param g Slot to get the variable's value. + * @param s Slot to set the variable's value. + */ + ComboStringOption ( + std::string const & i, + std::string const & n, + sigc::slot g, + sigc::slot s + ) + : Option (i, n), + _get (g), + _set (s) + { + _label = manage (new Gtk::Label (n + ":")); + _label->set_alignment (0, 0.5); + _combo = manage (new Gtk::ComboBoxText); + _combo->signal_changed().connect (sigc::mem_fun (*this, &ComboStringOption::changed)); + } + + void set_state_from_config () { + _combo->set_active_text (_get()); + } + + void add_to_page (OptionEditorPage* p) + { + add_widgets_to_page (p, _label, _combo); + } + + /** Set the allowed strings for this option + * @param strings a vector of allowed strings + */ + void set_popdown_strings (const std::vector& strings) { + _combo->clear_items (); + for (std::vector::const_iterator i = strings.begin(); i != strings.end(); ++i) { + _combo->append_text (*i); + } + } + + void clear () { + _combo->clear_items(); + } + + void changed () { + _set (_combo->get_active_text ()); + } + + void set_sensitive (bool yn) { + _combo->set_sensitive (yn); + } + + Gtk::Widget& tip_widget() { return *_combo; } + +private: + sigc::slot _get; + sigc::slot _set; + Gtk::Label* _label; + Gtk::ComboBoxText* _combo; +}; + + +/** Component which provides the UI to handle a boolean option which needs + * to be represented as a ComboBox to be clear to the user. + */ +class BoolComboOption : public Option +{ +public: + + BoolComboOption ( + std::string const &, + std::string const &, + std::string const &, + std::string const &, + sigc::slot, + sigc::slot + ); + + void set_state_from_config (); + void add_to_page (OptionEditorPage *); + void changed (); + void set_sensitive (bool); + + Gtk::Widget& tip_widget() { return *_combo; } + +private: + + sigc::slot _get; + sigc::slot _set; + Gtk::Label* _label; + Gtk::ComboBoxText* _combo; +}; + + + /** Component which provides the UI to handle an numeric option using a GTK SpinButton */ template class SpinOption : public Option @@ -339,6 +454,8 @@ public: _set (static_cast (_spin->get_value ()) * _scale); } + Gtk::Widget& tip_widget() { return *_spin; } + private: sigc::slot _get; sigc::slot _set; @@ -356,12 +473,15 @@ public: void set_state_from_config (); void add_to_page (OptionEditorPage *); + Gtk::Widget& tip_widget() { return *_db_slider; } + private: void db_changed (); Gtk::Adjustment _db_adjustment; Gtkmm2ext::HSliderController* _db_slider; Glib::RefPtr _pix; + Glib::RefPtr _pix_desensitised; Gtk::Entry _db_display; Gtk::Label _label; Gtk::HBox _box; @@ -378,6 +498,8 @@ public: void add_to_page (OptionEditorPage *); void set_session (ARDOUR::Session *); + Gtk::Widget& tip_widget() { return _clock; } + private: Gtk::Label _label; AudioClock _clock; @@ -393,6 +515,8 @@ public: void set_state_from_config (); void add_to_page (OptionEditorPage *); + Gtk::Widget& tip_widget() { return _file_chooser; } + private: void file_set (); void current_folder_set ();