DialogResourceSymbols.cpp
上传用户:szled88
上传日期:2015-04-09
资源大小:43957k
文件大小:11k
源码类别:

对话框与窗口

开发平台:

Visual C++

  1. // DialogResourceSymbols.cpp : implementation file
  2. //
  3. // This file is a part of the XTREME TOOLKIT PRO MFC class library.
  4. // (c)1998-2008 Codejock Software, All Rights Reserved.
  5. //
  6. // THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
  7. // RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
  8. // CONSENT OF CODEJOCK SOFTWARE.
  9. //
  10. // THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
  11. // IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
  12. // YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
  13. // SINGLE COMPUTER.
  14. //
  15. // CONTACT INFORMATION:
  16. // support@codejock.com
  17. // http://www.codejock.com
  18. //
  19. /////////////////////////////////////////////////////////////////////////////
  20. #include "stdafx.h"
  21. #include "commandbarsdesigner.h"
  22. #include "EmbeddedFrame.h"
  23. #include "DialogResourceSymbols.h"
  24. #include "DialogNewSymbol.h"
  25. #ifdef _DEBUG
  26. #define new DEBUG_NEW
  27. #undef THIS_FILE
  28. static char THIS_FILE[] = __FILE__;
  29. #endif
  30. int CDialogResourceSymbolsList::CompareItem(LPCOMPAREITEMSTRUCT lpCompareItemStruct)
  31. {
  32. if (lpCompareItemStruct->itemData1 == NULL || lpCompareItemStruct->itemData2 == NULL)
  33. return 0;
  34. CResourceInfo* pInfo1 = (CResourceInfo*)lpCompareItemStruct->itemData1;
  35. CResourceInfo* pInfo2 = (CResourceInfo*)lpCompareItemStruct->itemData2;
  36. return pInfo1->m_strCaption.Compare(pInfo2->m_strCaption);
  37. }
  38. void CDialogResourceSymbolsList::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
  39. {
  40. ASSERT(lpDrawItemStruct->CtlType == ODT_LISTBOX);
  41. CDC dc;
  42. dc.Attach(lpDrawItemStruct->hDC);
  43. CRect rcItem = lpDrawItemStruct->rcItem;
  44. CResourceInfo* pInfo = (CResourceInfo*)lpDrawItemStruct->itemData;
  45. if (!pInfo)
  46. return;
  47. // Save these value to restore them when done drawing.
  48. COLORREF crOldTextColor = dc.GetTextColor();
  49. COLORREF crOldBkColor = dc.GetBkColor();
  50. // If this item is selected, set the background color
  51. // and the text color to appropriate values. Also, erase
  52. // rect by filling it with the background color.
  53. if ((lpDrawItemStruct->itemAction | ODA_SELECT) &&
  54. (lpDrawItemStruct->itemState & ODS_SELECTED))
  55. {
  56. dc.SetTextColor(::GetSysColor(COLOR_HIGHLIGHTTEXT));
  57. dc.SetBkColor(::GetSysColor(COLOR_HIGHLIGHT));
  58. dc.FillSolidRect(rcItem, ::GetSysColor(COLOR_HIGHLIGHT));
  59. }
  60. else
  61. dc.FillSolidRect(&lpDrawItemStruct->rcItem, crOldBkColor);
  62. CString str = pInfo->m_strCaption;
  63. CRect rcCaption(rcItem);
  64. rcCaption.right = m_nCaptionWidth;
  65. dc.DrawText(str, rcCaption, DT_SINGLELINE|DT_VCENTER);
  66. CString strID;
  67. strID.Format(_T("%i"), pInfo->m_nID);
  68. CRect rcID(rcItem);
  69. rcID.left = m_nCaptionWidth;
  70. dc.DrawText(strID, rcID, DT_SINGLELINE|DT_VCENTER);
  71. if (pInfo->m_bInUse)
  72. {
  73. CRect rcUsed(rcItem);
  74. rcUsed.left = m_nUsedWidth;
  75. dc.DrawText(_T("Yes"), rcUsed, DT_SINGLELINE|DT_VCENTER);
  76. }
  77. // Reset the background color and the text color back to their
  78. // original values.
  79. dc.SetTextColor(crOldTextColor);
  80. dc.SetBkColor(crOldBkColor);
  81. dc.Detach();
  82. }
  83. /////////////////////////////////////////////////////////////////////////////
  84. // CDialogResourceSymbols dialog
  85. CDialogResourceSymbols::CDialogResourceSymbols(CEmbeddedFrame* pFrame, CWnd* pParent /*=NULL*/)
  86. : CDialog(CDialogResourceSymbols::IDD, pParent)
  87. {
  88. //{{AFX_DATA_INIT(CDialogResourceSymbols)
  89. // NOTE: the ClassWizard will add member initialization here
  90. //}}AFX_DATA_INIT
  91. m_pFrame = pFrame;
  92. }
  93. void CDialogResourceSymbols::DoDataExchange(CDataExchange* pDX)
  94. {
  95. CDialog::DoDataExchange(pDX);
  96. //{{AFX_DATA_MAP(CDialogResourceSymbols)
  97. DDX_Control(pDX, IDC_LIST_USEDBY, m_wndListUsage);
  98. DDX_Control(pDX, IDC_LIST_IDS, m_wndList);
  99. //}}AFX_DATA_MAP
  100. }
  101. BEGIN_MESSAGE_MAP(CDialogResourceSymbols, CDialog)
  102. //{{AFX_MSG_MAP(CDialogResourceSymbols)
  103. ON_BN_CLICKED(IDC_BUTTON_IMPORT, OnButtonImport)
  104. ON_BN_CLICKED(IDC_BUTTON_NEW, OnButtonNew)
  105. ON_BN_CLICKED(IDC_BUTTON_DELETE, OnButtonDelete)
  106. ON_LBN_SELCHANGE(IDC_LIST_IDS, OnSelchangeList)
  107. //}}AFX_MSG_MAP
  108. END_MESSAGE_MAP()
  109. /////////////////////////////////////////////////////////////////////////////
  110. // CDialogResourceSymbols message handlers
  111. void CDialogResourceSymbols::RefreshMainList()
  112. {
  113. m_wndList.ResetContent();
  114. CMapResources* pResources = m_pFrame->ResourceManager()->GetResources();
  115. POSITION pos = pResources->GetStartPosition();
  116. while (pos)
  117. {
  118. CResourceInfo* pInfo;
  119. CString strCaption;
  120. pResources->GetNextAssoc(pos, strCaption, (CObject*&)pInfo);
  121. pInfo->m_strCaption = strCaption;
  122. pInfo->m_bInUse = FillUsageList(pInfo->m_nID, TRUE);
  123. m_wndList.AddString((LPCTSTR)pInfo);
  124. }
  125. OnSelchangeList();
  126. }
  127. BOOL CDialogResourceSymbols::OnInitDialog()
  128. {
  129. CDialog::OnInitDialog();
  130. CXTPWindowRect rcName(GetDlgItem(IDC_STATIC_NAME));
  131. CXTPWindowRect rcID(GetDlgItem(IDC_STATIC_VALUE));
  132. CXTPWindowRect rcUsed(GetDlgItem(IDC_STATIC_USED));
  133. m_wndList.m_nCaptionWidth = rcID.left - rcName.left;
  134. m_wndList.m_nUsedWidth = rcUsed.left - rcName.left;
  135. RefreshMainList();
  136. return TRUE;  // return TRUE unless you set the focus to a control
  137.               // EXCEPTION: OCX Property Pages should return FALSE
  138. }
  139. void CDialogResourceSymbols::OnButtonImport()
  140. {
  141. CFileDialog fd(FALSE, _T(".bas"), _T("Resource.bas"), OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
  142. _T("Visual Basic Module (*.bas)|*.bas|Visual C++ Defenition (*.h)|*.h|All Files (*.*)|*.*||"));
  143. if (fd.DoModal() == IDOK)
  144. {
  145. CStdioFile file(fd.GetFileName(), CFile::modeCreate|CFile::modeWrite);
  146. if (fd.GetFileName().Right(2).CompareNoCase(_T(".h"))== 0)
  147. {
  148. for (int i = 0; i < m_wndList.GetCount(); i++)
  149. {
  150. CResourceInfo* pInfo = (CResourceInfo*)m_wndList.GetItemDataPtr(i);
  151. CString strLine;
  152. strLine.Format(_T("#define %sttt%in"), pInfo->m_strCaption, pInfo->m_nID);
  153. file.WriteString(strLine);
  154. }
  155. } else
  156. {
  157. file.WriteString(_T("Attribute VB_Name = "Resource"n"));
  158. for (int i = 0; i < m_wndList.GetCount(); i++)
  159. {
  160. CResourceInfo* pInfo = (CResourceInfo*)m_wndList.GetItemDataPtr(i);
  161. CString strLine;
  162. strLine.Format(_T("Public Const %s = %in"), pInfo->m_strCaption, pInfo->m_nID);
  163. file.WriteString(strLine);
  164. }
  165. }
  166. }
  167. }
  168. void CDialogResourceSymbols::OnButtonNew()
  169. {
  170. CDialogNewSymbol ns;
  171. ns.m_pResourceManager = m_pFrame->ResourceManager();
  172. if (ns.DoModal() == IDOK)
  173. {
  174. CMapResources* pMapResources = m_pFrame->ResourceManager()->GetResources();
  175. CResourceInfo* pInfo;
  176. CString strCaption;
  177. if (!pMapResources->Lookup(ns.m_strName, (CObject*&)pInfo) && m_pFrame->ResourceManager()->Find(ns.m_nValue) == NULL)
  178. {
  179. pMapResources->SetAt(ns.m_strName, new CResourceInfo(ns.m_nValue));
  180. if (ns.m_nValue == m_pFrame->ResourceManager()->m_nNextID)
  181. m_pFrame->ResourceManager()->m_nNextID++;
  182. RefreshMainList();
  183. }
  184. }
  185. }
  186. void CDialogResourceSymbols::OnButtonDelete()
  187. {
  188. int nSel = m_wndList.GetCurSel();
  189. if (nSel != LB_ERR)
  190. {
  191. CResourceInfo* pInfo = (CResourceInfo*)m_wndList.GetItemDataPtr(nSel);
  192. if (!pInfo)
  193. return;
  194. m_pFrame->ResourceManager()->m_mapResources.RemoveKey(pInfo->m_strCaption);
  195. delete pInfo;
  196. RefreshMainList();
  197. }
  198. }
  199. BOOL CheckCommandBar(UINT nID, CXTPCommandBar* pCommandBar);
  200. BOOL CheckControl(UINT nID, CXTPControl* pControl)
  201. {
  202. if (pControl->GetID() == (int)nID)
  203. return TRUE;
  204. if (pControl->GetIconId() == (int)nID)
  205. return TRUE;
  206. CXTPCommandBar* pChildBar = pControl->GetCommandBar();
  207. if (pChildBar)
  208. {
  209. BOOL bFound = CheckCommandBar(nID, pChildBar);
  210. if (bFound)
  211. return TRUE;
  212. }
  213. return FALSE;
  214. }
  215. BOOL CheckCommandBar(UINT nID, CXTPCommandBar* pCommandBar)
  216. {
  217. for (int i = 0; i < pCommandBar->GetControls()->GetCount(); i++)
  218. {
  219. CXTPControl* pControl = pCommandBar->GetControl(i);
  220. if (CheckControl(nID, pControl))
  221. return TRUE;
  222. }
  223. if (pCommandBar->IsKindOf(RUNTIME_CLASS(CXTPPopupBar)))
  224. {
  225. CXTPPopupBar* pPopupBar = (CXTPPopupBar*)pCommandBar;
  226. CString strCaption; int nWidth; UINT nIDTearOff;
  227. if (pPopupBar->IsTearOffPopup(strCaption, nIDTearOff, nWidth) && (nID == nIDTearOff))
  228. {
  229. return TRUE;
  230. }
  231. }
  232. return FALSE;
  233. }
  234. BOOL CheckCommandBars(UINT nID, CXTPCommandBars* pCommandBars, CListBox* m_pList)
  235. {
  236. BOOL bResult = FALSE;
  237. for (int i = 0; i < pCommandBars->GetCount(); i++)
  238. {
  239. CXTPCommandBar* pCommandBar = pCommandBars->GetAt(i);
  240. if (pCommandBar->GetBarID() == nID || CheckCommandBar(nID, pCommandBar))
  241. {
  242. if (!m_pList)
  243. return TRUE;
  244. bResult = TRUE;
  245. CString str;
  246. if (pCommandBar->GetType() == xtpBarTypeMenuBar)
  247. str = _T("Menu bar");
  248. else
  249. str = _T("ToolBar ") +  pCommandBar->GetTitle();
  250. m_pList->AddString(str);
  251. }
  252. }
  253. return bResult;
  254. }
  255. BOOL CheckControls(UINT nID, CXTPControls* pControls, CListBox* m_pList)
  256. {
  257. for (int i = 0; i < pControls->GetCount(); i++)
  258. {
  259. CXTPControl* pControl = pControls->GetAt(i);
  260. if (CheckControl(nID, pControl))
  261. {
  262. if (!m_pList)
  263. return TRUE;
  264. m_pList->AddString(_T("Controls pane"));
  265. return TRUE;
  266. }
  267. }
  268. return FALSE;
  269. }
  270. BOOL CheckIcon(UINT nID, CXTPCommandBars* pCommandBars, CListBox* m_pList)
  271. {
  272. CMap<UINT, UINT, CXTPImageManagerIconSet*, CXTPImageManagerIconSet*>* pIcons =
  273. pCommandBars->GetImageManager()->GetImages();
  274. UINT nIDCommand;
  275. CXTPImageManagerIconSet* pIconSet;
  276. POSITION pos = pIcons->GetStartPosition();
  277. while (pos)
  278. {
  279. pIcons->GetNextAssoc(pos, nIDCommand, pIconSet);
  280. if (pIconSet && nID == nIDCommand)
  281. {
  282. if (!m_pList)
  283. return TRUE;
  284. m_pList->AddString(_T("Icon"));
  285. return TRUE;
  286. }
  287. }
  288. return FALSE;
  289. }
  290. BOOL CheckAccels(UINT nID, HACCEL& hAccelTable, CListBox* m_pList)
  291. {
  292. int nAccelSize = ::CopyAcceleratorTable (hAccelTable, NULL, 0);
  293. if (nAccelSize <= 0)
  294. return FALSE;
  295. BOOL bResult = FALSE;
  296. ACCEL* lpAccel = new ACCEL [nAccelSize];
  297. ::CopyAcceleratorTable (hAccelTable, lpAccel, nAccelSize);
  298. for (int i = 0; i < nAccelSize; i ++)
  299. {
  300. if (lpAccel [i].cmd == nID)
  301. {
  302. if (m_pList)
  303. m_pList->AddString(_T("Accelerator"));
  304. bResult = TRUE;
  305. break;
  306. }
  307. }
  308. delete[] lpAccel;
  309. return bResult;
  310. }
  311. BOOL CDialogResourceSymbols::FillUsageList(UINT nID, BOOL bCheckOnly)
  312. {
  313. CListBox* pListBox = bCheckOnly? NULL: &m_wndListUsage;
  314. if (CheckCommandBars(nID, m_pFrame->GetCommandBars(), pListBox) && bCheckOnly)
  315. return TRUE;
  316. if (CheckControls(nID, m_pFrame->m_pControls, pListBox) && bCheckOnly)
  317. return TRUE;
  318. if (CheckIcon(nID, m_pFrame->GetCommandBars(), pListBox) && bCheckOnly)
  319. return TRUE;
  320. if (CheckAccels(nID, m_pFrame->m_hAccelTable, pListBox) && bCheckOnly)
  321. return TRUE;
  322. return FALSE;
  323. }
  324. void CDialogResourceSymbols::OnSelchangeList()
  325. {
  326. m_wndListUsage.ResetContent();
  327. int nSel = m_wndList.GetCurSel();
  328. if (nSel != LB_ERR)
  329. {
  330. CResourceInfo* pInfo = (CResourceInfo*)m_wndList.GetItemDataPtr(nSel);
  331. GetDlgItem(IDC_BUTTON_DELETE)->EnableWindow(!pInfo->m_bInUse);
  332. FillUsageList(pInfo->m_nID, FALSE);
  333. }
  334. else
  335. {
  336. GetDlgItem(IDC_BUTTON_DELETE)->EnableWindow(FALSE);
  337. }
  338. }