summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2009-09-03 14:50:21 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2009-09-03 14:50:21 +0000
commitb7fe417f7096bc03c9f0f0a5db362196857e63f9 (patch)
treeda6e876dd7bbde03c4ae72eb3b6a6ca9126fdbed /gtk2_ardour
parentb0b584c2a595bfdf6bb4b980bd8d8fc7f3546fc5 (diff)
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
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/editor_mouse.cc18
-rw-r--r--gtk2_ardour/midi_region_view.cc3
-rw-r--r--gtk2_ardour/midi_time_axis.cc41
-rw-r--r--gtk2_ardour/midi_time_axis.h7
-rw-r--r--gtk2_ardour/route_ui.cc23
-rw-r--r--gtk2_ardour/route_ui.h4
6 files changed, 25 insertions, 71 deletions
diff --git a/gtk2_ardour/editor_mouse.cc b/gtk2_ardour/editor_mouse.cc
index 33054f2ca9..cffc4afd1b 100644
--- a/gtk2_ardour/editor_mouse.cc
+++ b/gtk2_ardour/editor_mouse.cc
@@ -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 ();
+
+
}
diff --git a/gtk2_ardour/midi_region_view.cc b/gtk2_ardour/midi_region_view.cc
index d3af36ab92..9ad82707d7 100644
--- a/gtk2_ardour/midi_region_view.cc
+++ b/gtk2_ardour/midi_region_view.cc
@@ -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) {
diff --git a/gtk2_ardour/midi_time_axis.cc b/gtk2_ardour/midi_time_axis.cc
index 33315cfaa6..3b7ec82807 100644
--- a/gtk2_ardour/midi_time_axis.cc
+++ b/gtk2_ardour/midi_time_axis.cc
@@ -560,44 +560,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 ()
{
step_edit_connection = Glib::signal_timeout().connect (mem_fun (*this, &MidiTimeAxisView::check_step_edit), 20);
@@ -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
diff --git a/gtk2_ardour/midi_time_axis.h b/gtk2_ardour/midi_time_axis.h
index 850fb90e34..6635c3de41 100644
--- a/gtk2_ardour/midi_time_axis.h
+++ b/gtk2_ardour/midi_time_axis.h
@@ -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 ();
};
diff --git a/gtk2_ardour/route_ui.cc b/gtk2_ardour/route_ui.cc
index 6c42de5848..f46450a0bc 100644
--- a/gtk2_ardour/route_ui.cc
+++ b/gtk2_ardour/route_ui.cc
@@ -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;
}
diff --git a/gtk2_ardour/route_ui.h b/gtk2_ardour/route_ui.h
index 17e5f77cf6..1ac87a0404 100644
--- a/gtk2_ardour/route_ui.h
+++ b/gtk2_ardour/route_ui.h
@@ -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 ();