add a new name for the region-layering-editor-action that tells us we were started...
[ardour.git] / gtk2_ardour / midi_region_view.h
index 5eaef05b1820c3ccbc46d2e0c5abda2d56f965e4..b42b7e5a364df47f9e8af9dbdd94abc16c77b264 100644 (file)
@@ -28,7 +28,6 @@
 #include "pbd/signals.h"
 
 #include "ardour/midi_track.h"
-#include "ardour/midi_region.h"
 #include "ardour/midi_model.h"
 #include "ardour/diskstream.h"
 #include "ardour/types.h"
@@ -85,8 +84,7 @@ public:
 
        virtual void init (Gdk::Color const & basic_color, bool wfd);
 
-       inline const boost::shared_ptr<ARDOUR::MidiRegion> midi_region() const
-       { return boost::dynamic_pointer_cast<ARDOUR::MidiRegion>(_region); }
+       const boost::shared_ptr<ARDOUR::MidiRegion> midi_region() const;
 
        inline MidiTimeAxisView* midi_view() const
        { return dynamic_cast<MidiTimeAxisView*>(&trackview); }
@@ -192,6 +190,8 @@ public:
        void   delete_note (boost::shared_ptr<NoteType>);
        size_t selection_size() { return _selection.size(); }
        void   select_all_notes ();
+       void   select_range(framepos_t start, framepos_t end);
+       void   invert_selection ();
 
        void move_selection(double dx, double dy, double cumulative_dy);
        void note_dropped (ArdourCanvas::CanvasNoteEvent* ev, ARDOUR::frameoffset_t, int8_t d_note);
@@ -218,6 +218,7 @@ public:
 
        void update_resizing (ArdourCanvas::CanvasNoteEvent*, bool, double, bool);
        void commit_resizing (ArdourCanvas::CanvasNoteEvent*, bool, double, bool);
+       void abort_resizing ();
 
        /** Change the channel of the selection.
         * @param channel - the channel number of the new channel, zero-based
@@ -289,6 +290,8 @@ public:
        void trim_front_starting ();
        void trim_front_ending ();
 
+       void create_note_at (framepos_t, double, double, bool, bool);
+       
 protected:
        /** Allows derived types to specify their visibility requirements
         * to the TimeAxisViewItem parent class.
@@ -311,9 +314,14 @@ protected:
 
 private:
 
-       friend class EditNoteDialog;
+       friend class MidiRubberbandSelectDrag;
 
-       void create_note_at(double x, double y, double length, bool, bool);
+       /** Emitted when the selection has been cleared in one MidiRegionView */
+       static PBD::Signal1<void, MidiRegionView*> SelectionCleared;
+       PBD::ScopedConnection _selection_cleared_connection;
+       void selection_cleared (MidiRegionView *);
+
+       friend class EditNoteDialog;
 
        /** Play the NoteOn event of the given note immediately
         * and schedule the playback of the corresponding NoteOff event.
@@ -342,8 +350,8 @@ private:
        void trim_note(ArdourCanvas::CanvasNoteEvent* ev, ARDOUR::MidiModel::TimeType start_delta,
                       ARDOUR::MidiModel::TimeType end_delta);
 
-       void clear_selection_except (ArdourCanvas::CanvasNoteEvent* ev);
-       void clear_selection() { clear_selection_except (0); }
+       void clear_selection_except (ArdourCanvas::CanvasNoteEvent* ev, bool signal = true);
+       void clear_selection (bool signal = true) { clear_selection_except (0, signal); }
        void update_drag_selection (double last_x, double x, double last_y, double y, bool extend);
 
        void add_to_selection (ArdourCanvas::CanvasNoteEvent*);
@@ -377,11 +385,6 @@ private:
        ArdourCanvas::CanvasNote*            _ghost_note;
        double                               _last_ghost_x;
        double                               _last_ghost_y;
-       double                               _drag_start_x;
-       double                               _drag_start_y;
-       double                               _last_x;
-       double                               _last_y;
-       ArdourCanvas::SimpleRect*            _drag_rect;
        ArdourCanvas::SimpleRect*            _step_edit_cursor;
        Evoral::MusicalTime                  _step_edit_cursor_width;
        Evoral::MusicalTime                  _step_edit_cursor_position;
@@ -451,7 +454,7 @@ private:
        void display_patch_changes_on_channel (uint8_t);
 
        void connect_to_diskstream ();
-       void data_recorded (boost::shared_ptr<ARDOUR::MidiBuffer>, boost::weak_ptr<ARDOUR::MidiSource>);
+       void data_recorded (boost::weak_ptr<ARDOUR::MidiSource>);
 
        void remove_ghost_note ();
        void mouse_mode_changed ();