// RemoteListCtrl.cpp : implementation file // #include "stdafx.h" #include "ConsoleApp.h" #include "RemoteListCtrl.h" #include "Struct.h" #include "MainFrm.h" #include "WebDlg.h" #include "RemoteView.h" #include "LocalView.h" #include ".\remotelistctrl.h" #include ".\distinfodlg.h" #include "NoticeTrans.h" #include "ne_socket.h" #include "ne_uri.h" #include "ne_request.h" #include "ne_xml.h" #include "ne_string.h" typedef struct COMMLIB_HANDLE { ne_session* pnsess; ne_uri nuri; string sUserId; string sPassword; string sDavAuth; DWORD dwError; string sError; // ¾÷/´Ù¿î °ü·Ã HANDLE hThread; HANDLE hWaitEvent; UINT32 uJob; string sJobParam; cl_callback proc; void* pParam; HANDLE hTranFile; __int64 nExFileSize; __int64 iTranPos; __int64 nFileSize; DWORD dwOldTick; int nTranStop; string sRedirect; string sDomain2; set setServiceList; set setPathInfoList; set setFileList; } COMMLIB_STRUCT, *PCOMMLIB_STRUCT; #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif int KrCompare(LPCTSTR pszText1, LPCTSTR pszText2); bool IsPathItself(CString sSrcPath, CString sDstPath); ///////////////////////////////////////////////////////////////////////////// // CRemoteListCtrl CRemoteListCtrl::CRemoteListCtrl() { m_nStyle = 4; m_nSortColumn = 0; m_nSortDirect = -1; } CRemoteListCtrl::~CRemoteListCtrl() { } BEGIN_MESSAGE_MAP(CRemoteListCtrl, CListCtrl) //{{AFX_MSG_MAP(CRemoteListCtrl) //}}AFX_MSG_MAP ON_WM_CREATE() ON_WM_ERASEBKGND() ON_WM_LBUTTONDBLCLK() ON_WM_CONTEXTMENU() ON_NOTIFY_REFLECT(LVN_BEGINDRAG, OnBegindrag) ON_NOTIFY_REFLECT(LVN_COLUMNCLICK, OnColumnclick) ON_COMMAND(ID_LIST_NEWFOLDER, OnListNewfolder) ON_COMMAND(ID_LIST_REFRESH, OnListRefresh) ON_COMMAND(ID_LIST_TYPE1, OnListType1) ON_COMMAND(ID_LIST_TYPE2, OnListType2) ON_COMMAND(ID_LIST_TYPE3, OnListType3) ON_COMMAND(ID_LIST_TYPE4, OnListType4) ON_COMMAND(ID_LIST_SORT1, OnListSort1) ON_COMMAND(ID_LIST_SORT2, OnListSort2) ON_COMMAND(ID_LIST_SORT3, OnListSort3) ON_COMMAND(ID_LIST_SORT4, OnListSort4) ON_COMMAND(ID_LIST_PASTE, OnListPaste) ON_COMMAND(ID_LIST_ALL, OnListAll) ON_COMMAND(ID_LISTFILE_DOWNLOAD, OnListfileDownload) ON_COMMAND(ID_LISTFILE_SAVEURL, OnListfileSaveUrl) ON_COMMAND(ID_LISTFILE_CUT, OnListfileCut) ON_COMMAND(ID_LISTFILE_COPY, OnListfileCopy) ON_COMMAND(ID_LISTFILE_PASTE, OnListfilePaste) ON_COMMAND(ID_LISTFILE_DELETE, OnListfileDelete) ON_COMMAND(ID_LISTFILE_RENAME, OnListfileRename) ON_COMMAND(ID_LIST_VIEW_DISTSTATUS, OnListViewDiststatus) ON_COMMAND(ID_LIST_DIST_AGAIN, OnListDistAgain) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CRemoteListCtrl message handlers BOOL CRemoteListCtrl::PreTranslateMessage(MSG* pMsg) { CMainFrame *pmf = (CMainFrame *)AfxGetMainWnd(); switch (pMsg->message) { case WM_SETFOCUS: case WM_LBUTTONDOWN: case WM_RBUTTONDOWN: pmf->SetFocus(this); break; case WM_KEYDOWN: CEdit *edit = GetEditControl(); if (edit) { if (pMsg->wParam == VK_RETURN || pMsg->wParam == VK_ESCAPE) { edit->SendMessage(WM_KEYDOWN, pMsg->wParam, pMsg->lParam); return TRUE; } } else if (pMsg->wParam == VK_F2) { for (int i = 0; i < GetItemCount(); i++) { if (LVIS_FOCUSED & GetItemState(i, LVIF_TEXT)) { EditLabel(i); break; } } return TRUE; } else if (pMsg->wParam == VK_DELETE) { ((CRemoteView*)GetParent())->DeleteListItem(); return TRUE; } else if (GetKeyState(VK_CONTROL) & 128) { if (pMsg->wParam == VK_A) { CMainFrame *pmf = (CMainFrame *)AfxGetMainWnd(); pmf->m_pRemoteView->m_bUpdating = TRUE; for (int i = 0; i < GetItemCount(); i++) SetItemState(i, LVIS_SELECTED, LVIS_SELECTED); pmf->m_pRemoteView->m_bUpdating = FALSE; pmf->m_pRemoteView->ShowStatusObject(TRUE, FALSE, TRUE); return TRUE; } else if (pMsg->wParam == VK_C) { SetClipboard(CBS_COPY); return TRUE; } else if (pMsg->wParam == VK_X) { SetClipboard(CBS_CUT); return TRUE; } else if (pMsg->wParam == VK_V) { PasteClipboard(); return TRUE; } else if (pMsg->wParam == VK_D) { OnListfileDelete(); return TRUE; } } } return CListCtrl::PreTranslateMessage(pMsg); } int CRemoteListCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct) { // if (CListCtrl::OnCreate(lpCreateStruct) == -1) // return -1; m_dropTarget.Register(this); int anWidths[7+1]={270, 130,110, 110, 150, 54, 90, 90}; CString sWidths = COptions::GetOption(OPTION_REMOTECOLUMNWIDTHS); if (sWidths != "") { int pos=-1; int i; for (i=0; i<6+1; i++) { int oldpos = pos + 1; pos = sWidths.Find(_T(" "), oldpos); if (pos == -1) break; sWidths.SetAt(pos, 0); int size = _ttoi(sWidths.Mid(oldpos)); if (size > 0) anWidths[i] = size; } if (i == 6+1) { int size = _ttoi(sWidths.Mid(pos+1)); if (size > 0) anWidths[i] = size; } } m_asHeader[0] = "À̸§"; m_asHeader[1] = "¹èÆ÷ÇöȲ ( ¿Ï·á/Àüü )"; m_asHeader[2] = "Å©±â"; m_asHeader[3] = "Á¾·ù"; m_asHeader[4] = "¼öÁ¤ÀÏÀÚ"; m_anHeaderAlign[0] = LVCFMT_LEFT; m_anHeaderAlign[1] = LVCFMT_LEFT; m_anHeaderAlign[2] = LVCFMT_RIGHT; m_anHeaderAlign[3] = LVCFMT_LEFT; m_anHeaderAlign[4] = LVCFMT_LEFT; for (int i = 0; i < 4+1; i++) InsertColumn(i, m_asHeader[i], m_anHeaderAlign[i], anWidths[i]); m_ilSort.Create(9, 9, ILC_MASK, 3, 3); HICON hicon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_SORT_NONE)); m_ilSort.Add(hicon); hicon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_SORT_ASC)); m_ilSort.Add(hicon); hicon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_SORT_DESC)); m_ilSort.Add(hicon); m_ilSort.SetBkColor(CLR_NONE); SetListStyle(m_nStyle); SetExtendedStyle(LVS_EX_INFOTIP); SetCallbackMask(GetCallbackMask() | LVIS_OVERLAYMASK); return 0; } BOOL CRemoteListCtrl::OnEraseBkgnd(CDC* pDC) { // return TRUE; return CListCtrl::OnEraseBkgnd(pDC); } void CRemoteListCtrl::OnLButtonDblClk(UINT nFlags, CPoint point) { int iItem = HitTest(point); if (iItem < 0) return; if (((PRLISTITEM_STRUCT)GetItemData(iItem))->bFolder) { CRemoteView* pview = (CRemoteView*)GetParent(); CString sName = GetItemText(iItem, 0); HTREEITEM hti = pview->m_tree.GetSelectedItem(); hti = pview->m_tree.GetChildItem(hti); while (hti) { if (sName == pview->m_tree.GetItemText(hti)) { pview->m_tree.SelectItem(hti); return; } hti = pview->m_tree.GetNextSiblingItem(hti); } } // CListCtrl::OnLButtonDblClk(nFlags, point); } void CRemoteListCtrl::OnContextMenu(CWnd* pWnd, CPoint point) { CRemoteTreeCtrl* ptree = ((CRemoteView*)GetParent())->GetTreeCtrl(); if (!ptree->GetRootItem()) return; CPoint ptHit = point; ScreenToClient(&ptHit); CMainFrame *pmf = (CMainFrame *)AfxGetMainWnd(); HTREEITEM htiRoot = pmf->m_pRemoteView->m_tree.GetRootItem(); HTREEITEM htiSelected = pmf->m_pRemoteView->m_tree.GetSelectedItem(); HTREEITEM htiParent = pmf->m_pRemoteView->m_tree.GetParentItem(htiSelected); CMenu menu, *pmenu; if ((m_iSelectedItem = HitTest(ptHit)) >= 0) { menu.LoadMenu(IDR_POP_RLISTFILE); pmenu = menu.GetSubMenu(0); ASSERT(pmenu != NULL); if (htiSelected == htiRoot) return; pmenu->SetMenuItemBitmaps(ID_LISTFILE_CUT, MF_BYCOMMAND, &pmf->m_bmCut, &pmf->m_bmCut); pmenu->SetMenuItemBitmaps(ID_LISTFILE_COPY, MF_BYCOMMAND, &pmf->m_bmCopy, &pmf->m_bmCopy); pmenu->SetMenuItemBitmaps(ID_LISTFILE_PASTE, MF_BYCOMMAND, &pmf->m_bmPaste, &pmf->m_bmPaste); if (((PRLISTITEM_STRUCT)GetItemData(m_iSelectedItem))->bFolder) { COleDataObject odo; if (!(odo.AttachClipboard() && odo.IsDataAvailable(CF_HDROP)) && !(pmf->m_cbs != CBS_NONE && pmf->m_saDragSource.GetCount() > 0)) pmenu->EnableMenuItem(ID_LISTFILE_PASTE, MF_GRAYED); } else pmenu->DeleteMenu(ID_LISTFILE_PASTE, MF_BYCOMMAND); if (((PRTREEITEM_STRUCT)ptree->GetItemData(htiSelected))->nClass == TNS_FOLDER) { HTREEITEM hti = ptree->GetParentItem(htiSelected); while (((PRTREEITEM_STRUCT)ptree->GetItemData(hti))->nClass == TNS_FOLDER) { htiSelected = hti; hti = ptree->GetParentItem(hti); } if (((PRTREEITEM_STRUCT)ptree->GetItemData(htiSelected))->saAttr[1] != "1") pmenu->EnableMenuItem(ID_LISTFILE_SAVEURL, MF_GRAYED); } else pmenu->EnableMenuItem(ID_LISTFILE_SAVEURL, MF_GRAYED); } else { menu.LoadMenu(IDR_POP_RLIST); pmenu = menu.GetSubMenu(0); ASSERT(pmenu != NULL); pmenu->SetMenuItemBitmaps(ID_LIST_NEWFOLDER, MF_BYCOMMAND, &pmf->m_bmFolder, &pmf->m_bmFolder); pmenu->SetMenuItemBitmaps(ID_LIST_PASTE, MF_BYCOMMAND, &pmf->m_bmPaste, &pmf->m_bmPaste); switch (pmf->m_nRemoteListType) { case 1: pmenu->CheckMenuItem(ID_LIST_TYPE1, MF_CHECKED); break; case 2: pmenu->CheckMenuItem(ID_LIST_TYPE2, MF_CHECKED); break; case 3: pmenu->CheckMenuItem(ID_LIST_TYPE3, MF_CHECKED); break; case 4: pmenu->CheckMenuItem(ID_LIST_TYPE4, MF_CHECKED); break; } switch (m_nSortColumn) { case 0: pmenu->CheckMenuItem(ID_LIST_SORT1, MF_CHECKED); break; case 1: pmenu->CheckMenuItem(ID_LIST_SORT2, MF_CHECKED); break; case 2: pmenu->CheckMenuItem(ID_LIST_SORT3, MF_CHECKED); break; case 3: pmenu->CheckMenuItem(ID_LIST_SORT4, MF_CHECKED); break; } if (htiSelected == htiRoot) { pmenu->EnableMenuItem(ID_LIST_NEWFOLDER, MF_GRAYED); pmenu->EnableMenuItem(ID_LIST_ALL, MF_GRAYED); pmenu->EnableMenuItem(ID_LIST_PASTE, MF_GRAYED); } else { COleDataObject odo; if (!(odo.AttachClipboard() && odo.IsDataAvailable(CF_HDROP)) && !(pmf->m_cbs != CBS_NONE && pmf->m_saDragSource.GetCount() > 0)) pmenu->EnableMenuItem(ID_LIST_PASTE, MF_GRAYED); } } pmenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this); } void CRemoteListCtrl::OnBegindrag(NMHDR *pNMHDR, LRESULT *pResult) { LPNMLISTVIEW pNMLV = reinterpret_cast(pNMHDR); CRemoteTreeCtrl* ptree = ((CRemoteView*)GetParent())->GetTreeCtrl(); POSITION pos = GetFirstSelectedItemPosition(); if (ptree->GetSelectedItem() == ptree->GetRootItem() || !pos) return; CString sPath = ptree->GetPath(ptree->GetSelectedItem()) + "/"; CMainFrame* pmf = (CMainFrame*)AfxGetMainWnd(); pmf->m_bDragFromRemote = TRUE; pmf->m_htiDragTarget = ptree->GetVolumeItem(ptree->GetSelectedItem()); pmf->m_saDragSource.RemoveAll(); while (pos) { int iItem = GetNextSelectedItem(pos); pmf->m_saDragSource.Add(sPath + GetItemText(iItem, 0)); } pmf->m_pLocalView->StartDrag(); COleDataSource ods; DROPEFFECT de = ods.DoDragDrop(DROPEFFECT_COPY | DROPEFFECT_MOVE, NULL); pmf->m_pLocalView->EndDrag(); pmf->m_bDragFromRemote = FALSE; *pResult = 0; } void CRemoteListCtrl::OnColumnclick(NMHDR* pNMHDR, LRESULT* pResult) { NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; Sort(pNMListView->iSubItem); *pResult = 0; } void CRemoteListCtrl::OnListNewfolder() { SetFocus(); CMainFrame *pmf = (CMainFrame *)AfxGetMainWnd(); pmf->m_pRemoteView->MakeNewFolder(); } void CRemoteListCtrl::OnListRefresh() { CMainFrame *pmf = (CMainFrame *)AfxGetMainWnd(); pmf->m_pRemoteView->RefreshItem(); } void CRemoteListCtrl::OnListType1() { CMainFrame *pmf = (CMainFrame *)AfxGetMainWnd(); pmf->OnViewRlistType1(); } void CRemoteListCtrl::OnListType2() { CMainFrame *pmf = (CMainFrame *)AfxGetMainWnd(); pmf->OnViewRlistType2(); } void CRemoteListCtrl::OnListType3() { CMainFrame *pmf = (CMainFrame *)AfxGetMainWnd(); pmf->OnViewRlistType3(); } void CRemoteListCtrl::OnListType4() { CMainFrame *pmf = (CMainFrame *)AfxGetMainWnd(); pmf->OnViewRlistType4(); } void CRemoteListCtrl::OnListSort1() { Sort(0); } void CRemoteListCtrl::OnListSort2() { Sort(1); } void CRemoteListCtrl::OnListSort3() { Sort(2); } void CRemoteListCtrl::OnListSort4() { Sort(3); } void CRemoteListCtrl::OnListPaste() { PasteClipboard(); } void CRemoteListCtrl::OnListAll() { CMainFrame *pmf = (CMainFrame *)AfxGetMainWnd(); pmf->m_pRemoteView->m_bUpdating = TRUE; for (int i = 0; i < GetItemCount(); i++) SetItemState(i, LVIS_SELECTED, LVIS_SELECTED); pmf->m_pRemoteView->m_bUpdating = FALSE; pmf->m_pRemoteView->ShowStatusObject(TRUE, FALSE, TRUE); } void CRemoteListCtrl::OnListfileDownload() { CMainFrame *pmf = (CMainFrame *)AfxGetMainWnd(); pmf->Download(); } void CRemoteListCtrl::OnListfileSaveUrl() { /* if (((CRemoteView*)GetParent())->m_nSelectedFiles == 0) { AfxMessageBox("URL·Î ÀúÀåÇÒ ÆÄÀÏÀ» ¼±ÅÃÇϽʽÿÀ. URL ÀúÀåÀº ÆÄÀϸ¸ °¡´ÉÇÕ´Ï´Ù."); return; } */ ((CMainFrame*)AfxGetMainWnd())->SaveUrl(); } void CRemoteListCtrl::OnListfileCut() { SetClipboard(CBS_CUT); } void CRemoteListCtrl::OnListfileCopy() { SetClipboard(CBS_COPY); } void CRemoteListCtrl::OnListfilePaste() { //TODO... PasteClipboard(GetItemText(m_iSelectedItem, 0)); } void CRemoteListCtrl::OnListfileDelete() { CMainFrame *pmf = (CMainFrame *)AfxGetMainWnd(); pmf->m_pRemoteView->DeleteListItem(); } void CRemoteListCtrl::OnListfileRename() { EditLabel(m_iSelectedItem); } BOOL CRemoteListCtrl::SetItemText(int nItem, int nSubItem, LPCTSTR lpszText) { if (nSubItem == 0) { PRLISTITEM_STRUCT prli = (PRLISTITEM_STRUCT)GetItemData(nItem); if (prli) { CString sText = lpszText; prli->sName = sText; prli->saAttr[0] = sText.MakeUpper(); } } return CListCtrl::SetItemText(nItem, nSubItem, lpszText); } void CRemoteListCtrl::SetListStyle(int nStyle) { UINT nSHOption = SHGFI_ICON | SHGFI_SYSICONINDEX; int nLVOption; if (nStyle == 1) { m_nStyle = LVS_ICON; nSHOption |= SHGFI_LARGEICON; nLVOption = LVSIL_NORMAL; } else if (nStyle == 2) { m_nStyle = LVS_SMALLICON; nSHOption |= SHGFI_SMALLICON; nLVOption = LVSIL_SMALL; } else if (nStyle == 3) { m_nStyle = LVS_LIST; nSHOption |= SHGFI_SMALLICON; nLVOption = LVSIL_SMALL; } else if (nStyle == 4) { m_nStyle = LVS_REPORT; nSHOption |= SHGFI_SMALLICON; nLVOption = LVSIL_SMALL; } int nRemove = ~m_nStyle & (LVS_REPORT | LVS_ICON | LVS_SMALLICON | LVS_LIST); ModifyStyle(nRemove, m_nStyle, SWP_NOZORDER); SHFILEINFO shfi; HIMAGELIST hil = (HIMAGELIST)SHGetFileInfo("", 0, &shfi, sizeof(shfi), nSHOption); SetImageList(CImageList::FromHandle(hil), nLVOption); Arrange(LVA_DEFAULT); Sort(); } void CRemoteListCtrl::SetClipboard(CLIPBOARD_STATE cbs) { if (OpenClipboard()) { EmptyClipboard(); CloseClipboard(); } POSITION pos = GetFirstSelectedItemPosition(); if (!pos) return; CRemoteTreeCtrl* ptree = ((CRemoteView*)GetParent())->GetTreeCtrl(); HTREEITEM hti = ptree->GetSelectedItem(); if (hti == ptree->GetRootItem()) return; CString sPath = ptree->GetPath(hti); CMainFrame *pmf = (CMainFrame *)AfxGetMainWnd(); pmf->m_cbs = cbs; pmf->m_htiDragTarget = ptree->GetVolumeItem(hti); pmf->m_saDragSource.RemoveAll(); while (pos) { int iItem = GetNextSelectedItem(pos); pmf->m_saDragSource.Add(sPath + "/" + GetItemText(iItem, 0)); } } void CRemoteListCtrl::PasteClipboard(CString sFolder) { if (sFolder != "") sFolder = "/" + sFolder; CRemoteTreeCtrl* ptree = ((CRemoteView*)GetParent())->GetTreeCtrl(); HTREEITEM htiTarget = ptree->GetSelectedItem(); if (htiTarget == ptree->GetRootItem()) return; COleDataObject odo; if (odo.AttachClipboard() && odo.IsDataAvailable(CF_HDROP)) { STGMEDIUM sm; FORMATETC fe = {CF_HDROP, (DVTARGETDEVICE FAR*)NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL}; if (!odo.GetData(CF_HDROP, &sm, &fe)) return; HDROP hdrop = (HDROP)sm.hGlobal; int nDragCount = ::DragQueryFile(hdrop, 0xFFFFFFFF, NULL, 0); if (nDragCount == 0) return; CMainFrame* pmf = (CMainFrame*)AfxGetMainWnd(); pmf->m_saDragSource.RemoveAll(); char szFile[MAX_PATH]; for (int i = 0; i < nDragCount; i++) { ::DragQueryFile(hdrop, i, szFile, sizeof(szFile)); CString sFile(szFile); if (sFile.Find('\\') < 0) { AfxMessageBox("½Ã½ºÅÛ ÆÄÀÏÀº ¾÷·Îµå ÇÒ ¼ö ¾ø½À´Ï´Ù."); pmf->m_saDragSource.RemoveAll(); break; } pmf->m_saDragSource.Add(sFile); } if (pmf->m_saDragSource.GetCount() == 0) return; pmf->m_sDragTarget = ptree->GetPath(htiTarget) + sFolder; pmf->m_htiDragTarget = ptree->GetVolumeItem(htiTarget); pmf->Upload(false); } else { CMainFrame* pmf = (CMainFrame*)AfxGetMainWnd(); if (pmf->m_cbs == CBS_NONE) return; if (pmf->m_saDragSource.GetCount() == 0) return; if (ptree->GetVolumeItem(htiTarget) != pmf->m_htiDragTarget) { AfxMessageBox("¼­·Î ´Ù¸¥ ¼­ºñ½º»çÀÌ¿¡´Â ÆÄÀÏÀ» º¹»ç ¶Ç´Â À̵¿ ÇÒ ¼ö ¾ø½À´Ï´Ù."); return; } pmf->m_sDragTarget = ptree->GetPath(htiTarget) + sFolder; for (int i = 0; i < pmf->m_saDragSource.GetCount(); i++) { if (IsPathItself(pmf->m_saDragSource[i], pmf->m_sDragTarget)) { AfxMessageBox("ÀÚ±â ÀÚ½ÅÀÇ ÇÏÀ§ Æú´õ·Î º¹»ç ¶Ç´Â À̵¿ ÇÒ ¼ö ¾ø½À´Ï´Ù."); return; } } pmf->BeginWaitMessage(); CStringArray saSucceed; if (pmf->m_cbs == CBS_COPY) pmf->CopyRemoteObject(pmf->m_htiDragTarget, pmf->m_saDragSource, pmf->m_sDragTarget, saSucceed); else pmf->MoveRemoteObject(pmf->m_htiDragTarget, pmf->m_saDragSource, pmf->m_sDragTarget, saSucceed); CRemoteView* pview = (CRemoteView*)GetParent(); for (int i = 0; i < saSucceed.GetCount(); i++) { HTREEITEM hti = ptree->GetItem(pmf->m_htiDragTarget, saSucceed[i]); if (!hti) continue; CString sName = saSucceed[i].Mid(saSucceed[i].ReverseFind('/') + 1); if (!ptree->IsExistsChild(htiTarget, sName)) pview->AppendObject(htiTarget, true, sName, 0, ""); if (pmf->m_cbs == CBS_CUT) ptree->DeleteItem(hti); } pmf->EndWaitMessage(); if (saSucceed.GetCount() == 0) return; pmf->m_pRemoteView->RefreshItem(); } } void CRemoteListCtrl::Sort(int nColumn) { HDITEM *phdi = new HDITEM; if (nColumn >= 0) { if (m_nSortColumn != nColumn) { phdi->pszText = m_asHeader[m_nSortColumn].GetBuffer(0); phdi->cchTextMax = 0; phdi->mask = HDI_TEXT | HDI_IMAGE | HDI_FORMAT; phdi->fmt = m_anHeaderAlign[m_nSortColumn] | HDF_IMAGE | HDF_STRING | HDF_BITMAP_ON_RIGHT; phdi->iImage = 0; GetHeaderCtrl()->SetItem(m_nSortColumn, phdi); } else m_nSortDirect = -m_nSortDirect; m_nSortColumn = nColumn; } GetHeaderCtrl()->SetImageList(&m_ilSort); phdi->pszText = m_asHeader[m_nSortColumn].GetBuffer(0); phdi->cchTextMax = 0; phdi->mask = HDI_TEXT | HDI_IMAGE | HDI_FORMAT; phdi->fmt = m_anHeaderAlign[m_nSortColumn] | HDF_IMAGE | HDF_STRING | HDF_BITMAP_ON_RIGHT; phdi->iImage = (m_nSortDirect > 0 ? 1 : 2); GetHeaderCtrl()->SetItem(m_nSortColumn, phdi); delete phdi; SortItems(SortProc, (LPARAM)this); } int CRemoteListCtrl::SortProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort) { PRLISTITEM_STRUCT prli1 = (PRLISTITEM_STRUCT)lParam1; PRLISTITEM_STRUCT prli2 = (PRLISTITEM_STRUCT)lParam2; CRemoteListCtrl *plist = (CRemoteListCtrl*)lParamSort; CString sText1 = (prli1->bFolder ? "0" : "1"); CString sText2 = (prli2->bFolder ? "0" : "1"); switch (plist->m_nSortColumn) { case 0:// ÆÄÀϸí sText1 += prli1->saAttr[0]; sText2 += prli2->saAttr[0]; break; case 1: // »çÀÌÁî Á¤·Ä if (!prli1->bFolder && prli2->bFolder) return -1 * (-plist->m_nSortDirect); if (prli1->bFolder) return 1 * (-plist->m_nSortDirect); if (prli1->bFolder && prli2->bFolder) return 0; if (prli1->nSize > prli2->nSize) return 1 * (-plist->m_nSortDirect); if (prli1->nSize < prli2->nSize) return -1 * (-plist->m_nSortDirect); if (prli1->nSize == prli2->nSize) return 0; break; case 2: // Á¾·ù sText1 += prli1->saAttr[2]; sText2 += prli2->saAttr[2]; break; case 3: // ³¯Â¥ sText1 += prli1->saAttr[plist->m_nSortColumn]; sText2 += prli2->saAttr[plist->m_nSortColumn]; break; default: sText1 += prli1->saAttr[plist->m_nSortColumn] + prli1->saAttr[0]; sText2 += prli2->saAttr[plist->m_nSortColumn] + prli2->saAttr[0]; break; } return (KrCompare(sText1, sText2) * (-plist->m_nSortDirect)); } void CRemoteListCtrl::OnListViewDiststatus() { CString sPath; CMainFrame* pmf = (CMainFrame*)AfxGetMainWnd(); CRemoteTreeCtrl *ptree = pmf->m_pRemoteView->GetTreeCtrl(); HTREEITEM htiSelected = ptree->GetSelectedItem(); CString sBasePath = ptree->GetPath(htiSelected) + "/"; PRLISTITEM_STRUCT prli = (PRLISTITEM_STRUCT)GetItemData(m_iSelectedItem); //HTREEITEM htiVolume = bUseSelected ? ptree->GetVolumeItem(ptree->GetSelectedItem()) :m_htiDragTarget; HTREEITEM htiVolume = ptree->GetVolumeItem(ptree->GetSelectedItem()); PRTREEITEM_STRUCT prtiVolume = (PRTREEITEM_STRUCT)ptree->GetItemData(htiVolume); CString sCp = ptree->GetItemText(htiVolume); CString sUser = pmf->m_sUserId; CString sPasswd = pmf->m_sPassword; if(prli) { sPath = sBasePath + prli->sName; if (prli->bFolder) { HCOMMLIB t_hcl = (HCOMMLIB)pmf->m_mapHcl[htiVolume]; PCOMMLIB_STRUCT t_pcl = (PCOMMLIB_STRUCT)t_hcl; CDistInfoDlg dlg; dlg.m_dist_path = sPath; dlg.m_cp = sCp; dlg.m_user = sUser; dlg.m_passwd = sPasswd; dlg.m_RCTSAddress = t_pcl->sDomain2.c_str(); dlg.DoModal(); } else { CWebDlg* pdlg; pdlg = new CWebDlg(); pdlg->Create(IDD_WEB_DLG,GetDesktopWindow( )); pdlg->ShowWindow(TRUE); pdlg->GetPage(::MAN_DISTINFO,sCp,sUser,sPath); } } else return; } void CRemoteListCtrl::OnListDistAgain() { POSITION pos = GetFirstSelectedItemPosition(); if (!pos) return; CRemoteTreeCtrl* ptree = ((CRemoteView*)GetParent())->GetTreeCtrl(); // HTREEITEM hti = ptree->GetSelectedItem(); HTREEITEM htiVolume = ptree->GetVolumeItem(ptree->GetSelectedItem()); HTREEITEM htiFolder = ptree->GetSelectedItem(); if (htiVolume == ptree->GetRootItem()) return; CString sPath = ptree->GetPath(htiFolder); CMainFrame *pmf = (CMainFrame *)AfxGetMainWnd(); CArray* pArrDac = new CArray(); while (pos) { int iItem = GetNextSelectedItem(pos); CString file_name = sPath + "/" + GetItemText(iItem, 0); PRLISTITEM_STRUCT prli = (PRLISTITEM_STRUCT)GetItemData(iItem); tsvc_da_contents_t* pDac = new tsvc_da_contents_t; pDac->bFolder = prli->bFolder; strncpy(pDac->file_name , file_name , MAX_SIZE_OF_URI); pArrDac->Add(pDac); } if (pArrDac->GetCount()>0) { CNoticeTrans dlg(pArrDac); HCOMMLIB t_hcl = (HCOMMLIB)pmf->m_mapHcl[htiVolume]; PCOMMLIB_STRUCT t_pcl = (PCOMMLIB_STRUCT)t_hcl; CString szTransGuid; pmf->GetNewGUID(szTransGuid); dlg.m_cp = ptree->GetItemText(htiVolume); dlg.m_user = pmf->m_sUserId; dlg.m_passwd = pmf->m_sPassword; dlg.m_RCTSAddress = t_pcl->sDomain2.c_str(); dlg.m_sp_tid_str = szTransGuid; dlg.DoModal(); for (int i=0; i < pArrDac->GetCount(); i++) delete pArrDac->GetAt(i); } delete pArrDac; #if 0 CString sPath; CMainFrame* pmf = (CMainFrame*)AfxGetMainWnd(); CRemoteTreeCtrl *ptree = pmf->m_pRemoteView->GetTreeCtrl(); HTREEITEM htiSelected = ptree->GetSelectedItem(); CString sBasePath = ptree->GetPath(htiSelected) + "/"; PRLISTITEM_STRUCT prli = (PRLISTITEM_STRUCT)GetItemData(m_iSelectedItem); //HTREEITEM htiVolume = bUseSelected ? ptree->GetVolumeItem(ptree->GetSelectedItem()) :m_htiDragTarget; HTREEITEM htiVolume = ptree->GetVolumeItem(ptree->GetSelectedItem()); PRTREEITEM_STRUCT prtiVolume = (PRTREEITEM_STRUCT)ptree->GetItemData(htiVolume); CString sCp = ptree->GetItemText(htiVolume); CString sUser = pmf->m_sUserId; CString sPasswd = pmf->m_sPassword; if(prli) { sPath = sBasePath + prli->sName; if (prli->bFolder) { /* HCOMMLIB t_hcl = (HCOMMLIB)pmf->m_mapHcl[htiVolume]; PCOMMLIB_STRUCT t_pcl = (PCOMMLIB_STRUCT)t_hcl; CDistInfoDlg dlg; dlg.m_dist_path = sPath; dlg.m_cp = sCp; dlg.m_user = sUser; dlg.m_passwd = sPasswd; dlg.m_RCTSAddress = t_pcl->sDomain2.c_str(); dlg.DoModal(); */ } else { PTRANPARAM_STRUCT ptp = new TRANPARAM_STRUCT; //ptp->szRCTSAddress; // CNoticeTrans dlg(ptp , sPath); // dlg.DoModal(); } } else return; #endif }