{
m_pFTDlg = pFTDlg;
m_hwndDlg = NULL;
+ m_hwndTree = NULL;
+ m_hParentItem = NULL;
}
FTBrowseDlg::~FTBrowseDlg()
if (m_hwndDlg == NULL) return false;
+ m_hwndTree = GetDlgItem(m_hwndDlg, IDC_FTBROWSETREE);
+
ShowWindow(m_hwndDlg, SW_SHOW);
UpdateWindow(m_hwndDlg);
TVITEM tvi;
TVINSERTSTRUCT tvins;
+ while (TreeView_GetChild(m_hwndTree, m_hParentItem) != NULL) {
+ TreeView_DeleteItem(m_hwndTree, TreeView_GetChild(m_hwndTree, m_hParentItem));
+ }
+
for (unsigned int i = 0; i < pFI->getNumEntries(); i++)
{
tvi.mask = TVIF_TEXT;
tvi.pszText = pFI->getNameAt(i);;
- tvins.hParent = NULL;
+ tvins.hParent = m_hParentItem;
tvins.item = tvi;
- tvins.hParent = TreeView_InsertItem(GetDlgItem(m_hwndDlg, IDC_FTBROWSETREE), &tvins);
- TreeView_InsertItem(GetDlgItem(m_hwndDlg, IDC_FTBROWSETREE), &tvins);
+ tvins.hParent = TreeView_InsertItem(m_hwndTree, &tvins);
+ TreeView_InsertItem(m_hwndTree, &tvins);
}
}
+char *
+FTBrowseDlg::getTVPath(HTREEITEM hTItem)
+{
+ char path[FT_FILENAME_SIZE];
+ char szText[FT_FILENAME_SIZE];
+
+ TVITEM tvi;
+ path[0] = '\0';
+
+ do {
+ tvi.mask = TVIF_TEXT | TVIF_HANDLE;
+ tvi.hItem = hTItem;
+ tvi.pszText = szText;
+ tvi.cchTextMax = FT_FILENAME_SIZE;
+ TreeView_GetItem(m_hwndTree, &tvi);
+ sprintf(path, "%s\\%s", path, tvi.pszText);
+ hTItem = TreeView_GetParent(m_hwndTree, hTItem);
+ } while(hTItem != NULL);
+
+ return pathInvert(path);
+}
+
+char *
+FTBrowseDlg::pathInvert(char *pPath)
+{
+ int len = strlen(pPath);
+ m_szPath[0] = '\0';
+ char *pos = NULL;
+
+ while ((pos = strrchr(pPath, '\\')) != NULL) {
+ if (strlen(m_szPath) == 0) {
+ strcpy(m_szPath, (pos + 1));
+ } else {
+ sprintf(m_szPath, "%s\\%s", m_szPath, (pos + 1));
+ }
+ *pos = '\0';
+ }
+
+ m_szPath[len] = '\0';
+ return m_szPath;
+}
+
+char *
+FTBrowseDlg::getPath()
+{
+ GetDlgItemText(m_hwndDlg, IDC_FTBROWSEPATH, m_szPath, FT_FILENAME_SIZE);
+ return m_szPath;
+}
+
BOOL CALLBACK
FTBrowseDlg::FTBrowseDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (LOWORD(wParam))
{
case IDOK:
+ _this->m_pFTDlg->onEndBrowseDlg(true);
return FALSE;
case IDCANCEL:
+ _this->m_pFTDlg->onEndBrowseDlg(false);
return FALSE;
}
}
switch (((LPNMHDR) lParam)->code)
{
case TVN_SELCHANGED:
+ SetDlgItemText(hwnd, IDC_FTBROWSEPATH, _this->getTVPath(((NMTREEVIEW *) lParam)->itemNew.hItem));
return FALSE;
case TVN_ITEMEXPANDING:
+ {
+ NMTREEVIEW *nmCode = (NMTREEVIEW *) lParam;
+ if (nmCode->action == 2) {
+ _this->m_hParentItem = nmCode->itemNew.hItem;
+ _this->m_pFTDlg->getBrowseItems(_this->getTVPath(_this->m_hParentItem));
+ }
+ }
return FALSE;
}
- break;
- }
break;
case WM_CLOSE:
- case WM_DESTROY:
+ _this->m_pFTDlg->onEndBrowseDlg(false);
return FALSE;
}
+ }
return 0;
}
m_hInstance = hInst;
m_bDlgShown = false;
+ m_bLocalBrowsing = true;
m_bCloseDlgAfterCancel = false;
m_pLocalLV = NULL;
showRemoteLVItems();
}
+void
+FTDialog::onEndBrowseDlg(bool bResult)
+{
+ if (m_pBrowseDlg == NULL) return;
+
+ if (bResult) {
+ if (m_bLocalBrowsing) {
+ strcpy(m_szLocalPathTmp, m_pBrowseDlg->getPath());
+ showLocalLVItems();
+ } else {
+ strcpy(m_szRemotePathTmp, m_pBrowseDlg->getPath());
+ showRemoteLVItems();
+ }
+ }
+
+ delete m_pBrowseDlg;
+ m_pBrowseDlg = NULL;
+}
+
void
FTDialog::onLocalBrowse()
{
+ if (m_pBrowseDlg != NULL) return;
+
+ m_bLocalBrowsing = true;
+
+ m_pBrowseDlg = new FTBrowseDlg(this);
+ m_pBrowseDlg->create();
+ getBrowseItems("");
}
void
{
if (m_pBrowseDlg != NULL) return;
+ m_bLocalBrowsing = false;
+
m_pBrowseDlg = new FTBrowseDlg(this);
m_pBrowseDlg->create();
}
}
+void
+FTDialog::getBrowseItems(char *pPath)
+{
+ if (m_bLocalBrowsing) {
+ FileInfo fi;
+ FolderManager fm;
+ fm.getDirInfo(pPath, &fi, 1);
+ if (m_pBrowseDlg != NULL) m_pBrowseDlg->addItems(&fi);
+ } else {
+ m_pFileTransfer->requestFileList(pPath, FT_FLR_DEST_BROWSE, true);
+ }
+}
+
void
FTDialog::addBrowseItems(FileInfo *pFI)
{