diff options
author | Robin Gareus <robin@gareus.org> | 2014-06-25 21:16:09 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2014-06-26 19:15:43 +0200 |
commit | b067a185f01988b99eb60d6078e928fb81c3521f (patch) | |
tree | b1d8eda08b3d22969f402b6a892f4bfd022ad641 /libs/ardour/session.cc | |
parent | 7cb6e9065a577adaecf3d52e8fc472f671b558d6 (diff) |
implement track numbering
Diffstat (limited to 'libs/ardour/session.cc')
-rw-r--r-- | libs/ardour/session.cc | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/libs/ardour/session.cc b/libs/ardour/session.cc index 2063891a72..4a3ce009eb 100644 --- a/libs/ardour/session.cc +++ b/libs/ardour/session.cc @@ -81,6 +81,7 @@ #include "ardour/region_factory.h" #include "ardour/route_graph.h" #include "ardour/route_group.h" +#include "ardour/route_sorters.h" #include "ardour/send.h" #include "ardour/session.h" #include "ardour/session_directory.h" @@ -234,6 +235,7 @@ Session::Session (AudioEngine &eng, , routes (new RouteList) , _adding_routes_in_progress (false) , destructive_index (0) + , _track_number_decimals(1) , solo_update_disabled (false) , default_fade_steepness (0) , default_fade_msecs (0) @@ -2349,6 +2351,8 @@ Session::add_routes (RouteList& new_routes, bool input_auto_connect, bool output save_state (_current_snapshot_name); } + reassign_track_numbers(); + RouteAdded (new_routes); /* EMIT SIGNAL */ } @@ -2626,6 +2630,7 @@ Session::remove_route (boost::shared_ptr<Route> route) if (save_state (_current_snapshot_name)) { save_history (_current_snapshot_name); } + reassign_track_numbers(); } void @@ -3042,6 +3047,40 @@ Session::route_by_remote_id (uint32_t id) return boost::shared_ptr<Route> ((Route*) 0); } + +void +Session::reassign_track_numbers () +{ + int64_t tn = 0; + int64_t bn = 0; + RouteList r (*(routes.reader ())); + SignalOrderRouteSorter sorter; + r.sort (sorter); + + for (RouteList::iterator i = r.begin(); i != r.end(); ++i) { + if (boost::dynamic_pointer_cast<Track> (*i)) { + (*i)->set_track_number(++tn); + } + else if (!(*i)->is_master() && !(*i)->is_monitor() && !(*i)->is_auditioner()) { + (*i)->set_track_number(--bn); + } + } + const uint32_t decimals = ceilf (log10f (tn + 1)); + const bool decimals_changed = _track_number_decimals != decimals; + _track_number_decimals = decimals; + + if (decimals_changed && config.get_track_name_number ()) { + for (RouteList::iterator i = r.begin(); i != r.end(); ++i) { + boost::shared_ptr<Track> t = boost::dynamic_pointer_cast<Track> (*i); + if (t) { + t->resync_track_name(); + } + } + // trigger GUI re-layout + config.ParameterChanged("track-name-number"); + } +} + void Session::playlist_region_added (boost::weak_ptr<Region> w) { @@ -5004,6 +5043,8 @@ Session::sync_order_keys () DEBUG_TRACE (DEBUG::OrderKeys, "Sync Order Keys.\n"); + reassign_track_numbers(); + Route::SyncOrderKeys (); /* EMIT SIGNAL */ DEBUG_TRACE (DEBUG::OrderKeys, "\tsync done\n"); |