Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/monodevelop.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLluis Sanchez <lluis@xamarin.com>2016-05-31 10:16:47 +0300
committerLluis Sanchez <lluis@xamarin.com>2016-05-31 10:25:47 +0300
commitff27de106d892463c3fab4e623462e65d9b04fb6 (patch)
treef9cf1b52c78f0ec58b41bb3c2b728908e3a05cc4 /main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Execution
parent942a665be2b7b484f1b746b541022d18abd16a7e (diff)
Execution system changes
Introduced SolutionItemRunConfiguration. RunConfiguraiton is now the base class for all run configuration types. Added IRunTarget, which is an executable entity. Added stock execution modes, and added support for registering handlers on them. Created IConfigurableExecutionHandler, which can be used to configure a project or handler before execution.
Diffstat (limited to 'main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Execution')
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Execution/CommandExecutionContext.cs8
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Execution/ExecutionModeCommandService.cs25
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Execution/ExecutionModeSelectorDialog.cs40
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Execution/RunConfigurationEditor.cs2
4 files changed, 54 insertions, 21 deletions
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Execution/CommandExecutionContext.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Execution/CommandExecutionContext.cs
index 56103a2c2b..64566f8a12 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Execution/CommandExecutionContext.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Execution/CommandExecutionContext.cs
@@ -47,7 +47,13 @@ namespace MonoDevelop.Ide.Execution
this.project = project;
this.cmd = cmd;
}
-
+
+ public CommandExecutionContext (IRunTarget project, CanExecuteDelegate runCheckDelegate)
+ {
+ this.project = project as SolutionItem;
+ this.runCheckDelegate = runCheckDelegate;
+ }
+
public SolutionItem Project {
get { return project; }
}
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Execution/ExecutionModeCommandService.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Execution/ExecutionModeCommandService.cs
index b13bce51a3..f24e09610a 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Execution/ExecutionModeCommandService.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Execution/ExecutionModeCommandService.cs
@@ -436,7 +436,7 @@ namespace MonoDevelop.Ide.Execution
public static void GenerateExecutionModeCommands (SolutionItem item, CommandArrayInfo info)
{
foreach (var c in ExecutionModeCommandService.GetExecutionConfigurations (item)) {
- info.Add (c.ModeSet.Name + " " + c.RunConfiguration.Name, c);
+ info.Add (c.ModeSet.Name + " — " + c.RunConfiguration.Name, c);
}
info.AddSeparator ();
info.Add (GettextCatalog.GetString ("Custom Configuration..."), "selector");
@@ -452,24 +452,23 @@ namespace MonoDevelop.Ide.Execution
if (cmd.Id == "run") {
// Store the configuration for quick reuse
- if (!dlg.SelectedConfiguration.IsDefaultConfiguration || (dlg.SelectedExecutionMode.Id != "Run" && dlg.SelectedExecutionMode.Id != "Debug")) {
- var ec = new ExecutionConfiguration (dlg.SelectedConfiguration, null, dlg.SelectedExecutionMode);
- var list = ExecutionModeCommandService.GetExecutionConfigurations (item).ToList ();
- list.Remove (ec);
- list.Insert (0, ec);
- while (list.Count > 10)
- list.RemoveAt (list.Count - 1);
- ExecutionModeCommandService.SetExecutionConfigurations (item, list.ToArray ());
- }
+ var ec = new ExecutionConfiguration (dlg.SelectedConfiguration, dlg.SelectedExecutionModeSet, dlg.SelectedExecutionMode);
+ var list = ExecutionModeCommandService.GetExecutionConfigurations (item).ToList ();
+ list.Remove (ec);
+ list.Insert (0, ec);
+ while (list.Count > 10)
+ list.RemoveAt (list.Count - 1);
+ ExecutionModeCommandService.SetExecutionConfigurations (item, list.ToArray ());
// Run the configuration
- IdeApp.ProjectOperations.Execute (item, dlg.SelectedExecutionMode.ExecutionHandler);
+ IdeApp.ProjectOperations.Execute (item, dlg.SelectedExecutionMode.ExecutionHandler, IdeApp.Workspace.ActiveConfiguration, dlg.SelectedConfiguration);
}
+ return;
}
}
}
var c = (ExecutionConfiguration)data;
- IdeApp.ProjectOperations.Execute (item, c.Mode.ExecutionHandler);
+ IdeApp.ProjectOperations.Execute (item, c.Mode.ExecutionHandler, IdeApp.Workspace.ActiveConfiguration, c.RunConfiguration);
}
internal static ExecutionConfiguration[] GetExecutionConfigurations (SolutionItem item)
@@ -506,7 +505,7 @@ namespace MonoDevelop.Ide.Execution
executionModeId = mode.Id;
}
- internal bool Resolve (SolutionItem item)
+ internal bool Resolve (IRunTarget item)
{
if (RunConfiguration != null && Mode != null)
return true;
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Execution/ExecutionModeSelectorDialog.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Execution/ExecutionModeSelectorDialog.cs
index aa0c46ec49..7c7640fa21 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Execution/ExecutionModeSelectorDialog.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Execution/ExecutionModeSelectorDialog.cs
@@ -34,8 +34,9 @@ namespace MonoDevelop.Ide.Execution
{
class ExecutionModeSelectorDialog: Dialog
{
- SolutionItem item;
+ IRunTarget item;
+ DialogButton runButton;
ListView listConfigs;
TreeView treeModes;
@@ -46,6 +47,7 @@ namespace MonoDevelop.Ide.Execution
DataField<RunConfiguration> configField = new DataField<RunConfiguration> ();
DataField<string> modeNameField = new DataField<string> ();
DataField<IExecutionMode> modeField = new DataField<IExecutionMode> ();
+ DataField<IExecutionModeSet> modeSetField = new DataField<IExecutionModeSet> ();
public ExecutionModeSelectorDialog ()
{
@@ -67,19 +69,22 @@ namespace MonoDevelop.Ide.Execution
box.PackStart (new Label (GettextCatalog.GetString ("Execution Modes:")));
- storeModes = new TreeStore (modeNameField, modeField);
+ storeModes = new TreeStore (modeNameField, modeField, modeSetField);
treeModes = new TreeView (storeModes);
treeModes.Columns.Add (GettextCatalog.GetString ("Name"), modeNameField);
treeModes.HeightRequest = 130;
box.PackStart (treeModes);
+ runButton = new DialogButton (new Command ("run", GettextCatalog.GetString ("Run")));
+
Buttons.Add (Command.Cancel);
- Buttons.Add (new Command ("run", GettextCatalog.GetString ("Run")));
+ Buttons.Add (runButton);
listConfigs.SelectionChanged += (sender, e) => LoadModes ();
+ treeModes.SelectionChanged += OnModeChanged;
}
- public void Load (SolutionItem item)
+ public void Load (IRunTarget item)
{
this.item = item;
storeConfigs.Clear ();
@@ -96,7 +101,7 @@ namespace MonoDevelop.Ide.Execution
storeModes.Clear ();
var currentMode = SelectedExecutionMode;
bool nodeSelected = false;
- var ctx = new CommandExecutionContext (item, h => item.CanExecute (new ExecutionContext (h, null, IdeApp.Workspace.ActiveExecutionTarget), IdeApp.Workspace.ActiveConfiguration));
+ var ctx = new CommandExecutionContext (item, h => item.CanExecute (new ExecutionContext (h, null, IdeApp.Workspace.ActiveExecutionTarget), IdeApp.Workspace.ActiveConfiguration, SelectedConfiguration));
foreach (var modeSet in Runtime.ProcessService.GetExecutionModes ()) {
TreeNavigator setNode = null;
foreach (var mode in modeSet.ExecutionModes) {
@@ -105,6 +110,7 @@ namespace MonoDevelop.Ide.Execution
setNode = storeModes.AddNode ();
setNode.SetValue (modeNameField, modeSet.Name);
setNode.SetValue (modeField, mode);
+ setNode.SetValue (modeSetField, modeSet);
if (mode.Id == currentMode?.Id) {
treeModes.SelectRow (setNode.CurrentPosition);
nodeSelected = true;
@@ -113,6 +119,7 @@ namespace MonoDevelop.Ide.Execution
var node = storeModes.AddNode (setNode.CurrentPosition);
node.SetValue (modeNameField, mode.Name);
node.SetValue (modeField, mode);
+ node.SetValue (modeSetField, modeSet);
if (!nodeSelected && mode.Id == currentMode?.Id) {
treeModes.SelectRow (node.CurrentPosition);
nodeSelected = true;
@@ -126,10 +133,15 @@ namespace MonoDevelop.Ide.Execution
pos.Remove ();
}
}
- if (!nodeSelected && storeModes.GetFirstNode () != null)
+ if (!nodeSelected && storeModes.GetFirstNode ()?.CurrentPosition != null)
treeModes.SelectRow (storeModes.GetFirstNode ().CurrentPosition);
}
+ void OnModeChanged (object sender, EventArgs e)
+ {
+ UpdateButtons ();
+ }
+
protected override void OnCommandActivated (Command cmd)
{
if (cmd.Id == "run") {
@@ -139,6 +151,15 @@ namespace MonoDevelop.Ide.Execution
base.OnCommandActivated (cmd);
}
+ void UpdateButtons ()
+ {
+ runButton.Sensitive = SelectedConfiguration != null && SelectedExecutionMode != null;
+ if (SelectedExecutionMode != null)
+ runButton.Label = SelectedExecutionModeSet.Name;
+ else
+ runButton.Label = GettextCatalog.GetString ("Run");
+ }
+
public RunConfiguration SelectedConfiguration {
get {
var r = listConfigs.SelectedRow;
@@ -152,6 +173,13 @@ namespace MonoDevelop.Ide.Execution
return n != null ? storeModes.GetNavigatorAt (n).GetValue (modeField) : null;
}
}
+
+ public IExecutionModeSet SelectedExecutionModeSet {
+ get {
+ var n = treeModes.SelectedRow;
+ return n != null ? storeModes.GetNavigatorAt (n).GetValue (modeSetField) : null;
+ }
+ }
}
}
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Execution/RunConfigurationEditor.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Execution/RunConfigurationEditor.cs
index 092abdd92a..8de1be2001 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Execution/RunConfigurationEditor.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Execution/RunConfigurationEditor.cs
@@ -32,7 +32,7 @@ namespace MonoDevelop.Ide.Execution
public abstract class RunConfigurationEditor
{
public abstract Control CreateControl ();
- public abstract void Load (Project project, RunConfiguration config);
+ public abstract void Load (Project project, SolutionItemRunConfiguration config);
public abstract void Save ();
}
}