diff options
Diffstat (limited to 'gtk2_ardour/region_selection.h')
-rw-r--r-- | gtk2_ardour/region_selection.h | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/gtk2_ardour/region_selection.h b/gtk2_ardour/region_selection.h new file mode 100644 index 0000000000..73fabeb0b2 --- /dev/null +++ b/gtk2_ardour/region_selection.h @@ -0,0 +1,56 @@ +#ifndef __ardour_gtk_region_selection_h__ +#define __ardour_gtk_region_selection_h__ + +#include <set> +#include <list> +#include <sigc++/signal_system.h> +#include <ardour/types.h> + +using std::list; +using std::set; + +class AudioRegionView; + +struct AudioRegionComparator { + bool operator() (const AudioRegionView* a, const AudioRegionView* b) const; +}; + +class AudioRegionSelection : public set<AudioRegionView*, AudioRegionComparator>, public SigC::Object +{ + public: + AudioRegionSelection(); + AudioRegionSelection (const AudioRegionSelection&); + + AudioRegionSelection& operator= (const AudioRegionSelection&); + + void add (AudioRegionView*, bool dosort = true); + bool remove (AudioRegionView*); + bool contains (AudioRegionView*); + + void clear_all(); + + jack_nframes_t start () const { + return _current_start; + } + + /* collides with list<>::end */ + + jack_nframes_t end_frame () const { + return _current_end; + } + + const list<AudioRegionView *> & by_layer() const { return _bylayer; } + void by_position (list<AudioRegionView*>&) const; + + private: + void remove_it (AudioRegionView*); + + void add_to_layer (AudioRegionView *); + + jack_nframes_t _current_start; + jack_nframes_t _current_end; + + list<AudioRegionView *> _bylayer; +}; + +#endif /* __ardour_gtk_region_selection_h__ */ |