Introduction
EbookShelf acts like the resource manager. It scans the directories that can be edited via config.ini to generate dynamic treeview
. When the tree node is clicked, it also scans the files under such directory to generate dynamic listview
. The files could be dragged from the listview
then dropped to the treeview
. The directory could be dragged / dropped in the treeview
section. The file could be renamed and deleted, also the directory could be renamed, deleted and sub-directory created. The listview
is in the smallicon view, so it needs to fix the small icons overlap issue via fired largeicon view first, then smallicon view.
Using the Code
Dynamically generated directories treeView
:
- Declare
Thread
handler objTreeViewInitThread
:
Thread objTreeViewInitThread = null;
- Create
thread
handler with callback function pointer m_treeViewInitProc
:
objTreeViewInitThread = new Thread(MainForm.m_treeViewInitProc);
objTreeViewInitThread.IsBackground = true;
objTreeViewInitThread.Start(this);
objTreeViewInitThread.Join();
- Recursively travel directories tree:
private void m_ListDirectory(TreeNode Parent, DirectoryInfo dir)
{
if (!dir.Exists) return;
DirectoryInfo[] ChildDirectory;
TreeNode node = new TreeNode();
node.Name = dir.FullName; node.Text = dir.Name; if (null == Parent)
{
treeView.Nodes.Add(node);
}
else
{
Parent.Nodes.Add(node);
}
ChildDirectory = dir.GetDirectories();
foreach (DirectoryInfo dirInfo in ChildDirectory)
{
m_ListDirectory(node, dirInfo);
}
}
Points of Interest
Thanks to IniParser
, IconListManager
, SHFileOperation
to delete files and directories to trash developed by CodeProject members, I could do the stuff so quickly ^_^.
History
- 1.0.6
- Function:
- Edit config.ini to set Directory
- Support create, edit, delete and drag / drop category
- Support edit, delete and drag / drop file
- Support order by type and name
- BUG:
- It cannot refresh directories
treeview
or files listview
when edited out of the application
- Dragging / dropping categories, the target dropped node does not highlight
- Click order by name first then click order by type, it failed to order by type