add_option() after addings its choices so that it gets
[ardour.git] / gtk2_ardour / processor_box.cc
index b818b22c204c17eb1a83b89fc0bb7b174023c783..883ce4b196ff939128af2ac08c8056407887fdf5 100644 (file)
@@ -96,7 +96,8 @@ RefPtr<Action> ProcessorBox::controls_action;
 Glib::RefPtr<Gdk::Pixbuf> SendProcessorEntry::_slider;
 
 ProcessorEntry::ProcessorEntry (boost::shared_ptr<Processor> p, Width w)
-       : _position (PreFader)
+       : _button (ArdourButton::led_default_elements)
+       , _position (PreFader)
        , _processor (p)
        , _width (w)
        , _visual_state (Gtk::STATE_NORMAL)
@@ -105,12 +106,13 @@ ProcessorEntry::ProcessorEntry (boost::shared_ptr<Processor> p, Width w)
        _vbox.show ();
        
        if (_processor->active()) {
-               _button.set_active_state (CairoWidget::Active);
+               _button.set_active_state (Gtkmm2ext::Active);
        }
        _button.set_diameter (3);
-       _button.signal_clicked.connect (sigc::mem_fun (*this, &ProcessorEntry::led_clicked));
-       _button.set_text (name());
+       _button.set_distinct_led_click (true);
        _button.set_led_left (true);
+       _button.signal_led_clicked.connect (sigc::mem_fun (*this, &ProcessorEntry::led_clicked));
+       _button.set_text (name());
        _button.show ();
 
        _processor->ActiveChanged.connect (active_connection, invalidator (*this), boost::bind (&ProcessorEntry::processor_active_changed, this), gui_context());
@@ -145,25 +147,12 @@ ProcessorEntry::set_position (Position p)
 }
 
 void
-ProcessorEntry::set_visual_state (Gtk::StateType t)
+ProcessorEntry::set_visual_state (Gtkmm2ext::VisualState s, bool yn)
 {
-       /* map from GTK state to CairoWidget */
-
-       switch (t) {
-       case Gtk::STATE_ACTIVE:
-               _button.set_active_state (CairoWidget::Active);
-               _button.unset_visual_state ();
-               break;
-
-       case Gtk::STATE_SELECTED:
-               _button.set_visual_state (CairoWidget::Selected);
-               break;
-
-       case Gtk::STATE_NORMAL:
-       default:
-               _button.unset_visual_state ();
-               _button.unset_active_state ();
-               break;
+       if (yn) {
+               _button.set_visual_state (Gtkmm2ext::VisualState (_button.visual_state() | s));
+       } else {
+               _button.set_visual_state (Gtkmm2ext::VisualState (_button.visual_state() & ~s));
        }
 }
 
@@ -201,10 +190,10 @@ ProcessorEntry::set_enum_width (Width w)
 void
 ProcessorEntry::led_clicked()
 {
-       if (!_processor->active ()) {
-               _processor->activate ();
-       } else {
+       if (_button.active_state() == Gtkmm2ext::Active) {
                _processor->deactivate ();
+       } else {
+               _processor->activate ();
        }
 }
 
@@ -212,7 +201,7 @@ void
 ProcessorEntry::processor_active_changed ()
 {
        if (_processor->active()) {
-               _button.set_active_state (CairoWidget::Active);
+               _button.set_active_state (Gtkmm2ext::Active);
        } else {
                _button.unset_active_state ();
        }