From 1893856800fd234349e62a8e5038e3ca894734be Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Tue, 7 Feb 2006 20:05:14 +0000 Subject: [PATCH] Fixed SD2-580: Adding GAC reference to standard .NET assemblies adds full assembly name to project git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@1096 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- .../Project/Src/MonoGacReferencePanel.cs | 6 +- .../Project/Src/SelectMonoReferenceDialog.cs | 2 +- .../ReferenceDialog/AssemblyReferencePanel.cs | 2 +- .../ReferenceDialog/COMReferencePanel.cs | 4 +- .../ReferenceDialog/GacReferencePanel.cs | 93 +++++++++++++------ .../ReferenceDialog/ProjectReferencePanel.cs | 4 +- .../ReferenceDialog/SelectReferenceDialog.cs | 66 ++++++------- 7 files changed, 103 insertions(+), 74 deletions(-) diff --git a/src/AddIns/Misc/MonoAddIn/Project/Src/MonoGacReferencePanel.cs b/src/AddIns/Misc/MonoAddIn/Project/Src/MonoGacReferencePanel.cs index d56f5ce41e..77347bf68d 100644 --- a/src/AddIns/Misc/MonoAddIn/Project/Src/MonoGacReferencePanel.cs +++ b/src/AddIns/Misc/MonoAddIn/Project/Src/MonoGacReferencePanel.cs @@ -18,13 +18,15 @@ namespace ICSharpCode.MonoAddIn { } - protected override void PrintCache() + protected override List GetCacheContent() { + List itemList = new List(); foreach (MonoAssemblyName assemblyName in MonoGlobalAssemblyCache.GetAssemblyNames()) { ListViewItem item = new ListViewItem(new string[] {assemblyName.Name, assemblyName.Version.ToString(), assemblyName.Directory}); item.Tag = assemblyName.FullName; - Items.Add(item); + itemList.Add(item); } + return itemList; } } } diff --git a/src/AddIns/Misc/MonoAddIn/Project/Src/SelectMonoReferenceDialog.cs b/src/AddIns/Misc/MonoAddIn/Project/Src/SelectMonoReferenceDialog.cs index 96fd3b79d8..61f99c0dfc 100644 --- a/src/AddIns/Misc/MonoAddIn/Project/Src/SelectMonoReferenceDialog.cs +++ b/src/AddIns/Misc/MonoAddIn/Project/Src/SelectMonoReferenceDialog.cs @@ -107,7 +107,7 @@ namespace ICSharpCode.MonoAddIn void SelectReference(object sender, EventArgs e) { IReferencePanel refPanel = (IReferencePanel)referenceTabControl.SelectedTab.Controls[0]; - refPanel.AddReference(null, null); + refPanel.AddReference(); } void RemoveReference(object sender, EventArgs e) diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/AssemblyReferencePanel.cs b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/AssemblyReferencePanel.cs index 258c356916..7fd1310ee5 100644 --- a/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/AssemblyReferencePanel.cs +++ b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/AssemblyReferencePanel.cs @@ -56,7 +56,7 @@ namespace ICSharpCode.SharpDevelop.Gui } } - public void AddReference(object sender, EventArgs e) + public void AddReference() { SelectReferenceDialog(null, null); } diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/COMReferencePanel.cs b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/COMReferencePanel.cs index b36cf9eefe..dce536fabc 100644 --- a/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/COMReferencePanel.cs +++ b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/COMReferencePanel.cs @@ -46,11 +46,11 @@ namespace ICSharpCode.SharpDevelop.Gui Dock = DockStyle.Fill; FullRowSelect = true; - ItemActivate += new EventHandler(AddReference); + ItemActivate += delegate { AddReference(); }; PopulateListView(); } - public void AddReference(object sender, EventArgs e) + public void AddReference() { foreach (ListViewItem item in SelectedItems) { TypeLibrary library = (TypeLibrary)item.Tag; diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/GacReferencePanel.cs b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/GacReferencePanel.cs index 9145fa801a..fecd257bf2 100644 --- a/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/GacReferencePanel.cs +++ b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/GacReferencePanel.cs @@ -8,7 +8,7 @@ using System; using System.Text; using System.Drawing; -using System.Collections; +using System.Collections.Generic; using System.ComponentModel; using System.Windows.Forms; using MSjogren.GacTool.FusionNative; @@ -18,10 +18,9 @@ using ICSharpCode.Core; namespace ICSharpCode.SharpDevelop.Gui { - public class GacReferencePanel : ListView, IReferencePanel + public class GacReferencePanel : UserControl, IReferencePanel { - - class ColumnSorter : IComparer + class ColumnSorter : System.Collections.IComparer { private int column = 0; bool asc = true; @@ -49,72 +48,113 @@ namespace ICSharpCode.SharpDevelop.Gui } } + protected ListView listView; + CheckBox chooseSpecificVersionCheckBox; ISelectReferenceDialog selectDialog; ColumnSorter sorter; public GacReferencePanel(ISelectReferenceDialog selectDialog) { + listView = new ListView(); sorter = new ColumnSorter(); - this.ListViewItemSorter = sorter; + listView.ListViewItemSorter = sorter; this.selectDialog = selectDialog; ColumnHeader referenceHeader = new ColumnHeader(); referenceHeader.Text = ResourceService.GetString("Dialog.SelectReferenceDialog.GacReferencePanel.ReferenceHeader"); - referenceHeader.Width = 160; - Columns.Add(referenceHeader); + referenceHeader.Width = 180; + listView.Columns.Add(referenceHeader); - Sorting = SortOrder.Ascending; + listView.Sorting = SortOrder.Ascending; ColumnHeader versionHeader = new ColumnHeader(); versionHeader.Text = ResourceService.GetString("Dialog.SelectReferenceDialog.GacReferencePanel.VersionHeader"); versionHeader.Width = 70; - Columns.Add(versionHeader); + listView.Columns.Add(versionHeader); ColumnHeader pathHeader = new ColumnHeader(); pathHeader.Text = ResourceService.GetString("Global.Path"); pathHeader.Width = 100; - Columns.Add(pathHeader); + listView.Columns.Add(pathHeader); + + listView.View = View.Details; + listView.FullRowSelect = true; + listView.ItemActivate += delegate { AddReference(); }; + listView.ColumnClick += new ColumnClickEventHandler(columnClick); + + listView.Dock = DockStyle.Fill; + this.Dock = DockStyle.Fill; + this.Controls.Add(listView); + + chooseSpecificVersionCheckBox = new CheckBox(); + chooseSpecificVersionCheckBox.Dock = DockStyle.Top; + chooseSpecificVersionCheckBox.Text = StringParser.Parse("${res:Dialog.SelectReferenceDialog.GacReferencePanel.ChooseSpecificAssemblyVersion}"); + this.Controls.Add(chooseSpecificVersionCheckBox); + chooseSpecificVersionCheckBox.CheckedChanged += delegate { + listView.Items.Clear(); + if (chooseSpecificVersionCheckBox.Checked) + listView.Items.AddRange(fullItemList); + else + listView.Items.AddRange(shortItemList); + }; - View = View.Details; - Dock = DockStyle.Fill; - FullRowSelect = true; - ItemActivate += new EventHandler(AddReference); - ColumnClick += new ColumnClickEventHandler(columnClick); PrintCache(); } void columnClick(object sender, ColumnClickEventArgs e) { - if(e.Column < 2) - { + if(e.Column < 2) { sorter.CurrentColumn = e.Column; - Sort(); + listView.Sort(); } } - public void AddReference(object sender, EventArgs e) + public void AddReference() { - foreach (ListViewItem item in SelectedItems) { + foreach (ListViewItem item in listView.SelectedItems) { selectDialog.AddReference(ReferenceType.Gac, item.Text, - item.Tag.ToString(), + chooseSpecificVersionCheckBox.Checked ? item.Tag.ToString() : item.Text, null); } - } + } + + ListViewItem[] fullItemList; + /// + /// Item list where older versions are filtered out. + /// + ListViewItem[] shortItemList; - protected virtual void PrintCache() + void PrintCache() + { + List itemList = GetCacheContent(); + + fullItemList = itemList.ToArray(); + // Remove all items where a higher version exists + itemList.RemoveAll(delegate(ListViewItem item) { + return itemList.Exists(delegate(ListViewItem item2) { + return string.Equals(item.Text, item2.Text, StringComparison.OrdinalIgnoreCase) + && new Version(item.SubItems[1].Text) < new Version(item2.SubItems[1].Text); + }); + }); + shortItemList = itemList.ToArray(); + + listView.Items.AddRange(shortItemList); + } + + protected virtual List GetCacheContent() { IApplicationContext applicationContext = null; IAssemblyEnum assemblyEnum = null; IAssemblyName assemblyName = null; + List itemList = new List(); Fusion.CreateAssemblyEnum(out assemblyEnum, null, null, 2, 0); - while (assemblyEnum.GetNextAssembly(out applicationContext, out assemblyName, 0) == 0) { uint nChars = 0; assemblyName.GetDisplayName(null, ref nChars, 0); - + StringBuilder sb = new StringBuilder((int)nChars); assemblyName.GetDisplayName(sb, ref nChars, 0); @@ -124,8 +164,9 @@ namespace ICSharpCode.SharpDevelop.Gui string aVersion = info[1].Substring(info[1].LastIndexOf('=') + 1); ListViewItem item = new ListViewItem(new string[] {aName, aVersion}); item.Tag = sb.ToString(); - Items.Add(item); + itemList.Add(item); } + return itemList; } } } diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ProjectReferencePanel.cs b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ProjectReferencePanel.cs index 4265d9e9e1..5211df2489 100644 --- a/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ProjectReferencePanel.cs +++ b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/ProjectReferencePanel.cs @@ -38,11 +38,11 @@ namespace ICSharpCode.SharpDevelop.Gui Dock = DockStyle.Fill; FullRowSelect = true; - ItemActivate += new EventHandler(AddReference); + ItemActivate += delegate { AddReference(); }; PopulateListView(); } - public void AddReference(object sender, EventArgs e) + public void AddReference() { foreach (ListViewItem item in SelectedItems) { IProject project = (IProject)item.Tag; diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/SelectReferenceDialog.cs b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/SelectReferenceDialog.cs index 8fbdf7c1ee..a5d4de4eb6 100644 --- a/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/SelectReferenceDialog.cs +++ b/src/Main/Base/Project/Src/Gui/Dialogs/ReferenceDialog/SelectReferenceDialog.cs @@ -20,7 +20,7 @@ namespace ICSharpCode.SharpDevelop.Gui { public interface IReferencePanel { - void AddReference(object sender, EventArgs e); + void AddReference(); } public interface ISelectReferenceDialog @@ -95,27 +95,6 @@ namespace ICSharpCode.SharpDevelop.Gui } } -// foreach (ProjectReference refInfo in configureProject.ProjectReferences) { -// if (refInfo.ReferenceType == referenceType) { -// switch (referenceType) { -// case ReferenceType.Typelib: -// case ReferenceType.Gac: -// case ReferenceType.Assembly: -// if (refInfo.Reference == referenceLocation) { -// return; -// } -// break; -// case ReferenceType.Project: -// if (refInfo.Reference == referenceName) { -// return; -// } -// break; -// default: -// System.Diagnostics.Debug.Assert(false, "Unknown reference type" + referenceType); -// break; -// } -// } -// } ListViewItem newItem = new ListViewItem(new string[] {referenceName, referenceType.ToString(), referenceLocation}); switch (referenceType) { case ReferenceType.Typelib: @@ -146,7 +125,14 @@ namespace ICSharpCode.SharpDevelop.Gui void SelectReference(object sender, EventArgs e) { IReferencePanel refPanel = (IReferencePanel)referenceTabControl.SelectedTab.Controls[0]; - refPanel.AddReference(null, null); + refPanel.AddReference(); + } + + void OkButtonClick(object sender, EventArgs e) + { + if (referencesListView.Items.Count == 0) { + SelectReference(sender, e); + } } void RemoveReference(object sender, EventArgs e) @@ -201,11 +187,11 @@ namespace ICSharpCode.SharpDevelop.Gui // referenceTabControl // this.referenceTabControl.Controls.AddRange(new System.Windows.Forms.Control[] { - this.gacTabPage, - this.projectTabPage, - this.browserTabPage, - this.comTabPage - }); + this.gacTabPage, + this.projectTabPage, + this.browserTabPage, + this.comTabPage + }); this.referenceTabControl.Location = new System.Drawing.Point(8, 8); this.referenceTabControl.SelectedIndex = 0; this.referenceTabControl.Size = new System.Drawing.Size(472, 224); @@ -214,9 +200,9 @@ namespace ICSharpCode.SharpDevelop.Gui // referencesListView // this.referencesListView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { - this.referenceHeader, - this.typeHeader, - this.locationHeader}); + this.referenceHeader, + this.typeHeader, + this.locationHeader}); this.referencesListView.Location = new System.Drawing.Point(8, 256); this.referencesListView.Size = new System.Drawing.Size(472, 97); this.referencesListView.TabIndex = 3; @@ -302,7 +288,7 @@ namespace ICSharpCode.SharpDevelop.Gui this.okButton.Location = new System.Drawing.Point(312, 368); this.okButton.TabIndex = 5; this.okButton.Text = ResourceService.GetString("Global.OKButtonText"); - this.okButton.FlatStyle = FlatStyle.System; + this.okButton.Click += OkButtonClick; // // cancelButton @@ -329,14 +315,14 @@ namespace ICSharpCode.SharpDevelop.Gui this.CancelButton = this.cancelButton; this.ClientSize = new System.Drawing.Size(570, 399); this.Controls.AddRange(new System.Windows.Forms.Control[] { - this.helpButton, - this.cancelButton, - this.okButton, - this.referencesLabel, - this.removeButton, - this.selectButton, - this.referencesListView, - this.referenceTabControl}); + this.helpButton, + this.cancelButton, + this.okButton, + this.referencesLabel, + this.removeButton, + this.selectButton, + this.referencesListView, + this.referenceTabControl}); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; this.MaximizeBox = false; this.MinimizeBox = false;