X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fmidi_region_view.h;h=c3084aee384a24e1f2d3700ee52dbce91ce8686f;hb=0b0d252acf107dd1498fd212d32677089d20bdc4;hp=38cd703a984cf8ae4e9b06ee1e610fcbff80c4d0;hpb=1567d362ad42a8a38b62c03fbf1d2fecdfd0937c;p=ardour.git diff --git a/gtk2_ardour/midi_region_view.h b/gtk2_ardour/midi_region_view.h index 38cd703a98..c3084aee38 100644 --- a/gtk2_ardour/midi_region_view.h +++ b/gtk2_ardour/midi_region_view.h @@ -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 midi_region() const - { return boost::dynamic_pointer_cast(_region); } + const boost::shared_ptr midi_region() const; inline MidiTimeAxisView* midi_view() const { return dynamic_cast(&trackview); } @@ -192,6 +190,7 @@ public: void delete_note (boost::shared_ptr); 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); @@ -219,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 @@ -230,6 +230,7 @@ public: Pressed, SelectTouchDragging, SelectRectDragging, + SelectVerticalDragging, AddDragging }; @@ -252,13 +253,13 @@ public: */ framepos_t snap_pixel_to_frame(double x); - /** Convert a timestamp in beats into frames (both relative to region start) */ + /** Convert a timestamp in beats into frames (both relative to region position) */ framepos_t region_beats_to_region_frames(double beats) const; /** Convert a timestamp in beats into absolute frames */ framepos_t region_beats_to_absolute_frames(double beats) const { return _region->position() + region_beats_to_region_frames (beats); } - /** Convert a timestamp in frames to beats (both relative to region start) */ + /** Convert a timestamp in frames to beats (both relative to region position) */ double region_frames_to_region_beats(framepos_t) const; /** Convert a timestamp in beats measured from source start into absolute frames */ @@ -290,6 +291,8 @@ public: void trim_front_starting (); void trim_front_ending (); + void create_note_at (framepos_t, double, double, bool); + protected: /** Allows derived types to specify their visibility requirements * to the TimeAxisViewItem parent class. @@ -312,6 +315,9 @@ protected: private: + friend class MidiRubberbandSelectDrag; + friend class MidiVerticalSelectDrag; + /** Emitted when the selection has been cleared in one MidiRegionView */ static PBD::Signal1 SelectionCleared; PBD::ScopedConnection _selection_cleared_connection; @@ -319,8 +325,6 @@ private: friend class EditNoteDialog; - void create_note_at(double x, double y, double length, bool, bool); - /** Play the NoteOn event of the given note immediately * and schedule the playback of the corresponding NoteOff event. */ @@ -351,6 +355,7 @@ private: 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 update_vertical_drag_selection (double last_y, double y, bool extend); void add_to_selection (ArdourCanvas::CanvasNoteEvent*); void remove_from_selection (ArdourCanvas::CanvasNoteEvent*); @@ -358,7 +363,6 @@ private: void show_verbose_cursor (std::string const &, double, double) const; void show_verbose_cursor (boost::shared_ptr) const; - int8_t _force_channel; uint16_t _last_channel_selection; uint8_t _current_range_min; uint8_t _current_range_max; @@ -383,11 +387,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; @@ -457,7 +456,7 @@ private: void display_patch_changes_on_channel (uint8_t); void connect_to_diskstream (); - void data_recorded (boost::shared_ptr, boost::weak_ptr); + void data_recorded (boost::weak_ptr); void remove_ghost_note (); void mouse_mode_changed (); @@ -468,7 +467,8 @@ private: PBD::ScopedConnection _mouse_mode_connection; - Gdk::Cursor* _pre_enter_cursor; + Gdk::Cursor* pre_enter_cursor; + Gdk::Cursor* pre_press_cursor; };