Skip to content

Commit 520939f

Browse files
committed
Revise the base dialog and presenter to abstract out the parameters that vary from dialog to dialog, allowing the presenter to specify those parameters via DialogData struct,
1 parent 8d70a34 commit 520939f

File tree

5 files changed

+303
-284
lines changed

5 files changed

+303
-284
lines changed

Rubberduck.Core/UI/Refactorings/IRefactoringDialogFactory.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ TViewModel CreateViewModel<TModel, TViewModel>(TModel model)
1414
where TViewModel : class, IRefactoringViewModel<TModel>;
1515
void ReleaseViewModel(IRefactoringViewModel viewModel);
1616

17-
TDialog CreateDialog<TModel, TView, TViewModel, TDialog>(TModel model, TView view, TViewModel viewmodel)
17+
TDialog CreateDialog<TModel, TView, TViewModel, TDialog>(DialogData dialogData, TModel model, TView view, TViewModel viewmodel)
1818
where TModel : class
1919
where TView : class, IRefactoringView<TModel>
2020
where TViewModel : class, IRefactoringViewModel<TModel>

Rubberduck.Core/UI/Refactorings/RefactoringDialogBase.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ namespace Rubberduck.UI.Refactorings
55
{
66
public partial class RefactoringDialogBase : Form
77
{
8-
protected virtual int MinWidth => 400;
9-
protected virtual int MinHeight => 150;
8+
protected int MinWidth;
9+
protected int MinHeight;
1010

1111
protected RefactoringDialogBase()
1212
{

Rubberduck.Core/UI/Refactorings/RefactoringDialogBaseGeneric.cs

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,31 @@
22

33
namespace Rubberduck.UI.Refactorings
44
{
5+
public readonly struct DialogData
6+
{
7+
public string Caption { get; }
8+
public int MinimumHeight { get; }
9+
public int MinimumWidth { get; }
10+
11+
public DialogData(string caption, int minimumHeight, int minimumWidth)
12+
{
13+
Caption = caption;
14+
MinimumHeight = minimumHeight;
15+
MinimumWidth = minimumWidth;
16+
}
17+
18+
public static DialogData Create(string caption, int minimumHeight, int minimumWidth)
19+
{
20+
return new DialogData(caption, minimumHeight, minimumWidth);
21+
}
22+
}
23+
524
public class RefactoringDialogBase<TModel, TView, TViewModel> : RefactoringDialogBase, IRefactoringDialog<TModel, TView, TViewModel>
625
where TModel : class
7-
where TView : System.Windows.Controls.UserControl, IRefactoringView<TModel>
26+
where TView : class, IRefactoringView<TModel>
827
where TViewModel : class, IRefactoringViewModel<TModel>
928
{
10-
public RefactoringDialogBase(TModel model, TView view, TViewModel viewModel)
29+
public RefactoringDialogBase(DialogData dialogData, TModel model, TView view, TViewModel viewModel)
1130
{
1231
Model = model;
1332
ViewModel = viewModel;
@@ -16,7 +35,17 @@ public RefactoringDialogBase(TModel model, TView view, TViewModel viewModel)
1635
View.DataContext = ViewModel;
1736
ViewModel.OnWindowClosed += ViewModel_OnWindowClosed;
1837

19-
UserControl = View;
38+
MinHeight = dialogData.MinimumHeight;
39+
MinWidth = dialogData.MinimumWidth;
40+
41+
// ReSharper disable once RedundantBaseQualifier
42+
// We don't want virtual calls here so we need to explicitly call base.
43+
base.Text = dialogData.Caption;
44+
45+
// Note that user control must be set after dialog data has been consumed to ensure
46+
// correct sizing of the dialog
47+
System.Diagnostics.Debug.Assert(View is System.Windows.Controls.UserControl);
48+
UserControl = View as System.Windows.Controls.UserControl;
2049
}
2150

2251
public TModel Model { get; }

Rubberduck.Core/UI/Refactorings/RefactoringPresenterBase.cs

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,31 @@
33

44
namespace Rubberduck.UI.Refactorings
55
{
6-
public abstract class RefactoringPresenterBase<TModel, TDialog, TView, TViewModel> : IDisposable, IRefactoringPresenter<TModel, TDialog, TView, TViewModel>
6+
public abstract class RefactoringPresenterBase<TModel> :
7+
RefactoringPresenterGenericBase<
8+
TModel,
9+
IRefactoringDialog<TModel, IRefactoringView<TModel>, IRefactoringViewModel<TModel>>,
10+
IRefactoringView<TModel>,
11+
IRefactoringViewModel<TModel>>
12+
where TModel : class
13+
{
14+
protected RefactoringPresenterBase(DialogData dialogData, TModel model, IRefactoringDialogFactory factory):base(dialogData, model, factory) { }
15+
}
16+
17+
public abstract class RefactoringPresenterGenericBase<TModel, TDialog, TView, TViewModel> : IDisposable, IRefactoringPresenter<TModel, TDialog, TView, TViewModel>
718
where TModel : class
819
where TView : class, IRefactoringView<TModel>
920
where TViewModel : class, IRefactoringViewModel<TModel>
1021
where TDialog : class, IRefactoringDialog<TModel, TView, TViewModel>
1122
{
1223
private readonly IRefactoringDialogFactory _factory;
1324

14-
protected RefactoringPresenterBase(TModel model, IRefactoringDialogFactory factory)
25+
protected RefactoringPresenterGenericBase(DialogData dialogData, TModel model, IRefactoringDialogFactory factory)
1526
{
1627
_factory = factory;
1728
var view = _factory.CreateView<TModel, TView>(model);
1829
var viewModel = _factory.CreateViewModel<TModel, TViewModel>(model);
19-
Dialog = _factory.CreateDialog<TModel, TView, TViewModel, TDialog>(model, view, viewModel);
30+
Dialog = _factory.CreateDialog<TModel, TView, TViewModel, TDialog>(dialogData, model, view, viewModel);
2031
}
2132

2233
public TDialog Dialog { get; }

0 commit comments

Comments
 (0)