add functionality for cut tool
authorPaul Davis <paul@linuxaudiosystems.com>
Mon, 7 Jul 2014 11:05:27 +0000 (07:05 -0400)
committerPaul Davis <paul@linuxaudiosystems.com>
Mon, 7 Jul 2014 11:05:44 +0000 (07:05 -0400)
gtk2_ardour/editor.h
gtk2_ardour/editor_drag.cc
gtk2_ardour/editor_drag.h
gtk2_ardour/editor_keys.cc
gtk2_ardour/editor_mouse.cc
gtk2_ardour/public_editor.h

index 3875c4d0b8f42f1e1d79747091afbb74a2b6387b..eca9714b015a8ac9de3aaa5db1005b554d01a7c8 100644 (file)
@@ -470,6 +470,11 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
        void metric_get_samples (std::vector<ArdourCanvas::Ruler::Mark>&, gdouble, gdouble, gint);
        void metric_get_minsec (std::vector<ArdourCanvas::Ruler::Mark>&, 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::Region>, 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::Region>, 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 ();
index f852981487ed6567e76aed7b64d7b733c22787eb..ca41fa35cec572a52e7f07372f4f83b513402301 100644 (file)
@@ -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)
+{
+}
index d9eda5685a0b4f5ef95e296dad1aa645d6d93582..b704b0f357305dc36235f2c69f796f257162a387 100644 (file)
@@ -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
 {
index 34847bbfe4c3fd8332e03e853b9490c49ac82588..2acc8a0a86768571eeaf316608e5fbd2bf5f0f43 100644 (file)
@@ -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) {
 
index 9586b9f8e1a43068ef31e06fe5024584652f7997..b4050f45b6068398020911be417ade9abf8e02fc 100644 (file)
@@ -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:
index 722f5e2f2bcacbcef246bfac7ee2e877b18aedee..fe34289c407f3039fc11f47f2b10417648cf6e0d 100644 (file)
@@ -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::Region>, 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<void,TimeAxisView&>) = 0;