summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2017-02-24 23:37:23 +0100
committerRobin Gareus <robin@gareus.org>2017-02-24 23:41:22 +0100
commita1a2e088a53e6aaeab6dc8715f522a4fc633cf7c (patch)
tree5a6550633fac1eb85d902f6f6cce04853a29c7f9 /gtk2_ardour
parentd0286d3df184f7ca05c148a2045d18cfb3113a68 (diff)
Allow to switch master-meter type in the toolbar-meter
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/ardour_ui.cc48
-rw-r--r--gtk2_ardour/ardour_ui.h6
-rw-r--r--gtk2_ardour/ardour_ui_dialogs.cc4
3 files changed, 57 insertions, 1 deletions
diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc
index da93f81f45..737f55de6c 100644
--- a/gtk2_ardour/ardour_ui.cc
+++ b/gtk2_ardour/ardour_ui.cc
@@ -152,6 +152,7 @@ typedef uint64_t microseconds_t;
#include "missing_plugin_dialog.h"
#include "mixer_ui.h"
#include "meterbridge.h"
+#include "meter_patterns.h"
#include "mouse_cursors.h"
#include "nsm.h"
#include "opts.h"
@@ -291,6 +292,7 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir)
, error_alert_button ( ArdourButton::just_led_default_elements )
, editor_meter(0)
, editor_meter_peak_display()
+ , _suspend_editor_meter_callbacks (false)
, _numpad_locate_happening (false)
, _session_is_new (false)
, last_key_press_time (0)
@@ -5294,6 +5296,52 @@ ARDOUR_UI::session_format_mismatch (std::string xml_path, std::string backup_pat
msg.run ();
}
+void
+ARDOUR_UI::add_editor_meter_type_item (Menu_Helpers::MenuList& items, RadioMenuItem::Group& group, string const & name, MeterType type)
+{
+ using namespace Menu_Helpers;
+
+ items.push_back (RadioMenuElem (group, name, sigc::bind (sigc::mem_fun (editor_meter, &LevelMeterHBox::set_meter_type), type)));
+ RadioMenuItem* i = dynamic_cast<RadioMenuItem *> (&items.back ());
+ i->set_active (editor_meter->meter_type () == type);
+}
+
+void
+ARDOUR_UI::popup_editor_meter_menu (GdkEventButton* ev)
+{
+ using namespace Gtk::Menu_Helpers;
+
+ Gtk::Menu* m = manage (new Menu);
+ MenuList& items = m->items ();
+
+ RadioMenuItem::Group group;
+
+ _suspend_editor_meter_callbacks = true;
+ add_editor_meter_type_item (items, group, ArdourMeter::meter_type_string(MeterPeak), MeterPeak);
+ add_editor_meter_type_item (items, group, ArdourMeter::meter_type_string(MeterPeak0dB), MeterPeak0dB);
+ add_editor_meter_type_item (items, group, ArdourMeter::meter_type_string(MeterKrms), MeterKrms);
+ add_editor_meter_type_item (items, group, ArdourMeter::meter_type_string(MeterIEC1DIN), MeterIEC1DIN);
+ add_editor_meter_type_item (items, group, ArdourMeter::meter_type_string(MeterIEC1NOR), MeterIEC1NOR);
+ add_editor_meter_type_item (items, group, ArdourMeter::meter_type_string(MeterIEC2BBC), MeterIEC2BBC);
+ add_editor_meter_type_item (items, group, ArdourMeter::meter_type_string(MeterIEC2EBU), MeterIEC2EBU);
+ add_editor_meter_type_item (items, group, ArdourMeter::meter_type_string(MeterK20), MeterK20);
+ add_editor_meter_type_item (items, group, ArdourMeter::meter_type_string(MeterK14), MeterK14);
+ add_editor_meter_type_item (items, group, ArdourMeter::meter_type_string(MeterK12), MeterK12);
+ add_editor_meter_type_item (items, group, ArdourMeter::meter_type_string(MeterVU), MeterVU);
+
+ m->popup (ev->button, ev->time);
+ _suspend_editor_meter_callbacks = false;
+}
+
+bool
+ARDOUR_UI::editor_meter_button_press (GdkEventButton* ev)
+{
+ if (ev->button == 3 && editor_meter) {
+ popup_editor_meter_menu (ev);
+ return true;
+ }
+ return false;
+}
void
ARDOUR_UI::reset_peak_display ()
diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h
index d6b897a42f..0073a36edc 100644
--- a/gtk2_ardour/ardour_ui.h
+++ b/gtk2_ardour/ardour_ui.h
@@ -565,6 +565,11 @@ private:
ArdourButton editor_meter_peak_display;
bool editor_meter_peak_button_release (GdkEventButton*);
+ bool editor_meter_button_press (GdkEventButton* ev);
+ void popup_editor_meter_menu (GdkEventButton* ev);
+ void add_editor_meter_type_item (Gtk::Menu_Helpers::MenuList&, Gtk::RadioMenuItem::Group&, std::string const &, ARDOUR::MeterType);
+ bool _suspend_editor_meter_callbacks;
+
void blink_handler (bool);
sigc::connection blink_connection;
@@ -835,6 +840,7 @@ private:
PBD::ScopedConnectionList forever_connections;
PBD::ScopedConnection halt_connection;
+ PBD::ScopedConnection editor_meter_connection;
void step_edit_status_change (bool);
diff --git a/gtk2_ardour/ardour_ui_dialogs.cc b/gtk2_ardour/ardour_ui_dialogs.cc
index 561fff520c..5fae3bb367 100644
--- a/gtk2_ardour/ardour_ui_dialogs.cc
+++ b/gtk2_ardour/ardour_ui_dialogs.cc
@@ -224,10 +224,12 @@ ARDOUR_UI::set_session (Session *s)
editor_meter = new LevelMeterHBox(_session);
editor_meter->set_meter (_session->master_out()->shared_peak_meter().get());
editor_meter->clear_meters();
- editor_meter->set_type (_session->master_out()->meter_type());
+ editor_meter->set_meter_type (_session->master_out()->meter_type());
editor_meter->setup_meters (30, 10, 6);
editor_meter->show();
meter_box.pack_start(*editor_meter);
+
+ editor_meter->ButtonPress.connect_same_thread (editor_meter_connection, boost::bind (&ARDOUR_UI::editor_meter_button_press, this, _1));
}
ArdourMeter::ResetAllPeakDisplays.connect (sigc::mem_fun(*this, &ARDOUR_UI::reset_peak_display));