Browse Source

Fixed SD2-515. Project or assembly reference added to the project when a custom component from the toolbox is added to a form.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@793 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Matt Ward 20 years ago
parent
commit
35b9dbc809
  1. 154
      src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/ToolboxProvider.cs
  2. 4
      src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/ProjectBrowserControl.cs

154
src/AddIns/DisplayBindings/FormDesigner/Project/Src/FormDesigner/ToolboxProvider.cs

@ -137,57 +137,37 @@ namespace ICSharpCode.FormDesigner
static void SelectedToolUsedHandler(object sender, EventArgs e) static void SelectedToolUsedHandler(object sender, EventArgs e)
{ {
LoggingService.Debug("SelectedToolUsedHandler");
AxSideTab tab = SharpDevelopSideBar.SideBar.ActiveTab; AxSideTab tab = SharpDevelopSideBar.SideBar.ActiveTab;
// try to add project reference // try to add project reference
if (sender != null && sender is ICSharpCode.FormDesigner.Services.ToolboxService && !(tab is CustomComponentsSideTab)) { if (sender != null && sender is ICSharpCode.FormDesigner.Services.ToolboxService) {
ToolboxItem selectedItem = (sender as IToolboxService).GetSelectedToolboxItem(); ToolboxItem selectedItem = (sender as IToolboxService).GetSelectedToolboxItem();
if (selectedItem != null) { if (tab is CustomComponentsSideTab) {
if (selectedItem.AssemblyName != null) { if (selectedItem != null && selectedItem.TypeName != null) {
// TODO: Project system... LoggingService.Debug("Checking for reference to CustomComponent: " + selectedItem.TypeName);
// //We Put the assembly reference into the reference project folder // Check current project has the custom component first.
// IProject currentProject = ProjectService.CurrentProject; IProjectContent currentProjectContent = ParserService.CurrentProjectContent;
// if (currentProjectContent != null) {
// if (currentProject != null) { if (currentProjectContent.GetClass(selectedItem.TypeName) == null) {
// bool isAlreadyInRefFolder = false; // Check other projects in the solution.
// LoggingService.Debug("Checking other projects in the solution.");
// if (currentProject.ProjectType == "C#" || currentProject.ProjectType == "VBNET") { IProject projectContainingType = FindProjectContainingType(selectedItem.TypeName);
// foreach (string assembly in DefaultParserService.AssemblyList) { if (projectContainingType != null) {
// if (selectedItem.AssemblyName.FullName.StartsWith(assembly + ",")) { AddProjectReferenceToProject(ProjectService.CurrentProject, projectContainingType);
// isAlreadyInRefFolder = true; }
// break; }
// } }
// }
// }
//
// foreach (ProjectReference refproj in currentProject.ProjectReferences) {
// if (refproj.ReferenceType == ReferenceType.Assembly) {
// AssemblyName assemblyName = AssemblyName.GetAssemblyName(refproj.Reference);
// if (assemblyName != null && assemblyName.FullName == selectedItem.AssemblyName.FullName) {
// isAlreadyInRefFolder = true;
// break;
// }
// } else if (refproj.ReferenceType == ReferenceType.Gac) {
// if (refproj.Reference == selectedItem.AssemblyName.FullName) {
// isAlreadyInRefFolder = true;
// break;
// }
// }
// }
//
// if (!isAlreadyInRefFolder && !selectedItem.AssemblyName.FullName.StartsWith("System.")) {
// ToolComponent toolComponent = ToolboxProvider.ComponentLibraryLoader.GetToolComponent(selectedItem.AssemblyName.FullName);
// if (toolComponent == null || toolComponent.HintPath == null) {
// currentProject.ProjectReferences.Add(new ProjectReference(ReferenceType.Gac, selectedItem.AssemblyName.FullName));
// } else {
// currentProject.ProjectReferences.Add(new ProjectReference(ReferenceType.Assembly, toolComponent.FileName));
// }
// ICSharpCode.SharpDevelop.Gui.ProjectBrowser.ProjectBrowserView pbv = (ICSharpCode.SharpDevelop.Gui.ProjectBrowser.ProjectBrowserView)WorkbenchSingleton.Workbench.GetPad(typeof(ICSharpCode.SharpDevelop.Gui.ProjectBrowser.ProjectBrowserView));
// pbv.UpdateCombineTree();
// projectService.SaveCombine();
// }
// }
} }
} else {
if (selectedItem != null && selectedItem.AssemblyName != null) {
IProject currentProject = ProjectService.CurrentProject;
if (currentProject != null) {
if (!ProjectContainsReference(currentProject, selectedItem.AssemblyName)) {
AddReferenceToProject(currentProject, selectedItem.AssemblyName);
}
}
}
} }
} }
@ -196,5 +176,85 @@ namespace ICSharpCode.FormDesigner
} }
SharpDevelopSideBar.SideBar.Refresh(); SharpDevelopSideBar.SideBar.Refresh();
} }
static bool ProjectContainsReference(IProject project, AssemblyName referenceName)
{
LoggingService.Debug("Checking project has reference: " + referenceName.FullName);
bool isAlreadyInRefFolder = false;
foreach (ProjectItem projectItem in project.Items) {
ReferenceProjectItem referenceItem = projectItem as ReferenceProjectItem;
if (referenceItem != null) {
if (referenceItem.ItemType == ItemType.Reference) {
LoggingService.Debug("Checking project reference: " + referenceItem.Include);
if (referenceItem.HintPath.Length > 0) {
LoggingService.Debug("Checking assembly reference");
AssemblyName assemblyName = AssemblyName.GetAssemblyName(referenceItem.FileName);
if (assemblyName != null && assemblyName.FullName == referenceName.FullName) {
isAlreadyInRefFolder = true;
break;
}
} else { // GAC reference.
LoggingService.Debug("Checking GAC reference");
if (referenceItem.Include == referenceName.FullName || referenceItem.Include == referenceName.Name) {
LoggingService.Debug("Found existing GAC reference");
isAlreadyInRefFolder = true;
break;
}
}
}
}
}
return isAlreadyInRefFolder;
}
static void AddReferenceToProject(IProject project, AssemblyName referenceName)
{
LoggingService.Debug("Adding reference to project: " + referenceName.FullName);
ReferenceProjectItem reference = new ReferenceProjectItem(project, "Reference");
ToolComponent toolComponent = ToolboxProvider.ComponentLibraryLoader.GetToolComponent(referenceName.FullName);
if (toolComponent == null || toolComponent.HintPath == null) {
reference.Include = referenceName.FullName;
LoggingService.Debug("Added GAC reference to project: " + reference.Include);
} else {
reference.Include = referenceName.FullName;
reference.HintPath = FileUtility.GetRelativePath(project.Directory, toolComponent.FileName);
reference.SpecificVersion = false;
LoggingService.Debug("Added assembly reference to project: " + reference.Include);
}
ProjectService.AddProjectItem(project, reference);
ProjectBrowserPad.Instance.ProjectBrowserControl.RefreshView();
project.Save();
}
/// <summary>
/// Looks for the specified type in all the projects in the open solution
/// excluding the current project.
/// </summary>
static IProject FindProjectContainingType(string type)
{
IProject currentProject = ProjectService.CurrentProject;
foreach (IProject project in ProjectService.OpenSolution.Projects) {
if (project != currentProject) {
IProjectContent projectContent = ParserService.GetProjectContent(project);
if (projectContent != null) {
if (projectContent.GetClass(type) != null) {
LoggingService.Debug("Found project containing type: " + project.FileName);
return project;
}
}
}
}
return null;
}
static void AddProjectReferenceToProject(IProject project, IProject referenceTo)
{
LoggingService.Debug("Adding project reference to project.");
ProjectReferenceProjectItem reference = new ProjectReferenceProjectItem(project, referenceTo);
ProjectService.AddProjectItem(project, reference);
ProjectBrowserPad.Instance.ProjectBrowserControl.RefreshView();
project.Save();
}
} }
} }

4
src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/ProjectBrowserControl.cs

@ -108,7 +108,9 @@ namespace ICSharpCode.SharpDevelop.Project
public void RefreshView() public void RefreshView()
{ {
// TODO implement refresh. if (treeView.Nodes.Count > 0) {
ViewSolution(((AbstractProjectBrowserTreeNode)treeView.Nodes[0]).Solution);
}
} }
FileNode FindFileNode(TreeNodeCollection nodes, string fileName) FileNode FindFileNode(TreeNodeCollection nodes, string fileName)

Loading…
Cancel
Save