📄 filescout.cs
字号:
protected override void OnAfterLabelEdit(LabelEditEventArgs e)
{
base.OnAfterLabelEdit(e);
if(e.Label == null) {
e.CancelEdit = true;
return;
}
string filename = ((FileListItem)Items[e.Item]).FullName;
string newname = Path.GetDirectoryName(filename) + Path.DirectorySeparatorChar + e.Label;
try {
File.Move(filename, newname);
((FileListItem)Items[e.Item]).FullName = newname;
} catch(Exception ex) {
e.CancelEdit = true;
MessageService.ShowError(ex, "Rename failed");
}
}
public void ShowFilesInPath(string path)
{
string[] files;
Items.Clear();
try {
if (Directory.Exists(path)) {
files = Directory.GetFiles(path);
} else {
return;
}
} catch (Exception) {
return;
}
watcher.Path = path;
watcher.EnableRaisingEvents = true;
foreach (string file in files) {
FileInfo info = new FileInfo(file);
ListViewItem fileItem = Items.Add(new FileListItem(file));
fileItem.SubItems.Add(Math.Round((double)info.Length / 1024).ToString() + " KB");
fileItem.SubItems.Add(info.LastWriteTime.ToString());
}
EndUpdate();
}
public class FileListItem : ListViewItem
{
string fullname;
public string FullName {
get {
return fullname;
} set {
fullname = value;
}
}
public FileListItem(string fullname) : base(Path.GetFileName(fullname))
{
this.fullname = fullname;
ImageIndex = IconManager.GetIndexForFile(fullname);
}
}
}
public class FileScout : UserControl, IPadContent
{
public Control Control {
get {
return this;
}
}
public void RedrawContent()
{
}
Splitter splitter1 = new Splitter();
FileList filelister = new FileList();
ShellTree filetree = new ShellTree();
public FileScout()
{
filetree.Dock = DockStyle.Top;
filetree.BorderStyle = BorderStyle.Fixed3D;
filetree.Location = new System.Drawing.Point(0, 22);
filetree.Size = new System.Drawing.Size(184, 157);
filetree.TabIndex = 1;
filetree.AfterSelect += new TreeViewEventHandler(DirectorySelected);
ImageList imglist = new ImageList();
imglist.ColorDepth = ColorDepth.Depth32Bit;
imglist.Images.Add(ResourceService.GetBitmap("Icons.16x16.ClosedFolderBitmap"));
imglist.Images.Add(ResourceService.GetBitmap("Icons.16x16.OpenFolderBitmap"));
imglist.Images.Add(ResourceService.GetBitmap("Icons.16x16.FLOPPY"));
imglist.Images.Add(ResourceService.GetBitmap("Icons.16x16.DRIVE"));
imglist.Images.Add(ResourceService.GetBitmap("Icons.16x16.CDROM"));
imglist.Images.Add(ResourceService.GetBitmap("Icons.16x16.NETWORK"));
imglist.Images.Add(ResourceService.GetBitmap("Icons.16x16.Desktop"));
imglist.Images.Add(ResourceService.GetBitmap("Icons.16x16.PersonalFiles"));
imglist.Images.Add(ResourceService.GetBitmap("Icons.16x16.MyComputer"));
filetree.ImageList = imglist;
filelister.Dock = DockStyle.Fill;
filelister.BorderStyle = BorderStyle.Fixed3D;
filelister.Location = new System.Drawing.Point(0, 184);
filelister.Sorting = SortOrder.Ascending;
filelister.Size = new System.Drawing.Size(184, 450);
filelister.TabIndex = 3;
filelister.ItemActivate += new EventHandler(FileSelected);
splitter1.Dock = DockStyle.Top;
splitter1.Location = new System.Drawing.Point(0, 179);
splitter1.Size = new System.Drawing.Size(184, 5);
splitter1.TabIndex = 2;
splitter1.TabStop = false;
splitter1.MinSize = 50;
splitter1.MinExtra = 50;
this.Controls.Add(filelister);
this.Controls.Add(splitter1);
this.Controls.Add(filetree);
}
void DirectorySelected(object sender, TreeViewEventArgs e)
{
filelister.ShowFilesInPath(filetree.NodePath + Path.DirectorySeparatorChar);
}
void FileSelected(object sender, EventArgs e)
{
foreach (FileList.FileListItem item in filelister.SelectedItems) {
IProjectLoader loader = ProjectService.GetProjectLoader(item.FullName);
if (loader != null) {
loader.Load(item.FullName);
} else {
FileService.OpenFile(item.FullName);
}
}
}
}
public class ShellTree : TreeView
{
public string NodePath {
get {
return (string)SelectedNode.Tag;
}
set {
PopulateShellTree(value);
}
}
public ShellTree()
{
Sorted = true;
TreeNode rootNode = Nodes.Add("Desktop");
rootNode.ImageIndex = 6;
rootNode.SelectedImageIndex = 6;
rootNode.Tag = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
TreeNode myFilesNode = rootNode.Nodes.Add("My Documents");
myFilesNode.ImageIndex = 7;
myFilesNode.SelectedImageIndex = 7;
try {
myFilesNode.Tag = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
} catch (Exception) {
myFilesNode.Tag = "C:\\";
}
myFilesNode.Nodes.Add("");
TreeNode computerNode = rootNode.Nodes.Add("My Computer");
computerNode.ImageIndex = 8;
computerNode.SelectedImageIndex = 8;
try {
computerNode.Tag = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
} catch (Exception) {
computerNode.Tag = "C:\\";
}
foreach (string driveName in Environment.GetLogicalDrives()) {
DriveObject drive = new DriveObject(driveName);
TreeNode node = new TreeNode(drive.ToString());
node.Nodes.Add(new TreeNode(""));
node.Tag = driveName.Substring(0, driveName.Length - 1);
computerNode.Nodes.Add(node);
switch(DriveObject.GetDriveType(driveName)) {
case DriveType.Removeable:
node.ImageIndex = node.SelectedImageIndex = 2;
break;
case DriveType.Fixed:
node.ImageIndex = node.SelectedImageIndex = 3;
break;
case DriveType.Cdrom:
node.ImageIndex = node.SelectedImageIndex = 4;
break;
case DriveType.Remote:
node.ImageIndex = node.SelectedImageIndex = 5;
break;
default:
node.ImageIndex = node.SelectedImageIndex = 3;
break;
}
}
foreach (string directory in Directory.GetDirectories(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory))) {
TreeNode node = rootNode.Nodes.Add(Path.GetFileName(directory));
node.Tag = directory;
node.ImageIndex = node.SelectedImageIndex = 0;
node.Nodes.Add(new TreeNode(""));
}
rootNode.Expand();
computerNode.Expand();
InitializeComponent();
}
int getNodeLevel(TreeNode node)
{
TreeNode parent = node;
int depth = 0;
while(true)
{
parent = parent.Parent;
if(parent == null) {
return depth;
}
depth++;
}
}
void InitializeComponent ()
{
BeforeSelect += new TreeViewCancelEventHandler(SetClosedIcon);
AfterSelect += new TreeViewEventHandler(SetOpenedIcon);
}
void SetClosedIcon(object sender, TreeViewCancelEventArgs e) // Set icon as closed
{
if (SelectedNode != null) {
if(getNodeLevel(SelectedNode) > 2) {
SelectedNode.ImageIndex = SelectedNode.SelectedImageIndex = 0;
}
}
}
void SetOpenedIcon(object sender, TreeViewEventArgs e) // Set icon as opened
{
if(getNodeLevel(e.Node) > 2) {
if (e.Node.Parent != null && e.Node.Parent.Parent != null) {
e.Node.ImageIndex = e.Node.SelectedImageIndex = 1;
}
}
}
void PopulateShellTree(string path)
{
string[] pathlist = path.Split(new char[] { Path.DirectorySeparatorChar });
TreeNodeCollection curnode = Nodes;
foreach(string dir in pathlist) {
foreach(TreeNode childnode in curnode) {
if (((string)childnode.Tag).Equals(dir, StringComparison.OrdinalIgnoreCase)) {
SelectedNode = childnode;
PopulateSubDirectory(childnode, 2);
childnode.Expand();
curnode = childnode.Nodes;
break;
}
}
}
}
void PopulateSubDirectory(TreeNode curNode, int depth)
{
if (--depth < 0) {
return;
}
if (curNode.Nodes.Count == 1 && curNode.Nodes[0].Text.Equals("")) {
string[] directories = null;
curNode.Nodes.Clear();
try {
directories = Directory.GetDirectories(curNode.Tag.ToString() + Path.DirectorySeparatorChar);
} catch (Exception) {
return;
}
foreach (string fulldir in directories) {
try {
string dir = System.IO.Path.GetFileName(fulldir);
FileAttributes attr = File.GetAttributes(fulldir);
if ((attr & FileAttributes.Hidden) == 0) {
TreeNode node = curNode.Nodes.Add(dir);
node.Tag = curNode.Tag.ToString() + Path.DirectorySeparatorChar + dir;
node.ImageIndex = node.SelectedImageIndex = 0;
node.Nodes.Add(""); // Add dummy child node to make node expandable
PopulateSubDirectory(node, depth);
}
} catch (Exception) {
}
}
} else {
foreach (TreeNode node in curNode.Nodes) {
PopulateSubDirectory(node, depth); // Populate sub directory
}
}
}
protected override void OnBeforeExpand(TreeViewCancelEventArgs e)
{
Cursor.Current = Cursors.WaitCursor;
try {
// do not populate if the "My Cpmputer" node is expaned
if(e.Node.Parent != null && e.Node.Parent.Parent != null) {
PopulateSubDirectory(e.Node, 2);
Cursor.Current = Cursors.Default;
} else {
PopulateSubDirectory(e.Node, 1);
Cursor.Current = Cursors.Default;
}
} catch (Exception excpt) {
MessageService.ShowError(excpt, "Device error");
e.Cancel = true;
}
Cursor.Current = Cursors.Default;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -