Skip to content
This repository was archived by the owner on Oct 4, 2021. It is now read-only.

Commit a415aae

Browse files
committed
Thread wizard cancellation token
1 parent fa14f8c commit a415aae

File tree

11 files changed

+54
-51
lines changed

11 files changed

+54
-51
lines changed

main/src/addins/MonoDevelop.AspNetCore/MonoDevelop.AspNetCore.Commands/ScaffoldCommandHandler.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using System.Linq;
3+
using System.Threading;
34
using MonoDevelop.AspNetCore.Scaffolding;
45
using MonoDevelop.Components.Commands;
56
using MonoDevelop.Ide;

main/src/addins/MonoDevelop.AspNetCore/MonoDevelop.AspNetCore.Scaffolding/ScaffolderArgs.cs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,7 @@
2323
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
2424
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
2525
// THE SOFTWARE.
26-
using System.Collections.ObjectModel;
27-
using System.ComponentModel;
28-
using System.Reflection;
29-
using MonoDevelop.Components;
26+
using System.Threading;
3027
using MonoDevelop.Core;
3128
using MonoDevelop.Projects;
3229

@@ -43,5 +40,6 @@ public override int GetHashCode ()
4340

4441
public DotNetProject Project { get; internal set; }
4542
public FilePath ParentFolder { get; internal set; }
43+
public CancellationToken CancellationToken { get; internal set; }
4644
}
4745
}

main/src/addins/MonoDevelop.AspNetCore/MonoDevelop.AspNetCore.Scaffolding/ScaffolderDialogController.cs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,7 @@ class ScaffolderDialogController : WizardDialogControllerBase
4040
readonly ScaffolderArgs args;
4141

4242
readonly IWizardDialogPage firstPage;
43-
44-
Dictionary<ScaffolderArgs, ScaffolderTemplateConfigurePage> cachedPages
43+
readonly Dictionary<ScaffolderArgs, ScaffolderTemplateConfigurePage> cachedPages
4544
= new Dictionary<ScaffolderArgs, ScaffolderTemplateConfigurePage> ();
4645

4746
public override bool CanGoBack {
@@ -61,13 +60,13 @@ public ScaffolderDialogController (string title, Image icon, IWizardDialogPage f
6160
this.args = args;
6261
}
6362

64-
ScaffolderTemplateConfigurePage GetConfigurePage (ScaffolderArgs args)
63+
ScaffolderTemplateConfigurePage GetConfigurePage (ScaffolderArgs args, CancellationToken token)
6564
{
6665
// we want to return the same instance for the same args
6766
if (cachedPages.ContainsKey (args)) {
6867
return cachedPages [args];
6968
} else {
70-
var page = new ScaffolderTemplateConfigurePage (args);
69+
var page = new ScaffolderTemplateConfigurePage (args, token);
7170
cachedPages.Add (args, page);
7271
return page;
7372
}
@@ -77,7 +76,7 @@ protected override Task<IWizardDialogPage> OnGoNext (CancellationToken token)
7776
{
7877
switch (CurrentPage) {
7978
case ScaffolderTemplateSelectPage _:
80-
IWizardDialogPage configPage = GetConfigurePage (args);
79+
IWizardDialogPage configPage = GetConfigurePage (args, token);
8180
return Task.FromResult (configPage);
8281
}
8382
return Task.FromException<IWizardDialogPage> (new InvalidOperationException ());

main/src/addins/MonoDevelop.AspNetCore/MonoDevelop.AspNetCore.Scaffolding/ScaffolderTemplateConfigurePage.cs

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
2525
// THE SOFTWARE.
2626
using System.Linq;
27+
using System.Threading;
2728
using System.Threading.Tasks;
2829
using MonoDevelop.Core;
2930
using Xwt;
@@ -32,12 +33,13 @@ namespace MonoDevelop.AspNetCore.Scaffolding
3233
{
3334
class ScaffolderTemplateConfigurePage : ScaffolderWizardPageBase
3435
{
35-
ScaffolderBase scaffolder;
36+
readonly ScaffolderBase scaffolder;
3637

37-
public ScaffolderTemplateConfigurePage (ScaffolderArgs args) : base (args)
38+
public ScaffolderTemplateConfigurePage (ScaffolderArgs args, CancellationToken token) : base (args)
3839
{
3940
scaffolder = args.Scaffolder;
40-
this.SubSubTitle = scaffolder.Name;
41+
SubSubTitle = scaffolder.Name;
42+
args.CancellationToken = token;
4143
}
4244

4345
protected override Widget GetMainControl ()
@@ -47,16 +49,16 @@ protected override Widget GetMainControl ()
4749

4850
var rowCount = fields.Count ();
4951
int rowAdditionCount = 0;
50-
for(int fieldIndex = 0; fieldIndex < rowCount; fieldIndex++) {
52+
for (int fieldIndex = 0; fieldIndex < rowCount; fieldIndex++) {
5153
int rowIndex = fieldIndex + rowAdditionCount;
52-
var field = fields[fieldIndex];
54+
var field = fields [fieldIndex];
5355
var label = new Label ();
5456

5557
switch (field) {
5658
case StringField s:
5759
var input = new TextEntry ();
5860
label.Text = s.DisplayName;
59-
table.Add (label, 0, rowIndex, hpos:WidgetPlacement.End);
61+
table.Add (label, 0, rowIndex, hpos: WidgetPlacement.End);
6062
table.Add (input, 1, rowIndex);
6163
input.Changed += (sender, args) => s.SelectedValue = input.Text;
6264
input.SetFocus ();
@@ -67,13 +69,12 @@ protected override Widget GetMainControl ()
6769
var comboBoxEntry = new ComboBoxEntry ();
6870
comboBoxEntry.TextEntry.Changed += (sender, args) => comboField.SelectedValue = comboBoxEntry.TextEntry.Text;
6971
comboBox = comboBoxEntry;
70-
} else {
72+
} else {
7173
comboBox = new ComboBox ();
72-
}
74+
}
7375

7476
Task.Run (async () => {
75-
var options = await comboField.Options.ConfigureAwait (false);
76-
77+
var options = await comboField.Options;
7778
await Runtime.RunInMainThread (() =>
7879
Xwt.Toolkit.NativeEngine.Invoke (() => {
7980
foreach (var option in options) {
@@ -83,13 +84,11 @@ await Runtime.RunInMainThread (() =>
8384
if (comboBox.Items.Count > 0)
8485
comboBox.SelectedIndex = 0;
8586
}));
86-
});
87-
88-
87+
}, Args.CancellationToken);
8988

9089
label.Text = comboField.DisplayName;
9190

92-
table.Add (label, 0, rowIndex, hpos:WidgetPlacement.End);
91+
table.Add (label, 0, rowIndex, hpos: WidgetPlacement.End);
9392
table.Add (comboBox, 1, rowIndex);
9493
comboBox.TextInput += (sender, args) => comboField.SelectedValue = comboBox.SelectedText;
9594

@@ -98,16 +97,17 @@ await Runtime.RunInMainThread (() =>
9897
break;
9998
case BoolFieldList boolFieldList:
10099
label.Text = boolFieldList.DisplayName;
101-
table.Add (label, 0, rowIndex, hpos:WidgetPlacement.End, vpos:WidgetPlacement.Start);
100+
table.Add (label, 0, rowIndex, hpos: WidgetPlacement.End, vpos: WidgetPlacement.Start);
102101
var vbox = new VBox ();
103-
for(int i = 0; i < boolFieldList.Options.Count; i++) {
102+
for (int i = 0; i < boolFieldList.Options.Count; i++) {
104103
var boolField = boolFieldList.Options [i];
105-
var checkbox = new CheckBox (boolField.DisplayName);
106-
checkbox.Active = boolField.Selected;
107-
checkbox.Sensitive = boolField.Enabled;
104+
var checkbox = new CheckBox (boolField.DisplayName) {
105+
Active = boolField.Selected,
106+
Sensitive = boolField.Enabled
107+
};
108108
checkbox.Toggled += (sender, args) => boolField.Selected = checkbox.Active;
109109
vbox.PackStart (checkbox);
110-
}
110+
}
111111
table.Add (vbox, 1, rowIndex);
112112
break;
113113
case FileField fileField:
@@ -116,15 +116,15 @@ await Runtime.RunInMainThread (() =>
116116
// This doesn't work with native toolkit!
117117
var filter = new FileDialogFilter (fileField.FilterWildcard, fileField.FilterWildcard);
118118
fileSelector.Filters.Add (filter);
119-
}
120-
table.Add (fileSelector, 0, rowIndex, colspan:2);
119+
}
120+
table.Add (fileSelector, 0, rowIndex, colspan: 2);
121121
label.Text = fileField.DisplayName;
122-
table.Add (label, 0, rowIndex + 1, colspan:2);
122+
table.Add (label, 0, rowIndex + 1, colspan: 2);
123123
rowAdditionCount++;
124124
fileSelector.FileChanged += (sender, args) => fileField.SelectedValue = fileSelector.FileName;
125125
break;
126126
}
127-
127+
128128
}
129129
return table;
130130
}

main/src/addins/MonoDevelop.AspNetCore/MonoDevelop.AspNetCore.Scaffolding/ScaffolderTemplateSelectPage.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
2525
// THE SOFTWARE.
2626
using System;
27+
using System.Threading;
2728
using Xwt;
2829
using Xwt.Drawing;
2930

main/src/addins/MonoDevelop.AspNetCore/MonoDevelop.AspNetCore.Scaffolding/ScaffolderWizard.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
//
1+
//
22
// Scaffolder.cs
33
//
44
// Author:
@@ -26,6 +26,7 @@
2626
using System;
2727
using System.Collections.Generic;
2828
using System.Linq;
29+
using System.Threading;
2930
using System.Threading.Tasks;
3031
using MonoDevelop.Components;
3132
using MonoDevelop.Core;
@@ -153,7 +154,7 @@ internal string GetArguments (ScaffolderArgs args)
153154
argBuilder.AddQuoted (project.FileName);
154155
argBuilder.Add (args.Scaffolder.CommandLineName);
155156

156-
foreach(var field in args.Scaffolder.Fields) {
157+
foreach (var field in args.Scaffolder.Fields) {
157158
argBuilder.Add (field.CommandLineName);
158159
argBuilder.Add (field.SelectedValue);
159160
}

main/src/addins/MonoDevelop.AspNetCore/MonoDevelop.AspNetCore.Scaffolding/ScaffolderWizardPageBase.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ public string SubSubTitle {
4444
protected set => subSubTitle = value;
4545
}
4646

47-
public ScaffolderArgs Args { get; }
47+
protected ScaffolderArgs Args { get; }
4848

4949
protected override Control CreateControl ()
5050
{

main/src/addins/MonoDevelop.AspNetCore/MonoDevelop.AspNetCore.Scaffolding/Scaffolders/ApiControllerEntityFrameworkScaffolder.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,8 @@ public ApiControllerEntityFrameworkScaffolder (ScaffolderArgs args) : base (args
4444
IEnumerable<ScaffolderField> GetFields ()
4545
{
4646
fields = new ScaffolderField [] {
47-
GetModelField(args.Project),
48-
GetDbContextField(args.Project),
47+
GetModelField(args),
48+
GetDbContextField(args),
4949
new StringField ("-name", "Controller name:"),
5050

5151
};

main/src/addins/MonoDevelop.AspNetCore/MonoDevelop.AspNetCore.Scaffolding/Scaffolders/RazorPageEntityFrameworkCrudScaffolder.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
2525
// THE SOFTWARE.
2626
using System.Collections.Generic;
27+
using System.Threading;
2728

2829
namespace MonoDevelop.AspNetCore.Scaffolding
2930
{
@@ -49,8 +50,8 @@ IEnumerable<ScaffolderField> GetFields ()
4950
};
5051

5152
fields = new ScaffolderField [] {
52-
GetModelField(args.Project),
53-
GetDbContextField(args.Project),
53+
GetModelField(args),
54+
GetDbContextField(args),
5455
new BoolFieldList(options),
5556
CustomLayoutField
5657
};

main/src/addins/MonoDevelop.AspNetCore/MonoDevelop.AspNetCore.Scaffolding/Scaffolders/RazorPageEntityFrameworkScaffolder.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
2525
// THE SOFTWARE.
2626
using System.Collections.Generic;
27+
using System.Threading;
2728
using System.Threading.Tasks;
2829

2930
namespace MonoDevelop.AspNetCore.Scaffolding
@@ -55,8 +56,8 @@ IEnumerable<ScaffolderField> GetFields()
5556
fields = new ScaffolderField [] {
5657
NameField,
5758
new ComboField ("", "The template to use, supported view templates", Task.FromResult(viewTemplateOptions)),
58-
GetModelField(args.Project),
59-
GetDbContextField(args.Project),
59+
GetModelField(args),
60+
GetDbContextField(args),
6061
new BoolFieldList(options),
6162
CustomLayoutField
6263
};

0 commit comments

Comments
 (0)