add option to resize meterbridge track-labels
authorRobin Gareus <robin@gareus.org>
Mon, 29 Jul 2013 17:42:41 +0000 (19:42 +0200)
committerRobin Gareus <robin@gareus.org>
Mon, 29 Jul 2013 17:42:41 +0000 (19:42 +0200)
gtk2_ardour/level_meter.cc
gtk2_ardour/level_meter.h
gtk2_ardour/meter_strip.cc
gtk2_ardour/meter_strip.h
gtk2_ardour/meterbridge.cc
libs/ardour/ardour/session_configuration_vars.h

index 000af26d9dad699aeb8d8727ece4d7f8ea523b47..2de28ff384021f12c493817e955ebd3026f0b306 100644 (file)
@@ -427,6 +427,7 @@ LevelMeterBase::meter_button_release (GdkEventButton* ev)
        if (ev->button == 1) {
                clear_meters (false);
        }
+       ButtonRelease(ev);
 
        return true;
 }
index abb5e327edf1d38e3bd641991adb87a2ba15b3c2..a355d7d28540fedc065e19afc74bc97b2e25173d 100644 (file)
@@ -71,6 +71,7 @@ class LevelMeterBase : public ARDOUR::SessionHandlePtr
 
        /** Emitted in the GUI thread when a button is pressed over the meter */
        PBD::Signal1<bool, GdkEventButton *> ButtonPress;
+       PBD::Signal1<bool, GdkEventButton *> ButtonRelease;
        PBD::Signal1<void, ARDOUR::MeterType> MeterTypeChanged;
 
        protected:
index 87fbb62406da0d0ba3bafce7989d3380dfb03986..78dc61485ab751a6fa56f21856e1c6b1bbd9eb18 100644 (file)
@@ -135,7 +135,7 @@ MeterStrip::MeterStrip (Session* sess, boost::shared_ptr<ARDOUR::Route> rt)
        level_meter->clear_meters();
        level_meter->set_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->ButtonRelease.connect_same_thread (level_meter_connection, boost::bind (&MeterStrip::level_meter_button_release, this, _1));
        level_meter->MeterTypeChanged.connect_same_thread (level_meter_connection, boost::bind (&MeterStrip::meter_type_changed, this, _1));
 
        meter_align.set(0.5, 0.5, 0.0, 1.0);
@@ -249,6 +249,7 @@ MeterStrip::MeterStrip (Session* sess, boost::shared_ptr<ARDOUR::Route> rt)
        _route->PropertyChanged.connect (route_connections, invalidator (*this), boost::bind (&MeterStrip::strip_property_changed, this, _1), gui_context());
 
        peak_display.signal_button_release_event().connect (sigc::mem_fun(*this, &MeterStrip::peak_button_release), false);
+       name_label.signal_button_release_event().connect (sigc::mem_fun(*this, &MeterStrip::name_label_button_release), false);
 
        UI::instance()->theme_changed.connect (sigc::mem_fun(*this, &MeterStrip::on_theme_changed));
        ColorsChanged.connect (sigc::mem_fun (*this, &MeterStrip::on_theme_changed));
@@ -450,9 +451,29 @@ void
 MeterStrip::on_size_allocate (Gtk::Allocation& a)
 {
        const int wh = a.get_height();
-       int nh = ceilf(wh * .11f);
-       if (nh < 52) nh = 52;
-       if (nh > 148) nh = 148;
+       int nh;
+       int mh = 0;
+       if (_session) {
+               mh = _session->config.get_meterbridge_label_height();
+       }
+       switch (mh) {
+               default:
+               case 0:
+                       nh = ceilf(wh * .11f);
+                       if (nh < 52) nh = 52;
+                       if (nh > 148) nh = 148;
+                       break;
+               case 2:
+                       nh = ceilf(wh * .22);
+                       if (nh < 52) nh = 52;
+                       if (nh > 256) nh = 256;
+                       break;
+               case 1:
+                       nh = ceilf(wh * .08);
+                       if (nh < 36) nh = 36;
+                       if (nh > 128) nh = 128;
+                       break;
+       }
        namebx.set_size_request(18, nh);
        if (_route) {
                name_label.set_size_request(18, nh-2);
@@ -651,11 +672,13 @@ MeterStrip::parameter_changed (std::string const & p)
        else if (p == "show-name-on-meterbridge") {
                update_name_box();
        }
+       else if (p == "meterbridge-label-height") {
+               queue_resize();
+       }
 }
 
-
 bool
-MeterStrip::level_meter_button_press (GdkEventButton* ev)
+MeterStrip::level_meter_button_release (GdkEventButton* ev)
 {
        if (ev->button == 3) {
                popup_level_meter_menu (ev);
@@ -676,15 +699,15 @@ MeterStrip::popup_level_meter_menu (GdkEventButton* ev)
        RadioMenuItem::Group group;
 
        _suspend_menu_callbacks = true;
-       add_level_meter_item (items, group, ArdourMeter::meter_type_string(MeterPeak), MeterPeak);
-       add_level_meter_item (items, group, ArdourMeter::meter_type_string(MeterKrms),  MeterKrms);
-       add_level_meter_item (items, group, ArdourMeter::meter_type_string(MeterIEC1DIN), MeterIEC1DIN);
-       add_level_meter_item (items, group, ArdourMeter::meter_type_string(MeterIEC1NOR), MeterIEC1NOR);
-       add_level_meter_item (items, group, ArdourMeter::meter_type_string(MeterIEC2BBC), MeterIEC2BBC);
-       add_level_meter_item (items, group, ArdourMeter::meter_type_string(MeterIEC2EBU), MeterIEC2EBU);
-       add_level_meter_item (items, group, ArdourMeter::meter_type_string(MeterK20), MeterK20);
-       add_level_meter_item (items, group, ArdourMeter::meter_type_string(MeterK14), MeterK14);
-       add_level_meter_item (items, group, ArdourMeter::meter_type_string(MeterVU),  MeterVU);
+       add_level_meter_type_item (items, group, ArdourMeter::meter_type_string(MeterPeak), MeterPeak);
+       add_level_meter_type_item (items, group, ArdourMeter::meter_type_string(MeterKrms),  MeterKrms);
+       add_level_meter_type_item (items, group, ArdourMeter::meter_type_string(MeterIEC1DIN), MeterIEC1DIN);
+       add_level_meter_type_item (items, group, ArdourMeter::meter_type_string(MeterIEC1NOR), MeterIEC1NOR);
+       add_level_meter_type_item (items, group, ArdourMeter::meter_type_string(MeterIEC2BBC), MeterIEC2BBC);
+       add_level_meter_type_item (items, group, ArdourMeter::meter_type_string(MeterIEC2EBU), MeterIEC2EBU);
+       add_level_meter_type_item (items, group, ArdourMeter::meter_type_string(MeterK20), MeterK20);
+       add_level_meter_type_item (items, group, ArdourMeter::meter_type_string(MeterK14), MeterK14);
+       add_level_meter_type_item (items, group, ArdourMeter::meter_type_string(MeterVU),  MeterVU);
 
        MeterType cmt = _route->meter_type();
        const std::string cmn = ArdourMeter::meter_type_string(cmt);
@@ -701,8 +724,52 @@ MeterStrip::popup_level_meter_menu (GdkEventButton* ev)
        _suspend_menu_callbacks = false;
 }
 
+bool
+MeterStrip::name_label_button_release (GdkEventButton* ev)
+{
+       if (!_session) return true;
+       if (!_session->config.get_show_name_on_meterbridge()) return true;
+
+       if (ev->button == 3) {
+               popup_name_label_menu (ev);
+               return true;
+       }
+
+       return false;
+}
+
+void
+MeterStrip::popup_name_label_menu (GdkEventButton* ev)
+{
+       using namespace Gtk::Menu_Helpers;
+
+       Gtk::Menu* m = manage (new Menu);
+       MenuList& items = m->items ();
+
+       RadioMenuItem::Group group;
+
+       _suspend_menu_callbacks = true;
+       items.push_back (SeparatorElem());
+       add_label_height_item (items, group, _("Short labels"), 1);
+       add_label_height_item (items, group, _("Medium labels"), 0);
+       add_label_height_item (items, group, _("Tall labels"), 2);
+
+       m->popup (ev->button, ev->time);
+       _suspend_menu_callbacks = false;
+}
+
 void
-MeterStrip::add_level_meter_item (Menu_Helpers::MenuList& items, RadioMenuItem::Group& group, string const & name, MeterType type)
+MeterStrip::add_label_height_item (Menu_Helpers::MenuList& items, RadioMenuItem::Group& group, string const & name, uint32_t h)
+{
+       using namespace Menu_Helpers;
+
+       items.push_back (RadioMenuElem (group, name, sigc::bind (sigc::mem_fun (*this, &MeterStrip::set_label_height), h)));
+       RadioMenuItem* i = dynamic_cast<RadioMenuItem *> (&items.back ());
+       i->set_active (_session && _session->config.get_meterbridge_label_height() == h);
+}
+
+void
+MeterStrip::add_level_meter_type_item (Menu_Helpers::MenuList& items, RadioMenuItem::Group& group, string const & name, MeterType type)
 {
        using namespace Menu_Helpers;
 
@@ -715,9 +782,18 @@ void
 MeterStrip::set_meter_type (MeterType type)
 {
        if (_suspend_menu_callbacks) return;
+       if (_route->meter_type() == type) return;
+
        level_meter->set_type (type);
 }
 
+void
+MeterStrip::set_label_height (uint32_t h)
+{
+       if (_suspend_menu_callbacks) return;
+       _session->config.set_meterbridge_label_height(h);
+}
+
 void
 MeterStrip::meter_type_changed (MeterType type)
 {
index 896725656bcdf19a5148799a2800cd18b84159be..e817f7d5c616e3ec057420ee71bf1307555f8dae 100644 (file)
@@ -132,8 +132,6 @@ class MeterStrip : public Gtk::VBox, public RouteUI
        void meter_type_changed (ARDOUR::MeterType);
        void update_background (ARDOUR::MeterType);
 
-       static int max_pattern_metric_size; // == FastMeter::max_pattern_metric_size
-
        bool peak_button_release (GdkEventButton*);
 
        void parameter_changed (std::string const & p);
@@ -142,10 +140,16 @@ class MeterStrip : public Gtk::VBox, public RouteUI
        void update_name_box ();
 
        bool _suspend_menu_callbacks;
-       bool level_meter_button_press (GdkEventButton* ev);
+       bool level_meter_button_release (GdkEventButton* ev);
        void popup_level_meter_menu (GdkEventButton* ev);
-       void add_level_meter_item (Gtk::Menu_Helpers::MenuList& items, Gtk::RadioMenuItem::Group& group, std::string const & name, ARDOUR::MeterType mode);
+       void add_level_meter_type_item (Gtk::Menu_Helpers::MenuList&, Gtk::RadioMenuItem::Group&, std::string const &, ARDOUR::MeterType);
+
+       bool name_label_button_release (GdkEventButton* ev);
+       void popup_name_label_menu (GdkEventButton* ev);
+       void add_label_height_item (Gtk::Menu_Helpers::MenuList&, Gtk::RadioMenuItem::Group&, std::string const &, uint32_t);
+
        void set_meter_type (ARDOUR::MeterType mode);
+       void set_label_height (uint32_t);
 };
 
 #endif /* __ardour_mixer_strip__ */
index 0183c0f4d25313a7339aeaa74dd129dbb4b947c3..a0110365c18584a2de2dbe0543eb1447ab1ff88d 100644 (file)
@@ -807,6 +807,9 @@ Meterbridge::parameter_changed (std::string const & p)
        else if (p == "show-name-on-meterbridge") {
                scroller.queue_resize();
        }
+       else if (p == "meterbridge-label-height") {
+               scroller.queue_resize();
+       }
 }
 
 void
index ebeebbe1fd76a0be86c7e59111012050f91d9213..5e93c01b79b51c260cca84debedb48d4a813795f 100644 (file)
@@ -64,3 +64,4 @@ 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)
 CONFIG_VARIABLE (bool, show_name_on_meterbridge, "show-name-on-meterbridge", true)
+CONFIG_VARIABLE (uint32_t, meterbridge_label_height,  "meterbridge-label-height", 0)