From 779fe6c08291a2c041ec9558c5351c23de576238 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Mon, 7 Jul 2014 07:05:27 -0400 Subject: add functionality for cut tool --- gtk2_ardour/editor.h | 9 +++++---- gtk2_ardour/editor_drag.cc | 21 +++++++++++++++++++++ gtk2_ardour/editor_drag.h | 10 ++++++++++ gtk2_ardour/editor_keys.cc | 2 +- gtk2_ardour/editor_mouse.cc | 19 ++++++++++++++++++- gtk2_ardour/public_editor.h | 1 + 6 files changed, 56 insertions(+), 6 deletions(-) (limited to 'gtk2_ardour') diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index 3875c4d0b8..eca9714b01 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -470,6 +470,11 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void metric_get_samples (std::vector&, gdouble, gdouble, gint); void metric_get_minsec (std::vector&, gdouble, gdouble, gint); + /* editing operations that need to be public */ + void mouse_add_new_marker (framepos_t where, bool is_cd=false, bool is_xrun=false); + void split_region (); + void split_region_at_points (boost::shared_ptr, ARDOUR::AnalysisFeatureList&, bool can_ferret, bool select_new = false); + protected: void map_transport_state (); void map_position_change (framepos_t); @@ -625,7 +630,6 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void hide_marker (ArdourCanvas::Item*, GdkEvent*); void clear_marker_display (); - void mouse_add_new_marker (framepos_t where, bool is_cd=false, bool is_xrun=false); void mouse_add_new_range (framepos_t); bool choose_new_marker_name(std::string &name); void update_cd_marker_display (); @@ -1135,7 +1139,6 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void lower_region_to_bottom (); void split_regions_at (framepos_t, RegionSelection&); void split_region_at_transients (); - void split_region_at_points (boost::shared_ptr, ARDOUR::AnalysisFeatureList&, bool can_ferret, bool select_new = false); void crop_region_to_selection (); void crop_region_to (framepos_t start, framepos_t end); void set_sync_point (framepos_t, const RegionSelection&); @@ -1187,8 +1190,6 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void reset_focus (); - void split_region (); - void delete_ (); void cut (); void copy (); diff --git a/gtk2_ardour/editor_drag.cc b/gtk2_ardour/editor_drag.cc index f852981487..ca41fa35ce 100644 --- a/gtk2_ardour/editor_drag.cc +++ b/gtk2_ardour/editor_drag.cc @@ -5447,3 +5447,24 @@ CrossfadeEdgeDrag::aborted (bool) } } +RegionCutDrag::RegionCutDrag (Editor* e, ArdourCanvas::Item* item) + : Drag (e, item, true) +{ + +} + +void +RegionCutDrag::motion (GdkEvent*, bool) +{ +} + +void +RegionCutDrag::finished (GdkEvent*, bool) +{ + _editor->split_region (); +} + +void +RegionCutDrag::aborted (bool) +{ +} diff --git a/gtk2_ardour/editor_drag.h b/gtk2_ardour/editor_drag.h index d9eda5685a..b704b0f357 100644 --- a/gtk2_ardour/editor_drag.h +++ b/gtk2_ardour/editor_drag.h @@ -440,6 +440,16 @@ private: }; +/** "Drag" to cut a region (action only on button release) */ +class RegionCutDrag : public Drag +{ + public: + RegionCutDrag (Editor*, ArdourCanvas::Item*); + void motion (GdkEvent*, bool); + void finished (GdkEvent*, bool); + void aborted (bool); +}; + /** Drags to create regions */ class RegionCreateDrag : public Drag { diff --git a/gtk2_ardour/editor_keys.cc b/gtk2_ardour/editor_keys.cc index 34847bbfe4..2acc8a0a86 100644 --- a/gtk2_ardour/editor_keys.cc +++ b/gtk2_ardour/editor_keys.cc @@ -40,7 +40,7 @@ using namespace PBD; using namespace Editing; void -Editor::keyboard_selection_finish (bool add) +Editor::keyboard_selection_finish (bool /*add*/) { if (_session) { diff --git a/gtk2_ardour/editor_mouse.cc b/gtk2_ardour/editor_mouse.cc index 9586b9f8e1..b4050f45b6 100644 --- a/gtk2_ardour/editor_mouse.cc +++ b/gtk2_ardour/editor_mouse.cc @@ -240,7 +240,7 @@ Editor::set_mouse_mode (MouseMode m, bool force) break; case MouseCut: - act = ActionManager::get_action (X_("MouseCut"), X_("set-mouse-mode-cut")); + act = ActionManager::get_action (X_("MouseMode"), X_("set-mouse-mode-cut")); break; case MouseObject: @@ -854,6 +854,23 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT } break; + case MouseCut: + switch (item_type) { + case RegionItem: + case FadeInHandleItem: + case FadeOutHandleItem: + case LeftFrameHandle: + case RightFrameHandle: + case FeatureLineItem: + case RegionViewNameHighlight: + case RegionViewName: + _drags->set (new RegionCutDrag (this, item), event, current_canvas_cursor); + break; + default: + break; + } + break; + case MouseObject: switch (item_type) { case NoteItem: diff --git a/gtk2_ardour/public_editor.h b/gtk2_ardour/public_editor.h index 722f5e2f2b..fe34289c40 100644 --- a/gtk2_ardour/public_editor.h +++ b/gtk2_ardour/public_editor.h @@ -295,6 +295,7 @@ class PublicEditor : public Gtk::Window, public PBD::StatefulDestructible, publi virtual void update_tearoff_visibility () = 0; virtual framepos_t get_preferred_edit_position (bool ignore_playhead = false, bool from_context_menu = false) = 0; virtual void toggle_meter_updating() = 0; + virtual void split_region () = 0; virtual void split_region_at_points (boost::shared_ptr, ARDOUR::AnalysisFeatureList&, bool can_ferret, bool select_new = false) = 0; virtual void mouse_add_new_marker (framepos_t where, bool is_cd=false, bool is_xrun=false) = 0; virtual void foreach_time_axis_view (sigc::slot) = 0; -- cgit v1.2.3