Make stuff in the automation menu apply to the track selection.
[ardour.git] / gtk2_ardour / gain_meter.cc
index 849426c4c025d2e89a54986628f1360a06ed0973..8ef83cfad5b4e2e98446089992e17c1bcad4f3e4 100644 (file)
@@ -110,8 +110,8 @@ GainMeterBase::GainMeterBase (Session* s,
 
        level_meter = new LevelMeter(_session);
 
-       gain_slider->signal_button_press_event().connect (sigc::mem_fun(*this, &GainMeter::start_gain_touch));
-       gain_slider->signal_button_release_event().connect (sigc::mem_fun(*this, &GainMeter::end_gain_touch));
+       gain_slider->signal_button_press_event().connect (sigc::mem_fun(*this, &GainMeter::gain_slider_button_press));
+       gain_slider->signal_button_release_event().connect (sigc::mem_fun(*this, &GainMeter::gain_slider_button_release));
        gain_slider->set_name ("GainFader");
 
        gain_display.set_name ("MixerStripGainDisplay");
@@ -398,16 +398,14 @@ void
 GainMeterBase::gain_adjusted ()
 {
        if (!ignore_toggle) {
-               if (_route) {
-                       if (_route->amp() == _amp) {
-                               if (_is_midi) {
-                                       _route->set_gain (gain_adjustment.get_value(), this);
-                               } else {
-                                       _route->set_gain (slider_position_to_gain (gain_adjustment.get_value()), this);
-                               }
+               if (_route && _route->amp() == _amp) {
+                       if (_is_midi) {
+                               _route->set_gain (gain_adjustment.get_value(), this);
                        } else {
-                               _amp->set_gain (slider_position_to_gain (gain_adjustment.get_value()), this);
+                               _route->set_gain (slider_position_to_gain (gain_adjustment.get_value()), this);
                        }
+               } else {
+                       _amp->set_gain (slider_position_to_gain (gain_adjustment.get_value()), this);
                }
        }
 
@@ -451,7 +449,10 @@ GainMeterBase::set_meter_strip_name (const char * name)
 void
 GainMeterBase::set_fader_name (const char * name)
 {
-       gain_slider->set_name (name);
+        uint32_t rgb_active = rgba_from_style (name, 0xff, 0, 0xff, 0, "bg", STATE_ACTIVE, false);
+        uint32_t rgb_normal = rgba_from_style (name, 0xff, 0xff, 0, 0, "bg", STATE_NORMAL, false);
+
+       gain_slider->set_border_colors (rgb_normal, rgb_active);
 }
 
 void
@@ -474,6 +475,10 @@ next_meter_point (MeterPoint mp)
                break;
 
        case MeterPostFader:
+               return MeterOutput;
+               break;
+
+       case MeterOutput:
                return MeterCustom;
                break;
 
@@ -530,7 +535,7 @@ GainMeterBase::meter_press(GdkEventButton* ev)
                                        */
 
                                        if (ev->button == 1) {
-                                               set_mix_group_meter_point (*_route, next_meter_point (_route->meter_point()));
+                                               set_route_group_meter_point (*_route, next_meter_point (_route->meter_point()));
                                        }
 
                                } else {
@@ -552,8 +557,8 @@ GainMeterBase::meter_press(GdkEventButton* ev)
 gint
 GainMeterBase::meter_release(GdkEventButton*)
 {
-       if(!ignore_toggle){
-               if (wait_for_release){
+       if (!ignore_toggle) {
+               if (wait_for_release) {
                        wait_for_release = false;
 
                        if (_route) {
@@ -572,12 +577,12 @@ GainMeterBase::set_meter_point (Route& route, MeterPoint mp)
 }
 
 void
-GainMeterBase::set_mix_group_meter_point (Route& route, MeterPoint mp)
+GainMeterBase::set_route_group_meter_point (Route& route, MeterPoint mp)
 {
-       RouteGroup* mix_group;
+       RouteGroup* route_group;
 
-       if((mix_group = route.route_group()) != 0){
-               mix_group->apply (&Route::set_meter_point, mp);
+       if ((route_group = route.route_group ()) != 0) {
+               route_group->foreach_route (boost::bind (&Route::set_meter_point, _1, mp, false));
        } else {
                route.set_meter_point (mp);
        }
@@ -591,18 +596,25 @@ GainMeterBase::meter_point_clicked ()
        }
 }
 
-gint
-GainMeterBase::start_gain_touch (GdkEventButton*)
+bool
+GainMeterBase::gain_slider_button_press (GdkEventButton* ev)
 {
-       _amp->gain_control()->start_touch (_amp->session().transport_frame());
-       return FALSE;
+       switch (ev->type) {
+       case GDK_BUTTON_PRESS:
+               _amp->gain_control()->start_touch (_amp->session().transport_frame());
+               break;
+       default:
+               return false;
+       }
+
+       return true;
 }
 
-gint
-GainMeterBase::end_gain_touch (GdkEventButton*)
+bool
+GainMeterBase::gain_slider_button_release (GdkEventButton* ev)
 {
        _amp->gain_control()->stop_touch (false, _amp->session().transport_frame());
-       return FALSE;
+       return true;
 }
 
 gint
@@ -811,15 +823,12 @@ GainMeter::GainMeter (Session* s, int fader_length)
        gain_automation_state_button.set_size_request(15, 15);
        gain_automation_style_button.set_size_request(15, 15);
 
-       HBox* fader_centering_box = manage (new HBox);
-       fader_centering_box->pack_start (*gain_slider, true, false);
-
        fader_vbox = manage (new Gtk::VBox());
        fader_vbox->set_spacing (0);
-       fader_vbox->pack_start (*fader_centering_box, false, false, 0);
+       fader_vbox->pack_start (*gain_slider, false, false, 0);
 
        hbox.set_spacing (2);
-       hbox.pack_start (*fader_vbox, true, true);
+        hbox.pack_start (*fader_vbox, false, false, 4);
 
        set_spacing (2);
 
@@ -863,7 +872,7 @@ GainMeter::set_controls (boost::shared_ptr<Route> r,
        */
 
        gain_display_box.pack_end (peak_display, true, true);
-       hbox.pack_end (*level_meter, true, true);
+       hbox.pack_start (*level_meter, true, true);
 
        if (r && !r->is_hidden()) {
                fader_vbox->pack_start (gain_automation_state_button, false, false, 0);