// // 2002-2005 AlphaSierraPapa // GNU General Public License // // $Revision$ // using System; using System.IO; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Windows.Forms; using ICSharpCode.Core; using ICSharpCode.SharpDevelop.Gui; namespace ICSharpCode.SharpDevelop.Project { /// /// Description of ProjectBrowserControl. /// public class ProjectBrowserControl : System.Windows.Forms.UserControl, IHasPropertyContainer { ExtTreeView treeView; public bool ShowAll { get { return AbstractProjectBrowserTreeNode.ShowAll; } set { if (AbstractProjectBrowserTreeNode.ShowAll != value) { treeView.BeginUpdate(); AbstractProjectBrowserTreeNode.ShowAll = value; foreach (AbstractProjectBrowserTreeNode node in treeView.Nodes) { node.UpdateVisibility(); } treeView.Sort(); treeView.EndUpdate(); } } } static ProjectBrowserControl() { } public AbstractProjectBrowserTreeNode SelectedNode { get { return treeView.SelectedNode as AbstractProjectBrowserTreeNode; } } public ExtTreeView TreeView { get { return treeView; } } public ProjectBrowserControl() { InitializeComponent(); treeView.AfterSelect += TreeViewAfterSelect; FileService.FileRenaming += FileServiceFileRenaming; FileService.FileRemoving += FileServiceFileRemoving; ProjectService.ProjectItemAdded += ProjectServiceProjectItemAdded; ProjectService.SolutionFolderRemoved += ProjectServiceSolutionFolderRemoved; treeView.DrawNode += TreeViewDrawNode; } void TreeViewDrawNode(object sender, DrawTreeNodeEventArgs e) { if (e.DrawDefault) { AbstractProjectBrowserTreeNode node = e.Node as AbstractProjectBrowserTreeNode; if (node != null) { Image img = node.Overlay; if (img != null) { Graphics g = e.Graphics; g.DrawImageUnscaled(img, e.Bounds.X - img.Width, e.Bounds.Bottom - img.Height); } } } } void CallVisitor(ProjectBrowserTreeNodeVisitor visitor) { foreach (AbstractProjectBrowserTreeNode treeNode in treeView.Nodes) { treeNode.AcceptVisitor(visitor, null); } } void ProjectServiceSolutionFolderRemoved(object sender, SolutionFolderEventArgs e) { CallVisitor(new SolutionFolderRemoveVisitor(e.SolutionFolder)); } void ProjectServiceProjectItemAdded(object sender, ProjectItemEventArgs e) { if (e.ProjectItem is ReferenceProjectItem) { CallVisitor(new UpdateReferencesVisitor(e)); } } void FileServiceFileRemoving(object sender, FileEventArgs e) { CallVisitor(new FileRemoveTreeNodeVisitor(e.FileName)); } void FileServiceFileRenaming(object sender, FileRenameEventArgs e) { CallVisitor(new FileRenameTreeNodeVisitor(e.SourceFile, e.TargetFile)); } public void RefreshView() { // TODO implement refresh. } FileNode FindFileNode(TreeNodeCollection nodes, string fileName) { FileNode fn; foreach (TreeNode node in nodes) { fn = node as FileNode; if (fn != null) { if (FileUtility.IsEqualFileName(fn.FileName, fileName)) return fn; } fn = FindFileNode(node.Nodes, fileName); if (fn != null) return fn; } return null; } public FileNode FindFileNode(string fileName) { return FindFileNode(treeView.Nodes, fileName); } public void SelectFile(string fileName) { FileNode node = FindFileNode(fileName); if (node != null) treeView.SelectedNode = node; } public void ViewSolution(Solution solution) { AbstractProjectBrowserTreeNode solutionNode = new SolutionNode(solution); treeView.Nodes.Clear(); solutionNode.AddTo(treeView); DefaultDotNetNodeBuilder nodeBuilder = new DefaultDotNetNodeBuilder(); foreach (object treeObject in solution.Folders) { if (treeObject is IProject) { nodeBuilder.AddProjectNode(solutionNode, (IProject)treeObject); } else { SolutionFolderNode folderNode = new SolutionFolderNode(solution, (SolutionFolder)treeObject); folderNode.AddTo(solutionNode); } } solutionNode.Expand(); } public void Clear() { treeView.Clear(); } #region Label editing #endregion public void PadActivated() { TreeViewAfterSelect(null, new TreeViewEventArgs(treeView.SelectedNode)); } void TreeViewAfterSelect(object sender, TreeViewEventArgs e) { // set current project & current combine AbstractProjectBrowserTreeNode node = e.Node as AbstractProjectBrowserTreeNode; if (node == null) { return; } ProjectService.CurrentProject = node.Project; propertyContainer.SelectedObject = node.Tag; } PropertyContainer propertyContainer = new PropertyContainer(); public PropertyContainer PropertyContainer { get { return propertyContainer; } } #region Windows Forms Designer generated code /// /// This method is required for Windows Forms designer support. /// Do not change the method contents inside the source code editor. The Forms designer might /// not be able to load this method if it was changed manually. /// private void InitializeComponent() { this.treeView = new ExtTreeView(); this.SuspendLayout(); // // treeView // this.treeView.Dock = System.Windows.Forms.DockStyle.Fill; this.treeView.ImageIndex = -1; this.treeView.Location = new System.Drawing.Point(0, 0); this.treeView.Name = "treeView"; this.treeView.SelectedImageIndex = -1; this.treeView.Size = new System.Drawing.Size(292, 266); this.treeView.TabIndex = 0; // // ProjectBrowserControl // this.Controls.Add(this.treeView); this.Name = "ProjectBrowserControl"; this.Size = new System.Drawing.Size(292, 266); this.ResumeLayout(false); } #endregion } }