X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=gtk2_ardour%2Fregion_selection.cc;h=9ac96d682ba35db73a54687c48dbe9862593c4f4;hb=896a0a991cc44418f58903fe5dd1c58001c87314;hp=2e4eaaadcd08a5f82922481aa0685668c1bd4610;hpb=c8a4f8002b28647faf31eeaa11d500fa15f06f22;p=ardour.git diff --git a/gtk2_ardour/region_selection.cc b/gtk2_ardour/region_selection.cc index 2e4eaaadcd..9ac96d682b 100644 --- a/gtk2_ardour/region_selection.cc +++ b/gtk2_ardour/region_selection.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2006 Paul Davis + Copyright (C) 2006 Paul Davis This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -18,71 +18,66 @@ #include -#include +#include "ardour/region.h" +#include "gui_thread.h" #include "region_view.h" #include "region_selection.h" #include "time_axis_view.h" +using namespace std; using namespace ARDOUR; using namespace PBD; -using namespace sigc; -/** - * Construct an empty RegionSelection. +/** Construct an empty RegionSelection. */ - RegionSelection::RegionSelection () { - RegionView::RegionViewGoingAway.connect (mem_fun(*this, &RegionSelection::remove_it)); + RegionView::RegionViewGoingAway.connect (death_connection, MISSING_INVALIDATOR, ui_bind (&RegionSelection::remove_it, this, _1), gui_context()); _current_start = 0; _current_end = 0; } -/** - * Copy constructor. +/** Copy constructor. * @param other RegionSelection to copy. */ - RegionSelection::RegionSelection (const RegionSelection& other) + : std::list() { - RegionView::RegionViewGoingAway.connect (mem_fun(*this, &RegionSelection::remove_it)); + RegionView::RegionViewGoingAway.connect (death_connection, MISSING_INVALIDATOR, ui_bind (&RegionSelection::remove_it, this, _1), gui_context()); + + _current_start = other._current_start; + _current_end = other._current_end; for (RegionSelection::const_iterator i = other.begin(); i != other.end(); ++i) { add (*i); } - _current_start = other._current_start; - _current_end = other._current_end; } -/** - * operator= to set a RegionSelection to be the same as another. +/** operator= to set a RegionSelection to be the same as another. * @param other Other RegionSelection. */ - RegionSelection& RegionSelection::operator= (const RegionSelection& other) { if (this != &other) { clear_all(); - - for (RegionSelection::const_iterator i = other.begin(); i != other.end(); ++i) { - add (*i); - } _current_start = other._current_start; _current_end = other._current_end; + + for (RegionSelection::const_iterator i = other.begin(); i != other.end(); ++i) { + add (*i); + } } return *this; } -/** - * Empty this RegionSelection. +/** Empty this RegionSelection. */ - void RegionSelection::clear_all() { @@ -96,18 +91,15 @@ RegionSelection::clear_all() * @param rv RegionView. * @return true if this selection contains rv. */ - bool RegionSelection::contains (RegionView* rv) const { return find (begin(), end(), rv) != end(); } -/** - * Add a region to the selection. +/** Add a region to the selection. * @param rv Region to add. * @return false if we already had the region, otherwise true. */ - bool RegionSelection::add (RegionView* rv) { @@ -119,11 +111,11 @@ RegionSelection::add (RegionView* rv) if (rv->region()->first_frame() < _current_start || empty()) { _current_start = rv->region()->first_frame(); } - + if (rv->region()->last_frame() > _current_end || empty()) { _current_end = rv->region()->last_frame(); } - + push_back (rv); /* add to layer sorted list */ @@ -133,23 +125,19 @@ RegionSelection::add (RegionView* rv) return true; } -/** - * Remove a region from the selection. +/** Remove a region from the selection. * @param rv Region to remove. */ - void RegionSelection::remove_it (RegionView *rv) { remove (rv); } -/** - * Remove a region from the selection. +/** Remove a region from the selection. * @param rv Region to remove. * @return true if the region was in the selection, false if not. */ - bool RegionSelection::remove (RegionView* rv) { @@ -159,7 +147,7 @@ RegionSelection::remove (RegionView* rv) // remove from layer sorted list _bylayer.remove (rv); - + if (size() == 1) { /* this is the last one, so when we delete it @@ -170,37 +158,37 @@ RegionSelection::remove (RegionView* rv) _current_end = 0; } else { - + boost::shared_ptr region ((*r)->region()); - + if (region->first_frame() == _current_start) { - + /* reset current start */ - + nframes_t ref = max_frames; - + for (RegionSelection::iterator i = begin (); i != end(); ++i) { if (region->first_frame() < ref) { ref = region->first_frame(); } } - + _current_start = ref; - + } - + if (region->last_frame() == _current_end) { /* reset current end */ - + nframes_t ref = 0; - + for (RegionSelection::iterator i = begin (); i != end(); ++i) { if (region->first_frame() > ref) { ref = region->first_frame(); } } - + _current_end = ref; } } @@ -213,11 +201,9 @@ RegionSelection::remove (RegionView* rv) return false; } -/** - * Add a region to the list sorted by layer. +/** Add a region to the list sorted by layer. * @param rv Region to add. */ - void RegionSelection::add_to_layer (RegionView * rv) { @@ -248,7 +234,6 @@ struct RegionSortByTime { * @param foo List which will be filled with the selection's regions * sorted by position. */ - void RegionSelection::by_position (list& foo) const { @@ -265,13 +250,13 @@ RegionSelection::by_position (list& foo) const struct RegionSortByTrack { bool operator() (const RegionView* a, const RegionView* b) const { - + /* really, track and position */ - if (a->get_trackview().order == b->get_trackview().order) { + 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; + return a->get_trackview().order() < b->get_trackview().order(); } } }; @@ -281,7 +266,6 @@ struct RegionSortByTrack { * @param List which will be filled with the selection's regions * sorted by track and position. */ - void RegionSelection::by_track (list& foo) const { @@ -299,7 +283,6 @@ RegionSelection::by_track (list& foo) const /** * @param Sort the selection by position and track. */ - void RegionSelection::sort_by_position_and_track () { @@ -311,7 +294,6 @@ RegionSelection::sort_by_position_and_track () * @param tv Track. * @return true if any of the selection's regions are on tv. */ - bool RegionSelection::involves (const TimeAxisView& tv) const { @@ -322,4 +304,4 @@ RegionSelection::involves (const TimeAxisView& tv) const } return false; } - +