Selection-after-split behavior ( libardour part )
authorBen Loftis <ben@harrisonconsoles.com>
Thu, 7 Feb 2019 19:29:59 +0000 (13:29 -0600)
committerBen Loftis <ben@harrisonconsoles.com>
Tue, 12 Feb 2019 17:34:50 +0000 (11:34 -0600)
gtk2_ardour/editor_selection.cc
libs/ardour/ardour/rc_configuration_vars.h
libs/ardour/ardour/types.h
libs/ardour/ardour/types_convert.h
libs/ardour/enums.cc
libs/ardour/luabindings.cc

index 227eaa4a63247da4d083976930b16885bdbd7850..f8de6084caf2d1f46ac158bec07cecf6393033e2 100644 (file)
@@ -1585,6 +1585,13 @@ Editor::region_selection_changed ()
                nudge_forward_button.set_name ("generic button");
                nudge_backward_button.set_name ("generic button");
        }
+
+       //there are a few global Editor->Select actions which select regions even if you aren't in Object mode.
+       //if regions are selected, we must always force the mouse mode to Object...
+       //... otherwise the user is confusingly left with selected regions that can't be manipulated.
+       if (!selection->regions.empty()) {
+               set_mouse_mode( MouseObject, false );
+       }
 }
 
 void
index eaeacc9793e9517953220b8e038959c40cdf8592..e4f1904cba23a4325e6e89b9a2d989b04387abd6 100644 (file)
@@ -110,6 +110,7 @@ CONFIG_VARIABLE (bool, automation_follows_regions, "automation-follows-regions",
 CONFIG_VARIABLE (bool, region_boundaries_from_selected_tracks, "region-boundaries-from-selected-tracks", true)
 CONFIG_VARIABLE (bool, region_boundaries_from_onscreen_tracks, "region-boundaries-from-onscreen_tracks", true)
 CONFIG_VARIABLE (FadeShape, default_fade_shape, "default-fade-shape", FadeLinear)
+CONFIG_VARIABLE (RangeSelectionAfterSplit, range_selection_after_split, "range-selection-after-split", PreserveSel)
 CONFIG_VARIABLE (RegionSelectionAfterSplit, region_selection_after_split, "region-selection-after-split", None)
 
 /* monitoring, mute, solo etc */
index a9b297d5051ea0605a25c400390a98072122214b..733429b175f22e3cc3040236c5eb9041fef77d13 100644 (file)
@@ -420,6 +420,12 @@ enum RegionSelectionAfterSplit {
        ExistingNewlyCreatedBoth = 7
 };
 
+enum RangeSelectionAfterSplit {
+       ClearSel = 0,
+       PreserveSel = 1,  // bit 0
+       ForceSel = 2      // bit 1
+};
+
 enum RegionPoint {
        Start,
        End,
index 8c3c87a6517f700f1d492f12adc4c62406b89003..32b00f0523582c87a4aaf247f1e014aceb1e34b7 100644 (file)
@@ -55,6 +55,7 @@ DEFINE_ENUM_CONVERT(ARDOUR::DenormalModel)
 DEFINE_ENUM_CONVERT(ARDOUR::PositionLockStyle)
 DEFINE_ENUM_CONVERT(ARDOUR::FadeShape)
 DEFINE_ENUM_CONVERT(ARDOUR::RegionSelectionAfterSplit)
+DEFINE_ENUM_CONVERT(ARDOUR::RangeSelectionAfterSplit)
 DEFINE_ENUM_CONVERT(ARDOUR::BufferingPreset)
 DEFINE_ENUM_CONVERT(ARDOUR::AutoReturnTarget)
 DEFINE_ENUM_CONVERT(ARDOUR::MeterType)
index dd7c00f25f670b358b6bd7e3b7ff0faa351aed89..ab7f0b63fcf19374da9a9ba555141155609b29bd 100644 (file)
@@ -97,6 +97,7 @@ setup_enum_writer ()
        Session::PullupFormat _Session_PullupFormat;
        FadeShape _FadeShape;
        RegionSelectionAfterSplit _RegionSelectionAfterSplit;
+       RangeSelectionAfterSplit _RangeSelectionAfterSplit;
        IOChange _IOChange;
        AutomationType _AutomationType;
        AutoState _AutoState;
@@ -524,6 +525,7 @@ setup_enum_writer ()
        REGISTER_ENUM(ExistingNewlyCreatedRight);
        REGISTER_ENUM(ExistingNewlyCreatedBoth);
        REGISTER (_RegionSelectionAfterSplit);
+       REGISTER (_RangeSelectionAfterSplit);
 
        REGISTER_CLASS_ENUM (DiskIOProcessor, Recordable);
        REGISTER_CLASS_ENUM (DiskIOProcessor, Hidden);
index f3eac8529ff9349472e43084233e283d2d7854cd..39fe95cd63c05929c46e66c0c7740dea42dc2360 100644 (file)
@@ -2039,6 +2039,12 @@ LuaBindings::common (lua_State* L)
                .addConst ("ExistingNewlyCreatedBoth", ARDOUR::RegionSelectionAfterSplit(ExistingNewlyCreatedBoth))
                .endNamespace ()
 
+               .beginNamespace ("RangeSelectionAfterSplit")
+               .addConst ("ClearSel", ARDOUR::RangeSelectionAfterSplit(ClearSel))
+               .addConst ("PreserveSel", ARDOUR::RangeSelectionAfterSplit(PreserveSel))
+               .addConst ("ForceSel", ARDOUR::RangeSelectionAfterSplit(ForceSel))
+               .endNamespace ()
+
                .beginNamespace ("ShuttleBehaviour")
                .addConst ("Sprung", ARDOUR::ShuttleBehaviour(Sprung))
                .addConst ("Wheel", ARDOUR::ShuttleBehaviour(Wheel))