2
Copyright (C) 2000-2003 Paul Davis
4
This program is free software; you can redistribute it and/or modify
5
it under the terms of the GNU General Public License as published by
6
the Free Software Foundation; either version 2 of the License, or
7
(at your option) any later version.
9
This program is distributed in the hope that it will be useful,
10
but WITHOUT ANY WARRANTY; without even the implied warranty of
11
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
GNU General Public License for more details.
14
You should have received a copy of the GNU General Public License
15
along with this program; if not, write to the Free Software
16
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20
#ifndef __ardour_gtk_selection_h__
21
#define __ardour_gtk_selection_h__
24
#include <boost/shared_ptr.hpp>
25
#include <boost/noncopyable.hpp>
27
#include <sigc++/signal.h>
29
#include "pbd/signals.h"
31
#include "time_selection.h"
32
#include "region_selection.h"
33
#include "track_selection.h"
34
#include "automation_selection.h"
35
#include "playlist_selection.h"
36
#include "processor_selection.h"
37
#include "point_selection.h"
38
#include "marker_selection.h"
39
#include "midi_selection.h"
62
/// Lists of selected things
64
/** The Selection class holds lists of selected items (tracks, regions, etc. etc.). */
66
class Selection : public sigc::trackable, public PBD::ScopedConnectionList
81
TrackSelection tracks;
82
RegionSelection regions;
84
AutomationSelection lines;
85
PlaylistSelection playlists;
86
PointSelection points;
87
MarkerSelection markers;
88
MidiRegionSelection midi_regions;
90
/** only used when this class is used as a cut buffer */
91
MidiNoteSelection midi_notes;
93
Selection (PublicEditor const * e);
95
// Selection& operator= (const Selection& other);
97
sigc::signal<void> RegionsChanged;
98
sigc::signal<void> TracksChanged;
99
sigc::signal<void> TimeChanged;
100
sigc::signal<void> LinesChanged;
101
sigc::signal<void> PlaylistsChanged;
102
sigc::signal<void> PointsChanged;
103
sigc::signal<void> MarkersChanged;
104
sigc::signal<void> MidiNotesChanged;
105
sigc::signal<void> MidiRegionsChanged;
107
void block_tracks_changed (bool);
110
bool empty (bool internal_selection = false);
112
void dump_region_layers();
114
bool selected (TimeAxisView*);
115
bool selected (RegionView*);
116
bool selected (Marker*);
117
bool selected (ControlPoint*);
119
void set (std::list<Selectable*> const &);
120
void add (std::list<Selectable*> const &);
121
void toggle (std::list<Selectable*> const &);
123
void set (TimeAxisView*);
124
void set (const TrackViewList&);
125
void set (const MidiNoteSelection&);
126
void set (RegionView*, bool also_clear_tracks = true);
127
void set (MidiRegionView*);
128
void set (std::vector<RegionView*>&);
129
long set (framepos_t, framepos_t);
130
void set_preserving_all_ranges (framepos_t, framepos_t);
131
void set (boost::shared_ptr<Evoral::ControlList>);
132
void set (boost::shared_ptr<ARDOUR::Playlist>);
133
void set (const std::list<boost::shared_ptr<ARDOUR::Playlist> >&);
134
void set (ControlPoint *);
136
void set (const RegionSelection&);
138
void toggle (TimeAxisView*);
139
void toggle (const TrackViewList&);
140
void toggle (const MidiNoteSelection&);
141
void toggle (RegionView*);
142
void toggle (MidiRegionView*);
143
void toggle (MidiCutBuffer*);
144
void toggle (std::vector<RegionView*>&);
145
long toggle (framepos_t, framepos_t);
146
void toggle (ARDOUR::AutomationList*);
147
void toggle (boost::shared_ptr<ARDOUR::Playlist>);
148
void toggle (const std::list<boost::shared_ptr<ARDOUR::Playlist> >&);
149
void toggle (ControlPoint *);
150
void toggle (std::vector<ControlPoint*> const &);
151
void toggle (Marker*);
153
void add (TimeAxisView*);
154
void add (const TrackViewList&);
155
void add (const MidiNoteSelection&);
156
void add (RegionView*);
157
void add (MidiRegionView*);
158
void add (MidiCutBuffer*);
159
void add (std::vector<RegionView*>&);
160
long add (framepos_t, framepos_t);
161
void add (boost::shared_ptr<Evoral::ControlList>);
162
void add (boost::shared_ptr<ARDOUR::Playlist>);
163
void add (const std::list<boost::shared_ptr<ARDOUR::Playlist> >&);
164
void add (ControlPoint *);
165
void add (std::vector<ControlPoint*> const &);
167
void add (const std::list<Marker*>&);
168
void add (const RegionSelection&);
169
void add (const PointSelection&);
170
void remove (TimeAxisView*);
171
void remove (const TrackViewList&);
172
void remove (const MidiNoteSelection&);
173
void remove (RegionView*);
174
void remove (MidiRegionView*);
175
void remove (MidiCutBuffer*);
176
void remove (uint32_t selection_id);
177
void remove (framepos_t, framepos_t);
178
void remove (boost::shared_ptr<ARDOUR::AutomationList>);
179
void remove (boost::shared_ptr<ARDOUR::Playlist>);
180
void remove (const std::list<boost::shared_ptr<ARDOUR::Playlist> >&);
181
void remove (const std::list<Selectable*>&);
182
void remove (Marker*);
183
void remove (ControlPoint *);
185
void remove_regions (TimeAxisView *);
187
void move_time (framecnt_t);
189
void replace (uint32_t time_index, framepos_t start, framepos_t end);
192
* A note about items in an editing Selection:
193
* At a high level, selections can include Tracks, Objects, or Time Ranges
194
* Range and Object selections are mutually exclusive.
195
* Selecting a Range will deselect all Objects, and vice versa.
196
* This is done to avoid confusion over what will happen in an operation such as Delete
197
* Tracks are somewhat orthogonal b/c editing operations don't apply to tracks.
198
* The Track selection isn't affected when ranges or objects are added.
201
void clear_time(); //clears any time selection ( i.e. Range )
202
void clear_tracks (); //clears the track header selections
203
void clear_objects(); //clears the items listed below
205
// these items get cleared wholesale in clear_objects
206
void clear_regions();
208
void clear_playlists ();
209
void clear_points ();
210
void clear_markers ();
211
void clear_midi_notes ();
212
void clear_midi_regions ();
214
void foreach_region (void (ARDOUR::Region::*method)(void));
215
void foreach_regionview (void (RegionView::*method)(void));
216
void foreach_midi_regionview (void (MidiRegionView::*method)(void));
217
template<class A> void foreach_region (void (ARDOUR::Region::*method)(A), A arg);
219
XMLNode& get_state () const;
220
int set_state (XMLNode const &, int);
223
PublicEditor const * editor;
224
uint32_t next_time_id;
225
bool _no_tracks_changed;
228
bool operator==(const Selection& a, const Selection& b);
230
#endif /* __ardour_gtk_selection_h__ */