From 762d2ae936bd78053d9f344ce9392b7867304ae2 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Wed, 17 Jan 2007 01:42:44 +0000 Subject: fix ordering of cut/copied regions when pasting; ctrl-click now does the right thing the first time its used on a region; fix missing click and other dubious behaviour in new sessions caused by not connecting to Configuration::ParameterChanged in the new session constructor git-svn-id: svn://localhost/ardour2/trunk@1331 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/region_selection.cc | 62 ++++++++++++++++++++++++++++------------- 1 file changed, 43 insertions(+), 19 deletions(-) (limited to 'gtk2_ardour/region_selection.cc') diff --git a/gtk2_ardour/region_selection.cc b/gtk2_ardour/region_selection.cc index a418b1de23..430e1d3728 100644 --- a/gtk2_ardour/region_selection.cc +++ b/gtk2_ardour/region_selection.cc @@ -22,22 +22,13 @@ #include "region_view.h" #include "region_selection.h" +#include "time_axis_view.h" using namespace ARDOUR; using namespace PBD; using namespace sigc; -bool -RegionComparator::operator() (const RegionView* a, const RegionView* b) const -{ - if (a == b) { - return false; - } else { - return a < b; - } -} - RegionSelection::RegionSelection () { _current_start = 0; @@ -46,9 +37,8 @@ RegionSelection::RegionSelection () RegionSelection::RegionSelection (const RegionSelection& other) { - for (RegionSelection::const_iterator i = other.begin(); i != other.end(); ++i) { - add (*i, false); + add (*i); } _current_start = other._current_start; _current_end = other._current_end; @@ -64,7 +54,7 @@ RegionSelection::operator= (const RegionSelection& other) clear_all(); for (RegionSelection::const_iterator i = other.begin(); i != other.end(); ++i) { - add (*i, false); + add (*i); } _current_start = other._current_start; @@ -85,11 +75,11 @@ RegionSelection::clear_all() bool RegionSelection::contains (RegionView* rv) { - return this->find (rv) != end(); + return find (begin(), end(), rv) != end(); } void -RegionSelection::add (RegionView* rv, bool dosort) +RegionSelection::add (RegionView* rv) { if (contains (rv)) { /* we already have it */ @@ -106,11 +96,11 @@ RegionSelection::add (RegionView* rv, bool dosort) _current_end = rv->region()->last_frame(); } - insert (rv); + push_back (rv); // add to layer sorted list + add_to_layer (rv); - } void @@ -124,7 +114,7 @@ RegionSelection::remove (RegionView* rv) { RegionSelection::iterator i; - if ((i = this->find (rv)) != end()) { + if ((i = find (begin(), end(), rv)) != end()) { erase (i); @@ -198,7 +188,7 @@ RegionSelection::add_to_layer (RegionView * rv) } struct RegionSortByTime { - bool operator() (const RegionView* a, const RegionView* b) { + bool operator() (const RegionView* a, const RegionView* b) const { return a->region()->position() < b->region()->position(); } }; @@ -217,3 +207,37 @@ RegionSelection::by_position (list& foo) const foo.sort (sorter); return; } + +struct RegionSortByTrack { + bool operator() (const RegionView* a, const RegionView* b) const { + + /* really, track and position */ + + if (a->get_trackview().order == b->get_trackview().order) { + return a->region()->position() < b->region()->position(); + } else { + return a->get_trackview().order < b->get_trackview().order; + } + } +}; + +void +RegionSelection::by_track (list& foo) const +{ + list::const_iterator i; + RegionSortByTrack sorter; + + for (i = _bylayer.begin(); i != _bylayer.end(); ++i) { + foo.push_back (*i); + } + + foo.sort (sorter); + return; +} + +void +RegionSelection::sort_by_position_and_track () +{ + RegionSortByTrack sorter; + sort (sorter); +} -- cgit v1.2.3