PageListCtrlDesign.cpp
上传用户:yangzi5763
上传日期:2007-01-02
资源大小:239k
文件大小:23k
源码类别:

ActiveX/DCOM/ATL

开发平台:

Visual C++

  1. /************************************
  2.   REVISION LOG ENTRY
  3.   Revision By: Mihai Filimon
  4.   Revised on 10/14/98 12:02:17 PM
  5.   Comments: PageListCtrlDesign.cpp: implementation of the CPageListCtrlDesign class.
  6.  ************************************/
  7. #include "stdafx.h"
  8. #include "xpropertieswnd.h"
  9. #include "PageListCtrlDesign.h"
  10. #include "XFloorPropertiesWndDesign.h"
  11. #ifdef _DEBUG
  12. #undef THIS_FILE
  13. static char THIS_FILE[]=__FILE__;
  14. #define new DEBUG_NEW
  15. #endif
  16. #define DEFAULTTYPE m_nDefaultType == ID_MENUTYPE_ENABLE ? _T("Enable") : m_nDefaultType == ID_MENUTYPE_DISABLE ?  _T("Grayed") : _T("Black")
  17. static const CString group(_T("Group"));
  18. //////////////////////////////////////////////////////////////////////
  19. // Construction/Destruction
  20. //////////////////////////////////////////////////////////////////////
  21. IMPLEMENT_DYNCREATE(CPageListCtrlDesign, CPageListCtrl)
  22. BEGIN_MESSAGE_MAP(CPageListCtrlDesign,CPageListCtrl)
  23. //{{AFX_MSG_MAP(CPageListCtrlDesign)
  24. ON_WM_CONTEXTMENU()
  25. ON_COMMAND(ID_MENU_INSERT, OnMenuInsert)
  26. ON_COMMAND(ID_MENU_DELETE, OnMenuDelete)
  27. ON_COMMAND(ID_MENU_EDIT, OnMenuEdit)
  28. ON_UPDATE_COMMAND_UI(ID_MENUAS_EDIT, OnUpdateMenuasEdit)
  29. ON_UPDATE_COMMAND_UI(ID_MENUAS_COMBOBOX, OnUpdateMenuasCombobox)
  30. ON_UPDATE_COMMAND_UI(ID_MENUAS_BOOLCOMBOBOX, OnUpdateMenuasBoolcombobox)
  31. ON_UPDATE_COMMAND_UI(ID_MENUAS_BUTTON, OnUpdateMenuasButton)
  32. ON_UPDATE_COMMAND_UI(ID_MENUAS_USERCOMBOBOX, OnUpdateMenuasUsercombobox)
  33. ON_WM_LBUTTONDOWN()
  34. ON_UPDATE_COMMAND_UI(ID_MENUTYPE_DISABLE, OnUpdateMenutypeDisable)
  35. ON_UPDATE_COMMAND_UI(ID_MENUTYPE_ENABLE, OnUpdateMenutypeEnable)
  36. ON_UPDATE_COMMAND_UI(ID_MENUTYPE_DISABLEBLACK, OnUpdateMenutypeDisableblack)
  37. ON_WM_LBUTTONDBLCLK()
  38. ON_WM_LBUTTONUP()
  39. ON_WM_MOUSEMOVE()
  40. ON_UPDATE_COMMAND_UI(ID_MENUAS_COLORCOMBOBOX, OnUpdateMenuasColorcombobox)
  41. ON_WM_RBUTTONDOWN()
  42. ON_WM_RBUTTONUP()
  43. ON_WM_RBUTTONDBLCLK()
  44. ON_UPDATE_COMMAND_UI(ID_MENUAS_SHELLFOLDER, OnUpdateMenuasShellfolder)
  45. ON_UPDATE_COMMAND_UI(ID_MENUAS_ADORCOMBOBOX, OnUpdateMenuasAdorcombobox)
  46. ON_UPDATE_COMMAND_UI(ID_MENUAS_DATACOMBOBOX, OnUpdateMenuasDatacombobox)
  47. ON_UPDATE_COMMAND_UI(ID_MENUAS_RETURN, OnUpdateMenuasReturn)
  48. ON_UPDATE_COMMAND_UI(ID_MENUAS_LINK, OnUpdateMenuasLink)
  49. ON_UPDATE_COMMAND_UI(ID_MENUAS_FONT, OnUpdateMenuasFont)
  50. ON_UPDATE_COMMAND_UI(ID_MENUAS_GROUP, OnUpdateMenuasGroup)
  51. ON_NOTIFY_REFLECT(LVN_ENDLABELEDIT, OnEndlabeledit)
  52. ON_NOTIFY_REFLECT(LVN_DELETEITEM, OnDeleteitem)
  53. ON_UPDATE_COMMAND_UI(ID_MENUAS_NCOMBOBOX, OnUpdateMenuasNcombobox)
  54. ON_UPDATE_COMMAND_UI(ID_MENUAS_NADORCOMBOBOX, OnUpdateMenuasNadorcombobox)
  55. //}}AFX_MSG_MAP
  56. END_MESSAGE_MAP()
  57. CAsControls CPageListCtrlDesign::m_asControls;
  58. // Function name : CPageListCtrlDesign::CPageListCtrlDesign
  59. // Description     : default contructor
  60. // Return type : 
  61. CPageListCtrlDesign::CPageListCtrlDesign(COlePropertyPage* pOleDialog)
  62. {
  63. m_pContextMenu = NULL;
  64. m_nDefaultAs = ID_MENUAS_EDIT;
  65. m_nDefaultType = ID_MENUTYPE_ENABLE;
  66. m_nColumnType = -1;
  67. m_nColumnName = -1;
  68. m_nColumnGroup = -1;
  69. m_nColumnED = -1;
  70. m_pOleDialog = pOleDialog;
  71. ASSERT (m_pOleDialog);
  72. }
  73. // Function name : CPageListCtrlDesign::~CPageListCtrlDesign
  74. // Description     : virtual destructor
  75. // Return type : 
  76. CPageListCtrlDesign::~CPageListCtrlDesign()
  77. {
  78. RemoveContextMenu();
  79. }
  80. // Function name : CPageListCtrlDesign::GetDefaultStyle
  81. // Description     : Called by void CPageListCtrl::OnNew(CWnd* pParentWnd, UINT nID)
  82. // Return type : const UINT 
  83. const UINT CPageListCtrlDesign::GetDefaultStyle()
  84. {
  85. return LVS_EDITLABELS;
  86. }
  87. // Function name : CPageListCtrlDesign::GetDefaultStyle
  88. // Description     : 
  89. // Return type : const UINT 
  90. const UINT CPageListCtrlDesign::GetDefaultExStyle()
  91. {
  92. return LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES;
  93. }
  94. // Function name : CPageListCtrlDesign::RemoveContextMenu
  95. // Description     : Remove the pointer to context menu, allocated in OnContextMenu
  96. // Return type : void 
  97. void CPageListCtrlDesign::RemoveContextMenu()
  98. {
  99. if (m_pContextMenu)
  100. delete m_pContextMenu;
  101. m_pContextMenu = NULL;
  102. }
  103. // Function name : CPageListCtrlDesign::GetListCtrl
  104. // Description     : Get ListControl
  105. // Return type : CPageListCtrl* 
  106. CPageListCtrl* CPageListCtrlDesign::GetListCtrl()
  107. {
  108. if (CXFloorPropertiesWndDesign* pFloorWnd = (CXFloorPropertiesWndDesign*)GetParent())
  109. if (CPageListCtrl* pList = pFloorWnd->GetListCtrl(pFloorWnd->GetActivePage()))
  110. return pList;
  111. return NULL;
  112. }
  113. // Function name : CPageListCtrlDesign::OnContextMenu
  114. // Description     : Popup Menu
  115. // Return type : void 
  116. // Argument         : CWnd* pWnd
  117. // Argument         : CPoint point
  118. void CPageListCtrlDesign::OnContextMenu(CWnd* pWnd, CPoint point) 
  119. {
  120. RemoveContextMenu();
  121. m_pContextMenu = new CXDesignPopupMenu(IDR_MENU, _T("MListCtrlDesign"), point, this);
  122. CMenu* pPopupMenu  = m_pContextMenu->GetPopupMenu();
  123. if (pPopupMenu)
  124. {
  125. BOOL bFocused = FALSE;
  126. BOOL bSelected = FALSE;
  127. CPageListCtrl* pList = GetListCtrl();
  128. if (pList)
  129. {
  130. bFocused = pList->GetNextItem(-1, LVNI_FOCUSED) >= 0;
  131. bSelected = pList->GetNextItem(-1, LVNI_SELECTED) >= 0;
  132. }
  133. pPopupMenu->CheckMenuItem(m_nDefaultAs, MF_CHECKED | MF_BYCOMMAND);
  134. pPopupMenu->CheckMenuItem(m_nDefaultType, MF_CHECKED | MF_BYCOMMAND);
  135. pPopupMenu->EnableMenuItem(ID_MENU_EDIT, (bFocused ? MF_ENABLED : MF_DISABLED | MF_GRAYED) | MF_BYCOMMAND);
  136. pPopupMenu->EnableMenuItem(ID_MENU_DELETE, (bSelected ? MF_ENABLED : MF_DISABLED | MF_GRAYED) | MF_BYCOMMAND);
  137. // Add groups to this popup menu
  138. m_grMenu.SetParent(this);
  139. m_grMenu.Add2Menu(pPopupMenu);
  140. VERIFY(m_pContextMenu->Show());
  141. }
  142. }
  143. // Function name : CPageListCtrlDesign::GetFirstGroup
  144. // Description     : Get first group name
  145. // Return type : LPCTSTR 
  146. LPCTSTR CPageListCtrlDesign::GetFirstGroupName(int& lParam)
  147. {
  148. m_nItemGroup = -1;
  149. return GetNextGroupName(lParam);
  150. }
  151. // Function name : CPageListCtrlDesign::GetNextGroup
  152. // Description     : Get next group name
  153. // Return type : LPCTSTR 
  154. LPCTSTR CPageListCtrlDesign::GetNextGroupName(int& lParam)
  155. {
  156. while (++m_nItemGroup < GetItemCount())
  157. if (GetItemText(m_nItemGroup, m_nColumnType).CompareNoCase(group) == 0 )
  158. break;
  159. static CString sResult;
  160. if (m_nItemGroup < GetItemCount())
  161. {
  162. lParam = m_nItemGroup;
  163. sResult = GetItemText(m_nItemGroup, m_nColumnName);
  164. return (LPCTSTR)sResult;
  165. }
  166. return NULL;
  167. }
  168. // Function name : CPageListCtrlDesign::GetFirstIDFree
  169. // Description     : 
  170. // Return type : UINT 
  171. UINT CPageListCtrlDesign::GetFirstIDFree()
  172. {
  173. return 0x9000;
  174. }
  175. // Function name : CPageListCtrlDesign::Load
  176. // Description     : Load all items
  177. // Return type : void 
  178. // Argument         : CString& stream
  179. void CPageListCtrlDesign::Load(CString& stream)
  180. {
  181. CPageListCtrl::Load(stream);
  182. RefreshIDs();
  183. }
  184. // Function name : CPageListCtrlDesign::RefreshIDs
  185. // Description     : refresh the column with IDs
  186. // Return type : void 
  187. void CPageListCtrlDesign::RefreshIDs()
  188. {
  189. for (int i = 0; i < GetItemCount(); i++)
  190. {
  191. CString t; t.Format(_T("%i"), i);
  192. SetItemText(i, 4, t);
  193. }
  194. }
  195. // Function name : CPageListCtrlDesign::OnMenuInsert
  196. // Description     : User select Insert menu.
  197. // Return type : void 
  198. void CPageListCtrlDesign::OnMenuInsert() 
  199. {
  200. if (CPageListCtrl* pList = GetListCtrl())
  201. {
  202. int nItemFocused = pList->GetNextItem(-1, LVNI_FOCUSED);
  203. nItemFocused = nItemFocused == -1 ? pList->GetItemCount() : nItemFocused + 1;
  204. int nItem = pList->InsertItemVrt(nItemFocused, defaultLabelNewItem, NULL);
  205. pList->SetItemText(nItem, m_nColumnType, m_asControls.GetName(m_nDefaultAs));
  206. pList->SetItemText(nItem, m_nColumnED, DEFAULTTYPE);
  207. pList->EditLabel(nItem);
  208. GetPropertiesWndPropPage()->SetModifiedFlag();
  209. }
  210. RefreshIDs();
  211. }
  212. // Function name : CPageListCtrlDesign::OnMenuDelete
  213. // Description     : User Select Delete Row
  214. // Return type : void 
  215. void CPageListCtrlDesign::OnMenuDelete() 
  216. {
  217. if (CPageListCtrl* pList = GetListCtrl())
  218. {
  219. int nItemSelected = pList->GetNextItem(-1, LVNI_SELECTED);
  220. while (nItemSelected >= 0)
  221. {
  222. pList->DeleteItemVrt(nItemSelected);
  223. nItemSelected = pList->GetNextItem(-1, LVNI_SELECTED);
  224. }
  225. GetPropertiesWndPropPage()->SetModifiedFlag();
  226. RefreshIDs();
  227. }
  228. }
  229. // Function name : CPageListCtrlDesign::OnMenuEdit
  230. // Description     : Edit item
  231. // Return type : void 
  232. void CPageListCtrlDesign::OnMenuEdit() 
  233. {
  234. if (CPageListCtrl* pList = GetListCtrl())
  235. {
  236. int nItemFocused = pList->GetNextItem(-1, LVNI_FOCUSED);
  237. if (nItemFocused >= 0)
  238. {
  239. pList->EditLabel(nItemFocused);
  240. GetPropertiesWndPropPage()->SetModifiedFlag();
  241. }
  242. }
  243. }
  244. // Function name : CPageListCtrlDesign::ChangeGroup
  245. // Description     : Set the group for ...
  246. // Return type : void 
  247. // Argument         : LPCTSTR lpszGroupName
  248. void CPageListCtrlDesign::ChangeGroup(LPCTSTR lpszGroupName)
  249. {
  250. if (CPageListCtrl* pList = GetListCtrl())
  251. {
  252. int nItemSelected = pList->GetNextItem(-1, LVNI_SELECTED);
  253. while (nItemSelected >= 0)
  254. {
  255. if (!(pList->GetItemText(nItemSelected, m_nColumnType).CompareNoCase(group) == 0))
  256. pList->SetItemText(nItemSelected, m_nColumnGroup, lpszGroupName);
  257. nItemSelected = pList->GetNextItem(nItemSelected, LVNI_SELECTED);
  258. }
  259. GetPropertiesWndPropPage()->SetModifiedFlag();
  260. }
  261. }
  262. // Function name : CPageListCtrlDesign::ChangeAs
  263. // Description     : Change the selected items to be nIDAs control
  264. // Return type : void 
  265. // Argument         : UINT nIDAs
  266. void CPageListCtrlDesign::ChangeAs(UINT nIDAs)
  267. {
  268. if (CPageListCtrl* pList = GetListCtrl())
  269. {
  270. BOOL bGroup = m_nDefaultAs == ID_MENUAS_GROUP;
  271. int nItemSelected = pList->GetNextItem(-1, LVNI_SELECTED);
  272. while (nItemSelected >= 0)
  273. {
  274. pList->SetItemText(nItemSelected, m_nColumnType, m_asControls.GetName(m_nDefaultAs));
  275. if (bGroup)
  276. pList->SetItemText(nItemSelected, m_nColumnGroup, NULL);
  277. nItemSelected = pList->GetNextItem(nItemSelected, LVNI_SELECTED);
  278. }
  279. GetPropertiesWndPropPage()->SetModifiedFlag();
  280. }
  281. }
  282. // Function name : CPageListCtrlDesign::ChangeType
  283. // Description     : Change the selected items to be Enable or Disable
  284. // Return type : void 
  285. // Argument         : UINT nIDAs
  286. void CPageListCtrlDesign::ChangeType(UINT nIDAs)
  287. {
  288. if (CPageListCtrl* pList = GetListCtrl())
  289. {
  290. int nItemSelected = pList->GetNextItem(-1, LVNI_SELECTED);
  291. while (nItemSelected >= 0)
  292. {
  293. pList->SetItemText(nItemSelected, m_nColumnED, DEFAULTTYPE);
  294. nItemSelected = pList->GetNextItem(nItemSelected, LVNI_SELECTED);
  295. }
  296. GetPropertiesWndPropPage()->SetModifiedFlag();
  297. }
  298. }
  299. // Function name : CPageListCtrlDesign::OnUpdateMenuasNcombobox
  300. // Description     : Update menu item ID_MENUAS_NCOMBOBOX
  301. // Return type : void 
  302. // Argument         : CCmdUI* pCmdUI
  303. void CPageListCtrlDesign::OnUpdateMenuasNcombobox(CCmdUI* pCmdUI) 
  304. {
  305. m_nDefaultAs = ID_MENUAS_NCOMBOBOX;
  306. ChangeAs(m_nDefaultAs);
  307. }
  308. // Function name : CPageListCtrlDesign::OnUpdateMenuasNadorcombobox
  309. // Description     : Update menu item ID_MENUAS_NADORCOMBOBOX
  310. // Return type : void 
  311. // Argument         : CCmdUI* pCmdUI
  312. void CPageListCtrlDesign::OnUpdateMenuasNadorcombobox(CCmdUI* pCmdUI) 
  313. {
  314. m_nDefaultAs = ID_MENUAS_NADORCOMBOBOX;
  315. ChangeAs(m_nDefaultAs);
  316. }
  317. // Function name : CPageListCtrlDesign::OnUpdateMenuasEdit
  318. // Description     : Update menu item ID_MENUAS_EDIT
  319. // Return type : void 
  320. // Argument         : CCmdUI* pCmdUI
  321. void CPageListCtrlDesign::OnUpdateMenuasEdit(CCmdUI* pCmdUI) 
  322. {
  323. m_nDefaultAs = ID_MENUAS_EDIT;
  324. ChangeAs(m_nDefaultAs);
  325. }
  326. // Function name : CPageListCtrlDesign::OnUpdateMenuasCombobox
  327. // Description     : Update menu item ID_MENUAS_COMBOBOX
  328. // Return type : void 
  329. // Argument         : CCmdUI* pCmdUI
  330. void CPageListCtrlDesign::OnUpdateMenuasCombobox(CCmdUI* pCmdUI) 
  331. {
  332. m_nDefaultAs = ID_MENUAS_COMBOBOX;
  333. ChangeAs(m_nDefaultAs);
  334. }
  335. // Function name : CPageListCtrlDesign::OnUpdateMenuasGroup
  336. // Description     : 
  337. // Return type : void 
  338. // Argument         : CCmdUI* pCmdUI
  339. void CPageListCtrlDesign::OnUpdateMenuasGroup(CCmdUI* pCmdUI) 
  340. {
  341. m_nDefaultAs = ID_MENUAS_GROUP;
  342. ChangeAs(m_nDefaultAs);
  343. }
  344. // Function name : CPageListCtrlDesign::OnUpdateMenuasBoolcombobox
  345. // Description     : Update menu item ID_MENUAS_BOOLCOMBOBOX
  346. // Return type : void 
  347. // Argument         : CCmdUI* pCmdUI
  348. void CPageListCtrlDesign::OnUpdateMenuasBoolcombobox(CCmdUI* pCmdUI) 
  349. {
  350. m_nDefaultAs = ID_MENUAS_BOOLCOMBOBOX;
  351. ChangeAs(m_nDefaultAs);
  352. }
  353. // Function name : CPageListCtrlDesign::OnUpdateMenuasButton
  354. // Description     : Update menu item ID_MENUAS_BUTTON
  355. // Return type : void 
  356. // Argument         : CCmdUI* pCmdUI
  357. void CPageListCtrlDesign::OnUpdateMenuasButton(CCmdUI* pCmdUI) 
  358. {
  359. m_nDefaultAs = ID_MENUAS_BUTTON;
  360. ChangeAs(m_nDefaultAs);
  361. }
  362. void CPageListCtrlDesign::OnUpdateMenuasLink(CCmdUI* pCmdUI) 
  363. {
  364. m_nDefaultAs = ID_MENUAS_LINK;
  365. ChangeAs(m_nDefaultAs);
  366. }
  367. // Function name : CPageListCtrlDesign::OnUpdateMenuasAdorcombobox
  368. // Description     : 
  369. // Return type : void 
  370. // Argument         : CCmdUI* pCmdUI
  371. void CPageListCtrlDesign::OnUpdateMenuasAdorcombobox(CCmdUI* pCmdUI) 
  372. {
  373. m_nDefaultAs = ID_MENUAS_ADORCOMBOBOX;
  374. ChangeAs(m_nDefaultAs);
  375. }
  376. // Function name : CPageListCtrlDesign::OnUpdateMenuasDatacombobox
  377. // Description     : 
  378. // Return type : void 
  379. // Argument         : CCmdUI* pCmdUI
  380. void CPageListCtrlDesign::OnUpdateMenuasDatacombobox(CCmdUI* pCmdUI) 
  381. {
  382. m_nDefaultAs = ID_MENUAS_DATACOMBOBOX;
  383. ChangeAs(m_nDefaultAs);
  384. }
  385. void CPageListCtrlDesign::OnUpdateMenuasFont(CCmdUI* pCmdUI) 
  386. {
  387. m_nDefaultAs = ID_MENUAS_FONT;
  388. ChangeAs(m_nDefaultAs);
  389. }
  390. // Function name : CPageListCtrlDesign::OnUpdateMenuasUsercombobox
  391. // Description     : Update menu item ID_MENUAS_USERCOMBBOX
  392. // Return type : void 
  393. // Argument         : CCmdUI* pCmdUI
  394. void CPageListCtrlDesign::OnUpdateMenuasUsercombobox(CCmdUI* pCmdUI) 
  395. {
  396. m_nDefaultAs = ID_MENUAS_USERCOMBOBOX;
  397. ChangeAs(m_nDefaultAs);
  398. }
  399. // Function name : CPageListCtrlDesign::OnUpdateMenuasShellfolder
  400. // Description     : 
  401. // Return type : void 
  402. // Argument         : CCmdUI* pCmdUI
  403. void CPageListCtrlDesign::OnUpdateMenuasShellfolder(CCmdUI* pCmdUI) 
  404. {
  405. m_nDefaultAs = ID_MENUAS_SHELLFOLDER;
  406. ChangeAs(m_nDefaultAs);
  407. }
  408. // Function name : CPageListCtrlDesign::OnUpdateMenuasColorcombobox
  409. // Description     : Update menu item ID_MENUAS_COLORCOMBOBOX
  410. // Return type : void 
  411. // Argument         : CCmdUI* pCmdUI
  412. void CPageListCtrlDesign::OnUpdateMenuasColorcombobox(CCmdUI* pCmdUI) 
  413. {
  414. m_nDefaultAs = ID_MENUAS_COLORCOMBOBOX;
  415. ChangeAs(m_nDefaultAs);
  416. }
  417. void CPageListCtrlDesign::OnUpdateMenuasReturn(CCmdUI* pCmdUI) 
  418. {
  419. m_nDefaultAs = ID_MENUAS_RETURN;
  420. ChangeAs(m_nDefaultAs);
  421. }
  422. // Function name : CPageListCtrlDesign::OnUpdateMenutypeDisable
  423. // Description     : Update menu item ID_MENUTYPE_DISABLE
  424. // Return type : void 
  425. // Argument         : CCmdUI* pCmdUI
  426. void CPageListCtrlDesign::OnUpdateMenutypeDisable(CCmdUI* pCmdUI) 
  427. {
  428. m_nDefaultType = ID_MENUTYPE_DISABLE;
  429. ChangeType(m_nDefaultType);
  430. }
  431. // Function name : CPageListCtrlDesign::OnUpdateMenutypeEnable
  432. // Description     : Update menu item ID_MENUTYPE_ENABLE
  433. // Return type : void 
  434. // Argument         : CCmdUI* pCmdUI
  435. void CPageListCtrlDesign::OnUpdateMenutypeEnable(CCmdUI* pCmdUI) 
  436. {
  437. m_nDefaultType = ID_MENUTYPE_ENABLE;
  438. ChangeType(m_nDefaultType);
  439. }
  440. // Function name : CPageListCtrlDesign::OnUpdateMenutypeDisableblack
  441. // Description     : 
  442. // Return type : void 
  443. // Argument         : CCmdUI* pCmdUI
  444. void CPageListCtrlDesign::OnUpdateMenutypeDisableblack(CCmdUI* pCmdUI) 
  445. {
  446. m_nDefaultType = ID_MENUTYPE_DISABLEBLACK;
  447. ChangeType(m_nDefaultType);
  448. }
  449. // Function name : CPageListCtrlDesign::Save
  450. // Description     : Save the items
  451. // Return type : void 
  452. // Argument         : CString & stream
  453. void CPageListCtrlDesign::Save(CString & stream)
  454. {
  455. int n = GetItemCount();
  456. for (int i = 0; i < n; i++)
  457. stream += GetItemText(i, 0) + _T("\") + GetItemText(i, 1) + _T("\") + GetItemText(i, 2) + _T("\") + GetItemText(i, 3) + CString(_cPagesSeparator);
  458. }
  459. // Function name : CPageListCtrlDesign::OnLoad
  460. // Description     : Called from Load functio to insert a new property into design control
  461. // Return type : int 
  462. // Argument         : LPCTSTR lpszName
  463. // Argument         : LPCTSTR lpszAs
  464. // Argument         : LPCTSTR lpszType
  465. // Argument         : LPCTSTR lpszGroup
  466. int CPageListCtrlDesign::OnLoad(LPCTSTR lpszName, LPCTSTR lpszAs, LPCTSTR lpszType, LPCTSTR lpszGroup)
  467. {
  468. int nItem = InsertItemVrt(GetItemCount(), lpszName, NULL);
  469. if ( nItem >= 0 )
  470. {
  471. SetItemText(nItem, m_nColumnType, lpszAs);
  472. SetItemText(nItem, m_nColumnED, lpszType);
  473. SetItemText(nItem, m_nColumnGroup, lpszGroup);
  474. }
  475. return nItem;
  476. }
  477. // Function name : CPageListCtrlDesign::OnInit
  478. // Description     : Insert a new colum for enable/disable
  479. // Return type : BOOL 
  480. BOOL CPageListCtrlDesign::OnInit()
  481. {
  482. m_nColumnName = InsertColumn(0, _T("Name"), LVCFMT_LEFT, 72);
  483. m_nColumnType = InsertColumn(1, _T("Type"), LVCFMT_LEFT, 84);
  484. m_nColumnED = InsertColumn(2, _T("Enable"), LVCFMT_LEFT, 48);
  485. m_nColumnGroup = InsertColumn(3, _T("Group"), LVCFMT_LEFT, 64);
  486. InsertColumn(4, _T("ID"), LVCFMT_LEFT, 32);
  487. return TRUE;
  488. }
  489. // Function name : CPageListCtrlDesign::OnLButtonDblClk
  490. // Description     : If user dblclk in design time
  491. // Return type : void 
  492. // Argument         : UINT nFlags
  493. // Argument         : CPoint point
  494. void CPageListCtrlDesign::OnLButtonDblClk(UINT nFlags, CPoint point) 
  495. {
  496. // Do not call CPageListCtrl::OnLButtonDblClk(nFlags, point);
  497. CListCtrl::OnLButtonDblClk(nFlags, point);
  498. }
  499. void CPageListCtrlDesign::OnMouseMove(UINT nFlags, CPoint point) 
  500. {
  501. // Do not call CPageListCtrl::OnMouseMove(nFlags, point);
  502. CListCtrl::OnMouseMove(nFlags, point);
  503. }
  504. void CPageListCtrlDesign::OnLButtonUp(UINT nFlags, CPoint point) 
  505. {
  506. // Do not call CPageListCtrl::OnLButtonUp(nFlags, point);
  507. CListCtrl::OnLButtonUp(nFlags, point);
  508. }
  509. // Function name : CPageListCtrlDesign::OnLButtonDown
  510. // Description     : User click mouse in design time
  511. // Return type : void 
  512. // Argument         : UINT nFlags
  513. // Argument         : CPoint point
  514. void CPageListCtrlDesign::OnLButtonDown(UINT nFlags, CPoint point) 
  515. {
  516. // Do not call CListCtrl::OnLButtonDown(nFlags, point);
  517. CListCtrl::OnLButtonDown(nFlags, point);
  518. }
  519. // Function name : CPageListCtrlDesign::OnRButtonDown
  520. // Description     : 
  521. // Return type : void 
  522. // Argument         : UINT nFlags
  523. // Argument         : CPoint point
  524. void CPageListCtrlDesign::OnRButtonDown(UINT nFlags, CPoint point) 
  525. {
  526. // Do not call CPageListCtrl::OnRButtonDown(nFlags, point);
  527. CListCtrl::OnRButtonDown(nFlags, point);
  528. }
  529. // Function name : CPageListCtrlDesign::OnRButtonUp
  530. // Description     : 
  531. // Return type : void 
  532. // Argument         : UINT nFlags
  533. // Argument         : CPoint point
  534. void CPageListCtrlDesign::OnRButtonUp(UINT nFlags, CPoint point) 
  535. {
  536. // Do not call CPageListCtrl::OnRButtonUp(nFlags, point);
  537. CListCtrl::OnRButtonUp(nFlags, point);
  538. }
  539. // Function name : CListCtrlDesign::OnRButtonDblClk
  540. // Description     : 
  541. // Return type : void 
  542. // Argument         : UINT nFlags
  543. // Argument         : CPoint point
  544. void CPageListCtrlDesign::OnRButtonDblClk(UINT nFlags, CPoint point) 
  545. {
  546. // Do not call CPageListCtrl::OnRButtonDblClk(nFlags, point);
  547. CListCtrl::OnRButtonDblClk(nFlags, point);
  548. }
  549. // Function name : CPageListCtrlDesign::GetControlWnd
  550. // Description     : return NULL in design time
  551. // Return type : CXPropertiesWndCtrl* 
  552. CXPropertiesWndCtrl* CPageListCtrlDesign::GetControlWnd()
  553. {
  554. return NULL;
  555. }
  556. // Function name : CPageListCtrlDesign::GetPropertiesWndPropPage
  557. // Description     : 
  558. // Return type : CXPropertiesWndPropPage* 
  559. CXPropertiesWndPropPage* CPageListCtrlDesign::GetPropertiesWndPropPage()
  560. {
  561. return (CXPropertiesWndPropPage*)GetParent()->GetParent();
  562. }
  563. // Function name : CPageListCtrlDesign::WindowProc
  564. // Description     : Correct repaint bug after user select from menu
  565. // Return type : LRESULT 
  566. // Argument         : UINT message
  567. // Argument         : WPARAM wParam
  568. // Argument         : LPARAM lParam
  569. LRESULT CPageListCtrlDesign::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
  570. {
  571. LRESULT lResult = CPageListCtrl::WindowProc(message, wParam, lParam);
  572. if (message == WM_COMMAND)
  573. if (HIWORD(wParam) == 0)
  574. {
  575. int iItem = NULL;
  576. UINT wID = LOWORD(wParam);
  577. if (wID >= GetFirstIDFree())
  578. if ((iItem = m_grMenu.Get(wID))>= -1 )
  579. ChangeGroup(iItem == -1 ? _T("") : GetItemText(iItem, m_nColumnName));
  580. Invalidate();
  581. }
  582. return lResult;
  583. }
  584. // Function name : CPageListCtrlDesign::IsSizingLine
  585. // Description     : Page design do not accept the resizing column, may be tomorrow
  586. // Return type : BOOL 
  587. BOOL CPageListCtrlDesign::IsSizingLine()
  588. {
  589. return FALSE;
  590. }
  591. // Function name : CPageListCtrlDesign::OnEndlabeledit
  592. // Description     : 
  593. // Return type : void 
  594. // Argument         : NMHDR* pNMHDR
  595. // Argument         : LRESULT* pResult
  596. void CPageListCtrlDesign::OnEndlabeledit(NMHDR* pNMHDR, LRESULT* pResult) 
  597. {
  598. LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
  599. CString sText(pDispInfo->item.pszText);
  600. if (!sText.IsEmpty())
  601. {
  602. CString soText = GetItemText(pDispInfo->item.iItem, m_nColumnName);
  603. ReplaceGroups(soText,sText);
  604. SetItemText(pDispInfo->item.iItem, m_nColumnName, sText);
  605. m_pOleDialog->SetModifiedFlag();
  606. }
  607. *pResult = 0;
  608. }
  609. // Function name : CPageListCtrlDesign::ReplaceGroups
  610. // Description     : Refresh all items on column group
  611. // Return type : void 
  612. // Argument         : int iItem
  613. void CPageListCtrlDesign::ReplaceGroups(LPCTSTR lpszOldGroup, LPCTSTR lpszNewGroup)
  614. {
  615. for (int i = 0; i < GetItemCount(); i++)
  616. if (!(GetItemText(i, m_nColumnGroup).IsEmpty()))
  617. if (GetItemText(i, m_nColumnType).CompareNoCase(group) != 0)
  618. if (GetItemText(i, m_nColumnGroup).CompareNoCase(lpszOldGroup) == 0)
  619. SetItemText(i, m_nColumnGroup, lpszNewGroup);
  620. }
  621. // Function name : CPageListCtrlDesign::IsGroup
  622. // Description     : Return TRUE if the lpszGroup is group
  623. // Return type : BOOL 
  624. // Argument         : LPCTSTR lpszGroup
  625. BOOL CPageListCtrlDesign::IsGroup(LPCTSTR lpszGroup)
  626. {
  627. CString g(lpszGroup);
  628. int iItem = NULL;
  629. LPCTSTR lpszGroupItem = GetFirstGroupName(iItem);
  630. while ( (lpszGroup) && (g.CompareNoCase(lpszGroup) != 0) ) 
  631. lpszGroup = GetNextGroupName(iItem);
  632. return lpszGroup != NULL;
  633. }
  634. // Function name : CPageListCtrlDesign::OnDeleteitem
  635. // Description     : 
  636. // Return type : void 
  637. // Argument         : NMHDR* pNMHDR
  638. // Argument         : LRESULT* pResult
  639. void CPageListCtrlDesign::OnDeleteitem(NMHDR* pNMHDR, LRESULT* pResult) 
  640. {
  641. NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
  642. if (GetItemText(pNMListView->iItem, m_nColumnType).CompareNoCase(group) == 0)
  643. ReplaceGroups(GetItemText(pNMListView->iItem, m_nColumnName));
  644. *pResult = 0;
  645. }
  646. // Function name : CPageListCtrlDesign::IsGroup
  647. // Description     : return TRUE if this contains some items of group type
  648. // Return type : BOOL 
  649. BOOL CPageListCtrlDesign::IsGroup()
  650. {
  651. int iItem = NULL;
  652. return GetFirstGroupName(iItem) != NULL;
  653. }