- UI::instance()->set_tip (rude_audition_button, _("When active, auditioning is active.\nClick to stop the audition"));
-
- solo_model_box.set_spacing (6);
- solo_model_box.pack_start (solo_in_place_button, false, false);
- solo_model_box.pack_start (afl_button, false, false);
- solo_model_box.pack_start (pfl_button, false, false);
-
- solo_in_place_button.show ();
- afl_button.show ();
- pfl_button.show ();
- solo_model_box.show ();
-
- act = ActionManager::get_action (X_("Solo"), X_("solo-use-in-place"));
- if (act) {
- act->connect_proxy (solo_in_place_button);
- }
-
- act = ActionManager::get_action (X_("Solo"), X_("solo-use-afl"));
- if (act) {
- act->connect_proxy (afl_button);
- }
-
- act = ActionManager::get_action (X_("Solo"), X_("solo-use-pfl"));
- if (act) {
- act->connect_proxy (pfl_button);
- }
-
- /* Solo Boost */
-
- solo_boost_control = new MotionFeedback (little_knob_pixbuf, MotionFeedback::Rotary, "", &solo_boost_adjustment, false, 30, 30);
-
- HBox* solo_packer = manage (new HBox);
- solo_packer->set_spacing (12);
- solo_packer->show ();
-
- spin_label = manage (new Label (_("Solo Boost")));
- spin_packer = manage (new VBox);
- spin_packer->show ();
- spin_packer->set_spacing (6);
- spin_packer->pack_start (*solo_boost_control, false, false);
- spin_packer->pack_start (*spin_label, false, false);
-
- solo_packer->pack_start (*spin_packer, true, true);
-
- /* Solo (SiP) cut */
-
- solo_cut_control = new MotionFeedback (little_knob_pixbuf, MotionFeedback::Rotary, "", &solo_cut_adjustment, false, 30, 30);
-
- spin_label = manage (new Label (_("SiP Cut")));
- spin_packer = manage (new VBox);
- spin_packer->show ();
- spin_packer->set_spacing (6);
- spin_packer->pack_start (*solo_cut_control, false, false);
- spin_packer->pack_start (*spin_label, false, false);
-
- solo_packer->pack_start (*spin_packer, true, true);
-
- exclusive_solo_button.set_name (X_("MonitorOptButton"));
- ARDOUR_UI::instance()->set_tip (&exclusive_solo_button, _("Exclusive solo means that only 1 solo is active at a time"));
-
- act = ActionManager::get_action (X_("Monitor"), X_("toggle-exclusive-solo"));
- if (act) {
- act->connect_proxy (exclusive_solo_button);
- }
-
- solo_mute_override_button.set_name (X_("MonitorOptButton"));
- ARDOUR_UI::instance()->set_tip (&solo_mute_override_button, _("If enabled, solo will override mute\n(a soloed & muted track or bus will be audible)"));
-
- act = ActionManager::get_action (X_("Monitor"), X_("toggle-mute-overrides-solo"));
- if (act) {
- act->connect_proxy (solo_mute_override_button);
- }
-
- HBox* solo_opt_box = manage (new HBox);
- solo_opt_box->set_spacing (12);
- solo_opt_box->set_homogeneous (true);
- solo_opt_box->pack_start (exclusive_solo_button);
- solo_opt_box->pack_start (solo_mute_override_button);
- solo_opt_box->show ();
-
- upper_packer.set_spacing (12);
-
- Gtk::HBox* rude_box = manage (new HBox);
- rude_box->pack_start (rude_solo_button, true, true);
- rude_box->pack_start (rude_iso_button, true, true);
-
- upper_packer.pack_start (*rude_box, false, false);
- upper_packer.pack_start (rude_audition_button, false, false);
- upper_packer.pack_start (solo_model_box, false, false);
- upper_packer.pack_start (*solo_opt_box, false, false);
- upper_packer.pack_start (*solo_packer, false, false);
-
- act = ActionManager::get_action (X_("Monitor"), X_("monitor-cut-all"));
- if (act) {
- act->connect_proxy (cut_all_button);
- }
-
- act = ActionManager::get_action (X_("Monitor"), X_("monitor-dim-all"));
- if (act) {
- act->connect_proxy (dim_all_button);
- }
-
- act = ActionManager::get_action (X_("Monitor"), X_("monitor-mono"));
- if (act) {
- act->connect_proxy (mono_button);
- }
-
- cut_all_button.set_name (X_("MonitorMuteButton"));
- cut_all_button.unset_flags (Gtk::CAN_FOCUS);
- cut_all_button.set_size_request (50,50);
- cut_all_button.show ();
-
- HBox* bbox = manage (new HBox);
-
- bbox->set_spacing (12);
- bbox->pack_start (mono_button, true, true);
- bbox->pack_start (dim_all_button, true, true);
-
- dim_all_button.set_name (X_("MonitorDimButton"));
- dim_all_button.unset_flags (Gtk::CAN_FOCUS);
- mono_button.set_name (X_("MonitorMonoButton"));
- mono_button.unset_flags (Gtk::CAN_FOCUS);
-
- lower_packer.set_spacing (12);
- lower_packer.pack_start (*bbox, false, false);
- lower_packer.pack_start (cut_all_button, false, false);
-
- /* Gain */
-
- gain_control = new MotionFeedback (big_knob_pixbuf, MotionFeedback::Rotary, "", &gain_adjustment, false, 80, 80);
-
- spin_label = manage (new Label (_("Gain")));
- spin_packer = manage (new VBox);
- spin_packer->show ();
- spin_packer->set_spacing (6);
- spin_packer->pack_start (*gain_control, false, false);
- spin_packer->pack_start (*spin_label, false, false);
-
- lower_packer.pack_start (*spin_packer, true, true);
-
- vpacker.set_border_width (12);
- vpacker.set_spacing (12);
- vpacker.pack_start (upper_packer, false, false);
- vpacker.pack_start (*dim_packer, false, false);
- vpacker.pack_start (main_table, false, false);
- vpacker.pack_start (lower_packer, false, false);
-
- hpacker.set_border_width (12);
- hpacker.set_spacing (12);
- hpacker.pack_start (vpacker, true, true);
-
- gain_control->show_all ();
- dim_control->show_all ();
- solo_boost_control->show_all ();
-
- main_table.show ();
- hpacker.show ();
- upper_packer.show ();
- lower_packer.show ();
- vpacker.show ();
-
- populate_buttons ();
- map_state ();
- assign_controllables ();
-
- _tearoff = new TearOff (hpacker);
-
- /* if torn off, make this a normal window */
- _tearoff->tearoff_window().set_type_hint (Gdk::WINDOW_TYPE_HINT_NORMAL);
- _tearoff->tearoff_window().set_title (X_("Monitor"));
- _tearoff->tearoff_window().signal_key_press_event().connect (sigc::ptr_fun (forward_key_press), false);
-
- /* catch changes that affect us */
-
- Config->ParameterChanged.connect (config_connection, invalidator (*this), ui_bind (&MonitorSection::parameter_changed, this, _1), gui_context());
+ UI::instance()->set_tip (rude_audition_button, _("When active, auditioning is active.\nClick to stop the audition"));
+
+ solo_in_place_button.set_name ("monitor section solo model");
+ afl_button.set_name ("monitor section solo model");
+ pfl_button.set_name ("monitor section solo model");
+
+ solo_model_box.set_spacing (6);
+ solo_model_box.pack_start (solo_in_place_button, true, false);
+ solo_model_box.pack_start (afl_button, true, false);
+ solo_model_box.pack_start (pfl_button, true, false);
+
+ solo_in_place_button.show ();
+ afl_button.show ();
+ pfl_button.show ();
+ solo_model_box.show ();
+
+ act = ActionManager::get_action (X_("Solo"), X_("solo-use-in-place"));
+ ARDOUR_UI::instance()->tooltips().set_tip (solo_in_place_button, _("Solo controls affect solo-in-place"));
+ if (act) {
+ solo_in_place_button.set_related_action (act);
+ }
+
+ act = ActionManager::get_action (X_("Solo"), X_("solo-use-afl"));
+ ARDOUR_UI::instance()->tooltips().set_tip (afl_button, _("Solo controls toggle after-fader-listen"));
+ if (act) {
+ afl_button.set_related_action (act);
+ }
+
+ act = ActionManager::get_action (X_("Solo"), X_("solo-use-pfl"));
+ ARDOUR_UI::instance()->tooltips().set_tip (pfl_button, _("Solo controls toggle pre-fader-listen"));
+ if (act) {
+ pfl_button.set_related_action (act);
+ }
+
+ /* Solo Boost */
+
+ solo_boost_control = new ArdourKnob ();
+ solo_boost_control->set_name("monitor knob");
+ solo_boost_control->set_size_request(40,40);
+ ARDOUR_UI::instance()->tooltips().set_tip (*solo_boost_control, _("Gain increase for soloed signals (0dB is normal)"));
+
+ solo_boost_display = new ArdourDisplay ();
+ solo_boost_display->set_name("monitor section cut");
+ solo_boost_display->set_size_request(80,20);
+ solo_boost_display->add_controllable_preset("0dB", 0.0);
+ solo_boost_display->add_controllable_preset("3 dB", 3.0);
+ solo_boost_display->add_controllable_preset("6 dB", 6.0);
+ solo_boost_display->add_controllable_preset("10 dB", 10.0);
+
+ HBox* solo_packer = manage (new HBox);
+ solo_packer->set_spacing (6);
+ solo_packer->show ();
+
+ spin_label = manage (new Label (_("Solo Boost")));
+ spin_packer = manage (new VBox);
+ spin_packer->show ();
+ spin_packer->set_spacing (3);
+ spin_packer->pack_start (*spin_label, false, false);
+ spin_packer->pack_start (*solo_boost_control, false, false);
+ spin_packer->pack_start (*solo_boost_display, false, false);
+
+ solo_packer->pack_start (*spin_packer, true, false);
+
+ /* Solo (SiP) cut */
+
+ solo_cut_control = new ArdourKnob ();
+ solo_cut_control->set_name ("monitor knob");
+ solo_cut_control->set_size_request (40,40);
+ ARDOUR_UI::instance()->tooltips().set_tip (*solo_cut_control, _("Gain reduction non-soloed signals\nA value above -inf dB causes \"solo-in-front\""));
+
+ solo_cut_display = new ArdourDisplay ();
+ solo_cut_display->set_name("monitor section cut");
+ solo_cut_display->set_size_request(80,20);
+ solo_cut_display->add_controllable_preset("0dB", 0.0);
+ solo_cut_display->add_controllable_preset("-6 dB", -6.0);
+ solo_cut_display->add_controllable_preset("-12 dB", -12.0);
+ solo_cut_display->add_controllable_preset("-20 dB", -20.0);
+ solo_cut_display->add_controllable_preset("OFF", -1200.0);
+
+ spin_label = manage (new Label (_("SiP Cut")));
+ spin_packer = manage (new VBox);
+ spin_packer->show ();
+ spin_packer->set_spacing (3);
+ spin_packer->pack_start (*spin_label, false, false);
+ spin_packer->pack_start (*solo_cut_control, false, false);
+ spin_packer->pack_start (*solo_cut_display, false, false);
+
+ solo_packer->pack_start (*spin_packer, true, false);
+
+ /* Dim */
+
+ dim_control = new ArdourKnob ();
+ dim_control->set_name ("monitor knob");
+ dim_control->set_size_request (40,40);
+ ARDOUR_UI::instance()->tooltips().set_tip (*dim_control, _("Gain reduction to use when dimming monitor outputs"));
+
+ dim_display = new ArdourDisplay ();
+ dim_display->set_name("monitor section cut");
+ dim_display->set_size_request(80,20);
+ dim_display->add_controllable_preset("0dB", 0.0);
+ dim_display->add_controllable_preset("-3 dB", -3.0);
+ dim_display->add_controllable_preset("-6 dB", -6.0);
+ dim_display->add_controllable_preset("-12 dB", -12.0);
+ dim_display->add_controllable_preset("-20 dB", -20.0);
+
+ HBox* dim_packer = manage (new HBox);
+ dim_packer->show ();
+
+ spin_label = manage (new Label (_("Dim")));
+ spin_packer = manage (new VBox);
+ spin_packer->show ();
+ spin_packer->set_spacing (3);
+ spin_packer->pack_start (*spin_label, false, false);
+ spin_packer->pack_start (*dim_control, false, false);
+ spin_packer->pack_start (*dim_display, false, false);
+
+ dim_packer->pack_start (*spin_packer, true, false);
+
+ exclusive_solo_button.set_text (_("Excl. Solo"));
+ exclusive_solo_button.set_name (X_("monitor solo exclusive"));
+ ARDOUR_UI::instance()->set_tip (&exclusive_solo_button, _("Exclusive solo means that only 1 solo is active at a time"));
+
+ act = ActionManager::get_action (X_("Monitor"), X_("toggle-exclusive-solo"));
+ if (act) {
+ exclusive_solo_button.set_related_action (act);
+ }
+
+ solo_mute_override_button.set_text (_("Solo » Mute"));
+ solo_mute_override_button.set_name (X_("monitor solo override"));
+ ARDOUR_UI::instance()->set_tip (&solo_mute_override_button, _("If enabled, solo will override mute\n(a soloed & muted track or bus will be audible)"));
+
+ act = ActionManager::get_action (X_("Monitor"), X_("toggle-mute-overrides-solo"));
+ if (act) {
+ solo_mute_override_button.set_related_action (act);
+ }
+
+ HBox* solo_opt_box = manage (new HBox);
+ solo_opt_box->set_spacing (12);
+ solo_opt_box->set_homogeneous (true);
+ solo_opt_box->pack_start (exclusive_solo_button);
+ solo_opt_box->pack_start (solo_mute_override_button);
+ solo_opt_box->show ();
+
+ upper_packer.set_spacing (6);
+
+ Gtk::HBox* rude_box = manage (new HBox);
+ rude_box->pack_start (rude_solo_button, true, true);
+ rude_box->pack_start (rude_iso_button, true, true);
+
+ upper_packer.pack_start (*rude_box, false, false);
+ upper_packer.pack_start (rude_audition_button, false, false);
+ upper_packer.pack_start (solo_model_box, false, false, 12);
+ upper_packer.pack_start (*solo_opt_box, false, false);
+ upper_packer.pack_start (*solo_packer, false, false, 12);
+
+ cut_all_button.set_text (_("Mute"));
+ cut_all_button.set_name ("monitor section cut");
+ cut_all_button.set_name (X_("monitor section cut"));
+ cut_all_button.set_size_request (-1,50);
+ cut_all_button.show ();
+
+ act = ActionManager::get_action (X_("Monitor"), X_("monitor-cut-all"));
+ if (act) {
+ cut_all_button.set_related_action (act);
+ }
+
+ dim_all_button.set_text (_("Dim"));
+ dim_all_button.set_name ("monitor section dim");
+ act = ActionManager::get_action (X_("Monitor"), X_("monitor-dim-all"));
+ if (act) {
+ dim_all_button.set_related_action (act);
+ }
+
+ mono_button.set_text (_("Mono"));
+ mono_button.set_name ("monitor section mono");
+ act = ActionManager::get_action (X_("Monitor"), X_("monitor-mono"));
+ if (act) {
+ mono_button.set_related_action (act);
+ }
+
+ HBox* bbox = manage (new HBox);
+
+ bbox->set_spacing (12);
+ bbox->pack_start (mono_button, true, true);
+ bbox->pack_start (dim_all_button, true, true);
+
+ lower_packer.set_spacing (12);
+ lower_packer.pack_start (*bbox, false, false);
+ lower_packer.pack_start (cut_all_button, false, false);
+
+ /* Gain */
+
+ gain_control = new ArdourKnob ();
+ gain_control->set_name("monitor knob");
+ gain_control->set_size_request(80,80);
+
+ gain_display = new ArdourDisplay ();
+ gain_display->set_name("monitor section cut");
+ gain_display->set_size_request(40,20);
+ gain_display->add_controllable_preset("0dB", 0.0);
+ gain_display->add_controllable_preset("-3 dB", -3.0);
+ gain_display->add_controllable_preset("-6 dB", -6.0);
+ gain_display->add_controllable_preset("-12 dB", -12.0);
+ gain_display->add_controllable_preset("-20 dB", -20.0);
+ gain_display->add_controllable_preset("-30 dB", -30.0);
+
+ spin_label = manage (new Label (_("Monitor")));
+ spin_packer = manage (new VBox);
+ spin_packer->show ();
+ spin_packer->set_spacing (3);
+ spin_packer->pack_start (*spin_label, false, false);
+ spin_packer->pack_start (*gain_control, false, false);
+ spin_packer->pack_start (*gain_display, false, false);
+
+ lower_packer.pack_start (*spin_packer, true, true);
+
+ channel_table_scroller.set_policy (Gtk::POLICY_NEVER, Gtk::POLICY_AUTOMATIC);
+ channel_table_scroller.set_size_request (-1, 150);
+ channel_table_scroller.set_shadow_type (Gtk::SHADOW_NONE);
+ channel_table_scroller.show ();
+ channel_table_scroller.add (channel_table_viewport);
+
+ channel_size_group = SizeGroup::create (SIZE_GROUP_HORIZONTAL);
+ channel_size_group->add_widget (channel_table_header);
+ channel_size_group->add_widget (channel_table);
+
+ channel_table_header.resize (1, 5);
+
+ Label* l1 = manage (new Label (X_(" ")));
+ l1->set_name (X_("MonitorSectionLabel"));
+ channel_table_header.attach (*l1, 0, 1, 0, 1, EXPAND|FILL);
+
+ l1 = manage (new Label (X_("Mute")));
+ l1->set_name (X_("MonitorSectionLabel"));
+ channel_table_header.attach (*l1, 1, 2, 0, 1, EXPAND|FILL);
+
+ l1 = manage (new Label (X_("Dim")));
+ l1->set_name (X_("MonitorSectionLabel"));
+ channel_table_header.attach (*l1, 2, 3, 0, 1, EXPAND|FILL);
+
+ l1 = manage (new Label (X_("Solo")));
+ l1->set_name (X_("MonitorSectionLabel"));
+ channel_table_header.attach (*l1, 3, 4, 0, 1, EXPAND|FILL);
+
+ l1 = manage (new Label (X_("Inv")));
+ l1->set_name (X_("MonitorSectionLabel"));
+ channel_table_header.attach (*l1, 4, 5, 0, 1, EXPAND|FILL);
+
+ channel_table_header.show ();
+
+ table_hpacker.pack_start (channel_table, true, true);
+
+ /* note that we don't pack the table_hpacker till later
+ */
+
+ vpacker.set_border_width (6);
+ vpacker.set_spacing (12);
+ vpacker.pack_start (upper_packer, false, false);
+ vpacker.pack_start (*dim_packer, false, false);
+ vpacker.pack_start (channel_table_header, false, false);
+ vpacker.pack_start (channel_table_packer, false, false);
+ vpacker.pack_start (lower_packer, false, false);
+
+ hpacker.pack_start (vpacker, true, true);
+
+ gain_control->show_all ();
+ gain_display->show_all ();
+ dim_control->show_all ();
+ dim_display->show_all();
+ solo_boost_control->show_all ();
+ solo_boost_display->show_all();
+
+ channel_table.show ();
+ hpacker.show ();
+ upper_packer.show ();
+ lower_packer.show ();
+ vpacker.show ();
+
+ populate_buttons ();
+ map_state ();
+ assign_controllables ();
+
+ _tearoff = new TearOff (hpacker);
+
+ /* if torn off, make this a normal window */
+ _tearoff->tearoff_window().set_type_hint (Gdk::WINDOW_TYPE_HINT_NORMAL);
+ _tearoff->tearoff_window().set_title (X_("Monitor"));
+ _tearoff->tearoff_window().signal_key_press_event().connect (sigc::ptr_fun (forward_key_press), false);
+
+ /* catch changes that affect us */
+
+ Config->ParameterChanged.connect (config_connection, invalidator (*this), boost::bind (&MonitorSection::parameter_changed, this, _1), gui_context());