summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/editor_routes.cc14
-rw-r--r--gtk2_ardour/mixer_strip.cc16
-rw-r--r--gtk2_ardour/mixer_ui.cc48
-rw-r--r--gtk2_ardour/mixer_ui.h5
-rw-r--r--gtk2_ardour/route_sorter.h18
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;
}
};