Cope with tracks having order keys higher than the number of tracks; although I'm...
authorCarl Hetherington <carl@carlh.net>
Wed, 11 May 2011 14:15:32 +0000 (14:15 +0000)
committerCarl Hetherington <carl@carlh.net>
Wed, 11 May 2011 14:15:32 +0000 (14:15 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@9492 d708f5d6-7413-0410-9779-e7cbd77b26cf

gtk2_ardour/editor_routes.cc

index 1368979e5896ef313775fb2f61437db3011747e5..8368bff66af27243795b90750131b5837052c922 100644 (file)
@@ -701,7 +701,7 @@ EditorRoutes::reordered (TreeModel::Path const &, TreeModel::iterator const &, i
 void
 EditorRoutes::sync_order_keys (string const & src)
 {
-       vector<int> neworder;
+       map<int, int> new_order;
        TreeModel::Children rows = _model->children();
        TreeModel::Children::iterator ri;
 
@@ -709,20 +709,16 @@ EditorRoutes::sync_order_keys (string const & src)
                return;
        }
 
-       for (ri = rows.begin(); ri != rows.end(); ++ri) {
-               neworder.push_back (0);
-       }
-
        bool changed = false;
        int order;
 
        for (order = 0, ri = rows.begin(); ri != rows.end(); ++ri, ++order) {
                boost::shared_ptr<Route> route = (*ri)[_columns.route];
 
-               int old_key = order;
-               int new_key = route->order_key (N_ ("editor"));
+               int const old_key = order;
+               int const new_key = route->order_key (N_ ("editor"));
 
-               neworder[new_key] = old_key;
+               new_order[new_key] = old_key;
 
                if (new_key != old_key) {
                        changed = true;
@@ -731,7 +727,14 @@ EditorRoutes::sync_order_keys (string const & src)
 
        if (changed) {
                _redisplay_does_not_reset_order_keys = true;
-               _model->reorder (neworder);
+
+               /* `compact' new_order into a vector */
+               vector<int> co;
+               for (map<int, int>::const_iterator i = new_order.begin(); i != new_order.end(); ++i) {
+                       co.push_back (i->second);
+               }
+               
+               _model->reorder (co);
                _redisplay_does_not_reset_order_keys = false;
        }
 }