📄 projectbrowsereventhandler.cs
字号:
Debug.Assert(directory || File.Exists(filename), "ProjectBrowserEventHandler.MoveCopyFile : source file doesn't exist");
// search "folder" in which the node contains
while (node.ProjectNodeType != ProjectNodeType.Folder &&
node.ProjectNodeType != ProjectNodeType.Project) {
node = (ProjectBrowserNode)node.Parent;
if (node == null)
return;
}
string name = Path.GetFileName(filename);
string newfilename = node.FileName + "\\" + name;
string oldrelativename = FileUtility.MakeRelative(filename, node.Project.WorkingDirectory);
string newrelativename = FileUtility.MakeRelative(newfilename, node.Project.WorkingDirectory);
ProjectBrowserNode oldparent = browser.GetPath(oldrelativename, node.Root, false); // TODO : change this for more projects
ProjectBrowserNode newparent = browser.GetPath(newrelativename, node.Root, false);
ProjectBrowserNode oldnode = null; // if oldnode is == null the old file doesn't exist in current tree
if (oldparent != null) {
foreach (ProjectBrowserNode childnode in oldparent.Nodes) {
if (childnode.Name == name) {
oldnode = childnode;
break;
}
}
}
if (oldnode != null && oldnode.ProjectNodeType == ProjectNodeType.Folder) // TODO can't move folders yet :(
return;
if (oldparent == newparent && oldnode != null) // move/copy to the same location
return;
if (move) {
if (oldnode != null) {
oldparent.Nodes.Remove(oldnode);
}
File.Move(filename, newfilename);
} else {
File.Copy(filename, newfilename);
}
newparent.Nodes.Add(new ProjectBrowserNode(newparent.Project, ProjectNodeType.TextFile, name));
browser.SaveProject();
}
/*
========= Exception Text ==========
System.IO.DirectoryNotFoundException: Could not find a part of the path "C:\Dokumente und Einstellungen\Administrator\Eigene Dateien\SharpDevelop Projects\directxtest\D3DLayer.cs".
at System.IO.__Error.WinIOError(Int32 errorCode, String str)
at System.IO.File.InternalCopy(String sourceFileName, String destFileName, Boolean overwrite)
at SharpDevelop.Gui.Navigation.ProjectBrowser.ProjectBrowserEventHandler.MoveCopyFile(String filename, ProjectBrowserNode node, Boolean move)
at SharpDevelop.Gui.Navigation.ProjectBrowser.ProjectBrowserEventHandler.AddFilesToProject(Object sender, EventArgs e)
at System.Windows.Forms.MenuItem.OnClick(EventArgs e)
at System.Windows.Forms.MenuItemData.Execute()
at System.Windows.Forms.Command.Invoke()
at System.Windows.Forms.Control.WmCommand(Message& m)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.TreeView.WndProc(Message& m)
at System.Windows.Forms.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
*/
void ShowOpenFolderIcon(object sender, TreeViewCancelEventArgs e)
{
switch (((ProjectBrowserNode)e.Node).ProjectNodeType) {
case ProjectNodeType.Folder:
e.Node.ImageIndex = e.Node.SelectedImageIndex = 2;
break;
case ProjectNodeType.ReferenceFolder:
e.Node.ImageIndex = e.Node.SelectedImageIndex = 4;
break;
}
}
void ShowClosedFolderIcon(object sender, TreeViewCancelEventArgs e)
{
switch (((ProjectBrowserNode)e.Node).ProjectNodeType) {
case ProjectNodeType.Folder:
e.Node.ImageIndex = e.Node.SelectedImageIndex = 1;
break;
case ProjectNodeType.ReferenceFolder:
e.Node.ImageIndex = e.Node.SelectedImageIndex = 3;
break;
}
}
void RenameEntryEvent(object sender, EventArgs e)
{
ProjectBrowserNode node = (ProjectBrowserNode)browser.SelectedNode;
if (node != null) {
if (node.ProjectNodeType != ProjectNodeType.NonEditable &&
node.ProjectNodeType != ProjectNodeType.ReferenceFolder &&
node.ProjectNodeType != ProjectNodeType.ResourceFolder &&
node.ProjectNodeType != ProjectNodeType.Reference)
node.BeginEdit();
}
}
void OpenFile(object sender, EventArgs e)
{
ProjectBrowserNode node = (ProjectBrowserNode)browser.GetNodeAt(mousex, mousey);
if (node != null) {
if (node.ProjectNodeType != ProjectNodeType.NonEditable &&
node.ProjectNodeType != ProjectNodeType.Project &&
node.ProjectNodeType != ProjectNodeType.Folder &&
node.ProjectNodeType != ProjectNodeType.ReferenceFolder &&
node.ProjectNodeType != ProjectNodeType.ResourceFolder) {
mainwindow.OpenWindow(node.FileName);
}
}
}
void RenameEntry(object sender, NodeLabelEditEventArgs e)
{
ProjectBrowserNode node = (ProjectBrowserNode)e.Node;
if (e.CancelEdit || node.Text == e.Label || e.Label == null)
return;
switch (node.ProjectNodeType) {
case ProjectNodeType.Project:
if (browser.Combine.MasterProjectName == node.Project.Name)
browser.Combine.MasterProjectName = e.Label;
node.Project.Name = e.Label;
break;
default:
// Console.WriteLine("filename " + node.FileName);
string oldname = node.FileName;
string newname = node.GetNameWithExtension(Path.GetDirectoryName(oldname) + "\\" + e.Label);
File.Move(oldname, newname);
node.Name = e.Label;
e.CancelEdit = true; // don't set label automatically
// rename open files
foreach (ContentWindow window in mainwindow.MdiChildren) {
if (oldname == window.FileName) {
window.FileName = node.FileName;
break;
}
}
break;
}
browser.SaveProject();
}
void NewFileEvent(object sender, EventArgs e)
{
ProjectBrowserNode node = (ProjectBrowserNode)browser.SelectedNode;
if (node == null)
return;
while (node.ProjectNodeType != ProjectNodeType.Folder &&
node.ProjectNodeType != ProjectNodeType.Project) {
node = (ProjectBrowserNode)node.Parent;
if (node == null)
return;
}
NewFileDialog nfd = new NewFileDialog(mainwindow);
if (nfd.ShowDialog() == DialogResult.OK) {
ContentWindow cw = mainwindow.ActiveContentWindow;
ProjectBrowserNode newfile = null;
string filename = "";
int count = 0;
switch (cw.Content) {
case WindowContent.CSFile:
do {
if (count == 0)
filename = node.FileName + "\\"+ cw.TextName;
else {
string newText = cw.TextName;
filename = node.FileName + "\\"+ Path.GetFileNameWithoutExtension(newText) + "_" + count + Path.GetExtension(newText); }
++count;
} while (node.Project.IsFileInProject(filename));
cw.SaveContent(filename);
node.Project.Files.Add(filename);
newfile = new ProjectBrowserNode(node.Project, ProjectNodeType.TextFile, Path.GetFileName(filename));
break;
// case WindowContent.Resource:
// string directory = node.Project.BaseDirectory + "\\resources";
// if (!Directory.Exists(directory))
// Directory.CreateDirectory(directory);
// do {
// filename = directory + "\\New File "+ ++count + ".resources";
// } while (node.Project.IsFileInProject(filename));
// cw.SaveContent(filename);
// node.Project.Files.Add(filename);
// newfile = new ProjectBrowserNode(node.Project, ProjectNodeType.ResourceFile, Path.GetFileName(filename));
// break;
default:
do {
filename = node.Project.BaseDirectory + "\\" + Resource.GetString("ProjectComponent.NewFileString") + ++count;
} while (node.Project.IsFileInProject(filename));
cw.SaveContent(filename);
node.Project.Files.Add(filename);
newfile = new ProjectBrowserNode(node.Project, ProjectNodeType.TextFile, Path.GetFileName(filename));
break;
}
node.Nodes.Add(newfile);
newfile.EnsureVisible();
newfile.BeginEdit();
browser.SaveProject();
}
}
void NewFolderEvent(object sender, EventArgs e)
{
ProjectBrowserNode node = (ProjectBrowserNode)browser.SelectedNode;
if (node == null)
return;
while (node.ProjectNodeType != ProjectNodeType.Folder &&
node.ProjectNodeType != ProjectNodeType.Project) {
node = (ProjectBrowserNode)node.Parent;
if (node == null)
return;
}
ProjectBrowserNode newfolder = new ProjectBrowserNode(node.Project, ProjectNodeType.Folder, Resource.GetString("ProjectComponent.NewFolderString"));
node.Nodes.Add(newfolder);
Directory.CreateDirectory(newfolder.FileName);
newfolder.EnsureVisible();
newfolder.BeginEdit();
}
void RemoveEntryEvent(object sender, EventArgs e)
{
// if (browser.LabelEdit)
// return;
ProjectBrowserNode node = (ProjectBrowserNode)browser.SelectedNode;
if (node != null &&
node.ProjectNodeType != ProjectNodeType.NonEditable &&
node.ProjectNodeType != ProjectNodeType.Project &&
node.ProjectNodeType != ProjectNodeType.ReferenceFolder &&
node.ProjectNodeType != ProjectNodeType.ResourceFolder) {
string filename = node.FileName;
DialogResult dr = MessageBox.Show(Resource.GetString("ProjectComponent.DeleteRemoveQuestion"), filename, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
if (dr == DialogResult.Cancel)
return;
node.Parent.Nodes.Remove(node);
if (dr == DialogResult.Yes) {
if (FSTypeUtility.IsDirectory(filename)) {
Directory.Delete(filename, true);
} else
File.Delete(filename);
}
browser.SaveProject();
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -