|
|
|
@ -5,11 +5,12 @@
@@ -5,11 +5,12 @@
|
|
|
|
|
// <version>$Revision$</version>
|
|
|
|
|
// </file>
|
|
|
|
|
|
|
|
|
|
using ICSharpCode.Core.Presentation; |
|
|
|
|
using System; |
|
|
|
|
using System.Collections.Generic; |
|
|
|
|
using System.ComponentModel; |
|
|
|
|
using System.Text; |
|
|
|
|
using System.Linq; |
|
|
|
|
using System.Text; |
|
|
|
|
using System.Windows; |
|
|
|
|
using System.Windows.Controls; |
|
|
|
|
using System.Windows.Data; |
|
|
|
@ -24,11 +25,16 @@ namespace ICSharpCode.SharpDevelop.Project.Converter
@@ -24,11 +25,16 @@ namespace ICSharpCode.SharpDevelop.Project.Converter
|
|
|
|
|
/// </summary>
|
|
|
|
|
internal partial class UpgradeView : UserControl |
|
|
|
|
{ |
|
|
|
|
Solution solution; |
|
|
|
|
|
|
|
|
|
public UpgradeView(Solution solution) |
|
|
|
|
{ |
|
|
|
|
this.solution = solution; |
|
|
|
|
InitializeComponent(); |
|
|
|
|
|
|
|
|
|
listView.ItemsSource = solution.Projects.OfType<IUpgradableProject>().Select(p => new Entry(p)).ToList(); |
|
|
|
|
SortableGridViewColumn.SetCurrentSortColumn(listView, nameColumn); |
|
|
|
|
SortableGridViewColumn.SetSortDirection(listView, ColumnSortDirection.Ascending); |
|
|
|
|
ListView_SelectionChanged(null, null); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -51,7 +57,205 @@ namespace ICSharpCode.SharpDevelop.Project.Converter
@@ -51,7 +57,205 @@ namespace ICSharpCode.SharpDevelop.Project.Converter
|
|
|
|
|
else |
|
|
|
|
selectAllCheckBox.IsChecked = null; |
|
|
|
|
|
|
|
|
|
convertButton.IsEnabled = listView.SelectedItems.Count > 0; |
|
|
|
|
conversionGroupBox.IsEnabled = listView.SelectedItems.Count > 0; |
|
|
|
|
UpdateCompilerComboBox(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void UpdateCompilerComboBox() |
|
|
|
|
{ |
|
|
|
|
if (listView.SelectedItems.Count > 0) { |
|
|
|
|
// Fetch list of available compiler versions
|
|
|
|
|
HashSet<CompilerVersion> availableVersionsSet = new HashSet<CompilerVersion>(); |
|
|
|
|
HashSet<CompilerVersion> currentVersions = new HashSet<CompilerVersion>(); |
|
|
|
|
foreach (Entry entry in listView.SelectedItems) { |
|
|
|
|
if (entry.CompilerVersion != null) |
|
|
|
|
currentVersions.Add(entry.CompilerVersion); |
|
|
|
|
availableVersionsSet.AddRange(entry.Project.GetAvailableCompilerVersions()); |
|
|
|
|
} |
|
|
|
|
List<CompilerVersion> availableVersions = availableVersionsSet.OrderBy(n => n.MSBuildVersion).ThenBy(n => n.DisplayName).ToList(); |
|
|
|
|
if (currentVersions.Count != 1) { |
|
|
|
|
availableVersions.Insert(0, new UnchangedCompilerVersion()); |
|
|
|
|
} |
|
|
|
|
// Assign available versions to newVersionComboBox
|
|
|
|
|
// Unless the user has already chosen a version, automatically set the selection to the
|
|
|
|
|
// current version of the chosen projects, or to 'do not change' if there are different
|
|
|
|
|
// current versions.
|
|
|
|
|
newCompilerSelectionChangingByCode = true; |
|
|
|
|
newVersionComboBox.ItemsSource = availableVersions; |
|
|
|
|
|
|
|
|
|
CompilerVersion oldSelectedVersion = newVersionComboBox.SelectedValue as CompilerVersion; |
|
|
|
|
if (!newCompilerSelectionSetByUser || oldSelectedVersion == null) { |
|
|
|
|
newCompilerSelectionSetByUser = false; |
|
|
|
|
if (currentVersions.Count == 1) |
|
|
|
|
newVersionComboBox.SelectedValue = currentVersions.Single(); |
|
|
|
|
else |
|
|
|
|
newVersionComboBox.SelectedValue = new UnchangedCompilerVersion(); |
|
|
|
|
} |
|
|
|
|
newCompilerSelectionChangingByCode = false; |
|
|
|
|
UpdateTargetFrameworkComboBox(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
bool newCompilerSelectionChangingByCode; |
|
|
|
|
bool newCompilerSelectionSetByUser; |
|
|
|
|
|
|
|
|
|
void newVersionComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e) |
|
|
|
|
{ |
|
|
|
|
if (!newCompilerSelectionChangingByCode) |
|
|
|
|
newCompilerSelectionSetByUser = true; |
|
|
|
|
UpdateTargetFrameworkComboBox(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void UpdateTargetFrameworkComboBox() |
|
|
|
|
{ |
|
|
|
|
// Determine the available target frameworks
|
|
|
|
|
List<TargetFramework> availableFrameworks; |
|
|
|
|
bool doNotChangeAllowed; |
|
|
|
|
CompilerVersion selectedCompiler = newVersionComboBox.SelectedValue as CompilerVersion; |
|
|
|
|
if (selectedCompiler == null || selectedCompiler is UnchangedCompilerVersion) { |
|
|
|
|
// no entries or "Do not change" selected
|
|
|
|
|
// -> available target frameworks is the intersection of all compiler's target framework,
|
|
|
|
|
// and "Do not change" is always available
|
|
|
|
|
|
|
|
|
|
var supportedTargetFrameworks = |
|
|
|
|
from Entry entry in listView.SelectedItems |
|
|
|
|
where entry.CompilerVersion != null |
|
|
|
|
select entry.CompilerVersion.GetSupportedTargetFrameworks(); |
|
|
|
|
|
|
|
|
|
if (supportedTargetFrameworks.Any()) { |
|
|
|
|
availableFrameworks = supportedTargetFrameworks.Aggregate((a, b) => a.Intersect(b)).ToList(); |
|
|
|
|
} else { |
|
|
|
|
availableFrameworks = new List<TargetFramework>(); |
|
|
|
|
} |
|
|
|
|
doNotChangeAllowed = true; |
|
|
|
|
} else { |
|
|
|
|
// Specific compiler version is selected
|
|
|
|
|
// Show that compiler's target frameworks
|
|
|
|
|
availableFrameworks = selectedCompiler.GetSupportedTargetFrameworks().ToList(); |
|
|
|
|
// Allow do not change on target framework if all current frameworks are supported
|
|
|
|
|
// by the new compiler.
|
|
|
|
|
doNotChangeAllowed = true; |
|
|
|
|
foreach (Entry entry in listView.SelectedItems) { |
|
|
|
|
doNotChangeAllowed &= availableFrameworks.Contains(entry.TargetFramework); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
availableFrameworks.Sort((a, b) => a.DisplayName.CompareTo(b.DisplayName)); |
|
|
|
|
if (doNotChangeAllowed) { |
|
|
|
|
availableFrameworks.Insert(0, new UnchangedTargetFramework()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// detect whether all projects use a single framework
|
|
|
|
|
TargetFramework frameworkUsedByAllProjects = null; |
|
|
|
|
bool frameworkUsedByAllProjectsInitialized = false; |
|
|
|
|
foreach (Entry entry in listView.SelectedItems) { |
|
|
|
|
if (!frameworkUsedByAllProjectsInitialized) { |
|
|
|
|
frameworkUsedByAllProjects = entry.TargetFramework; |
|
|
|
|
frameworkUsedByAllProjectsInitialized = true; |
|
|
|
|
} else { |
|
|
|
|
if (!object.Equals(frameworkUsedByAllProjects, entry.TargetFramework)) |
|
|
|
|
frameworkUsedByAllProjects = null; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// if projects use different frameworks, preselect "<do not change>", if possible
|
|
|
|
|
if (frameworkUsedByAllProjects == null && doNotChangeAllowed) |
|
|
|
|
frameworkUsedByAllProjects = availableFrameworks[0]; |
|
|
|
|
|
|
|
|
|
newFrameworkSelectionChangingByCode = true; |
|
|
|
|
newFrameworkComboBox.ItemsSource = availableFrameworks; |
|
|
|
|
|
|
|
|
|
TargetFramework oldSelectedFramework = newFrameworkComboBox.SelectedValue as TargetFramework; |
|
|
|
|
if (!newFrameworkSelectionSetByUser || oldSelectedFramework == null) { |
|
|
|
|
newFrameworkSelectionSetByUser = false; |
|
|
|
|
newFrameworkComboBox.SelectedValue = frameworkUsedByAllProjects; |
|
|
|
|
} |
|
|
|
|
newFrameworkSelectionChangingByCode = false; |
|
|
|
|
UpdateConvertButtonEnabled(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
bool newFrameworkSelectionChangingByCode; |
|
|
|
|
bool newFrameworkSelectionSetByUser; |
|
|
|
|
|
|
|
|
|
void newFrameworkComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e) |
|
|
|
|
{ |
|
|
|
|
if (!newFrameworkSelectionChangingByCode) |
|
|
|
|
newFrameworkSelectionSetByUser = true; |
|
|
|
|
UpdateConvertButtonEnabled(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void UpdateConvertButtonEnabled() |
|
|
|
|
{ |
|
|
|
|
CompilerVersion selectedCompiler = newVersionComboBox.SelectedValue as CompilerVersion; |
|
|
|
|
TargetFramework selectedFramework = newFrameworkComboBox.SelectedValue as TargetFramework; |
|
|
|
|
|
|
|
|
|
bool changingCompiler = false; |
|
|
|
|
bool changingFramework = false; |
|
|
|
|
if (!(selectedCompiler is UnchangedCompilerVersion)) { |
|
|
|
|
foreach (Entry entry in listView.SelectedItems) { |
|
|
|
|
if (!object.Equals(entry.CompilerVersion, selectedCompiler)) |
|
|
|
|
changingCompiler = true; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (!(selectedFramework is UnchangedTargetFramework)) { |
|
|
|
|
foreach (Entry entry in listView.SelectedItems) { |
|
|
|
|
if (!object.Equals(entry.TargetFramework, selectedFramework)) |
|
|
|
|
changingFramework = true; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
convertButton.IsEnabled = selectedCompiler != null && selectedFramework != null && (changingCompiler || changingFramework); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void convertButton_Click(object sender, RoutedEventArgs e) |
|
|
|
|
{ |
|
|
|
|
CompilerVersion selectedCompiler = newVersionComboBox.SelectedValue as CompilerVersion; |
|
|
|
|
TargetFramework selectedFramework = newFrameworkComboBox.SelectedValue as TargetFramework; |
|
|
|
|
if (selectedCompiler is UnchangedCompilerVersion) |
|
|
|
|
selectedCompiler = null; |
|
|
|
|
if (selectedFramework is UnchangedTargetFramework) |
|
|
|
|
selectedFramework = null; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
foreach (Entry entry in listView.SelectedItems) { |
|
|
|
|
entry.UpgradeProject(selectedCompiler, selectedFramework); |
|
|
|
|
} |
|
|
|
|
solution.Save(); |
|
|
|
|
UpdateCompilerComboBox(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
sealed class UnchangedCompilerVersion : CompilerVersion |
|
|
|
|
{ |
|
|
|
|
public UnchangedCompilerVersion() : base(new Version(0, 0), "<do not change>") |
|
|
|
|
{ |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public override bool Equals(object obj) |
|
|
|
|
{ |
|
|
|
|
return obj is UnchangedCompilerVersion; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public override int GetHashCode() |
|
|
|
|
{ |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
sealed class UnchangedTargetFramework : TargetFramework |
|
|
|
|
{ |
|
|
|
|
public UnchangedTargetFramework() : base(string.Empty, "<do not change>") |
|
|
|
|
{ |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public override bool Equals(object obj) |
|
|
|
|
{ |
|
|
|
|
return obj is UnchangedTargetFramework; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public override int GetHashCode() |
|
|
|
|
{ |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
internal sealed class Entry : INotifyPropertyChanged |
|
|
|
@ -62,23 +266,33 @@ namespace ICSharpCode.SharpDevelop.Project.Converter
@@ -62,23 +266,33 @@ namespace ICSharpCode.SharpDevelop.Project.Converter
|
|
|
|
|
{ |
|
|
|
|
this.Project = project; |
|
|
|
|
|
|
|
|
|
this.compilerVersion = project.CurrentCompilerVersion; |
|
|
|
|
this.targetFramework = project.CurrentTargetFramework; |
|
|
|
|
this.CompilerVersion = project.CurrentCompilerVersion; |
|
|
|
|
this.TargetFramework = project.CurrentTargetFramework; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public string Name { |
|
|
|
|
get { return this.Project.Name; } |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
CompilerVersion compilerVersion; |
|
|
|
|
TargetFramework targetFramework; |
|
|
|
|
public CompilerVersion CompilerVersion; |
|
|
|
|
public TargetFramework TargetFramework; |
|
|
|
|
|
|
|
|
|
public string CompilerVersionName { |
|
|
|
|
get { return compilerVersion != null ? compilerVersion.DisplayName : null; } |
|
|
|
|
get { return CompilerVersion != null ? CompilerVersion.DisplayName : null; } |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public string TargetFrameworkName { |
|
|
|
|
get { return targetFramework != null ? targetFramework.DisplayName : null; } |
|
|
|
|
get { return TargetFramework != null ? TargetFramework.DisplayName : null; } |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public void UpgradeProject(CompilerVersion newVersion, TargetFramework newFramework) |
|
|
|
|
{ |
|
|
|
|
this.Project.UpgradeProject(newVersion, newFramework); |
|
|
|
|
|
|
|
|
|
this.CompilerVersion = this.Project.CurrentCompilerVersion; |
|
|
|
|
this.TargetFramework = this.Project.CurrentTargetFramework; |
|
|
|
|
OnPropertyChanged("CompilerVersionName"); |
|
|
|
|
OnPropertyChanged("TargetFrameworkName"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public event PropertyChangedEventHandler PropertyChanged; |
|
|
|
|