diff options
author | Robin Gareus <robin@gareus.org> | 2014-06-26 19:16:07 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2014-06-26 19:16:07 +0200 |
commit | a74d7bd232c1b97a05be478c4389aa434470bb60 (patch) | |
tree | 7d0577a590dce781a1befc00bfb98354aa5eeb48 /libs/ardour/track.cc | |
parent | b067a185f01988b99eb60d6078e928fb81c3521f (diff) |
option to use track-number and take-name as part of file-name
Diffstat (limited to 'libs/ardour/track.cc')
-rw-r--r-- | libs/ardour/track.cc | 49 |
1 files changed, 48 insertions, 1 deletions
diff --git a/libs/ardour/track.cc b/libs/ardour/track.cc index 5c95de0c41..d463be598f 100644 --- a/libs/ardour/track.cc +++ b/libs/ardour/track.cc @@ -68,8 +68,10 @@ Track::init () /* don't add rec_enable_control to controls because we don't want it to * appear as an automatable parameter */ + track_number_changed.connect_same_thread (*this, boost::bind (&Track::resync_track_name, this)); + _session.config.ParameterChanged.connect_same_thread (*this, boost::bind (&Track::parameter_changed, this, _1)); - return 0; + return 0; } void @@ -284,6 +286,28 @@ Track::set_record_enabled (bool yn, void *src) _rec_enable_control->Changed (); } +void +Track::parameter_changed (string const & p) +{ + if (p == "track-name-number") { + resync_track_name (); + } + else if (p == "track-name-take") { + resync_track_name (); + } + else if (p == "take-name") { + if (_session.config.get_track_name_take()) { + resync_track_name (); + } + } +} + +void +Track::resync_track_name () +{ + set_name(name()); +} + bool Track::set_name (const string& str) { @@ -294,6 +318,29 @@ Track::set_name (const string& str) return false; } + string diskstream_name = ""; + if (_session.config.get_track_name_take () && !_session.config.get_take_name ().empty()) { + // Note: any text is fine, legalize_for_path() fixes this later + diskstream_name += _session.config.get_take_name (); + diskstream_name += "_"; + } + const int64_t tracknumber = track_number(); + if (tracknumber > 0 && _session.config.get_track_name_number()) { + char num[64], fmt[10]; + snprintf(fmt, sizeof(fmt), "%%0%d" PRId64, _session.track_number_decimals()); + snprintf(num, sizeof(num), fmt, tracknumber); + diskstream_name += num; + diskstream_name += "_"; + } + diskstream_name += str; + + if (diskstream_name == _diskstream_name) { + return true; + } + _diskstream_name = diskstream_name; + + _diskstream->set_write_source_name (diskstream_name); + boost::shared_ptr<Track> me = boost::dynamic_pointer_cast<Track> (shared_from_this ()); if (_diskstream->playlist()->all_regions_empty () && _session.playlists->playlists_for_track (me).size() == 1) { /* Only rename the diskstream (and therefore the playlist) if |