Skip to content

Commit d54eefe

Browse files
committed
Added a pre-selection functionality.
1 parent 0e8fb1d commit d54eefe

14 files changed

+112
-19
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using System.IO;
1+
using System;
2+
using System.IO;
23
using System.Linq;
34
using System.Windows;
45
using System.Windows.Input;
@@ -17,26 +18,102 @@ public MainWindow()
1718
InitializeFileSystemObjects();
1819
}
1920

21+
#region Events
22+
23+
private void FileSystemObject_AfterExplore(object sender, System.EventArgs e)
24+
{
25+
Cursor = Cursors.Arrow;
26+
}
27+
28+
private void FileSystemObject_BeforeExplore(object sender, System.EventArgs e)
29+
{
30+
Cursor = Cursors.Wait;
31+
}
32+
33+
#endregion
34+
35+
#region Methods
36+
2037
private void InitializeFileSystemObjects()
2138
{
2239
var drives = DriveInfo.GetDrives();
23-
DriveInfo.GetDrives().ToList().ForEach(drive =>
40+
DriveInfo
41+
.GetDrives()
42+
.ToList()
43+
.ForEach(drive =>
44+
{
45+
var fileSystemObject = new FileSystemObjectInfo(drive);
46+
fileSystemObject.BeforeExplore += FileSystemObject_BeforeExplore;
47+
fileSystemObject.AfterExplore += FileSystemObject_AfterExplore;
48+
treeView.Items.Add(fileSystemObject);
49+
});
50+
PreSelect(Environment.GetFolderPath(Environment.SpecialFolder.Desktop));
51+
}
52+
53+
private void PreSelect(string path)
54+
{
55+
if (!Directory.Exists(path))
2456
{
25-
var fileSystemObject = new FileSystemObjectInfo(drive);
26-
fileSystemObject.BeforeExplore += FileSystemObject_BeforeExplore;
27-
fileSystemObject.AfterExplore += FileSystemObject_AfterExplore;
28-
treeView.Items.Add(fileSystemObject);
29-
});
57+
return;
58+
}
59+
var driveFileSystemObjectInfo = GetDriveFileSystemObjectInfo(path);
60+
driveFileSystemObjectInfo.IsExpanded = true;
61+
PreSelect(driveFileSystemObjectInfo, path);
3062
}
3163

32-
private void FileSystemObject_AfterExplore(object sender, System.EventArgs e)
64+
private void PreSelect(FileSystemObjectInfo fileSystemObjectInfo,
65+
string path)
3366
{
34-
Cursor = Cursors.Arrow;
67+
foreach (var childFileSystemObjectInfo in fileSystemObjectInfo.Children)
68+
{
69+
var isParentPath = IsParentPath(path, childFileSystemObjectInfo.FileSystemInfo.FullName);
70+
if (isParentPath)
71+
{
72+
if (string.Equals(childFileSystemObjectInfo.FileSystemInfo.FullName, path))
73+
{
74+
/* We found the item for pre-selection */
75+
}
76+
else
77+
{
78+
childFileSystemObjectInfo.IsExpanded = true;
79+
PreSelect(childFileSystemObjectInfo, path);
80+
}
81+
}
82+
}
3583
}
3684

37-
private void FileSystemObject_BeforeExplore(object sender, System.EventArgs e)
85+
#endregion
86+
87+
#region Helpers
88+
89+
private FileSystemObjectInfo GetDriveFileSystemObjectInfo(string path)
3890
{
39-
Cursor = Cursors.Wait;
91+
var directory = new DirectoryInfo(path);
92+
var drive = DriveInfo
93+
.GetDrives()
94+
.Where(d => d.RootDirectory.FullName == directory.Root.FullName)
95+
.FirstOrDefault();
96+
return GetDriveFileSystemObjectInfo(drive);
4097
}
98+
99+
private FileSystemObjectInfo GetDriveFileSystemObjectInfo(DriveInfo drive)
100+
{
101+
foreach (var fso in treeView.Items.OfType<FileSystemObjectInfo>())
102+
{
103+
if (fso.FileSystemInfo.FullName == drive.RootDirectory.FullName)
104+
{
105+
return fso;
106+
}
107+
}
108+
return null;
109+
}
110+
111+
private bool IsParentPath(string path,
112+
string targetPath)
113+
{
114+
return path.StartsWith(targetPath);
115+
}
116+
117+
#endregion
41118
}
42119
}

WPF/TreeViewFileExplorer/TreeViewFileExplorer/obj/Debug/App.g.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#pragma checksum "..\..\App.xaml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "2C9C1DD8388E9E2A086C90D03FBA8DAB005E90E0"
1+
#pragma checksum "..\..\App.xaml" "{8829d00f-11b8-4213-878b-770e8597ac16}" "6513D88DE627D2BE30832AB5B221A247CB9C06235F292553A6D0CB9D1A3E1DDE"
22
//------------------------------------------------------------------------------
33
// <auto-generated>
44
// This code was generated by a tool.

WPF/TreeViewFileExplorer/TreeViewFileExplorer/obj/Debug/App.g.i.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#pragma checksum "..\..\App.xaml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "2C9C1DD8388E9E2A086C90D03FBA8DAB005E90E0"
1+
#pragma checksum "..\..\App.xaml" "{8829d00f-11b8-4213-878b-770e8597ac16}" "6513D88DE627D2BE30832AB5B221A247CB9C06235F292553A6D0CB9D1A3E1DDE"
22
//------------------------------------------------------------------------------
33
// <auto-generated>
44
// This code was generated by a tool.

WPF/TreeViewFileExplorer/TreeViewFileExplorer/obj/Debug/MainWindow.g.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#pragma checksum "..\..\MainWindow.xaml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "047D3C8B72BD13739C89617D9B6797681B2B7F84"
1+
#pragma checksum "..\..\MainWindow.xaml" "{8829d00f-11b8-4213-878b-770e8597ac16}" "10F0F0C95B270C5F08F2BE7C4F5EF66E48EBE1E67AC956725ADDDC6CD75DDCDB"
22
//------------------------------------------------------------------------------
33
// <auto-generated>
44
// This code was generated by a tool.

WPF/TreeViewFileExplorer/TreeViewFileExplorer/obj/Debug/MainWindow.g.i.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#pragma checksum "..\..\MainWindow.xaml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "047D3C8B72BD13739C89617D9B6797681B2B7F84"
1+
#pragma checksum "..\..\MainWindow.xaml" "{8829d00f-11b8-4213-878b-770e8597ac16}" "10F0F0C95B270C5F08F2BE7C4F5EF66E48EBE1E67AC956725ADDDC6CD75DDCDB"
22
//------------------------------------------------------------------------------
33
// <auto-generated>
44
// This code was generated by a tool.
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
6b8de9424a0554c7fbb77eba3fda67a3061c4505
1+
7c3810b2afb66e5c1fc2a46b930b1762e1367b43

WPF/TreeViewFileExplorer/TreeViewFileExplorer/obj/Debug/TreeViewFileExplorer.csproj.FileListAbsolute.txt

+16
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,19 @@ C:\Users\MichaelP\Source\Repos\TreeViewFileExplorer\TreeViewFileExplorer\obj\Deb
1414
C:\Users\MichaelP\Source\Repos\TreeViewFileExplorer\TreeViewFileExplorer\obj\Debug\TreeViewFileExplorer.pdb
1515
C:\Users\MichaelP\Source\Repos\TreeViewFileExplorer\TreeViewFileExplorer\obj\Debug\GeneratedInternalTypeHelper.g.cs
1616
C:\Users\MichaelP\Source\Repos\TreeViewFileExplorer\TreeViewFileExplorer\obj\Debug\TreeViewFileExplorer.csprojAssemblyReference.cache
17+
C:\Users\MichaelP\Source\Repos\GitHub\Tutorials\WPF\TreeViewFileExplorer\TreeViewFileExplorer\bin\Debug\TreeViewFileExplorer.exe.config
18+
C:\Users\MichaelP\Source\Repos\GitHub\Tutorials\WPF\TreeViewFileExplorer\TreeViewFileExplorer\bin\Debug\TreeViewFileExplorer.exe
19+
C:\Users\MichaelP\Source\Repos\GitHub\Tutorials\WPF\TreeViewFileExplorer\TreeViewFileExplorer\bin\Debug\TreeViewFileExplorer.pdb
20+
C:\Users\MichaelP\Source\Repos\GitHub\Tutorials\WPF\TreeViewFileExplorer\TreeViewFileExplorer\obj\Debug\TreeViewFileExplorer.csprojAssemblyReference.cache
21+
C:\Users\MichaelP\Source\Repos\GitHub\Tutorials\WPF\TreeViewFileExplorer\TreeViewFileExplorer\obj\Debug\MainWindow.g.cs
22+
C:\Users\MichaelP\Source\Repos\GitHub\Tutorials\WPF\TreeViewFileExplorer\TreeViewFileExplorer\obj\Debug\App.g.cs
23+
C:\Users\MichaelP\Source\Repos\GitHub\Tutorials\WPF\TreeViewFileExplorer\TreeViewFileExplorer\obj\Debug\GeneratedInternalTypeHelper.g.cs
24+
C:\Users\MichaelP\Source\Repos\GitHub\Tutorials\WPF\TreeViewFileExplorer\TreeViewFileExplorer\obj\Debug\TreeViewFileExplorer_MarkupCompile.cache
25+
C:\Users\MichaelP\Source\Repos\GitHub\Tutorials\WPF\TreeViewFileExplorer\TreeViewFileExplorer\obj\Debug\TreeViewFileExplorer_MarkupCompile.lref
26+
C:\Users\MichaelP\Source\Repos\GitHub\Tutorials\WPF\TreeViewFileExplorer\TreeViewFileExplorer\obj\Debug\MainWindow.baml
27+
C:\Users\MichaelP\Source\Repos\GitHub\Tutorials\WPF\TreeViewFileExplorer\TreeViewFileExplorer\obj\Debug\TreeViewFileExplorer.g.resources
28+
C:\Users\MichaelP\Source\Repos\GitHub\Tutorials\WPF\TreeViewFileExplorer\TreeViewFileExplorer\obj\Debug\TreeViewFileExplorer.Properties.Resources.resources
29+
C:\Users\MichaelP\Source\Repos\GitHub\Tutorials\WPF\TreeViewFileExplorer\TreeViewFileExplorer\obj\Debug\TreeViewFileExplorer.csproj.GenerateResource.cache
30+
C:\Users\MichaelP\Source\Repos\GitHub\Tutorials\WPF\TreeViewFileExplorer\TreeViewFileExplorer\obj\Debug\TreeViewFileExplorer.csproj.CoreCompileInputs.cache
31+
C:\Users\MichaelP\Source\Repos\GitHub\Tutorials\WPF\TreeViewFileExplorer\TreeViewFileExplorer\obj\Debug\TreeViewFileExplorer.exe
32+
C:\Users\MichaelP\Source\Repos\GitHub\Tutorials\WPF\TreeViewFileExplorer\TreeViewFileExplorer\obj\Debug\TreeViewFileExplorer.pdb

WPF/TreeViewFileExplorer/TreeViewFileExplorer/obj/Debug/TreeViewFileExplorer_MarkupCompile.cache

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,12 @@
44
winexe
55
C#
66
.cs
7-
C:\Users\MichaelP\Source\Repos\TreeViewFileExplorer\TreeViewFileExplorer\obj\Debug\
7+
C:\Users\MichaelP\Source\Repos\GitHub\Tutorials\WPF\TreeViewFileExplorer\TreeViewFileExplorer\obj\Debug\
88
TreeViewFileExplorer
99
none
1010
false
1111
DEBUG;TRACE
12-
C:\Users\MichaelP\Source\Repos\TreeViewFileExplorer\TreeViewFileExplorer\App.xaml
12+
C:\Users\MichaelP\Source\Repos\GitHub\Tutorials\WPF\TreeViewFileExplorer\TreeViewFileExplorer\App.xaml
1313
11151548125
1414

1515
19-586021596
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11

22

3-
FC:\Users\MichaelP\Source\Repos\TreeViewFileExplorer\TreeViewFileExplorer\MainWindow.xaml;;
3+
FC:\Users\MichaelP\Source\Repos\GitHub\Tutorials\WPF\TreeViewFileExplorer\TreeViewFileExplorer\MainWindow.xaml;;
44

0 commit comments

Comments
 (0)