diff options
Diffstat (limited to 'gtk2_ardour')
-rw-r--r-- | gtk2_ardour/editor_routes.cc | 14 | ||||
-rw-r--r-- | gtk2_ardour/mixer_strip.cc | 16 | ||||
-rw-r--r-- | gtk2_ardour/mixer_ui.cc | 48 | ||||
-rw-r--r-- | gtk2_ardour/mixer_ui.h | 5 | ||||
-rw-r--r-- | gtk2_ardour/route_sorter.h | 18 |
5 files changed, 64 insertions, 37 deletions
diff --git a/gtk2_ardour/editor_routes.cc b/gtk2_ardour/editor_routes.cc index b4fc8681e6..0d2695a30e 100644 --- a/gtk2_ardour/editor_routes.cc +++ b/gtk2_ardour/editor_routes.cc @@ -1058,21 +1058,21 @@ EditorRoutes::sync_treeview_from_order_keys () return; } - OrderKeySortedRoutes sorted_routes; + OrderingKeys sorted; for (TreeModel::Children::iterator ri = rows.begin(); ri != rows.end(); ++ri, ++old_order) { boost::shared_ptr<Route> route = (*ri)[_columns.route]; - sorted_routes.push_back (RoutePlusOrderKey (route, old_order, route->order_key ())); + sorted.push_back (OrderKeys (old_order, route->order_key ())); } SortByNewDisplayOrder cmp; - sort (sorted_routes.begin(), sorted_routes.end(), cmp); - neworder.assign (sorted_routes.size(), 0); + sort (sorted.begin(), sorted.end(), cmp); + neworder.assign (sorted.size(), 0); uint32_t n = 0; - for (OrderKeySortedRoutes::iterator sr = sorted_routes.begin(); sr != sorted_routes.end(); ++sr, ++n) { + for (OrderingKeys::iterator sr = sorted.begin(); sr != sorted.end(); ++sr, ++n) { neworder[n] = sr->old_display_order; @@ -1080,8 +1080,8 @@ EditorRoutes::sync_treeview_from_order_keys () changed = true; } - DEBUG_TRACE (DEBUG::OrderKeys, string_compose ("EDITOR change order for %1 from %2 to %3\n", - sr->route->name(), sr->old_display_order, n)); + DEBUG_TRACE (DEBUG::OrderKeys, string_compose ("EDITOR change order from %1 to %2\n", + sr->old_display_order, n)); } if (changed) { diff --git a/gtk2_ardour/mixer_strip.cc b/gtk2_ardour/mixer_strip.cc index 3598f19e9b..c8faaa41f9 100644 --- a/gtk2_ardour/mixer_strip.cc +++ b/gtk2_ardour/mixer_strip.cc @@ -2494,6 +2494,14 @@ MixerStrip::vca_menu_toggle (CheckMenuItem* menuitem, uint32_t n) return; } + if (!_selected) { + /* if this strip is not selected, add it before carrying out + changes to assignment. the user probably didn't notice + that they were clicking on an unselected track. + */ + _mixer.select_strip (*this); + } + if (!menuitem->get_active()) { cerr << "Unassign from " << n << endl; _mixer.do_vca_unassign (vca); @@ -2509,8 +2517,8 @@ MixerStrip::vca_assign (boost::shared_ptr<VCA> vca) if (!vca || !_route) { return; } - - vca->add (_route); + cerr << "Adding " << _route->name() << " to " << vca->number() << endl; + _route->gain_control()->add_master (vca); } void @@ -2522,9 +2530,11 @@ MixerStrip::vca_unassign (boost::shared_ptr<VCA> vca) if (!vca) { /* null VCA means drop all VCA assignments */ + cerr << "clear vcas for " << _route->name() << endl; _route->gain_control()->clear_masters (); } else { - vca->remove (_route); + cerr << "Removing " << _route->name() << " from " << vca->number() << endl; + _route->gain_control()->remove_master (vca); } } diff --git a/gtk2_ardour/mixer_ui.cc b/gtk2_ardour/mixer_ui.cc index a321085e23..ab80f2a151 100644 --- a/gtk2_ardour/mixer_ui.cc +++ b/gtk2_ardour/mixer_ui.cc @@ -368,8 +368,6 @@ Mixer_UI::show_window () void Mixer_UI::add_masters (VCAList& vcas) { - cerr << vcas.size() << " VCAs added\n"; - for (VCAList::iterator v = vcas.begin(); v != vcas.end(); ++v) { VCAMasterStrip* vms = new VCAMasterStrip (_session, *v); @@ -499,6 +497,16 @@ Mixer_UI::deselect_all_strip_processors () } void +Mixer_UI::select_strip (MixerStrip& ms, bool add) +{ + if (add) { + _selection.add (&ms); + } else { + _selection.set (&ms); + } +} + +void Mixer_UI::select_none () { _selection.clear_routes(); @@ -688,24 +696,43 @@ Mixer_UI::sync_treeview_from_order_keys () return; } - OrderKeySortedRoutes sorted_routes; + OrderingKeys sorted; + uint32_t vca_cnt = 0; + uint32_t max_route_order_key = 0; + + /* count number of Routes in track_model (there may be some odd reason + why this is not the same as the number in the session, but here we + care about the track model. + */ + + for (TreeModel::Children::iterator ri = rows.begin(); ri != rows.end(); ++ri) { + boost::shared_ptr<Route> route = (*ri)[track_columns.route]; + if (route) { + max_route_order_key = max (route->order_key(), max_route_order_key); + } + } for (TreeModel::Children::iterator ri = rows.begin(); ri != rows.end(); ++ri, ++old_order) { boost::shared_ptr<Route> route = (*ri)[track_columns.route]; if (!route) { - continue; + /* VCAs need to sort after all routes. We don't display + * them in the same place (March 2016), but we don't + * want them intermixed in the track_model + */ + sorted.push_back (OrderKeys (old_order, max_route_order_key + ++vca_cnt)); + } else { + sorted.push_back (OrderKeys (old_order, route->order_key ())); } - sorted_routes.push_back (RoutePlusOrderKey (route, old_order, route->order_key ())); } SortByNewDisplayOrder cmp; - sort (sorted_routes.begin(), sorted_routes.end(), cmp); - neworder.assign (sorted_routes.size(), 0); + sort (sorted.begin(), sorted.end(), cmp); + neworder.assign (sorted.size(), 0); uint32_t n = 0; - for (OrderKeySortedRoutes::iterator sr = sorted_routes.begin(); sr != sorted_routes.end(); ++sr, ++n) { + for (OrderingKeys::iterator sr = sorted.begin(); sr != sorted.end(); ++sr, ++n) { neworder[n] = sr->old_display_order; @@ -713,8 +740,8 @@ Mixer_UI::sync_treeview_from_order_keys () changed = true; } - DEBUG_TRACE (DEBUG::OrderKeys, string_compose ("MIXER change order for %1 from %2 to %3\n", - sr->route->name(), sr->old_display_order, n)); + DEBUG_TRACE (DEBUG::OrderKeys, string_compose ("MIXER change order from %1 to %2\n", + sr->old_display_order, n)); } if (changed) { @@ -1192,7 +1219,6 @@ Mixer_UI::redisplay_track_list () if (vms) { vca_packer.pack_start (*vms, false, false); vms->show (); - cerr << "Packed vca " << vms->vca()->number() << " into vca_packer\n"; continue; } diff --git a/gtk2_ardour/mixer_ui.h b/gtk2_ardour/mixer_ui.h index d818ee214a..d48db2edaa 100644 --- a/gtk2_ardour/mixer_ui.h +++ b/gtk2_ardour/mixer_ui.h @@ -92,9 +92,6 @@ class Mixer_UI : public Gtkmm2ext::Tabbable, public PBD::ScopedConnectionList, p void set_strip_width (Width, bool save = false); Width get_strip_width () const { return _strip_width; } - void unselect_strip_in_display (MixerStrip*); - void select_strip_in_display (MixerStrip*); - XMLNode& get_state (); int set_state (const XMLNode&, int /* version */); @@ -111,7 +108,7 @@ class Mixer_UI : public Gtkmm2ext::Tabbable, public PBD::ScopedConnectionList, p void deselect_all_strip_processors(); void delete_processors(); - + void select_strip (MixerStrip&, bool add=false); void select_none (); bool window_not_visible () const; diff --git a/gtk2_ardour/route_sorter.h b/gtk2_ardour/route_sorter.h index c203afa188..1450a2c09b 100644 --- a/gtk2_ardour/route_sorter.h +++ b/gtk2_ardour/route_sorter.h @@ -24,25 +24,19 @@ #include <stdint.h> #include <vector> -namespace ARDOUR { - class Route; -} - -struct RoutePlusOrderKey { - boost::shared_ptr<ARDOUR::Route> route; /* we don't really need this, but its handy to keep around */ +struct OrderKeys { uint32_t old_display_order; uint32_t new_display_order; - RoutePlusOrderKey (boost::shared_ptr<ARDOUR::Route> r, uint32_t ok, uint32_t nk) - : route (r) - , old_display_order (ok) - , new_display_order (nk) {} + OrderKeys (uint32_t ok, uint32_t nk) + : old_display_order (ok) + , new_display_order (nk) {} }; -typedef std::vector<RoutePlusOrderKey> OrderKeySortedRoutes; +typedef std::vector<OrderKeys> OrderingKeys; struct SortByNewDisplayOrder { - bool operator() (const RoutePlusOrderKey& a, const RoutePlusOrderKey& b) { + bool operator() (const OrderKeys& a, const OrderKeys& b) { return a.new_display_order < b.new_display_order; } }; |