vtl: use ArdourImage
[ardour.git] / gtk2_ardour / editor_mixer.cc
index 09e3764483dc3b93fb502ef77e521d47772dd60d..b693cf7e75609720ac907aa9d6c09c41d68b2e8d 100644 (file)
 #endif
 
 #include <glibmm/miscutils.h>
+#include <gtkmm/messagedialog.h>
 #include <gtkmm2ext/utils.h>
 #include <gtkmm2ext/window_title.h>
 
 #include "pbd/enumwriter.h"
 
+#include "ardour/rc_configuration.h"
+
 #include "actions.h"
 #include "ardour_ui.h"
 #include "audio_time_axis.h"
 #include "automation_time_axis.h"
 #include "editor.h"
-#include "editor_routes.h"
 #include "editor_route_groups.h"
 #include "editor_regions.h"
 #include "gui_thread.h"
 #include "midi_time_axis.h"
 #include "mixer_strip.h"
+#include "mixer_ui.h"
 #include "selection.h"
 
 #include "i18n.h"
@@ -73,6 +76,23 @@ Editor::show_editor_mixer (bool yn)
 
        show_editor_mixer_when_tracks_arrive = false;
 
+       if (yn) {
+               Glib::RefPtr<Gdk::Window> win = get_window ();
+               Glib::RefPtr<Gdk::Screen> screen;
+               
+               if (win) {
+                        screen = win->get_screen();
+               } else {
+                       screen = Gdk::Screen::get_default();
+               }
+
+               if (screen && screen->get_height() < 700) {
+                       Gtk::MessageDialog msg (_("This screen is not tall enough to display the editor mixer"));
+                       msg.run ();
+                       return;
+               }
+       }
+
        if (!_session) {
                show_editor_mixer_when_tracks_arrive = yn;
                return;
@@ -97,7 +117,7 @@ Editor::show_editor_mixer (bool yn)
                        }
 
                } else {
-                       sort_track_selection ();
+                       sort_track_selection (selection->tracks);
 
                        for (TrackSelection::iterator i = selection->tracks.begin(); i != selection->tracks.end(); ++i) {
                                RouteTimeAxisView* atv;
@@ -145,7 +165,7 @@ Editor::ensure_all_elements_drawn ()
 {
        controls_layout.queue_draw ();
        ruler_label_event_box.queue_draw ();
-       time_button_event_box.queue_draw ();
+       time_bars_event_box.queue_draw ();
 }
 #endif
 
@@ -251,3 +271,35 @@ Editor::mixer_strip_width_changed ()
 
        editor_mixer_strip_width = current_mixer_strip->get_width_enum ();
 }
+
+void
+Editor::track_mixer_selection ()
+{
+       Mixer_UI::instance()->selection().RoutesChanged.connect (sigc::mem_fun (*this, &Editor::follow_mixer_selection));
+}
+
+void
+Editor::follow_mixer_selection ()
+{
+       if (!ARDOUR::Config->get_link_editor_and_mixer_selection() || _following_mixer_selection) {
+               return;
+       }
+
+       _following_mixer_selection = true;
+       selection->block_tracks_changed (true);
+
+       RouteUISelection& s (Mixer_UI::instance()->selection().routes);
+
+       selection->clear_tracks ();
+
+       for (RouteUISelection::iterator i = s.begin(); i != s.end(); ++i) {
+               TimeAxisView* tav = get_route_view_by_route_id ((*i)->route()->id());
+               if (tav) {
+                       selection->add (tav);
+               }
+       }
+
+       _following_mixer_selection = false;
+       selection->block_tracks_changed (false);
+       selection->TracksChanged (); /* EMIT SIGNAL */
+}