summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gtk2_ardour/ardour-sae.menus1
-rw-r--r--gtk2_ardour/audio_region_view.cc21
-rw-r--r--gtk2_ardour/audio_region_view.h2
-rw-r--r--gtk2_ardour/audio_streamview.cc6
-rw-r--r--gtk2_ardour/audio_time_axis.cc16
-rw-r--r--gtk2_ardour/audio_time_axis.h3
-rw-r--r--gtk2_ardour/automation_region_view.cc9
-rw-r--r--gtk2_ardour/automation_region_view.h2
-rw-r--r--gtk2_ardour/automation_streamview.cc3
-rw-r--r--gtk2_ardour/editing_syms.h1
-rw-r--r--gtk2_ardour/editor.bindings2
-rw-r--r--gtk2_ardour/editor.cc58
-rw-r--r--gtk2_ardour/editor.h14
-rw-r--r--gtk2_ardour/editor_actions.cc20
-rw-r--r--gtk2_ardour/editor_canvas.cc69
-rw-r--r--gtk2_ardour/editor_mouse.cc241
-rw-r--r--gtk2_ardour/editor_ops.cc21
-rw-r--r--gtk2_ardour/editor_selection.cc10
-rw-r--r--gtk2_ardour/enums.cc1
-rw-r--r--gtk2_ardour/ergonomic-us.bindings.in2
-rw-r--r--gtk2_ardour/icons/tool_content.pngbin0 -> 377 bytes
-rw-r--r--gtk2_ardour/midi_region_view.cc26
-rw-r--r--gtk2_ardour/midi_streamview.cc18
-rw-r--r--gtk2_ardour/midi_streamview.h2
-rw-r--r--gtk2_ardour/midi_time_axis.cc32
-rw-r--r--gtk2_ardour/midi_time_axis.h3
-rw-r--r--gtk2_ardour/mnemonic-us.bindings.in2
-rw-r--r--gtk2_ardour/note_base.cc7
-rw-r--r--gtk2_ardour/patch_change.cc3
-rw-r--r--gtk2_ardour/public_editor.h19
-rw-r--r--gtk2_ardour/region_view.h2
-rw-r--r--gtk2_ardour/streamview.cc16
-rw-r--r--gtk2_ardour/streamview.h3
-rw-r--r--gtk2_ardour/time_axis_view.h3
-rw-r--r--gtk2_ardour/time_axis_view_item.cc11
-rw-r--r--gtk2_ardour/time_info_box.cc74
-rw-r--r--gtk2_ardour/trx.menus.in2
37 files changed, 187 insertions, 538 deletions
diff --git a/gtk2_ardour/ardour-sae.menus b/gtk2_ardour/ardour-sae.menus
index 66f3d1caf3..d03449ff4f 100644
--- a/gtk2_ardour/ardour-sae.menus
+++ b/gtk2_ardour/ardour-sae.menus
@@ -317,6 +317,7 @@
<menuitem action='set-mouse-mode-object'/>
<menuitem action='set-mouse-mode-zoom'/>
<menuitem action='set-mouse-mode-timefx'/>
+ <menuitem action='set-mouse-mode-content'/>
<separator/>
<menuitem action='cycle-edit-point'/>
<menuitem action='cycle-edit-point-with-marker'/>
diff --git a/gtk2_ardour/audio_region_view.cc b/gtk2_ardour/audio_region_view.cc
index d5882514c7..70bcca0dcd 100644
--- a/gtk2_ardour/audio_region_view.cc
+++ b/gtk2_ardour/audio_region_view.cc
@@ -568,7 +568,7 @@ AudioRegionView::reset_fade_in_shape_width (boost::shared_ptr<AudioRegion> ar, f
if (fade_in_handle->visible()) {
//see comment for drag_start
- entered(false);
+ entered();
}
if (pwidth < 5) {
@@ -653,7 +653,7 @@ AudioRegionView::reset_fade_out_shape_width (boost::shared_ptr<AudioRegion> ar,
if (fade_out_handle->visible()) {
//see comment for drag_start
- entered(false);
+ entered();
}
/* don't show shape if its too small */
@@ -1051,9 +1051,9 @@ AudioRegionView::update_envelope_visibility ()
}
if (Config->get_show_region_gain() || trackview.editor().current_mouse_mode() == Editing::MouseDraw || trackview.editor().current_mouse_mode() == Editing::MouseRange ) {
- gain_line->add_visibility (AutomationLine::Line);
+ gain_line->set_visibility (AutomationLine::VisibleAspects(AutomationLine::ControlPoints|AutomationLine::Line));
} else {
- gain_line->hide ();
+ gain_line->set_visibility (AutomationLine::VisibleAspects(0));
}
}
@@ -1298,17 +1298,14 @@ AudioRegionView::add_ghost (TimeAxisView& tv)
}
void
-AudioRegionView::entered (bool internal_editing)
+AudioRegionView::entered ()
{
trackview.editor().set_current_trimmable (_region);
trackview.editor().set_current_movable (_region);
-
- if (gain_line) {
- /* these may or may not be visible depending on mouse mode */
- gain_line->add_visibility (AutomationLine::ControlPoints);
- }
- if (!internal_editing && ( trackview.editor().current_mouse_mode() == Editing::MouseObject ) ) {
+ update_envelope_visibility();
+
+ if ((trackview.editor().current_mouse_mode() == Editing::MouseObject)) {
if (start_xfade_rect) {
start_xfade_rect->set_outline (true);
}
@@ -1614,7 +1611,7 @@ AudioRegionView::drag_end ()
// if fade_in_trim_handle or fade_out_trim_handle should
// be visible. -- If the fade_in_handle is visible
// we have focus and are not in internal edit mode.
- entered(false);
+ entered();
}
}
diff --git a/gtk2_ardour/audio_region_view.h b/gtk2_ardour/audio_region_view.h
index 9c2c9f7c12..598142099e 100644
--- a/gtk2_ardour/audio_region_view.h
+++ b/gtk2_ardour/audio_region_view.h
@@ -109,7 +109,7 @@ class AudioRegionView : public RegionView
void show_region_editor ();
- virtual void entered (bool);
+ virtual void entered ();
virtual void exited ();
void thaw_after_trim ();
diff --git a/gtk2_ardour/audio_streamview.cc b/gtk2_ardour/audio_streamview.cc
index 1c54233131..a083c2a196 100644
--- a/gtk2_ardour/audio_streamview.cc
+++ b/gtk2_ardour/audio_streamview.cc
@@ -143,12 +143,6 @@ AudioStreamView::add_region_view_internal (boost::shared_ptr<Region> r, bool wai
region_views.push_front (region_view);
- if (_trackview.editor().internal_editing()) {
- region_view->hide_rect ();
- } else {
- region_view->show_rect ();
- }
-
/* catch region going away */
r->DropReferences.connect (*this, invalidator (*this), boost::bind (&AudioStreamView::remove_region_view, this, boost::weak_ptr<Region> (r)), gui_context());
diff --git a/gtk2_ardour/audio_time_axis.cc b/gtk2_ardour/audio_time_axis.cc
index 60bcf8d6af..533c5ffc35 100644
--- a/gtk2_ardour/audio_time_axis.cc
+++ b/gtk2_ardour/audio_time_axis.cc
@@ -314,19 +314,3 @@ AudioTimeAxisView::build_automation_action_menu (bool for_selection)
{
RouteTimeAxisView::build_automation_action_menu (for_selection);
}
-
-void
-AudioTimeAxisView::enter_internal_edit_mode ()
-{
- if (audio_view()) {
- audio_view()->enter_internal_edit_mode ();
- }
-}
-
-void
-AudioTimeAxisView::leave_internal_edit_mode ()
-{
- if (audio_view()) {
- audio_view()->leave_internal_edit_mode ();
- }
-}
diff --git a/gtk2_ardour/audio_time_axis.h b/gtk2_ardour/audio_time_axis.h
index 4a44905d3b..521cef8c2a 100644
--- a/gtk2_ardour/audio_time_axis.h
+++ b/gtk2_ardour/audio_time_axis.h
@@ -76,9 +76,6 @@ class AudioTimeAxisView : public RouteTimeAxisView
/* Overridden from parent to store display state */
guint32 show_at (double y, int& nth, Gtk::VBox *parent);
- void enter_internal_edit_mode ();
- void leave_internal_edit_mode ();
-
void create_automation_child (const Evoral::Parameter& param, bool show);
void first_idle ();
diff --git a/gtk2_ardour/automation_region_view.cc b/gtk2_ardour/automation_region_view.cc
index c5afcadfe0..ec1fa523a4 100644
--- a/gtk2_ardour/automation_region_view.cc
+++ b/gtk2_ardour/automation_region_view.cc
@@ -106,13 +106,12 @@ AutomationRegionView::canvas_group_event (GdkEvent* ev)
PublicEditor& e = trackview.editor ();
- if (!trackview.editor().internal_editing() &&
- e.current_mouse_mode() != Editing::MouseDraw) {
+ if (!trackview.editor().internal_editing()) {
// not in internal edit mode, so just act like a normal region
return RegionView::canvas_group_event (ev);
}
- if (ev->type == GDK_BUTTON_PRESS && e.current_mouse_mode() == Editing::MouseObject) {
+ if (ev->type == GDK_BUTTON_PRESS && e.current_mouse_mode() == Editing::MouseContent) {
/* XXX: icky dcast to Editor */
e.drags()->set (new EditorRubberbandSelectDrag (dynamic_cast<Editor*> (&e), group), ev);
@@ -128,7 +127,7 @@ AutomationRegionView::canvas_group_event (GdkEvent* ev)
if (e.drags()->end_grab (ev)) {
return true;
} else if (e.current_mouse_mode() != Editing::MouseDraw &&
- e.current_mouse_mode() != Editing::MouseObject) {
+ e.current_mouse_mode() != Editing::MouseContent) {
return RegionView::canvas_group_event (ev);
}
@@ -285,7 +284,7 @@ AutomationRegionView::region_resized (const PBD::PropertyChange& what_changed)
void
-AutomationRegionView::entered (bool)
+AutomationRegionView::entered ()
{
if (_line) {
_line->track_entered();
diff --git a/gtk2_ardour/automation_region_view.h b/gtk2_ardour/automation_region_view.h
index a41c57c782..c9b7d47f18 100644
--- a/gtk2_ardour/automation_region_view.h
+++ b/gtk2_ardour/automation_region_view.h
@@ -79,7 +79,7 @@ protected:
void region_resized (const PBD::PropertyChange&);
bool canvas_group_event(GdkEvent* ev);
void add_automation_event (GdkEvent* event, framepos_t when, double y, bool with_guard_points);
- void entered (bool);
+ void entered();
void exited();
private:
diff --git a/gtk2_ardour/automation_streamview.cc b/gtk2_ardour/automation_streamview.cc
index a336bd6db5..16dab909c7 100644
--- a/gtk2_ardour/automation_streamview.cc
+++ b/gtk2_ardour/automation_streamview.cc
@@ -286,9 +286,6 @@ AutomationStreamView::clear ()
void
AutomationStreamView::get_selectables (framepos_t start, framepos_t end, double botfrac, double topfrac, list<Selectable*>& results)
{
- if (!_trackview.editor().internal_editing()) {
- return; // TODO: selection of automation regions
- }
for (list<RegionView*>::iterator i = region_views.begin(); i != region_views.end(); ++i) {
AutomationRegionView* arv = dynamic_cast<AutomationRegionView*> (*i);
if (arv) {
diff --git a/gtk2_ardour/editing_syms.h b/gtk2_ardour/editing_syms.h
index 610aff2a86..a958776305 100644
--- a/gtk2_ardour/editing_syms.h
+++ b/gtk2_ardour/editing_syms.h
@@ -72,6 +72,7 @@ MOUSEMODE(MouseCut)
MOUSEMODE(MouseTimeFX)
MOUSEMODE(MouseAudition)
MOUSEMODE(MouseDraw)
+MOUSEMODE(MouseContent)
/* Changing this order will break the menu */
ZOOMFOCUS(ZoomFocusLeft)
diff --git a/gtk2_ardour/editor.bindings b/gtk2_ardour/editor.bindings
index 7c23fb2cdc..4ef4acbd86 100644
--- a/gtk2_ardour/editor.bindings
+++ b/gtk2_ardour/editor.bindings
@@ -35,7 +35,7 @@
<Binding action="Region/quantize-region" key="q"/>
<Binding action="Region/legatize-region" key="Primary-apostrophe"/>
<Binding action="Region/remove-overlap" key="Secondary-apostrophe"/>
- <Binding action="MouseMode/toggle-internal-edit" key="e"/>
+ <Binding action="MouseMode/set-mouse-mode-content" key="e"/>
<Binding action="Editor/select-all-before-edit-cursor" key="Primary-e"/>
<Binding action="Region/export-region" key="Primary-Level4-e"/>
<Binding action="Main/ExportSession" key="Level4-e"/>
diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc
index e3c03db510..c91337bb6e 100644
--- a/gtk2_ardour/editor.cc
+++ b/gtk2_ardour/editor.cc
@@ -400,7 +400,6 @@ Editor::Editor ()
zoom_focus = ZoomFocusLeft;
_edit_point = EditAtMouse;
- _internal_editing = false;
current_canvas_cursor = 0;
_visible_track_count = -1;
@@ -670,11 +669,6 @@ Editor::Editor ()
_snap_mode = SnapOff;
set_snap_mode (_snap_mode);
set_mouse_mode (MouseObject, true);
- pre_internal_mouse_mode = MouseObject;
- pre_internal_snap_type = _snap_type;
- pre_internal_snap_mode = _snap_mode;
- internal_snap_type = _snap_type;
- internal_snap_mode = _snap_mode;
set_edit_point_preference (EditAtMouse, true);
_playlist_selector = new PlaylistSelector();
@@ -877,7 +871,7 @@ Editor::set_entered_regionview (RegionView* rv)
entered_regionview = rv;
if (entered_regionview != 0) {
- entered_regionview->entered (internal_editing ());
+ entered_regionview->entered ();
}
if (!_all_region_actions_sensitized && _last_region_menu_was_main) {
@@ -2092,12 +2086,6 @@ Editor::set_snap_mode (SnapMode mode)
{
string str = snap_mode_strings[(int)mode];
- if (_internal_editing) {
- internal_snap_mode = mode;
- } else {
- pre_internal_snap_mode = mode;
- }
-
_snap_mode = mode;
if (str != snap_mode_selector.get_text ()) {
@@ -2249,23 +2237,6 @@ Editor::set_state (const XMLNode& node, int /*version*/)
snap_mode_selection_done((SnapMode) string_2_enum (prop->value(), _snap_mode));
}
- if ((prop = node.property ("internal-snap-to"))) {
- internal_snap_type = (SnapType) string_2_enum (prop->value(), internal_snap_type);
- }
-
- if ((prop = node.property ("internal-snap-mode"))) {
- internal_snap_mode = (SnapMode) string_2_enum (prop->value(), internal_snap_mode);
- }
-
- if ((prop = node.property ("pre-internal-snap-to"))) {
- pre_internal_snap_type = (SnapType) string_2_enum (prop->value(), pre_internal_snap_type);
- }
-
-
- if ((prop = node.property ("pre-internal-snap-mode"))) {
- pre_internal_snap_mode = (SnapMode) string_2_enum (prop->value(), pre_internal_snap_mode);
- }
-
if ((prop = node.property ("mouse-mode"))) {
MouseMode m = str2mousemode(prop->value());
set_mouse_mode (m, true);
@@ -2287,16 +2258,6 @@ Editor::set_state (const XMLNode& node, int /*version*/)
reset_y_origin (atof (prop->value ()));
}
- if ((prop = node.property ("internal-edit"))) {
- bool yn = string_is_affirmative (prop->value());
- RefPtr<Action> act = ActionManager::get_action (X_("MouseMode"), X_("toggle-internal-edit"));
- if (act) {
- RefPtr<ToggleAction> tact = RefPtr<ToggleAction>::cast_dynamic(act);
- tact->set_active (!yn);
- tact->set_active (yn);
- }
- }
-
if ((prop = node.property ("join-object-range"))) {
RefPtr<Action> act = ActionManager::get_action (X_("MouseMode"), X_("set-mouse-mode-object-range"));
bool yn = string_is_affirmative (prop->value());
@@ -2467,10 +2428,6 @@ Editor::get_state ()
node->add_property ("zoom", buf);
node->add_property ("snap-to", enum_2_string (_snap_type));
node->add_property ("snap-mode", enum_2_string (_snap_mode));
- node->add_property ("internal-snap-to", enum_2_string (internal_snap_type));
- node->add_property ("internal-snap-mode", enum_2_string (internal_snap_mode));
- node->add_property ("pre-internal-snap-to", enum_2_string (pre_internal_snap_type));
- node->add_property ("pre-internal-snap-mode", enum_2_string (pre_internal_snap_mode));
node->add_property ("edit-point", enum_2_string (_edit_point));
snprintf (buf, sizeof(buf), "%d", _visible_track_count);
node->add_property ("visible-track-count", buf);
@@ -2488,7 +2445,6 @@ Editor::get_state ()
node->add_property ("stationary-playhead", _stationary_playhead ? "yes" : "no");
node->add_property ("region-list-sort-type", enum_2_string (_regions->sort_type ()));
node->add_property ("mouse-mode", enum2str(mouse_mode));
- node->add_property ("internal-edit", _internal_editing ? "yes" : "no");
node->add_property ("join-object-range", smart_mode_action->get_active () ? "yes" : "no");
Glib::RefPtr<Action> act = ActionManager::get_action (X_("Editor"), X_("show-editor-mixer"));
@@ -2863,7 +2819,7 @@ Editor::setup_toolbar ()
mouse_mode_size_group->add_widget (mouse_timefx_button);
mouse_mode_size_group->add_widget (mouse_audition_button);
mouse_mode_size_group->add_widget (mouse_draw_button);
- mouse_mode_size_group->add_widget (internal_edit_button);
+ mouse_mode_size_group->add_widget (mouse_content_button);
mouse_mode_size_group->add_widget (zoom_in_button);
mouse_mode_size_group->add_widget (zoom_out_button);
@@ -2902,7 +2858,7 @@ Editor::setup_toolbar ()
mouse_mode_hbox->pack_start (mouse_timefx_button, false, false);
mouse_mode_hbox->pack_start (mouse_audition_button, false, false);
mouse_mode_hbox->pack_start (mouse_draw_button, false, false);
- mouse_mode_hbox->pack_start (internal_edit_button, false, false, 0);
+ mouse_mode_hbox->pack_start (mouse_content_button, false, false);
}
mouse_mode_vbox->pack_start (*mouse_mode_hbox);
@@ -3193,7 +3149,7 @@ Editor::setup_tooltips ()
ARDOUR_UI::instance()->set_tip (mouse_draw_button, _("Draw/Edit Gain/Notes/Automation"));
ARDOUR_UI::instance()->set_tip (mouse_timefx_button, _("Stretch/Shrink Regions and MIDI Notes"));
ARDOUR_UI::instance()->set_tip (mouse_audition_button, _("Listen to Specific Regions"));
- ARDOUR_UI::instance()->set_tip (internal_edit_button, _("Note Level Editing"));
+ ARDOUR_UI::instance()->set_tip (mouse_content_button, _("Select/move contents (notes and automation)"));
ARDOUR_UI::instance()->set_tip (*_group_tabs, _("Groups: click to (de)activate\nContext-click for other operations"));
ARDOUR_UI::instance()->set_tip (nudge_forward_button, _("Nudge Region/Selection Later"));
ARDOUR_UI::instance()->set_tip (nudge_backward_button, _("Nudge Region/Selection Earlier"));
@@ -5110,12 +5066,6 @@ Editor::add_routes (RouteList& routes)
rtv->effective_gain_display ();
- if (internal_editing()) {
- rtv->enter_internal_edit_mode ();
- } else {
- rtv->leave_internal_edit_mode ();
- }
-
rtv->view()->RegionViewAdded.connect (sigc::mem_fun (*this, &Editor::region_view_added));
rtv->view()->RegionViewRemoved.connect (sigc::mem_fun (*this, &Editor::region_view_removed));
}
diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h
index fa86833dc6..168f3dcc90 100644
--- a/gtk2_ardour/editor.h
+++ b/gtk2_ardour/editor.h
@@ -178,9 +178,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
Editing::MidiEditMode current_midi_edit_mode () const;
void remove_midi_note (ArdourCanvas::Item *, GdkEvent *);
- bool internal_editing() const { return _internal_editing ; }
- void set_internal_edit (bool yn);
- bool toggle_internal_editing_from_double_click (GdkEvent*);
+ bool internal_editing() const;
void foreach_time_axis_view (sigc::slot<void,TimeAxisView&>);
void add_to_idle_resize (TimeAxisView*, int32_t);
@@ -546,12 +544,6 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
void set_samples_per_pixel (framecnt_t);
Editing::MouseMode mouse_mode;
- Editing::MouseMode pre_internal_mouse_mode;
- Editing::SnapType pre_internal_snap_type;
- Editing::SnapMode pre_internal_snap_mode;
- Editing::SnapType internal_snap_type;
- Editing::SnapMode internal_snap_mode;
- bool _internal_editing;
Editing::MouseMode effective_mouse_mode () const;
enum JoinObjectRangeState {
@@ -1641,6 +1633,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
ArdourButton mouse_draw_button;
ArdourButton mouse_move_button;
ArdourButton mouse_timefx_button;
+ ArdourButton mouse_content_button;
ArdourButton mouse_audition_button;
ArdourButton mouse_cut_button;
@@ -1651,9 +1644,6 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
void mouse_mode_object_range_toggled ();
bool ignore_mouse_mode_toggle;
- ArdourButton internal_edit_button;
- void toggle_internal_editing ();
-
bool mouse_select_button_release (GdkEventButton*);
Gtk::VBox automation_box;
diff --git a/gtk2_ardour/editor_actions.cc b/gtk2_ardour/editor_actions.cc
index befd2fa1ae..7c3365f91b 100644
--- a/gtk2_ardour/editor_actions.cc
+++ b/gtk2_ardour/editor_actions.cc
@@ -476,6 +476,11 @@ Editor::register_actions ()
mouse_timefx_button.set_image (::get_icon("tool_stretch"));
mouse_timefx_button.set_name ("mouse mode button");
+ act = ActionManager::register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-content", _("Content Tool"), sigc::bind (sigc::mem_fun(*this, &Editor::mouse_mode_toggled), Editing::MouseContent));
+ mouse_content_button.set_related_action (act);
+ mouse_content_button.set_image (::get_icon("tool_content"));
+ mouse_content_button.set_name ("mouse mode button");
+
if(!Profile->get_mixbus()) {
act = ActionManager::register_radio_action (mouse_mode_actions, mouse_mode_group, "set-mouse-mode-cut", _("Cut Tool"), sigc::bind (sigc::mem_fun(*this, &Editor::mouse_mode_toggled), Editing::MouseCut));
mouse_cut_button.set_related_action (act);
@@ -485,11 +490,6 @@ Editor::register_actions ()
ActionManager::register_action (editor_actions, "step-mouse-mode", _("Step Mouse Mode"), sigc::bind (sigc::mem_fun(*this, &Editor::step_mouse_mode), true));
- act = ActionManager::register_toggle_action (mouse_mode_actions, "toggle-internal-edit", _("Edit MIDI"), sigc::mem_fun(*this, &Editor::toggle_internal_editing));
- internal_edit_button.set_related_action (act);
- internal_edit_button.set_image (::get_icon("tool_note"));
- internal_edit_button.set_name ("mouse mode button");
-
RadioAction::Group edit_point_group;
ActionManager::register_radio_action (editor_actions, edit_point_group, X_("edit-at-playhead"), _("Playhead"), (sigc::bind (sigc::mem_fun(*this, &Editor::edit_point_chosen), Editing::EditAtPlayhead)));
ActionManager::register_radio_action (editor_actions, edit_point_group, X_("edit-at-mouse"), _("Mouse"), (sigc::bind (sigc::mem_fun(*this, &Editor::edit_point_chosen), Editing::EditAtMouse)));
@@ -1759,16 +1759,6 @@ Editor::reset_canvas_action_sensitivity (bool onoff)
}
void
-Editor::toggle_internal_editing ()
-{
- Glib::RefPtr<Gtk::Action> act = ActionManager::get_action (X_("MouseMode"), X_("toggle-internal-edit"));
- if (act) {
- Glib::RefPtr<Gtk::ToggleAction> tact = Glib::RefPtr<Gtk::ToggleAction>::cast_dynamic(act);
- set_internal_edit (tact->get_active());
- }
-}
-
-void
Editor::register_region_actions ()
{
_region_actions = ActionGroup::create (X_("Region"));
diff --git a/gtk2_ardour/editor_canvas.cc b/gtk2_ardour/editor_canvas.cc
index 0c2faf8213..d923489d7c 100644
--- a/gtk2_ardour/editor_canvas.cc
+++ b/gtk2_ardour/editor_canvas.cc
@@ -1023,41 +1023,16 @@ Editor::which_grabber_cursor () const
{
Gdk::Cursor* c = _cursors->grabber;
- if (_internal_editing) {
- switch (mouse_mode) {
- case MouseDraw:
- c = _cursors->midi_pencil;
- break;
-
- case MouseObject:
- c = _cursors->grabber_note;
- break;
-
- case MouseTimeFX:
- c = _cursors->midi_resize;
- break;
-
- case MouseRange:
- c = _cursors->grabber_note;
- break;
-
- default:
- break;
- }
-
- } else {
-
- switch (_edit_point) {
- case EditAtMouse:
- c = _cursors->grabber_edit_point;
- break;
- default:
- boost::shared_ptr<Movable> m = _movable.lock();
- if (m && m->locked()) {
- c = _cursors->speaker;
- }
- break;
+ switch (_edit_point) {
+ case EditAtMouse:
+ c = _cursors->grabber_edit_point;
+ break;
+ default:
+ boost::shared_ptr<Movable> m = _movable.lock();
+ if (m && m->locked()) {
+ c = _cursors->speaker;
}
+ break;
}
return c;
@@ -1096,9 +1071,6 @@ Editor::which_mode_cursor () const
switch (mouse_mode) {
case MouseRange:
mode_cursor = _cursors->selector;
- if (_internal_editing) {
- mode_cursor = which_grabber_cursor();
- }
break;
case MouseCut:
@@ -1106,6 +1078,7 @@ Editor::which_mode_cursor () const
break;
case MouseObject:
+ case MouseContent:
/* don't use mode cursor, pick a grabber cursor based on the item */
break;
@@ -1123,7 +1096,7 @@ Editor::which_mode_cursor () const
}
/* up-down cursor as a cue that automation can be dragged up and down when in join object/range mode */
- if (!_internal_editing && get_smart_mode() ) {
+ if (get_smart_mode()) {
double x, y;
get_pointer_position (x, y);
@@ -1161,18 +1134,14 @@ Editor::which_track_cursor () const
{
Gdk::Cursor* cursor = 0;
- assert (mouse_mode == MouseObject || get_smart_mode());
-
- if (!_internal_editing) {
- switch (_join_object_range_state) {
- case JOIN_OBJECT_RANGE_NONE:
- case JOIN_OBJECT_RANGE_OBJECT:
- cursor = which_grabber_cursor ();
- break;
- case JOIN_OBJECT_RANGE_RANGE:
- cursor = _cursors->selector;
- break;
- }
+ switch (_join_object_range_state) {
+ case JOIN_OBJECT_RANGE_NONE:
+ case JOIN_OBJECT_RANGE_OBJECT:
+ cursor = which_grabber_cursor ();
+ break;
+ case JOIN_OBJECT_RANGE_RANGE:
+ cursor = _cursors->selector;
+ break;
}
return cursor;
diff --git a/gtk2_ardour/editor_mouse.cc b/gtk2_ardour/editor_mouse.cc
index 19351d49e4..68899e67a2 100644
--- a/gtk2_ardour/editor_mouse.cc
+++ b/gtk2_ardour/editor_mouse.cc
@@ -259,6 +259,10 @@ Editor::set_mouse_mode (MouseMode m, bool force)
act = ActionManager::get_action (X_("MouseMode"), X_("set-mouse-mode-timefx"));
break;
+ case MouseContent:
+ act = ActionManager::get_action (X_("MouseMode"), X_("set-mouse-mode-content"));
+ break;
+
case MouseAudition:
act = ActionManager::get_action (X_("MouseMode"), X_("set-mouse-mode-audition"));
break;
@@ -307,6 +311,10 @@ Editor::mouse_mode_toggled (MouseMode m)
act = ActionManager::get_action (X_("MouseMode"), X_("set-mouse-mode-timefx"));
break;
+ case MouseContent:
+ act = ActionManager::get_action (X_("MouseMode"), X_("set-mouse-mode-content"));
+ break;
+
case MouseAudition:
act = ActionManager::get_action (X_("MouseMode"), X_("set-mouse-mode-audition"));
break;
@@ -350,6 +358,12 @@ Editor::mouse_mode_toggled (MouseMode m)
MouseModeChanged (); /* EMIT SIGNAL */
}
+bool
+Editor::internal_editing() const
+{
+ return mouse_mode == Editing::MouseContent || mouse_mode == Editing::MouseDraw;
+}
+
void
Editor::update_time_selection_display ()
{
@@ -366,7 +380,7 @@ Editor::update_time_selection_display ()
void
Editor::step_mouse_mode (bool next)
{
- const int n_mouse_modes = (int)MouseDraw + 1;
+ const int n_mouse_modes = (int)MouseContent + 1;
int current = (int)current_mouse_mode();
if (next) {
set_mouse_mode((MouseMode)((current + 1) % n_mouse_modes));
@@ -375,22 +389,6 @@ Editor::step_mouse_mode (bool next)
}
}
-bool
-Editor::toggle_internal_editing_from_double_click (GdkEvent* event)
-{
- if (_drags->active()) {
- _drags->end_grab (event);
- }
-
- ActionManager::do_action ("MouseMode", "toggle-internal-edit");
-
- /* prevent reversion of edit cursor on button release */
-
- pre_press_cursor = 0;
-
- return true;
-}
-
void
Editor::button_selection (ArdourCanvas::Item* /*item*/, GdkEvent* event, ItemType item_type)
{
@@ -439,9 +437,7 @@ Editor::button_selection (ArdourCanvas::Item* /*item*/, GdkEvent* event, ItemTyp
(mouse_mode != MouseAudition || item_type != RegionItem) &&
(mouse_mode != MouseTimeFX || item_type != RegionItem) &&
(mouse_mode != MouseDraw)) ||
- ((event->type != GDK_BUTTON_PRESS && event->type != GDK_BUTTON_RELEASE) || event->button.button > 3) ||
- (internal_editing() && mouse_mode != MouseTimeFX)) {
-
+ ((event->type != GDK_BUTTON_PRESS && event->type != GDK_BUTTON_RELEASE) || event->button.button > 3)) {
return;
}
@@ -534,6 +530,8 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
them to be modeless.
*/
+ NoteBase* note = NULL;
+
switch (item_type) {
case PlayheadCursorItem:
_drags->set (new CursorDrag (this, *playhead_cursor, true), event);
@@ -655,11 +653,6 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
}
}
- /* there is no Range mode when in internal edit mode */
- if (eff == MouseRange && internal_editing()) {
- eff = MouseObject;
- }
-
switch (eff) {
case MouseRange:
switch (item_type) {
@@ -686,19 +679,12 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
break;
case StreamItem:
- if (internal_editing()) {
- if (dynamic_cast<MidiTimeAxisView*> (clicked_axisview)) {
- _drags->set (new RegionCreateDrag (this, item, clicked_axisview), event);
- return true;
- }
+ if (Keyboard::modifier_state_equals (event->button.state, Keyboard::RangeSelectModifier)) {
+ _drags->set (new SelectionDrag (this, item, SelectionDrag::SelectionExtend), event);
} else {
- if (Keyboard::modifier_state_equals (event->button.state, Keyboard::RangeSelectModifier)) {
- _drags->set (new SelectionDrag (this, item, SelectionDrag::SelectionExtend), event);
- } else {
- _drags->set (new SelectionDrag (this, item, SelectionDrag::CreateSelection), event);
- }
- return true;
+ _drags->set (new SelectionDrag (this, item, SelectionDrag::CreateSelection), event);
}
+ return true;
break;
case RegionViewNameHighlight:
@@ -709,12 +695,10 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
break;
default:
- if (!internal_editing()) {
- if (Keyboard::modifier_state_equals (event->button.state, Keyboard::RangeSelectModifier)) {
- _drags->set (new SelectionDrag (this, item, SelectionDrag::SelectionExtend), event);
- } else {
- _drags->set (new SelectionDrag (this, item, SelectionDrag::CreateSelection), event);
- }
+ if (Keyboard::modifier_state_equals (event->button.state, Keyboard::RangeSelectModifier)) {
+ _drags->set (new SelectionDrag (this, item, SelectionDrag::SelectionExtend), event);
+ } else {
+ _drags->set (new SelectionDrag (this, item, SelectionDrag::CreateSelection), event);
}
}
return true;
@@ -740,26 +724,42 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
}
break;
- case MouseObject:
+ case MouseContent:
switch (item_type) {
case NoteItem:
/* Existing note: allow trimming/motion */
- if (internal_editing()) {
- NoteBase* cn = reinterpret_cast<NoteBase*> (item->get_data ("notebase"));
- assert (cn);
- if (cn->big_enough_to_trim() && cn->mouse_near_ends()) {
+ if ((note = reinterpret_cast<NoteBase*> (item->get_data ("notebase")))) {
+ if (note->big_enough_to_trim() && note->mouse_near_ends()) {
_drags->set (new NoteResizeDrag (this, item), event, current_canvas_cursor);
} else {
_drags->set (new NoteDrag (this, item), event);
}
+ }
+ return true;
+
+ case ControlPointItem:
+ _drags->set (new ControlPointDrag (this, item), event);
+ return true;
+ break;
+
+ case StreamItem:
+ if (dynamic_cast<MidiTimeAxisView*> (clicked_axisview)) {
+ _drags->set (new RegionCreateDrag (this, item, clicked_axisview), event);
return true;
}
break;
+ case AutomationTrackItem:
+ /* rubberband drag to select automation points */
+ _drags->set (new EditorRubberbandSelectDrag (this, item), event);
+ break;
+
default:
break;
}
+ break;
+ case MouseObject:
if (Keyboard::modifier_state_contains (event->button.state, Keyboard::ModifierMask(Keyboard::PrimaryModifier|Keyboard::SecondaryModifier)) &&
event->type == GDK_BUTTON_PRESS) {
@@ -809,10 +809,6 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
break;
}
- if (internal_editing ()) {
- break;
- }
-
/* click on a normal region view */
if (Keyboard::modifier_state_contains (event->button.state, Keyboard::CopyModifier)) {
add_region_copy_drag (item, event, clicked_regionview);
@@ -823,10 +819,6 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
}
-// if (!internal_editing() && (_join_object_range_state == JOIN_OBJECT_RANGE_RANGE && !selection->regions.empty())) {
-// _drags->add (new SelectionDrag (this, clicked_axisview->get_selection_rect (clicked_selection)->rect, SelectionDrag::SelectionMove));
-// }
-
_drags->start_grab (event);
return true;
break;
@@ -869,15 +861,8 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
break;
case StreamItem:
- if (internal_editing()) {
- if (dynamic_cast<MidiTimeAxisView*> (clicked_axisview)) {
- _drags->set (new RegionCreateDrag (this, item, clicked_axisview), event);
- }
- return true;
- } else {
- _drags->set (new EditorRubberbandSelectDrag (this, item), event);
- }
- break;
+ _drags->set (new EditorRubberbandSelectDrag (this, item), event);
+ return true;
case AutomationTrackItem:
{
@@ -961,28 +946,23 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
break;
case NoteItem:
- /* Existing note: allow trimming/motion */
- if (internal_editing()) {
- /* trim notes if we're in internal edit mode and near the ends of the note */
- NoteBase* cn = reinterpret_cast<NoteBase*>(item->get_data ("notebase"));
- assert (cn);
- if (cn->big_enough_to_trim() && cn->mouse_near_ends()) {
+ if ((note = reinterpret_cast<NoteBase*>(item->get_data ("notebase")))) {
+ if (note->big_enough_to_trim() && note->mouse_near_ends()) {
+ /* Note is big and pointer is near the end, trim */
_drags->set (new NoteResizeDrag (this, item), event, current_canvas_cursor);
} else {
+ /* Drag note */
_drags->set (new NoteDrag (this, item), event);
}
return true;
}
- break;
+ return true;
case StreamItem:
- if (internal_editing()) {
- if (dynamic_cast<MidiTimeAxisView*> (clicked_axisview)) {
- _drags->set (new RegionCreateDrag (this, item, clicked_axisview), event);
- }
- return true;
+ if (dynamic_cast<MidiTimeAxisView*> (clicked_axisview)) {
+ _drags->set (new RegionCreateDrag (this, item, clicked_axisview), event);
}
- break;
+ return true;
default:
break;
@@ -991,12 +971,12 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
break;
case MouseTimeFX:
- if (internal_editing() && item_type == NoteItem ) {
- /* drag notes if we're in internal edit mode */
- NoteBase* cn = reinterpret_cast<NoteBase*>(item->get_data ("notebase"));
- assert (cn);
- if (cn->big_enough_to_trim()) {
- _drags->set (new NoteResizeDrag (this, item), event, current_canvas_cursor);
+ if (item_type == NoteItem) {
+ /* resize-drag notes */
+ if ((note = reinterpret_cast<NoteBase*>(item->get_data ("notebase")))) {
+ if (note->big_enough_to_trim()) {
+ _drags->set (new NoteResizeDrag (this, item), event, current_canvas_cursor);
+ }
}
return true;
} else if (clicked_regionview) {
@@ -1031,11 +1011,6 @@ Editor::button_press_handler_2 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
case MouseObject:
switch (item_type) {
case RegionItem:
- if (internal_editing ()) {
- /* no region drags in internal edit mode */
- return false;
- }
-
if (Keyboard::modifier_state_contains (event->button.state, Keyboard::CopyModifier)) {
add_region_copy_drag (item, event, clicked_regionview);
} else {
@@ -1061,9 +1036,7 @@ Editor::button_press_handler_2 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
case LeftFrameHandle:
case RightFrameHandle:
- if (!internal_editing ()) {
- _drags->set (new TrimDrag (this, item, clicked_regionview, selection->regions.by_layer()), event);
- }
+ _drags->set (new TrimDrag (this, item, clicked_regionview, selection->regions.by_layer()), event);
return true;
break;
@@ -1114,48 +1087,6 @@ Editor::button_press_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemTyp
return true;
}
- if (internal_editing()) {
- bool leave_internal_edit_mode = false;
-
- switch (item_type) {
- case NoteItem:
- break;
-
- case RegionItem:
- if (!dynamic_cast<MidiRegionView*> (clicked_regionview) && !dynamic_cast<AutomationRegionView*> (clicked_regionview)) {
- leave_internal_edit_mode = true;
- }
- break;
-
- case PlayheadCursorItem:
- case MarkerItem:
- case TempoMarkerItem:
- case MeterMarkerItem:
- case MarkerBarItem:
- case TempoBarItem:
- case MeterBarItem:
- case RangeMarkerBarItem:
- case CdMarkerBarItem:
- case TransportMarkerBarItem:
- case StreamItem:
- case TimecodeRulerItem:
- case SamplesRulerItem:
- case MinsecRulerItem:
- case BBTRulerItem:
- /* button press on these items never does anything to
- change the editing mode.
- */
- break;
-
- default:
- break;
- }
-
- if (leave_internal_edit_mode) {
- ActionManager::do_action ("MouseMode", "toggle-internal-edit");
- }
- }
-
button_selection (item, event, item_type);
if (!_drags->active () &&
@@ -1663,7 +1594,7 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
case FadeInHandleItem:
case FadeInTrimHandleItem:
- if (mouse_mode == MouseObject && !internal_editing()) {
+ if (mouse_mode == MouseObject) {
ArdourCanvas::Rectangle *rect = dynamic_cast<ArdourCanvas::Rectangle *> (item);
if (rect) {
RegionView* rv = static_cast<RegionView*>(item->get_data ("regionview"));
@@ -1674,7 +1605,7 @@ Editor::enter_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType item_
case FadeOutHandleItem:
case FadeOutTrimHandleItem:
- if (mouse_mode == MouseObject && !internal_editing()) {
+ if (mouse_mode == MouseObject) {
ArdourCanvas::Rectangle *rect = dynamic_cast<ArdourCanvas::Rectangle *> (item);
if (rect) {
RegionView* rv = static_cast<RegionView*>(item->get_data ("regionview"));
@@ -2374,44 +2305,6 @@ Editor::escape ()
reset_focus ();
}
-void
-Editor::set_internal_edit (bool yn)
-{
- if (_internal_editing == yn) {
- return;
- }
-
- _internal_editing = yn;
-
- if (yn) {
- pre_internal_mouse_mode = mouse_mode;
- pre_internal_snap_type = _snap_type;
- pre_internal_snap_mode = _snap_mode;
-
- for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
- (*i)->enter_internal_edit_mode ();
- }
-
- set_snap_to (internal_snap_type);
- set_snap_mode (internal_snap_mode);
-
- } else {
-
- internal_snap_mode = _snap_mode;
- internal_snap_type = _snap_type;
-
- for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
- (*i)->leave_internal_edit_mode ();
- }
-
- set_snap_to (pre_internal_snap_type);
- set_snap_mode (pre_internal_snap_mode);
- }
-
- reset_canvas_cursor ();
- MouseModeChanged ();
-}
-
/** Update _join_object_range_state which indicate whether we are over the top
* or bottom half of a route view, used by the `join object/range' tool
* mode. Coordinates in canvas space.
@@ -2419,7 +2312,7 @@ Editor::set_internal_edit (bool yn)
void
Editor::update_join_object_range_location (double y)
{
- if (_internal_editing || !get_smart_mode()) {
+ if (!get_smart_mode()) {
_join_object_range_state = JOIN_OBJECT_RANGE_NONE;
return;
}
diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc
index 9f2f4acccf..77dad5bf29 100644
--- a/gtk2_ardour/editor_ops.cc
+++ b/gtk2_ardour/editor_ops.cc
@@ -3853,20 +3853,15 @@ Editor::cut_copy (CutCopyOp op)
return;
}
- if (internal_editing()) {
-
- switch (effective_mouse_mode()) {
- case MouseObject:
- case MouseRange:
- begin_reversible_command (opname + ' ' + X_("MIDI"));
- cut_copy_midi (op);
- commit_reversible_command ();
- break;
- default:
- break;
- }
-
+ switch (mouse_mode) {
+ case MouseDraw:
+ case MouseContent:
+ begin_reversible_command (opname + ' ' + X_("MIDI"));
+ cut_copy_midi (op);
+ commit_reversible_command ();
return;
+ default:
+ break;
}
bool did_edit = false;
diff --git a/gtk2_ardour/editor_selection.cc b/gtk2_ardour/editor_selection.cc
index 2699ba72f3..93dd7c15fb 100644
--- a/gtk2_ardour/editor_selection.cc
+++ b/gtk2_ardour/editor_selection.cc
@@ -1384,7 +1384,7 @@ Editor::select_all_objects (Selection::Operation op)
TrackViewList ts = track_views;
- if (_internal_editing) {
+ if (internal_editing()) {
bool midi_selected = false;
@@ -1452,7 +1452,7 @@ Editor::invert_selection ()
{
list<Selectable *> touched;
- if (_internal_editing) {
+ if (internal_editing()) {
for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) {
MidiRegionView* mrv = dynamic_cast<MidiRegionView*>(*i);
if (mrv) {
@@ -1695,7 +1695,7 @@ Editor::select_all_selectables_using_cursor (EditorCursor *cursor, bool after)
}
}
- if (_internal_editing) {
+ if (internal_editing()) {
for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) {
MidiRegionView* mrv = dynamic_cast<MidiRegionView*>(*i);
if (mrv) {
@@ -1748,7 +1748,7 @@ Editor::select_all_selectables_using_edit (bool after)
}
}
- if (_internal_editing) {
+ if (internal_editing()) {
for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) {
MidiRegionView* mrv = dynamic_cast<MidiRegionView*>(*i);
mrv->select_range (start, end);
@@ -1791,7 +1791,7 @@ Editor::select_all_selectables_between (bool /*within*/)
return;
}
- if (_internal_editing) {
+ if (internal_editing()) {
for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) {
MidiRegionView* mrv = dynamic_cast<MidiRegionView*>(*i);
mrv->select_range (start, end);
diff --git a/gtk2_ardour/enums.cc b/gtk2_ardour/enums.cc
index f109050515..4cae1f5db4 100644
--- a/gtk2_ardour/enums.cc
+++ b/gtk2_ardour/enums.cc
@@ -181,6 +181,7 @@ setup_gtk_ardour_enums ()
REGISTER_ENUM(MouseTimeFX);
REGISTER_ENUM(MouseAudition);
REGISTER_ENUM(MouseCut);
+ REGISTER_ENUM(MouseContent);
REGISTER (mouse_mode);
}
diff --git a/gtk2_ardour/ergonomic-us.bindings.in b/gtk2_ardour/ergonomic-us.bindings.in
index 9c7efb9b99..46a8675f0a 100644
--- a/gtk2_ardour/ergonomic-us.bindings.in
+++ b/gtk2_ardour/ergonomic-us.bindings.in
@@ -216,9 +216,9 @@
; (gtk_accel_path "<Actions>/Main/AudioFileFormat" "")
; (gtk_accel_path "<Actions>/Transport/Transport" "")
(gtk_accel_path "<Actions>/MouseMode/set-mouse-mode-timefx" "t")
+(gtk_accel_path "<Actions>/MouseMode/set-mouse-mode-content" "e")
; (gtk_accel_path "<Actions>/RegionList/SortByRegionName" "")
; (gtk_accel_path "<Actions>/Main/KeyMouse Actions" "")
-(gtk_accel_path "<Actions>/MouseMode/set-mouse-mode-gain" "g")
; (gtk_accel_path "<Actions>/Snap/snap-to-frame" "")
; (gtk_accel_path "<Actions>/Editor/SnapTo" "")
(gtk_accel_path "<Actions>/Transport/TransitionToReverse" "<@PRIMARY@>downarrow")
diff --git a/gtk2_ardour/icons/tool_content.png b/gtk2_ardour/icons/tool_content.png
new file mode 100644
index 0000000000..6ab448cb66
--- /dev/null
+++ b/gtk2_ardour/icons/tool_content.png
Binary files differ
diff --git a/gtk2_ardour/midi_region_view.cc b/gtk2_ardour/midi_region_view.cc
index 85ea05fe3f..8533cefdc0 100644
--- a/gtk2_ardour/midi_region_view.cc
+++ b/gtk2_ardour/midi_region_view.cc
@@ -351,7 +351,6 @@ MidiRegionView::canvas_group_event(GdkEvent* ev)
return RegionView::canvas_group_event (ev);
}
- const MouseMode m = trackview.editor().current_mouse_mode();
bool r;
switch (ev->type) {
@@ -369,15 +368,6 @@ MidiRegionView::canvas_group_event(GdkEvent* ev)
// reset entered_regionview (among other things)
return RegionView::canvas_group_event (ev);
- case GDK_2BUTTON_PRESS:
- // cannot use double-click to exit internal mode if single-click is being used
- if ((m != MouseDraw) &&
- (m != MouseObject ||
- !Keyboard::modifier_state_contains (ev->button.state, Keyboard::insert_note_modifier()))) {
- return trackview.editor().toggle_internal_editing_from_double_click (ev);
- }
- break;
-
case GDK_SCROLL:
if (scroll (&ev->scroll)) {
return true;
@@ -484,7 +474,7 @@ MidiRegionView::button_press (GdkEventButton* ev)
Editor* editor = dynamic_cast<Editor *> (&trackview.editor());
MouseMode m = editor->current_mouse_mode();
- if (m == MouseObject && Keyboard::modifier_state_contains (ev->state, Keyboard::insert_note_modifier())) {
+ if (m == MouseContent && Keyboard::modifier_state_contains (ev->state, Keyboard::insert_note_modifier())) {
pre_press_cursor = editor->get_canvas_cursor ();
editor->set_canvas_cursor (editor->cursors()->midi_pencil);
}
@@ -533,7 +523,7 @@ MidiRegionView::button_release (GdkEventButton* ev)
clear_selection ();
break;
- case MouseObject:
+ case MouseContent:
case MouseTimeFX:
{
clear_selection();
@@ -598,18 +588,18 @@ MidiRegionView::motion (GdkEventMotion* ev)
{
PublicEditor& editor = trackview.editor ();
- if (!_ghost_note && editor.current_mouse_mode() == MouseObject &&
+ if (!_ghost_note && editor.current_mouse_mode() == MouseContent &&
Keyboard::modifier_state_contains (ev->state, Keyboard::insert_note_modifier()) &&
_mouse_state != AddDragging) {
create_ghost_note (ev->x, ev->y);
- } else if (_ghost_note && editor.current_mouse_mode() == MouseObject &&
+ } else if (_ghost_note && editor.current_mouse_mode() == MouseContent &&
Keyboard::modifier_state_contains (ev->state, Keyboard::insert_note_modifier())) {
update_ghost_note (ev->x, ev->y);
- } else if (_ghost_note && editor.current_mouse_mode() == MouseObject) {
+ } else if (_ghost_note && editor.current_mouse_mode() == MouseContent) {
remove_ghost_note ();
editor.verbose_cursor()->hide ();
@@ -632,13 +622,13 @@ MidiRegionView::motion (GdkEventMotion* ev)
MouseMode m = editor.current_mouse_mode();
- if (m == MouseDraw || (m == MouseObject && Keyboard::modifier_state_contains (ev->state, Keyboard::insert_note_modifier()))) {
+ if (m == MouseDraw || (m == MouseContent && Keyboard::modifier_state_contains (ev->state, Keyboard::insert_note_modifier()))) {
editor.drags()->set (new NoteCreateDrag (dynamic_cast<Editor *> (&editor), group, this), (GdkEvent *) ev);
_mouse_state = AddDragging;
remove_ghost_note ();
editor.verbose_cursor()->hide ();
return true;
- } else if (m == MouseObject) {
+ } else if (m == MouseContent) {
editor.drags()->set (new MidiRubberbandSelectDrag (dynamic_cast<Editor *> (&editor), this), (GdkEvent *) ev);
if (!Keyboard::modifier_state_equals (ev->state, Keyboard::TertiaryModifier)) {
clear_selection ();
@@ -3224,7 +3214,7 @@ MidiRegionView::note_mouse_position (float x_fraction, float /*y_fraction*/, boo
{
Editor* editor = dynamic_cast<Editor*>(&trackview.editor());
Editing::MouseMode mm = editor->current_mouse_mode();
- bool trimmable = (mm == MouseObject || mm == MouseTimeFX || mm == MouseDraw);
+ bool trimmable = (mm == MouseContent || mm == MouseTimeFX || mm == MouseDraw);
if (can_set_cursor) {
if (trimmable && x_fraction > 0.0 && x_fraction < 0.2) {
diff --git a/gtk2_ardour/midi_streamview.cc b/gtk2_ardour/midi_streamview.cc
index 3d2c54d87f..f47091b3a6 100644
--- a/gtk2_ardour/midi_streamview.cc
+++ b/gtk2_ardour/midi_streamview.cc
@@ -153,12 +153,6 @@ MidiStreamView::add_region_view_internal (boost::shared_ptr<Region> r, bool wait
region_views.push_front (region_view);
- if (_trackview.editor().internal_editing()) {
- region_view->hide_rect ();
- } else {
- region_view->show_rect ();
- }
-
/* display events and find note range */
display_region (region_view, wait_for_data);
@@ -660,15 +654,3 @@ MidiStreamView::resume_updates ()
_canvas_group->redraw ();
}
-
-void
-MidiStreamView::leave_internal_edit_mode ()
-{
- StreamView::leave_internal_edit_mode ();
- for (RegionViewList::iterator i = region_views.begin(); i != region_views.end(); ++i) {
- MidiRegionView* mrv = dynamic_cast<MidiRegionView*> (*i);
- if (mrv) {
- mrv->clear_selection ();
- }
- }
-}
diff --git a/gtk2_ardour/midi_streamview.h b/gtk2_ardour/midi_streamview.h
index 8d5c233b7d..7733f87074 100644
--- a/gtk2_ardour/midi_streamview.h
+++ b/gtk2_ardour/midi_streamview.h
@@ -79,8 +79,6 @@ class MidiStreamView : public StreamView
void redisplay_track ();
- void leave_internal_edit_mode ();
-
inline double contents_height() const
{ return (child_height() - TimeAxisViewItem::NAME_HIGHLIGHT_SIZE - 2); }
diff --git a/gtk2_ardour/midi_time_axis.cc b/gtk2_ardour/midi_time_axis.cc
index 1d55b7dffa..b23d86194a 100644
--- a/gtk2_ardour/midi_time_axis.cc
+++ b/gtk2_ardour/midi_time_axis.cc
@@ -405,22 +405,6 @@ MidiTimeAxisView::~MidiTimeAxisView ()
}
void
-MidiTimeAxisView::enter_internal_edit_mode ()
-{
- if (midi_view()) {
- midi_view()->enter_internal_edit_mode ();
- }
-}
-
-void
-MidiTimeAxisView::leave_internal_edit_mode ()
-{
- if (midi_view()) {
- midi_view()->leave_internal_edit_mode ();
- }
-}
-
-void
MidiTimeAxisView::check_step_edit ()
{
ensure_step_editor ();
@@ -1322,10 +1306,6 @@ MidiTimeAxisView::route_active_changed ()
void
MidiTimeAxisView::set_note_selection (uint8_t note)
{
- if (!_editor.internal_editing()) {
- return;
- }
-
uint16_t chn_mask = midi_track()->get_playback_channel_mask();
if (_view->num_selected_regionviews() == 0) {
@@ -1342,10 +1322,6 @@ MidiTimeAxisView::set_note_selection (uint8_t note)
void
MidiTimeAxisView::add_note_selection (uint8_t note)
{
- if (!_editor.internal_editing()) {
- return;
- }
-
const uint16_t chn_mask = midi_track()->get_playback_channel_mask();
if (_view->num_selected_regionviews() == 0) {
@@ -1362,10 +1338,6 @@ MidiTimeAxisView::add_note_selection (uint8_t note)
void
MidiTimeAxisView::extend_note_selection (uint8_t note)
{
- if (!_editor.internal_editing()) {
- return;
- }
-
const uint16_t chn_mask = midi_track()->get_playback_channel_mask();
if (_view->num_selected_regionviews() == 0) {
@@ -1382,10 +1354,6 @@ MidiTimeAxisView::extend_note_selection (uint8_t note)
void
MidiTimeAxisView::toggle_note_selection (uint8_t note)
{
- if (!_editor.internal_editing()) {
- return;
- }
-
const uint16_t chn_mask = midi_track()->get_playback_channel_mask();
if (_view->num_selected_regionviews() == 0) {
diff --git a/gtk2_ardour/midi_time_axis.h b/gtk2_ardour/midi_time_axis.h
index f8f77244d0..ebc51b1427 100644
--- a/gtk2_ardour/midi_time_axis.h
+++ b/gtk2_ardour/midi_time_axis.h
@@ -75,9 +75,6 @@ class MidiTimeAxisView : public RouteTimeAxisView
void set_height (uint32_t);
- void enter_internal_edit_mode ();
- void leave_internal_edit_mode ();
-
boost::shared_ptr<ARDOUR::MidiRegion> add_region (ARDOUR::framepos_t, ARDOUR::framecnt_t, bool);
void show_all_automation (bool apply_to_selection = false);
diff --git a/gtk2_ardour/mnemonic-us.bindings.in b/gtk2_ardour/mnemonic-us.bindings.in
index 8c3126315f..981aae4a28 100644
--- a/gtk2_ardour/mnemonic-us.bindings.in
+++ b/gtk2_ardour/mnemonic-us.bindings.in
@@ -137,7 +137,6 @@ This mode provides many different operations on both regions and control points,
;; note that ctrl-w is special and consumed by the keyboard snooper
-@mmode|MouseMode/toggle-internal-edit|e|toggle MIDI note editing
@select|Editor/select-all-before-edit-cursor|<@PRIMARY@>e|select all before EP
@rop|Region/export-region|<@PRIMARY@><@LEVEL4@>e|export selected region(s)
@sess|Main/ExportSession|<@LEVEL4@>e|export session
@@ -160,6 +159,7 @@ This mode provides many different operations on both regions and control points,
@sess|Editor/addExistingAudioFiles|<@PRIMARY@>i|import audio files
@sess|Editor/toggle-midi-input-active|<@SECONDARY@>i|toggle sel. track MIDI input
@mmode|MouseMode/set-mouse-mode-object|o|object mode
+@mmode|MouseMode/set-mouse-mode-content|e|content mode
@sess|Main/Open|<@PRIMARY@>o|open an existing session
@sess|Main/Recent|<@PRIMARY@><@TERTIARY@>o|open a recent session
@wvis|Window/toggle-session-options-editor|<@WINDOW@>o|toggle preferences dialog
diff --git a/gtk2_ardour/note_base.cc b/gtk2_ardour/note_base.cc
index 71d8dd98fc..9fba9be10a 100644
--- a/gtk2_ardour/note_base.cc
+++ b/gtk2_ardour/note_base.cc
@@ -254,7 +254,8 @@ NoteBase::set_mouse_fractions (GdkEvent* ev)
bool
NoteBase::event_handler (GdkEvent* ev)
{
- if (!_region.get_time_axis_view().editor().internal_editing()) {
+ PublicEditor& editor = _region.get_time_axis_view().editor();
+ if (!editor.internal_editing()) {
return false;
}
@@ -276,7 +277,7 @@ NoteBase::event_handler (GdkEvent* ev)
case GDK_BUTTON_PRESS:
set_mouse_fractions (ev);
if (ev->button.button == 3 && Keyboard::no_modifiers_active (ev->button.state) && _selected) {
- _region.get_time_axis_view().editor().edit_notes (_region);
+ editor.edit_notes (_region);
return true;
}
break;
@@ -292,7 +293,7 @@ NoteBase::event_handler (GdkEvent* ev)
break;
}
- return _region.get_time_axis_view().editor().canvas_note_event (ev, _item);
+ return editor.canvas_note_event (ev, _item);
}
bool
diff --git a/gtk2_ardour/patch_change.cc b/gtk2_ardour/patch_change.cc
index 925a0f3b23..ebad5518cf 100644
--- a/gtk2_ardour/patch_change.cc
+++ b/gtk2_ardour/patch_change.cc
@@ -157,9 +157,8 @@ PatchChange::event_handler (GdkEvent* ev)
{
/* XXX: icky dcast */
Editor* e = dynamic_cast<Editor*> (&_region.get_time_axis_view().editor());
-
+
if (!e->internal_editing()) {
- // not in internal edit mode, so no patch change editing
return false;
}
diff --git a/gtk2_ardour/public_editor.h b/gtk2_ardour/public_editor.h
index c2972116a1..884a1b351b 100644
--- a/gtk2_ardour/public_editor.h
+++ b/gtk2_ardour/public_editor.h
@@ -173,25 +173,8 @@ class PublicEditor : public Gtk::Window, public PBD::StatefulDestructible, publi
*/
virtual Editing::MouseMode current_mouse_mode () const = 0;
- /** Switch into a mode in which editing is primarily focused on "within" regions,
- rather than regions as black-box objects. For Ardour3, this is aimed at
- editing MIDI regions but may expand in the future to other types of regions.
- */
-
- virtual void set_internal_edit (bool yn) = 0;
-
- /** Driven by a double-click, switch in or out of a mode in which
- editing is primarily focused on "within" regions, rather than
- regions as black-box objects. For Ardour3, this is aimed at editing
- MIDI regions but may expand in the future to other types of
- regions.
- */
-
- virtual bool toggle_internal_editing_from_double_click (GdkEvent*) = 0;
-
- /** @return Whether editing is currently in "internal" mode or not
+ /** @return Whether the current mouse mode is an "internal" editing mode.
*/
-
virtual bool internal_editing() const = 0;
/** Possibly start the audition of a region. If @param r is 0, or not an AudioRegion
diff --git a/gtk2_ardour/region_view.h b/gtk2_ardour/region_view.h
index cb6b56912f..389faf8921 100644
--- a/gtk2_ardour/region_view.h
+++ b/gtk2_ardour/region_view.h
@@ -89,7 +89,7 @@ class RegionView : public TimeAxisViewItem
void remove_ghost_in (TimeAxisView&);
void remove_ghost (GhostRegion*);
- virtual void entered (bool) {}
+ virtual void entered () {}
virtual void exited () {}
virtual void enable_display(bool yn) { _enable_display = yn; }
diff --git a/gtk2_ardour/streamview.cc b/gtk2_ardour/streamview.cc
index 1ee0114c52..18953aee09 100644
--- a/gtk2_ardour/streamview.cc
+++ b/gtk2_ardour/streamview.cc
@@ -712,19 +712,3 @@ StreamView::setup_new_rec_layer_time (boost::shared_ptr<Region> region)
_new_rec_layer_time = max_framepos;
}
}
-
-void
-StreamView::enter_internal_edit_mode ()
-{
- for (list<RegionView*>::iterator i = region_views.begin(); i != region_views.end(); ++i) {
- (*i)->hide_rect ();
- }
-}
-
-void
-StreamView::leave_internal_edit_mode ()
-{
- for (list<RegionView*>::iterator i = region_views.begin(); i != region_views.end(); ++i) {
- (*i)->show_rect ();
- }
-}
diff --git a/gtk2_ardour/streamview.h b/gtk2_ardour/streamview.h
index d211ca10c3..73b1f0a420 100644
--- a/gtk2_ardour/streamview.h
+++ b/gtk2_ardour/streamview.h
@@ -76,9 +76,6 @@ public:
virtual int set_samples_per_pixel (double);
gdouble get_samples_per_pixel () const { return _samples_per_pixel; }
- virtual void enter_internal_edit_mode ();
- virtual void leave_internal_edit_mode ();
-
void set_layer_display (LayerDisplay);
LayerDisplay layer_display () const { return _layer_display; }
diff --git a/gtk2_ardour/time_axis_view.h b/gtk2_ardour/time_axis_view.h
index ab990f875a..7ea0f580f5 100644
--- a/gtk2_ardour/time_axis_view.h
+++ b/gtk2_ardour/time_axis_view.h
@@ -106,9 +106,6 @@ class TimeAxisView : public virtual AxisView
/** @return maximum allowable value of order */
static int max_order () { return _max_order; }
- virtual void enter_internal_edit_mode () {}
- virtual void leave_internal_edit_mode () {}
-
ArdourCanvas::Container* canvas_display () { return _canvas_display; }
ArdourCanvas::Container* ghost_group () { return _ghost_group; }
diff --git a/gtk2_ardour/time_axis_view_item.cc b/gtk2_ardour/time_axis_view_item.cc
index 78c5b3299a..9df14240f5 100644
--- a/gtk2_ardour/time_axis_view_item.cc
+++ b/gtk2_ardour/time_axis_view_item.cc
@@ -857,13 +857,10 @@ TimeAxisViewItem::frame_handle_crossing (GdkEvent* ev, ArdourCanvas::Rectangle*
item->set_fill (false);
break;
case GDK_ENTER_NOTIFY:
- if (trackview.editor().effective_mouse_mode() == Editing::MouseObject &&
- !trackview.editor().internal_editing()) {
- /* never set this to be visible in internal
- edit mode. Note, however, that we do need to
- undo visibility (LEAVE_NOTIFY case above) no
- matter what the mode is.
- */
+ if (trackview.editor().effective_mouse_mode() == Editing::MouseObject) {
+ /* Never set this to be visible in other modes. Note, however,
+ that we do need to undo visibility (LEAVE_NOTIFY case above) no
+ matter what the mode is. */
item->set_fill (true);
}
break;
diff --git a/gtk2_ardour/time_info_box.cc b/gtk2_ardour/time_info_box.cc
index 5d11c35c79..afd48715b3 100644
--- a/gtk2_ardour/time_info_box.cc
+++ b/gtk2_ardour/time_info_box.cc
@@ -243,51 +243,40 @@ TimeInfoBox::selection_changed ()
switch (Editor::instance().current_mouse_mode()) {
+ case Editing::MouseContent:
+ /* displaying MIDI note selection is tricky */
+ selection_start->set_off (true);
+ selection_end->set_off (true);
+ selection_length->set_off (true);
+ break;
+
case Editing::MouseObject:
- if (Editor::instance().internal_editing()) {
- /* displaying MIDI note selection is tricky */
-
- selection_start->set_off (true);
- selection_end->set_off (true);
- selection_length->set_off (true);
+ if (selection.regions.empty()) {
+ if (selection.points.empty()) {
+ Glib::RefPtr<Action> act = ActionManager::get_action ("MouseMode", "set-mouse-mode-object-range");
+ Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic (act);
- } else {
- if (selection.regions.empty()) {
- if (selection.points.empty()) {
- Glib::RefPtr<Action> act = ActionManager::get_action ("MouseMode", "set-mouse-mode-object-range");
- Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic (act);
-
- if (tact && tact->get_active() && !selection.time.empty()) {
- /* show selected range */
- selection_start->set_off (false);
- selection_end->set_off (false);
- selection_length->set_off (false);
- selection_start->set (selection.time.start());
- selection_end->set (selection.time.end_frame());
- selection_length->set (selection.time.length());
- } else {
- selection_start->set_off (true);
- selection_end->set_off (true);
- selection_length->set_off (true);
- }
- } else {
- s = max_framepos;
- e = 0;
- for (PointSelection::iterator i = selection.points.begin(); i != selection.points.end(); ++i) {
- framepos_t const p = (*i)->line().session_position ((*i)->model ());
- s = min (s, p);
- e = max (e, p);
- }
+ if (tact && tact->get_active() && !selection.time.empty()) {
+ /* show selected range */
selection_start->set_off (false);
selection_end->set_off (false);
selection_length->set_off (false);
- selection_start->set (s);
- selection_end->set (e);
- selection_length->set (e - s + 1);
+ selection_start->set (selection.time.start());
+ selection_end->set (selection.time.end_frame());
+ selection_length->set (selection.time.length());
+ } else {
+ selection_start->set_off (true);
+ selection_end->set_off (true);
+ selection_length->set_off (true);
}
} else {
- s = selection.regions.start();
- e = selection.regions.end_frame();
+ s = max_framepos;
+ e = 0;
+ for (PointSelection::iterator i = selection.points.begin(); i != selection.points.end(); ++i) {
+ framepos_t const p = (*i)->line().session_position ((*i)->model ());
+ s = min (s, p);
+ e = max (e, p);
+ }
selection_start->set_off (false);
selection_end->set_off (false);
selection_length->set_off (false);
@@ -295,6 +284,15 @@ TimeInfoBox::selection_changed ()
selection_end->set (e);
selection_length->set (e - s + 1);
}
+ } else {
+ s = selection.regions.start();
+ e = selection.regions.end_frame();
+ selection_start->set_off (false);
+ selection_end->set_off (false);
+ selection_length->set_off (false);
+ selection_start->set (s);
+ selection_end->set (e);
+ selection_length->set (e - s + 1);
}
break;
diff --git a/gtk2_ardour/trx.menus.in b/gtk2_ardour/trx.menus.in
index a428368b48..d4a7e3187a 100644
--- a/gtk2_ardour/trx.menus.in
+++ b/gtk2_ardour/trx.menus.in
@@ -5,8 +5,8 @@
<accelerator action='set-mouse-mode-draw'/>
<accelerator action='set-mouse-mode-zoom'/>
<accelerator action='set-mouse-mode-timefx'/>
+ <accelerator action='set-mouse-mode-content'/>
<accelerator action='set-mouse-mode-object-range'/>
- <accelerator action='toggle-internal-edit'/>
<accelerator action='focus-on-clock'/>
<accelerator action='track-solo-toggle'/>
<accelerator action='track-mute-toggle'/>