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

Ftp客户端

开发平台:

Visual C++

  1. // SetDlgSelectSite.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 "SetDlgSelectSite.h"
  14. #ifdef _DEBUG
  15. #define new DEBUG_NEW
  16. #undef THIS_FILE
  17. static char THIS_FILE[] = __FILE__;
  18. #endif
  19. /////////////////////////////////////////////////////////////////////////////
  20. // CSetDlgSelectSite dialog
  21. CSetDlgSelectSite::CSetDlgSelectSite(CWnd* pParent /*=NULL*/)
  22. : CDialog(CSetDlgSelectSite::IDD, pParent)
  23. {
  24. //{{AFX_DATA_INIT(CSetDlgSelectSite)
  25. // NOTE: the ClassWizard will add member initialization here
  26. //}}AFX_DATA_INIT
  27. m_pSiteHead = NULL ;
  28. memset( &m_CurSelSite , 0 , sizeof( m_CurSelSite ) ) ;
  29. }
  30. void CSetDlgSelectSite::DoDataExchange(CDataExchange* pDX)
  31. {
  32. CDialog::DoDataExchange(pDX);
  33. //{{AFX_DATA_MAP(CSetDlgSelectSite)
  34. DDX_Control(pDX, IDC_LIST_SITE, m_SiteList);
  35. //}}AFX_DATA_MAP
  36. }
  37. BEGIN_MESSAGE_MAP(CSetDlgSelectSite, CDialog)
  38. //{{AFX_MSG_MAP(CSetDlgSelectSite)
  39. ON_BN_CLICKED(IDC_BUTTON_ADD_SITE, OnButtonAddSite)
  40. ON_BN_CLICKED(IDC_BUTTON_EDIT_SITE, OnButtonEditSite)
  41. ON_BN_CLICKED(IDC_BUTTON_DEL_SITE, OnButtonDelSite)
  42. ON_NOTIFY(NM_DBLCLK, IDC_LIST_SITE, OnDblclkListSite)
  43. //}}AFX_MSG_MAP
  44. END_MESSAGE_MAP()
  45. /////////////////////////////////////////////////////////////////////////////
  46. // CSetDlgSelectSite message handlers
  47. void CSetDlgSelectSite::OnOK() 
  48. {
  49. // TODO: Add extra validation here
  50. SaveSiteInfoToFile( ) ;
  51. GetCurSelSite() ;
  52. DeleteAllSite() ;
  53. CDialog::OnOK();
  54. }
  55. void CSetDlgSelectSite::OnCancel() 
  56. {
  57. // TODO: Add extra cleanup here
  58. SaveSiteInfoToFile( ) ;
  59. DeleteAllSite() ;
  60. CDialog::OnCancel();
  61. }
  62. void CSetDlgSelectSite::OnButtonAddSite() 
  63. {
  64. // TODO: Add your control notification handler code here
  65. CSetDlgInputSite sitedlg ;
  66. if( sitedlg.DoModal() == IDOK )
  67. {
  68. if( !AddSite( &sitedlg.m_SiteInfo ) )
  69. MessageBox( "Can't add site!" ) ;
  70. InitSiteList( ) ;
  71. }
  72. }
  73. void CSetDlgSelectSite::OnButtonEditSite() 
  74. {
  75. // TODO: Add your control notification handler code here
  76. int iCount = m_SiteList.GetSelectedCount();
  77. if( iCount > 1 || iCount <= 0)
  78. return ;
  79. int iCurSel = m_SiteList.GetNextItem( -1 , LVNI_SELECTED ) ;
  80. if( iCurSel == -1 )
  81. return ;
  82. CSetDlgInputSite sitedlg ;
  83. GetOneSite( iCurSel , &sitedlg.m_SiteInfo ) ;
  84. if( sitedlg.DoModal() == IDOK )
  85. {
  86. ReplaceOneSite( iCurSel , &sitedlg.m_SiteInfo ) ;
  87. InitSiteList( ) ;
  88. }
  89. }
  90. void CSetDlgSelectSite::OnButtonDelSite() 
  91. {
  92. // TODO: Add your control notification handler code here
  93. int iCount = m_SiteList.GetSelectedCount();
  94. if( iCount > 1 || iCount <= 0)
  95. return ;
  96. int iCurSel = m_SiteList.GetNextItem( -1 , LVNI_SELECTED ) ;
  97. if( iCurSel == -1 )
  98. return ;
  99. DeleteOneSite( iCurSel ) ;
  100. InitSiteList( ) ;
  101. }
  102. BOOL CSetDlgSelectSite::OnInitDialog() 
  103. {
  104. CDialog::OnInitDialog();
  105. // TODO: Add extra initialization here
  106. m_ImageList.Create(16, 16, ILC_COLOR8, 0, 4);
  107. HICON hIcon = AfxGetApp()->LoadIcon( IDR_MAINFRAME ) ;
  108. m_ImageList.Add( hIcon ) ;
  109. m_SiteList.SetImageList( &m_ImageList , LVSIL_SMALL ) ;
  110. if( m_pSiteHead == NULL )
  111. {
  112. m_pSiteHead = new SITEQUEUEITEM ;
  113. memset( m_pSiteHead , 0 , sizeof( SITEQUEUEITEM ) ) ;
  114. }
  115. if( ReadSiteFromFile( ) )
  116. {
  117. InitSiteList( ) ;
  118. }
  119. return TRUE;  // return TRUE unless you set the focus to a control
  120.               // EXCEPTION: OCX Property Pages should return FALSE
  121. }
  122. BOOL CSetDlgSelectSite::ReadSiteFromFile()
  123. {
  124. CFile file ;
  125. SITEINFO site ;
  126. SITEQUEUEITEM* pSiteItem ;
  127. SITEQUEUEITEM* pCurItem ;
  128. pCurItem = m_pSiteHead ;
  129. int ItemSize = sizeof( SITEINFO ) ;
  130. int ReadSize  = 1 ;
  131. if( file.Open( "SiteInfo.QFP" , CFile::modeRead ) )
  132. {
  133. while( ReadSize )
  134. {
  135. ReadSize = file.Read( &site , ItemSize ) ;
  136. if( ReadSize != ItemSize )
  137. break ;
  138. memcpy( &pCurItem->site , &site , ItemSize ) ;
  139. pSiteItem = new SITEQUEUEITEM ;
  140. memset( pSiteItem , 0 , sizeof( SITEQUEUEITEM ) ) ;
  141. pCurItem->pNext = pSiteItem ;
  142. pCurItem = pSiteItem ;
  143. }
  144. }
  145. else
  146. return false ;
  147. file.Close() ;
  148. return true ;
  149. }
  150. BOOL CSetDlgSelectSite::InitSiteList()
  151. {
  152. SITEQUEUEITEM* pCurItem ;
  153. m_SiteList.DeleteAllItems( ) ;
  154. pCurItem = m_pSiteHead ;
  155. int nItem = 0 ;
  156. while( pCurItem->pNext != NULL )
  157. {
  158. m_SiteList.InsertItem( nItem , pCurItem->site.sitename , 0 ) ;
  159. pCurItem->iNo = nItem ;
  160. pCurItem = pCurItem->pNext ;
  161. nItem ++ ;
  162. }
  163. return true ;
  164. }
  165. BOOL CSetDlgSelectSite::SaveSiteInfoToFile()
  166. {
  167. CFile file ;
  168. if( !file.Open( "SiteInfo.QFP" , CFile::modeCreate|CFile::modeWrite ) )
  169. {
  170. return false ;
  171. }
  172. SITEQUEUEITEM* pCurItem ;
  173. pCurItem = m_pSiteHead ;
  174. while( pCurItem->pNext != NULL )
  175. {
  176. try
  177. {
  178. file.Write( &pCurItem->site , sizeof( SITEINFO ) ) ;
  179. }
  180. catch( CFileException* e )
  181. {
  182. e->Delete( ) ;
  183. }
  184. pCurItem = pCurItem->pNext ;
  185. }
  186. file.Close() ;
  187. return true ;
  188. }
  189. BOOL CSetDlgSelectSite::AddSite(SITEINFO *pSite)
  190. {
  191. SITEQUEUEITEM* pSiteItem ;
  192. SITEQUEUEITEM* pCurItem ;
  193. pCurItem = m_pSiteHead  ;
  194. while( pCurItem->pNext != NULL )
  195. pCurItem = pCurItem->pNext ;
  196. memcpy( &pCurItem->site , pSite , sizeof( SITEINFO ) ) ;
  197. pSiteItem = new SITEQUEUEITEM ;
  198. memset( pSiteItem , 0 , sizeof( SITEQUEUEITEM ) );
  199. pCurItem->pNext = pSiteItem ;
  200. return true ;
  201. }
  202. BOOL CSetDlgSelectSite::DeleteAllSite()
  203. {
  204. SITEQUEUEITEM* pCurItem ;
  205. pCurItem = m_pSiteHead ;
  206. while( m_pSiteHead != NULL )
  207. {
  208. pCurItem = m_pSiteHead ; 
  209. m_pSiteHead = m_pSiteHead->pNext ;
  210. delete pCurItem ;
  211. }
  212. return true ;
  213. }
  214. BOOL CSetDlgSelectSite::DeleteOneSite(int iNo)
  215. {
  216. SITEQUEUEITEM* pCurItem = m_pSiteHead ;
  217. SITEQUEUEITEM* pPreItem = m_pSiteHead ;
  218. if( pCurItem->iNo == iNo )
  219. {
  220. m_pSiteHead = m_pSiteHead->pNext ;
  221. delete pCurItem ;
  222. pCurItem = NULL ;
  223. return true ;
  224. }
  225. else
  226. {
  227. pPreItem = pCurItem ;
  228. pCurItem = pCurItem->pNext ;
  229. }
  230. while( pCurItem->pNext != NULL )
  231. {
  232. if( pCurItem->iNo == iNo )
  233. break ;
  234. pPreItem = pCurItem ;
  235. pCurItem = pCurItem->pNext ;
  236. }
  237. if( pCurItem->pNext == NULL )
  238. {
  239. MessageBox( "Can't find this item ! Can't del !" ) ;
  240. return false ;
  241. }
  242. pPreItem->pNext = pCurItem->pNext ;
  243. delete pCurItem ;
  244. pCurItem = NULL ;
  245. return true ;
  246. }
  247. BOOL CSetDlgSelectSite::ReplaceOneSite(int iNo , SITEINFO* pSite )
  248. {
  249. SITEQUEUEITEM* pCurItem = m_pSiteHead ;
  250. while( pCurItem->pNext != NULL )
  251. {
  252. if( pCurItem->iNo == iNo )
  253. break ;
  254. pCurItem = pCurItem->pNext ;
  255. }
  256. if( pCurItem->pNext == NULL )
  257. {
  258. MessageBox( "Can't find this item !" ) ;
  259. return false ;
  260. }
  261. memcpy( &pCurItem->site , pSite , sizeof( SITEINFO ) ) ;
  262. return true ;
  263. }
  264. BOOL CSetDlgSelectSite::GetOneSite(int iNo, SITEINFO *pSite)
  265. {
  266. SITEQUEUEITEM* pCurItem = m_pSiteHead ;
  267. while( pCurItem->pNext != NULL )
  268. {
  269. if( pCurItem->iNo == iNo )
  270. break ;
  271. pCurItem = pCurItem->pNext ;
  272. }
  273. if( pCurItem->pNext == NULL )
  274. {
  275. MessageBox( "Can't find this item !" ) ;
  276. return false ;
  277. }
  278. memcpy( pSite , &pCurItem->site , sizeof( SITEINFO ) ) ;
  279. return true;
  280. }
  281. BOOL CSetDlgSelectSite::GetCurSelSite()
  282. {
  283. int iCount = m_SiteList.GetSelectedCount();
  284. if( iCount > 1 || iCount <= 0)
  285. return false ;
  286. int iCurSel = m_SiteList.GetNextItem( -1 , LVNI_SELECTED ) ;
  287. if( iCurSel == -1 )
  288. return false ;
  289. GetOneSite( iCurSel , &m_CurSelSite ) ;
  290. return true ;
  291. }
  292. void CSetDlgSelectSite::OnDblclkListSite(NMHDR* pNMHDR, LRESULT* pResult) 
  293. {
  294. // TODO: Add your control notification handler code here
  295. /*
  296. int iCount = m_SiteList.GetSelectedCount() ;
  297. if( iCount != 1 )
  298. return ;
  299. int iItem = -1 ;
  300. iItem = m_SiteList.GetNextItem( iItem , LVNI_SELECTED ) ;
  301. */
  302. OnOK( ) ;
  303. *pResult = 0;
  304. }