diff --git a/gtk2_ardour/editor_drag.cc b/gtk2_ardour/editor_drag.cc index cc984de774..0c6d67732c 100644 --- a/gtk2_ardour/editor_drag.cc +++ b/gtk2_ardour/editor_drag.cc @@ -70,7 +70,7 @@ #include "gui_thread.h" #include "keyboard.h" #include "mergeable_line.h" -#include "midi_cue_editor.h" +#include "pianoroll.h" #include "midi_region_view.h" #include "midi_selection.h" #include "midi_time_axis.h" @@ -7544,7 +7544,7 @@ VelocityLineDrag::aborted (bool) vd->end_line_drag (false); } -ClipStartDrag::ClipStartDrag (EditingContext& ec, ArdourCanvas::Rectangle& r, MidiCueEditor& m) +ClipStartDrag::ClipStartDrag (EditingContext& ec, ArdourCanvas::Rectangle& r, Pianoroll& m) : Drag (ec, &r, Temporal::BeatTime, nullptr, false) , mce (m) , dragging_rect (&r) @@ -7606,7 +7606,7 @@ ClipStartDrag::aborted (bool) dragging_rect->set (original_rect); } -ClipEndDrag::ClipEndDrag (EditingContext& ec, ArdourCanvas::Rectangle& r, MidiCueEditor& m) +ClipEndDrag::ClipEndDrag (EditingContext& ec, ArdourCanvas::Rectangle& r, Pianoroll& m) : Drag (ec, &r, Temporal::BeatTime, nullptr, false) , mce (m) , dragging_rect (&r) diff --git a/gtk2_ardour/editor_drag.h b/gtk2_ardour/editor_drag.h index 27526df760..3741628a4a 100644 --- a/gtk2_ardour/editor_drag.h +++ b/gtk2_ardour/editor_drag.h @@ -69,7 +69,7 @@ class EditingContext; class Editor; class EditorCursor; class TimeAxisView; -class MidiCueEditor; +class Pianoroll; class MidiTimeAxisView; class Drag; class NoteBase; @@ -1642,7 +1642,7 @@ class VelocityLineDrag : public FreehandLineDragviewport().set_size_request (600, 120); pack_start (editor->viewport(), true, true); diff --git a/gtk2_ardour/midi_clip_editor.h b/gtk2_ardour/midi_clip_editor.h index 8a9800e369..845bb5722e 100644 --- a/gtk2_ardour/midi_clip_editor.h +++ b/gtk2_ardour/midi_clip_editor.h @@ -49,7 +49,7 @@ namespace ArdourCanvas class Polygon; } -class MidiCueEditor; +class Pianoroll; class MidiClipEditorBox : public ClipEditorBox { @@ -66,7 +66,7 @@ private: Gtk::Label _header_label; Gtk::Table table; - MidiCueEditor* editor; + Pianoroll* editor; PBD::ScopedConnection state_connection; diff --git a/gtk2_ardour/midi_cue_editor.cc b/gtk2_ardour/pianoroll.cc similarity index 88% rename from gtk2_ardour/midi_cue_editor.cc rename to gtk2_ardour/pianoroll.cc index 2291c6a70b..e6bd4f4721 100644 --- a/gtk2_ardour/midi_cue_editor.cc +++ b/gtk2_ardour/pianoroll.cc @@ -40,7 +40,7 @@ #include "gui_thread.h" #include "keyboard.h" #include "midi_cue_background.h" -#include "midi_cue_editor.h" +#include "pianoroll.h" #include "midi_cue_view.h" #include "note_base.h" #include "prh.h" @@ -57,8 +57,8 @@ using namespace ArdourWidgets; using namespace Gtkmm2ext; using namespace Temporal; -MidiCueEditor::MidiCueEditor() - : CueEditor (X_("MIDICueEditor")) +Pianoroll::Pianoroll() + : CueEditor (X_("Pianoroll")) , timebar_height (15.) , n_timebars (3) , prh (nullptr) @@ -84,13 +84,13 @@ MidiCueEditor::MidiCueEditor() set_mouse_mode (Editing::MouseContent, true); } -MidiCueEditor::~MidiCueEditor () +Pianoroll::~Pianoroll () { delete bindings; } void -MidiCueEditor::register_actions () +Pianoroll::register_actions () { editor_actions = ActionManager::create_action_group (bindings, editor_name()); register_mouse_mode_actions (); @@ -99,19 +99,19 @@ MidiCueEditor::register_actions () } ArdourCanvas::GtkCanvasViewport* -MidiCueEditor::get_canvas_viewport() const +Pianoroll::get_canvas_viewport() const { return _canvas_viewport; } ArdourCanvas::GtkCanvas* -MidiCueEditor::get_canvas() const +Pianoroll::get_canvas() const { return _canvas; } bool -MidiCueEditor::canvas_pre_event (GdkEvent* ev) +Pianoroll::canvas_pre_event (GdkEvent* ev) { switch (ev->type) { case GDK_ENTER_NOTIFY: @@ -128,7 +128,7 @@ MidiCueEditor::canvas_pre_event (GdkEvent* ev) } void -MidiCueEditor::rebuild_parameter_button_map() +Pianoroll::rebuild_parameter_button_map() { parameter_button_map.clear (); parameter_button_map.insert (std::make_pair (Evoral::Parameter (ARDOUR::MidiVelocityAutomation, _visible_channel), velocity_button)); @@ -142,7 +142,7 @@ MidiCueEditor::rebuild_parameter_button_map() } void -MidiCueEditor::build_lower_toolbar () +Pianoroll::build_lower_toolbar () { ArdourButton::Element elements = ArdourButton::Element (ArdourButton::Text|ArdourButton::Indicator|ArdourButton::Edge|ArdourButton::Body); @@ -184,23 +184,23 @@ MidiCueEditor::build_lower_toolbar () button_bar.pack_start (*cc_dropdown2, false, false); button_bar.pack_start (*cc_dropdown3, false, false); - velocity_button->signal_button_release_event().connect (sigc::bind (sigc::mem_fun (*this, &MidiCueEditor::automation_button_event), ARDOUR::MidiVelocityAutomation, 0)); - pressure_button->signal_button_release_event().connect (sigc::bind (sigc::mem_fun (*this, &MidiCueEditor::automation_button_event), ARDOUR::MidiChannelPressureAutomation, 0)); - bender_button->signal_button_release_event().connect (sigc::bind (sigc::mem_fun (*this, &MidiCueEditor::automation_button_event), ARDOUR::MidiPitchBenderAutomation, 0)); - modulation_button->signal_button_release_event().connect (sigc::bind (sigc::mem_fun (*this, &MidiCueEditor::automation_button_event), ARDOUR::MidiCCAutomation, MIDI_CTL_MSB_MODWHEEL)); - expression_button->signal_button_release_event().connect (sigc::bind (sigc::mem_fun (*this, &MidiCueEditor::automation_button_event), ARDOUR::MidiCCAutomation, MIDI_CTL_MSB_EXPRESSION)); + velocity_button->signal_button_release_event().connect (sigc::bind (sigc::mem_fun (*this, &Pianoroll::automation_button_event), ARDOUR::MidiVelocityAutomation, 0)); + pressure_button->signal_button_release_event().connect (sigc::bind (sigc::mem_fun (*this, &Pianoroll::automation_button_event), ARDOUR::MidiChannelPressureAutomation, 0)); + bender_button->signal_button_release_event().connect (sigc::bind (sigc::mem_fun (*this, &Pianoroll::automation_button_event), ARDOUR::MidiPitchBenderAutomation, 0)); + modulation_button->signal_button_release_event().connect (sigc::bind (sigc::mem_fun (*this, &Pianoroll::automation_button_event), ARDOUR::MidiCCAutomation, MIDI_CTL_MSB_MODWHEEL)); + expression_button->signal_button_release_event().connect (sigc::bind (sigc::mem_fun (*this, &Pianoroll::automation_button_event), ARDOUR::MidiCCAutomation, MIDI_CTL_MSB_EXPRESSION)); - velocity_button->signal_led_clicked.connect (sigc::bind (sigc::mem_fun (*this, &MidiCueEditor::automation_led_click), ARDOUR::MidiVelocityAutomation, 0)); - pressure_button->signal_led_clicked.connect (sigc::bind (sigc::mem_fun (*this, &MidiCueEditor::automation_led_click), ARDOUR::MidiChannelPressureAutomation, 0)); - bender_button->signal_led_clicked.connect (sigc::bind (sigc::mem_fun (*this, &MidiCueEditor::automation_led_click), ARDOUR::MidiPitchBenderAutomation, 0)); - modulation_button->signal_led_clicked.connect (sigc::bind (sigc::mem_fun (*this, &MidiCueEditor::automation_led_click), ARDOUR::MidiCCAutomation, MIDI_CTL_MSB_MODWHEEL)); - expression_button->signal_led_clicked.connect (sigc::bind (sigc::mem_fun (*this, &MidiCueEditor::automation_led_click), ARDOUR::MidiCCAutomation, MIDI_CTL_MSB_EXPRESSION)); + velocity_button->signal_led_clicked.connect (sigc::bind (sigc::mem_fun (*this, &Pianoroll::automation_led_click), ARDOUR::MidiVelocityAutomation, 0)); + pressure_button->signal_led_clicked.connect (sigc::bind (sigc::mem_fun (*this, &Pianoroll::automation_led_click), ARDOUR::MidiChannelPressureAutomation, 0)); + bender_button->signal_led_clicked.connect (sigc::bind (sigc::mem_fun (*this, &Pianoroll::automation_led_click), ARDOUR::MidiPitchBenderAutomation, 0)); + modulation_button->signal_led_clicked.connect (sigc::bind (sigc::mem_fun (*this, &Pianoroll::automation_led_click), ARDOUR::MidiCCAutomation, MIDI_CTL_MSB_MODWHEEL)); + expression_button->signal_led_clicked.connect (sigc::bind (sigc::mem_fun (*this, &Pianoroll::automation_led_click), ARDOUR::MidiCCAutomation, MIDI_CTL_MSB_EXPRESSION)); _toolbox.pack_start (button_bar, false, false); } void -MidiCueEditor::build_upper_toolbar () +Pianoroll::build_upper_toolbar () { using namespace Gtk::Menu_Helpers; @@ -279,7 +279,7 @@ MidiCueEditor::build_upper_toolbar () } void -MidiCueEditor::set_visible_channel (int n) +Pianoroll::set_visible_channel (int n) { _visible_channel = n; visible_channel_label.set_text (string_compose (_("MIDI Channel %1"), _visible_channel + 1)); @@ -292,13 +292,13 @@ MidiCueEditor::set_visible_channel (int n) } void -MidiCueEditor::build_canvas () +Pianoroll::build_canvas () { _canvas_viewport = new ArdourCanvas::GtkCanvasViewport (horizontal_adjustment, vertical_adjustment); _canvas = _canvas_viewport->canvas (); _canvas->set_background_color (UIConfiguration::instance().color ("arrange base")); - _canvas->signal_event().connect (sigc::mem_fun (*this, &MidiCueEditor::canvas_pre_event), false); + _canvas->signal_event().connect (sigc::mem_fun (*this, &Pianoroll::canvas_pre_event), false); dynamic_cast(_canvas)->use_nsglview (UIConfiguration::instance().get_nsgl_view_mode () == NSGLHiRes); _canvas->PreRender.connect (sigc::mem_fun(*this, &EditingContext::pre_render)); @@ -372,7 +372,7 @@ MidiCueEditor::build_canvas () CANVAS_DEBUG_NAME (data_group, "cue data group"); bg = new CueMidiBackground (data_group); - _canvas_viewport->signal_size_allocate().connect (sigc::mem_fun(*this, &MidiCueEditor::canvas_allocate), false); + _canvas_viewport->signal_size_allocate().connect (sigc::mem_fun(*this, &Pianoroll::canvas_allocate), false); // used as rubberband rect rubberband_rect = new ArdourCanvas::Rectangle (data_group, ArdourCanvas::Rect (0.0, 0.0, 0.0, 0.0)); @@ -384,7 +384,7 @@ MidiCueEditor::build_canvas () prh = new ArdourCanvas::PianoRollHeader (v_scroll_group, *bg); view = new MidiCueView (nullptr, *data_group, *no_scroll_group, *this, *bg, 0xff0000ff); - view->AutomationStateChange.connect (sigc::mem_fun (*this, &MidiCueEditor::automation_state_changed)); + view->AutomationStateChange.connect (sigc::mem_fun (*this, &Pianoroll::automation_state_changed)); bg->set_view (view); prh->set_view (view); @@ -421,7 +421,7 @@ MidiCueEditor::build_canvas () } void -MidiCueEditor::bindings_changed () +Pianoroll::bindings_changed () { Bindings* midi_bindings = Bindings::get_bindings (X_("MIDI")); Bindings* shared_bindings = Bindings::get_bindings (X_("Editing")); @@ -431,7 +431,7 @@ MidiCueEditor::bindings_changed () } void -MidiCueEditor::maybe_update () +Pianoroll::maybe_update () { if (!_track) { return; @@ -451,7 +451,7 @@ MidiCueEditor::maybe_update () } bool -MidiCueEditor::canvas_enter_leave (GdkEventCrossing* ev) +Pianoroll::canvas_enter_leave (GdkEventCrossing* ev) { switch (ev->type) { case GDK_ENTER_NOTIFY: @@ -475,7 +475,7 @@ MidiCueEditor::canvas_enter_leave (GdkEventCrossing* ev) } void -MidiCueEditor::canvas_allocate (Gtk::Allocation alloc) +Pianoroll::canvas_allocate (Gtk::Allocation alloc) { _visible_canvas_width = alloc.get_width(); _visible_canvas_height = alloc.get_height(); @@ -489,14 +489,14 @@ MidiCueEditor::canvas_allocate (Gtk::Allocation alloc) } timepos_t -MidiCueEditor::snap_to_grid (timepos_t const & presnap, Temporal::RoundMode direction, SnapPref gpref) const +Pianoroll::snap_to_grid (timepos_t const & presnap, Temporal::RoundMode direction, SnapPref gpref) const { /* BBT time only */ return snap_to_bbt (presnap, direction, gpref); } void -MidiCueEditor::snap_to_internal (timepos_t& start, Temporal::RoundMode direction, SnapPref pref, bool ensure_snap) const +Pianoroll::snap_to_internal (timepos_t& start, Temporal::RoundMode direction, SnapPref pref, bool ensure_snap) const { UIConfiguration const& uic (UIConfiguration::instance ()); const timepos_t presnap = start; @@ -528,7 +528,7 @@ MidiCueEditor::snap_to_internal (timepos_t& start, Temporal::RoundMode direction } void -MidiCueEditor::set_samples_per_pixel (samplecnt_t spp) +Pianoroll::set_samples_per_pixel (samplecnt_t spp) { CueEditor::set_samples_per_pixel (spp); @@ -542,91 +542,91 @@ MidiCueEditor::set_samples_per_pixel (samplecnt_t spp) } samplecnt_t -MidiCueEditor::current_page_samples() const +Pianoroll::current_page_samples() const { return (samplecnt_t) _visible_canvas_width* samples_per_pixel; } bool -MidiCueEditor::canvas_bg_event (GdkEvent* event, ArdourCanvas::Item* item) +Pianoroll::canvas_bg_event (GdkEvent* event, ArdourCanvas::Item* item) { return typed_event (item, event, RegionItem); } bool -MidiCueEditor::canvas_control_point_event (GdkEvent* event, ArdourCanvas::Item* item, ControlPoint* cp) +Pianoroll::canvas_control_point_event (GdkEvent* event, ArdourCanvas::Item* item, ControlPoint* cp) { return typed_event (item, event, ControlPointItem); } bool -MidiCueEditor::canvas_note_event (GdkEvent* event, ArdourCanvas::Item* item) +Pianoroll::canvas_note_event (GdkEvent* event, ArdourCanvas::Item* item) { return typed_event (item, event, NoteItem); } bool -MidiCueEditor::canvas_velocity_base_event (GdkEvent* event, ArdourCanvas::Item* item) +Pianoroll::canvas_velocity_base_event (GdkEvent* event, ArdourCanvas::Item* item) { return typed_event (item, event, VelocityBaseItem); } bool -MidiCueEditor::canvas_velocity_event (GdkEvent* event, ArdourCanvas::Item* item) +Pianoroll::canvas_velocity_event (GdkEvent* event, ArdourCanvas::Item* item) { return typed_event (item, event, VelocityItem); } bool -MidiCueEditor::canvas_cue_start_event (GdkEvent* event, ArdourCanvas::Item* item) +Pianoroll::canvas_cue_start_event (GdkEvent* event, ArdourCanvas::Item* item) { return typed_event (item, event, ClipStartItem); } bool -MidiCueEditor::canvas_cue_end_event (GdkEvent* event, ArdourCanvas::Item* item) +Pianoroll::canvas_cue_end_event (GdkEvent* event, ArdourCanvas::Item* item) { return typed_event (item, event, ClipEndItem); } void -MidiCueEditor::set_trigger_start (Temporal::timepos_t const & p) +Pianoroll::set_trigger_start (Temporal::timepos_t const & p) { ref.trigger()->the_region()->trim_front (p); } void -MidiCueEditor::set_trigger_end (Temporal::timepos_t const & p) +Pianoroll::set_trigger_end (Temporal::timepos_t const & p) { ref.trigger()->the_region()->trim_end (p); } Gtk::Widget& -MidiCueEditor::viewport() +Pianoroll::viewport() { return *_canvas_viewport; } Gtk::Widget& -MidiCueEditor::toolbox () +Pianoroll::toolbox () { return _toolbox; } void -MidiCueEditor::data_captured (samplecnt_t total_duration) +Pianoroll::data_captured (samplecnt_t total_duration) { data_capture_duration = total_duration; if (!idle_update_queued.exchange (1)) { - Glib::signal_idle().connect (sigc::mem_fun (*this, &MidiCueEditor::idle_data_captured)); + Glib::signal_idle().connect (sigc::mem_fun (*this, &Pianoroll::idle_data_captured)); } _playhead_cursor->set_position (data_capture_duration); } bool -MidiCueEditor::idle_data_captured () +Pianoroll::idle_data_captured () { double where = sample_to_pixel_unrounded (data_capture_duration); @@ -642,12 +642,12 @@ MidiCueEditor::idle_data_captured () } void -MidiCueEditor::box_rec_enable_change (ARDOUR::TriggerBox const & b) +Pianoroll::box_rec_enable_change (ARDOUR::TriggerBox const & b) { } void -MidiCueEditor::trigger_rec_enable_change (ARDOUR::Trigger const & t) +Pianoroll::trigger_rec_enable_change (ARDOUR::Trigger const & t) { if (!t.armed()) { view->end_write (); @@ -655,7 +655,7 @@ MidiCueEditor::trigger_rec_enable_change (ARDOUR::Trigger const & t) } bool -MidiCueEditor::button_press_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_type) +Pianoroll::button_press_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_type) { switch (event->button.button) { case 1: @@ -679,7 +679,7 @@ MidiCueEditor::button_press_handler (ArdourCanvas::Item* item, GdkEvent* event, } bool -MidiCueEditor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_type) +Pianoroll::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_type) { NoteBase* note = nullptr; @@ -772,13 +772,13 @@ MidiCueEditor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event } bool -MidiCueEditor::button_press_handler_2 (ArdourCanvas::Item*, GdkEvent*, ItemType) +Pianoroll::button_press_handler_2 (ArdourCanvas::Item*, GdkEvent*, ItemType) { return true; } bool -MidiCueEditor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_type) +Pianoroll::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_type) { if (!Keyboard::is_context_menu_event (&event->button)) { @@ -810,7 +810,7 @@ MidiCueEditor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event } bool -MidiCueEditor::button_press_dispatch (GdkEventButton* ev) +Pianoroll::button_press_dispatch (GdkEventButton* ev) { /* this function is intended only for buttons 4 and above. */ @@ -819,7 +819,7 @@ MidiCueEditor::button_press_dispatch (GdkEventButton* ev) } bool -MidiCueEditor::button_release_dispatch (GdkEventButton* ev) +Pianoroll::button_release_dispatch (GdkEventButton* ev) { /* this function is intended only for buttons 4 and above. */ @@ -828,7 +828,7 @@ MidiCueEditor::button_release_dispatch (GdkEventButton* ev) } bool -MidiCueEditor::motion_handler (ArdourCanvas::Item*, GdkEvent* event, bool from_autoscroll) +Pianoroll::motion_handler (ArdourCanvas::Item*, GdkEvent* event, bool from_autoscroll) { if (_drags->active ()) { //drags change the snapped_cursor location, because we are snapping the thing being dragged, not the actual mouse cursor @@ -839,7 +839,7 @@ MidiCueEditor::motion_handler (ArdourCanvas::Item*, GdkEvent* event, bool from_a } bool -MidiCueEditor::key_press_handler (ArdourCanvas::Item*, GdkEvent* ev, ItemType) +Pianoroll::key_press_handler (ArdourCanvas::Item*, GdkEvent* ev, ItemType) { switch (ev->key.keyval) { @@ -855,13 +855,13 @@ MidiCueEditor::key_press_handler (ArdourCanvas::Item*, GdkEvent* ev, ItemType) } bool -MidiCueEditor::key_release_handler (ArdourCanvas::Item*, GdkEvent*, ItemType) +Pianoroll::key_release_handler (ArdourCanvas::Item*, GdkEvent*, ItemType) { return true; } void -MidiCueEditor::set_mouse_mode (Editing::MouseMode m, bool force) +Pianoroll::set_mouse_mode (Editing::MouseMode m, bool force) { if (m != Editing::MouseDraw && m != Editing::MouseContent) { return; @@ -871,24 +871,24 @@ MidiCueEditor::set_mouse_mode (Editing::MouseMode m, bool force) } void -MidiCueEditor::step_mouse_mode (bool next) +Pianoroll::step_mouse_mode (bool next) { } Editing::MouseMode -MidiCueEditor::current_mouse_mode () const +Pianoroll::current_mouse_mode () const { return mouse_mode; } bool -MidiCueEditor::internal_editing() const +Pianoroll::internal_editing() const { return true; } RegionSelection -MidiCueEditor::region_selection() +Pianoroll::region_selection() { RegionSelection rs; return rs; @@ -904,7 +904,7 @@ edit_last_mark_label (std::vector& marks, const std:: } void -MidiCueEditor::metric_get_bbt (std::vector& marks, samplepos_t leftmost, samplepos_t rightmost, gint /*maxchars*/) +Pianoroll::metric_get_bbt (std::vector& marks, samplepos_t leftmost, samplepos_t rightmost, gint /*maxchars*/) { if (_session == 0) { return; @@ -1247,7 +1247,7 @@ MidiCueEditor::metric_get_bbt (std::vector& marks, sa void -MidiCueEditor::mouse_mode_toggled (Editing::MouseMode m) +Pianoroll::mouse_mode_toggled (Editing::MouseMode m) { Glib::RefPtr act = get_mouse_mode_action (m); Glib::RefPtr tact = Glib::RefPtr::cast_dynamic (act); @@ -1272,14 +1272,14 @@ MidiCueEditor::mouse_mode_toggled (Editing::MouseMode m) } int -MidiCueEditor::set_state (XMLNode const & node, int version) +Pianoroll::set_state (XMLNode const & node, int version) { set_common_editing_state (node); return 0; } XMLNode& -MidiCueEditor::get_state () const +Pianoroll::get_state () const { XMLNode* node (new XMLNode (_("MIDICueEditor"))); get_common_editing_state (*node); @@ -1292,7 +1292,7 @@ MidiCueEditor::get_state () const * */ void -MidiCueEditor::maybe_autoscroll (bool allow_horiz, bool allow_vert, bool from_headers) +Pianoroll::maybe_autoscroll (bool allow_horiz, bool allow_vert, bool from_headers) { if (!UIConfiguration::instance().get_autoscroll_editor () || autoscroll_active ()) { return; @@ -1369,13 +1369,13 @@ MidiCueEditor::maybe_autoscroll (bool allow_horiz, bool allow_vert, bool from_he } bool -MidiCueEditor::autoscroll_active () const +Pianoroll::autoscroll_active () const { return autoscroll_connection.connected (); } bool -MidiCueEditor::autoscroll_canvas () +Pianoroll::autoscroll_canvas () { using std::max; using std::min; @@ -1575,7 +1575,7 @@ MidiCueEditor::autoscroll_canvas () } void -MidiCueEditor::start_canvas_autoscroll (bool allow_horiz, bool allow_vert, const ArdourCanvas::Rect& boundary) +Pianoroll::start_canvas_autoscroll (bool allow_horiz, bool allow_vert, const ArdourCanvas::Rect& boundary) { if (!_session) { return; @@ -1594,18 +1594,18 @@ MidiCueEditor::start_canvas_autoscroll (bool allow_horiz, bool allow_vert, const /* scroll again at very very roughly 30FPS */ - autoscroll_connection = Glib::signal_timeout().connect (sigc::mem_fun (*this, &MidiCueEditor::autoscroll_canvas), 30); + autoscroll_connection = Glib::signal_timeout().connect (sigc::mem_fun (*this, &Pianoroll::autoscroll_canvas), 30); } void -MidiCueEditor::stop_canvas_autoscroll () +Pianoroll::stop_canvas_autoscroll () { autoscroll_connection.disconnect (); autoscroll_cnt = 0; } void -MidiCueEditor::visual_changer (const VisualChange& vc) +Pianoroll::visual_changer (const VisualChange& vc) { /** * Changed first so the correct horizontal canvas position is calculated in @@ -1651,7 +1651,7 @@ MidiCueEditor::visual_changer (const VisualChange& vc) } void -MidiCueEditor::on_samples_per_pixel_changed () +Pianoroll::on_samples_per_pixel_changed () { if (view) { view->set_samples_per_pixel (samples_per_pixel); @@ -1659,7 +1659,7 @@ MidiCueEditor::on_samples_per_pixel_changed () } void -MidiCueEditor::midi_action (void (MidiView::*method)()) +Pianoroll::midi_action (void (MidiView::*method)()) { if (!view) { return; @@ -1669,7 +1669,7 @@ MidiCueEditor::midi_action (void (MidiView::*method)()) } void -MidiCueEditor::escape () +Pianoroll::escape () { if (!view) { return; @@ -1678,13 +1678,13 @@ MidiCueEditor::escape () view->clear_note_selection (); } Gdk::Cursor* -MidiCueEditor::which_track_cursor () const +Pianoroll::which_track_cursor () const { return _cursors->grabber; } Gdk::Cursor* -MidiCueEditor::which_mode_cursor () const +Pianoroll::which_mode_cursor () const { Gdk::Cursor* mode_cursor = MouseCursors::invalid_cursor (); @@ -1705,7 +1705,7 @@ MidiCueEditor::which_mode_cursor () const } Gdk::Cursor* -MidiCueEditor::which_trim_cursor (bool left_side) const +Pianoroll::which_trim_cursor (bool left_side) const { abort (); /*NOTREACHED*/ @@ -1714,7 +1714,7 @@ MidiCueEditor::which_trim_cursor (bool left_side) const Gdk::Cursor* -MidiCueEditor::which_canvas_cursor (ItemType type) const +Pianoroll::which_canvas_cursor (ItemType type) const { Gdk::Cursor* cursor = which_mode_cursor (); @@ -1794,7 +1794,7 @@ MidiCueEditor::which_canvas_cursor (ItemType type) const } bool -MidiCueEditor::enter_handler (ArdourCanvas::Item* item, GdkEvent* ev, ItemType item_type) +Pianoroll::enter_handler (ArdourCanvas::Item* item, GdkEvent* ev, ItemType item_type) { choose_canvas_cursor_on_entry (item_type); @@ -1823,7 +1823,7 @@ MidiCueEditor::enter_handler (ArdourCanvas::Item* item, GdkEvent* ev, ItemType i } bool -MidiCueEditor::leave_handler (ArdourCanvas::Item* item, GdkEvent* ev, ItemType item_type) +Pianoroll::leave_handler (ArdourCanvas::Item* item, GdkEvent* ev, ItemType item_type) { EditorAutomationLine* al; @@ -1854,7 +1854,7 @@ MidiCueEditor::leave_handler (ArdourCanvas::Item* item, GdkEvent* ev, ItemType i } std::list -MidiCueEditor::selectable_owners() +Pianoroll::selectable_owners() { if (view) { return view->selectable_owners(); @@ -1864,7 +1864,7 @@ MidiCueEditor::selectable_owners() } void -MidiCueEditor::trigger_prop_change (PBD::PropertyChange const & what_changed) +Pianoroll::trigger_prop_change (PBD::PropertyChange const & what_changed) { if (what_changed.contains (Properties::region)) { std::shared_ptr mr = std::dynamic_pointer_cast (ref.trigger()->the_region()); @@ -1875,7 +1875,7 @@ MidiCueEditor::trigger_prop_change (PBD::PropertyChange const & what_changed) } void -MidiCueEditor::set (TriggerReference & tref) +Pianoroll::set (TriggerReference & tref) { _update_connection.disconnect (); object_connections.drop_connections (); @@ -1884,7 +1884,7 @@ MidiCueEditor::set (TriggerReference & tref) idle_update_queued.store (0); - ref.box()->Captured.connect (object_connections, invalidator (*this), std::bind (&MidiCueEditor::data_captured, this, _1), gui_context()); + ref.box()->Captured.connect (object_connections, invalidator (*this), std::bind (&Pianoroll::data_captured, this, _1), gui_context()); /* Don't bind a shared_ptr within the lambda */ TriggerBox* tb (ref.box().get()); tb->RecEnableChanged.connect (object_connections, invalidator (*this), [&, tb]() { box_rec_enable_change (*tb); }, gui_context()); @@ -1896,9 +1896,9 @@ MidiCueEditor::set (TriggerReference & tref) view->set_track (_track); - _update_connection = Timers::rapid_connect (sigc::mem_fun (*this, &MidiCueEditor::maybe_update)); - _track->DropReferences.connect (object_connections, invalidator (*this), std::bind (&MidiCueEditor::unset, this), gui_context()); - ref.trigger()->PropertyChanged.connect (object_connections, invalidator (*this), std::bind (&MidiCueEditor::trigger_prop_change, this, _1), gui_context()); + _update_connection = Timers::rapid_connect (sigc::mem_fun (*this, &Pianoroll::maybe_update)); + _track->DropReferences.connect (object_connections, invalidator (*this), std::bind (&Pianoroll::unset, this), gui_context()); + ref.trigger()->PropertyChanged.connect (object_connections, invalidator (*this), std::bind (&Pianoroll::trigger_prop_change, this, _1), gui_context()); if (ref.trigger()->the_region()) { @@ -1911,7 +1911,7 @@ MidiCueEditor::set (TriggerReference & tref) } void -MidiCueEditor::unset () +Pianoroll::unset () { _update_connection.disconnect(); object_connections.drop_connections (); @@ -1921,7 +1921,7 @@ MidiCueEditor::unset () } void -MidiCueEditor::set_region (std::shared_ptr r) +Pianoroll::set_region (std::shared_ptr r) { if (!r) { view->set_region (nullptr); @@ -1964,7 +1964,7 @@ MidiCueEditor::set_region (std::shared_ptr r) } bool -MidiCueEditor::automation_button_event (GdkEventButton* ev, Evoral::ParameterType type, int id) +Pianoroll::automation_button_event (GdkEventButton* ev, Evoral::ParameterType type, int id) { if (ev->button != 1) { return false; @@ -1992,7 +1992,7 @@ MidiCueEditor::automation_button_event (GdkEventButton* ev, Evoral::ParameterTyp } void -MidiCueEditor::automation_led_click (GdkEventButton* ev, Evoral::ParameterType type, int id) +Pianoroll::automation_led_click (GdkEventButton* ev, Evoral::ParameterType type, int id) { if (ev->button != 1) { return; @@ -2004,7 +2004,7 @@ MidiCueEditor::automation_led_click (GdkEventButton* ev, Evoral::ParameterType t } void -MidiCueEditor::automation_state_changed () +Pianoroll::automation_state_changed () { assert (view); @@ -2030,7 +2030,7 @@ MidiCueEditor::automation_state_changed () } void -MidiCueEditor::note_mode_clicked () +Pianoroll::note_mode_clicked () { assert (bg); @@ -2042,7 +2042,7 @@ MidiCueEditor::note_mode_clicked () } void -MidiCueEditor::set_note_mode (NoteMode nm) +Pianoroll::set_note_mode (NoteMode nm) { assert (bg); @@ -2057,7 +2057,7 @@ MidiCueEditor::set_note_mode (NoteMode nm) } void -MidiCueEditor::build_zoom_focus_menu () +Pianoroll::build_zoom_focus_menu () { using namespace Gtk::Menu_Helpers; using namespace Editing; @@ -2071,7 +2071,7 @@ MidiCueEditor::build_zoom_focus_menu () std::pair -MidiCueEditor::max_zoom_extent() const +Pianoroll::max_zoom_extent() const { if (view && view->midi_region()) { return std::make_pair (Temporal::timepos_t (Temporal::Beats()), Temporal::timepos_t (view->midi_region()->midi_source()->length().beats())); @@ -2081,7 +2081,7 @@ MidiCueEditor::max_zoom_extent() const } void -MidiCueEditor::full_zoom_clicked() +Pianoroll::full_zoom_clicked() { /* XXXX NEED LOCAL TEMPO MAP */ diff --git a/gtk2_ardour/midi_cue_editor.h b/gtk2_ardour/pianoroll.h similarity index 98% rename from gtk2_ardour/midi_cue_editor.h rename to gtk2_ardour/pianoroll.h index 8c54ac5c04..d3f061e06c 100644 --- a/gtk2_ardour/midi_cue_editor.h +++ b/gtk2_ardour/pianoroll.h @@ -47,11 +47,11 @@ namespace ArdourWidgets { class MidiCueView; class CueMidiBackground; -class MidiCueEditor : public CueEditor +class Pianoroll : public CueEditor { public: - MidiCueEditor (); - ~MidiCueEditor (); + Pianoroll (); + ~Pianoroll (); ArdourCanvas::Container* get_trackview_group () const { return data_group; } ArdourCanvas::Container* get_noscroll_group() const { return no_scroll_group; } @@ -219,14 +219,14 @@ class MidiCueEditor : public CueEditor class BBTMetric : public ArdourCanvas::Ruler::Metric { public: - BBTMetric (MidiCueEditor& ec) : context (&ec) {} + BBTMetric (Pianoroll& ec) : context (&ec) {} void get_marks (std::vector& marks, int64_t lower, int64_t upper, int maxchars) const { context->metric_get_bbt (marks, lower, upper, maxchars); } private: - MidiCueEditor* context; + Pianoroll* context; }; BBTMetric bbt_metric; diff --git a/gtk2_ardour/slot_properties_box.cc b/gtk2_ardour/slot_properties_box.cc index 4a8f71f8ce..fca7adbcd6 100644 --- a/gtk2_ardour/slot_properties_box.cc +++ b/gtk2_ardour/slot_properties_box.cc @@ -52,7 +52,7 @@ #include "audio_clip_editor.h" #include "audio_trigger_properties_box.h" -#include "midi_cue_editor.h" +#include "pianoroll.h" #include "slot_properties_box.h" diff --git a/gtk2_ardour/slot_properties_box.h b/gtk2_ardour/slot_properties_box.h index b570a8a29b..a26fe3eefb 100644 --- a/gtk2_ardour/slot_properties_box.h +++ b/gtk2_ardour/slot_properties_box.h @@ -46,7 +46,7 @@ namespace ARDOUR { class TriggerPropertiesBox; class RegionPropertiesBox; class RegionOperationsBox; -class MidiCueEditor; +class Pianoroll; class ClipEditorBox; class SlotPropertyTable : public TriggerUI, public Gtk::Table diff --git a/gtk2_ardour/trigger_page.cc b/gtk2_ardour/trigger_page.cc index bc6639ad2e..44024c349f 100644 --- a/gtk2_ardour/trigger_page.cc +++ b/gtk2_ardour/trigger_page.cc @@ -47,7 +47,7 @@ #include "editor.h" #include "gui_thread.h" #include "public_editor.h" -#include "midi_cue_editor.h" +#include "pianoroll.h" #include "timers.h" #include "trigger_page.h" #include "trigger_strip.h" @@ -138,7 +138,7 @@ TriggerPage::TriggerPage () add_sidebar_page (_("Sources"), _trigger_source_list.widget ()); add_sidebar_page (_("Regions"), _trigger_region_list.widget ()); - _midi_editor = new MidiCueEditor; + _midi_editor = new Pianoroll; /* Bottom -- Properties of selected Slot/Region */ Gtk::Table* table = manage (new Gtk::Table); diff --git a/gtk2_ardour/trigger_page.h b/gtk2_ardour/trigger_page.h index 34ea7a98a3..39d1ad1aa7 100644 --- a/gtk2_ardour/trigger_page.h +++ b/gtk2_ardour/trigger_page.h @@ -45,7 +45,7 @@ #include "trigger_master.h" class TriggerStrip; -class MidiCueEditor; +class Pianoroll; class TriggerPage : public ArdourWidgets::Tabbable, public ARDOUR::SessionHandlePtr, public PBD::ScopedConnectionList, public AxisViewProvider { @@ -142,7 +142,7 @@ private: AudioClipEditorBox _audio_trim_box; #endif - MidiCueEditor* _midi_editor; + Pianoroll* _midi_editor; RouteProcessorSelection _selection; std::list _strips; diff --git a/gtk2_ardour/wscript b/gtk2_ardour/wscript index 0bbdde3ac6..5b6426b8b7 100644 --- a/gtk2_ardour/wscript +++ b/gtk2_ardour/wscript @@ -160,7 +160,6 @@ gtk2_ardour_sources = [ 'midi_channel_selector.cc', 'midi_cue_automation_line.cc', 'midi_cue_background.cc', - 'midi_cue_editor.cc', 'midi_cue_velocity.cc', 'midi_cue_view.cc', 'midi_cut_buffer.cc', @@ -210,6 +209,7 @@ gtk2_ardour_sources = [ 'pianokeyboard.cc', 'piano_key_bindings.cc', 'piano_roll_header.cc', + 'pianoroll.cc', 'pingback.cc', 'playlist_selector.cc', 'plugin_display.cc',