#include <gtkmm/comboboxtext.h>
#include <gtkmm/spinbutton.h>
#include <gtkmm/table.h>
+#include "gtkmm2ext/slider_controller.h"
#include "ardour_dialog.h"
+#include "audio_clock.h"
+#include "ardour/types.h"
/** @file option_editor.h
* @brief Base class for option editing dialog boxes.
class OptionEditorComponent
{
public:
+ virtual ~OptionEditorComponent() {}
+
/** Called when a configuration parameter's value has changed.
* @param p parameter name
*/
};
/** 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")
return _id;
}
-private:
+protected:
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<bool>, sigc::slot<bool, bool>);
void set_state_from_config ();
void add_to_page (OptionEditorPage*);
+ void set_sensitive (bool yn) {
+ _button->set_sensitive (yn);
+ }
+
private:
void toggled ();
};
/** Component which provides the UI to handle a string option using a GTK Entry */
-class EntryOption : public Option {
-
+class EntryOption : public Option
+{
public:
EntryOption (std::string const &, std::string const &, sigc::slot<std::string>, sigc::slot<bool, std::string>);
* The template parameter is the enumeration.
*/
template <class T>
-class ComboOption : public Option {
-
+class ComboOption : public Option
+{
public:
/** Construct an ComboOption.
_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));
}
_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()) {
}
}
+ void set_sensitive (bool yn) {
+ _combo->set_sensitive (yn);
+ }
+
private:
sigc::slot<T> _get;
_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);
Gtk::SpinButton* _spin;
};
+class FaderOption : public Option
+{
+public:
+
+ FaderOption (std::string const &, std::string const &, sigc::slot<ARDOUR::gain_t> g, sigc::slot<bool, ARDOUR::gain_t> 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<Gdk::Pixbuf> _pix;
+ Gtk::Entry _db_display;
+ Gtk::Label _label;
+ Gtk::HBox _box;
+ sigc::slot<ARDOUR::gain_t> _get;
+ sigc::slot<bool, ARDOUR::gain_t> _set;
+};
+
+class ClockOption : public Option
+{
+public:
+ ClockOption (std::string const &, std::string const &, sigc::slot<ARDOUR::framecnt_t>, sigc::slot<bool, ARDOUR::framecnt_t>);
+ void set_state_from_config ();
+ void add_to_page (OptionEditorPage *);
+ void set_session (ARDOUR::Session *);
+
+private:
+ Gtk::Label _label;
+ AudioClock _clock;
+ sigc::slot<ARDOUR::framecnt_t> _get;
+ sigc::slot<bool, ARDOUR::framecnt_t> _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.
void add_option (std::string const &, OptionEditorComponent *);
+ void set_current_page (std::string const &);
+
protected:
+ virtual void parameter_changed (std::string const &);
+
ARDOUR::Configuration* _config;
private:
- void parameter_changed (std::string const &);
+ PBD::ScopedConnection config_connection;
Gtk::Notebook _notebook;
std::map<std::string, OptionEditorPage*> _pages;