void cut_copy_clear (Editing::CutCopyOp);
void paste (framepos_t pos, float times, const MidiCutBuffer&);
- /** Add a new patch change flag to the canvas.
- * @param patch the patch change to add
- * @param the text to display in the flag
- */
- void add_canvas_patch_change (ARDOUR::MidiModel::PatchChangePtr patch, const std::string& displaytext);
+ void add_canvas_patch_change (ARDOUR::MidiModel::PatchChangePtr patch, const std::string& displaytext, bool);
/** Look up the given time and channel in the 'automation' and set keys accordingly.
* @param time the time of the patch change event
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
Pressed,
SelectTouchDragging,
SelectRectDragging,
+ SelectVerticalDragging,
AddDragging
};
*/
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 */
void goto_previous_note (bool add_to_selection);
void goto_next_note (bool add_to_selection);
void change_note_lengths (bool, bool, Evoral::MusicalTime beats, bool start, bool end);
- void change_velocities (bool up, bool fine, bool allow_smush);
+ void change_velocities (bool up, bool fine, bool allow_smush, bool all_together);
void transpose (bool up, bool fine, bool allow_smush);
void nudge_notes (bool forward);
void channel_edit ();
+ void velocity_edit ();
void show_list_editor ();
void trim_front_starting ();
void trim_front_ending ();
+ void create_note_at (framepos_t, double, double, bool);
+
+ void clear_selection (bool signal = true) { clear_selection_except (0, signal); }
+
+ std::string model_name () const {
+ return _model_name;
+ }
+
+ std::string custom_device_mode () const {
+ return _custom_device_mode;
+ }
+
protected:
/** Allows derived types to specify their visibility requirements
* to the TimeAxisViewItem parent class.
private:
friend class MidiRubberbandSelectDrag;
+ friend class MidiVerticalSelectDrag;
- /** Emitted when the selection has been cleared in one MidiRegionView */
+ /** Emitted when the selection has been cleared in one MidiRegionView,
+ * with the expectation that others will clear their selections in
+ * sympathy.
+ */
static PBD::Signal1<void, MidiRegionView*> SelectionCleared;
PBD::ScopedConnection _selection_cleared_connection;
void selection_cleared (MidiRegionView *);
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.
*/
ARDOUR::MidiModel::TimeType end_delta);
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*);
void show_verbose_cursor (std::string const &, double, double) const;
void show_verbose_cursor (boost::shared_ptr<NoteType>) const;
- int8_t _force_channel;
uint16_t _last_channel_selection;
uint8_t _current_range_min;
uint8_t _current_range_max;
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;
void maybe_select_by_position (GdkEventButton* ev, double x, double y);
void get_events (Events& e, Evoral::Sequence<Evoral::MusicalTime>::NoteOperator op, uint8_t val, int chan_mask = 0);
- void display_patch_changes_on_channel (uint8_t);
+ void display_patch_changes_on_channel (uint8_t, bool);
void connect_to_diskstream ();
void data_recorded (boost::weak_ptr<ARDOUR::MidiSource>);
PBD::ScopedConnection _mouse_mode_connection;
- Gdk::Cursor* _pre_enter_cursor;
+ Gdk::Cursor* pre_enter_cursor;
+ Gdk::Cursor* pre_press_cursor;
};