X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Feditor_mixer.cc;h=175c553615377bd06cb308887e199ae3f253e878;hb=d23135f36bd35066f1ed6769ede2002e33a1bf66;hp=ec7189223502e72145cd83d81d9d03659a0f13a8;hpb=8d29a1ce20d92f560c1d504496001ad77a604bed;p=ardour.git diff --git a/gtk2_ardour/editor_mixer.cc b/gtk2_ardour/editor_mixer.cc index ec71892235..175c553615 100644 --- a/gtk2_ardour/editor_mixer.cc +++ b/gtk2_ardour/editor_mixer.cc @@ -22,22 +22,25 @@ #endif #include +#include #include #include #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 win = get_window (); + Glib::RefPtr screen; + + if (win) { + screen = win->get_screen(); + } else { + screen = Gdk::Screen::get_default(); + } + + if (g_getenv ("ARDOUR_LOVES_STUPID_TINY_SCREENS") == 0 && 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; @@ -113,15 +133,17 @@ Editor::show_editor_mixer (bool yn) if (current_mixer_strip == 0) { create_editor_mixer (); } - - current_mixer_strip->set_route (r); - current_mixer_strip->set_width_enum (editor_mixer_strip_width, (void*) this); } - if (current_mixer_strip->get_parent() == 0) { + if (current_mixer_strip && current_mixer_strip->get_parent() == 0) { global_hpacker.pack_start (*current_mixer_strip, Gtk::PACK_SHRINK ); global_hpacker.reorder_child (*current_mixer_strip, 0); - current_mixer_strip->show_all (); + current_mixer_strip->show (); + } + + if (r) { + current_mixer_strip->set_route (r); + current_mixer_strip->set_width_enum (editor_mixer_strip_width, (void*) this); } } else { @@ -191,7 +213,7 @@ Editor::set_selected_mixer_strip (TimeAxisView& view) boost::shared_ptr route; AutomationTimeAxisView* atv; - + if ((atv = dynamic_cast(&view)) != 0) { AudioTimeAxisView *parent = dynamic_cast(view.get_parent()); @@ -213,7 +235,7 @@ Editor::set_selected_mixer_strip (TimeAxisView& view) } } } - + if (current_mixer_strip->route() == route) { return; } @@ -251,3 +273,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 */ +}