📄 shortcutpanefolders.cpp
字号:
// ShortcutPaneFolders.cpp: implementation of the CShortcutPaneFolders class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "ULExplorer.h"
#include "ShortcutPaneFolders.h"
#include "ULExplorerView.h"
#include "WarningDlg.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
BEGIN_MESSAGE_MAP(CShortcutPaneFolders, CXTPShortcutBarPane)
ON_NOTIFY(TVN_SELCHANGED, IDC_FOLDERS_TREE, OnSelchanged)
END_MESSAGE_MAP()
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CShortcutPaneFolders::CShortcutPaneFolders()
{
m_ilTreeIcons.Create(16, 16, ILC_MASK|ILC_COLOR24, 0, 1);
CBitmap bmp;
VERIFY(bmp.LoadBitmap(IDB_FILETREE));
m_ilTreeIcons.Add(&bmp, CXTPImageManager::GetBitmapMaskColor(bmp, CPoint(0, 0)));
}
CShortcutPaneFolders::~CShortcutPaneFolders()
{
}
BOOL CShortcutPaneFolders::Create(LPCTSTR lpszCaption, CXTPShortcutBar* pParent)
{
if (!CXTPShortcutBarPane::Create(lpszCaption, pParent))
return FALSE;
VERIFY(m_wndTreeFolders.Create(WS_VISIBLE|TVS_HASBUTTONS|TVS_LINESATROOT
| TVS_HASLINES , CXTPEmptyRect(), this, IDC_FOLDERS_TREE));
m_wndTreeFolders.SetImageList(&m_ilTreeIcons, TVSIL_NORMAL);
AddItem(_T("目录树"), &m_wndTreeFolders, 115);
return TRUE;
}
void CShortcutPaneFolders::SetFoldersView(CULExplorerView* pView)
{
m_pFoldersView = pView;
}
void CShortcutPaneFolders::ShowDentryTree()
{
if (!theFileSys.IsVDiskLoaded())
return;
m_wndTreeFolders.DeleteAllItems();
HTREEITEM RootNode = m_wndTreeFolders.InsertItem("/", 2, 3);
ShowDentryTree("/", RootNode);
}
void CShortcutPaneFolders::ShowDentryTree(CString PathName, HTREEITEM TreeNode)
{
FIND_DATA ff;
int ret;
CString tmp;
CArray<FIND_DATA> array;
if( (ret=theFileSys.FindFirstFile(PathName.LockBuffer(), &ff))==0 )
{
do
{
array.Add(ff);
} while(!findnextfile(1, &ff));
}
else
{
TRACE("目录游览失败: path=\"%s\" error=%d\n", PathName, ret);
return;
}
for (int i=0; i<array.GetCount(); i++)
{
FIND_DATA& pff = array.ElementAt(i);
if ( !strcmp(pff.ff_name, ".") || !strcmp(pff.ff_name, "..") )
continue;
// 目录
if ( pff.ff_mode == S_IFDIR )
{
tmp = PathName + CString(pff.ff_name) + "/";
HTREEITEM Node = m_wndTreeFolders.InsertItem(pff.ff_name, 2, 3, TreeNode);
ShowDentryTree(tmp, Node);
}
}
m_wndTreeFolders.Expand(TreeNode, TVE_EXPAND);
}
void CShortcutPaneFolders::ExpandDentryTree(CString PathName)
{
CString tmp = PathName;
if ( tmp[0] != '/')
{
Waring("路径不正确");
return;
}
if ( tmp.GetAt(tmp.GetLength()-1)!='/')
tmp += "/";
tmp = tmp.Right(tmp.GetLength()-1);
HTREEITEM RootNode = m_wndTreeFolders.GetRootItem();
HTREEITEM Node = ExpandDentryTree(tmp, RootNode);
if (!Node)
{
Waring("路径不正确");
return;
}
m_wndTreeFolders.Expand(Node, TVE_EXPAND);
m_wndTreeFolders.SelectItem(Node);
}
HTREEITEM CShortcutPaneFolders::ExpandDentryTree(CString strPath, HTREEITEM TreeNode)
{
int pos, len;
CString tmp;
if ( strPath=="/" || strPath=="") return TreeNode;
pos = strPath.Find("/",0);
// 找不到'/'了~
if (pos <= 0) return NULL;
tmp = strPath.Left(pos);
len = strPath.GetLength();
if (len-pos-1 < 0) return NULL;
strPath = strPath.Right(len-pos-1);
HTREEITEM child = m_wndTreeFolders.GetChildItem(TreeNode);
do
{
if (m_wndTreeFolders.GetItemText(child)==tmp)
{
return ExpandDentryTree(strPath, child);
}
child = m_wndTreeFolders.GetNextSiblingItem(child);
} while(child);
return NULL;
}
CString CShortcutPaneFolders::GetFullPath(HTREEITEM hCurrent)
{
CString strTemp;
CString strReturn = "";
HTREEITEM hRoot = m_wndTreeFolders.GetRootItem();
while(hCurrent != hRoot)
{
strTemp = m_wndTreeFolders.GetItemText(hCurrent);
if(strTemp.Right(1) != "/")
strTemp += "/";
strReturn = strTemp + strReturn;
hCurrent = m_wndTreeFolders.GetParentItem(hCurrent);
}
strReturn = "/" + strReturn;
return strReturn;
}
void CShortcutPaneFolders::OnSelchanged(NMHDR* pNMHDR, LRESULT* /*pResult*/)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
CString strFolderPath;
if (strFolderPath.IsEmpty())
{
strFolderPath = m_wndTreeFolders.GetItemText(pNMTreeView->itemNew.hItem);
}
HTREEITEM hItem = m_wndTreeFolders.GetSelectedItem();
if (hItem != NULL)
{
TRACE("strFolderPath=%s\n",strFolderPath);
}
CString m_strPath = GetFullPath(hItem);
m_pFoldersView->ShowDentryList(m_strPath);
}
void CShortcutPaneFolders::SelectParentItem()
{
HTREEITEM hItem = m_wndTreeFolders.GetSelectedItem();
if (hItem==m_wndTreeFolders.GetRootItem())
return;
m_wndTreeFolders.SelectItem(m_wndTreeFolders.GetParentItem(hItem));
}
void CShortcutPaneFolders::ClearAll(void)
{
m_pFoldersView->ClearAll();
m_wndTreeFolders.DeleteAllItems();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -