summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2012-06-28 22:27:37 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2012-06-28 22:27:37 +0000
commit7db500301d1f02e9cb98eb5c744ae68456fac75b (patch)
tree93690e7d6b6a82e057cc276caba4db1dbca70904 /gtk2_ardour
parent81de53da1d82244ec589d6d65a5739b3022828c7 (diff)
further efforts at cleaning up the design of the interaction/relationship between route sort order keys and remote control IDs
git-svn-id: svn://localhost/ardour2/branches/3.0@12962 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/editor_routes.cc42
-rw-r--r--gtk2_ardour/mixer_ui.cc31
2 files changed, 37 insertions, 36 deletions
diff --git a/gtk2_ardour/editor_routes.cc b/gtk2_ardour/editor_routes.cc
index eaf0c2500a..39e31f59d4 100644
--- a/gtk2_ardour/editor_routes.cc
+++ b/gtk2_ardour/editor_routes.cc
@@ -817,25 +817,14 @@ EditorRoutes::sync_order_keys_from_model ()
bool changed = false;
uint32_t order = 0;
- for (ri = rows.begin(); ri != rows.end(); ++ri) {
+ for (ri = rows.begin(); ri != rows.end(); ++ri, ++order) {
boost::shared_ptr<Route> route = (*ri)[_columns.route];
- bool visible = (*ri)[_columns.visible];
-
uint32_t old_key = route->order_key (EditorSort);
- uint32_t new_key;
-
- if (!visible) {
- new_key = UINT_MAX;
- } else {
- new_key = order;
- }
- if (old_key != new_key) {
- route->set_order_key (EditorSort, new_key);
+ if (order != old_key) {
+ route->set_order_key (EditorSort, order);
changed = true;
}
-
- order++;
}
if (changed) {
@@ -847,6 +836,10 @@ EditorRoutes::sync_order_keys_from_model ()
void
EditorRoutes::sync_model_from_order_keys (RouteSortOrderKey src)
{
+ /* Some route order key(s) for `src' has been changed, make sure that
+ we update out tree/list model and GUI to reflect the change.
+ */
+
if (!_session || _session->deletion_in_progress()) {
return;
}
@@ -880,7 +873,8 @@ EditorRoutes::sync_model_from_order_keys (RouteSortOrderKey src)
vector<int> neworder;
TreeModel::Children rows = _model->children();
- uint32_t n = 0;
+ uint32_t old_order = 0;
+ bool changed = false;
if (rows.empty()) {
return;
@@ -888,14 +882,22 @@ EditorRoutes::sync_model_from_order_keys (RouteSortOrderKey src)
neworder.assign (rows.size(), 0);
- for (TreeModel::Children::iterator ri = rows.begin(); ri != rows.end(); ++ri, ++n) {
+ for (TreeModel::Children::iterator ri = rows.begin(); ri != rows.end(); ++ri, ++old_order) {
boost::shared_ptr<Route> route = (*ri)[_columns.route];
- neworder[route->order_key (EditorSort)] = n;
- DEBUG_TRACE (DEBUG::OrderKeys, string_compose ("editor change order for %1 to %2\n",
- route->name(), route->order_key (MixerSort)));
+ uint32_t new_order = route->order_key (EditorSort);
+
+ DEBUG_TRACE (DEBUG::OrderKeys, string_compose ("editor change order for %1 from %2 to %3\n",
+ route->name(), old_order, new_order));
+
+ neworder[new_order] = old_order;
+
+ if (old_order != new_order) {
+ changed = true;
+ }
+
}
- {
+ if (changed) {
Unwinder<bool> uw (_ignore_reorder, true);
_model->reorder (neworder);
}
diff --git a/gtk2_ardour/mixer_ui.cc b/gtk2_ardour/mixer_ui.cc
index 17d37fa5fb..e301bbcc79 100644
--- a/gtk2_ardour/mixer_ui.cc
+++ b/gtk2_ardour/mixer_ui.cc
@@ -413,25 +413,14 @@ Mixer_UI::sync_order_keys_from_model ()
bool changed = false;
uint32_t order = 0;
- for (ri = rows.begin(); ri != rows.end(); ++ri) {
+ for (ri = rows.begin(); ri != rows.end(); ++ri, ++order) {
boost::shared_ptr<Route> route = (*ri)[track_columns.route];
- bool visible = (*ri)[track_columns.visible];
-
uint32_t old_key = route->order_key (MixerSort);
- uint32_t new_key;
-
- if (!visible) {
- new_key = UINT_MAX;
- } else {
- new_key = order;
- }
- if (old_key != new_key) {
- route->set_order_key (MixerSort, new_key);
+ if (old_key != order) {
+ route->set_order_key (MixerSort, order);
changed = true;
}
-
- order++;
}
if (changed) {
@@ -477,6 +466,7 @@ Mixer_UI::sync_model_from_order_keys (RouteSortOrderKey src)
vector<int> neworder;
TreeModel::Children rows = track_model->children();
uint32_t n = 0;
+ bool changed = false;
if (rows.empty()) {
return;
@@ -486,12 +476,19 @@ Mixer_UI::sync_model_from_order_keys (RouteSortOrderKey src)
for (TreeModel::Children::iterator ri = rows.begin(); ri != rows.end(); ++ri, ++n) {
boost::shared_ptr<Route> route = (*ri)[track_columns.route];
- neworder[route->order_key (MixerSort)] = n;
+ uint32_t o = route->order_key (MixerSort);
+
+ neworder[o] = n;
+
+ if (o != n) {
+ changed = true;
+ }
+
DEBUG_TRACE (DEBUG::OrderKeys, string_compose ("mixer change order for %1 to %2\n",
route->name(), route->order_key (MixerSort)));
}
- {
+ if (changed) {
Unwinder<bool> uw (ignore_reorder, true);
track_model->reorder (neworder);
}
@@ -985,6 +982,8 @@ Mixer_UI::initial_track_display ()
track_model->clear ();
add_strips (copy);
}
+
+ _session->sync_order_keys (MixerSort);
redisplay_track_list ();
}