📄 projectbrowser.cs
字号:
// ProjectBrowser.cs
// Copyright (C) 2000 Mike Krueger
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
using System;
using System.IO;
using System.ComponentModel;
using System.Windows.Forms;
using System.Drawing;
using System.Diagnostics;
using System.Collections;
using System.Xml;
using System.Resources;
using SharpDevelop.Internal.Project;
using SharpDevelop.Tool.Function;
using SharpDevelop.Tool.Data;
using SharpDevelop.Gui.Window;
using SharpDevelop.Gui.Dialogs;
namespace SharpDevelop.Gui.Navigation.ProjectBrowser {
/// <summary>
/// This class is the project scout tree view
/// </summary>
public class ProjectBrowser : TreeView
{
bool combinemode = false;
Combine combine = null;
MainWindow mainwindow = null;
ProjectBrowserEventHandler eventhandler = null;
string projectfilename = "";
public Combine Combine {
get {
return combine;
}
}
public ISdProject Project {
get {
return combine.MasterProject;
}
// set {
// project = value;
//
// if (project != null && project.Icons != null && project.Icons["ProjectIcon"] != null)
// ImageList.Images[0] = (Bitmap)project.Icons["ProjectIcon"];
//
// PopulateTreeView();
// }
}
public ProjectBrowser(MainWindow mainwindow)
{
this.mainwindow = mainwindow;
LabelEdit = true;
HotTracking = true;
AllowDrop = true;
HideSelection = false;
InitImageList();
eventhandler = new ProjectBrowserEventHandler(mainwindow, this);
}
void InitImageList()
{
ImageList imglist = new ImageList();
imglist.Images.Add(Resource.GetBitmap("Icons.16x16.SolutionIcon"));
imglist.Images.Add(Resource.GetBitmap("Icons.16x16.ClosedFolderBitmap"));
imglist.Images.Add(Resource.GetBitmap("Icons.16x16.OpenFolderBitmap"));
imglist.Images.Add(Resource.GetBitmap("Icons.16x16.ClosedReferenceFolder"));
imglist.Images.Add(Resource.GetBitmap("Icons.16x16.OpenReferenceFolder"));
imglist.Images.Add(Resource.GetBitmap("Icons.16x16.SolutionIcon"));
imglist.Images.Add(Resource.GetBitmap("Icons.16x16.Reference"));
foreach (Image img in FileUtility.ImageList.Images)
imglist.Images.Add(img);
ImageList = imglist;
}
ProjectBrowserNode GetNodeFromCollection(TreeNodeCollection collection, string title)
{
foreach (ProjectBrowserNode node in collection)
if (node.Name == title)
return node;
return null;
}
void ConvertTreeToProject(ProjectBrowserNode node)
{
switch (node.ProjectNodeType) {
case ProjectNodeType.Project:
node.Project.Files.Clear();
node.Project.Directories.Clear();
node.Project.References.Clear();
goto default;
case ProjectNodeType.Reference:
node.Project.References.Add(node.FileName);
break;
case ProjectNodeType.ResourceFile:
case ProjectNodeType.TextFile:
node.Project.Files.Add(node.FileName);
break;
default:
if (node.Nodes.Count == 0 && node.ProjectNodeType == ProjectNodeType.Folder)
node.Project.Directories.Add(node.FileName);
else
foreach (ProjectBrowserNode childnode in node.Nodes)
ConvertTreeToProject(childnode);
break;
}
}
public ProjectBrowserNode GetPath(string filename, ProjectBrowserNode root, bool create)
{
string directory = Path.GetDirectoryName(filename);
string[] treepath = directory.Split(new char[] { '\\' });
ProjectBrowserNode curpathnode = root;
foreach (string path in treepath) {
if (path.Length == 0) // TODO : find out, where this bug is from
continue;
ProjectBrowserNode node = GetNodeFromCollection(curpathnode.Nodes, path);
if (node == null) {
if (create) {
ProjectBrowserNode newnode = new ProjectBrowserNode(curpathnode.Project, ProjectNodeType.Folder, path);
curpathnode.Nodes.Add(newnode);
curpathnode = newnode;
continue;
} else {
return null;
}
}
curpathnode = node;
}
return curpathnode;
}
void AddProjectTree(ISdProject project)
{
ProjectBrowserNode projectnode = new ProjectBrowserNode(project, ProjectNodeType.Project, project.Name);
ProjectBrowserNode resfilenode = new ProjectBrowserNode(project, ProjectNodeType.ResourceFolder, Resource.GetString("ProjectComponent.ResourceFilesString"));
ProjectBrowserNode referencefilenode = new ProjectBrowserNode(project, ProjectNodeType.ReferenceFolder, "References");
projectnode.Nodes.Add(resfilenode);
projectnode.Nodes.Add(referencefilenode);
for (int i = 0; i < project.Directories.Count; ++i) {
string relativefile = FileUtility.MakeRelative(project.Directories[i].ToString(), project.WorkingDirectory);
string filename = Path.GetFileName(project.Directories[i].ToString());
ProjectBrowserNode curpathnode = GetPath(relativefile, projectnode, true);
curpathnode.Nodes.Add(new ProjectBrowserNode(project, ProjectNodeType.Folder, filename));
}
for (int i = 0; i < project.Files.Count; ++i) {
string relativefile = FileUtility.MakeRelative(project.Files[i].ToString(), project.WorkingDirectory);
string filename = Path.GetFileName(project.Files[i].ToString());
FileType filetype = FSTypeUtility.GetFileType(filename);
switch (filetype) {
case FileType.Resource:
resfilenode.Nodes.Add(new ProjectBrowserNode(project, ProjectNodeType.ResourceFile, filename));
break;
default:
ProjectBrowserNode curpathnode = GetPath(relativefile, projectnode, true);
curpathnode.Nodes.Add(new ProjectBrowserNode(project, filename));
break;
}
}
for (int i = 0; i < project.References.Count; ++i) {
string filename = Path.GetFileName(project.References[i].ToString());
referencefilenode.Nodes.Add(new ProjectBrowserNode(project, ProjectNodeType.Reference, filename));
}
Nodes.Add(projectnode);
}
void PopulateTreeView()
{
Nodes.Clear();
if (combine == null)
return;
foreach (ISdProject project in combine.Projects)
AddProjectTree(project);
}
public void NewProject()
{
projectfilename = null;
Nodes.Clear();
}
public void OpenCombine(string filename)
{
if (!FSTypeUtility.TestFileExists(filename))
return;
projectfilename = filename;
combinemode = true;
combine = new Combine();
combine.LoadCombine(filename);
PopulateTreeView();
}
public void OpenProject(string filename)
{
if (!FSTypeUtility.TestFileExists(filename))
return;
projectfilename = filename;
combinemode = false;
combine = new Combine();
ISdProject project = combine.AddProject(filename, 1);
if (project == null) {
NewProject();
return;
}
combine.MasterProjectName = project.Name;
PopulateTreeView();
}
public void AddProject(string filename)
{
if (!combinemode)
projectfilename = null;
if (!FSTypeUtility.TestFileExists(filename))
return;
combinemode = true;
AddProjectTree(combine.AddProject(filename, 1));
}
public void SaveProject(string filename)
{
if (combinemode) {
combine.SaveCombine(filename);
combine.SaveAllProjects();
} else {
foreach (ProjectBrowserNode node in Nodes)
ConvertTreeToProject(node);
combine.SaveProject(Project.Name, filename);
}
}
public void SaveProject()
{
if (projectfilename == null) {
SaveFileDialog fdiag = new SaveFileDialog();
fdiag.OverwritePrompt = true;
fdiag.AddExtension = true;
fdiag.Filter = Resource.GetString("ProjectComponent.SaveProjectFileFilter");
if (fdiag.ShowDialog() == DialogResult.OK) {
MessageBox.Show(fdiag.FileName, Resource.GetString("ProjectComponent.ProjectFileSaveMessage"), MessageBoxButtons.OK);
projectfilename = fdiag.FileName;
} else {
fdiag.Dispose();
return;
}
fdiag.Dispose();
}
SaveProject(projectfilename);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -