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

对话框与窗口

开发平台:

Visual C++

  1. // XTPControlGallery.h
  2. //
  3. // This file is a part of the XTREME COMMANDBARS 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. //{{AFX_CODEJOCK_PRIVATE
  21. #if !defined(__XTPCONTROLGALLERY_H__)
  22. #define __XTPCONTROLGALLERY_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER >= 1000
  25. #pragma once
  26. #endif // _MSC_VER >= 1000
  27. #include "XTPCommandBarsDefines.h"
  28. #include "XTPControlPopup.h"
  29. #include "XTPControlComboBox.h"
  30. #include "XTPScrollBar.h"
  31. class CXTPControlGalleryItems;
  32. class CXTPControlGallery;
  33. class CXTPControlGalleryPaintManager;
  34. const UINT XTP_GN_PREVIEWSTART      = 0x1010;
  35. const UINT XTP_GN_PREVIEWCANCEL     = 0x1011;
  36. const UINT XTP_GN_PREVIEWAPPLY      = 0x1012;
  37. const UINT XTP_GN_PREVIEWCHANGE     = 0x1013;
  38. const UINT XTP_GN_STARTDRAG         = 0x1014;
  39. const UINT XTP_GN_SELCHANGE         = 0x1015;
  40. //===========================================================================
  41. // Summary:
  42. //     CXTPControlGalleryItem is a CCmdTarget derived class. It represents single item of
  43. //     gallery object.
  44. //===========================================================================
  45. class _XTP_EXT_CLASS CXTPControlGalleryItem : public CXTPCmdTarget
  46. {
  47. public:
  48. //-----------------------------------------------------------------------
  49. // Summary:
  50. //     Constructs a CXTPControlGalleryItem object
  51. //-----------------------------------------------------------------------
  52. CXTPControlGalleryItem();
  53. public:
  54. //-----------------------------------------------------------------------
  55. // Summary:
  56. //     This method is called to get size of the item.
  57. // Returns:
  58. //     Size of the item
  59. // See Also: SetSize, CXTPControlGalleryItems::SetItemSize
  60. //-----------------------------------------------------------------------
  61. virtual CSize GetSize();
  62. //-----------------------------------------------------------------------
  63. // Summary:
  64. //     Call this method to set size of the individual item. You can call
  65. //     CXTPControlGalleryItems::SetItemSize to set default size for items
  66. // Parameters:
  67. //     szItem - Size of the item to be set
  68. //-----------------------------------------------------------------------
  69. void SetSize(CSize szItem);
  70. //-----------------------------------------------------------------------
  71. // Summary:
  72. //     This method is called to draw the item
  73. // Parameters:
  74. //     pDC      - Pointer to valid device context
  75. //     pGallery - Parent gallery of the item
  76. //     rcItem   - Bounding rectangle of the item
  77. //     bEnabled - TRUE to draw item enabled; FALSE - disabled
  78. //     bSelected - TRUE to draw item selected
  79. //     bPressed - TRUE to draw item pressed
  80. //     bChecked - TRUE to draw item checked
  81. //-----------------------------------------------------------------------
  82. virtual void Draw(CDC* pDC, CXTPControlGallery* pGallery, CRect rcItem, BOOL bEnabled, BOOL bSelected, BOOL bPressed, BOOL bChecked);
  83. //-----------------------------------------------------------------------
  84. // Summary:
  85. //     This method is called to get image for item
  86. //-----------------------------------------------------------------------
  87. CXTPImageManagerIcon* GetImage();
  88. //-----------------------------------------------------------------------
  89. // Summary:
  90. //     Call this method to determine if the item is label
  91. //-----------------------------------------------------------------------
  92. BOOL IsLabel() const;
  93. //-----------------------------------------------------------------------
  94. // Summary:
  95. //     Call this method to set caption of the item
  96. // Parameters:
  97. //     lpszCaption - Caption of the item to be set
  98. // See Also: GetCaption, SetToolTip, GetToolTip
  99. //-----------------------------------------------------------------------
  100. void SetCaption(LPCTSTR lpszCaption);
  101. //-----------------------------------------------------------------------
  102. // Summary:
  103. //     Call this method to set tooltip  of the item
  104. // Parameters:
  105. //     lpszToolTip - Tooltip of the item to be set
  106. // See Also: GetToolTip, SetCaption, GetCaption
  107. //-----------------------------------------------------------------------
  108. void SetToolTip(LPCTSTR lpszToolTip);
  109. //-----------------------------------------------------------------------
  110. // Summary:
  111. //     Retrieves tooltip of the item
  112. // See Also: SetToolTip, SetCaption, GetCaption
  113. //-----------------------------------------------------------------------
  114. CString GetToolTip() const;
  115. //-----------------------------------------------------------------------
  116. // Summary:
  117. //     Retrieves caption of the item
  118. // See Also: SetCaption, SetToolTip, GetToolTip
  119. //-----------------------------------------------------------------------
  120. CString GetCaption() const;
  121. //-----------------------------------------------------------------------
  122. // Summary:
  123. //     Retrieves index of the item
  124. //-----------------------------------------------------------------------
  125. int GetIndex() const;
  126. //-----------------------------------------------------------------------
  127. // Summary:
  128. //     Call this member to set the identifier of the item.
  129. // Parameters:
  130. //     nId - Identifier to be set.
  131. //-----------------------------------------------------------------------
  132. void SetID(int nId);
  133. //-----------------------------------------------------------------------
  134. // Summary:
  135. //     Call this member to get the item's identifier.
  136. // Returns:
  137. //     The identifier of the item.
  138. //-----------------------------------------------------------------------
  139. int GetID() const;
  140. //-----------------------------------------------------------------------
  141. // Summary:
  142. //     This method sets the 32-bit value associated with the item.
  143. // Parameters:
  144. //     dwData - Contains the new value to associate with the item.
  145. //-----------------------------------------------------------------------
  146. void SetData(DWORD_PTR dwData);
  147. //-----------------------------------------------------------------------
  148. // Summary:
  149. //     This method retrieves the application-supplied 32-bit value
  150. //     associated with the item.
  151. // Returns:
  152. //     The 32-bit value associated with the item.
  153. //-----------------------------------------------------------------------
  154. DWORD_PTR GetData() const;
  155. //-----------------------------------------------------------------------
  156. // Summary:
  157. //     Call this member to set the description of the item.
  158. // Parameters:
  159. //     lpszDescription - Description to be set.
  160. // See Also: SetCaption, SetTooltip
  161. //-----------------------------------------------------------------------
  162. void SetDescription(LPCTSTR lpszDescription);
  163. //-----------------------------------------------------------------------
  164. // Summary:
  165. //     Call this member to get the item's description.
  166. // Returns:
  167. //     The description of the control.
  168. //-----------------------------------------------------------------------
  169. CString GetDescription() const;
  170. protected:
  171. int m_nId;              // Identifier
  172. int m_nIndex;           // Index of the item
  173. int m_nImage;           // Image index
  174. CString m_strCaption;   // Caption of the item
  175. CString m_strToolTip;   // Tooltip of the item
  176. CString m_strDescriptionText; // Description of the item
  177. CXTPControlGalleryItems* m_pItems;  // Parent items collection
  178. DWORD_PTR m_dwData;     // 32-bit data
  179. CSize m_szItem;         // Size of the item; CSize(0, 0) - to use default value
  180. BOOL m_bLabel;          // TRUE if item is label
  181. friend class CXTPControlGalleryItems;
  182. friend class CXTPControlGallery;
  183. };
  184. //===========================================================================
  185. // Summary:
  186. //     CXTPControlGalleryItems is a CCmdTarget derived class. It represents a collection
  187. //     of the items for gallery control.
  188. //===========================================================================
  189. class _XTP_EXT_CLASS CXTPControlGalleryItems : public CXTPCmdTarget
  190. {
  191. DECLARE_DYNAMIC(CXTPControlGalleryItems)
  192. protected:
  193. //-----------------------------------------------------------------------
  194. // Summary:
  195. //     Constructs a CXTPControlGalleryItems object.
  196. // Parameters:
  197. //     pAction - Action for gallery control to link with.
  198. // Remarks:
  199. //     Protected constructor, use CreateItems to create items for gallery
  200. //-----------------------------------------------------------------------
  201. CXTPControlGalleryItems(CXTPControlAction* pAction);
  202. //-----------------------------------------------------------------------
  203. // Summary:
  204. //     Destroys a CXTPControlGalleryItems object, handles cleanup and deallocation
  205. //-----------------------------------------------------------------------
  206. ~CXTPControlGalleryItems();
  207. public:
  208. //-----------------------------------------------------------------------
  209. // Summary:
  210. //     Creates new items collection for gallery control
  211. // Parameters:
  212. //     pCommandBars - Parent Commandbars.
  213. //     nId - Identifier of the items
  214. //-----------------------------------------------------------------------
  215. static CXTPControlGalleryItems* AFX_CDECL CreateItems(CXTPCommandBars* pCommandBars, int nId);
  216. public:
  217. //-----------------------------------------------------------------------
  218. // Summary:
  219. //     Call this method to remove all items in collection
  220. //-----------------------------------------------------------------------
  221. void RemoveAll();
  222. //-----------------------------------------------------------------------
  223. // Summary:
  224. //     Call this member to remove item.
  225. // Parameters:
  226. //     nIndex - Index of the item to be removed.
  227. //-----------------------------------------------------------------------
  228. void Remove(int nIndex);
  229. //-----------------------------------------------------------------------
  230. // Summary:
  231. //     Call this member to add a new item.
  232. // Parameters:
  233. //     pItem - Item to be added
  234. //     nId   - Identifier of the item
  235. //     nImage - Image of the item
  236. //     lpszCaption - Caption of the item to be added
  237. // Returns:
  238. //     A pointer to the added item.
  239. //-----------------------------------------------------------------------
  240. CXTPControlGalleryItem* AddItem(int nId, int nImage);
  241. CXTPControlGalleryItem* AddItem(LPCTSTR lpszCaption, int nId, int nImage);
  242. CXTPControlGalleryItem* AddItem(CXTPControlGalleryItem* pItem, int nId = -1, int nImage = -1); //<combine CXTPControlGalleryItems::AddItem@int@int>
  243. CXTPControlGalleryItem* AddItem(LPCTSTR lpszCaption, int nImage = -1); //<combine CXTPControlGalleryItems::AddItem@int@int>
  244. //-----------------------------------------------------------------------
  245. // Summary:
  246. //     Call this member to insert a new item.
  247. // Parameters:
  248. //     nIndex - Index to insert new item
  249. //     pItem - Item to be added
  250. //     nId   - Identifier of the item
  251. //     nImage - Image of the item
  252. // Returns:
  253. //     A pointer to the added item.
  254. //-----------------------------------------------------------------------
  255. CXTPControlGalleryItem* InsertItem(int nIndex, CXTPControlGalleryItem* pItem, int nId = -1, int nImage = -1);
  256. //-----------------------------------------------------------------------
  257. // Summary:
  258. //     Call this member to add a new label item.
  259. // Parameters:
  260. //     nId   - Identifier of the item
  261. //     lpszCaption - Caption of the item to be added
  262. // Returns:
  263. //     A pointer to the added item.
  264. //-----------------------------------------------------------------------
  265. CXTPControlGalleryItem* AddLabel(int nId);
  266. CXTPControlGalleryItem* AddLabel(LPCTSTR lpszCaption); //<combine CXTPControlGalleryItems::AddLabel@int>
  267. //-----------------------------------------------------------------------
  268. // Summary:
  269. //     Call this method to set image manager for items
  270. // Parameters:
  271. //     pImageManager - new image manager to be set
  272. //-----------------------------------------------------------------------
  273. void SetImageManager(CXTPImageManager* pImageManager);
  274. //-----------------------------------------------------------------------
  275. // Summary:
  276. //     Retrieves image manager of the items
  277. //-----------------------------------------------------------------------
  278. CXTPImageManager* GetImageManager() const;
  279. //-----------------------------------------------------------------------
  280. // Summary:
  281. //     Determines default size of the items
  282. // See Also: SetItemSize
  283. //-----------------------------------------------------------------------
  284. CSize GetItemSize() const;
  285. //-----------------------------------------------------------------------
  286. // Summary:
  287. //     Call this method to set size of the item
  288. // Parameters:
  289. //     szItem - New size to be set
  290. // See Also: GetItemSize
  291. //-----------------------------------------------------------------------
  292. void SetItemSize(CSize szItem);
  293. //-----------------------------------------------------------------------
  294. // Summary:
  295. //     Call this member to get the count of the items
  296. // Returns:
  297. //     The count of the items in collection.
  298. //-----------------------------------------------------------------------
  299. int GetItemCount() const;
  300. //-----------------------------------------------------------------------
  301. // Summary:
  302. //     Call this member to return the item at the specified index.
  303. // Parameters:
  304. //     nIndex - An integer index.
  305. // Returns:
  306. //     The CXTPControlGalleryItem pointer currently at this index.
  307. //-----------------------------------------------------------------------
  308. CXTPControlGalleryItem* GetItem(int nIndex) const;
  309. //-----------------------------------------------------------------------
  310. // Summary:
  311. //     Call this member to enable/disable clipping items if selection was changed
  312. // Parameters:
  313. //     bClipItems - TRUE to enable clipping; FALSE to disable
  314. // Remarks:
  315. //     By default clipping is enabled
  316. //-----------------------------------------------------------------------
  317. void ClipItems(BOOL bClipItems);
  318. //-----------------------------------------------------------------------
  319. // Summary:
  320. //     This method is called if items was added or removed in collection
  321. //-----------------------------------------------------------------------
  322. void OnItemsChanged();
  323. //-----------------------------------------------------------------------
  324. // Summary:
  325. //     This method is called to draw the item
  326. // Parameters:
  327. //     pDC      - Pointer to valid device context
  328. //     pGallery - Parent gallery of the item
  329. //     pItem    - Item to be drawn
  330. //     rcItem   - Bounding rectangle of the item
  331. //     bEnabled - TRUE to draw item enabled; FALSE - disabled
  332. //     bSelected - TRUE to draw item selected
  333. //     bPressed - TRUE to draw item pressed
  334. //     bChecked - TRUE to draw item checked
  335. //-----------------------------------------------------------------------
  336. virtual BOOL PreDrawItem(CDC* pDC, CXTPControlGallery* pGallery, CXTPControlGalleryItem* pItem, CRect rcItem,
  337. BOOL bEnabled, BOOL bSelected, BOOL bPressed, BOOL bChecked);
  338. private:
  339. void UpdateIndexes(int nStart /*= 0*/);
  340. protected:
  341. CSize m_szItem;                         // Size of the items
  342. CXTPImageManager* m_pImageManager;      // Image manager of items
  343. BOOL m_bClipItems;                      // TRUE to clip items
  344. CXTPControlAction* m_pAction;           // Action of the items
  345. CArray<CXTPControlGalleryItem*, CXTPControlGalleryItem*> m_arrItems;    // Array of items
  346. private:
  347. friend class CXTPControlGalleryItem;
  348. friend class CXTPControlGallery;
  349. friend class CXTPControlGalleryAction;
  350. };
  351. //===========================================================================
  352. // Summary:
  353. //     CXTPControlGallery is a CXTPControlPopup derived class. It represents gallery control of toolbar.
  354. //===========================================================================
  355. class _XTP_EXT_CLASS CXTPControlGallery : public CXTPControlPopup, public CXTPScrollBase
  356. {
  357. DECLARE_XTP_CONTROL(CXTPControlGallery)
  358. public:
  359. //-------------------------------------------------------------------------
  360. // Summary:
  361. //     Structure contains item position description
  362. //-------------------------------------------------------------------------
  363. struct GALLERYITEM_POSITION
  364. {
  365. RECT rcItem;                    // Bounding rectangle of the item
  366. CXTPControlGalleryItem* pItem;  // Item pointer
  367. BOOL bBeginRow;                 // TRUE it item starts new row
  368. };
  369. public:
  370. //-----------------------------------------------------------------------
  371. // Summary:
  372. //     Constructs a CXTPControlGallery object
  373. //-----------------------------------------------------------------------
  374. CXTPControlGallery();
  375. //-----------------------------------------------------------------------
  376. // Summary:
  377. //     Destroys a CXTPControlGallery object, handles cleanup and deallocation
  378. //-----------------------------------------------------------------------
  379. ~CXTPControlGallery();
  380. public:
  381. //-----------------------------------------------------------------------
  382. // Summary:
  383. //     Call this method to set items for gallery
  384. // Parameters:
  385. //     pItems - Pointer to items to be set
  386. //-----------------------------------------------------------------------
  387. void SetItems(CXTPControlGalleryItems* pItems);
  388. //-----------------------------------------------------------------------
  389. // Summary:
  390. //     Call this method to set margins around items
  391. // Parameters:
  392. //     nLeft   - Left margin to be set
  393. //     nTop    - Top margin to be set
  394. //     nRight  - nRight margin to be set
  395. //     nBottom - Bottom margin to be set
  396. //-----------------------------------------------------------------------
  397. void SetItemsMargin(int nLeft, int nTop, int nRight, int nBottom);
  398. //-----------------------------------------------------------------------
  399. // Summary:
  400. //     Call this method to set size of the control
  401. // Parameters:
  402. //     szControl - New control size to be set
  403. //-----------------------------------------------------------------------
  404. void SetControlSize(CSize szControl);
  405. public:
  406. //-----------------------------------------------------------------------
  407. // Summary:
  408. //     Call this method to get count of items in gallery
  409. // Returns:
  410. //     Count of items in the gallery
  411. // See Also: SetItems, GetItem
  412. //-----------------------------------------------------------------------
  413. int GetItemCount() const;
  414. //-----------------------------------------------------------------------
  415. // Summary:
  416. //     Call this method to retrieve item by its index
  417. // Parameters:
  418. //     nIndex - Index of the item to be retrieved
  419. // Returns:
  420. //     Item in specified index; NULL if failed
  421. // See Also: SetItems, GetItemCount
  422. //-----------------------------------------------------------------------
  423. CXTPControlGalleryItem* GetItem(int nIndex) const;
  424. //-----------------------------------------------------------------------
  425. // Summary:
  426. //     Call this method to get items associated with the gallery
  427. // See Also: SetItems
  428. //-----------------------------------------------------------------------
  429. CXTPControlGalleryItems* GetItems() const;
  430. //-----------------------------------------------------------------------
  431. // Summary:
  432. //     Call this method to set selected item in the gallery
  433. // Parameters:
  434. //     nSelected - Item to select
  435. // See Also: GetSelectedItem
  436. //-----------------------------------------------------------------------
  437. void SetSelectedItem(int nSelected);
  438. //-----------------------------------------------------------------------
  439. // Summary:
  440. //     Call this method to get selected item in the gallery
  441. // See Also: SetSelectedItem
  442. //-----------------------------------------------------------------------
  443. int GetSelectedItem() const;
  444. //-----------------------------------------------------------------------
  445. // Summary:
  446. //     Call this method to set checked item identifier for the gallery
  447. // Parameters:
  448. //     nId - Item id
  449. // See Also: GetCheckedItem
  450. //-----------------------------------------------------------------------
  451. void SetCheckedItem(int nId);
  452. //-----------------------------------------------------------------------
  453. // Summary:
  454. //     Call this method to get checked item identifier
  455. // See Also: SetCheckedItem
  456. //-----------------------------------------------------------------------
  457. int GetCheckedItem() const;
  458. //-----------------------------------------------------------------------
  459. // Summary:
  460. //     Determines if there is selection in gallery
  461. // See Also: GetSelectedItem
  462. //-----------------------------------------------------------------------
  463. BOOL IsItemSelected() const;
  464. public:
  465. //-----------------------------------------------------------------------
  466. // Summary:
  467. //     Call this method to draw borders around gallery
  468. // Parameters:
  469. //     bShowBorders - TRUE to show borders around gallery
  470. // See Also: IsShowBorders
  471. //-----------------------------------------------------------------------
  472. void ShowBorders(BOOL bShowBorders);
  473. //-----------------------------------------------------------------------
  474. // Summary:
  475. //     Call this method to determine if borders are visible
  476. // See Also: ShowBorders
  477. //-----------------------------------------------------------------------
  478. BOOL IsShowBorders() const;
  479. //-----------------------------------------------------------------------
  480. // Summary:
  481. //     Call this method to show/hide labels of the gallery
  482. // Parameters:
  483. //     bShowLabels - TRUE to show labels
  484. //-----------------------------------------------------------------------
  485. void ShowLabels(BOOL bShowLabels);
  486. //-----------------------------------------------------------------------
  487. // Summary:
  488. //     Call this method to show/hide scrollbar of the gallery
  489. // Parameters:
  490. //     bShowScrollBar - TRUE to show scrollbar
  491. //-----------------------------------------------------------------------
  492. void ShowScrollBar(BOOL bShowScrollBar);
  493. public:
  494. //-----------------------------------------------------------------------
  495. // Summary:
  496. //     Determines total borders width for gallery
  497. //-----------------------------------------------------------------------
  498. virtual CRect GetBorders() const;
  499. //-----------------------------------------------------------------------
  500. // Summary:
  501. //     Determines bounding rectangle of the item
  502. // Parameters:
  503. //     nIndex - Item index.
  504. //-----------------------------------------------------------------------
  505. CRect GetItemDrawRect(int nIndex);
  506. //-----------------------------------------------------------------------
  507. // Summary:
  508. //     This method determines where a point lies in a specified item.
  509. // Parameters:
  510. //     point - Specifies the point to be tested.
  511. //     lpRect - Retrieves rectangle where item is located. Can be NULL
  512. // Returns:
  513. //     An index of CXTPControlGalleryItem that occupies the specified
  514. //     point or NULL if no control occupies the point.
  515. //-----------------------------------------------------------------------
  516. int HitTestItem(CPoint point, LPRECT lpRect = NULL) const;
  517. //-----------------------------------------------------------------------
  518. // Summary:
  519. //     Determines bounding rectangle of the items
  520. //-----------------------------------------------------------------------
  521. CRect GetItemsRect() const;
  522. //-----------------------------------------------------------------------
  523. // Summary:
  524. //     Redraw items
  525. // Parameters:
  526. //     lpRect - Rectangle to redraw
  527. //     bAnimate - TURE to animate changes
  528. //-----------------------------------------------------------------------
  529. void InvalidateItems(LPCRECT lpRect = NULL, BOOL bAnimate = TRUE);
  530. //-----------------------------------------------------------------------
  531. // Summary:
  532. //     Retrieves CXTPControlGalleryPaintManager pointer to draw gallery
  533. //-----------------------------------------------------------------------
  534. CXTPControlGalleryPaintManager* GetGalleryPaintManager() const;
  535. CXTPScrollBarPaintManager* GetScrollBarPaintManager() const;
  536. //-----------------------------------------------------------------------
  537. // Summary:
  538. //     Call this member to make sure that an item is visible in the gallery.
  539. //     This will scroll the gallery until the item is visible.
  540. // Parameters:
  541. //     nIndex - Item index that should be visible.
  542. //-----------------------------------------------------------------------
  543. void EnsureVisible(int nIndex);
  544. //-----------------------------------------------------------------------
  545. // Summary:
  546. //     Call this method to set scroll position of gallery
  547. // Parameters:
  548. //     nScrollPos - New scrollbar position to be set
  549. // See Also: GetScrollPos
  550. //-----------------------------------------------------------------------
  551. void SetScrollPos(int nScrollPos);
  552. //-----------------------------------------------------------------------
  553. // Summary:
  554. //     Determines position of scroll bar of gallery control
  555. // See Also: SetScrollPos
  556. //-----------------------------------------------------------------------
  557. int GetScrollPos() const;
  558. //-----------------------------------------------------------------------
  559. // Summary:
  560. //     Call this method to scroll gallery for specified top item
  561. // Parameters:
  562. //     nIndex - Item to be scrolled to.
  563. // See Also: SetScrollPos
  564. //-----------------------------------------------------------------------
  565. int SetTopIndex(int nIndex);
  566. //-----------------------------------------------------------------------
  567. // Summary:
  568. //     Call this method to allow user resize gallery
  569. // Parameters:
  570. //     bResizeWidth - Allow change width
  571. //     bResizeHeight - Allow change height
  572. // See Also: IsResizable
  573. //-----------------------------------------------------------------------
  574. void SetResizable(BOOL bResizeWidth = TRUE, BOOL bResizeHeight = TRUE);
  575. //-----------------------------------------------------------------------
  576. // Summary:
  577. //     Determines if control can be resized by user
  578. // See Also: SetResizable
  579. //-----------------------------------------------------------------------
  580. BOOL IsResizable() const;
  581. //-----------------------------------------------------------------------
  582. // Summary:
  583. //     This method is called when selection was changed by user
  584. //-----------------------------------------------------------------------
  585. virtual void OnSelectedItemChanged();
  586. public:
  587. //{{AFX_CODEJOCK_PRIVATE
  588. BOOL HasBottomSeparator() const;
  589. long GetNext(long nIndex, int nDirection) const;
  590. long GetNextInRow(long nIndex, int nDirection) const;
  591. long GetNextInColumn(long nIndex, int nDirection) const;
  592. long GetNextInPage(long nIndex, int nDirection) const;
  593. int FindItem(int nStartAfter, LPCTSTR lpszItem, BOOL bExact) const;
  594. CString GetItemCaption(int nIndex);
  595. BOOL IsScrollButtonEnabled(int ht);
  596. BOOL IsScrollBarEnabled() const;
  597. BOOL IsShowAsButton() const;
  598. void HideSelection();
  599. //}}AFX_CODEJOCK_PRIVATE
  600. protected:
  601. //-------------------------------------------------------------------------
  602. // Summary:
  603. //     This method is called to set position of all items
  604. //-------------------------------------------------------------------------
  605. void Reposition();
  606. //-----------------------------------------------------------------------
  607. // Summary:
  608. //      This method is called to draw all items
  609. // Parameters:
  610. //      pDC - Pointer to device context to draw
  611. //-----------------------------------------------------------------------
  612. void DrawItems(CDC* pDC);
  613. protected:
  614. //-----------------------------------------------------------------------
  615. // Summary:
  616. //     This method is called to copy the control.
  617. // Parameters:
  618. //     pControl - Points to a source CXTPControl object
  619. //     bRecursive - TRUE to copy recursively.
  620. //-----------------------------------------------------------------------
  621. void Copy(CXTPControl* pControl, BOOL bRecursive = FALSE);
  622. //-----------------------------------------------------------------------
  623. // Summary:
  624. //     Reads or writes this object from or to an archive.
  625. // Parameters:
  626. //     pPX - A CXTPPropExchange object to serialize to or from.
  627. //----------------------------------------------------------------------
  628. void DoPropExchange(CXTPPropExchange* pPX);
  629. protected:
  630. //{{AFX_CODEJOCK_PRIVATE
  631. virtual CSize GetSize(CDC* pDC);
  632. virtual void Draw(CDC* pDC);
  633. virtual void OnMouseMove(CPoint point);
  634. virtual void OnClick(BOOL bKeyboard = FALSE, CPoint pt = CPoint(0, 0));
  635. virtual void OnLButtonUp(CPoint point);
  636. virtual BOOL OnSetSelected(int bSelected);
  637. virtual void SetRect(CRect rcControl);
  638. void DoScroll(int cmd, int pos);
  639. void GetScrollInfo(SCROLLINFO* pSI);
  640. void PerformMouseMove(CPoint point);
  641. void PerformMouseDown(CPoint point);
  642. void PerformMouseUp(CPoint point);
  643. void FillControl(CDC* pDC, CRect rcControl);
  644. virtual void SetAction(CXTPControlAction* pAction);
  645. virtual int GetCustomizeMinWidth() const;
  646. virtual int GetCustomizeMinHeight() const;
  647. virtual BOOL IsCustomizeResizeAllow() const;
  648. protected:
  649. void DrawScrollBar(CDC* pDC);
  650. CRect GetScrollBarRect();
  651. void CalcScrollBarInfo(LPRECT lprc, SCROLLBARPOSINFO* pSBInfo, SCROLLINFO* pSI);
  652. BOOL OnHookMouseWheel(UINT nFlags, short zDelta, CPoint pt);
  653. BOOL IsFocused() const;
  654. BOOL OnHookKeyDown(UINT nChar, LPARAM lParam);
  655. virtual void OnScrollChanged();
  656. virtual INT_PTR OnToolHitTest(CPoint point, TOOLINFO* pTI) const;
  657. void OnExecute();
  658. BOOL OnSetPopup(BOOL bPopup);
  659. void OnMouseHover();
  660. protected:
  661. CWnd* GetParentWindow() const;
  662. virtual void AdjustExcludeRect(CRect& rc, BOOL /*bVertical*/);
  663. virtual void RedrawScrollBar();
  664. void DoAnimate();
  665. void StartAnimation(int nScrollPos);
  666. //}}AFX_CODEJOCK_PRIVATE
  667. protected:
  668. //{{AFX_CODEJOCK_PRIVATE
  669. virtual HRESULT GetAccessibleChildCount(long* pcountChildren);
  670. virtual HRESULT GetAccessibleChild(VARIANT varChild, IDispatch** ppdispChild);
  671. virtual HRESULT GetAccessibleName(VARIANT varChild, BSTR* pszName);
  672. virtual HRESULT GetAccessibleRole(VARIANT varChild, VARIANT* pvarRole);
  673. virtual HRESULT AccessibleLocation(long *pxLeft, long *pyTop, long *pcxWidth, long* pcyHeight, VARIANT varChild);
  674. virtual HRESULT AccessibleHitTest(long xLeft, long yTop, VARIANT* pvarChild);
  675. virtual HRESULT GetAccessibleState(VARIANT varChild, VARIANT* pvarState);
  676. virtual HRESULT GetAccessibleDefaultAction(VARIANT varChild, BSTR* pszDefaultAction);
  677. virtual HRESULT AccessibleDoDefaultAction(VARIANT varChild);
  678. virtual HRESULT AccessibleSelect(long flagsSelect, VARIANT varChild);
  679. //}}AFX_CODEJOCK_PRIVATE
  680. protected:
  681. int m_nChecked;             // Checked id
  682. int m_nSelected;            // Index of Selected item
  683. BOOL m_bHideSelection;      // TRUE to hide selection
  684. BOOL m_bPressed;            // TRUE if item is pressed
  685. CPoint m_ptPressed;         // Position of pressed item
  686. int m_nScrollPos;           // Scroll position
  687. int m_nScrollPosTarget;     // Scroll position
  688. double m_dAnimationStep;
  689. BOOL m_bKeyboardSelected;   // TRUE if item was selected using keyboard
  690. int m_nTotalHeight;         // Total height of items
  691. BOOL m_bShowLabels;         // TRUE to show labels
  692. BOOL m_bShowScrollBar;      // TRUE to show scrollbars
  693. BOOL m_bShowBorders;        // TRUE to show borders
  694. CRect m_rcMargin;           // Margins of gallery items
  695. BOOL m_bPreview;            // TRUE if control in preview mode
  696. int m_nResizable;
  697. CArray<GALLERYITEM_POSITION, GALLERYITEM_POSITION&> m_arrRects; // bounding rectangles
  698. friend class CXTPControlGalleryItems;
  699. };
  700. //===========================================================================
  701. // Summary:
  702. //     CXTPControlGalleryPaintManager is standalone class used to draw CXTPControlGallery object
  703. //===========================================================================
  704. class _XTP_EXT_CLASS CXTPControlGalleryPaintManager : public CXTPScrollBarPaintManager
  705. {
  706. public:
  707. //-----------------------------------------------------------------------
  708. // Summary:
  709. //     Constructs a CXTPControlGalleryPaintManager object
  710. // Parameters:
  711. //     pPaintManager - PaintManager of commandbars
  712. //-----------------------------------------------------------------------
  713. CXTPControlGalleryPaintManager(CXTPPaintManager* pPaintManager);
  714. public:
  715. //-----------------------------------------------------------------------
  716. // Summary:
  717. //     This method is called to draw label control
  718. // Parameters:
  719. //     pDC - Pointer to device context
  720. //     pLabel - Label item
  721. //     rc - Bounding rectangle of the label
  722. //-----------------------------------------------------------------------
  723. virtual void DrawLabel(CDC* pDC, CXTPControlGalleryItem* pLabel, CRect rc);
  724. //-----------------------------------------------------------------------
  725. // Summary:
  726. //     This method is called to draw background of the gallery
  727. // Parameters:
  728. //      pDC - Pointer to device context
  729. //      pGallery - CXTPControlGallery object to draw
  730. //      rc - Bounding rectangle of gallery object
  731. //-----------------------------------------------------------------------
  732. virtual void FillControl(CDC* pDC, CXTPControlGallery* pGallery, CRect rc);
  733. //-----------------------------------------------------------------------
  734. // Summary:
  735. //     This method is called to draw scrollbar of the gallery
  736. // Parameters:
  737. //     pDC - Pointer to device context
  738. //     pScrollBar - ScrollBar to draw
  739. //-----------------------------------------------------------------------
  740. virtual void DrawScrollBar(CDC* pDC, CXTPScrollBase* pScrollBar);
  741. //-----------------------------------------------------------------------
  742. // Summary:
  743. //     This method called to draw scrollbar of inplace gallery
  744. // Parameters:
  745. //     pDC - Pointer to device context
  746. //     pGallery - CXTPControlGallery object to draw
  747. // See Also: DrawScrollBar
  748. //-----------------------------------------------------------------------
  749. virtual void DrawPopupScrollBar(CDC* pDC, CXTPControlGallery* pGallery);
  750. //-------------------------------------------------------------------------
  751. // Summary:
  752. //     Recalculates gallery metrics
  753. //-------------------------------------------------------------------------
  754. virtual void RefreshMetrics();
  755. public:
  756. int m_cyPopupUp;            // Height of Up arrow of in place scrollbar
  757. int m_cyPopupDown;          // Height of Down arrow of in place scrollbar
  758. int m_cxPopup;              // Width of arrows of in place scrollbar
  759. };
  760. class _XTP_EXT_CLASS CXTPControlComboBoxGalleryPopupBar : public CXTPControlComboBoxPopupBar
  761. {
  762. DECLARE_XTP_COMMANDBAR(CXTPControlComboBoxGalleryPopupBar)
  763. protected:
  764. CXTPControlComboBoxGalleryPopupBar();
  765. public:
  766. //-----------------------------------------------------------------------
  767. // Summary:
  768. //     Creates a popup bar object.
  769. // Parameters:
  770. //     pCommandBars - Points to a CXTPCommandBars object
  771. // Returns:
  772. //     A pointer to a CXTPControlComboBoxGalleryPopupBar object
  773. //-----------------------------------------------------------------------
  774. static CXTPControlComboBoxGalleryPopupBar* AFX_CDECL CreateComboBoxGalleryPopupBar(CXTPCommandBars* pCommandBars);
  775. protected:
  776. //{{AFX_CODEJOCK_PRIVATE
  777. DECLARE_MESSAGE_MAP()
  778. BOOL SetTrackingMode(int bMode, BOOL bSelectFirst, BOOL bKeyboard);
  779. BOOL OnHookKeyDown(UINT nChar, LPARAM lParam);
  780. CXTPControlGallery* GetGalleryItem() const;
  781. //{{AFX_VIRUAL(CXTPControlComboBoxList)
  782. virtual int GetCurSel() const {
  783. return GetGalleryItem()->GetSelectedItem();
  784. }
  785. virtual int FindString(int nStartAfter, LPCTSTR lpszItem) const {
  786. return GetGalleryItem()->FindItem(nStartAfter, lpszItem, FALSE);
  787. }
  788. virtual int FindStringExact(int nIndexStart, LPCTSTR lpsz) const {
  789. return GetGalleryItem()->FindItem(nIndexStart, lpsz, TRUE);
  790. }
  791. virtual int SetTopIndex(int nIndex) {
  792. return GetGalleryItem()->SetTopIndex(nIndex);
  793. }
  794. virtual void SetCurSel(int nIndex) {
  795. GetGalleryItem()->SetSelectedItem(nIndex);
  796. }
  797. virtual void GetText(int nIndex, CString& rString) const {
  798. rString = GetGalleryItem()->GetItemCaption(nIndex);
  799. }
  800. //}}AFX_VIRUAL
  801. //{{AFX_MSG(CXTPControlComboBoxList)
  802. void OnLButtonUp(UINT nFlags, CPoint point);
  803. //}}AFX_MSG
  804. //}}AFX_CODEJOCK_PRIVATE
  805. };
  806. AFX_INLINE BOOL CXTPControlGalleryItem::IsLabel() const {
  807. return m_bLabel;
  808. }
  809. AFX_INLINE void CXTPControlGalleryItem::SetCaption(LPCTSTR lpszCaption) {
  810. m_strCaption = lpszCaption;
  811. }
  812. AFX_INLINE void CXTPControlGalleryItem::SetToolTip(LPCTSTR lpszToolTip) {
  813. m_strToolTip = lpszToolTip;
  814. }
  815. AFX_INLINE CString CXTPControlGalleryItem::GetToolTip() const {
  816. return m_strToolTip;
  817. }
  818. AFX_INLINE CString CXTPControlGalleryItem::GetCaption() const {
  819. return m_strCaption;
  820. }
  821. AFX_INLINE void CXTPControlGalleryItem::SetDescription(LPCTSTR lpszDescription) {
  822. m_strDescriptionText = lpszDescription;
  823. }
  824. AFX_INLINE CString CXTPControlGalleryItem::GetDescription() const {
  825. return m_strDescriptionText;
  826. }
  827. AFX_INLINE void CXTPControlGalleryItem::SetID(int nId) {
  828. m_nId = nId;
  829. }
  830. AFX_INLINE int CXTPControlGalleryItem::GetID() const {
  831. return m_nId;
  832. }
  833. AFX_INLINE CXTPImageManager* CXTPControlGalleryItems::GetImageManager() const {
  834. return m_pImageManager;
  835. }
  836. AFX_INLINE CSize CXTPControlGalleryItems::GetItemSize() const {
  837. return m_szItem;
  838. }
  839. AFX_INLINE void CXTPControlGalleryItems::SetItemSize(CSize szItem) {
  840. m_szItem = szItem;
  841. }
  842. AFX_INLINE void CXTPControlGalleryItems::ClipItems(BOOL bClipItems) {
  843. m_bClipItems = bClipItems;
  844. }
  845. AFX_INLINE void CXTPControlGalleryItem::SetData(DWORD_PTR dwData) {
  846. m_dwData = dwData;
  847. }
  848. AFX_INLINE DWORD_PTR CXTPControlGalleryItem::GetData() const {
  849. return m_dwData;
  850. }
  851. AFX_INLINE void CXTPControlGallery::SetControlSize(CSize szControl) {
  852. m_nWidth = szControl.cx;
  853. m_nHeight = szControl.cy;
  854. }
  855. AFX_INLINE BOOL CXTPControlGallery::IsShowBorders() const {
  856. return m_bShowBorders;
  857. }
  858. AFX_INLINE void CXTPControlGallery::ShowLabels(BOOL bShowLabels) {
  859. m_bShowLabels = bShowLabels;
  860. }
  861. AFX_INLINE void CXTPControlGallery::ShowScrollBar(BOOL bShowScrollBar) {
  862. m_bShowScrollBar = bShowScrollBar;
  863. }
  864. AFX_INLINE void CXTPControlGallery::ShowBorders(BOOL bShowBorders) {
  865. m_bShowBorders = bShowBorders;
  866. }
  867. AFX_INLINE BOOL CXTPControlGallery::IsItemSelected() const {
  868. return !m_bHideSelection && GetSelectedItem() != -1;
  869. }
  870. AFX_INLINE BOOL CXTPControlGallery::IsResizable() const {
  871. return !IsShowAsButton() && GetItems() ? m_nResizable : FALSE;
  872. }
  873. AFX_INLINE BOOL CXTPControlGallery::IsCustomizeResizeAllow() const {
  874. return IsResizable();
  875. }
  876. #endif // #if !defined(__XTPCONTROLGALLERY_H__)