- } else {
-
- if (!last_track_was_selected) {
- /* keep moving through unselected tracks, but save this
- one in case we need it later as the one that will
- move *down* as the selected block moves up.
- */
- target_unselected_route = route;
- cerr << "--pre-SAVE as UNSELECTED " << route->name() << endl;
- continue;
- }
-
- last_track_was_selected = false;
-
- if (!up) {
- /* this is the track immediately after a selected block,
- and this is the one that will move *up* as
- the selected block moves down.
- */
-
- target_unselected_route = route;
- cerr << "--post-SAVE as UNSELECTED " << route->name() << endl;
- } else {
- cerr << "--(up) plan to use existing unselected target\n";
- }
- }
-
- cerr << "TRANSITION: sel = " << selected_block.size() << " unsel = " << target_unselected_route << endl;
-
- /* transitioned between selected/not-selected */
-
- uint32_t distance;
-
- for (vector<boost::shared_ptr<Route> >::iterator x = selected_block.begin(); x != selected_block.end(); ++x) {
- old_key = (*x)->order_key (_order_key);
- new_key = compute_new_key (old_key, up, 1, rows.size());
- neworder[new_key] = old_key;
- cerr << "--SELECTED, reorder from " << old_key << " => " << new_key << endl;
- }
-
- /* now move the unselected tracks in the opposite direction */
-
- if (!selected_block.empty() && target_unselected_route) {
- distance = selected_block.size();
- old_key = target_unselected_route->order_key (_order_key);
- new_key = compute_new_key (old_key, !up, distance, rows.size());
- neworder[new_key] = old_key;
- cerr << "--UNSELECTED, reorder from " << old_key << " => " << new_key << endl;
- }
-
- selected_block.clear ();
- target_unselected_route.reset ();
- }
-
- cerr << "when done ... sel = " << selected_block.size() << " unsel = " << target_unselected_route << endl;
-
- if (!selected_block.empty() || target_unselected_route) {
-
- /* left over blocks */
-
- uint32_t distance;
-
- for (vector<boost::shared_ptr<Route> >::iterator x = selected_block.begin(); x != selected_block.end(); ++x) {
- old_key = (*x)->order_key (_order_key);
- new_key = compute_new_key (old_key, up, 1, rows.size());
- neworder[new_key] = old_key;
- cerr << "--SELECTED, reorder from " << old_key << " => " << new_key << endl;
- }
-
- if (!selected_block.empty() && target_unselected_route) {
- distance = selected_block.size();
- old_key = target_unselected_route->order_key (_order_key);
- new_key = compute_new_key (old_key, !up, distance, rows.size());
- neworder[new_key] = old_key;
- cerr << "--UNSELECTED, reorder from " << old_key << " => " << new_key << endl;
- }
- }
-
- route_display_model->reorder (neworder);
-#endif