//
// 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
}
}