summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2013-07-08 23:56:03 +0200
committerRobin Gareus <robin@gareus.org>2013-07-10 15:27:14 +0200
commit4d49961c93fe23dc4f76a5bcb60c93d0c80bcd3c (patch)
tree75d1049de13e709cad03ceddcb327ccf1dd9775c
parent5cdf478f1950c0488589103ef9a291a5614ea643 (diff)
allow to include solo,mute buttons on meterbridge
-rw-r--r--gtk2_ardour/meter_strip.cc79
-rw-r--r--gtk2_ardour/meter_strip.h4
-rw-r--r--gtk2_ardour/meterbridge.cc12
-rw-r--r--gtk2_ardour/session_option_editor.cc21
-rw-r--r--libs/ardour/ardour/session_configuration_vars.h3
5 files changed, 114 insertions, 5 deletions
diff --git a/gtk2_ardour/meter_strip.cc b/gtk2_ardour/meter_strip.cc
index f07bca7c67..c877d734e1 100644
--- a/gtk2_ardour/meter_strip.cc
+++ b/gtk2_ardour/meter_strip.cc
@@ -64,8 +64,8 @@ MeterStrip::MeterStrip (int metricmode)
_strip_type = 0;
set_spacing(2);
peakbx.set_size_request(-1, 14);
- btnbox.set_size_request(-1, 16);
namebx.set_size_request(18, 52);
+ update_button_box();
set_metric_mode(metricmode);
@@ -100,6 +100,7 @@ MeterStrip::MeterStrip (Session* sess, boost::shared_ptr<ARDOUR::Route> rt)
{
set_spacing(2);
RouteUI::set_route (rt);
+ SessionHandlePtr::set_session (sess);
_has_midi = false;
@@ -165,10 +166,33 @@ MeterStrip::MeterStrip (Session* sess, boost::shared_ptr<ARDOUR::Route> rt)
namebx.pack_start(name_label, true, false, 3);
namebx.pack_start(number_label, true, false, 0);
- // rec-enable button
- btnbox.pack_start(*rec_enable_button, true, false);
+ Gtk::HBox *btnwrap; // horiz center, no expand gtk workaround
+
+ btnwrap = manage(new Gtk::HBox());
+ btnwrap->pack_start(*rec_enable_button, true, false);
+ btnbox.pack_start(*btnwrap, false, false, 1);
+ btnwrap->show();
+
+ btnwrap = manage(new Gtk::HBox());
+ btnwrap->pack_start(*mute_button, true, false);
+ btnbox.pack_start(*btnwrap, false, false, 1);
+ btnwrap->show();
+
+ btnwrap = manage(new Gtk::HBox());
+ btnwrap->pack_start(*solo_button, true, false);
+ btnbox.pack_start(*btnwrap, false, false, 1);
+ btnwrap->show();
+
rec_enable_button->set_corner_radius(2);
- btnbox.set_size_request(-1, 16);
+ rec_enable_button->set_size_request(16, 16);
+
+ mute_button->set_corner_radius(2);
+ mute_button->set_size_request(16, 16);
+
+ solo_button->set_corner_radius(2);
+ solo_button->set_size_request(16, 16);
+
+ update_button_box();
pack_start (peakbx, false, false);
pack_start (meterbox, true, true);
@@ -212,6 +236,7 @@ MeterStrip::MeterStrip (Session* sess, boost::shared_ptr<ARDOUR::Route> rt)
ColorsChanged.connect (sigc::mem_fun (*this, &MeterStrip::on_theme_changed));
DPIReset.connect (sigc::mem_fun (*this, &MeterStrip::on_theme_changed));
Config->ParameterChanged.connect (*this, invalidator (*this), ui_bind (&MeterStrip::parameter_changed, this, _1), gui_context());
+ sess->config.ParameterChanged.connect (*this, invalidator (*this), ui_bind (&MeterStrip::parameter_changed, this, _1), gui_context());
if (_route->is_master()) {
_strip_type = 4;
@@ -242,6 +267,14 @@ MeterStrip::self_delete ()
}
void
+MeterStrip::set_session (Session* s)
+{
+ SessionHandlePtr::set_session (s);
+ s->config.ParameterChanged.connect (*this, invalidator (*this), ui_bind (&MeterStrip::parameter_changed, this, _1), gui_context());
+ update_button_box();
+}
+
+void
MeterStrip::update_rec_display ()
{
RouteUI::update_rec_display ();
@@ -256,6 +289,8 @@ MeterStrip::state_id() const
void
MeterStrip::set_button_names()
{
+ mute_button->set_text (_("M"));
+ solo_button->set_text (_("S"));
rec_enable_button->set_text ("");
rec_enable_button->set_image (::get_icon (X_("record_normal_red")));
}
@@ -471,11 +506,47 @@ MeterStrip::redraw_metrics ()
}
void
+MeterStrip::update_button_box ()
+{
+ if (!_session) return;
+ int height = 0;
+ if (_session->config.get_show_mute_on_meterbridge()) {
+ height += 18;
+ if (mute_button) mute_button->show();
+ } else {
+ if (mute_button) mute_button->hide();
+ }
+ if (_session->config.get_show_solo_on_meterbridge()) {
+ height += 18;
+ if (solo_button) solo_button->show();
+ } else {
+ if (solo_button) solo_button->hide();
+ }
+ if (_session->config.get_show_rec_on_meterbridge()) {
+ height += 18;
+ if (rec_enable_button) rec_enable_button->show();
+ } else {
+ if (rec_enable_button) rec_enable_button->hide();
+ }
+ btnbox.set_size_request(16, height);
+ check_resize();
+}
+
+void
MeterStrip::parameter_changed (std::string const & p)
{
if (p == "meter-peak") {
max_peak = -INFINITY;
}
+ else if (p == "show-rec-on-meterbridge") {
+ update_button_box();
+ }
+ else if (p == "show-mute-on-meterbridge") {
+ update_button_box();
+ }
+ else if (p == "show-solo-on-meterbridge") {
+ update_button_box();
+ }
}
diff --git a/gtk2_ardour/meter_strip.h b/gtk2_ardour/meter_strip.h
index 8474d3cf72..022ac9edb9 100644
--- a/gtk2_ardour/meter_strip.h
+++ b/gtk2_ardour/meter_strip.h
@@ -50,6 +50,7 @@ class MeterStrip : public Gtk::VBox, public RouteUI
MeterStrip (int);
~MeterStrip ();
+ void set_session (ARDOUR::Session* s);
void fast_update ();
boost::shared_ptr<ARDOUR::Route> route() { return _route; }
@@ -98,7 +99,7 @@ class MeterStrip : public Gtk::VBox, public RouteUI
Gtk::Alignment meter_align;
Gtk::Alignment peak_align;
Gtk::HBox peakbx;
- Gtk::HBox btnbox;
+ Gtk::VBox btnbox;
ArdourButton peak_display;
std::vector<ARDOUR::DataType> _types;
@@ -120,6 +121,7 @@ class MeterStrip : public Gtk::VBox, public RouteUI
void parameter_changed (std::string const & p);
void redraw_metrics ();
+ void update_button_box ();
bool _suspend_menu_callbacks;
bool level_meter_button_press (GdkEventButton* ev);
diff --git a/gtk2_ardour/meterbridge.cc b/gtk2_ardour/meterbridge.cc
index 35df88e76a..881aeb53aa 100644
--- a/gtk2_ardour/meterbridge.cc
+++ b/gtk2_ardour/meterbridge.cc
@@ -363,6 +363,9 @@ Meterbridge::set_session (Session* s)
return;
}
+ metrics_left.set_session(s);
+ metrics_right.set_session(s);
+
XMLNode* node = _session->instant_xml(X_("Meterbridge"));
if (node) {
set_state (*node);
@@ -666,6 +669,15 @@ Meterbridge::parameter_changed (std::string const & p)
meter_clear_pattern_cache();
update_metrics();
}
+ else if (p == "show-rec-on-meterbridge") {
+ scroller.queue_resize();
+ }
+ else if (p == "show-mute-on-meterbridge") {
+ scroller.queue_resize();
+ }
+ else if (p == "show-solo-on-meterbridge") {
+ scroller.queue_resize();
+ }
}
void
diff --git a/gtk2_ardour/session_option_editor.cc b/gtk2_ardour/session_option_editor.cc
index 31629cf085..b3a19b3b42 100644
--- a/gtk2_ardour/session_option_editor.cc
+++ b/gtk2_ardour/session_option_editor.cc
@@ -295,6 +295,27 @@ SessionOptionEditor::SessionOptionEditor (Session* s)
sigc::mem_fun (*_session_config, &SessionConfiguration::set_show_master_on_meterbridge)
));
+ add_option (_("Misc"), new BoolOption (
+ "show-rec-on-meterbridge",
+ _("Show Rec-enable Button on Meterbridge"),
+ sigc::mem_fun (*_session_config, &SessionConfiguration::get_show_rec_on_meterbridge),
+ sigc::mem_fun (*_session_config, &SessionConfiguration::set_show_rec_on_meterbridge)
+ ));
+
+ add_option (_("Misc"), new BoolOption (
+ "show-mute-on-meterbridge",
+ _("Include Mute Button on Meterbridge"),
+ sigc::mem_fun (*_session_config, &SessionConfiguration::get_show_mute_on_meterbridge),
+ sigc::mem_fun (*_session_config, &SessionConfiguration::set_show_mute_on_meterbridge)
+ ));
+
+ add_option (_("Misc"), new BoolOption (
+ "show-solo-on-meterbridge",
+ _("Show Solo Button on Meterbridge"),
+ sigc::mem_fun (*_session_config, &SessionConfiguration::get_show_solo_on_meterbridge),
+ sigc::mem_fun (*_session_config, &SessionConfiguration::set_show_solo_on_meterbridge)
+ ));
+
}
void
diff --git a/libs/ardour/ardour/session_configuration_vars.h b/libs/ardour/ardour/session_configuration_vars.h
index fb29004553..e0de36417c 100644
--- a/libs/ardour/ardour/session_configuration_vars.h
+++ b/libs/ardour/ardour/session_configuration_vars.h
@@ -60,3 +60,6 @@ CONFIG_VARIABLE (bool, videotimeline_pullup, "videotimeline-pullup", true)
CONFIG_VARIABLE (bool, show_busses_on_meterbridge, "show-busses-on-meterbridge", false)
CONFIG_VARIABLE (bool, show_master_on_meterbridge, "show-master-on-meterbridge", true)
CONFIG_VARIABLE (bool, show_midi_on_meterbridge, "show-midi-on-meterbridge", true)
+CONFIG_VARIABLE (bool, show_rec_on_meterbridge, "show-rec-on-meterbridge", true)
+CONFIG_VARIABLE (bool, show_mute_on_meterbridge, "show-mute-on-meterbridge", false)
+CONFIG_VARIABLE (bool, show_solo_on_meterbridge, "show-solo-on-meterbridge", false)