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 ();
+
+
}
/* 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) {
}
}
-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 ()
{
} 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
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;
void set_note_range(MidiStreamView::VisibleNoteRange range);
void route_active_changed ();
- void build_rec_context_menu ();
void add_insert_to_subplugin_menu (ARDOUR::Processor *);
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 ();
};
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;
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;
}
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 ();
{
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);
}