#include <gtkmm/comboboxtext.h>
#include <gtkmm/spinbutton.h>
#include <gtkmm/table.h>
+#include <gtkmm/window.h>
+
#include "gtkmm2ext/slider_controller.h"
+
#include "ardour_window.h"
#include "audio_clock.h"
#include "ardour/types.h"
* options dialog.
*/
-namespace ARDOUR {
+namespace PBD {
class Configuration;
}
private:
void maybe_add_note (OptionEditorPage *, int);
-
+
std::string _note;
};
Gtk::VBox* _box; ///< constituent box for subclasses to add widgets to
};
+class RcConfigDisplay : public OptionEditorComponent
+{
+public:
+ RcConfigDisplay (std::string const &, std::string const &, sigc::slot<std::string>, char s = '\0');
+ void add_to_page (OptionEditorPage *);
+ void parameter_changed (std::string const & p);
+ void set_state_from_config ();
+ Gtk::Widget& tip_widget() { return *_info; }
+protected:
+ sigc::slot<std::string> _get;
+ Gtk::Label* _label;
+ Gtk::Label* _info;
+ std::string _id;
+ char _sep;
+};
+
+class RcActionButton : public OptionEditorComponent
+{
+public:
+ RcActionButton (std::string const & t, const Glib::SignalProxy0< void >::SlotType & slot, std::string const & l = "");
+ void add_to_page (OptionEditorPage *);
+
+ void parameter_changed (std::string const & p) {}
+ void set_state_from_config () {}
+ Gtk::Widget& tip_widget() { return *_button; }
+
+protected:
+ Gtk::Button* _button;
+ Gtk::Label* _label;
+ std::string _name;
+};
+
/** Base class for components which provide UI to change an option */
class Option : public OptionEditorComponent
{
* @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)
+ * @param digits Number of decimal digits to show.
*/
SpinOption (
std::string const & i,
T step,
T page,
std::string const & unit = "",
- float scale = 1
+ float scale = 1,
+ unsigned digits = 0
)
: Option (i, n),
_get (g),
_spin = Gtk::manage (new Gtk::SpinButton);
_spin->set_range (min, max);
_spin->set_increments (step, page);
+ _spin->set_digits(digits);
_box = Gtk::manage (new Gtk::HBox);
_box->pack_start (*_spin, true, true);
private:
void db_changed ();
+ void on_activate ();
+ bool on_key_press (GdkEventKey* ev);
Gtk::Adjustment _db_adjustment;
Gtkmm2ext::HSliderController* _db_slider;
Gtk::Widget& tip_widget() { return _file_chooser; }
private:
- void file_set ();
- void current_folder_set ();
-
+ void selection_changed ();
+
sigc::slot<std::string> _get; ///< slot to get the configuration variable's value
sigc::slot<bool, std::string> _set; ///< slot to set the configuration variable's value
Gtk::FileChooserButton _file_chooser;
};
/** The OptionEditor dialog base class */
-class OptionEditor : public ArdourWindow
+class OptionEditor : virtual public sigc::trackable
{
public:
- OptionEditor (ARDOUR::Configuration *, std::string const &);
- ~OptionEditor ();
+ OptionEditor (PBD::Configuration *);
+ virtual ~OptionEditor ();
void add_option (std::string const &, OptionEditorComponent *);
+ void add_page (std::string const &, Gtk::Widget& page_widget);
void set_current_page (std::string const &);
protected:
-
virtual void parameter_changed (std::string const &);
- ARDOUR::Configuration* _config;
+ PBD::Configuration* _config;
+ Gtk::Notebook& notebook() { return _notebook; }
+ Gtk::TreeView& treeview() { return option_treeview; }
-private:
+ class OptionColumns : public Gtk::TreeModel::ColumnRecord
+ {
+ public:
+ Gtk::TreeModelColumn<std::string> name;
+ Gtk::TreeModelColumn<Gtk::Widget*> widget;
- PBD::ScopedConnection config_connection;
+ OptionColumns() {
+ add (name);
+ add (widget);
+ }
+ };
+
+ OptionColumns option_columns;
+ Glib::RefPtr<Gtk::TreeStore> option_tree;
+private:
+ PBD::ScopedConnection config_connection;
Gtk::Notebook _notebook;
+ Gtk::TreeView option_treeview;
std::map<std::string, OptionEditorPage*> _pages;
+
+ void add_path_to_treeview (std::string const &, Gtk::Widget&);
+ void treeview_row_selected ();
};
-#endif /* __gtk_ardour_option_editor_h__ */
+/** The OptionEditor dialog-as-container base class */
+class OptionEditorContainer : public OptionEditor, public Gtk::VBox
+{
+public:
+ OptionEditorContainer (PBD::Configuration *, std::string const &);
+ ~OptionEditorContainer() {}
+private:
+ Gtk::HBox hpacker;
+};
+/** The OptionEditor dialog-as-container base class */
+class OptionEditorWindow : public OptionEditor, public ArdourWindow
+{
+public:
+ OptionEditorWindow (PBD::Configuration *, std::string const &);
+ ~OptionEditorWindow() {}
+private:
+ Gtk::VBox container;
+ Gtk::HBox hpacker;
+};
+#endif /* __gtk_ardour_option_editor_h__ */