X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fselection.h;h=38e2e77591b3b57f1d11236acfdde751de3003b0;hb=6c19a776f43b4a9869780e3312764d039a16cd39;hp=a2997cd7b55ee83bfbfc876feef5d0c09ab0b0e1;hpb=af12adb34f62dc82f694a03ea3b2a6c99ba426ef;p=ardour.git diff --git a/gtk2_ardour/selection.h b/gtk2_ardour/selection.h index a2997cd7b5..38e2e77591 100644 --- a/gtk2_ardour/selection.h +++ b/gtk2_ardour/selection.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2000-2003 Paul Davis + Copyright (C) 2000-2003 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 @@ -15,7 +15,6 @@ along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - $Id$ */ #ifndef __ardour_gtk_selection_h__ @@ -23,32 +22,50 @@ #include #include +#include #include +#include "pbd/signals.h" + #include "time_selection.h" #include "region_selection.h" #include "track_selection.h" #include "automation_selection.h" #include "playlist_selection.h" -#include "redirect_selection.h" +#include "processor_selection.h" #include "point_selection.h" +#include "marker_selection.h" +#include "midi_selection.h" class TimeAxisView; class RegionView; class Selectable; +class PublicEditor; +class MidiRegionView; +class AutomationLine; +class ControlPoint; + namespace ARDOUR { class Region; class AudioRegion; class Playlist; - class Redirect; + class Processor; class AutomationList; } -class Selection : public sigc::trackable +namespace Evoral { + class ControlList; +} + +/// Lists of selected things + +/** The Selection class holds lists of selected items (tracks, regions, etc. etc.). */ + +class Selection : public sigc::trackable, public PBD::ScopedConnectionList { - public: +public: enum SelectionType { Object = 0x1, Range = 0x2 @@ -66,93 +83,157 @@ class Selection : public sigc::trackable TimeSelection time; AutomationSelection lines; PlaylistSelection playlists; - RedirectSelection redirects; PointSelection points; + MarkerSelection markers; + MidiRegionSelection midi_regions; - Selection() { - next_time_id = 0; - clear(); - } + /** only used when this class is used as a cut buffer */ + MidiNoteSelection midi_notes; - Selection& operator= (const Selection& other); + Selection (PublicEditor const * e, bool manage_libardour_selection); + + // Selection& operator= (const Selection& other); - sigc::signal RegionsChanged; sigc::signal TracksChanged; + sigc::signal RegionsChanged; sigc::signal TimeChanged; sigc::signal LinesChanged; sigc::signal PlaylistsChanged; - sigc::signal RedirectsChanged; sigc::signal PointsChanged; + sigc::signal MarkersChanged; + sigc::signal MidiNotesChanged; + sigc::signal MidiRegionsChanged; void clear (); - bool empty(); + + /** check if all selections are empty + * @param internal_selection also check object internals (e.g midi notes, automation points), when false only check objects. + * @return true if nothing is selected. + */ + bool empty (bool internal_selection = false); void dump_region_layers(); - bool selected (TimeAxisView*); - bool selected (RegionView*); + bool selected (TimeAxisView*) const; + bool selected (RegionView*) const; + bool selected (ArdourMarker*) const; + bool selected (ControlPoint*) const; + + void set (std::list const &); + void add (std::list const &); + void toggle (std::list const &); - void set (list&); - void add (list&); - void set (TimeAxisView*); - void set (const list&); - void set (RegionView*); + void set (const TrackViewList&); + void set (const MidiNoteSelection&); + void set (RegionView*, bool also_clear_tracks = true); + void set (MidiRegionView*); void set (std::vector&); - long set (TimeAxisView*, nframes_t, nframes_t); - void set (ARDOUR::AutomationList*); + long set (samplepos_t, samplepos_t); + void set_preserving_all_ranges (samplepos_t, samplepos_t); + void set (boost::shared_ptr); void set (boost::shared_ptr); - void set (const list >&); - void set (boost::shared_ptr); - void set (AutomationSelectable*); + void set (const std::list >&); + void set (ControlPoint *); + void set (ArdourMarker*); + void set (const RegionSelection&); void toggle (TimeAxisView*); - void toggle (const list&); + void toggle (const TrackViewList&); + void toggle (const MidiNoteSelection&); void toggle (RegionView*); + void toggle (MidiRegionView*); + void toggle (MidiCutBuffer*); void toggle (std::vector&); - long toggle (nframes_t, nframes_t); + long toggle (samplepos_t, samplepos_t); void toggle (ARDOUR::AutomationList*); void toggle (boost::shared_ptr); - void toggle (const list >&); - void toggle (boost::shared_ptr); + void toggle (const std::list >&); + void toggle (ControlPoint *); + void toggle (std::vector const &); + void toggle (ArdourMarker*); void add (TimeAxisView*); - void add (const list&); + void add (const TrackViewList&); + void add (const MidiNoteSelection&); void add (RegionView*); + void add (MidiRegionView*); + void add (MidiCutBuffer*); void add (std::vector&); - long add (nframes_t, nframes_t); - void add (ARDOUR::AutomationList*); + long add (samplepos_t, samplepos_t); + void add (boost::shared_ptr); void add (boost::shared_ptr); - void add (const list >&); - void add (boost::shared_ptr); - + 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 list&); + void remove (const TrackViewList&); + void remove (const MidiNoteSelection&); void remove (RegionView*); + void remove (MidiRegionView*); + void remove (MidiCutBuffer*); void remove (uint32_t selection_id); - void remove (nframes_t, nframes_t); - void remove (ARDOUR::AutomationList*); + void remove (samplepos_t, samplepos_t); + void remove (boost::shared_ptr); void remove (boost::shared_ptr); - void remove (const list >&); - void remove (boost::shared_ptr); - - void replace (uint32_t time_index, nframes_t start, nframes_t end); - - void clear_regions(); - void clear_tracks (); - void clear_time(); - void clear_lines (); - void clear_playlists (); - void clear_redirects (); - void clear_points (); + void remove (const std::list >&); + void remove (const std::list&); + void remove (ArdourMarker*); + void remove (ControlPoint *); + + void remove_regions (TimeAxisView *); + + void move_time (samplecnt_t); + + void replace (uint32_t time_index, samplepos_t start, samplepos_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); - private: + XMLNode& get_state () const; + int set_state (XMLNode const &, int); + + std::list > > pending_midi_note_selection; + + void core_selection_changed (PBD::PropertyChange const & pc); + +private: + PublicEditor const * editor; uint32_t next_time_id; + bool manage_libardour_selection; - void add (std::vector&); + TrackViewList add_grouped_tracks (TrackViewList const & t); }; bool operator==(const Selection& a, const Selection& b);