summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2010-03-19 20:53:22 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2010-03-19 20:53:22 +0000
commitd1630219500305397e1608e09508872f0ab2f836 (patch)
tree5ae9bc1619fb2a0646628614aa85103288bfee60 /gtk2_ardour
parent587021ac0b63897d9b984d01b62b5dbb8514dd4f (diff)
lots of tricks & tweaks related to the monitor section and All That It Uses
git-svn-id: svn://localhost/ardour2/branches/3.0@6777 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/ardour3_ui_dark.rc.in4
-rw-r--r--gtk2_ardour/ardour_ui.h5
-rw-r--r--gtk2_ardour/ardour_ui2.cc55
-rw-r--r--gtk2_ardour/ardour_ui_ed.cc6
-rw-r--r--gtk2_ardour/icons/bigknob.pngbin69192 -> 69192 bytes
-rw-r--r--gtk2_ardour/mixer_strip.cc8
-rw-r--r--gtk2_ardour/mixer_ui.cc28
-rw-r--r--gtk2_ardour/monitor_section.cc204
-rw-r--r--gtk2_ardour/monitor_section.h10
9 files changed, 173 insertions, 147 deletions
diff --git a/gtk2_ardour/ardour3_ui_dark.rc.in b/gtk2_ardour/ardour3_ui_dark.rc.in
index ff7ecc9a3c..2ec1f56eee 100644
--- a/gtk2_ardour/ardour3_ui_dark.rc.in
+++ b/gtk2_ardour/ardour3_ui_dark.rc.in
@@ -1132,7 +1132,7 @@ style "flashing_alert" = "very_small_text"
{
fg[NORMAL] = { 0.80, 0.80, 0.80 }
bg[NORMAL] = { 0.26, 0.26, 0.31 }
-
+
fg[ACTIVE] = { 0.80, 0.80, 0.80 }
bg[ACTIVE] = { 1.0, 0, 0}
}
@@ -1585,6 +1585,8 @@ widget "*BypassButton" style:highest "red_when_active"
widget "*BypassButton*" style:highest "red_when_active"
widget "*TransportSoloAlert" style:highest "flashing_alert"
widget "*TransportSoloAlert.*" style:highest "flashing_alert"
+widget "*TransportSoloAlert-active" style:highest "flashing_alert"
+widget "*TransportSoloAlert-alternate" style:highest "flashing_alert"
widget "*SendAlert" style:highest "green_flashing_alert"
widget "*SendAlert.*" style:highest "green_flashing_alert"
widget "*TransportAuditioningAlert" style:highest "flashing_alert"
diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h
index e131cf5431..a851e03981 100644
--- a/gtk2_ardour/ardour_ui.h
+++ b/gtk2_ardour/ardour_ui.h
@@ -184,6 +184,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr
XMLNode* editor_settings() const;
XMLNode* mixer_settings () const;
XMLNode* keyboard_settings () const;
+ XMLNode* tearoff_settings (const char*) const;
void save_ardour_state ();
gboolean configure_handler (GdkEventConfigure* conf);
@@ -455,8 +456,8 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr
void auditioning_changed (bool);
void _auditioning_changed (bool);
- void solo_alert_toggle ();
- void audition_alert_toggle ();
+ bool solo_alert_press (GdkEventButton* ev);
+ bool audition_alert_press (GdkEventButton* ev);
void big_clock_value_changed ();
void primary_clock_value_changed ();
diff --git a/gtk2_ardour/ardour_ui2.cc b/gtk2_ardour/ardour_ui2.cc
index 52ab0716d8..6162ef22d9 100644
--- a/gtk2_ardour/ardour_ui2.cc
+++ b/gtk2_ardour/ardour_ui2.cc
@@ -72,10 +72,6 @@ ARDOUR_UI::setup_windows ()
we_have_dependents ();
- setup_clock ();
- setup_transport();
- build_menu_bar ();
-
theme_manager->signal_unmap().connect (sigc::bind (sigc::ptr_fun(&ActionManager::uncheck_toggleaction), X_("<Actions>/Common/ToggleThemeManager")));
#ifdef TOP_MENUBAR
@@ -97,6 +93,10 @@ ARDOUR_UI::setup_windows ()
editor->add_toplevel_controls (top_packer);
+ setup_clock ();
+ setup_transport();
+ build_menu_bar ();
+
setup_tooltips ();
return 0;
@@ -174,6 +174,22 @@ block_prelight (Gtk::Widget& w)
}
#endif
+XMLNode*
+ARDOUR_UI::tearoff_settings (const char* name) const
+{
+ XMLNode* ui_node = Config->extra_xml(X_("UI"));
+
+ if (ui_node) {
+ XMLNode* tearoff_node = ui_node->child (X_("Tearoffs"));
+ if (tearoff_node) {
+ XMLNode* mnode = tearoff_node->child (name);
+ return mnode;
+ }
+ }
+
+ return 0;
+}
+
void
ARDOUR_UI::setup_transport ()
{
@@ -319,9 +335,9 @@ ARDOUR_UI::setup_transport ()
/* CANNOT sigc::bind these to clicked or toggled, must use pressed or released */
solo_alert_button.set_name ("TransportSoloAlert");
- solo_alert_button.signal_pressed().connect (sigc::mem_fun(*this,&ARDOUR_UI::solo_alert_toggle));
+ solo_alert_button.signal_button_press_event().connect (sigc::mem_fun(*this,&ARDOUR_UI::solo_alert_press), false);
auditioning_alert_button.set_name ("TransportAuditioningAlert");
- auditioning_alert_button.signal_pressed().connect (sigc::mem_fun(*this,&ARDOUR_UI::audition_alert_toggle));
+ auditioning_alert_button.signal_button_press_event().connect (sigc::mem_fun(*this,&ARDOUR_UI::audition_alert_press), false);
alert_box.pack_start (solo_alert_button, false, false);
alert_box.pack_start (auditioning_alert_button, false, false);
@@ -435,6 +451,11 @@ ARDOUR_UI::setup_transport ()
Image* img = manage (new Image ((::get_icon (X_("sae")))));
transport_tearoff_hbox.pack_end (*img, false, false, 6);
}
+
+ XMLNode* tnode = tearoff_settings ("transport");
+ if (tnode) {
+ transport_tearoff->set_state (*tnode);
+ }
}
void
@@ -482,20 +503,26 @@ ARDOUR_UI::auditioning_changed (bool onoff)
UI::instance()->call_slot (boost::bind (&ARDOUR_UI::_auditioning_changed, this, onoff));
}
-void
-ARDOUR_UI::audition_alert_toggle ()
+bool
+ARDOUR_UI::audition_alert_press (GdkEventButton* ev)
{
if (_session) {
_session->cancel_audition();
}
+ return true;
}
-void
-ARDOUR_UI::solo_alert_toggle ()
+bool
+ARDOUR_UI::solo_alert_press (GdkEventButton* ev)
{
- if (_session) {
- _session->set_solo (_session->get_routes(), !_session->soloing());
- }
+ if (_session) {
+ if (_session->soloing()) {
+ _session->set_solo (_session->get_routes(), false);
+ } else if (_session->listening()) {
+ _session->set_listen (_session->get_routes(), false);
+ }
+ }
+ return true;
}
void
@@ -505,7 +532,7 @@ ARDOUR_UI::solo_blink (bool onoff)
return;
}
- if (_session->soloing()) {
+ if (_session->soloing() || _session->listening()) {
if (onoff) {
solo_alert_button.set_state (STATE_ACTIVE);
} else {
diff --git a/gtk2_ardour/ardour_ui_ed.cc b/gtk2_ardour/ardour_ui_ed.cc
index 46cd5d952d..f3bc96c6c5 100644
--- a/gtk2_ardour/ardour_ui_ed.cc
+++ b/gtk2_ardour/ardour_ui_ed.cc
@@ -722,19 +722,19 @@ ARDOUR_UI::save_ardour_state ()
if (transport_tearoff) {
XMLNode* t = new XMLNode (X_("transport"));
- transport_tearoff->add_tornoff_state (*t);
+ transport_tearoff->add_state (*t);
tearoff_node->add_child_nocopy (*t);
}
if (mixer && mixer->monitor_section()) {
XMLNode* t = new XMLNode (X_("monitor-section"));
- mixer->monitor_section()->tearoff()->add_tornoff_state (*t);
+ mixer->monitor_section()->tearoff().add_state (*t);
tearoff_node->add_child_nocopy (*t);
}
if (editor && editor->mouse_mode_tearoff()) {
XMLNode* t = new XMLNode (X_("mouse-mode"));
- editor->mouse_mode_tearoff ()->add_tornoff_state (*t);
+ editor->mouse_mode_tearoff ()->add_state (*t);
tearoff_node->add_child_nocopy (*t);
}
diff --git a/gtk2_ardour/icons/bigknob.png b/gtk2_ardour/icons/bigknob.png
index a5a3f5df56..9e26273935 100644
--- a/gtk2_ardour/icons/bigknob.png
+++ b/gtk2_ardour/icons/bigknob.png
Binary files differ
diff --git a/gtk2_ardour/mixer_strip.cc b/gtk2_ardour/mixer_strip.cc
index 57faf1c3bb..6b92873569 100644
--- a/gtk2_ardour/mixer_strip.cc
+++ b/gtk2_ardour/mixer_strip.cc
@@ -193,7 +193,7 @@ MixerStrip::init ()
middle_button_table.set_homogeneous (true);
middle_button_table.set_spacings (0);
middle_button_table.attach (*mute_button, 0, 1, 0, 1);
- middle_button_table.attach (*solo_button, 1, 2, 0, 1);
+ middle_button_table.attach (*solo_button, 1, 2, 0, 1);
bottom_button_table.set_col_spacings (0);
bottom_button_table.set_homogeneous (true);
@@ -338,6 +338,12 @@ MixerStrip::set_route (boost::shared_ptr<Route> rt)
set_color (unique_random_color());
}
+ if (route()->is_master()) {
+ solo_button->hide ();
+ } else {
+ solo_button->show ();
+ }
+
if (_mixer_owned && (route()->is_master() || route()->is_control())) {
if (scrollbar_height == 0) {
diff --git a/gtk2_ardour/mixer_ui.cc b/gtk2_ardour/mixer_ui.cc
index badd96154a..6a273434e3 100644
--- a/gtk2_ardour/mixer_ui.cc
+++ b/gtk2_ardour/mixer_ui.cc
@@ -324,26 +324,16 @@ Mixer_UI::add_strip (RouteList& routes)
if (route->is_control()) {
if (!_monitor_section) {
_monitor_section = new MonitorSection (_session);
- out_packer.pack_end (_monitor_section->pack_widget(), false, false);
+ out_packer.pack_end (_monitor_section->tearoff(), false, false);
} else {
_monitor_section->set_session (_session);
}
- _monitor_section->pack_widget().show_all ();
-
- XMLNode* ui_node = Config->extra_xml(X_("UI"));
-
- if (ui_node) {
- cerr << "Got UI node\n";
- XMLNode* tearoff_node = ui_node->child (X_("Tearoffs"));
- if (tearoff_node) {
- cerr << "Got tearoff node\n";
- XMLNode* mnode = tearoff_node->child (X_("monitor-section"));
- if (mnode) {
- cerr << "got mndeo\n";
- _monitor_section->tearoff()->set_tornoff_state (*mnode);
- }
- }
+ _monitor_section->tearoff().show_all ();
+
+ XMLNode* mnode = ARDOUR_UI::instance()->tearoff_settings (X_("monitor-section"));
+ if (mnode) {
+ _monitor_section->tearoff().set_state (*mnode);
}
/* no regular strip shown for control out */
@@ -548,7 +538,7 @@ Mixer_UI::session_going_away ()
delete (*i);
}
- _monitor_section->pack_widget().hide ();
+ _monitor_section->tearoff().hide_visible ();
strips.clear ();
@@ -614,10 +604,6 @@ Mixer_UI::fast_update_strips ()
for (list<MixerStrip *>::iterator i = strips.begin(); i != strips.end(); ++i) {
(*i)->fast_update ();
}
-
- if (_monitor_section) {
- _monitor_section->fast_update ();
- }
}
}
diff --git a/gtk2_ardour/monitor_section.cc b/gtk2_ardour/monitor_section.cc
index 480786eb2c..5f779c6422 100644
--- a/gtk2_ardour/monitor_section.cc
+++ b/gtk2_ardour/monitor_section.cc
@@ -30,11 +30,31 @@ Glib::RefPtr<ActionGroup> MonitorSection::monitor_actions;
Glib::RefPtr<Gdk::Pixbuf> MonitorSection::big_knob_pixbuf;
Glib::RefPtr<Gdk::Pixbuf> MonitorSection::little_knob_pixbuf;
+static bool
+fixup_prelight (GdkEventCrossing* /* ignored */, GtkWidget* widget)
+{
+ GtkRcStyle* style = gtk_rc_style_copy (gtk_widget_get_modifier_style (widget));
+ int current = gtk_widget_get_state (widget);
+
+ style->fg[GTK_STATE_PRELIGHT] = style->fg[current];
+ style->bg[GTK_STATE_PRELIGHT] = style->bg[current];
+
+ gtk_widget_modify_style(widget, style);
+ g_object_unref(style);
+
+ return false;
+}
+
+static void
+block_prelight (Gtk::Widget& w)
+{
+ w.signal_enter_notify_event().connect (sigc::bind (sigc::ptr_fun (fixup_prelight), w.gobj()), false);
+}
+
MonitorSection::MonitorSection (Session* s)
: AxisView (s)
, RouteUI (s)
, main_table (2, 3)
- , meter (s)
, _tearoff (0)
, gain_adjustment (1.0, 0.0, 1.0, 0.01, 0.1)
, gain_control (0)
@@ -42,6 +62,8 @@ MonitorSection::MonitorSection (Session* s)
, dim_control (0)
, solo_boost_adjustment (1.0, 1.0, 2.0, 0.01, 0.1)
, solo_boost_control (0)
+ , solo_cut_adjustment (0.0, 0.0, 1.0, 0.01, 0.1)
+ , solo_cut_control (0)
, solo_in_place_button (solo_model_group, _("SiP"))
, afl_button (solo_model_group, _("AFL"))
, pfl_button (solo_model_group, _("PFL"))
@@ -63,35 +85,18 @@ MonitorSection::MonitorSection (Session* s)
set_session (s);
- VBox* sub_knob_packer = manage (new VBox);
- sub_knob_packer->set_spacing (12);
-
VBox* spin_packer;
Label* spin_label;
- gain_control = new VolumeController (big_knob_pixbuf, &gain_adjustment, true);
- gain_adjustment.signal_value_changed().connect (sigc::mem_fun (*this, &MonitorSection::gain_value_changed));
- gain_control->spinner().signal_output().connect (sigc::bind (sigc::mem_fun (*this, &MonitorSection::nonlinear_gain_printer),
- &gain_control->spinner()));
+ /* Dim */
- spin_label = manage (new Label (_("Gain (dB)")));
- 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);
-
- sub_knob_packer->pack_start (*spin_packer, false, false);
-
- dim_control = new VolumeController (little_knob_pixbuf, &dim_adjustment, true, 30, 30);
+ dim_control = new VolumeController (little_knob_pixbuf, &dim_adjustment, false, 30, 30);
dim_adjustment.signal_value_changed().connect (sigc::mem_fun (*this, &MonitorSection::dim_level_changed));
- dim_control->spinner().signal_output().connect (sigc::bind (sigc::mem_fun (*this, &MonitorSection::linear_gain_printer),
- &dim_control->spinner()));
HBox* dim_packer = manage (new HBox);
dim_packer->show ();
- spin_label = manage (new Label (_("Dim Cut (dB)")));
+ spin_label = manage (new Label (_("Dim Cut")));
spin_packer = manage (new VBox);
spin_packer->show ();
spin_packer->set_spacing (6);
@@ -99,64 +104,18 @@ MonitorSection::MonitorSection (Session* s)
spin_packer->pack_start (*spin_label, false, false);
dim_packer->set_spacing (12);
- dim_packer->pack_start (*spin_packer, false, false);
-
- VBox* keep_dim_under_vertical_size_control = manage (new VBox);
- keep_dim_under_vertical_size_control->pack_start (dim_all_button, true, false);
- keep_dim_under_vertical_size_control->show ();
- dim_all_button.set_size_request (40,40);
- dim_all_button.show ();
-
- dim_packer->pack_start (*keep_dim_under_vertical_size_control, false, false);
- sub_knob_packer->pack_start (*dim_packer, false, true);
-
- solo_boost_control = new VolumeController (little_knob_pixbuf, &solo_boost_adjustment, true, 30, 30);
- solo_boost_adjustment.signal_value_changed().connect (sigc::mem_fun (*this, &MonitorSection::solo_boost_changed));
- solo_boost_control->spinner().signal_output().connect (sigc::bind (sigc::mem_fun (*this, &MonitorSection::linear_gain_printer),
- &solo_boost_control->spinner()));
-
- HBox* solo_packer = manage (new HBox);
- solo_packer->show ();
-
- spin_label = manage (new Label (_("Solo Boost (dB)")));
- 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);
-
- VBox* keep_rude_solo_under_vertical_size_control = manage (new VBox);
- keep_rude_solo_under_vertical_size_control->show ();
- keep_rude_solo_under_vertical_size_control->pack_start (rude_solo_button, true, false);
+ dim_packer->pack_start (*spin_packer, true, true);
- solo_packer->set_spacing (12);
- solo_packer->pack_start (*spin_packer, false, false);
- solo_packer->pack_start (*keep_rude_solo_under_vertical_size_control, true, false);
+ /* Rude Solo */
rude_solo_button.set_name ("TransportSoloAlert");
rude_solo_button.show ();
+ block_prelight (rude_solo_button);
ARDOUR_UI::Blink.connect (sigc::mem_fun (*this, &MonitorSection::solo_blink));
- rude_solo_button.signal_button_press_event().connect (sigc::mem_fun(*this, &MonitorSection::cancel_solo));
+ rude_solo_button.signal_button_press_event().connect (sigc::mem_fun(*this, &MonitorSection::cancel_solo), false);
UI::instance()->set_tip (rude_solo_button, _("When active, something is soloed.\nClick to de-solo everything"));
- sub_knob_packer->pack_start (*solo_packer, false, true);
-
- knob_packer.pack_start (*sub_knob_packer, false, true);
-
- sub_knob_packer->show ();
- knob_packer.show ();
- gain_control->show_all ();
- dim_control->show_all ();
- solo_boost_control->show_all ();
-
- meter.set_meter (&_route->peak_meter());
- meter.setup_meters (300, 5);
-
- table_knob_packer.pack_start (main_table, true, true);
- table_knob_packer.pack_start (knob_packer, false, false);
-
- table_knob_packer.show ();
solo_model_box.set_spacing (6);
solo_model_box.pack_start (solo_in_place_button, false, false);
@@ -183,7 +142,43 @@ MonitorSection::MonitorSection (Session* s)
act->connect_proxy (pfl_button);
}
+
+ /* Solo Boost */
+
+ solo_boost_control = new VolumeController (little_knob_pixbuf, &solo_boost_adjustment, false, 30, 30);
+ solo_boost_adjustment.signal_value_changed().connect (sigc::mem_fun (*this, &MonitorSection::solo_boost_changed));
+
+ 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 VolumeController (little_knob_pixbuf, &solo_cut_adjustment, false, 30, 30);
+ // solo_cut_adjustment.signal_value_changed().connect (sigc::mem_fun (*this, &MonitorSection::solo_cut_changed));
+
+ 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);
+
+ upper_packer.set_spacing (12);
+ upper_packer.pack_start (rude_solo_button, false, false);
upper_packer.pack_start (solo_model_box, false, false);
+ upper_packer.pack_start (*solo_packer, false, false);
act = ActionManager::get_action (X_("Monitor"), X_("monitor-cut-all"));
if (act) {
@@ -203,31 +198,50 @@ MonitorSection::MonitorSection (Session* s)
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);
+
lower_packer.set_spacing (12);
- lower_packer.pack_start (mono_button, false, false);
+ lower_packer.pack_start (*bbox, false, false);
lower_packer.pack_start (cut_all_button, false, false);
+ /* Gain */
+
+ gain_control = new VolumeController (big_knob_pixbuf, &gain_adjustment, false, 80, 80);
+ gain_adjustment.signal_value_changed().connect (sigc::mem_fun (*this, &MonitorSection::gain_value_changed));
+
+ 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 (table_knob_packer, false, false);
+ vpacker.pack_start (*dim_packer, false, false);
+ vpacker.pack_start (main_table, false, false);
vpacker.pack_start (lower_packer, false, false);
- VBox* keep_meter_under_control = manage (new VBox);
- keep_meter_under_control->pack_start (meter, false, false);
- keep_meter_under_control->show ();
-
hpacker.set_border_width (12);
hpacker.set_spacing (12);
- hpacker.pack_start (*keep_meter_under_control, false, false);
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 ();
- meter.show_all ();
populate_buttons ();
map_state ();
@@ -266,19 +280,16 @@ MonitorSection::set_session (Session* s)
if (_route) {
/* session with control outs */
_monitor = _route->monitor_control ();
- meter.set_meter (&_route->peak_meter());
} else {
/* session with no control outs */
_monitor.reset ();
_route.reset ();
- meter.set_meter (0);
}
} else {
/* no session */
_monitor.reset ();
_route.reset ();
- meter.set_meter (0);
}
/* both might be null */
@@ -298,6 +309,11 @@ MonitorSection::ChannelButtonSet::ChannelButtonSet ()
gtk_activatable_set_use_action_appearance (GTK_ACTIVATABLE (dim.gobj()), false);
gtk_activatable_set_use_action_appearance (GTK_ACTIVATABLE (invert.gobj()), false);
gtk_activatable_set_use_action_appearance (GTK_ACTIVATABLE (solo.gobj()), false);
+
+ block_prelight (cut);
+ block_prelight (dim);
+ block_prelight (solo);
+ block_prelight (invert);
}
void
@@ -393,12 +409,6 @@ MonitorSection::set_button_names ()
solo_button_label.set_text ("rec");
}
-Widget&
-MonitorSection::pack_widget () const
-{
- return *_tearoff;
-}
-
void
MonitorSection::dim_all ()
{
@@ -641,17 +651,11 @@ MonitorSection::solo_use_pfl ()
}
void
-MonitorSection::fast_update ()
-{
- meter.update_meters ();
-}
-
-void
MonitorSection::setup_knob_images ()
{
try {
- big_knob_pixbuf = ::get_icon ("knob");
+ big_knob_pixbuf = ::get_icon ("bigknob");
} catch (...) {
@@ -843,7 +847,7 @@ MonitorSection::solo_blink (bool onoff)
rude_solo_button.set_state (STATE_NORMAL);
}
} else {
- rude_solo_button.set_active (false);
+ // rude_solo_button.set_active (false);
rude_solo_button.set_state (STATE_NORMAL);
}
}
@@ -851,8 +855,12 @@ MonitorSection::solo_blink (bool onoff)
bool
MonitorSection::cancel_solo (GdkEventButton* ev)
{
- if (_session && _session->soloing()) {
- _session->set_solo (_session->get_routes(), false);
+ if (_session) {
+ if (_session->soloing()) {
+ _session->set_solo (_session->get_routes(), false);
+ } else if (_session->listening()) {
+ _session->set_listen (_session->get_routes(), false);
+ }
}
return true;
diff --git a/gtk2_ardour/monitor_section.h b/gtk2_ardour/monitor_section.h
index 405b8eba87..8af84988f1 100644
--- a/gtk2_ardour/monitor_section.h
+++ b/gtk2_ardour/monitor_section.h
@@ -39,12 +39,9 @@ class MonitorSection : public RouteUI
~MonitorSection ();
void set_session (ARDOUR::Session*);
-
- Gtk::Widget& pack_widget () const;
- void fast_update ();
static void setup_knob_images ();
- Gtkmm2ext::TearOff* tearoff() const { return _tearoff; }
+ Gtkmm2ext::TearOff& tearoff() const { return *_tearoff; }
private:
Gtk::VBox vpacker;
@@ -52,9 +49,6 @@ class MonitorSection : public RouteUI
Gtk::Table main_table;
Gtk::VBox upper_packer;
Gtk::VBox lower_packer;
- Gtk::VBox table_knob_packer;
- Gtk::HBox knob_packer;
- LevelMeter meter;
Gtkmm2ext::TearOff* _tearoff;
struct ChannelButtonSet {
@@ -75,6 +69,8 @@ class MonitorSection : public RouteUI
VolumeController* dim_control;
Gtk::Adjustment solo_boost_adjustment;
VolumeController* solo_boost_control;
+ Gtk::Adjustment solo_cut_adjustment;
+ VolumeController* solo_cut_control;
void populate_buttons ();
void set_button_names ();