diff options
author | Michael Hutchinson <m.j.hutchinson@gmail.com> | 2011-07-20 02:54:10 +0400 |
---|---|---|
committer | Michael Hutchinson <m.j.hutchinson@gmail.com> | 2011-07-20 03:42:28 +0400 |
commit | 6249d0b545c0504b10e21e228f79e8672ca4dcb9 (patch) | |
tree | eb36fb71452dc08a7024e03a1bc6483d16289d63 /main | |
parent | 06ba943409c174191102737f39c471aba73b7fc1 (diff) |
[Ide] Improve the target framework panel
Diffstat (limited to 'main')
3 files changed, 40 insertions, 36 deletions
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<TargetFramework> frameworks; public RuntimeOptionsPanelWidget (DotNetProject project, IEnumerable<ItemConfiguration> 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]; } } } diff --git a/main/src/core/MonoDevelop.Ide/gtk-gui/MonoDevelop.Ide.Projects.OptionPanels.RuntimeOptionsPanelWidget.cs b/main/src/core/MonoDevelop.Ide/gtk-gui/MonoDevelop.Ide.Projects.OptionPanels.RuntimeOptionsPanelWidget.cs index 7a6a2a440d..98f5b749d3 100644 --- a/main/src/core/MonoDevelop.Ide/gtk-gui/MonoDevelop.Ide.Projects.OptionPanels.RuntimeOptionsPanelWidget.cs +++ b/main/src/core/MonoDevelop.Ide/gtk-gui/MonoDevelop.Ide.Projects.OptionPanels.RuntimeOptionsPanelWidget.cs @@ -27,7 +27,7 @@ namespace MonoDevelop.Ide.Projects.OptionPanels this.label114 = new global::Gtk.Label (); this.label114.Name = "label114"; this.label114.Xalign = 0F; - this.label114.LabelProp = global::MonoDevelop.Core.GettextCatalog.GetString ("Runtime _version:"); + this.label114.LabelProp = global::MonoDevelop.Core.GettextCatalog.GetString ("Target _framework:"); this.label114.UseUnderline = true; this.hbox68.Add (this.label114); global::Gtk.Box.BoxChild w1 = ((global::Gtk.Box.BoxChild)(this.hbox68 [this.label114])); diff --git a/main/src/core/MonoDevelop.Ide/gtk-gui/gui.stetic b/main/src/core/MonoDevelop.Ide/gtk-gui/gui.stetic index c8efc1d00c..d91edad5db 100644 --- a/main/src/core/MonoDevelop.Ide/gtk-gui/gui.stetic +++ b/main/src/core/MonoDevelop.Ide/gtk-gui/gui.stetic @@ -9008,7 +9008,7 @@ All solutions</property> <widget class="Gtk.Label" id="label114"> <property name="MemberName" /> <property name="Xalign">0</property> - <property name="LabelProp" translatable="yes">Runtime _version:</property> + <property name="LabelProp" translatable="yes">Target _framework:</property> <property name="UseUnderline">True</property> </widget> <packing> |