X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Frc_option_editor.cc;h=9ed1a8f982ce96b0842f400750a71a5bb9dce3a7;hb=9153ef32975efb86cc1609d72a0ea1ebd149faab;hp=33af7787440ee80b533f56a61a88c561f3c2715d;hpb=86f24d20e1616ffaafc97de65db49fd6a91270f8;p=ardour.git diff --git a/gtk2_ardour/rc_option_editor.cc b/gtk2_ardour/rc_option_editor.cc index 33af778744..9ed1a8f982 100644 --- a/gtk2_ardour/rc_option_editor.cc +++ b/gtk2_ardour/rc_option_editor.cc @@ -2,9 +2,11 @@ #include #include #include +#include #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 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* sm = new ComboOption ( - "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* lp = new ComboOption ( + "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 (