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

Ftp客户端

开发平台:

Visual C++

  1. // DownloadFileView.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 "QuickFTP.h"
  13. #include "DownloadFileView.h"
  14. #ifdef _DEBUG
  15. #define new DEBUG_NEW
  16. #undef THIS_FILE
  17. static char THIS_FILE[] = __FILE__;
  18. #endif
  19. /////////////////////////////////////////////////////////////////////////////
  20. // CDownloadFileView
  21. IMPLEMENT_DYNCREATE(CDownloadFileView, CView)
  22. CDownloadFileView::CDownloadFileView()
  23. {
  24. m_pFileQueueHead = NULL ;
  25. m_pFileQueue = NULL ;
  26. }
  27. CDownloadFileView::~CDownloadFileView()
  28. {
  29. }
  30. BEGIN_MESSAGE_MAP(CDownloadFileView, CView)
  31. //{{AFX_MSG_MAP(CDownloadFileView)
  32. ON_WM_SIZE()
  33. ON_WM_CREATE()
  34. ON_COMMAND(IDR_QUEUE_RUN, OnQueueRun)
  35. ON_COMMAND(IDR_QUEUE_STOP, OnQueueStop)
  36. ON_COMMAND(ID_SELECT_ALL, OnSelectAll)
  37. //}}AFX_MSG_MAP
  38. END_MESSAGE_MAP()
  39. /////////////////////////////////////////////////////////////////////////////
  40. // CDownloadFileView drawing
  41. void CDownloadFileView::OnDraw(CDC* pDC)
  42. {
  43. CQuickFTPDoc* pDoc = GetDocument();
  44. ASSERT_VALID(pDoc);
  45. // TODO: add draw code here
  46. }
  47. /////////////////////////////////////////////////////////////////////////////
  48. // CDownloadFileView diagnostics
  49. #ifdef _DEBUG
  50. void CDownloadFileView::AssertValid() const
  51. {
  52. CView::AssertValid();
  53. }
  54. void CDownloadFileView::Dump(CDumpContext& dc) const
  55. {
  56. CView::Dump(dc);
  57. }
  58. #endif //_DEBUG
  59. CQuickFTPDoc* CDownloadFileView::GetDocument() // non-debug version is inline
  60. {
  61. ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CQuickFTPDoc)));
  62. return (CQuickFTPDoc*)m_pDocument;
  63. }
  64. /////////////////////////////////////////////////////////////////////////////
  65. // CDownloadFileView message handlers
  66. void CDownloadFileView::OnInitialUpdate() 
  67. {
  68. CView::OnInitialUpdate();
  69. // TODO: Add your specialized code here and/or call the base class
  70. }
  71. BOOL CDownloadFileView::InitList()
  72. {
  73. RefreshList( ) ;
  74. return true ;
  75. }
  76. void CDownloadFileView::OnSize(UINT nType, int cx, int cy) 
  77. {
  78. CView::OnSize(nType, cx, cy);
  79. // TODO: Add your message handler code here
  80. RECT rect ;
  81. if( m_ListCtrl.m_hWnd != NULL )
  82. {
  83. GetClientRect( &rect ) ;
  84. m_ListCtrl.MoveWindow( &rect , true ) ;
  85. }
  86. }
  87. void CDownloadFileView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint) 
  88. {
  89. // TODO: Add your specialized code here and/or call the base class
  90. //get document .
  91. CQuickFTPDoc* pDoc = GetDocument();
  92. ASSERT_VALID(pDoc);
  93. //the file queue change.
  94. m_pFileQueue = pDoc->m_pFileQueue ;
  95. }
  96. /****************************************************
  97. ** @Description
  98. ** Refresh the job list.
  99. **
  100. ** @Parameter
  101. ** void
  102. **
  103. ** @Return:
  104. ** @Author: Table.JHM.太子
  105. ** e-mail: tablejiang@21cn.com
  106. ** @Date: 2001 3 26
  107. ****************************************************/
  108. BOOL CDownloadFileView::RefreshList()
  109. {
  110. //we must delete previous item .
  111. if( m_ListCtrl.m_hWnd != NULL )
  112. m_ListCtrl.DeleteAllItems( ) ;
  113. //if no file queue return  .
  114. if( m_pFileQueue == NULL ) 
  115. return true ;
  116. //if no item ,return 
  117. m_pFileQueueHead = m_pFileQueue->m_pFileTransmitQueue ;
  118. if( m_pFileQueueHead == NULL )
  119. return true ;
  120. // add item .
  121. FTPFILEINFO* pCur ;
  122. int iItem = 0 ;
  123. pCur = m_pFileQueueHead  ;
  124. while( pCur != NULL )
  125. {
  126. m_ListCtrl.AddItem( pCur , iItem ) ;
  127. iItem ++ ;
  128. pCur = pCur->pNext ;
  129. }
  130. return true ;
  131. }
  132. LRESULT CDownloadFileView::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
  133. {
  134. // TODO: Add your specialized code here and/or call the base class
  135. switch( message )
  136. {
  137. case REFRESH_WND_MSG :
  138. {
  139. //refresh
  140. RefreshList( )  ;
  141. }
  142. break ;
  143. case JOBLIST_KEYDOWN_MSG :
  144. {
  145. switch( wParam )
  146. {
  147. case VK_DELETE :
  148. //delete item.
  149. DeleteSelectItem( ) ;
  150. break ;
  151. default :
  152. break ;
  153. }
  154. }
  155. break ;
  156. case JOBLIST_RBTN_UP_MSG :
  157. {
  158. POINT point ;
  159. //get cursort position.
  160. GetCursorPos( &point ) ;
  161. CMenu PopMenu ;
  162. PopMenu.LoadMenu( IDR_MAINFRAME ) ;
  163. CMenu *pPopMenu = PopMenu.GetSubMenu( 4 ) ;
  164. pPopMenu->TrackPopupMenu( TPM_LEFTALIGN | TPM_RIGHTBUTTON , point.x , point.y , this ) ;
  165. PopMenu.DestroyMenu() ;
  166. }
  167. break ;
  168. default :
  169. break ;
  170. }
  171. return CView::DefWindowProc(message, wParam, lParam);
  172. }
  173. int CDownloadFileView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
  174. {
  175. if (CView::OnCreate(lpCreateStruct) == -1)
  176. return -1;
  177. // TODO: Add your specialized creation code here
  178. RECT rect ;
  179. GetClientRect( &rect ) ;
  180. //create list.
  181. m_ListCtrl.Create( WS_CHILD|WS_VISIBLE|LVS_REPORT, 
  182. rect , this , IDC_DOWNJOBLIST ) ;
  183. //set full select.
  184. m_ListCtrl.SetRowFullSelect( ) ;
  185. m_ListCtrl.SetParentWnd( m_hWnd ) ;
  186. InitList( ) ;
  187. return 0;
  188. }
  189. /****************************************************
  190. ** @Description
  191. ** set transmit file queue .
  192. **
  193. ** @Parameter
  194. **
  195. **
  196. ** @Return:
  197. ** @Author: Table.JHM.太子
  198. ** e-mail: tablejiang@21cn.com
  199. ** @Date: 2001 3 26
  200. ****************************************************/
  201. BOOL CDownloadFileView::SetFileQueue(CFileQueue *pQueue)
  202. {
  203. m_pFileQueue = pQueue ;
  204. m_pFileQueue->m_hParentWnd = m_hWnd ;
  205. RefreshList( ) ;
  206. return true ;
  207. }
  208. /****************************************************
  209. ** @Description
  210. ** Delete the select task .
  211. **
  212. ** @Parameter
  213. ** void
  214. **
  215. ** @Return: success return true ,else false .
  216. ** @Author: Table.JHM.太子
  217. ** e-mail: tablejiang@21cn.com
  218. ** @Date: 2001 3 26
  219. ****************************************************/
  220. BOOL CDownloadFileView::DeleteSelectItem()
  221. {
  222. FTPFILEINFO FtpFile ;
  223. UINT iSelectCount = m_ListCtrl.GetSelectedCount( ) ;
  224. if( iSelectCount <= 0 )
  225. return true ;
  226. int iItem  = -1 ;
  227. for( UINT i= 0 ; i < iSelectCount ; i ++ )
  228. {
  229. iItem = m_ListCtrl.GetNextItem( iItem , LVNI_SELECTED ) ;
  230. m_ListCtrl.GetItemInfo( iItem , &FtpFile ) ;
  231. m_pFileQueue->DeleteItem( &FtpFile ) ;
  232. }
  233. RefreshList( ) ;
  234. return true ;
  235. }
  236. /****************************************************
  237. ** @Description
  238. ** set select task status .
  239. **
  240. ** @Parameter
  241. **
  242. **
  243. ** @Return:
  244. ** @Author: Table.JHM.太子
  245. ** e-mail: tablejiang@21cn.com
  246. ** @Date: 2001 3 26
  247. ****************************************************/
  248. BOOL CDownloadFileView::SetSelectItemStatus(int iState)
  249. {
  250. FTPFILEINFO FtpFile ;
  251. UINT iSelectCount = m_ListCtrl.GetSelectedCount( ) ;
  252. if( iSelectCount <= 0 )
  253. return true ;
  254. int iItem  = -1 ;
  255. for( UINT i= 0 ; i < iSelectCount ; i ++ )
  256. {
  257. iItem = m_ListCtrl.GetNextItem( iItem , LVNI_SELECTED ) ;
  258. m_ListCtrl.GetItemInfo( iItem , &FtpFile ) ;
  259. //if want stop the item .
  260. if( iState == FILE_STATE_STOP )
  261. {
  262. if( FtpFile.state == FILE_STATE_RUNNING )
  263. {
  264. m_pFtp->StopNowCommand( ) ;
  265. }
  266. }
  267. m_pFileQueue->SetItemState( iState , &FtpFile ) ;
  268. }
  269. RefreshList( ) ;
  270. return true ;
  271. }
  272. void CDownloadFileView::OnQueueRun() 
  273. {
  274. // TODO: Add your command handler code here
  275. SetSelectItemStatus( FILE_STATE_READY ) ;
  276. m_pFtp->RunJobList( ) ;
  277. }
  278. void CDownloadFileView::OnQueueStop() 
  279. {
  280. // TODO: Add your command handler code here
  281. m_pFtp->SetStopSign( false ) ;
  282. SetSelectItemStatus( FILE_STATE_STOP ) ;
  283. }
  284. void CDownloadFileView::OnSelectAll() 
  285. {
  286. // TODO: Add your command handler code here
  287. m_ListCtrl.SelectAllItem( ) ;
  288. }