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
path: root/main
diff options
context:
space:
mode:
authorJeffrey Stedfast <jeff@xamarin.com>2013-08-08 01:49:43 +0400
committerJeffrey Stedfast <jeff@xamarin.com>2013-08-08 01:49:43 +0400
commitc5baa9fb8976efc860a65d5f0255ee5c1d296a4b (patch)
treef414a18f7366a5c6d250cb4ddc4ad6abd1e0dc7c /main
parent77beefd0e767d941f3d2f90eb64d2a4d68313afc (diff)
[Ide] Fixes to support grouped ExecutionTargets
Diffstat (limited to 'main')
-rw-r--r--main/src/core/MonoDevelop.Core/MonoDevelop.Core.Execution/ExecutionTarget.cs10
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/ConfigurationMerger.cs41
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/MainToolbar.cs24
3 files changed, 60 insertions, 15 deletions
diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Core.Execution/ExecutionTarget.cs b/main/src/core/MonoDevelop.Core/MonoDevelop.Core.Execution/ExecutionTarget.cs
index 80b2cbcb38..acb5bc5cb2 100644
--- a/main/src/core/MonoDevelop.Core/MonoDevelop.Core.Execution/ExecutionTarget.cs
+++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Core.Execution/ExecutionTarget.cs
@@ -41,6 +41,11 @@ namespace MonoDevelop.Core.Execution
public abstract string Name { get; }
/// <summary>
+ /// The display name of the item when it is selected
+ /// </summary>
+ public virtual string FullName { get { return Name; } }
+
+ /// <summary>
/// Unique identifier of the target
/// </summary>
public abstract string Id { get; }
@@ -55,6 +60,11 @@ namespace MonoDevelop.Core.Execution
{
return Id.GetHashCode ();
}
+
+ public override string ToString ()
+ {
+ return string.Format ("[ExecutionTarget: Name={0}, FullName={1}, Id={2}]", Name, FullName, Id);
+ }
}
public class ExecutionTargetGroup : ExecutionTarget, IList<ExecutionTarget>
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/ConfigurationMerger.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/ConfigurationMerger.cs
index 41f2919492..d32eb80443 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/ConfigurationMerger.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/ConfigurationMerger.cs
@@ -177,6 +177,34 @@ namespace MonoDevelop.Components.MainToolbar
currentSolutionConfigurations.Sort ();
}
+ static ExecutionTarget FirstRealExecutionTarget (IEnumerable<ExecutionTarget> targets)
+ {
+ foreach (var target in targets) {
+ if (target is ExecutionTargetGroup) {
+ var first = FirstRealExecutionTarget ((ExecutionTargetGroup) target);
+ if (first != null)
+ return first;
+ } else if (!(target is DummyExecutionTarget)) {
+ return target;
+ }
+ }
+
+ return null;
+ }
+
+ static bool ExecutionTargetsContains (IEnumerable<ExecutionTarget> targets, ExecutionTarget desired)
+ {
+ foreach (var target in targets) {
+ if (target == desired)
+ return true;
+
+ if ((target is ExecutionTargetGroup) && ExecutionTargetsContains ((ExecutionTargetGroup) target, desired))
+ return true;
+ }
+
+ return false;
+ }
+
/// <summary>
/// Gets the full configuration name given a possibly merged configuration name and execution target
/// </summary>
@@ -201,14 +229,15 @@ namespace MonoDevelop.Components.MainToolbar
// The selected configuration is not reduced, just use it as full config name
resolvedConfig = currentConfig;
var part = currentTargetPartitions.FirstOrDefault (p => p.SolutionConfigurations.Contains (currentConfig));
- if (part == null)
+ if (part != null) {
+ if (!ExecutionTargetsContains (part.Targets, resolvedTarget))
+ resolvedTarget = FirstRealExecutionTarget (part.Targets);
+ } else {
resolvedTarget = null;
- else if (!part.Targets.Contains (resolvedTarget))
- resolvedTarget = part.Targets.FirstOrDefault (t => !(t is DummyExecutionTarget));
+ }
} else {
// Reduced configuration. Find the partition and guess the implicit project configuration
-
- var part = currentTargetPartitions.FirstOrDefault (p => p.Targets.Contains (currentTarget ?? dummyExecutionTarget));
+ var part = currentTargetPartitions.FirstOrDefault (p => ExecutionTargetsContains (p.Targets, currentTarget ?? dummyExecutionTarget));
if (part != null) {
resolvedConfig = part.SolutionConfigurations.FirstOrDefault (c => {
string name, plat;
@@ -221,7 +250,7 @@ namespace MonoDevelop.Components.MainToolbar
if (part == null)
part = currentTargetPartitions.FirstOrDefault (p => p.SolutionConfigurations.Contains (currentConfig));
if (part != null) {
- resolvedTarget = part.Targets.FirstOrDefault (t => !(t is DummyExecutionTarget));
+ resolvedTarget = FirstRealExecutionTarget (part.Targets);
resolvedConfig = part.SolutionConfigurations.FirstOrDefault (c => {
string name, plat;
ItemConfiguration.ParseConfigurationId (c, out name, out plat);
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/MainToolbar.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/MainToolbar.cs
index 1d22efcfb0..5cef07f81f 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/MainToolbar.cs
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Components.MainToolbar/MainToolbar.cs
@@ -126,7 +126,7 @@ namespace MonoDevelop.Components.MainToolbar
return target == null;
}
- static void RuntimeRenderCell (CellLayout layout, CellRenderer cell, TreeModel model, TreeIter iter)
+ void RuntimeRenderCell (CellLayout layout, CellRenderer cell, TreeModel model, TreeIter iter)
{
var target = (ExecutionTarget) model.GetValue (iter, RuntimeExecutionTarget);
var indent = (bool) model.GetValue (iter, RuntimeIsIndented);
@@ -140,7 +140,11 @@ namespace MonoDevelop.Components.MainToolbar
}
renderer.Xpad = indent ? (uint) 18 : (uint) 3;
- renderer.Text = target.Name;
+
+ if (!runtimeCombo.PopupShown)
+ renderer.Text = target.FullName;
+ else
+ renderer.Text = target.Name;
}
public MainToolbar ()
@@ -585,10 +589,8 @@ namespace MonoDevelop.Components.MainToolbar
SelectActiveRuntime ();
}
- bool SelectActiveRuntime (TreeIter iter, ref ExecutionTarget defaultTarget, ref TreeIter defaultIter)
+ bool SelectActiveRuntime (TreeIter iter, ref bool selected, ref ExecutionTarget defaultTarget, ref TreeIter defaultIter)
{
- bool selected = false;
-
do {
var target = (ExecutionTarget) runtimeStore.GetValue (iter, RuntimeExecutionTarget);
@@ -598,8 +600,10 @@ namespace MonoDevelop.Components.MainToolbar
if (target is ExecutionTargetGroup) {
TreeIter child;
- if (runtimeStore.IterHasChild (iter) && runtimeStore.IterChildren (out child, iter))
- selected = SelectActiveRuntime (child, ref defaultTarget, ref defaultIter);
+ if (runtimeStore.IterHasChild (iter) && runtimeStore.IterChildren (out child, iter)) {
+ if (SelectActiveRuntime (child, ref selected, ref defaultTarget, ref defaultIter))
+ return true;
+ }
continue;
}
@@ -613,6 +617,7 @@ namespace MonoDevelop.Components.MainToolbar
IdeApp.Workspace.ActiveExecutionTarget = target;
runtimeCombo.SetActiveIter (iter);
UpdateBuildConfiguration ();
+ selected = true;
return true;
}
@@ -623,7 +628,7 @@ namespace MonoDevelop.Components.MainToolbar
}
} while (runtimeStore.IterNext (ref iter));
- return selected;
+ return false;
}
void SelectActiveRuntime ()
@@ -636,8 +641,9 @@ namespace MonoDevelop.Components.MainToolbar
if (runtimeStore.GetIterFirst (out iter)) {
ExecutionTarget defaultTarget = null;
TreeIter defaultIter = TreeIter.Zero;
+ bool selected = false;
- if (!SelectActiveRuntime (iter, ref defaultTarget, ref defaultIter)) {
+ if (!SelectActiveRuntime (iter, ref selected, ref defaultTarget, ref defaultIter) && !selected) {
if (defaultTarget != null) {
IdeApp.Workspace.ActiveExecutionTarget = defaultTarget;
runtimeCombo.SetActiveIter (defaultIter);