From 6249d0b545c0504b10e21e228f79e8672ca4dcb9 Mon Sep 17 00:00:00 2001 From: Michael Hutchinson Date: Tue, 19 Jul 2011 23:54:10 +0100 Subject: [Ide] Improve the target framework panel --- .../RuntimeOptionsPanel.cs | 72 ++++++++++++---------- 1 file changed, 38 insertions(+), 34 deletions(-) (limited to 'main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects.OptionPanels') diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects.OptionPanels/RuntimeOptionsPanel.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects.OptionPanels/RuntimeOptionsPanel.cs index 65c09a20bc..8edc5f9b25 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects.OptionPanels/RuntimeOptionsPanel.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Projects.OptionPanels/RuntimeOptionsPanel.cs @@ -66,55 +66,59 @@ namespace MonoDevelop.Ide.Projects.OptionPanels partial class RuntimeOptionsPanelWidget : Gtk.Bin { DotNetProject project; - ArrayList supportedVersions = new ArrayList (); + List frameworks; public RuntimeOptionsPanelWidget (DotNetProject project, IEnumerable configurations) { Build (); this.project = project; - if (project != null) { - // Get the list of available versions, and add only those supported by the target language. - var frameworks = Runtime.SystemAssemblyService.GetTargetFrameworks ().ToList (); - frameworks.Sort ((x, y) => { - var cmp = string.CompareOrdinal (x.Id.Identifier, y.Id.Identifier); - if (cmp != 0) - return cmp; - //sort by version descending - cmp = string.CompareOrdinal (y.Id.Version, x.Id.Version); - if (cmp != 0) - return cmp; - return string.CompareOrdinal (x.Id.Profile, y.Id.Profile); - }); + if (project == null) { + Sensitive = false; + return; + } + + frameworks = Runtime.SystemAssemblyService.GetTargetFrameworks () + .Where (fx => !fx.Hidden && project.TargetRuntime.IsInstalled (fx) && project.SupportsFramework (fx)) + .ToList (); + + bool notInstalled = false; + + if (!frameworks.Any (fx => fx.Id == project.TargetFramework.Id)) { + notInstalled = true; + frameworks.Add (project.TargetFramework); + } - foreach (TargetFramework fx in frameworks) { - if (fx.Hidden) - continue; - if (fx != project.TargetFramework) { - if (!project.TargetRuntime.IsInstalled (fx)) - continue; - if (!project.SupportsFramework (fx)) - continue; - } + //sort by id ascending, version descending, profile ascending + frameworks.Sort ((x, y) => { + var cmp = string.CompareOrdinal (x.Id.Identifier, y.Id.Identifier); + if (cmp != 0) + return cmp; + cmp = string.CompareOrdinal (y.Id.Version, x.Id.Version); + if (cmp != 0) + return cmp; + return string.CompareOrdinal (x.Id.Profile, y.Id.Profile); + }); + + for (int i = 0; i < frameworks.Count; i++) { + var fx = frameworks[i]; + if (project.TargetFramework.Id == fx.Id) { + string name = notInstalled? GettextCatalog.GetString ("{0} (Not installed)", fx.Name) : fx.Name; + runtimeVersionCombo.AppendText (name); + runtimeVersionCombo.Active = i; + } else { runtimeVersionCombo.AppendText (fx.Name); - if (project.TargetFramework == fx) - runtimeVersionCombo.Active = supportedVersions.Count; - supportedVersions.Add (fx); } - if (supportedVersions.Count <= 1) - Sensitive = false; - } - else - Sensitive = false; + } + + Sensitive = frameworks.Count > 1; } public void Store () { if (project == null || runtimeVersionCombo.Active == -1) return; - TargetFramework fx = (TargetFramework) supportedVersions [runtimeVersionCombo.Active]; - if (project.TargetFramework != fx) - project.TargetFramework = fx; + project.TargetFramework = frameworks [runtimeVersionCombo.Active]; } } } -- cgit v1.2.3