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:
Paul Davis 2009-09-03 14:50:21 +00:00
parent b0b584c2a5
commit b7fe417f70
7 changed files with 26 additions and 72 deletions

View file

@ -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 ();
}

View file

@ -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) {

View file

@ -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

View file

@ -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 ();
};

View file

@ -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;
}

View file

@ -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 ();

View file

@ -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);
}