X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fselection.h;h=c474faa5b2a23613f639fbdc0b41d10d50bbdcfc;hb=a9adbd9404257f5eefac27c579f6c3b890b81969;hp=ea36de246f23eccb3631951d6b6671369fd9a39f;hpb=4297071b3f7360b17d81ef9cf36b8d75d46d2818;p=ardour.git diff --git a/gtk2_ardour/selection.h b/gtk2_ardour/selection.h index ea36de246f..c474faa5b2 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 @@ -22,9 +22,12 @@ #include #include +#include #include +#include "pbd/signals.h" + #include "time_selection.h" #include "region_selection.h" #include "track_selection.h" @@ -33,11 +36,16 @@ #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; @@ -55,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 { @@ -77,12 +85,14 @@ class Selection : public sigc::trackable PlaylistSelection playlists; 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) : 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; @@ -91,69 +101,88 @@ class Selection : public sigc::trackable sigc::signal PlaylistsChanged; sigc::signal PointsChanged; sigc::signal MarkersChanged; + sigc::signal MidiNotesChanged; + sigc::signal MidiRegionsChanged; + + void block_tracks_changed (bool); void clear (); - bool empty(); + bool empty (bool internal_selection = false); void dump_region_layers(); - bool selected (TimeAxisViewPtr); + bool selected (TimeAxisView*); bool selected (RegionView*); bool selected (Marker*); - void set (std::list&); - void add (std::list&); - void toggle (std::list&); - - void set (TimeAxisViewPtr); - void set (const std::list&); + void set (std::list const &); + void add (std::list const &); + void toggle (std::list const &); + + void set (TimeAxisView*); + 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 (TimeAxisViewPtr, 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 (ControlPoint *); void set (Marker*); void set (const RegionSelection&); - void toggle (TimeAxisViewPtr); - void toggle (const std::list&); + void toggle (TimeAxisView*); + 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 (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 (ControlPoint *); + void toggle (std::vector const &); void toggle (Marker*); - void add (TimeAxisViewPtr); - void add (const std::list&); + void add (TimeAxisView*); + 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); + long add (framepos_t, framepos_t); void add (boost::shared_ptr); void add (boost::shared_ptr); void add (const std::list >&); + void add (ControlPoint *); + void add (std::vector const &); void add (Marker*); void add (const std::list&); void add (const RegionSelection&); - - void remove (TimeAxisViewPtr); - void remove (const std::list&); - void remove (boost::weak_ptr); + void remove (TimeAxisView*); + 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 (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 replace (uint32_t time_index, nframes_t start, nframes_t end); - + void remove_regions (TimeAxisView *); + + void replace (uint32_t time_index, framepos_t start, framepos_t end); + void clear_regions(); void clear_tracks (); void clear_time(); @@ -161,16 +190,23 @@ class Selection : public sigc::trackable void clear_playlists (); void clear_points (); void clear_markers (); + void clear_midi_notes (); + void clear_midi_regions (); 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); + private: + void set_point_selection_from_line (AutomationLine const &); + PublicEditor const * editor; uint32_t next_time_id; - - void add (std::vector&); + bool _no_tracks_changed; }; bool operator==(const Selection& a, const Selection& b);