#include <sigc++/bind.h>
+#include "pbd/unwind.h"
+
#include "ardour/logmeter.h"
#include "ardour/session.h"
#include "ardour/route.h"
#include "ardour/audio_track.h"
#include "ardour/midi_track.h"
-#include <gtkmm2ext/gtk_ui.h>
-#include <gtkmm2ext/keyboard.h>
-#include <gtkmm2ext/utils.h>
-#include <gtkmm2ext/rgb_macros.h>
+#include "gtkmm2ext/gtk_ui.h"
+#include "gtkmm2ext/keyboard.h"
+#include "gtkmm2ext/utils.h"
+#include "gtkmm2ext/rgb_macros.h"
+
+#include "widgets/tooltips.h"
#include "gui_thread.h"
#include "ardour_window.h"
-#include "tooltips.h"
+#include "context_menu_helper.h"
#include "ui_config.h"
#include "utils.h"
#include "pbd/i18n.h"
using namespace ARDOUR;
+using namespace ArdourWidgets;
using namespace ARDOUR_UI_UTILS;
using namespace PBD;
using namespace Gtk;
level_meter = new LevelMeterHBox(sess);
level_meter->set_meter (_route->shared_peak_meter().get());
level_meter->clear_meters();
- level_meter->set_meter_type (_route->meter_type());
level_meter->setup_meters (220, meter_width, 6);
level_meter->ButtonPress.connect_same_thread (level_meter_connection, boost::bind (&MeterStrip::level_meter_button_press, this, _1));
- level_meter->MeterTypeChanged.connect_same_thread (level_meter_connection, boost::bind (&MeterStrip::meter_type_changed, this, _1));
+ _route->shared_peak_meter()->MeterTypeChanged.connect (meter_route_connections, invalidator (*this), boost::bind (&MeterStrip::meter_type_changed, this, _1), gui_context());
meter_align.set(0.5, 0.5, 0.0, 1.0);
meter_align.add(*level_meter);
name_label.set_layout_ellipsize_width(48 * PANGO_SCALE);
name_label.set_size_request(PX_SCALE(18, 18), PX_SCALE(50, 50));
name_label.set_alignment(-1.0, .5);
- set_tooltip (name_label, _route->name());
- set_tooltip (*level_meter, _route->name());
+ set_tooltip (name_label, Gtkmm2ext::markup_escape_text (_route->name()));
+ set_tooltip (*level_meter, Gtkmm2ext::markup_escape_text (_route->name()));
number_label.set_corner_radius(2);
number_label.set_elements((ArdourButton::Element)(ArdourButton::Edge|ArdourButton::Body|ArdourButton::Text|ArdourButton::Inactive));
} else {
n = meter_ticks1_area.get_name();
if (n.substr(0,3) == "Bar") {
- meter_ticks1_area.set_name(n.substr(3,-1));
+ meter_ticks1_area.set_name (n.substr (3));
}
}
if (_tick_bar & 2) {
} else {
n = meter_ticks2_area.get_name();
if (n.substr(0,3) == "Bar") {
- meter_ticks2_area.set_name(n.substr(3,-1));
+ meter_ticks2_area.set_name (n.substr (3));
}
}
}
{
using namespace Gtk::Menu_Helpers;
- Gtk::Menu* m = manage (new Menu);
+ Gtk::Menu* m = ARDOUR_UI_UTILS::shared_popup_menu ();
MenuList& items = m->items ();
RadioMenuItem::Group group;
- _suspend_menu_callbacks = true;
+ PBD::Unwinder<bool> uw (_suspend_menu_callbacks, true);
add_level_meter_type_item (items, group, ArdourMeter::meter_type_string(MeterPeak), MeterPeak);
add_level_meter_type_item (items, group, ArdourMeter::meter_type_string(MeterPeak0dB), MeterPeak0dB);
add_level_meter_type_item (items, group, ArdourMeter::meter_type_string(MeterKrms), MeterKrms);
sigc::bind (SetMeterTypeMulti, _strip_type, _route->route_group(), cmt)));
m->popup (ev->button, ev->time);
- _suspend_menu_callbacks = false;
}
bool
{
using namespace Gtk::Menu_Helpers;
- Gtk::Menu* m = manage (new Menu);
+ Gtk::Menu* m = ARDOUR_UI_UTILS::shared_popup_menu ();
MenuList& items = m->items ();
RadioMenuItem::Group group;
- _suspend_menu_callbacks = true;
+ PBD::Unwinder<bool> uw (_suspend_menu_callbacks, true);
add_label_height_item (items, group, _("Variable height"), 0);
add_label_height_item (items, group, _("Short"), 1);
add_label_height_item (items, group, _("Tall"), 2);
add_label_height_item (items, group, _("Venti"), 4);
m->popup (ev->button, ev->time);
- _suspend_menu_callbacks = false;
}
void
MeterStrip::set_meter_type (MeterType type)
{
if (_suspend_menu_callbacks) return;
- if (_route->meter_type() == type) return;
-
- level_meter->set_meter_type (type);
+ _route->set_meter_type (type);
}
void
void
MeterStrip::meter_type_changed (MeterType type)
{
- if (_route->meter_type() != type) {
- _route->set_meter_type(type);
- }
update_background (type);
MetricChanged();
}
switch (what) {
case -1:
if (_route && group == _route->route_group()) {
- level_meter->set_meter_type (type);
+ _route->set_meter_type (type);
}
break;
case 0:
- level_meter->set_meter_type (type);
+ _route->set_meter_type (type);
+ break;
default:
if (what == _strip_type) {
- level_meter->set_meter_type (type);
+ _route->set_meter_type (type);
}
break;
}