summaryrefslogtreecommitdiff
path: root/gtk2_ardour/editor_route_list.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2007-10-11 22:07:47 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2007-10-11 22:07:47 +0000
commitf7f9d6fdc40248b190ec9c6e1a886261d55777ae (patch)
tree080723e9dc35a66013b37acbafc67a6afa929302 /gtk2_ardour/editor_route_list.cc
parentaa1f736a651376534acaa2268b65d42a3786fff7 (diff)
merge from 2.0-ongoing by hand, minus key binding editor
git-svn-id: svn://localhost/ardour2/trunk@2539 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/editor_route_list.cc')
-rw-r--r--gtk2_ardour/editor_route_list.cc53
1 files changed, 53 insertions, 0 deletions
diff --git a/gtk2_ardour/editor_route_list.cc b/gtk2_ardour/editor_route_list.cc
index e11738f65b..5e10a578f5 100644
--- a/gtk2_ardour/editor_route_list.cc
+++ b/gtk2_ardour/editor_route_list.cc
@@ -53,6 +53,10 @@ Editor::handle_new_route (Session::RouteList& routes)
TreeModel::Row parent;
TreeModel::Row row;
+ ignore_route_list_reorder = true;
+ ignore_route_order_sync = true;
+ no_route_list_redisplay = true;
+
for (Session::RouteList::iterator x = routes.begin(); x != routes.end(); ++x) {
boost::shared_ptr<Route> route = (*x);
@@ -100,6 +104,7 @@ Editor::handle_new_route (Session::RouteList& routes)
row[route_display_columns.text] = route->name();
row[route_display_columns.visible] = tv->marked_for_display();
row[route_display_columns.tv] = tv;
+ row[route_display_columns.route] = route;
track_views.push_back (tv);
@@ -114,11 +119,18 @@ Editor::handle_new_route (Session::RouteList& routes)
ignore_route_list_reorder = false;
+ tv->set_old_order_key (route_display_model->children().size() - 1);
route->gui_changed.connect (mem_fun(*this, &Editor::handle_gui_changes));
tv->GoingAway.connect (bind (mem_fun(*this, &Editor::remove_route), tv));
}
+ ignore_route_list_reorder = false;
+ ignore_route_order_sync = false;
+ no_route_list_redisplay = false;
+
+ redisplay_route_list ();
+
if (show_editor_mixer_when_tracks_arrive) {
show_editor_mixer (true);
}
@@ -234,6 +246,33 @@ Editor::route_list_reordered (const TreeModel::Path& path,const TreeModel::itera
redisplay_route_list ();
}
+
+void
+Editor::sync_order_keys ()
+{
+ vector<int> neworder;
+ TreeModel::Children rows = route_display_model->children();
+ TreeModel::Children::iterator ri;
+
+ if (ignore_route_order_sync || !session || (session->state_of_the_state() & Session::Loading) || rows.empty()) {
+ return;
+ }
+
+ for (ri = rows.begin(); ri != rows.end(); ++ri) {
+ neworder.push_back (0);
+ }
+
+ for (ri = rows.begin(); ri != rows.end(); ++ri) {
+ TimeAxisView* tv = (*ri)[route_display_columns.tv];
+ boost::shared_ptr<Route> route = (*ri)[route_display_columns.route];
+ neworder[route->order_key (X_("editor"))] = tv->old_order_key ();
+ }
+
+ ignore_route_list_reorder = true;
+ route_display_model->reorder (neworder);
+ ignore_route_list_reorder = false;
+}
+
void
Editor::redisplay_route_list ()
{
@@ -288,6 +327,13 @@ Editor::redisplay_route_list ()
cursor_group->raise_to_top ();
reset_scrolling_region ();
+
+ if (Config->get_sync_all_route_ordering() && !ignore_route_list_reorder) {
+ ignore_route_order_sync = true;
+ Route::SyncOrderKeys (); // EMIT SIGNAL
+ ignore_route_order_sync = false;
+ }
+
}
void
@@ -524,6 +570,13 @@ Editor::initial_route_list_display ()
}
void
+Editor::track_list_reorder (const Gtk::TreeModel::Path& path,const Gtk::TreeModel::iterator& iter, int* new_order)
+{
+ session->set_remote_control_ids();
+ redisplay_route_list ();
+}
+
+void
Editor::route_list_change (const Gtk::TreeModel::Path& path,const Gtk::TreeModel::iterator& iter)
{
session->set_remote_control_ids();