mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-07 07:14: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) {
|
if (yn) {
|
||||||
mouse_select_button.set_image (*(manage (new Image (::get_icon("midi_tool_pencil")))));
|
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 {
|
} else {
|
||||||
|
|
||||||
mouse_select_button.set_image (*(manage (new Image (::get_xpm("tool_range.xpm")))));
|
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 ();
|
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 */
|
/* potentially extend region to hold new note */
|
||||||
|
|
||||||
|
nframes64_t end_frame = _region->position() + beats_to_frames (new_note->end_time());
|
||||||
nframes64_t end_frame = _region->position() + beats_to_frames (new_note->length());
|
|
||||||
nframes64_t region_end = _region->position() + _region->length() - 1;
|
nframes64_t region_end = _region->position() + _region->length() - 1;
|
||||||
|
|
||||||
if (end_frame > region_end) {
|
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
|
void
|
||||||
MidiTimeAxisView::start_step_editing ()
|
MidiTimeAxisView::start_step_editing ()
|
||||||
{
|
{
|
||||||
|
|
@ -611,12 +573,15 @@ MidiTimeAxisView::start_step_editing ()
|
||||||
} else {
|
} else {
|
||||||
step_edit_region_view = 0;
|
step_edit_region_view = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
midi_track()->set_step_editing (true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
MidiTimeAxisView::stop_step_editing ()
|
MidiTimeAxisView::stop_step_editing ()
|
||||||
{
|
{
|
||||||
step_edit_connection.disconnect ();
|
step_edit_connection.disconnect ();
|
||||||
|
midi_track()->set_step_editing (false);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
|
|
|
||||||
|
|
@ -88,6 +88,9 @@ class MidiTimeAxisView : public RouteTimeAxisView
|
||||||
return _midi_patch_settings_changed;
|
return _midi_patch_settings_changed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void start_step_editing ();
|
||||||
|
void stop_step_editing ();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
sigc::signal<void, std::string, std::string> _midi_patch_settings_changed;
|
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 set_note_range(MidiStreamView::VisibleNoteRange range);
|
||||||
|
|
||||||
void route_active_changed ();
|
void route_active_changed ();
|
||||||
void build_rec_context_menu ();
|
|
||||||
|
|
||||||
void add_insert_to_subplugin_menu (ARDOUR::Processor *);
|
void add_insert_to_subplugin_menu (ARDOUR::Processor *);
|
||||||
|
|
||||||
|
|
@ -132,9 +134,6 @@ class MidiTimeAxisView : public RouteTimeAxisView
|
||||||
boost::shared_ptr<ARDOUR::Region> step_edit_region;
|
boost::shared_ptr<ARDOUR::Region> step_edit_region;
|
||||||
MidiRegionView* step_edit_region_view;
|
MidiRegionView* step_edit_region_view;
|
||||||
|
|
||||||
void toggle_step_editing ();
|
|
||||||
void start_step_editing ();
|
|
||||||
void stop_step_editing ();
|
|
||||||
bool check_step_edit ();
|
bool check_step_edit ();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -95,7 +95,6 @@ RouteUI::init ()
|
||||||
mute_menu = 0;
|
mute_menu = 0;
|
||||||
solo_menu = 0;
|
solo_menu = 0;
|
||||||
sends_menu = 0;
|
sends_menu = 0;
|
||||||
rec_context_menu = 0;
|
|
||||||
ignore_toggle = false;
|
ignore_toggle = false;
|
||||||
wait_for_release = false;
|
wait_for_release = false;
|
||||||
route_active_menu_item = 0;
|
route_active_menu_item = 0;
|
||||||
|
|
@ -512,31 +511,9 @@ RouteUI::rec_enable_press(GdkEventButton* ev)
|
||||||
return true;
|
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
|
bool
|
||||||
RouteUI::rec_enable_release (GdkEventButton* ev)
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -98,10 +98,6 @@ class RouteUI : public virtual AxisView
|
||||||
Gtk::Menu* mute_menu;
|
Gtk::Menu* mute_menu;
|
||||||
Gtk::Menu* solo_menu;
|
Gtk::Menu* solo_menu;
|
||||||
Gtk::Menu* sends_menu;
|
Gtk::Menu* sends_menu;
|
||||||
Gtk::Menu* rec_context_menu;
|
|
||||||
|
|
||||||
virtual void build_rec_context_menu () { }
|
|
||||||
void show_rec_context_menu ();
|
|
||||||
|
|
||||||
XMLNode *xml_node;
|
XMLNode *xml_node;
|
||||||
void ensure_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);
|
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);
|
push_midi_input_to_step_edit_ringbuffer (nframes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue