more changes to wscript files to catch up with waf 1.6 and fix OS X issues
[ardour.git] / gtk2_ardour / option_editor.h
index b584338471e88294bbdca566f25314385c6faad1..f43f71342bb98a8efb605472d46e05fe0a405945 100644 (file)
 #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.
@@ -53,6 +56,8 @@ class OptionEditorPage;
 class OptionEditorComponent
 {
 public:
+       virtual ~OptionEditorComponent() {}
+
        /** Called when a configuration parameter's value has changed.
         *  @param p parameter name
         */
@@ -104,8 +109,8 @@ protected:
 };
 
 /** 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")
@@ -132,21 +137,25 @@ public:
                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 ();
@@ -157,8 +166,8 @@ private:
 };
 
 /** 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>);
@@ -180,8 +189,8 @@ private:
  *  The template parameter is the enumeration.
  */
 template <class T>
-class ComboOption : public Option {
-
+class ComboOption : public Option
+{
 public:
 
        /** Construct an ComboOption.
@@ -332,6 +341,42 @@ private:
        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.
@@ -355,13 +400,17 @@ public:
 
        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;