diff options
author | Lluis Sanchez <lluis@xamarin.com> | 2016-05-31 10:16:47 +0300 |
---|---|---|
committer | Lluis Sanchez <lluis@xamarin.com> | 2016-05-31 10:25:47 +0300 |
commit | ff27de106d892463c3fab4e623462e65d9b04fb6 (patch) | |
tree | f9cf1b52c78f0ec58b41bb3c2b728908e3a05cc4 /main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Execution | |
parent | 942a665be2b7b484f1b746b541022d18abd16a7e (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')
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 (); } } |