Remove internal edit mode and add "content" tool.
[ardour.git] / gtk2_ardour / meterbridge.cc
index 4a4f1dd8dd3a81ad3023c1d31db7d13eb7822560..bb5c4b8eca96d503193951d621f572935ab0f421 100644 (file)
@@ -40,6 +40,7 @@
 
 #include "ardour/audio_track.h"
 #include "ardour/midi_track.h"
+#include "ardour/route_sorters.h"
 
 #include "meterbridge.h"
 
@@ -57,6 +58,7 @@
 #include "i18n.h"
 
 using namespace ARDOUR;
+using namespace ARDOUR_UI_UTILS;
 using namespace PBD;
 using namespace Gtk;
 using namespace Glib;
@@ -78,24 +80,6 @@ Meterbridge::instance ()
        return _instance;
 }
 
-/* copy from gtk2_ardour/mixer_ui.cc -- TODO consolidate
- * used by Meterbridge::set_session() below
- */
-struct SignalOrderRouteSorter {
-       bool operator() (boost::shared_ptr<Route> a, boost::shared_ptr<Route> b) {
-               if (a->is_master() || a->is_monitor()) {
-                       /* "a" is a special route (master, monitor, etc), and comes
-                        * last in the mixer ordering
-                        */
-                       return false;
-               } else if (b->is_master() || b->is_monitor()) {
-                       /* everything comes before b */
-                       return true;
-               }
-               return a->order_key (MixerSort) < b->order_key (MixerSort);
-       }
-};
-
 Meterbridge::Meterbridge ()
        : Window (Gtk::WINDOW_TOPLEVEL)
        , VisibilityTracker (*((Gtk::Window*) this))
@@ -138,7 +122,7 @@ Meterbridge::Meterbridge ()
 
        signal_delete_event().connect (sigc::mem_fun (*this, &Meterbridge::hide_window));
        signal_configure_event().connect (sigc::mem_fun (*ARDOUR_UI::instance(), &ARDOUR_UI::configure_handler));
-       Route::SyncOrderKeys.connect (*this, invalidator (*this), boost::bind (&Meterbridge::sync_order_keys, this, _1), gui_context());
+       Route::SyncOrderKeys.connect (*this, invalidator (*this), boost::bind (&Meterbridge::sync_order_keys, this), gui_context());
        MeterStrip::CatchDeletion.connect (*this, invalidator (*this), boost::bind (&Meterbridge::remove_strip, this, _1), gui_context());
        MeterStrip::MetricChanged.connect (*this, invalidator (*this), boost::bind(&Meterbridge::resync_order, this), gui_context());
        MeterStrip::ConfigurationChanged.connect (*this, invalidator (*this), boost::bind(&Meterbridge::queue_resize, this), gui_context());
@@ -408,7 +392,7 @@ Meterbridge::on_scroll()
        ARDOUR::MeterType mt_right = _mt_right;
 
        for (unsigned int i = 0; i < _metrics.size(); ++i) {
-               int sx, dx, dy;
+               int sx, dx = 0, dy = 0;
                int mm = _metrics[i]->get_metric_mode();
                sx = (mm & 2) ? _metrics[i]->get_width() : 0;
 
@@ -450,7 +434,7 @@ Meterbridge::set_session (Session* s)
        _show_master = _session->config.get_show_master_on_meterbridge();
        _show_midi = _session->config.get_show_midi_on_meterbridge();
 
-       SignalOrderRouteSorter sorter;
+       ARDOUR::SignalOrderRouteSorter sorter;
        boost::shared_ptr<RouteList> routes = _session->get_routes();
 
        RouteList copy(*routes);
@@ -637,7 +621,7 @@ Meterbridge::remove_strip (MeterStrip* strip)
 }
 
 void
-Meterbridge::sync_order_keys (RouteSortOrderKey)
+Meterbridge::sync_order_keys ()
 {
        Glib::Threads::Mutex::Lock lm (_resync_mutex);
 
@@ -702,11 +686,11 @@ Meterbridge::sync_order_keys (RouteSortOrderKey)
 
                MeterType nmt = (*i).s->meter_type();
                if (nmt == MeterKrms) nmt = MeterPeak; // identical metrics
-               if (pos == 0) {
+               if (vis == 1) {
                        (*i).s->set_tick_bar(1);
                }
 
-               if ((*i).visible && nmt != lmt && pos == 0) {
+               if ((*i).visible && nmt != lmt && vis == 1) {
                        lmt = nmt;
                        metrics_left.set_metric_mode(1, lmt);
                } else if ((*i).visible && nmt != lmt) {
@@ -776,7 +760,7 @@ Meterbridge::sync_order_keys (RouteSortOrderKey)
 void
 Meterbridge::resync_order()
 {
-       sync_order_keys(MixerSort);
+       sync_order_keys();
 }
 
 void
@@ -812,6 +796,12 @@ Meterbridge::parameter_changed (std::string const & p)
        else if (p == "meterbridge-label-height") {
                scroller.queue_resize();
        }
+       else if (p == "show-monitor-on-meterbridge") {
+               scroller.queue_resize();
+       }
+       else if (p == "track-name-number") {
+               scroller.queue_resize();
+       }
 }
 
 void