X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fselection.h;h=71230086b5bdb5b3e596cd3b2cf2064b3c404d62;hb=62c4e88a9d8f4a7b019243fe9a10830b1da0150c;hp=7585c0ae5685eb9b20a63191e09cbfd5a8d1227f;hpb=44203ce955f33135065456f55f1f685131174ba6;p=ardour.git diff --git a/gtk2_ardour/selection.h b/gtk2_ardour/selection.h index 7585c0ae56..71230086b5 100644 --- a/gtk2_ardour/selection.h +++ b/gtk2_ardour/selection.h @@ -1,21 +1,26 @@ /* - 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 - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -*/ + * Copyright (C) 2005 Taybin Rutkin + * Copyright (C) 2006-2014 David Robillard + * Copyright (C) 2006-2017 Paul Davis + * Copyright (C) 2007-2012 Carl Hetherington + * Copyright (C) 2014-2018 Ben Loftis + * Copyright (C) 2015-2016 Nick Mainsbridge + * Copyright (C) 2015-2017 Robin Gareus + * + * 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 + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ #ifndef __ardour_gtk_selection_h__ #define __ardour_gtk_selection_h__ @@ -65,7 +70,7 @@ namespace Evoral { class Selection : public sigc::trackable, public PBD::ScopedConnectionList { - public: +public: enum SelectionType { Object = 0x1, Range = 0x2 @@ -90,12 +95,12 @@ class Selection : public sigc::trackable, public PBD::ScopedConnectionList /** only used when this class is used as a cut buffer */ MidiNoteSelection midi_notes; - Selection (PublicEditor const * e); + 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; @@ -104,17 +109,20 @@ class Selection : public sigc::trackable, public PBD::ScopedConnectionList sigc::signal MidiNotesChanged; sigc::signal MidiRegionsChanged; - void block_tracks_changed (bool); - void clear (); + + /** 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 (Marker*); - bool selected (ControlPoint*); + 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 &); @@ -126,13 +134,13 @@ class Selection : public sigc::trackable, public PBD::ScopedConnectionList void set (RegionView*, bool also_clear_tracks = true); void set (MidiRegionView*); void set (std::vector&); - long set (framepos_t, framepos_t); - void set_preserving_all_ranges (framepos_t, framepos_t); + 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 std::list >&); void set (ControlPoint *); - void set (Marker*); + void set (ArdourMarker*); void set (const RegionSelection&); void toggle (TimeAxisView*); @@ -142,13 +150,13 @@ class Selection : public sigc::trackable, public PBD::ScopedConnectionList void toggle (MidiRegionView*); void toggle (MidiCutBuffer*); void toggle (std::vector&); - long toggle (framepos_t, framepos_t); + long toggle (samplepos_t, samplepos_t); void toggle (ARDOUR::AutomationList*); void toggle (boost::shared_ptr); void toggle (const std::list >&); void toggle (ControlPoint *); void toggle (std::vector const &); - void toggle (Marker*); + void toggle (ArdourMarker*); void add (TimeAxisView*); void add (const TrackViewList&); @@ -157,14 +165,14 @@ class Selection : public sigc::trackable, public PBD::ScopedConnectionList void add (MidiRegionView*); void add (MidiCutBuffer*); void add (std::vector&); - long add (framepos_t, framepos_t); + long add (samplepos_t, samplepos_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 (ArdourMarker*); + void add (const std::list&); void add (const RegionSelection&); void add (const PointSelection&); void remove (TimeAxisView*); @@ -174,44 +182,44 @@ class Selection : public sigc::trackable, public PBD::ScopedConnectionList void remove (MidiRegionView*); void remove (MidiCutBuffer*); void remove (uint32_t selection_id); - void remove (framepos_t, framepos_t); + void remove (samplepos_t, samplepos_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 move_time (framecnt_t); + void move_time (samplecnt_t); - void replace (uint32_t time_index, framepos_t start, framepos_t end); + 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. - */ + /* + * 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(); //clears any time selection ( i.e. Range ) - void clear_tracks (); //clears the track header selections - void clear_objects(); //clears the items listed below + 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(); - void clear_lines (); - void clear_playlists (); - void clear_points (); - void clear_markers (); - void clear_midi_notes (); - void clear_midi_regions (); + 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)); @@ -221,14 +229,16 @@ class Selection : public sigc::trackable, public PBD::ScopedConnectionList XMLNode& get_state () const; int set_state (XMLNode const &, int); - PBD::Signal0 ClearMidiNoteSelection; + std::list > > pending_midi_note_selection; - std::list > > > > pending_midi_note_selection; + void core_selection_changed (PBD::PropertyChange const & pc); - private: +private: PublicEditor const * editor; uint32_t next_time_id; - bool _no_tracks_changed; + bool manage_libardour_selection; + + TrackViewList add_grouped_tracks (TrackViewList const & t); }; bool operator==(const Selection& a, const Selection& b);