diff options
author | Robin Gareus <robin@gareus.org> | 2017-06-17 14:50:28 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2017-06-17 15:52:00 +0200 |
commit | c02a3413e1eb079ea7df5d14da94973c17b8e11c (patch) | |
tree | 22a4c765bb6932285b2e88355ea42bb0af56ba81 /libs/ardour/stripable.cc | |
parent | f80958e168e459f617a860a4aa12e6fc6766c8be (diff) |
Move implementation out of header file
Diffstat (limited to 'libs/ardour/stripable.cc')
-rw-r--r-- | libs/ardour/stripable.cc | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/libs/ardour/stripable.cc b/libs/ardour/stripable.cc index 721d92789f..9f5a5743e7 100644 --- a/libs/ardour/stripable.cc +++ b/libs/ardour/stripable.cc @@ -123,3 +123,62 @@ Stripable::is_selected() const } return _session.selection().selected (shared_from_this()); } + +bool +Stripable::Sorter::operator() (boost::shared_ptr<ARDOUR::Stripable> a, boost::shared_ptr<ARDOUR::Stripable> b) +{ + if (a->presentation_info().flags () == b->presentation_info().flags ()) { + return a->presentation_info().order() < b->presentation_info().order(); + } + + int cmp_a = 0; + int cmp_b = 0; + + if (a->is_auditioner ()) { cmp_a = -2; } + if (b->is_auditioner ()) { cmp_b = -2; } + if (a->is_monitor ()) { cmp_a = -1; } + if (b->is_monitor ()) { cmp_b = -1; } + + /* ARDOUR-Editor: [Track|Bus|Master] (0) < VCA (3) + * ARDOUR-Mixer : [Track|Bus] (0) < VCA (3) < Master (4) + * + * Mixbus-Editor: [Track|Bus] (0) < Mixbus (1) < VCA (3) < Master (4) + * Mixbus-Mixer : [Track|Bus] (0) < Mixbus (1) < Master (2) < VCA (3) + */ + + if (a->presentation_info().flags () & ARDOUR::PresentationInfo::VCA) { + cmp_a = 3; + } +#ifdef MIXBUS + else if (a->presentation_info().flags () & ARDOUR::PresentationInfo::MasterOut) { + cmp_a = _mixer_order ? 2 : 4; + } + else if ((a->presentation_info().flags () & ARDOUR::PresentationInfo::Mixbus) || a->mixbus()) { + cmp_a = 1; + } +#endif + else if (_mixer_order && (a->presentation_info().flags () & ARDOUR::PresentationInfo::MasterOut)) { + cmp_a = 4; + } + + + if (b->presentation_info().flags () & ARDOUR::PresentationInfo::VCA) { + cmp_b = 3; + } +#ifdef MIXBUS + else if (b->presentation_info().flags () & ARDOUR::PresentationInfo::MasterOut) { + cmp_b = _mixer_order ? 2 : 4; + } + else if ((b->presentation_info().flags () & ARDOUR::PresentationInfo::Mixbus) || b->mixbus()) { + cmp_b = 1; + } +#endif + else if (_mixer_order && (b->presentation_info().flags () & ARDOUR::PresentationInfo::MasterOut)) { + cmp_b = 4; + } + + if (cmp_a == cmp_b) { + return a->presentation_info().order() < b->presentation_info().order(); + } + return cmp_a < cmp_b; +} |