minor fixes/changes based on comparison with existing bindings
[ardour.git] / gtk2_ardour / rc_option_editor.cc
index 4f96486ddc4f815d1dabffd1f5994714d12ae408..9ed1a8f982ce96b0842f400750a71a5bb9dce3a7 100644 (file)
@@ -2,9 +2,11 @@
 #include <gtkmm/stock.h>
 #include <gtkmm/scale.h>
 #include <gtkmm2ext/utils.h>
+#include <gtkmm2ext/slider_controller.h>
 #include "pbd/fpu.h"
 #include "midi++/manager.h"
 #include "midi++/factory.h"
+#include "ardour/dB.h"
 #include "ardour/rc_configuration.h"
 #include "ardour/control_protocol_manager.h"
 #include "control_protocol/control_protocol.h"
@@ -133,7 +135,7 @@ public:
        
 private:
 
-       void model_changed (TreeModel::Path const & p, TreeModel::iterator const & i)
+       void model_changed (TreeModel::Path const &, TreeModel::iterator const & i)
        {
                TreeModel::Row r = *i;
 
@@ -620,7 +622,7 @@ public:
                _box->pack_start (*t, false, false);
        }
 
-       void parameter_changed (string const & p)
+       void parameter_changed (string const &)
        {
                /* XXX: these aren't really config options... */
        }
@@ -711,7 +713,7 @@ public:
                _dpi_adjustment (50, 50, 250, 1, 10),
                _dpi_slider (_dpi_adjustment)
        {
-               _dpi_adjustment.set_value (_rc_config->get_font_scale ());
+               _dpi_adjustment.set_value (_rc_config->get_font_scale () / 1024);
 
                Label* l = manage (new Label (_("Font scaling:")));
                l->set_name ("OptionsLabel");
@@ -730,7 +732,7 @@ public:
        void parameter_changed (string const & p)
        {
                if (p == "font-scale") {
-                       _dpi_adjustment.set_value (_rc_config->get_font_scale() / 1024.);
+                       _dpi_adjustment.set_value (_rc_config->get_font_scale() / 1024);
                }
        }
 
@@ -753,6 +755,80 @@ private:
        HScale _dpi_slider;
 };
 
+class SoloMuteOptions : public OptionEditorBox
+{
+public:
+       SoloMuteOptions (RCConfiguration* c) :
+               _rc_config (c),
+               // 0.781787 is the value needed for gain to be set to 0.
+               _db_adjustment (0.781787, 0.0, 1.0, 0.01, 0.1)
+
+       {
+               if ((pix = ::get_icon ("fader_belt_h")) == 0) {
+                       throw failed_constructor();
+               }
+
+               _db_slider = manage (new HSliderController (pix,
+                                                           &_db_adjustment,
+                                                           false));
+
+
+               parameter_changed ("solo-mute-gain");
+               
+               Label* l = manage (new Label (_("Solo mute cut (dB):")));
+               l->set_name ("OptionsLabel");
+
+               HBox* h = manage (new HBox);
+               h->set_spacing (4);
+               h->pack_start (*l, false, false);
+               h->pack_start (*_db_slider, false, false);
+               h->pack_start (_db_display, false, false);
+
+               set_size_request_to_display_given_text (_db_display, "-99.0", 12, 12);
+               
+               _box->pack_start (*h, false, false);
+
+               _db_adjustment.signal_value_changed().connect (mem_fun (*this, &SoloMuteOptions::db_changed));
+       }
+
+       void parameter_changed (string const & p)
+       {
+               if (p == "solo-mute-gain") {
+                       gain_t val = _rc_config->get_solo_mute_gain();
+
+                       _db_adjustment.set_value (gain_to_slider_position (val));
+
+                       char buf[16];
+
+                       if (val == 0.0) {
+                               snprintf (buf, sizeof (buf), "-inf");
+                       } else {
+                               snprintf (buf, sizeof (buf), "%.2f", coefficient_to_dB (val));
+                       }
+
+                       _db_display.set_text (buf);
+               }
+       }
+
+       void set_state_from_config ()
+       {
+               parameter_changed ("solo-mute-gain");
+       }
+       
+private:
+       
+       void db_changed ()
+       {
+               _rc_config->set_solo_mute_gain (slider_position_to_gain (_db_adjustment.get_value()));
+       }
+
+       RCConfiguration* _rc_config;
+       Adjustment _db_adjustment;
+        Gtkmm2ext::HSliderController* _db_slider;
+        Glib::RefPtr<Gdk::Pixbuf> pix;
+        Entry _db_display;
+};
+
 
 class ControlSurfacesOptions : public OptionEditorBox
 {
@@ -796,7 +872,7 @@ public:
 
 private:
 
-       void model_changed (TreeModel::Path const & p, TreeModel::iterator const & i)
+       void model_changed (TreeModel::Path const &, TreeModel::iterator const & i)
        {
                TreeModel::Row r = *i;
 
@@ -1082,17 +1158,27 @@ RCOptionEditor::RCOptionEditor ()
 
        add_option (_("Audio"), new OptionEditorHeading (_("Solo")));
 
-       ComboOption<SoloModel>* sm = new ComboOption<SoloModel> (
-               "solo-model",
-               _("Solo"),
-               mem_fun (*_rc_config, &RCConfiguration::get_solo_model),
-               mem_fun (*_rc_config, &RCConfiguration::set_solo_model)
+
+       add_option (_("Audio"), 
+            new BoolOption (
+                    "solo-control-is-listen-control",
+                    _("Solo controls are Listen controls"),
+                    mem_fun (*_rc_config, &RCConfiguration::get_solo_control_is_listen_control),
+                    mem_fun (*_rc_config, &RCConfiguration::set_solo_control_is_listen_control)
+                    ));
+
+       ComboOption<ListenPosition>* lp = new ComboOption<ListenPosition> (
+               "listen-position",
+               _("Listen Position"),
+               mem_fun (*_rc_config, &RCConfiguration::get_listen_position),
+               mem_fun (*_rc_config, &RCConfiguration::set_listen_position)
                );
 
-       sm->add (InverseMute, _("in place"));
-       sm->add (SoloBus, _("via bus"));
+       lp->add (AfterFaderListen, _("after-fader listen"));
+       lp->add (PreFaderListen, _("pre-fader listen"));
 
-       add_option (_("Audio"), sm);
+       add_option (_("Audio"), lp);
+       add_option (_("Audio"), new SoloMuteOptions (_rc_config));
 
        add_option (_("Audio"),
             new BoolOption (
@@ -1143,6 +1229,14 @@ RCOptionEditor::RCOptionEditor ()
 
        add_option (_("Audio"), new OptionEditorHeading (_("Connection of tracks and busses")));
 
+       add_option (_("Audio"),
+                   new BoolOption (
+                           "auto-connect-standard-busses",
+                           _("Auto-connect master/monitor busses"),
+                           mem_fun (*_rc_config, &RCConfiguration::get_auto_connect_standard_busses),
+                           mem_fun (*_rc_config, &RCConfiguration::set_auto_connect_standard_busses)
+                           ));
+
        ComboOption<AutoConnectOption>* iac = new ComboOption<AutoConnectOption> (
                "input-auto-connect",
                _("Connect track and bus inputs"),