Skip to content

Commit 1d02fa0

Browse files
committed
Enhance drag and drop to honor the drag and drop setting
It is only enabled if the corresponding general setting is set to true.
1 parent 14e9569 commit 1d02fa0

File tree

3 files changed

+28
-4
lines changed

3 files changed

+28
-4
lines changed

Rubberduck.Core/Navigation/CodeExplorer/CodeExplorerViewModel.cs

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,12 +63,15 @@ public CodeExplorerViewModel(
6363
_state.StateChanged += HandleStateChanged;
6464
_state.ModuleStateChanged += ParserState_ModuleStateChanged;
6565

66-
_externalRemoveCommand = removeCommand;
6766
_generalSettingsProvider = generalSettingsProvider;
67+
_generalSettingsProvider.SettingsChanged += GeneralSettingsChanged;
68+
RefreshDragAndDropSetting();
69+
6870
_windowSettingsProvider = windowSettingsProvider;
6971
_uiDispatcher = uiDispatcher;
7072
_vbe = vbe;
7173
_templateProvider = templateProvider;
74+
_externalRemoveCommand = removeCommand;
7275
Annotations = annotations.ToList();
7376

7477
CollapseAllSubnodesCommand = new DelegateCommand(LogManager.GetCurrentClassLogger(), ExecuteCollapseNodes, EvaluateCanSwitchNodeState);
@@ -79,6 +82,7 @@ public CodeExplorerViewModel(
7982
RemoveCommand = new DelegateCommand(LogManager.GetCurrentClassLogger(), ExecuteRemoveCommand, _externalRemoveCommand.CanExecute);
8083
}
8184

85+
8286
OnPropertyChanged(nameof(Projects));
8387

8488
SyncCodePaneCommand = syncProvider.GetSyncCommand(this);
@@ -489,12 +493,25 @@ private void ExpandToNode(ICodeExplorerNode node)
489493

490494
public Visibility VBAVisibility => _vbe.Kind == VBEKind.Hosted ? Visibility.Visible : Visibility.Collapsed;
491495

496+
public bool AllowDragAndDrop { get; internal set; }
497+
498+
private void GeneralSettingsChanged(object sender, ConfigurationChangedEventArgs e)
499+
{
500+
RefreshDragAndDropSetting();
501+
}
502+
503+
private void RefreshDragAndDropSetting()
504+
{
505+
AllowDragAndDrop = _generalSettingsProvider.Read().EnableFolderDragAndDrop;
506+
}
507+
492508
public void Dispose()
493509
{
494510
if (_state != null)
495511
{
496512
_state.StateChanged -= HandleStateChanged;
497513
_state.ModuleStateChanged -= ParserState_ModuleStateChanged;
514+
_generalSettingsProvider.SettingsChanged -= GeneralSettingsChanged;
498515
}
499516
}
500517
}

Rubberduck.Core/UI/CodeExplorer/CodeExplorerControl.xaml.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,11 +56,13 @@ private void TreeView_PreviewMouseMove(object sender, MouseEventArgs e)
5656

5757
private void EvaluateDragInitialization(object sender, MouseEventArgs e)
5858
{
59-
if (e.LeftButton != MouseButtonState.Pressed)
59+
if (e.LeftButton != MouseButtonState.Pressed
60+
|| !(DataContext is CodeExplorerViewModel viewModel)
61+
|| !viewModel.AllowDragAndDrop)
6062
{
6163
return;
6264
}
63-
65+
6466
var currentPosition = e.GetPosition(null);
6567
var fromLeftClick = currentPosition - _lastLeftClickPosition;
6668

RubberduckTests/CodeExplorer/CodeExplorerViewModelTests.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
using Rubberduck.Parsing.Annotations;
1414
using Rubberduck.Parsing.UIContext;
1515
using Rubberduck.Parsing.VBA;
16+
using Rubberduck.Settings;
17+
using Rubberduck.SettingsProvider;
1618
using Rubberduck.UI.Command.ComCommands;
1719
using RubberduckTests.Mocks;
1820
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
@@ -2353,11 +2355,14 @@ public void UnparsedSetToTrue_NoProjects()
23532355
var parser = MockParser.Create(vbe.Object, null, MockVbeEvents.CreateMockVbeEvents(vbe));
23542356
var state = parser.State;
23552357
var dispatcher = new Mock<IUiDispatcher>();
2358+
var generalSettingsProvider = new Mock<IConfigurationService<GeneralSettings>>();
2359+
var generalSettings = new GeneralSettings();
2360+
generalSettingsProvider.Setup(m => m.Read()).Returns(generalSettings);
23562361

23572362
dispatcher.Setup(m => m.Invoke(It.IsAny<Action>())).Callback((Action argument) => argument.Invoke());
23582363
dispatcher.Setup(m => m.StartTask(It.IsAny<Action>(), It.IsAny<TaskCreationOptions>())).Returns((Action argument, TaskCreationOptions options) => Task.Factory.StartNew(argument.Invoke, options));
23592364

2360-
var viewModel = new CodeExplorerViewModel(state, null, null, null, dispatcher.Object, vbe.Object, null,
2365+
var viewModel = new CodeExplorerViewModel(state, null, generalSettingsProvider.Object, null, dispatcher.Object, vbe.Object, null,
23612366
new CodeExplorerSyncProvider(vbe.Object, state, vbeEvents.Object), new List<IAnnotation>());
23622367

23632368
parser.Parse(new CancellationTokenSource());

0 commit comments

Comments
 (0)