X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=gtk2_ardour%2Fselection.h;h=aa9510beedc8258322afea80ecbdbf0058667f75;hb=5b347e92587513bfb7d6321e6bd67195db9c0ad5;hp=279b8df59b708bc06e131da8d3498081d003aa66;hpb=034db5fb1cc4d71bfa0e1c005733115df68fdefd;p=ardour.git diff --git a/gtk2_ardour/selection.h b/gtk2_ardour/selection.h index 279b8df59b..aa9510beed 100644 --- a/gtk2_ardour/selection.h +++ b/gtk2_ardour/selection.h @@ -22,9 +22,12 @@ #include #include +#include #include +#include "pbd/signals.h" + #include "time_selection.h" #include "region_selection.h" #include "track_selection.h" @@ -40,6 +43,9 @@ class RegionView; class Selectable; class PublicEditor; class MidiRegionView; +class AutomationLine; +class ControlPoint; + namespace ARDOUR { class Region; @@ -57,7 +63,7 @@ namespace Evoral { /** The Selection class holds lists of selected items (tracks, regions, etc. etc.). */ -class Selection : public sigc::trackable +class Selection : public sigc::trackable, public PBD::ScopedConnectionList { public: enum SelectionType { @@ -80,13 +86,13 @@ class Selection : public sigc::trackable PointSelection points; MarkerSelection markers; MidiRegionSelection midi_regions; + + /** only used when this class is used as a cut buffer */ MidiNoteSelection midi_notes; - Selection (PublicEditor const * e) : tracks (e), editor (e), next_time_id (0) { - clear(); - } + Selection (PublicEditor const * e); - Selection& operator= (const Selection& other); + // Selection& operator= (const Selection& other); sigc::signal RegionsChanged; sigc::signal TracksChanged; @@ -98,6 +104,8 @@ class Selection : public sigc::trackable sigc::signal MidiNotesChanged; sigc::signal MidiRegionsChanged; + void block_tracks_changed (bool); + void clear (); bool empty (bool internal_selection = false); @@ -105,11 +113,12 @@ class Selection : public sigc::trackable bool selected (TimeAxisView*); bool selected (RegionView*); - bool selected (Marker*); + bool selected (ArdourMarker*); + bool selected (ControlPoint*); - void set (std::list&); - void add (std::list&); - void toggle (std::list&); + void set (std::list const &); + void add (std::list const &); + void toggle (std::list const &); void set (TimeAxisView*); void set (const TrackViewList&); @@ -117,12 +126,13 @@ class Selection : public sigc::trackable void set (RegionView*, bool also_clear_tracks = true); void set (MidiRegionView*); void set (std::vector&); - long set (TimeAxisView*, nframes_t, nframes_t); + long set (framepos_t, framepos_t); + void set_preserving_all_ranges (framepos_t, framepos_t); void set (boost::shared_ptr); void set (boost::shared_ptr); void set (const std::list >&); - void set (AutomationSelectable*); - void set (Marker*); + void set (ControlPoint *); + void set (ArdourMarker*); void set (const RegionSelection&); void toggle (TimeAxisView*); @@ -132,12 +142,13 @@ class Selection : public sigc::trackable void toggle (MidiRegionView*); void toggle (MidiCutBuffer*); void toggle (std::vector&); - long toggle (nframes_t, nframes_t); + long toggle (framepos_t, framepos_t); void toggle (ARDOUR::AutomationList*); void toggle (boost::shared_ptr); void toggle (const std::list >&); - void toggle (const std::vector&); - void toggle (Marker*); + void toggle (ControlPoint *); + void toggle (std::vector const &); + void toggle (ArdourMarker*); void add (TimeAxisView*); void add (const TrackViewList&); @@ -146,13 +157,16 @@ class Selection : public sigc::trackable void add (MidiRegionView*); void add (MidiCutBuffer*); void add (std::vector&); - long add (nframes_t, nframes_t); + long add (framepos_t, framepos_t); void add (boost::shared_ptr); void add (boost::shared_ptr); void add (const std::list >&); - void add (Marker*); - void add (const std::list&); + void add (ControlPoint *); + void add (std::vector const &); + void add (ArdourMarker*); + void add (const std::list&); void add (const RegionSelection&); + void add (const PointSelection&); void remove (TimeAxisView*); void remove (const TrackViewList&); void remove (const MidiNoteSelection&); @@ -160,35 +174,59 @@ class Selection : public sigc::trackable void remove (MidiRegionView*); void remove (MidiCutBuffer*); void remove (uint32_t selection_id); - void remove (nframes_t, nframes_t); + void remove (framepos_t, framepos_t); void remove (boost::shared_ptr); void remove (boost::shared_ptr); void remove (const std::list >&); void remove (const std::list&); - void remove (Marker*); + void remove (ArdourMarker*); + void remove (ControlPoint *); + + void remove_regions (TimeAxisView *); - void replace (uint32_t time_index, nframes_t start, nframes_t end); + void move_time (framecnt_t); - void clear_regions(); - void clear_tracks (); - void clear_time(); - void clear_lines (); - void clear_playlists (); - void clear_points (); - void clear_markers (); - void clear_midi_notes (); - void clear_midi_regions (); + void replace (uint32_t time_index, framepos_t start, framepos_t end); + +/* + * A note about items in an editing Selection: + * At a high level, selections can include Tracks, Objects, or Time Ranges + * Range and Object selections are mutually exclusive. + * Selecting a Range will deselect all Objects, and vice versa. + * This is done to avoid confusion over what will happen in an operation such as Delete + * Tracks are somewhat orthogonal b/c editing operations don't apply to tracks. + * The Track selection isn't affected when ranges or objects are added. + */ + + void clear_all() { clear_time(); clear_tracks(); clear_objects(); } + + void clear_time(bool with_signal = true); //clears any time selection ( i.e. Range ) + void clear_tracks (bool with_signal = true); //clears the track header selections + void clear_objects(bool with_signal = true); //clears the items listed below + + // these items get cleared wholesale in clear_objects + void clear_regions(bool with_signal = true); + void clear_lines (bool with_signal = true); + void clear_playlists (bool with_signal = true); + void clear_points (bool with_signal = true); + void clear_markers (bool with_signal = true); + void clear_midi_notes (bool with_signal = true); + void clear_midi_regions (bool with_signal = true); void foreach_region (void (ARDOUR::Region::*method)(void)); void foreach_regionview (void (RegionView::*method)(void)); void foreach_midi_regionview (void (MidiRegionView::*method)(void)); template void foreach_region (void (ARDOUR::Region::*method)(A), A arg); + XMLNode& get_state () const; + int set_state (XMLNode const &, int); + + std::list > > > > pending_midi_note_selection; + private: PublicEditor const * editor; uint32_t next_time_id; - - void add (std::vector&); + bool _no_tracks_changed; }; bool operator==(const Selection& a, const Selection& b);