Skip to content

Commit a42d6e1

Browse files
authored
Merge pull request #2839 from Hosch250/ReorderParamsDialog
Replace reorder params dialog
2 parents d86c899 + 012f035 commit a42d6e1

19 files changed

+860
-517
lines changed

RetailCoder.VBE/Refactorings/ReorderParameters/IReorderParametersDialog.cs

Lines changed: 0 additions & 11 deletions
This file was deleted.
Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,26 @@
1-
namespace Rubberduck.Refactorings.ReorderParameters
1+
using Rubberduck.Parsing.Symbols;
2+
using Rubberduck.Parsing.VBA;
3+
4+
namespace Rubberduck.Refactorings.ReorderParameters
25
{
36
/// <summary>
47
/// Contains data about a method parameter for the Reorder Parameters refactoring.
58
/// </summary>
69
public class Parameter
710
{
8-
public string FullDeclaration { get; private set; }
9-
public int Index { get; private set; }
10-
public bool IsOptional { get; private set; }
11-
public bool IsParamArray { get; private set; }
11+
public string Name { get; }
12+
public Declaration Declaration { get; }
13+
public int Index { get; }
14+
public bool IsOptional { get; }
15+
public bool IsParamArray { get; }
1216

13-
/// <summary>
14-
/// Creates a Parameter.
15-
/// </summary>
16-
/// <param name="fullDeclaration">The full declaration of the parameter, such as "ByVal param As Integer".</param>
17-
/// <param name="index">The index of the parameter in the list of method parameters.</param>
18-
public Parameter(string fullDeclaration, int index)
17+
public Parameter(ParameterDeclaration declaration, int index)
1918
{
20-
FullDeclaration = fullDeclaration;
19+
Declaration = declaration;
20+
Name = declaration.Context.GetText().RemoveExtraSpacesLeavingIndentation();
2121
Index = index;
22-
IsOptional = FullDeclaration.Contains("Optional");
23-
IsParamArray = FullDeclaration.Contains("ParamArray");
22+
IsOptional = declaration.IsOptional;
23+
IsParamArray = declaration.IsParamArray;
2424
}
2525
}
2626
}

RetailCoder.VBE/Refactorings/ReorderParameters/ReorderParametersModel.cs

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
using System.Linq;
33
using System.Windows.Forms;
44
using Rubberduck.Common;
5-
using Rubberduck.Parsing.Grammar;
65
using Rubberduck.Parsing.Symbols;
76
using Rubberduck.Parsing.VBA;
87
using Rubberduck.UI;
@@ -12,11 +11,8 @@ namespace Rubberduck.Refactorings.ReorderParameters
1211
{
1312
public class ReorderParametersModel
1413
{
15-
private readonly RubberduckParserState _state;
16-
public RubberduckParserState State { get { return _state; } }
17-
18-
private readonly IEnumerable<Declaration> _declarations;
19-
public IEnumerable<Declaration> Declarations { get { return _declarations; } }
14+
public RubberduckParserState State { get; }
15+
public IEnumerable<Declaration> Declarations { get; }
2016

2117
public Declaration TargetDeclaration { get; private set; }
2218
public List<Parameter> Parameters { get; set; }
@@ -25,8 +21,8 @@ public class ReorderParametersModel
2521

2622
public ReorderParametersModel(RubberduckParserState state, QualifiedSelection selection, IMessageBox messageBox)
2723
{
28-
_state = state;
29-
_declarations = state.AllUserDeclarations;
24+
State = state;
25+
Declarations = state.AllUserDeclarations;
3026
_messageBox = messageBox;
3127

3228
AcquireTarget(selection);
@@ -47,14 +43,7 @@ private void LoadParameters()
4743
{
4844
if (TargetDeclaration == null) { return; }
4945

50-
Parameters.Clear();
51-
52-
var procedure = (dynamic)TargetDeclaration.Context;
53-
var argList = (VBAParser.ArgListContext)procedure.argList();
54-
var args = argList.arg();
55-
56-
var index = 0;
57-
Parameters = args.Select(arg => new Parameter(arg.GetText().RemoveExtraSpacesLeavingIndentation(), index++)).ToList();
46+
Parameters = ((IParameterizedDeclaration) TargetDeclaration).Parameters.Select((s, i) => new Parameter((ParameterDeclaration)s, i)).ToList();
5847

5948
if (TargetDeclaration.DeclarationType == DeclarationType.PropertyLet ||
6049
TargetDeclaration.DeclarationType == DeclarationType.PropertySet)
@@ -114,7 +103,7 @@ private Declaration GetGetter()
114103
return TargetDeclaration;
115104
}
116105

117-
var getter = _declarations.FirstOrDefault(item => item.Scope == TargetDeclaration.Scope &&
106+
var getter = Declarations.FirstOrDefault(item => item.Scope == TargetDeclaration.Scope &&
118107
item.IdentifierName == TargetDeclaration.IdentifierName &&
119108
item.DeclarationType == DeclarationType.PropertyGet);
120109

RetailCoder.VBE/Refactorings/ReorderParameters/ReorderParametersPresenter.cs

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
1-
using System.Windows.Forms;
1+
using System.Collections.ObjectModel;
2+
using System.Linq;
3+
using System.Windows.Forms;
24
using Rubberduck.UI;
5+
using Rubberduck.UI.Refactorings.ReorderParameters;
36

47
namespace Rubberduck.Refactorings.ReorderParameters
58
{
@@ -10,11 +13,11 @@ public interface IReorderParametersPresenter
1013

1114
public class ReorderParametersPresenter : IReorderParametersPresenter
1215
{
13-
private readonly IReorderParametersDialog _view;
16+
private readonly ReorderParametersDialog _view;
1417
private readonly ReorderParametersModel _model;
1518
private readonly IMessageBox _messageBox;
1619

17-
public ReorderParametersPresenter(IReorderParametersDialog view, ReorderParametersModel model, IMessageBox messageBox)
20+
public ReorderParametersPresenter(ReorderParametersDialog view, ReorderParametersModel model, IMessageBox messageBox)
1821
{
1922
_view = view;
2023
_model = model;
@@ -32,15 +35,15 @@ public ReorderParametersModel Show()
3235
return null;
3336
}
3437

35-
_view.Parameters = _model.Parameters;
36-
_view.InitializeParameterGrid();
38+
_view.ViewModel.Parameters = new ObservableCollection<Parameter>(_model.Parameters);
3739

38-
if (_view.ShowDialog() != DialogResult.OK)
40+
_view.ShowDialog();
41+
if (_view.DialogResult != DialogResult.OK)
3942
{
4043
return null;
4144
}
4245

43-
_model.Parameters = _view.Parameters;
46+
_model.Parameters = _view.ViewModel.Parameters.ToList();
4447
return _model;
4548
}
4649
}

RetailCoder.VBE/Refactorings/ReorderParameters/ReorderParametersPresenterFactory.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,18 @@
11
using Rubberduck.Parsing.VBA;
22
using Rubberduck.UI;
3+
using Rubberduck.UI.Refactorings.ReorderParameters;
34
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
45

56
namespace Rubberduck.Refactorings.ReorderParameters
67
{
78
public class ReorderParametersPresenterFactory : IRefactoringPresenterFactory<IReorderParametersPresenter>
89
{
910
private readonly IVBE _vbe;
10-
private readonly IReorderParametersDialog _view;
11+
private readonly ReorderParametersDialog _view;
1112
private readonly RubberduckParserState _state;
1213
private readonly IMessageBox _messageBox;
1314

14-
public ReorderParametersPresenterFactory(IVBE vbe, IReorderParametersDialog view,
15+
public ReorderParametersPresenterFactory(IVBE vbe, ReorderParametersDialog view,
1516
RubberduckParserState state, IMessageBox messageBox)
1617
{
1718
_vbe = vbe;

RetailCoder.VBE/Rubberduck.csproj

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -484,6 +484,13 @@
484484
<DependentUpon>RemoveParametersView.xaml</DependentUpon>
485485
</Compile>
486486
<Compile Include="UI\Refactorings\RemoveParameters\RemoveParametersViewModel.cs" />
487+
<Compile Include="UI\Refactorings\ReorderParameters\DragAdorner.cs" />
488+
<Compile Include="UI\Refactorings\ReorderParameters\IndexIsNotLastConverter.cs" />
489+
<Compile Include="UI\Refactorings\ReorderParameters\IndexIsNotZeroConverter.cs" />
490+
<Compile Include="UI\Refactorings\ReorderParameters\ReorderParametersView.xaml.cs">
491+
<DependentUpon>ReorderParametersView.xaml</DependentUpon>
492+
</Compile>
493+
<Compile Include="UI\Refactorings\ReorderParameters\ReorderParametersViewModel.cs" />
487494
<Compile Include="UI\SelectionChangeService.cs" />
488495
<Compile Include="VersionCheck\IVersionCheck.cs" />
489496
<Compile Include="UI\Command\MenuItems\CommandBars\AppCommandBarBase.cs" />
@@ -585,7 +592,6 @@
585592
<Compile Include="Refactorings\RemoveParameters\RemoveParametersPresenterFactory.cs" />
586593
<Compile Include="Refactorings\RemoveParameters\RemoveParametersRefactoring.cs" />
587594
<Compile Include="Refactorings\Rename\RenameModel.cs" />
588-
<Compile Include="Refactorings\ReorderParameters\IReorderParametersDialog.cs" />
589595
<Compile Include="Refactorings\ReorderParameters\ReorderParametersModel.cs" />
590596
<Compile Include="Refactorings\ReorderParameters\ReorderParametersPresenter.cs" />
591597
<Compile Include="Refactorings\ReorderParameters\ReorderParametersPresenterFactory.cs" />
@@ -886,10 +892,10 @@
886892
</Compile>
887893
<Compile Include="Refactorings\ExtractMethod\IExtractMethodDialog.cs" />
888894
<Compile Include="UI\IDialogView.cs" />
889-
<Compile Include="UI\Refactorings\ReorderParametersDialog.cs">
895+
<Compile Include="UI\Refactorings\ReorderParameters\ReorderParametersDialog.cs">
890896
<SubType>Form</SubType>
891897
</Compile>
892-
<Compile Include="UI\Refactorings\ReorderParametersDialog.Designer.cs">
898+
<Compile Include="UI\Refactorings\ReorderParameters\ReorderParametersDialog.Designer.cs">
893899
<DependentUpon>ReorderParametersDialog.cs</DependentUpon>
894900
</Compile>
895901
<Compile Include="UI\RubberduckUI.fr.Designer.cs">
@@ -1122,7 +1128,7 @@
11221128
<EmbeddedResource Include="UI\Refactorings\RenameDialog.resx">
11231129
<DependentUpon>RenameDialog.cs</DependentUpon>
11241130
</EmbeddedResource>
1125-
<EmbeddedResource Include="UI\Refactorings\ReorderParametersDialog.resx">
1131+
<EmbeddedResource Include="UI\Refactorings\ReorderParameters\ReorderParametersDialog.resx">
11261132
<DependentUpon>ReorderParametersDialog.cs</DependentUpon>
11271133
</EmbeddedResource>
11281134
<EmbeddedResource Include="UI\RubberduckUI.fr.resx">
@@ -1483,6 +1489,10 @@
14831489
<Generator>MSBuild:Compile</Generator>
14841490
<SubType>Designer</SubType>
14851491
</Page>
1492+
<Page Include="UI\Refactorings\ReorderParameters\ReorderParametersView.xaml">
1493+
<SubType>Designer</SubType>
1494+
<Generator>MSBuild:Compile</Generator>
1495+
</Page>
14861496
<Page Include="UI\RegexAssistant\RegexAssistant.xaml">
14871497
<Generator>MSBuild:Compile</Generator>
14881498
<SubType>Designer</SubType>

RetailCoder.VBE/UI/Command/Refactorings/RefactorReorderParametersCommand.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
using Rubberduck.Parsing.Symbols;
55
using Rubberduck.Parsing.VBA;
66
using Rubberduck.Refactorings.ReorderParameters;
7-
using Rubberduck.UI.Refactorings;
7+
using Rubberduck.UI.Refactorings.ReorderParameters;
88
using Rubberduck.VBEditor;
99
using Rubberduck.VBEditor.SafeComWrappers.Abstract;
1010

@@ -69,7 +69,7 @@ protected override void ExecuteImpl(object parameter)
6969
}
7070
var selection = new QualifiedSelection(new QualifiedModuleName(module.Parent), pane.Selection);
7171

72-
using (var view = new ReorderParametersDialog())
72+
using (var view = new ReorderParametersDialog(new ReorderParametersViewModel(_state)))
7373
{
7474
var factory = new ReorderParametersPresenterFactory(Vbe, view, _state, _msgbox);
7575
var refactoring = new ReorderParametersRefactoring(Vbe, factory, _msgbox);
Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
using System.Windows;
2+
using System.Windows.Documents;
3+
using System.Windows.Media;
4+
using System.Windows.Shapes;
5+
6+
namespace Rubberduck.UI.Refactorings.ReorderParameters
7+
{
8+
// borrowed from https://fxmax.wordpress.com/2010/10/05/wpf/
9+
public class DragAdorner : Adorner
10+
{
11+
private readonly Rectangle _child;
12+
private double _offsetLeft;
13+
private double _offsetTop;
14+
15+
/// <summary>
16+
/// Initializes a new instance of DragVisualAdorner.
17+
/// </summary>
18+
/// <param name="adornedElement">The element being adorned.</param>
19+
/// <param name="size">The size of the adorner.</param>
20+
/// <param name="brush">A brush to with which to paint the adorner.</param>
21+
public DragAdorner(UIElement adornedElement, Size size, Brush brush)
22+
: base(adornedElement)
23+
{
24+
var rect = new Rectangle
25+
{
26+
Fill = brush,
27+
Width = size.Width,
28+
Height = size.Height,
29+
IsHitTestVisible = false
30+
};
31+
_child = rect;
32+
}
33+
34+
public override GeneralTransform GetDesiredTransform(GeneralTransform transform)
35+
{
36+
var result = new GeneralTransformGroup();
37+
result.Children.Add(base.GetDesiredTransform(transform));
38+
result.Children.Add(new TranslateTransform(_offsetLeft, _offsetTop));
39+
return result;
40+
}
41+
42+
43+
/// <summary>
44+
/// Gets/sets the horizontal offset of the adorner.
45+
/// </summary>
46+
public double OffsetLeft
47+
{
48+
get { return _offsetLeft; }
49+
set
50+
{
51+
_offsetLeft = value;
52+
UpdateLocation();
53+
}
54+
}
55+
56+
57+
/// <summary>
58+
/// Updates the location of the adorner.
59+
/// </summary>
60+
/// <param name="left"></param>
61+
/// <param name="top"></param>
62+
public void SetOffsets(double left, double top)
63+
{
64+
_offsetLeft = left;
65+
_offsetTop = top;
66+
UpdateLocation();
67+
}
68+
69+
70+
/// <summary>
71+
/// Gets/sets the vertical offset of the adorner.
72+
/// </summary>
73+
public double OffsetTop
74+
{
75+
get { return _offsetTop; }
76+
set
77+
{
78+
_offsetTop = value;
79+
UpdateLocation();
80+
}
81+
}
82+
83+
/// <summary>
84+
/// Override.
85+
/// </summary>
86+
/// <param name="constraint"></param>
87+
/// <returns></returns>
88+
protected override Size MeasureOverride(Size constraint)
89+
{
90+
_child.Measure(constraint);
91+
return _child.DesiredSize;
92+
}
93+
94+
/// <summary>
95+
/// Override.
96+
/// </summary>
97+
/// <param name="finalSize"></param>
98+
/// <returns></returns>
99+
protected override Size ArrangeOverride(Size finalSize)
100+
{
101+
_child.Arrange(new Rect(finalSize));
102+
return finalSize;
103+
}
104+
105+
/// <summary>
106+
/// Override.
107+
/// </summary>
108+
/// <param name="index"></param>
109+
/// <returns></returns>
110+
protected override Visual GetVisualChild(int index)
111+
{
112+
return _child;
113+
}
114+
115+
/// <summary>
116+
/// Override. Always returns 1.
117+
/// </summary>
118+
protected override int VisualChildrenCount => 1;
119+
120+
private void UpdateLocation()
121+
{
122+
var adornerLayer = Parent as AdornerLayer;
123+
adornerLayer?.Update(AdornedElement);
124+
}
125+
}
126+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
using System;
2+
using System.Globalization;
3+
using System.Windows.Data;
4+
5+
namespace Rubberduck.UI.Refactorings.ReorderParameters
6+
{
7+
public class IndexIsNotLastConverter : IMultiValueConverter
8+
{
9+
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
10+
{
11+
var selectedIndex = (int)values[0];
12+
var indexCount = (int)values[1] - 1;
13+
return selectedIndex < indexCount;
14+
}
15+
16+
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
17+
{
18+
throw new NotImplementedException();
19+
}
20+
}
21+
}

0 commit comments

Comments
 (0)