DirListView.cpp
上传用户:tjfeida
上传日期:2013-03-10
资源大小:1917k
文件大小:20k
源码类别:

Ftp客户端

开发平台:

Visual C++

  1. // DirListView.cpp : implementation file
  2. //
  3. /*********************************************
  4. **该文件是属于WolfFTP工程中的。如果有什么问题
  5. **请联系
  6. **         tablejiang@21cn.com
  7. **或者访问
  8. **         http://wolfftp.51.net
  9. **以得到最新的支持。
  10. *********************************************/
  11. #include "stdafx.h"
  12. #include "DirListView.h"
  13. #include "commctrl.h"
  14. #include "FtpDirList.h"
  15. #include "shlwapi.h"
  16.   
  17. #ifdef _DEBUG
  18. #define new DEBUG_NEW
  19. #undef THIS_FILE
  20. static char THIS_FILE[] = __FILE__;
  21. #endif
  22. /////////////////////////////////////////////////////////////////////////////
  23. // CDirListView
  24. IMPLEMENT_DYNCREATE(CDirListView, CView)
  25. CDirListView::CDirListView()
  26. {
  27. //init data .
  28. m_bDragging = false ;
  29. m_pDragImage = NULL ;
  30. }
  31. CDirListView::~CDirListView()
  32. {
  33. if(m_pDragImage)
  34. delete m_pDragImage;
  35. }
  36. BEGIN_MESSAGE_MAP(CDirListView, CView)
  37. //{{AFX_MSG_MAP(CDirListView)
  38. ON_WM_SIZE()
  39. ON_WM_MOUSEMOVE()
  40. ON_WM_LBUTTONUP()
  41. ON_WM_CREATE()
  42. ON_COMMAND(IDR_LOCAL_DELETE, OnLocalDelete)
  43. ON_COMMAND(IDR_LOCAL_DOWNLOAD, OnLocalDownload)
  44. ON_COMMAND(IDR_LOCAL_REFRESH, OnLocalRefresh)
  45. ON_COMMAND(IDR_LOCAL_UPLOAD, OnLocalUpload)
  46. ON_WM_RBUTTONDOWN()
  47. ON_COMMAND(ID_SELECT_ALL, OnSelectAll)
  48. //}}AFX_MSG_MAP
  49. ON_NOTIFY (LVN_BEGINDRAG, IDC_LISTCTRL1 , OnBeginDrag)
  50. END_MESSAGE_MAP()
  51. /////////////////////////////////////////////////////////////////////////////
  52. // CDirListView drawing
  53. void CDirListView::OnDraw(CDC* pDC)
  54. {
  55. CQuickFTPDoc* pDoc = GetDocument();
  56. ASSERT_VALID(pDoc);
  57. // TODO: add draw code here
  58. }
  59. /////////////////////////////////////////////////////////////////////////////
  60. // CDirListView diagnostics
  61. #ifdef _DEBUG
  62. void CDirListView::AssertValid() const
  63. {
  64. CView::AssertValid();
  65. }
  66. void CDirListView::Dump(CDumpContext& dc) const
  67. {
  68. CView::Dump(dc);
  69. }
  70. #endif //_DEBUG
  71. CQuickFTPDoc* CDirListView::GetDocument() // non-debug version is inline
  72. {
  73. ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CQuickFTPDoc)));
  74. return (CQuickFTPDoc*)m_pDocument;
  75. }
  76. /////////////////////////////////////////////////////////////////////////////
  77. // CDirListView message handlers
  78. void CDirListView::OnInitialUpdate() 
  79. {
  80. CView::OnInitialUpdate();
  81. // TODO: Add your specialized code here and/or call the base class
  82. }
  83. void CDirListView::OnSize(UINT nType, int cx, int cy) 
  84. {
  85. CView::OnSize(nType, cx, cy);
  86. // TODO: Add your message handler code here
  87. //when the window size change ,we must change the 
  88. //sub item pos and size too.
  89. RECT rect ;
  90. if( m_Combo.m_hWnd != NULL )
  91. {
  92. GetClientRect( &rect ) ;
  93. rect.right -= 26 ;
  94. rect.bottom  = 150  ;
  95. m_Combo.MoveWindow( &rect , TRUE ) ;
  96. }
  97. if( m_ListCtrl.m_hWnd != NULL )
  98. {
  99. GetClientRect( &rect ) ;
  100. rect.top += 23 ;
  101. m_ListCtrl.MoveWindow( &rect , TRUE ) ;
  102. }
  103. GetClientRect( &rect ) ;
  104. rect.left = rect.right - 26;
  105. rect.bottom = rect.top + 20 ;
  106. m_UpButton.MoveWindow( &rect , TRUE ) ;
  107. m_UpButton.SizeToContent( ) ;
  108. }
  109. LRESULT CDirListView::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
  110. {
  111. // TODO: Add your specialized code here and/or call the base class
  112. switch( message )
  113. {
  114. case WM_COMMAND :
  115. //control message .
  116. HandleCommand( (int)(LOWORD( wParam )) , (HWND)lParam , (UINT)(HIWORD(wParam)) ) ;
  117. break ;
  118. case LIST_CUR_DIR_CHANGED_MSG:
  119. {
  120. //this message is change the current directory .
  121. CQuickFTPDoc* pDoc = GetDocument();
  122. ASSERT_VALID(pDoc);
  123. if( pDoc== NULL)
  124. break ;
  125. strcpy( pDoc->m_szLocalPath , (LPCTSTR)m_ListCtrl.GetNowListPath() ) ;
  126. m_Combo.SetDisplayStr( m_ListCtrl.GetNowListPath() ) ;
  127. }
  128. break ;
  129. case REFRESH_WND_MSG :
  130. {
  131. //this message is want refresh current window .
  132. m_ListCtrl.DisplayPath( m_ListCtrl.GetNowListPath() ) ;
  133. //m_Combo.SetDisplayStr( m_ListCtrl.GetNowListPath() ) ;
  134. }
  135. break ;
  136. case DIR_LIST_RCLK_MSG :
  137. {
  138. //pop the menu .
  139. POINT point ;
  140. //get mouse position .
  141. GetCursorPos( &point ) ;
  142. CMenu PopMenu ;
  143. PopMenu.LoadMenu( IDR_MAINFRAME ) ;
  144. //get sub menu
  145. CMenu *pPopMenu = PopMenu.GetSubMenu( 1 ) ;
  146. //disable some menu item .
  147. pPopMenu->EnableMenuItem( IDR_LOCAL_DOWNLOAD , MF_DISABLED | MF_GRAYED) ;
  148. //display menu
  149. pPopMenu->TrackPopupMenu( TPM_LEFTALIGN | TPM_RIGHTBUTTON , point.x , point.y , this ) ;
  150. PopMenu.DestroyMenu() ;
  151. }
  152. break ;
  153. default :
  154. break ;
  155. }
  156. return CView::DefWindowProc(message, wParam, lParam);
  157. }
  158. /****************************************************
  159. ** @Description
  160. ** This function is used for deal the control message .
  161. **
  162. ** @Parameter
  163. **
  164. **
  165. ** @Return:
  166. ** @Author: Table.JHM.太子
  167. ** e-mail: tablejiang@21cn.com
  168. ** @Date: 2001 3 26
  169. ****************************************************/
  170. void CDirListView::HandleCommand(int id, HWND hCtrlWnd, UINT uEvent)
  171. {
  172. CString strPath ;
  173. switch( id )
  174. {
  175. case IDC_COMBO1:
  176. {
  177. switch( uEvent )
  178. {
  179. case CBN_SELCHANGE :
  180. //display the changed path .
  181. strPath = m_Combo.GetNowPath( ) ;
  182. m_Combo.SetDisplayStr( strPath ) ;
  183. m_ListCtrl.DisplayPath( strPath ) ;
  184. break ;
  185. default :
  186. break ;
  187. }
  188. break ;
  189. }
  190. case IDC_BACKBUTTON :
  191. {
  192. switch( uEvent )
  193. {
  194. case BN_CLICKED:
  195. m_ListCtrl.UpDirectory() ;
  196. break ;
  197. default :
  198. break ;
  199. }
  200. }
  201. default:
  202. break ;
  203. }
  204. }
  205. void CDirListView::OnBeginDrag (NMHDR* pnmhdr, LRESULT* pResult)
  206. {
  207. // save the index of the item being dragged in m_nDragIndex
  208. m_nDragIndex = ((NM_LISTVIEW *)pnmhdr)->iItem;
  209. POINT pt;
  210. pt.x = 8;
  211. pt.y = 8;
  212. // Added 2001 3 38
  213. if(m_pDragImage)
  214. delete m_pDragImage;
  215. // create a drag image
  216. m_pDragImage = m_ListCtrl.CreateDragImage (m_nDragIndex, &pt);
  217. ASSERT (m_pDragImage);
  218. // changes the cursor to the drag image (DragMove() is still required in 
  219. // OnMouseMove())
  220. VERIFY (m_pDragImage->BeginDrag ( 0 , CPoint (8, 8)));
  221. VERIFY (m_pDragImage->DragEnter (GetDesktopWindow (), ((NM_LISTVIEW *)pnmhdr)->ptAction));
  222. // set dragging flag
  223. m_bDragging = TRUE;
  224. m_hDropItem = NULL;
  225. m_nDropIndex = -1;
  226. m_pDropWnd = &m_ListCtrl ;
  227. // capture all mouse messages
  228. SetCapture ();
  229. }
  230. void CDirListView::OnMouseMove(UINT nFlags, CPoint point) 
  231. {
  232. // TODO: Add your message handler code here and/or call default
  233. if (m_bDragging)
  234. {
  235. CPoint pt (point);
  236. ClientToScreen (&pt);
  237. // move the drag image
  238. VERIFY (m_pDragImage->DragMove (pt));
  239. // unlock window updates
  240. VERIFY (m_pDragImage->DragShowNolock (FALSE));
  241. CWnd* pDropWnd = WindowFromPoint (pt);
  242. // get the CWnd pointer of the window that is under the mouse cursor
  243. ASSERT (pDropWnd);
  244. // if we drag outside current window
  245. if (pDropWnd != m_pDropWnd)
  246. {
  247. // turn off hilight for drop target in list control
  248. if (m_nDropIndex != -1)
  249. {
  250. CListCtrl* pList = (CListCtrl*)m_pDropWnd;
  251. VERIFY (pList->SetItemState (m_nDropIndex, 0, LVIS_DROPHILITED));
  252. // redraw item
  253. VERIFY (pList->RedrawItems (m_nDropIndex, m_nDropIndex));
  254. pList->UpdateWindow ();
  255. m_nDropIndex = -1;
  256. }
  257. }
  258. // save current window pointer
  259. m_pDropWnd = pDropWnd;
  260. // convert from screen coordinates to drop target client coordinates
  261. pDropWnd->ScreenToClient (&pt);
  262. // if window is CListCtrl
  263. if (pDropWnd->IsKindOf (RUNTIME_CLASS (CListCtrl)))
  264. {
  265. UINT uFlags;
  266. CListCtrl* pList = (CListCtrl*)pDropWnd;
  267. // turn off hilight for previous drop target
  268. pList->SetItemState (m_nDropIndex, 0, LVIS_DROPHILITED);
  269. // redraw previous item
  270. pList->RedrawItems (m_nDropIndex, m_nDropIndex);
  271. // get the item that is below cursor
  272. m_nDropIndex = ((CListCtrl*)pDropWnd)->HitTest (pt, &uFlags);
  273. if( m_nDropIndex != -1 )
  274. {
  275. if( pDropWnd == &m_ListCtrl )
  276. {
  277. if( !CheckThePointPos( m_nDropIndex ) )
  278. DestroyCursor( ::SetCursor( LoadCursor( NULL , IDC_NO ) ) ) ;
  279. else
  280. DestroyCursor( ::SetCursor( LoadCursor( NULL , IDC_ARROW ) ) ) ;
  281. // highlight it
  282. pList->SetItemState (m_nDropIndex, LVIS_DROPHILITED, LVIS_DROPHILITED);
  283. // redraw item
  284. pList->RedrawItems (m_nDropIndex, m_nDropIndex);
  285. }
  286. else
  287. {
  288. DestroyCursor( ::SetCursor( LoadCursor( NULL , IDC_ARROW ) ) ) ;
  289. }
  290. //update the change.
  291. pList->UpdateWindow ();
  292. }
  293. else
  294. {
  295. //is in list?
  296. if( pDropWnd != &m_ListCtrl )
  297. {
  298. DestroyCursor( ::SetCursor( LoadCursor( NULL , IDC_ARROW ) ) ) ;
  299. }
  300. else
  301. DestroyCursor( ::SetCursor( LoadCursor( NULL , IDC_NO ) ) ) ;
  302. }
  303. }
  304. else
  305. {
  306. // is in Genius dlg ?
  307. if( pDropWnd->m_hWnd == m_ListInfo.hGenius )
  308. {
  309. DestroyCursor( ::SetCursor( LoadCursor( NULL , IDC_ARROW ) ) ) ;
  310. }
  311. else
  312. {
  313. DestroyCursor( ::SetCursor( LoadCursor( NULL , IDC_NO ) ) ) ;
  314. }
  315. }
  316. // lock window updates
  317. VERIFY (m_pDragImage->DragShowNolock (TRUE));
  318. }
  319. CView::OnMouseMove(nFlags, point);
  320. }
  321. void CDirListView::OnLButtonUp(UINT nFlags, CPoint point) 
  322. {
  323. // TODO: Add your message handler code here and/or call default
  324. if (m_bDragging)
  325. {
  326. // release mouse capture
  327. VERIFY (::ReleaseCapture ());
  328. m_bDragging = FALSE;
  329. // end dragging
  330. VERIFY (m_pDragImage->DragLeave (GetDesktopWindow ()));
  331. m_pDragImage->EndDrag ();
  332. CPoint pt (point);
  333. ClientToScreen (&pt);
  334. // get the CWnd pointer of the window that is under the mouse cursor
  335. CWnd* pDropWnd = WindowFromPoint (pt);
  336. ASSERT (pDropWnd);
  337. // if window is CListCtrl
  338. if (pDropWnd->IsKindOf ( RUNTIME_CLASS ( CListCtrl ) ) )
  339. {
  340. //is back job listctrl?
  341. if( pDropWnd->m_hWnd != m_ListInfo.hBkJobList )
  342. {
  343. CListCtrl* pListWnd = ( CListCtrl*)pDropWnd ;
  344. pListWnd->SetItemState (m_nDropIndex, 0, LVIS_DROPHILITED);
  345. pListWnd->RedrawItems (m_nDropIndex, m_nDropIndex);
  346. //up load .
  347. DropItemOnList( (CListCtrl*)pDropWnd );
  348. }
  349. else
  350. {
  351. //add item to background transmit queue .
  352. AddSelectItemToBkTransmitQueue( ) ;
  353. }
  354. }
  355. else
  356. { //is in genius dlg ?
  357. if( pDropWnd->m_hWnd == m_ListInfo.hGenius )
  358. {
  359. ::PostMessage( m_ListInfo.hGenius , GENIUS_WND_SPLIT_MSG , 0 , 0 ) ;
  360. AddSelectItemToBkTransmitQueue( ) ;
  361. }
  362. }
  363. }
  364. CView::OnLButtonUp(nFlags, point);
  365. }
  366. /****************************************************
  367. ** @Description
  368. ** The drop on listctrl .
  369. **
  370. ** @Parameter
  371. ** CListCtrl* pDropWnd :the drop destination .
  372. **
  373. ** @Return: success return true ,else return false 
  374. ** @Author: Table.JHM.太子
  375. ** e-mail: tablejiang@21cn.com
  376. ** @Date: 2001 3 26
  377. ****************************************************/
  378. BOOL CDirListView::DropItemOnList(CListCtrl *pDropWnd)
  379. {
  380. //is in own listctrl?
  381. if( pDropWnd != &m_ListCtrl )
  382. {
  383. //if not , upload the select item .
  384. if( m_pFtp->IsConnect () )
  385. UploadSelectItem( NULL ) ;
  386. }
  387. else
  388. {
  389. //if yes .move the specify files .
  390. CDirListCtrl* pList = (CDirListCtrl*)pDropWnd ;
  391. if( CheckThePointPos( m_nDropIndex ) )
  392. {
  393. //the destination is a file or directory ?
  394. LVITEM lci ;
  395. char szText[MAX_PATH] ;
  396. char szPath[MAX_PATH] ;
  397. szText[0] = 0 ;
  398. memset( &lci , 0 , sizeof( LVITEM ) ) ;
  399. lci.mask = LVIF_TEXT | LVIF_STATE ;
  400. lci.pszText = szText ;
  401. lci.cchTextMax = MAX_PATH ;
  402. lci.iItem = m_nDropIndex ;
  403. lci.iSubItem = 0 ;
  404. lci.stateMask = LVIS_SELECTED ;
  405. //get select item ,and make it to full path .
  406. if( !m_ListCtrl.GetItem( &lci ) )
  407. return false ;
  408. strcpy( szPath , m_ListCtrl.GetNowListPath() ) ;
  409. strcat( szPath , lci.pszText ) ;
  410. //move item .
  411. pList->MoveSelectFile( szPath ) ;
  412. }
  413. }
  414. return true ;
  415. }
  416. /****************************************************
  417. ** @Description
  418. ** Upload the all selected items to ftp server .
  419. **
  420. ** @Parameter
  421. ** LPCTSTR szRemotePath : the specify RemotePath , 
  422. if the path is NULL , get the cur path.
  423. **
  424. ** @Return: success return true , else false .
  425. ** @Author: Table.JHM.太子
  426. ** e-mail: tablejiang@21cn.com
  427. ** @Date: 2001 3 26
  428. ****************************************************/
  429. BOOL CDirListView::UploadSelectItem( LPCTSTR szRemotePath )
  430. {
  431. UINT i, uSelectedCount = m_ListCtrl.GetSelectedCount();
  432. int  nItem = -1;
  433. if( !m_pFtp->IsConnect() )
  434. return false ;
  435. // upload all of the selected items.
  436. if (uSelectedCount > 0)
  437. {
  438. for (i=0;i < uSelectedCount;i++)
  439. {
  440. nItem = m_ListCtrl.GetNextItem(nItem, LVNI_SELECTED);
  441. ASSERT(nItem != -1);
  442. char szText[MAX_PATH] ;
  443. szText[0] = 0 ;
  444. m_ListCtrl.GetItemText( nItem , 0 , szText , MAX_PATH ) ;
  445. //up load.
  446. UploadFile( szText , NULL , nItem ) ;
  447. }
  448. }
  449. return true ;
  450. }
  451. /****************************************************
  452. ** @Description
  453. ** Upload a single file or directory to ftp server.
  454. **
  455. ** @Parameter
  456. ** LPCTSTR szName : the file name .
  457. LPCTSTR szRemotePath : the specify RemotePath , 
  458. if the path is NULL , get the cur path.
  459. int iSelItem : the item ,which be selected in list ctrl.
  460. **
  461. ** @Return: success return true ,else return false .
  462. ** @Author: Table.JHM.太子
  463. ** e-mail: tablejiang@21cn.com
  464. ** @Date: 2001 3 26
  465. ****************************************************/
  466. BOOL CDirListView::UploadFile( LPCTSTR szName , LPCTSTR szRemotePath , int iSelItem )
  467. {
  468. FTPFILEINFO FtpFile ;
  469. char szLocalPath[MAX_PATH] ;
  470. strcpy( szLocalPath , m_ListCtrl.GetNowListPath () ) ;
  471. ::ZeroMemory( &FtpFile , sizeof( FTPFILEINFO ) ) ;
  472. //get document .
  473. CQuickFTPDoc* pDoc = GetDocument();
  474. ASSERT_VALID(pDoc);
  475. //make site info.
  476. memcpy( &FtpFile.site , &m_pFtp->m_SiteInfo , sizeof( SITEINFO ) ) ;
  477. strcpy( FtpFile.remotefilename , szName ) ;
  478. if( szRemotePath == NULL )
  479. strcpy( FtpFile.remotepath , m_pFtp->m_CurrentFtpDirectory ) ;
  480. else
  481. strcpy( FtpFile.remotepath , szRemotePath ) ;
  482. //local info.
  483. strcpy( FtpFile.localfilename , szName ) ;
  484. strcpy( FtpFile.localpath , szLocalPath ) ;
  485. FtpFile.bfileput = true ;
  486. FtpFile.endpos = 0 ;
  487. FtpFile.startpos = 0 ;
  488. char szPathName[MAX_PATH] ;
  489. sprintf( szPathName , "%s%s" , FtpFile.localpath , FtpFile.localfilename );
  490. //is directory?
  491. if( PathIsDirectory( szPathName ) )
  492. FtpFile.bIsDirectory = true ;
  493. else
  494. FtpFile.bIsDirectory = false ;
  495. char szText[MAX_PATH] ;
  496. m_ListCtrl.GetItemText( iSelItem , 1 , szText , MAX_PATH ) ;
  497. FtpFile.filesize = _atoi64( szText ) ;
  498. m_ListCtrl.GetItemText( iSelItem , 3 , szText , MAX_PATH ) ;
  499. strcpy( FtpFile.filetime , szText ) ;
  500. //put get file.
  501. m_pFtp->PutGetFileToServer( &FtpFile ) ;
  502. pDoc->m_pFileQueue = &( m_pFtp->m_FileQueue );
  503. pDoc->UpdateAllViews( this ) ;
  504. return true ;
  505. }
  506. /****************************************************
  507. ** @Description
  508. ** the function is used for check the cursor pos .
  509. **
  510. ** @Parameter
  511. **
  512. **
  513. ** @Return: if the item be select or is file return false ,
  514. ** else return true .
  515. ** @Author: Table.JHM.太子
  516. ** e-mail: tablejiang@21cn.com
  517. ** @Date: 2001 3 26
  518. ****************************************************/
  519. BOOL CDirListView::CheckThePointPos( int index )
  520. {
  521. LVITEM lci ;
  522. char szText[MAX_PATH] ;
  523. char szPath[MAX_PATH] ;
  524. szText[0] = 0 ;
  525. memset( &lci , 0 , sizeof( LVITEM ) ) ;
  526. lci.mask = LVIF_TEXT | LVIF_STATE ;
  527. lci.pszText = szText ;
  528. lci.cchTextMax = MAX_PATH ;
  529. lci.iItem = index ;
  530. lci.iSubItem = 0 ;
  531. lci.stateMask = LVIS_SELECTED ;
  532. if( !m_ListCtrl.GetItem( &lci ) )
  533. return false ;
  534. //is item selected ?
  535. if( ( lci.state && LVIS_SELECTED ) )
  536. return false ;
  537. strcpy( szPath , m_ListCtrl.GetNowListPath() ) ;
  538. strcat( szPath , lci.pszText ) ;
  539. //is file or path ?
  540. if( PathIsDirectory( szPath ) )
  541. return true ;
  542. else
  543. return false ;
  544. }
  545. int CDirListView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
  546. {
  547. if (CView::OnCreate(lpCreateStruct) == -1)
  548. return -1;
  549. // TODO: Add your specialized creation code here
  550. RECT rect ;
  551. GetClientRect( &rect ) ;
  552. //create combobox.
  553. rect.right -= 26 ;
  554. rect.bottom  = 150  ;
  555. m_Combo.Create( WS_CHILD | WS_VISIBLE |WS_VSCROLL | WS_TABSTOP | CBS_DROPDOWNLIST
  556. , rect , this , IDC_COMBO1 ) ;
  557. //create listctrl.
  558. GetClientRect( &rect ) ;
  559. rect.top += 23 ;
  560. m_ListCtrl.SetParentWnd( m_hWnd ) ;
  561. m_ListCtrl.Create( WS_CHILD|WS_VISIBLE|LVS_REPORT , 
  562. rect , this , IDC_LISTCTRL1 ) ;
  563. //create button.
  564. GetClientRect( &rect ) ;
  565. rect.left = rect.right -26  ;
  566. rect.bottom = rect.top + 20 ;
  567. m_UpButton.Create( NULL , WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON|BS_OWNERDRAW , 
  568. rect , this ,  IDC_BACKBUTTON  ) ;
  569. m_UpButton.LoadBitmaps( IDB_BITMAP_UP , IDB_BITMAP_DOWN , IDB_BITMAP_FOCUS , IDB_BITMAP_DISABLE ) ;
  570. m_UpButton.SizeToContent( ) ;
  571. //display init path .
  572. char CurPath[MAX_PATH] ;
  573. char driver[MAX_PATH] , path[MAX_PATH] , name[MAX_PATH] , ext[MAX_PATH] ;
  574. ::GetModuleFileName( NULL , CurPath , MAX_PATH ) ;
  575. _splitpath( CurPath , driver , path , name , ext ) ;
  576. _makepath( CurPath , driver , path , NULL , NULL ) ;
  577. m_ListCtrl.DisplayPath( CurPath ) ;
  578. m_Combo.SetDisplayStr( CurPath ) ;
  579. return 0;
  580. }
  581. /****************************************************
  582. ** @Description
  583. ** Add select item to back ground transmit queue.
  584. **
  585. ** @Parameter
  586. **
  587. **
  588. ** @Return:
  589. ** @Author: Table.JHM.太子
  590. ** e-mail: tablejiang@21cn.com
  591. ** @Date: 2001 3 26
  592. ****************************************************/
  593. BOOL CDirListView::AddSelectItemToBkTransmitQueue()
  594. {
  595. UINT i, uSelectedCount = m_ListCtrl.GetSelectedCount();
  596. int  nItem = -1;
  597. if( !m_pFtp->IsConnect() )
  598. return false ;
  599. // add all of the selected items.
  600. if (uSelectedCount > 0)
  601. {
  602. for (i=0;i < uSelectedCount;i++)
  603. {
  604. nItem = m_ListCtrl.GetNextItem(nItem, LVNI_SELECTED);
  605. ASSERT(nItem != -1);
  606. char szText[MAX_PATH] ;
  607. szText[0] = 0 ;
  608. m_ListCtrl.GetItemText( nItem , 0 , szText , MAX_PATH ) ;
  609. AddItemToBkQueue( szText , NULL , nItem ) ;
  610. }
  611. }
  612. return true ;
  613. }
  614. /****************************************************
  615. ** @Description
  616. ** add a item to back ground transmit.
  617. **
  618. ** @Parameter
  619. **
  620. **
  621. ** @Return:
  622. ** @Author: Table.JHM.太子
  623. ** e-mail: tablejiang@21cn.com
  624. ** @Date: 2001 3 26
  625. ****************************************************/
  626. BOOL CDirListView::AddItemToBkQueue(LPSTR szName, LPCTSTR path, int iSelItem)
  627. {
  628. FTPFILEINFO FtpFile ;
  629. char szLocalPath[MAX_PATH] ;
  630. strcpy( szLocalPath , m_ListCtrl.GetNowListPath () ) ;
  631. ::ZeroMemory( &FtpFile , sizeof( FTPFILEINFO ) ) ;
  632. //get document .
  633. CQuickFTPDoc* pDoc = GetDocument();
  634. ASSERT_VALID(pDoc);
  635. memcpy( &FtpFile.site , &m_pFtp->m_SiteInfo , sizeof( SITEINFO ) ) ;
  636. strcpy( FtpFile.remotefilename , szName ) ;
  637. strcpy( FtpFile.remotepath , m_pFtp->m_CurrentFtpDirectory ) ;
  638. strcpy( FtpFile.localfilename , szName ) ;
  639. strcpy( FtpFile.localpath , szLocalPath ) ;
  640. FtpFile.bfileput = true ;
  641. FtpFile.endpos = 0 ;
  642. FtpFile.startpos = 0 ;
  643. char szPathName[MAX_PATH] ;
  644. sprintf( szPathName , "%s%s" , FtpFile.localpath , FtpFile.localfilename );
  645. if( PathIsDirectory( szPathName ) )
  646. FtpFile.bIsDirectory = true ;
  647. else
  648. FtpFile.bIsDirectory = false ;
  649. char szText[MAX_PATH] ;
  650. m_ListCtrl.GetItemText( iSelItem , 1 , szText , MAX_PATH ) ;
  651. FtpFile.filesize = _atoi64( szText ) ;
  652. m_ListCtrl.GetItemText( iSelItem , 3 , szText , MAX_PATH ) ;
  653. strcpy( FtpFile.filetime , szText ) ;
  654. m_pBkTransmitDlg->AddToBkQueue( &FtpFile ) ;
  655. return true ;
  656. }
  657. /****************************************************
  658. ** @Description
  659. **
  660. **
  661. ** @Parameter
  662. **
  663. **
  664. ** @Return:
  665. ** @Author: Table.JHM.太子
  666. ** e-mail: tablejiang@21cn.com
  667. ** @Date: 2001 3 26
  668. ****************************************************/
  669. BOOL CDirListView::RefreshCurDir()
  670. {
  671. m_ListCtrl.DisplayPath( m_ListCtrl.GetNowListPath() ) ;
  672. m_Combo.SetDisplayStr( m_ListCtrl.GetNowListPath() ) ;
  673. return true ;
  674. }
  675. void CDirListView::OnLocalDelete() 
  676. {
  677. // TODO: Add your command handler code here
  678. m_ListCtrl.DeleteSelectItem( ) ;
  679. }
  680. void CDirListView::OnLocalDownload() 
  681. {
  682. // TODO: Add your command handler code here
  683. }
  684. void CDirListView::OnLocalRefresh() 
  685. {
  686. // TODO: Add your command handler code here
  687. RefreshCurDir( ) ;
  688. }
  689. void CDirListView::OnLocalUpload() 
  690. {
  691. // TODO: Add your command handler code here
  692. UploadSelectItem( NULL ) ;
  693. }
  694. void CDirListView::OnRButtonDown(UINT nFlags, CPoint point) 
  695. {
  696. // TODO: Add your message handler code here and/or call default
  697. CView::OnRButtonDown(nFlags, point);
  698. }
  699. void CDirListView::OnSelectAll() 
  700. {
  701. // TODO: Add your command handler code here
  702. m_ListCtrl.SelectAllItem( ) ;
  703. }