CategoryNewDlg.cpp
上传用户:lds876
上传日期:2013-05-25
资源大小:567k
文件大小:7k
源码类别:

P2P编程

开发平台:

Visual C++

  1. // CategoryNewDlg.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "testbt.h"
  5. #include "CategoryNewDlg.h"
  6. #include "CategoryBarWnd.h"
  7. #include "FileBase.h"
  8. #ifdef _DEBUG
  9. #define new DEBUG_NEW
  10. #undef THIS_FILE
  11. static char THIS_FILE[] = __FILE__;
  12. #endif
  13. /////////////////////////////////////////////////////////////////////////////
  14. // CCategoryNewDlg dialog
  15. CCategoryNewDlg::CCategoryNewDlg(CImageList* pctlImage, 
  16.  CCategoryBarWnd* pCategoryBarWnd, bool bNewOrMoveto, HTREEITEM hItemSel, 
  17.   CWnd* pParent /*=NULL*/)
  18. : CDialog(CCategoryNewDlg::IDD, pParent)
  19. {
  20. //{{AFX_DATA_INIT(CCategoryNewDlg)
  21. m_strCategoryDir = _T("");
  22. m_strCategoryName = _T("");
  23. //}}AFX_DATA_INIT
  24. m_pctlImage = pctlImage;
  25. m_pCategoryBarWnd = pCategoryBarWnd;
  26. m_bNewOrMoveto = bNewOrMoveto;
  27. m_ItemSel = hItemSel;
  28. m_bAutoFill = false;
  29. }
  30. void CCategoryNewDlg::DoDataExchange(CDataExchange* pDX)
  31. {
  32. CDialog::DoDataExchange(pDX);
  33. //{{AFX_DATA_MAP(CCategoryNewDlg)
  34. DDX_Control(pDX, IDC_BUTTON_FOLDER_SEL, m_btnBrowseDir);
  35. DDX_Control(pDX, IDCANCEL, m_btnCancel);
  36. DDX_Control(pDX, IDOK, m_btnOK);
  37. DDX_Control(pDX, IDC_TREE_CATEGORY, m_treeCatetory);
  38. DDX_Text(pDX, IDC_EDIT_CATEGORY_DIR, m_strCategoryDir);
  39. DDX_Text(pDX, IDC_EDIT_CATEGORY_NAME, m_strCategoryName);
  40. //}}AFX_DATA_MAP
  41. }
  42. BEGIN_MESSAGE_MAP(CCategoryNewDlg, CDialog)
  43. //{{AFX_MSG_MAP(CCategoryNewDlg)
  44. ON_EN_CHANGE(IDC_EDIT_CATEGORY_NAME, OnChangeEditCategoryName)
  45. ON_NOTIFY(TVN_SELCHANGED, IDC_TREE_CATEGORY, OnSelchangedTreeCategory)
  46. ON_EN_CHANGE(IDC_EDIT_CATEGORY_DIR, OnChangeEditCategoryDir)
  47. ON_WM_CREATE()
  48. ON_BN_CLICKED(IDC_BUTTON_FOLDER_SEL, OnButtonFolderSel)
  49. //}}AFX_MSG_MAP
  50. END_MESSAGE_MAP()
  51. /////////////////////////////////////////////////////////////////////////////
  52. // CCategoryNewDlg message handlers
  53. BOOL CCategoryNewDlg::OnInitDialog() 
  54. {
  55. CDialog::OnInitDialog();
  56. //
  57. // Create BitmapList
  58. //
  59. HBITMAP hbm = (HBITMAP)::LoadImage(AfxGetInstanceHandle(),
  60. MAKEINTRESOURCE(IDB_BITMAP_DLG_ICONS),
  61. IMAGE_BITMAP,
  62. 0,0, // cx,cy
  63. LR_CREATEDIBSECTION); // | LR_LOADMAP3DCOLORS );
  64. CBitmap bm;
  65. bm.Attach(hbm);
  66. m_ctlImage.Create(16,15, ILC_COLOR8|ILC_MASK, 3, 4);
  67. m_ctlImage.SetBkColor(RGB(255, 255,255)); 
  68. m_ctlImage.Add(&bm, (COLORREF)RGB(255,0,255));
  69. //
  70. // set button image.
  71. //
  72. // m_btnBrowseDir.Create(m_ctlImage.ExtractIcon(2), true, "选择保存路径");
  73. m_btnOK.Create(m_ctlImage.ExtractIcon(0));
  74. m_btnCancel.Create(m_ctlImage.ExtractIcon(1));
  75. //
  76. //
  77. //
  78. assert(m_pCategoryBarWnd && m_ItemSel && m_pctlImage);
  79. m_bAutoFill = true;
  80. m_treeCatetory.SetImageList(m_pctlImage);
  81. CopyTree(m_pCategoryBarWnd->m_curRoot, m_treeCatetory.GetRootItem());
  82. if (!m_treeCatetory.GetSelectedItem())
  83. m_treeCatetory.GetRootItem().Select();
  84. assert(m_treeCatetory.GetSelectedItem());
  85. OnSelchangedTreeCategory(0, 0);
  86. if (m_bNewOrMoveto)
  87. {
  88. GetDlgItem(IDC_EDIT_CATEGORY_NAME)->SetFocus();
  89. SetWindowText("创建新类别");
  90. }
  91. else
  92. {
  93. ((CEdit*)GetDlgItem(IDC_EDIT_CATEGORY_NAME))->SetReadOnly(true);
  94. ((CEdit*)GetDlgItem(IDC_EDIT_CATEGORY_DIR))->SetReadOnly(true);
  95. ((CEdit*)GetDlgItem(IDC_BUTTON_FOLDER_SEL))->SetReadOnly(true);
  96. GetDlgItem(IDC_BUTTON_FOLDER_SEL)->EnableWindow(false);
  97. GetDlgItem(IDC_TREE_CATEGORY)->SetFocus();
  98. SetWindowText("移动");
  99. }
  100. return FALSE;
  101. }
  102. void CCategoryNewDlg::OnChangeEditCategoryName() 
  103. {
  104. assert(m_bNewOrMoveto);
  105. if (!m_bAutoFill) return;
  106. UpdateData();
  107. // get default directory string and format it.
  108. CTreeCursor ItemSel = m_treeCatetory.GetSelectedItem();
  109. assert(ItemSel);
  110. CCategoryBarWnd::CCategoryDBItem* pItem = 
  111. (CCategoryBarWnd::CCategoryDBItem*)GetTreeData(ItemSel);
  112. assert(pItem);
  113. string strDefaultDirectory = pItem->m_strDefaultDirectory;
  114. if (strDefaultDirectory.size() <= 0)
  115. {
  116. assert(false);
  117. return;
  118. }
  119. if (strDefaultDirectory[strDefaultDirectory.size() - 1] != '\')
  120. strDefaultDirectory += '\';
  121. // auto fill m_strCategoryDir.
  122. m_strCategoryDir = strDefaultDirectory.data() + m_strCategoryName;
  123. UpdateData(false);
  124. }
  125. void CCategoryNewDlg::OnChangeEditCategoryDir() 
  126. {
  127. assert(m_bNewOrMoveto);
  128. m_bAutoFill = false;
  129. }
  130. void CCategoryNewDlg::OnSelchangedTreeCategory(NMHDR* pNMHDR, LRESULT* pResult) 
  131. {
  132. if (pResult) *pResult = 0;
  133. CTreeCursor ItemSel = m_treeCatetory.GetSelectedItem();
  134. assert(ItemSel);
  135. CCategoryBarWnd::CCategoryDBItem* pItem = (CCategoryBarWnd::CCategoryDBItem*)GetTreeData(ItemSel);
  136. assert(pItem);
  137. string strDefaultDirectory = pItem->m_strDefaultDirectory;
  138. assert(strDefaultDirectory.size() > 0);
  139. if (m_bNewOrMoveto)
  140. {
  141. if (!m_bAutoFill) return;
  142. if (strDefaultDirectory[strDefaultDirectory.size() - 1] != '\')
  143. strDefaultDirectory += '\';
  144. m_strCategoryDir = strDefaultDirectory.data() + m_strCategoryName;
  145. }
  146. else
  147. {
  148. m_strCategoryName = GetCorrespondingCursor(ItemSel).GetText();
  149. m_strCategoryDir = strDefaultDirectory.data();
  150. }
  151. UpdateData(false);
  152. }
  153. void CCategoryNewDlg::OnOK() 
  154. {
  155. UpdateData();
  156. if (m_bNewOrMoveto)
  157. {
  158. if (m_strCategoryName.IsEmpty())
  159. return;
  160. // check directory to create.
  161. char drive[_MAX_DRIVE];
  162. char dir[_MAX_DIR];
  163. char fname[_MAX_FNAME];
  164. char ext[_MAX_EXT];
  165. _splitpath(m_strCategoryDir, drive, dir, fname, ext);
  166. if (!strlen(drive))
  167. return;
  168. if (!MakeDirecotry(m_strCategoryDir.GetBuffer(0)))
  169. return;
  170. }
  171. CTreeCursor curItem = m_treeCatetory.GetSelectedItem();
  172. m_ItemSel = (HTREEITEM)curItem.GetData();
  173. assert(m_ItemSel);
  174. CDialog::OnOK();
  175. }
  176. void CCategoryNewDlg::OnButtonFolderSel() 
  177. {
  178. CString strDef, strFolder;
  179. if (!SelectFolder(strDef, strFolder))
  180. return;
  181. /*
  182. string strFolder = SelectFolder();
  183. if (strFolder.empty())
  184. return;
  185. //*/
  186. UpdateData();
  187. m_strCategoryDir = strFolder;
  188. UpdateData(false);
  189. m_bAutoFill = false;
  190. }
  191. CTreeCursor CCategoryNewDlg::GetCorrespondingCursor(CTreeCursor& curItem)
  192. {
  193. long lData = curItem.GetData();
  194. assert(lData);
  195. return CTreeCursor ((HTREEITEM)lData, m_pCategoryBarWnd);
  196. }
  197. long CCategoryNewDlg::GetTreeData(CTreeCursor& curItem)
  198. {
  199. long lData = curItem.GetData();
  200. assert(lData);
  201. CTreeCursor curTrue((HTREEITEM)lData, m_pCategoryBarWnd);
  202. lData = curTrue.GetData();
  203. assert(lData);
  204. return lData;
  205. }
  206. void CCategoryNewDlg::CopyTree(CTreeCursor& curSrc, CTreeCursor& curTarget)
  207. {
  208. // don't show downloading category.
  209. if (curSrc == m_pCategoryBarWnd->m_curDownloading)
  210. return;
  211. CTreeCursor curTemp = curTarget.AddTail(curSrc.GetText(), curSrc.GetImageID());
  212. curTemp.SetData((long)(HTREEITEM)curSrc);
  213. assert(m_ItemSel);
  214. if (curSrc == m_ItemSel)
  215. curTemp.Select();
  216. if (curSrc.HasChildren())
  217. {
  218. CTreeCursor curChild = curSrc.GetChild();
  219. while (curChild)
  220. {
  221. CopyTree(curChild, curTemp);
  222. curChild = curChild.GetNext(TVGN_NEXT);
  223. }
  224. }
  225. }