📄 filescout.cs
字号:
} 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
{
ResourceService resourceService = (ResourceService)ServiceManager.Services.GetService(typeof(ResourceService));
public Control Control {
get {
return this;
}
}
public string Title {
get {
return resourceService.GetString("MainWindow.Windows.FileScoutLabel");
}
}
public string Icon {
get {
return "Icons.16x16.OpenFolderBitmap";
}
}
string category;
public string Category {
get {
return category;
}
set{
category = value;
}
}
string[] shortcut; // TODO: Inherit from AbstractPadContent
public string[] Shortcut {
get {
return shortcut;
}
set {
shortcut = value;
}
}
public void BringPadToFront()
{
if (!WorkbenchSingleton.Workbench.WorkbenchLayout.IsVisible(this)) {
WorkbenchSingleton.Workbench.WorkbenchLayout.ShowPad(this);
}
WorkbenchSingleton.Workbench.WorkbenchLayout.ActivatePad(this);
}
public void RedrawContent()
{
OnTitleChanged(null);
OnIconChanged(null);
}
Splitter splitter1 = new Splitter();
FileList filelister = new FileList();
ShellTree filetree = new ShellTree();
public FileScout()
{
Dock = DockStyle.Fill;
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)
{
IProjectService projectService = (IProjectService)ICSharpCode.Core.Services.ServiceManager.Services.GetService(typeof(IProjectService));
IFileService fileService = (IFileService)ICSharpCode.Core.Services.ServiceManager.Services.GetService(typeof(IFileService));
FileUtilityService fileUtilityService = (FileUtilityService)ServiceManager.Services.GetService(typeof(FileUtilityService));
foreach (FileList.FileListItem item in filelister.SelectedItems) {
switch (Path.GetExtension(item.FullName)) {
case ".cmbx":
case ".prjx":
projectService.OpenCombine(item.FullName);
break;
default:
fileService.OpenFile(item.FullName);
break;
}
}
}
protected virtual void OnTitleChanged(EventArgs e)
{
if (TitleChanged != null) {
TitleChanged(this, e);
}
}
protected virtual void OnIconChanged(EventArgs e)
{
if (IconChanged != null) {
IconChanged(this, e);
}
}
public event EventHandler TitleChanged;
public event EventHandler IconChanged;
}
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);
FileUtilityService fileUtilityService = (FileUtilityService)ServiceManager.Services.GetService(typeof(FileUtilityService));
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).ToUpper().Equals(dir.ToUpper())) {
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) {
IMessageService messageService =(IMessageService)ServiceManager.Services.GetService(typeof(IMessageService));
messageService.ShowError(excpt, "Device error");
e.Cancel = true;
}
Cursor.Current = Cursors.Default;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -