Remove unused header include
[ardour.git] / gtk2_ardour / option_editor.cc
index dcae19ef77b6c1fcbfcf1693119182159908e98f..a6fcc734c54565e99c33e45aa82e1728b5a827a5 100644 (file)
@@ -40,25 +40,54 @@ void
 OptionEditorComponent::add_widget_to_page (OptionEditorPage* p, Gtk::Widget* w)
 {
        int const n = p->table.property_n_rows();
-       p->table.resize (n + 1, 3);
+       int m = n + 1;
+       if (!_note.empty ()) {
+               ++m;
+       }
+
+       p->table.resize (m, 3);
        p->table.attach (*w, 1, 3, n, n + 1, FILL | EXPAND);
+
+       maybe_add_note (p, n + 1);
 }
 
 void
 OptionEditorComponent::add_widgets_to_page (OptionEditorPage* p, Gtk::Widget* wa, Gtk::Widget* wb)
 {
        int const n = p->table.property_n_rows();
-       p->table.resize (n + 1, 3);
+       int m = n + 1;
+       if (!_note.empty ()) {
+               ++m;
+       }
+       
+       p->table.resize (m, 3);
        p->table.attach (*wa, 1, 2, n, n + 1, FILL);
        p->table.attach (*wb, 2, 3, n, n + 1, FILL | EXPAND);
+       
+       maybe_add_note (p, n + 1);
+}
+
+void
+OptionEditorComponent::maybe_add_note (OptionEditorPage* p, int n)
+{
+       if (!_note.empty ()) {
+               Gtk::Label* l = manage (new Gtk::Label (string_compose (X_("<i>%1</i>"), _note)));
+               l->set_use_markup (true);
+               p->table.attach (*l, 1, 3, n, n + 1, FILL | EXPAND);
+       }
+}
+
+void
+OptionEditorComponent::set_note (string const & n)
+{
+       _note = n;
 }
 
 OptionEditorHeading::OptionEditorHeading (string const & h)
 {
        std::stringstream s;
        s << "<b>" << h << "</b>";
-       _label = manage (new Label (s.str()));
-       _label->set_alignment (0, 0.5);
+       _label = manage (left_aligned_label (s.str()));
        _label->set_use_markup (true);
 }
 
@@ -111,8 +140,7 @@ EntryOption::EntryOption (string const & i, string const & n, sigc::slot<string>
          _get (g),
          _set (s)
 {
-       _label = manage (new Label (n + ":"));
-       _label->set_alignment (0, 0.5);
+       _label = manage (left_aligned_label (n + ":"));
        _entry = manage (new Entry);
        _entry->signal_activate().connect (sigc::mem_fun (*this, &EntryOption::activated));
 }
@@ -135,6 +163,60 @@ EntryOption::activated ()
        _set (_entry->get_text ());
 }
 
+/** Construct a BoolComboOption.
+ *  @param i id
+ *  @param n User-visible name.
+ *  @param t Text to give for the variable being true.
+ *  @param f Text to give for the variable being false.
+ *  @param g Slot to get the variable's value.
+ *  @param s Slot to set the variable's value.
+ */
+BoolComboOption::BoolComboOption (
+       string const & i, string const & n, string const & t, string const & f, 
+       sigc::slot<bool> g, sigc::slot<bool, bool> s
+       )
+       : Option (i, n)
+       , _get (g)
+       , _set (s)
+{
+       _label = manage (new Label (n + ":"));
+       _label->set_alignment (0, 0.5);
+       _combo = manage (new ComboBoxText);
+
+       /* option 0 is the false option */
+       _combo->append_text (f);
+       /* and option 1 is the true */
+       _combo->append_text (t);
+       
+       _combo->signal_changed().connect (sigc::mem_fun (*this, &BoolComboOption::changed));
+}
+
+void
+BoolComboOption::set_state_from_config ()
+{
+       _combo->set_active (_get() ? 1 : 0);
+}
+
+void
+BoolComboOption::add_to_page (OptionEditorPage* p)
+{
+       add_widgets_to_page (p, _label, _combo);
+}
+
+void
+BoolComboOption::changed ()
+{
+       _set (_combo->get_active_row_number () == 0 ? false : true);
+}
+
+void
+BoolComboOption::set_sensitive (bool yn)
+{
+       _combo->set_sensitive (yn);
+}
+       
+
+         
 FaderOption::FaderOption (string const & i, string const & n, sigc::slot<gain_t> g, sigc::slot<bool, gain_t> s)
        : Option (i, n)
        , _db_adjustment (gain_to_slider_position_with_max (1.0, Config->get_max_gain()), 0, 1, 0.01, 0.1)
@@ -146,7 +228,13 @@ FaderOption::FaderOption (string const & i, string const & n, sigc::slot<gain_t>
                throw failed_constructor ();
        }
 
+       _pix_desensitised = ::get_icon (X_("fader_belt_h_desensitised"));
+       if (_pix_desensitised == 0) {
+               throw failed_constructor ();
+       }
+       
        _db_slider = manage (new HSliderController (_pix,
+                                                   _pix_desensitised,
                                                    &_db_adjustment,
                                                    115,
                                                    false));
@@ -154,12 +242,15 @@ FaderOption::FaderOption (string const & i, string const & n, sigc::slot<gain_t>
        _label.set_text (n + ":");
        _label.set_name (X_("OptionsLabel"));
 
+       _fader_centering_box.pack_start (*_db_slider, true, false);
+
        _box.set_spacing (4);
-       _box.pack_start (*_db_slider, false, false);
+       _box.set_homogeneous (false);
+       _box.pack_start (_fader_centering_box, false, false);
        _box.pack_start (_db_display, false, false);
        _box.show_all ();
 
-       set_size_request_to_display_given_text (_db_display, "-99.0", 12, 12);
+       set_size_request_to_display_given_text (_db_display, "-99.00", 12, 12);
 
        _db_adjustment.signal_value_changed().connect (sigc::mem_fun (*this, &FaderOption::db_changed));
 }
@@ -258,7 +349,7 @@ OptionEditor::OptionEditor (Configuration* c, std::string const & t)
        show_all_children();
 
        /* Watch out for changes to parameters */
-       _config->ParameterChanged.connect (config_connection, invalidator (*this), ui_bind (&OptionEditor::parameter_changed, this, _1), gui_context());
+       _config->ParameterChanged.connect (config_connection, invalidator (*this), boost::bind (&OptionEditor::parameter_changed, this, _1), gui_context());
 }
 
 OptionEditor::~OptionEditor ()