Decreased region opacity, smoothed out canvas/tempo line colours.
[ardour.git] / gtk2_ardour / route_ui.cc
index bb24dcc426943b886b38f88e66ec93e33da8591e..08b6c657a519a57880747d13dd8aaf6b42716217 100644 (file)
@@ -36,6 +36,8 @@
 #include "gui_thread.h"
 
 #include <ardour/route.h>
+#include <ardour/session.h>
+#include <ardour/audioengine.h>
 #include <ardour/audio_track.h>
 #include <ardour/audio_diskstream.h>
 
@@ -72,7 +74,17 @@ RouteUI::RouteUI (boost::shared_ptr<ARDOUR::Route> rt, ARDOUR::Session& sess, co
 
         mute_button = manage (new BindableToggleButton (_route->mute_control(), m_name ));
         solo_button = manage (new BindableToggleButton (_route->solo_control(), s_name ));
+
+       // mute_button->unset_flags (Gtk::CAN_FOCUS);
+       // solo_button->unset_flags (Gtk::CAN_FOCUS);
+
+       _route->mute_changed.connect (mem_fun(*this, &RouteUI::mute_changed));
+       _route->solo_changed.connect (mem_fun(*this, &RouteUI::solo_changed));
+       _route->solo_safe_changed.connect (mem_fun(*this, &RouteUI::solo_changed));
        
+       update_solo_display ();
+       update_mute_display ();
+
        if (is_track()) {
                boost::shared_ptr<Track> t = boost::dynamic_pointer_cast<Track>(_route);
 
@@ -81,14 +93,10 @@ RouteUI::RouteUI (boost::shared_ptr<ARDOUR::Route> rt, ARDOUR::Session& sess, co
                _session.RecordStateChanged.connect (mem_fun (*this, &RouteUI::session_rec_enable_changed));
 
                rec_enable_button = manage (new BindableToggleButton (t->rec_enable_control(), r_name ));
-
                rec_enable_button->unset_flags (Gtk::CAN_FOCUS);
                
                update_rec_display ();
        } 
-
-       mute_button->unset_flags (Gtk::CAN_FOCUS);
-       solo_button->unset_flags (Gtk::CAN_FOCUS);
        
        /* map the current state */
 
@@ -112,7 +120,7 @@ RouteUI::mute_press(GdkEventButton* ev)
                                build_mute_menu();
                        }
 
-                       mute_menu->popup(0,0);
+                       mute_menu->popup(0,ev->time);
 
                } else {
 
@@ -122,6 +130,8 @@ RouteUI::mute_press(GdkEventButton* ev)
                                
                                if (!Keyboard::modifier_state_equals (ev->state, Keyboard::ModifierMask (Keyboard::Control))) {
                                        wait_for_release = true;
+                               } else {
+                                       return false;
                                }
                        }
 
@@ -187,7 +197,7 @@ RouteUI::solo_press(GdkEventButton* ev)
                                build_solo_menu ();
                        }
 
-                       solo_menu->popup (1, 0);
+                       solo_menu->popup (1, ev->time);
 
                } else {
 
@@ -198,6 +208,8 @@ RouteUI::solo_press(GdkEventButton* ev)
                                
                                if (!Keyboard::modifier_state_equals (ev->state, Keyboard::ModifierMask (Keyboard::Control))) {
                                        wait_for_release = true;
+                               } else {
+                                       return false;
                                }
                        }
 
@@ -275,6 +287,12 @@ RouteUI::solo_release(GdkEventButton* ev)
 bool
 RouteUI::rec_enable_press(GdkEventButton* ev)
 {
+       if (!_session.engine().connected()) {
+               MessageDialog msg (_("Not connected to JACK - cannot engage record"));
+               msg.run ();
+               return true;
+       }
+
        if (!ignore_toggle && is_track() && rec_enable_button) {
 
                if (ev->button == 2 && Keyboard::modifier_state_equals (ev->state, Keyboard::Control)) {
@@ -426,7 +444,7 @@ RouteUI::refresh_remote_control_menu ()
 
        RadioMenuItem::Group rc_group;
        CheckMenuItem* rc_active;
-       uint32_t limit = _session.ntracks();
+       uint32_t limit = _session.ntracks() + _session.nbusses();
        char buf[32];
 
        MenuList& rc_items = remote_control_menu->items();
@@ -487,7 +505,7 @@ RouteUI::build_solo_menu (void)
        items.push_back (CheckMenuElem(*check));
        check->show_all();
 
-       items.push_back (SeparatorElem());
+       //items.push_back (SeparatorElem());
        // items.push_back (MenuElem (_("MIDI Bind"), mem_fun (*mute_button, &BindableToggleButton::midi_learn)));
        
 }
@@ -530,7 +548,7 @@ RouteUI::build_mute_menu(void)
        items.push_back (CheckMenuElem(*check));
        check->show_all();
 
-       items.push_back (SeparatorElem());
+       //items.push_back (SeparatorElem());
        // items.push_back (MenuElem (_("MIDI Bind"), mem_fun (*mute_button, &BindableToggleButton::midi_learn)));
 }
 
@@ -654,7 +672,7 @@ RouteUI::set_color (const Gdk::Color & c)
        snprintf (buf, sizeof (buf), "%d:%d:%d", c.get_red(), c.get_green(), c.get_blue());
        xml_node->add_property ("color", buf);
 
-        _route->gui_changed ("color", (void *) 0); /* EMIT_SIGNAL */
+       _route->gui_changed ("color", (void *) 0); /* EMIT_SIGNAL */
 }