X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fedit_note_dialog.cc;h=0c7d2a6113a4950d31aecc94e57829193db70d92;hb=f150f6c074e09e99531f8e82c5972fa49e302374;hp=17827693e7d1aa86a10fe58afbb84aee3c387624;hpb=a766fe1fd9852ea6b041ba257e588fca7a032cb9;p=ardour.git diff --git a/gtk2_ardour/edit_note_dialog.cc b/gtk2_ardour/edit_note_dialog.cc index 17827693e7..0c7d2a6113 100644 --- a/gtk2_ardour/edit_note_dialog.cc +++ b/gtk2_ardour/edit_note_dialog.cc @@ -22,11 +22,11 @@ #include "gtkmm2ext/utils.h" -#include "canvas-note-event.h" #include "edit_note_dialog.h" #include "midi_region_view.h" +#include "note_base.h" -#include "i18n.h" +#include "pbd/i18n.h" using namespace std; using namespace Gtk; @@ -38,7 +38,7 @@ using namespace Gtkmm2ext; * @param n Notes to edit. */ -EditNoteDialog::EditNoteDialog (MidiRegionView* rv, set n) +EditNoteDialog::EditNoteDialog (MidiRegionView* rv, set n) : ArdourDialog (_("Note")) , _region_view (rv) , _events (n) @@ -93,7 +93,8 @@ EditNoteDialog::EditNoteDialog (MidiRegionView* rv, setget_time_axis_view().session ()); _time_clock.set_mode (AudioClock::BBT); - _time_clock.set (_region_view->source_relative_time_converter().to ((*_events.begin())->note()->time ()), true); + _time_clock.set (_region_view->source_relative_time_converter().to + ((*_events.begin())->note()->time()) + (_region_view->region()->position() - _region_view->region()->start()), true); l = manage (left_aligned_label (_("Length"))); table->attach (*l, 0, 1, r, r + 1); @@ -103,7 +104,10 @@ EditNoteDialog::EditNoteDialog (MidiRegionView* rv, setget_time_axis_view().session ()); _length_clock.set_mode (AudioClock::BBT); - _length_clock.set (_region_view->region_relative_time_converter().to ((*_events.begin())->note()->length ()), true); + _length_clock.set ( + _region_view->region_relative_time_converter().to ((*_events.begin())->note()->end_time ()) + _region_view->region()->position(), + true, + _region_view->region_relative_time_converter().to ((*_events.begin())->note()->time ()) + _region_view->region()->position()); /* Set up `set all notes...' buttons' sensitivity */ @@ -112,14 +116,14 @@ EditNoteDialog::EditNoteDialog (MidiRegionView* rv, setnote()->channel (); int test_pitch = (*_events.begin())->note()->note (); int test_velocity = (*_events.begin())->note()->velocity (); - double test_time = (*_events.begin())->note()->time (); - double test_length = (*_events.begin())->note()->length (); - - for (set::iterator i = _events.begin(); i != _events.end(); ++i) { + Temporal::Beats test_time = (*_events.begin())->note()->time (); + Temporal::Beats test_length = (*_events.begin())->note()->length (); + + for (set::iterator i = _events.begin(); i != _events.end(); ++i) { if ((*i)->note()->channel() != test_channel) { _channel_all.set_sensitive (true); } @@ -140,22 +144,19 @@ EditNoteDialog::EditNoteDialog (MidiRegionView* rv, setpack_start (*table); add_button (Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL); add_button (Gtk::Stock::APPLY, Gtk::RESPONSE_ACCEPT); set_default_response (Gtk::RESPONSE_ACCEPT); - - show_all (); } -int -EditNoteDialog::run () +void +EditNoteDialog::done (int r) { - int const r = Dialog::run (); if (r != RESPONSE_ACCEPT) { - return r; + return; } /* These calls mean that if a value is entered using the keyboard @@ -170,7 +171,7 @@ EditNoteDialog::run () bool had_change = false; if (!_channel_all.get_sensitive() || _channel_all.get_active ()) { - for (set::iterator i = _events.begin(); i != _events.end(); ++i) { + for (set::iterator i = _events.begin(); i != _events.end(); ++i) { if (_channel.get_value_as_int() - 1 != (*i)->note()->channel()) { _region_view->change_note_channel (*i, _channel.get_value_as_int () - 1); had_change = true; @@ -179,7 +180,7 @@ EditNoteDialog::run () } if (!_pitch_all.get_sensitive() || _pitch_all.get_active ()) { - for (set::iterator i = _events.begin(); i != _events.end(); ++i) { + for (set::iterator i = _events.begin(); i != _events.end(); ++i) { if (_pitch.get_value_as_int() != (*i)->note()->note()) { _region_view->change_note_note (*i, _pitch.get_value_as_int ()); had_change = true; @@ -188,7 +189,7 @@ EditNoteDialog::run () } if (!_velocity_all.get_sensitive() || _velocity_all.get_active ()) { - for (set::iterator i = _events.begin(); i != _events.end(); ++i) { + for (set::iterator i = _events.begin(); i != _events.end(); ++i) { if (_velocity.get_value_as_int() != (*i)->note()->velocity()) { _region_view->change_note_velocity (*i, _velocity.get_value_as_int ()); had_change = true; @@ -196,10 +197,11 @@ EditNoteDialog::run () } } - double const t = _region_view->source_relative_time_converter().from (_time_clock.current_time ()); + samplecnt_t const region_samples = _time_clock.current_time() - (_region_view->region()->position() - _region_view->region()->start()); + Temporal::Beats const t = _region_view->source_relative_time_converter().from (region_samples); if (!_time_all.get_sensitive() || _time_all.get_active ()) { - for (set::iterator i = _events.begin(); i != _events.end(); ++i) { + for (set::iterator i = _events.begin(); i != _events.end(); ++i) { if (t != (*i)->note()->time()) { _region_view->change_note_time (*i, t); had_change = true; @@ -207,10 +209,10 @@ EditNoteDialog::run () } } - double const d = _region_view->region_relative_time_converter().from (_length_clock.current_duration ()); - if (!_length_all.get_sensitive() || _length_all.get_active ()) { - for (set::iterator i = _events.begin(); i != _events.end(); ++i) { + for (set::iterator i = _events.begin(); i != _events.end(); ++i) { + samplepos_t const note_end_sample = region_samples + _length_clock.current_duration (_time_clock.current_time()); + Temporal::Beats const d = _region_view->source_relative_time_converter().from (note_end_sample) - (*i)->note()->time(); if (d != (*i)->note()->length()) { _region_view->change_note_length (*i, d); had_change = true; @@ -224,9 +226,10 @@ EditNoteDialog::run () _region_view->apply_diff (); - for (set::iterator i = _events.begin(); i != _events.end(); ++i) { - (*i)->set_selected ((*i)->selected()); // change color + list notes; + for (set::iterator i = _events.begin(); i != _events.end(); ++i) { + notes.push_back ((*i)->note()->id()); } - return r; + _region_view->select_notes (notes); }