+
+ void reset_width_dependent_items (double pixel_width);
+
+ private:
+ /** Play the NoteOn event of the given note immediately
+ * and schedule the playback of the corresponding NoteOff event.
+ */
+ void play_midi_note(boost::shared_ptr<NoteType> note);
+
+ /** Play the NoteOff-Event of the given note immediately
+ * (scheduled by @ref play_midi_note()).
+ */
+ bool play_midi_note_off(boost::shared_ptr<NoteType> note);
+
+ void clear_events();
+ void switch_source(boost::shared_ptr<ARDOUR::Source> src);
+
+ bool canvas_event(GdkEvent* ev);
+ bool note_canvas_event(GdkEvent* ev);
+
+ void midi_channel_mode_changed(ARDOUR::ChannelMode mode, uint16_t mask);
+ void midi_patch_settings_changed(std::string model, std::string custom_device_mode);
+
+ void change_note_velocity(ArdourCanvas::CanvasNoteEvent* ev, int8_t vel, bool relative=false);
+
+ void clear_selection_except(ArdourCanvas::CanvasNoteEvent* ev);
+ void clear_selection() { clear_selection_except(NULL); }
+ void update_drag_selection(double last_x, double x, double last_y, double y);
+
+ int8_t _force_channel;
+ uint16_t _last_channel_selection;
+ double _default_note_length;
+ uint8_t _current_range_min;
+ uint8_t _current_range_max;
+
+ /// MIDNAM information of the current track: Model name of MIDNAM file
+ std::string _model_name;
+
+ /// MIDNAM information of the current track: CustomDeviceMode
+ std::string _custom_device_mode;
+
+ typedef std::vector<ArdourCanvas::CanvasNoteEvent*> Events;
+ typedef std::vector< boost::shared_ptr<ArdourCanvas::CanvasProgramChange> > PgmChanges;
+ typedef std::vector< boost::shared_ptr<ArdourCanvas::CanvasSysEx> > SysExes;
+
+ boost::shared_ptr<ARDOUR::MidiModel> _model;
+ Events _events;
+ PgmChanges _pgm_changes;
+ SysExes _sys_exes;
+ ArdourCanvas::CanvasNote** _active_notes;
+ ArdourCanvas::Group* _note_group;
+ ARDOUR::MidiModel::DeltaCommand* _delta_command;
+
+ MouseState _mouse_state;
+ int _pressed_button;
+
+ typedef std::set<ArdourCanvas::CanvasNoteEvent*> Selection;
+ /// Currently selected CanvasNoteEvents
+ Selection _selection;
+
+ /** New notes (created in the current command) which should be selected
+ * when they appear after the command is applied. */
+ std::set< boost::shared_ptr<NoteType> > _marked_for_selection;
+
+ /** New notes (created in the current command) which should have visible velocity
+ * when they appear after the command is applied. */
+ std::set< boost::shared_ptr<NoteType> > _marked_for_velocity;
+
+ std::vector<NoteResizeData *> _resize_data;