mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-06 14:54:56 +01:00
better way to "engage" step edit, and extend region correctly as needed
git-svn-id: svn://localhost/ardour2/branches/3.0@5630 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
b0b584c2a5
commit
b7fe417f70
7 changed files with 26 additions and 72 deletions
|
|
@ -2558,9 +2558,27 @@ Editor::set_internal_edit (bool yn)
|
|||
|
||||
if (yn) {
|
||||
mouse_select_button.set_image (*(manage (new Image (::get_icon("midi_tool_pencil")))));
|
||||
|
||||
for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
|
||||
MidiTimeAxisView* mtv = dynamic_cast<MidiTimeAxisView*> (*i);
|
||||
if (mtv) {
|
||||
mtv->start_step_editing ();
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
mouse_select_button.set_image (*(manage (new Image (::get_xpm("tool_range.xpm")))));
|
||||
|
||||
for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
|
||||
MidiTimeAxisView* mtv = dynamic_cast<MidiTimeAxisView*> (*i);
|
||||
if (mtv) {
|
||||
mtv->stop_step_editing ();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
set_canvas_cursor ();
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2248,8 +2248,7 @@ MidiRegionView::add_note (uint8_t channel, uint8_t number, uint8_t velocity,
|
|||
|
||||
/* potentially extend region to hold new note */
|
||||
|
||||
|
||||
nframes64_t end_frame = _region->position() + beats_to_frames (new_note->length());
|
||||
nframes64_t end_frame = _region->position() + beats_to_frames (new_note->end_time());
|
||||
nframes64_t region_end = _region->position() + _region->length() - 1;
|
||||
|
||||
if (end_frame > region_end) {
|
||||
|
|
|
|||
|
|
@ -559,44 +559,6 @@ MidiTimeAxisView::route_active_changed ()
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
MidiTimeAxisView::build_rec_context_menu ()
|
||||
{
|
||||
using namespace Menu_Helpers;
|
||||
|
||||
if (!is_track()) {
|
||||
return;
|
||||
}
|
||||
|
||||
rec_context_menu = manage (new Menu);
|
||||
rec_context_menu->set_name ("ArdourContextMenu");
|
||||
|
||||
MenuList& items = rec_context_menu->items();
|
||||
|
||||
items.push_back (CheckMenuElem (_("Step Edit"),
|
||||
(mem_fun (*this, &MidiTimeAxisView::toggle_step_editing))));
|
||||
_step_edit_item = dynamic_cast<CheckMenuItem*>(&items.back());
|
||||
_step_edit_item->set_active (midi_track()->step_editing());
|
||||
}
|
||||
|
||||
void
|
||||
MidiTimeAxisView::toggle_step_editing ()
|
||||
{
|
||||
if (!is_track()) {
|
||||
return;
|
||||
}
|
||||
|
||||
bool yn = _step_edit_item->get_active();
|
||||
|
||||
if (yn) {
|
||||
start_step_editing ();
|
||||
} else {
|
||||
stop_step_editing ();
|
||||
}
|
||||
|
||||
midi_track()->set_step_editing (yn);
|
||||
}
|
||||
|
||||
void
|
||||
MidiTimeAxisView::start_step_editing ()
|
||||
{
|
||||
|
|
@ -611,12 +573,15 @@ MidiTimeAxisView::start_step_editing ()
|
|||
} else {
|
||||
step_edit_region_view = 0;
|
||||
}
|
||||
|
||||
midi_track()->set_step_editing (true);
|
||||
}
|
||||
|
||||
void
|
||||
MidiTimeAxisView::stop_step_editing ()
|
||||
{
|
||||
step_edit_connection.disconnect ();
|
||||
midi_track()->set_step_editing (false);
|
||||
}
|
||||
|
||||
bool
|
||||
|
|
|
|||
|
|
@ -88,6 +88,9 @@ class MidiTimeAxisView : public RouteTimeAxisView
|
|||
return _midi_patch_settings_changed;
|
||||
}
|
||||
|
||||
void start_step_editing ();
|
||||
void stop_step_editing ();
|
||||
|
||||
private:
|
||||
sigc::signal<void, std::string, std::string> _midi_patch_settings_changed;
|
||||
|
||||
|
|
@ -104,7 +107,6 @@ class MidiTimeAxisView : public RouteTimeAxisView
|
|||
void set_note_range(MidiStreamView::VisibleNoteRange range);
|
||||
|
||||
void route_active_changed ();
|
||||
void build_rec_context_menu ();
|
||||
|
||||
void add_insert_to_subplugin_menu (ARDOUR::Processor *);
|
||||
|
||||
|
|
@ -132,9 +134,6 @@ class MidiTimeAxisView : public RouteTimeAxisView
|
|||
boost::shared_ptr<ARDOUR::Region> step_edit_region;
|
||||
MidiRegionView* step_edit_region_view;
|
||||
|
||||
void toggle_step_editing ();
|
||||
void start_step_editing ();
|
||||
void stop_step_editing ();
|
||||
bool check_step_edit ();
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -95,7 +95,6 @@ RouteUI::init ()
|
|||
mute_menu = 0;
|
||||
solo_menu = 0;
|
||||
sends_menu = 0;
|
||||
rec_context_menu = 0;
|
||||
ignore_toggle = false;
|
||||
wait_for_release = false;
|
||||
route_active_menu_item = 0;
|
||||
|
|
@ -512,31 +511,9 @@ RouteUI::rec_enable_press(GdkEventButton* ev)
|
|||
return true;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
RouteUI::show_rec_context_menu ()
|
||||
{
|
||||
if (!rec_context_menu) {
|
||||
cerr << "build menu\n";
|
||||
build_rec_context_menu ();
|
||||
}
|
||||
|
||||
if (rec_context_menu) {
|
||||
/* only do this if build_rec_context_menu() actually did something */
|
||||
cerr << "show menu\n";
|
||||
rec_context_menu->popup (1, gtk_get_current_event_time());
|
||||
}
|
||||
}
|
||||
|
||||
bool
|
||||
RouteUI::rec_enable_release (GdkEventButton* ev)
|
||||
{
|
||||
cerr << "release\n";
|
||||
if (Keyboard::is_context_menu_event(ev)) {
|
||||
cerr << "context\n";
|
||||
show_rec_context_menu ();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -98,10 +98,6 @@ class RouteUI : public virtual AxisView
|
|||
Gtk::Menu* mute_menu;
|
||||
Gtk::Menu* solo_menu;
|
||||
Gtk::Menu* sends_menu;
|
||||
Gtk::Menu* rec_context_menu;
|
||||
|
||||
virtual void build_rec_context_menu () { }
|
||||
void show_rec_context_menu ();
|
||||
|
||||
XMLNode *xml_node;
|
||||
void ensure_xml_node ();
|
||||
|
|
|
|||
|
|
@ -463,7 +463,7 @@ MidiTrack::no_roll (nframes_t nframes, sframes_t start_frame, sframes_t end_fram
|
|||
{
|
||||
int ret = Track::no_roll (nframes, start_frame, end_frame, state_changing, can_record, rec_monitors_input);
|
||||
|
||||
if (ret == 0 && _step_editing) {
|
||||
if (ret == 0 && diskstream()->record_enabled() && _step_editing) {
|
||||
push_midi_input_to_step_edit_ringbuffer (nframes);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue