diff options
Diffstat (limited to 'gtk2_ardour')
-rw-r--r-- | gtk2_ardour/editor_drag.cc | 2 | ||||
-rw-r--r-- | gtk2_ardour/editor_group_tabs.cc | 6 | ||||
-rw-r--r-- | gtk2_ardour/editor_group_tabs.h | 2 | ||||
-rw-r--r-- | gtk2_ardour/editor_ops.cc | 3 | ||||
-rw-r--r-- | gtk2_ardour/editor_routes.cc | 36 | ||||
-rw-r--r-- | gtk2_ardour/editor_routes.h | 2 | ||||
-rw-r--r-- | gtk2_ardour/editor_selection.cc | 8 | ||||
-rw-r--r-- | gtk2_ardour/group_tabs.cc | 9 | ||||
-rw-r--r-- | gtk2_ardour/group_tabs.h | 2 | ||||
-rw-r--r-- | gtk2_ardour/mixer_group_tabs.cc | 6 | ||||
-rw-r--r-- | gtk2_ardour/mixer_group_tabs.h | 2 | ||||
-rw-r--r-- | gtk2_ardour/mixer_ui.cc | 63 | ||||
-rw-r--r-- | gtk2_ardour/mixer_ui.h | 3 | ||||
-rw-r--r-- | gtk2_ardour/port_group.cc | 2 | ||||
-rw-r--r-- | gtk2_ardour/route_ui.cc | 42 |
15 files changed, 105 insertions, 83 deletions
diff --git a/gtk2_ardour/editor_drag.cc b/gtk2_ardour/editor_drag.cc index ae3795f7fa..8ae618b37f 100644 --- a/gtk2_ardour/editor_drag.cc +++ b/gtk2_ardour/editor_drag.cc @@ -420,7 +420,7 @@ struct EditorOrderTimeAxisViewSorter { RouteTimeAxisView* ra = dynamic_cast<RouteTimeAxisView*> (a); RouteTimeAxisView* rb = dynamic_cast<RouteTimeAxisView*> (b); assert (ra && rb); - return ra->route()->order_key (N_ ("editor")) < rb->route()->order_key (N_ ("editor")); + return ra->route()->order_key (EditorSort) < rb->route()->order_key (EditorSort); } }; diff --git a/gtk2_ardour/editor_group_tabs.cc b/gtk2_ardour/editor_group_tabs.cc index 352eec88cc..5a1e9c8aaa 100644 --- a/gtk2_ardour/editor_group_tabs.cc +++ b/gtk2_ardour/editor_group_tabs.cc @@ -177,10 +177,10 @@ EditorGroupTabs::default_properties () const return plist; } -string +RouteSortOrderKey EditorGroupTabs::order_key () const { - return X_("editor"); + return EditorSort; } RouteList @@ -201,5 +201,5 @@ EditorGroupTabs::selected_routes () const void EditorGroupTabs::sync_order_keys () { - _editor->_routes->sync_order_keys (""); + _editor->_routes->sync_order_keys (UndefinedSort); } diff --git a/gtk2_ardour/editor_group_tabs.h b/gtk2_ardour/editor_group_tabs.h index e2ed6055aa..a0021e4833 100644 --- a/gtk2_ardour/editor_group_tabs.h +++ b/gtk2_ardour/editor_group_tabs.h @@ -37,7 +37,7 @@ private: } void add_menu_items (Gtk::Menu *, ARDOUR::RouteGroup *); PBD::PropertyList default_properties () const; - std::string order_key () const; + ARDOUR::RouteSortOrderKey order_key () const; ARDOUR::RouteList selected_routes () const; void sync_order_keys (); }; diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc index 46a69ce6af..d891db6651 100644 --- a/gtk2_ardour/editor_ops.cc +++ b/gtk2_ardour/editor_ops.cc @@ -5411,8 +5411,7 @@ Editor::split_region () struct EditorOrderRouteSorter { bool operator() (boost::shared_ptr<Route> a, boost::shared_ptr<Route> b) { - /* use of ">" forces the correct sort order */ - return a->order_key ("editor") < b->order_key ("editor"); + return a->order_key (EditorSort) < b->order_key (EditorSort); } }; diff --git a/gtk2_ardour/editor_routes.cc b/gtk2_ardour/editor_routes.cc index c4443cbed0..3faeba183f 100644 --- a/gtk2_ardour/editor_routes.cc +++ b/gtk2_ardour/editor_routes.cc @@ -520,7 +520,14 @@ EditorRoutes::redisplay () /* this reorder is caused by user action, so reassign sort order keys to tracks. */ - route->set_order_key (N_ ("editor"), order_key); + + if (route->is_master()) { + route->set_order_key (EditorSort, Route::MasterBusRemoteControlID); + } else if (route->is_monitor()) { + route->set_order_key (EditorSort, Route::MonitorBusRemoteControlID); + } else { + route->set_order_key (EditorSort, order_key++); + } } bool visible = tv->marked_for_display (); @@ -534,7 +541,6 @@ EditorRoutes::redisplay () } n++; - order_key++; } /* whenever we go idle, update the track view list to reflect the new order. @@ -557,7 +563,7 @@ EditorRoutes::redisplay () } if (!_redisplay_does_not_reset_order_keys && !_redisplay_does_not_sync_order_keys) { - _session->sync_order_keys (N_ ("editor")); + _session->sync_order_keys (EditorSort); } } @@ -569,7 +575,6 @@ EditorRoutes::route_deleted (Gtk::TreeModel::Path const &) } /* this could require an order reset & sync */ - _session->set_remote_control_ids(); _ignore_reorder = true; redisplay (); _ignore_reorder = false; @@ -591,7 +596,6 @@ EditorRoutes::visible_changed (std::string const & path) if (tv->set_marked_for_display (!visible)) { _redisplay_does_not_reset_order_keys = true; - _session->set_remote_control_ids(); update_visibility (); redisplay (); _redisplay_does_not_reset_order_keys = false; @@ -649,15 +653,6 @@ EditorRoutes::routes_added (list<RouteTimeAxisView*> routes) row[_columns.solo_safe_state] = (*x)->route()->solo_safe(); row[_columns.name_editable] = true; - _ignore_reorder = true; - - /* added a new fresh one at the end */ - if ((*x)->route()->order_key (N_ ("editor")) == -1) { - (*x)->route()->set_order_key (N_ ("editor"), _model->children().size()-1); - } - - _ignore_reorder = false; - boost::weak_ptr<Route> wr ((*x)->route()); (*x)->route()->gui_changed.connect (*this, MISSING_INVALIDATOR, boost::bind (&EditorRoutes::handle_gui_changes, this, _1, _2), gui_context()); @@ -833,13 +828,13 @@ EditorRoutes::reordered (TreeModel::Path const &, TreeModel::iterator const &, i * route list so that the visual arrangement of routes matches the order keys from the routes. */ void -EditorRoutes::sync_order_keys (string const & src) +EditorRoutes::sync_order_keys (RouteSortOrderKey src) { map<int, int> new_order; TreeModel::Children rows = _model->children(); TreeModel::Children::iterator ri; - if (src == N_ ("editor") || !_session || (_session->state_of_the_state() & (Session::Loading|Session::Deletion)) || rows.empty()) { + if (src == EditorSort || !_session || (_session->state_of_the_state() & (Session::Loading|Session::Deletion)) || rows.empty()) { return; } @@ -850,7 +845,7 @@ EditorRoutes::sync_order_keys (string const & src) boost::shared_ptr<Route> route = (*ri)[_columns.route]; int const old_key = order; - int const new_key = route->order_key (N_ ("editor")); + int const new_key = route->order_key (EditorSort); new_order[new_key] = old_key; @@ -1193,7 +1188,7 @@ EditorRoutes::selection_filter (Glib::RefPtr<TreeModel> const &, TreeModel::Path struct EditorOrderRouteSorter { bool operator() (boost::shared_ptr<Route> a, boost::shared_ptr<Route> b) { /* use of ">" forces the correct sort order */ - return a->order_key (N_ ("editor")) < b->order_key (N_ ("editor")); + return a->order_key (EditorSort) < b->order_key (EditorSort); } }; @@ -1247,7 +1242,6 @@ void EditorRoutes::track_list_reorder (Gtk::TreeModel::Path const &, Gtk::TreeModel::iterator const &, int* /*new_order*/) { _redisplay_does_not_sync_order_keys = true; - _session->set_remote_control_ids(); redisplay (); _redisplay_does_not_sync_order_keys = false; } @@ -1370,7 +1364,7 @@ EditorRoutes::move_selected_tracks (bool up) } for (leading = view_routes.begin(); leading != view_routes.end(); ++leading) { - neworder.push_back (leading->second->order_key (N_ ("editor"))); + neworder.push_back (leading->second->order_key (EditorSort)); } #ifndef NDEBUG @@ -1381,7 +1375,7 @@ EditorRoutes::move_selected_tracks (bool up) _model->reorder (neworder); - _session->sync_order_keys (N_ ("editor")); + _session->sync_order_keys (EditorSort); } void diff --git a/gtk2_ardour/editor_routes.h b/gtk2_ardour/editor_routes.h index 5fad890faf..00631d914a 100644 --- a/gtk2_ardour/editor_routes.h +++ b/gtk2_ardour/editor_routes.h @@ -55,7 +55,7 @@ public: std::list<TimeAxisView*> views () const; void hide_all_tracks (bool); void clear (); - void sync_order_keys (std::string const &); + void sync_order_keys (ARDOUR::RouteSortOrderKey); private: diff --git a/gtk2_ardour/editor_selection.cc b/gtk2_ardour/editor_selection.cc index eb9ea5c721..7b08eaeaa6 100644 --- a/gtk2_ardour/editor_selection.cc +++ b/gtk2_ardour/editor_selection.cc @@ -779,7 +779,7 @@ Editor::set_selected_regionview_from_click (bool press, Selection::Operation op) RouteTimeAxisView* closest = 0; int distance = INT_MAX; - int key = rtv->route()->order_key ("editor"); + int key = rtv->route()->order_key (EditorSort); for (RegionSelection::iterator x = selection->regions.begin(); x != selection->regions.end(); ++x) { @@ -794,7 +794,7 @@ Editor::set_selected_regionview_from_click (bool press, Selection::Operation op) if (result.second) { /* newly added to already_in_selection */ - int d = artv->route()->order_key ("editor"); + int d = artv->route()->order_key (EditorSort); d -= key; @@ -810,7 +810,7 @@ Editor::set_selected_regionview_from_click (bool press, Selection::Operation op) /* now add all tracks between that one and this one */ - int okey = closest->route()->order_key ("editor"); + int okey = closest->route()->order_key (EditorSort); if (okey > key) { swap (okey, key); @@ -820,7 +820,7 @@ Editor::set_selected_regionview_from_click (bool press, Selection::Operation op) RouteTimeAxisView* artv = dynamic_cast<RouteTimeAxisView*>(*x); if (artv && artv != rtv) { - int k = artv->route()->order_key ("editor"); + int k = artv->route()->order_key (EditorSort); if (k >= okey && k <= key) { diff --git a/gtk2_ardour/group_tabs.cc b/gtk2_ardour/group_tabs.cc index 9ce3b15046..d53b905846 100644 --- a/gtk2_ardour/group_tabs.cc +++ b/gtk2_ardour/group_tabs.cc @@ -435,24 +435,23 @@ GroupTabs::subgroup (RouteGroup* g, bool aux, Placement placement) } struct CollectSorter { - CollectSorter (string const & key) : _key (key) {} + CollectSorter (RouteSortOrderKey key) : _key (key) {} bool operator () (boost::shared_ptr<Route> a, boost::shared_ptr<Route> b) { return a->order_key (_key) < b->order_key (_key); } - string _key; + RouteSortOrderKey _key; }; struct OrderSorter { - OrderSorter (string const & key) : _key (key) {} + OrderSorter (RouteSortOrderKey key) : _key (key) {} bool operator() (boost::shared_ptr<Route> a, boost::shared_ptr<Route> b) { - /* use of ">" forces the correct sort order */ return a->order_key (_key) < b->order_key (_key); } - string _key; + RouteSortOrderKey _key; }; /** Collect all members of a RouteGroup so that they are together in the Editor or Mixer. diff --git a/gtk2_ardour/group_tabs.h b/gtk2_ardour/group_tabs.h index d8c488c70f..fa6a7bac53 100644 --- a/gtk2_ardour/group_tabs.h +++ b/gtk2_ardour/group_tabs.h @@ -92,7 +92,7 @@ private: virtual void add_menu_items (Gtk::Menu *, ARDOUR::RouteGroup *) {} virtual PBD::PropertyList default_properties () const = 0; - virtual std::string order_key () const = 0; + virtual ARDOUR::RouteSortOrderKey order_key () const = 0; virtual ARDOUR::RouteList selected_routes () const = 0; virtual void sync_order_keys () = 0; diff --git a/gtk2_ardour/mixer_group_tabs.cc b/gtk2_ardour/mixer_group_tabs.cc index db586eed7e..60a625c96d 100644 --- a/gtk2_ardour/mixer_group_tabs.cc +++ b/gtk2_ardour/mixer_group_tabs.cc @@ -170,10 +170,10 @@ MixerGroupTabs::default_properties () const return plist; } -string +RouteSortOrderKey MixerGroupTabs::order_key () const { - return X_("signal"); + return MixerSort; } RouteList @@ -192,5 +192,5 @@ MixerGroupTabs::selected_routes () const void MixerGroupTabs::sync_order_keys () { - _mixer->sync_order_keys (""); + _mixer->sync_order_keys (UndefinedSort); } diff --git a/gtk2_ardour/mixer_group_tabs.h b/gtk2_ardour/mixer_group_tabs.h index d8dd062280..0999dd9808 100644 --- a/gtk2_ardour/mixer_group_tabs.h +++ b/gtk2_ardour/mixer_group_tabs.h @@ -36,7 +36,7 @@ private: } PBD::PropertyList default_properties () const; - std::string order_key () const; + ARDOUR::RouteSortOrderKey order_key () const; ARDOUR::RouteList selected_routes () const; void sync_order_keys (); diff --git a/gtk2_ardour/mixer_ui.cc b/gtk2_ardour/mixer_ui.cc index 8dd83ad771..a29717211e 100644 --- a/gtk2_ardour/mixer_ui.cc +++ b/gtk2_ardour/mixer_ui.cc @@ -307,13 +307,11 @@ Mixer_UI::hide_window (GdkEventAny *ev) void Mixer_UI::add_strip (RouteList& routes) { - ENSURE_GUI_THREAD (*this, &Mixer_UI::add_strip, routes) - MixerStrip* strip; no_track_list_redisplay = true; strip_redisplay_does_not_sync_order_keys = true; - + for (RouteList::iterator x = routes.begin(); x != routes.end(); ++x) { boost::shared_ptr<Route> route = (*x); @@ -360,10 +358,6 @@ Mixer_UI::add_strip (RouteList& routes) row[track_columns.route] = route; row[track_columns.strip] = strip; - if (route->order_key (N_("signal")) == -1) { - route->set_order_key (N_("signal"), track_model->children().size()-1); - } - route->PropertyChanged.connect (*this, invalidator (*this), boost::bind (&Mixer_UI::strip_property_changed, this, _1, strip), gui_context()); strip->WidthChanged.connect (sigc::mem_fun(*this, &Mixer_UI::strip_width_changed)); @@ -406,12 +400,12 @@ Mixer_UI::remove_strip (MixerStrip* strip) } void -Mixer_UI::sync_order_keys (string const & src) +Mixer_UI::sync_order_keys (RouteSortOrderKey src) { TreeModel::Children rows = track_model->children(); TreeModel::Children::iterator ri; - if (src == N_("signal") || !_session || (_session->state_of_the_state() & (Session::Loading|Session::Deletion)) || rows.empty()) { + if (src == MixerSort || !_session || (_session->state_of_the_state() & (Session::Loading|Session::Deletion)) || rows.empty()) { return; } @@ -423,7 +417,7 @@ Mixer_UI::sync_order_keys (string const & src) for (ri = rows.begin(); ri != rows.end(); ++ri, ++order) { boost::shared_ptr<Route> route = (*ri)[track_columns.route]; unsigned int old_key = order; - unsigned int new_key = route->order_key (N_("signal")); + unsigned int new_key = route->order_key (MixerSort); keys[new_key] = old_key; @@ -802,7 +796,6 @@ void Mixer_UI::track_list_reorder (const TreeModel::Path&, const TreeModel::iterator&, int* /*new_order*/) { strip_redisplay_does_not_sync_order_keys = true; - _session->set_remote_control_ids(); redisplay_track_list (); strip_redisplay_does_not_sync_order_keys = false; } @@ -812,7 +805,6 @@ Mixer_UI::track_list_change (const Gtk::TreeModel::Path&, const Gtk::TreeModel:: { // never reset order keys because of a property change strip_redisplay_does_not_reset_order_keys = true; - _session->set_remote_control_ids(); redisplay_track_list (); strip_redisplay_does_not_reset_order_keys = false; } @@ -822,7 +814,6 @@ Mixer_UI::track_list_delete (const Gtk::TreeModel::Path&) { /* this could require an order sync */ if (_session && !_session->deletion_in_progress()) { - _session->set_remote_control_ids(); redisplay_track_list (); } } @@ -832,13 +823,15 @@ Mixer_UI::redisplay_track_list () { TreeModel::Children rows = track_model->children(); TreeModel::Children::iterator i; - long order; - + long regular_order = 0; + long hidden_order = 999999; // arbitary high number + if (no_track_list_redisplay) { return; } - for (order = 0, i = rows.begin(); i != rows.end(); ++i, ++order) { + for (i = rows.begin(); i != rows.end(); ++i) { + MixerStrip* strip = (*i)[track_columns.strip]; if (strip == 0) { @@ -846,10 +839,6 @@ Mixer_UI::redisplay_track_list () continue; } - if (!strip_redisplay_does_not_reset_order_keys) { - strip->route()->set_order_key (N_("signal"), order); - } - bool const visible = (*i)[track_columns.visible]; if (visible) { @@ -859,16 +848,41 @@ Mixer_UI::redisplay_track_list () if (strip->route()->is_master() || strip->route()->is_monitor()) { out_packer.reorder_child (*strip, -1); + + if (!strip_redisplay_does_not_reset_order_keys) { + if (strip->route()->is_master()) { + strip->route()->set_order_key (MixerSort, Route::MasterBusRemoteControlID); + } else { + strip->route()->set_order_key (MixerSort, Route::MonitorBusRemoteControlID); + } + } + } else { strip_packer.reorder_child (*strip, -1); /* put at end */ + + if (!strip_redisplay_does_not_reset_order_keys) { + strip->route()->set_order_key (MixerSort, regular_order++); + } + } } else { if (strip->route()->is_master() || strip->route()->is_monitor()) { out_packer.pack_start (*strip, false, false); + if (!strip_redisplay_does_not_reset_order_keys) { + if (strip->route()->is_master()) { + strip->route()->set_order_key (MixerSort, Route::MasterBusRemoteControlID); + } else { + strip->route()->set_order_key (MixerSort, Route::MonitorBusRemoteControlID); + } + } } else { strip_packer.pack_start (*strip, false, false); + + if (!strip_redisplay_does_not_reset_order_keys) { + strip->route()->set_order_key (MixerSort, regular_order++); + } } strip->set_packed (true); } @@ -884,12 +898,16 @@ Mixer_UI::redisplay_track_list () strip_packer.remove (*strip); strip->set_packed (false); } + + if (!strip_redisplay_does_not_reset_order_keys) { + strip->route()->set_order_key (MixerSort, hidden_order++); + } } } } if (!strip_redisplay_does_not_reset_order_keys && !strip_redisplay_does_not_sync_order_keys) { - _session->sync_order_keys (N_("signal")); + _session->sync_order_keys (MixerSort); } _group_tabs->set_dirty (); @@ -924,8 +942,7 @@ Mixer_UI::strip_width_changed () struct SignalOrderRouteSorter { bool operator() (boost::shared_ptr<Route> a, boost::shared_ptr<Route> b) { - /* use of ">" forces the correct sort order */ - return a->order_key (N_("signal")) < b->order_key (N_("signal")); + return a->order_key (MixerSort) < b->order_key (MixerSort); } }; diff --git a/gtk2_ardour/mixer_ui.h b/gtk2_ardour/mixer_ui.h index 08d7b6e487..f3d7845461 100644 --- a/gtk2_ardour/mixer_ui.h +++ b/gtk2_ardour/mixer_ui.h @@ -37,6 +37,7 @@ #include "pbd/signals.h" #include "ardour/ardour.h" +#include "ardour/types.h" #include "ardour/session_handle.h" #include "enums.h" @@ -244,7 +245,7 @@ class Mixer_UI : public Gtk::Window, public PBD::ScopedConnectionList, public AR Width _strip_width; - void sync_order_keys (std::string const &); + void sync_order_keys (ARDOUR::RouteSortOrderKey); bool strip_redisplay_does_not_reset_order_keys; bool strip_redisplay_does_not_sync_order_keys; bool ignore_sync; diff --git a/gtk2_ardour/port_group.cc b/gtk2_ardour/port_group.cc index 36b9ea1187..f313b2973f 100644 --- a/gtk2_ardour/port_group.cc +++ b/gtk2_ardour/port_group.cc @@ -312,7 +312,7 @@ struct RouteIOs { class RouteIOsComparator { public: bool operator() (RouteIOs const & a, RouteIOs const & b) { - return a.route->order_key (X_("editor")) < b.route->order_key (X_("editor")); + return a.route->order_key (EditorSort) < b.route->order_key (EditorSort); } }; diff --git a/gtk2_ardour/route_ui.cc b/gtk2_ardour/route_ui.cc index 0da6bde4f0..b6c81717a2 100644 --- a/gtk2_ardour/route_ui.cc +++ b/gtk2_ardour/route_ui.cc @@ -1716,27 +1716,39 @@ void RouteUI::open_remote_control_id_dialog () { ArdourDialog dialog (_("Remote Control ID")); + SpinButton* spin = 0; - uint32_t const limit = _session->ntracks() + _session->nbusses () + 4; + dialog.get_vbox()->set_border_width (18); - HBox* hbox = manage (new HBox); - hbox->set_spacing (6); - hbox->pack_start (*manage (new Label (_("Remote control ID:")))); - SpinButton* spin = manage (new SpinButton); - spin->set_digits (0); - spin->set_increments (1, 10); - spin->set_range (0, limit); - spin->set_value (_route->remote_control_id()); - hbox->pack_start (*spin); - dialog.get_vbox()->pack_start (*hbox); - - dialog.add_button (Stock::CANCEL, RESPONSE_CANCEL); - dialog.add_button (Stock::APPLY, RESPONSE_ACCEPT); + if (Config->get_remote_model() == UserOrdered) { + uint32_t const limit = _session->ntracks() + _session->nbusses () + 4; + + HBox* hbox = manage (new HBox); + hbox->set_spacing (6); + hbox->pack_start (*manage (new Label (_("Remote control ID:")))); + spin = manage (new SpinButton); + spin->set_digits (0); + spin->set_increments (1, 10); + spin->set_range (0, limit); + spin->set_value (_route->remote_control_id()); + hbox->pack_start (*spin); + dialog.get_vbox()->pack_start (*hbox); + + dialog.add_button (Stock::CANCEL, RESPONSE_CANCEL); + dialog.add_button (Stock::APPLY, RESPONSE_ACCEPT); + } else { + Label* l = manage (new Label()); + l->set_markup (string_compose (_("Remote Control IDs are currently determined by track/bus ordering in %1\n\n\n" + "<span size=\"small\" style=\"italic\">Use the User Interaction tab of the Preferences window if you want to change this</span>"), + (Config->get_remote_model() == MixerOrdered ? _("the mixer") : ("the editor")))); + dialog.get_vbox()->pack_start (*l); + dialog.add_button (Stock::OK, RESPONSE_CANCEL); + } dialog.show_all (); int const r = dialog.run (); - if (r == RESPONSE_ACCEPT) { + if (r == RESPONSE_ACCEPT && spin) { _route->set_remote_control_id (spin->get_value_as_int ()); } } |