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

对话框与窗口

开发平台:

Visual C++

  1. // XTPTaskPanel.h interface for the CXTPTaskPanel class.
  2. //
  3. // This file is a part of the XTREME TASKPANEL 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(__XTPTASKPANEL_H__)
  22. #define __XTPTASKPANEL_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER > 1000
  25. #pragma once
  26. #endif // _MSC_VER > 1000
  27. class CXTPTaskPanelGroups;
  28. class CXTPTaskPanelGroup;
  29. class CXTPTaskPanelPaintManager;
  30. class CXTPTaskPanelItems;
  31. class CXTPTaskPanelItem;
  32. class CXTPTaskPanelGroupItem;
  33. class CXTPImageManager;
  34. class CXTPToolTipContext;
  35. class CXTPTaskPanelAnimation;
  36. class CXTPMarkupContext;
  37. #include "Common/XTPSystemHelpers.h"
  38. #include "XTPTaskPanelDefines.h"
  39. //===========================================================================
  40. // Summary:
  41. //     CXTPTaskPanelScrollButton is a standalone class that represents a
  42. //     task panel scroll button.
  43. // Remarks:
  44. //     The task panel uses a scroll button in the group caption if the
  45. //     group is expandable to expand and retract the group.
  46. //
  47. //     The task panel also uses scroll buttons in task panel group objects
  48. //     when there are more items in the group than can be viewed.  Only the
  49. //     necessary buttons are displayed.  If the items in the group can not
  50. //     be scrolled anymore, then that button is removed.  Scroll buttons are
  51. //     only visible when using the xtpTaskPanelBehaviourList and
  52. //     xtpTaskPanelBehaviourToolbox task panel behaviors.  The group scroll
  53. //     buttons are stored in m_pScrollButton.
  54. // See Also:
  55. //     m_pScrollButton
  56. //===========================================================================
  57. class CXTPTaskPanelScrollButton
  58. {
  59. public:
  60. //-----------------------------------------------------------------------
  61. // Summary:
  62. //     Constructs a CXTPTaskPanelScrollButton object.
  63. // Parameters:
  64. //     bScrollUp - If TRUE, the button is the "scroll up" button, If FALSE,
  65. //                 the button is a "scroll down" button.
  66. //-----------------------------------------------------------------------
  67. CXTPTaskPanelScrollButton(BOOL bScrollUp);
  68. public:
  69. //-----------------------------------------------------------------------
  70. // Summary:
  71. //     Call this member to determine if the scroll button is visible.
  72. // Returns:
  73. //     TRUE is the scroll button is visible, FALSE is the scroll button
  74. //     is not visible.
  75. //-----------------------------------------------------------------------
  76. BOOL IsVisible() const;
  77. public:
  78. BOOL bScrollUp;                     // If TRUE, the button is the "scroll up" button, If FALSE, the button is a "scroll down" button.
  79. BOOL bEnabled;                      // TRUE if the scroll button is enabled, FALSE if disabled.
  80. BOOL bPressed;                      // TRUE if scroll button is currently pressed, FALSE otherwise.
  81. CRect rcButton;                     // Bounding rectangle of the scroll button.  Will be empty is the button is not visible.
  82. BOOL bHot;                          // TRUE if scroll button is "hot", FALSE otherwise.  A scroll button is how when the mouse cursor is placed over the button.
  83. CXTPTaskPanelGroup* pGroupScroll;   // Pointer to the group that uses this group item scroll button.
  84. CXTPTaskPanelGroup* pGroupCaption;  // Pointer to the group that uses this group caption scroll button.
  85. };
  86. //---------------------------------------------------------------------------
  87. // Summary:
  88. //     CXTPTaskPanel is a CWnd derived class. It is used to implement
  89. //     an Explorer and Office-like Task Panel control.
  90. //---------------------------------------------------------------------------
  91. class _XTP_EXT_CLASS CXTPTaskPanel : public CWnd, public CXTPAccessible
  92. {
  93. DECLARE_DYNAMIC(CXTPTaskPanel)
  94. DECLARE_INTERFACE_MAP()
  95. private:
  96. class CPanelDropTarget;
  97. public:
  98. //===========================================================================
  99. // Summary:
  100. //     CRepositionContext is helper class to lock/unlock redraw of Task Panel
  101. //===========================================================================
  102. class _XTP_EXT_CLASS CRepositionContext
  103. {
  104. public:
  105. //-----------------------------------------------------------------------
  106. // Summary:
  107. //     Constructs a CRepositionContext object.
  108. // Parameters:
  109. //     pTaskPanel - Parent task panel class.
  110. //-----------------------------------------------------------------------
  111. CRepositionContext(CXTPTaskPanel* pTaskPanel)
  112. : m_pTaskPanel(pTaskPanel)
  113. {
  114. if (m_pTaskPanel) m_pTaskPanel->SetLockRedraw(TRUE);
  115. }
  116. //-----------------------------------------------------------------------
  117. // Summary:
  118. //     Destroys a CRepositionContext object, handles cleanup and deallocation.
  119. //-----------------------------------------------------------------------
  120. ~CRepositionContext()
  121. {
  122. if (m_pTaskPanel) m_pTaskPanel->SetLockRedraw(FALSE);
  123. }
  124. protected:
  125. CXTPTaskPanel* m_pTaskPanel;            // Parent Task Panel class
  126. };
  127. public:
  128. //-----------------------------------------------------------------------
  129. // Summary:
  130. //     Constructs a TaskPanel object
  131. //-----------------------------------------------------------------------
  132. CXTPTaskPanel();
  133. //-----------------------------------------------------------------------
  134. // Summary:
  135. //     Destroys a CXTPTaskPanel object, handles cleanup and deallocation.
  136. //-----------------------------------------------------------------------
  137. virtual ~CXTPTaskPanel();
  138. public:
  139. //-----------------------------------------------------------------------
  140. // Summary:
  141. //     This method creates the TaskPanel control.
  142. // Parameters:
  143. //     dwStyle - Style for the TaskPanel.
  144. //     rect -  Specifies the size and position of the TaskPanel control.
  145. //     pParentWnd - Specifies the parent window of the TaskPanel control.
  146. //     nID - Specifies the TaskPanel control ID.
  147. // Returns:
  148. //     TRUE if successful, otherwise returns FALSE.
  149. //-----------------------------------------------------------------------
  150. BOOL Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID);
  151. //-----------------------------------------------------------------------
  152. // Summary:
  153. //     Call this member to get group collection of TaskPanel control.
  154. // Returns:
  155. //     A pointer to CXTPTaskPanelItems class that represents the groups of TaskPanel.
  156. //-----------------------------------------------------------------------
  157. CXTPTaskPanelItems* GetGroups() const;
  158. //-----------------------------------------------------------------------
  159. // Summary:
  160. //     Call this member to add a new group.
  161. // Parameters:
  162. //     nID    - Identifier of the group to be added.
  163. //     nImage - Image index of group to be added.
  164. // Returns:
  165. //     A pointer to the created CXTPTaskPanelGroup class
  166. // See Also: SetGroupImageList
  167. //-----------------------------------------------------------------------
  168. CXTPTaskPanelGroup* AddGroup(UINT nID, int nImage = -1);
  169. //-----------------------------------------------------------------------
  170. // Summary:
  171. //     Call this member to find a group with specified identifier.
  172. // Parameters:
  173. //     nID - Identifier of group to be found.
  174. // Returns:
  175. //     A pointer to group if successful; otherwise returns NULL.
  176. //-----------------------------------------------------------------------
  177. CXTPTaskPanelGroup* FindGroup(UINT nID) const;
  178. //-----------------------------------------------------------------------
  179. // Summary:
  180. //     Call this member to find a CXTPTaskPanelGroupItem with the specified identifier.
  181. // Parameters:
  182. //     nID - Identifier of the CXTPTaskPanelGroupItem to be found.
  183. // Returns:
  184. //     A pointer to CXTPTaskPanelGroupItem if successful; otherwise returns NULL.
  185. //-----------------------------------------------------------------------
  186. CXTPTaskPanelGroupItem* FindItem(UINT nID) const;
  187. //-----------------------------------------------------------------------
  188. // Summary:
  189. //     This method retrieves a group with specified index.
  190. // Parameters:
  191. //     nIndex - Specifies the zero-based index of the group to retrieve.
  192. // Returns:
  193. //     A pointer to a CXTPTaskPanelGroup object.
  194. //-----------------------------------------------------------------------
  195. CXTPTaskPanelGroup* GetAt(int nIndex) const;
  196. //-----------------------------------------------------------------------
  197. // Summary:
  198. //     Call this member to determine the number of groups.
  199. // Returns:
  200. //     Number of the group.
  201. //-----------------------------------------------------------------------
  202. int GetGroupCount() const;
  203. //-----------------------------------------------------------------------
  204. // Summary:
  205. //     Call this method to get scroll offset.
  206. // Returns:
  207. //     Scroll offset.
  208. // Remarks:
  209. //     This returns the scroll offset of the scroll bar that is displayed to
  210. //     scroll the entire task panel.  This does return the offset to the
  211. //     scroll bar placed inside a task panel group.  The task panel group offset
  212. //     can be retrieved with CXTPTaskPanelGroup::GetScrollOffsetPos and
  213. //     CXTPTaskPanelGroup::GetOffsetItem
  214. // See Also:
  215. //  CXTPTaskPanelGroup::GetOffsetItem, CXTPTaskPanelGroup::GetScrollOffsetPos
  216. //-----------------------------------------------------------------------
  217. int GetScrollOffset() const;
  218. //-----------------------------------------------------------------------
  219. // Summary:
  220. //     Retrieves the current height of a client area.
  221. // Returns:
  222. //     Current height of a client area
  223. //-----------------------------------------------------------------------
  224. int GetClientHeight() const;
  225. //-----------------------------------------------------------------------
  226. // Summary:
  227. //     Call this method to reposition the groups in the task panel.
  228. // Parameters:
  229. //     bRecalcOnly - TRUE to recalculate only without positioning.
  230. //-----------------------------------------------------------------------
  231. void Reposition(BOOL bRecalcOnly = TRUE);
  232. //-----------------------------------------------------------------------
  233. // Summary:
  234. //     Call this method to set hot item of the TaskPanel control.
  235. // Parameters:
  236. //     pItem - Item to be hot.
  237. //-----------------------------------------------------------------------
  238. void SetHotItem(CXTPTaskPanelItem* pItem);
  239. //-----------------------------------------------------------------------
  240. // Summary:
  241. //     Call this member to retrieve the current "hot" item.
  242. // Returns:
  243. //     Retrieves the current hot item.
  244. //-----------------------------------------------------------------------
  245. CXTPTaskPanelItem* GetHotItem() const;
  246. //-----------------------------------------------------------------------
  247. // Summary:
  248. //     Call this method to focus the specified item.
  249. // Parameters:
  250. //     pItem - Item to be focused.
  251. //     bDrawFocusRect - TRUE to draw focused rect.
  252. //-----------------------------------------------------------------------
  253. virtual void SetFocusedItem(CXTPTaskPanelItem* pItem, BOOL bDrawFocusRect = FALSE, BOOL bSetFocus = TRUE);
  254. //-----------------------------------------------------------------------
  255. // Summary:
  256. //     Call this member to make sure that an item is visible in the task panel.
  257. //     This will scroll the task panel and group that the item is in
  258. //     until the item is visible.
  259. // Parameters:
  260. //     pItem - Item that should be visible.
  261. //-----------------------------------------------------------------------
  262. void EnsureVisible(CXTPTaskPanelItem* pItem);
  263. //-----------------------------------------------------------------------
  264. // Summary:
  265. //     Call this method to get focused item.
  266. // Returns:
  267. //     Item currently focused.
  268. //-----------------------------------------------------------------------
  269. CXTPTaskPanelItem* GetFocusedItem() const;
  270. //-----------------------------------------------------------------------
  271. // Summary:
  272. //     Call this member to determine if a focus rectangle is drawn around
  273. //     items when the Up and Down arrows are used to navigate items.
  274. // Returns:
  275. //     TRUE to draw a focus rectangle around an item when the Up and Down arrows
  276. //     are used to navigate the items in the TaskPanel.
  277. // See Also:
  278. //     DrawFocusRect
  279. //-----------------------------------------------------------------------
  280. BOOL IsDrawFocusRect() const;
  281. //-----------------------------------------------------------------------
  282. // Summary:
  283. //     This method determines where a point lies in a specified group.
  284. // Parameters:
  285. //     pt - Specifies the point to be tested.
  286. //     pbCaption - Pointer to BOOL value to return if point lies on group caption.
  287. // Returns:
  288. //     A pointer to a CXTPTaskPanelGroup item that occupies the specified point or NULL if
  289. //     no group occupies the point.
  290. //-----------------------------------------------------------------------
  291. CXTPTaskPanelGroup* HitTestGroup(CPoint pt, BOOL* pbCaption = NULL) const;
  292. //-----------------------------------------------------------------------
  293. // Summary:
  294. //     This method determines where a point lies in a specified item.
  295. // Parameters:
  296. //     pt - Specifies the point to be tested.
  297. //     bClientAvail - TRUE to return group item if point lies in its client area.
  298. // Returns:
  299. //     A pointer to a CXTPTaskPanelItem item that occupies the specified point or NULL if
  300. //     no item occupies the point.
  301. //-----------------------------------------------------------------------
  302. CXTPTaskPanelItem* HitTestItem(CPoint pt, BOOL bClientAvail = FALSE) const;
  303. //-----------------------------------------------------------------------
  304. // Summary:
  305. //     Call this method to set group outer margins.
  306. // Parameters:
  307. //     nLeft - Left margin.
  308. //     nTop - Top margin,
  309. //     nRight - Right margin,
  310. //     nBottom - Bottom margin.
  311. //     nMiddle - Margin between groups.
  312. // Remarks:
  313. //     This is used as the default margins for all groups.
  314. // See Also:
  315. //     GetMargins, CXTPTaskPanelPaintManager::GetGroupSpacing,
  316. //     CXTPTaskPanelPaintManager::GetGroupOuterMargins, CXTPTaskPanelPaintManager::GetGroupInnerMargins
  317. //     CXTPTaskPanelPaintManager::GetControlMargins
  318. //-----------------------------------------------------------------------
  319. void SetMargins(long nLeft, long nTop, long nRight, long nBottom, long nMiddle);
  320. //-----------------------------------------------------------------------
  321. // Summary:
  322. //     Assigns an image list to a TaskPanel control.
  323. // Parameters:
  324. //     pImageList - Pointer to the image list to be assigned to the TaskPanel control.
  325. //                  This parameter can be NULL to update size of item icons.
  326. //     szItemIcon - Items icon size to be used.
  327. // See Also: SetGroupImageList, GetImageManager
  328. //-----------------------------------------------------------------------
  329. void SetImageList(CImageList* pImageList, CSize szItemIcon = CSize(16, 16));
  330. //-----------------------------------------------------------------------
  331. // Summary:
  332. //     Assigns an image list to a TaskPanel's groups.
  333. // Parameters:
  334. //     pImageList  - Pointer to the image list to be assigned to the groups of TaskPanel.
  335. //                   This parameter can be NULL to update size of group icons.
  336. //     szGroupIcon - Groups icon size to be used.
  337. // See Also: SetImageList, GetImageManager
  338. //-----------------------------------------------------------------------
  339. void SetGroupImageList(CImageList* pImageList, CSize szGroupIcon = CSize(32, 32));
  340. //-----------------------------------------------------------------------
  341. // Summary:
  342. //     Retrieves Image manager associated with Task Panel.
  343. // Returns:
  344. //     Pointer to the image manager object that stores the images in
  345. //     the task panel.
  346. //-----------------------------------------------------------------------
  347. CXTPImageManager* GetImageManager() const;
  348. //-----------------------------------------------------------------------
  349. // Summary:
  350. //     Call this method to assign new image manager.
  351. // Parameters:
  352. //     pImageManager - Pointer to the image manager object that stores the
  353. //     images in the task panel.
  354. //-----------------------------------------------------------------------
  355. void SetImageManager(CXTPImageManager* pImageManager);
  356. //-----------------------------------------------------------------------
  357. // Summary:
  358. //     Call this method to set groups to expandable.
  359. // Parameters:
  360. //     bExpandable - TRUE if TaskPanel groups are expandable.
  361. //-----------------------------------------------------------------------
  362. void SetExpandable(BOOL bExpandable);
  363. //-----------------------------------------------------------------------
  364. // Summary:
  365. //     Call this method to determine if groups are expandable
  366. // Returns:
  367. //     TRUE if groups are expandable, FALSE otherwise.
  368. //-----------------------------------------------------------------------
  369. BOOL IsExpandable() const;
  370. //-----------------------------------------------------------------------
  371. // Summary:
  372. //     Call this method to set animation of the TaskPanel control
  373. // Parameters:
  374. //     panelAnimation - Animation type to be set. Can be any of the values listed in the Remarks section.
  375. // Remarks:
  376. //     Animation type can be one of the following:
  377. //     * <b>xtpTaskPanelAnimationYes</b> Default value, enables animation.
  378. //     * <b>xtpTaskPanelAnimationNo</b> Disables animation.
  379. //     * <b>xtpTaskPanelAnimationSystem</b> Use system settings to determine animation.
  380. //
  381. // See Also:
  382. //     CXTPTaskPanel::AnimateGroups, CXTPTaskPanel::GetAnimation,
  383. //     CXTPTaskPanelGroup::IsDirty, CXTPTaskPanelGroup::OnAnimate, XTPTaskPanelAnimation
  384. //-----------------------------------------------------------------------
  385. void SetAnimation(XTPTaskPanelAnimation panelAnimation);
  386. //-----------------------------------------------------------------------
  387. // Summary:
  388. //     Call this method to get animation type.
  389. // Returns:
  390. //     Animation type of TaskPanel control.
  391. // See Also:
  392. //     CXTPTaskPanel::AnimateGroups, CXTPTaskPanel::SetAnimation,
  393. //     CXTPTaskPanelGroup::IsDirty, CXTPTaskPanelGroup::OnAnimate, XTPTaskPanelAnimation
  394. //-----------------------------------------------------------------------
  395. XTPTaskPanelAnimation GetAnimation() const;
  396. //-----------------------------------------------------------------------
  397. // Summary:
  398. //     Call this member to set right-to-left mode.
  399. // Parameters:
  400. //     bRightToLeft - TRUE to set right-to-left reading-order properties.
  401. //-----------------------------------------------------------------------
  402. void SetLayoutRTL(BOOL bRightToLeft);
  403. //-----------------------------------------------------------------------
  404. // Summary:
  405. //     Call this method to lock/unlock redraw of controls.
  406. // Parameters:
  407. //     bLockRedraw - TRUE to lock redraw.
  408. // Remarks:
  409. //     bLockRedraw should be TRUE when you want to add a lot of items and
  410. //     don't want CXTPTaskPanel::Reposition and CXTPTaskPanel::ReDraw called
  411. //     each time an item is added.
  412. //-----------------------------------------------------------------------
  413. void SetLockRedraw(BOOL bLockRedraw);
  414. //-----------------------------------------------------------------------
  415. // Summary:
  416. //     Call this method to get next item in tab order.
  417. // Parameters:
  418. //     pItem - Current item.
  419. //     nDirection - Direction to find (1 to forward, -1 to backward)
  420. //     bTab - TRUE to use tabulation.
  421. //     bSkipRowItems - TRUE to get next item in next row.
  422. // Returns:
  423. //     Next item.
  424. //-----------------------------------------------------------------------
  425. CXTPTaskPanelItem* GetNextItem(CXTPTaskPanelItem* pItem, int nDirection, BOOL bTab, BOOL bSkipRowItems = TRUE) const;
  426. //-----------------------------------------------------------------------
  427. // Summary:
  428. //     This method is called when user clicks on the specified item.
  429. // Parameters:
  430. //     pItem - Pointer to clicked item.
  431. //-----------------------------------------------------------------------
  432. virtual void OnClick(CXTPTaskPanelGroupItem* pItem);
  433. //-----------------------------------------------------------------------
  434. // Summary:
  435. //     This member is called to determine if the current group position
  436. //     is "dirty" i.e. Moving during animation.
  437. // Returns:
  438. //     TRUE if current position of group is dirty.
  439. // Remarks:
  440. //     During animation, the group moves from it's oldcurrent position to the newtarget
  441. //     position.  IsDirty indicates that the animation has not finished yet
  442. //     and its current position is <> to the target position.  The oldcurrent position
  443. //     is stored in m_rcGroupCurrent, and the newtarget position is stored in
  444. //     m_rcGroupTarget.
  445. //
  446. //     Animation occurs when the task panel first becomes visible and when
  447. //     the expandcollapse button is clicked in the group caption.
  448. // See Also:
  449. //     AnimateGroups, SetAnimation, GetAnimation, CXTPTaskPanelGroup::OnAnimate,
  450. //     CXTPTaskPanelGroup::m_rcGroupTarget, CXTPTaskPanelGroup::m_rcGroupCurrent,
  451. //     CXTPTaskPanelGroup::IsExpanding, CXTPTaskPanelGroup::IsExpanded,
  452. //     CXTPTaskPanelGroup::SetExpanded
  453. //-----------------------------------------------------------------------
  454. BOOL IsDirty() const;
  455. //-----------------------------------------------------------------------
  456. // Summary:
  457. //     This member is called then the task panel's scroll bar has been scrolled.
  458. // Parameters:
  459. //     nCurPos - Position on scroll bar to scroll to.
  460. // Remarks:
  461. //     This member is called when the scroll bar that is displayed to scroll the entire
  462. //     task panel is scrolled.  This does not get called when the scroll bar placed inside
  463. //     a task panel group is scrolled.
  464. //-----------------------------------------------------------------------
  465. void OnSrollChanged(int nCurPos);
  466. //-----------------------------------------------------------------------
  467. // Summary:
  468. //     This member is called to animate the groups when animation is enabled.
  469. // Parameters:
  470. //     bCheckDirty - TRUE if the group(s) have not reached their target location
  471. //                   during animation, FALSE if the group(s) have reached their
  472. //                   target location.
  473. // Returns:
  474. //     TRUE if the group(s) are still dirty (has not reached their target location),
  475. //     FALSE if the group(s) have moved to their target location.
  476. // Remarks:
  477. //     This is called when the expandcollapse button is pressed in the
  478. //     group caption causing the group to expandcontract.
  479. // See Also:
  480. //     SetAnimation, GetAnimation, CXTPTaskPanelGroup::OnAnimate,
  481. //     CXTPTaskPanelGroup::m_rcGroupTarget, CXTPTaskPanelGroup::m_rcGroupCurrent,
  482. //     CXTPTaskPanelGroup::IsExpanding, CXTPTaskPanelGroup::IsExpanded,
  483. //     CXTPTaskPanelGroup::SetExpanded
  484. //-----------------------------------------------------------------------
  485. BOOL AnimateGroups(BOOL bCheckDirty = TRUE);
  486. //-----------------------------------------------------------------------
  487. // Summary:
  488. //     Call this member to retrieve the size used to display item icons.
  489. // Remarks:
  490. //     By default, item icons are 16x16.  To change this size you must
  491. //     specify the size in m_szItemIcon.  "m_szItemIcon = CSize(16, 16)"
  492. // Returns:
  493. //     Size of item icons.
  494. //-----------------------------------------------------------------------
  495. CSize GetItemIconSize() const;
  496. //-----------------------------------------------------------------------
  497. // Summary:
  498. //     Call this member to retrieve the size used to display group icons.
  499. // Remarks:
  500. //     By default, item icons are 32x32.  To change this size you must
  501. //     specify the size in m_szGroupIcon.
  502. //     <code>m_szGroupIcon = CSize(32, 32)"</code>
  503. // Returns:
  504. //     Size of group icons.
  505. //-----------------------------------------------------------------------
  506. CSize GetGroupIconSize() const;
  507. //-----------------------------------------------------------------------
  508. // Summary:
  509. //     Call this member function to specify the size of the Icons
  510. //     used in the TaskPanel.
  511. // Parameters:
  512. //     szIcon - Size of icons used.
  513. //-----------------------------------------------------------------------
  514. void SetIconSize(CSize szIcon);
  515. //-----------------------------------------------------------------------
  516. // Summary:
  517. //     Call this member function to specify the size of the group icons
  518. //     used in the TaskPanel.
  519. // Parameters:
  520. //     szIcon - Size of icons used.
  521. //-----------------------------------------------------------------------
  522. void SetGroupIconSize(CSize szIcon);
  523. //-----------------------------------------------------------------------
  524. // Summary:
  525. //     Call this method to enable navigate items using Tab key.
  526. // Parameters:
  527. //     bTabItems - TRUE to navigate items in the taskpanel using the tab key.
  528. //-----------------------------------------------------------------------
  529. void NavigateItems(BOOL bTabItems);
  530. //-----------------------------------------------------------------------
  531. // Summary:
  532. //     Call this method to enable animation for TaskPanel
  533. // Parameters:
  534. //     bEnable - TRUE to enable animation; FALSE to disable
  535. //-----------------------------------------------------------------------
  536. void EnableAnimation(BOOL bEnable = TRUE);
  537. public:
  538. //-----------------------------------------------------------------------
  539. // Summary:
  540. //     Call this member to switch the visual theme of the TaskPanel control.
  541. // Parameters:
  542. //     paintTheme - New visual theme.  Can be any of the values listed in the Remarks section.
  543. // Remarks:
  544. //     paintTheme can be one of the following:
  545. //     * <b>xtpTaskPanelThemeOffice2000</b> Enables Office 2000 style theme.
  546. //     * <b>xtpTaskPanelThemeOffice2003</b> Enables Office 2003 style theme.
  547. //     * <b>xtpTaskPanelThemeNativeWinXP</b> Enables Explorer style theme.
  548. //     * <b>xtpTaskPanelThemeOffice2000Plain</b> Enables classic Office 2000 style theme.
  549. //     * <b>xtpTaskPanelThemeOfficeXPPlain</b> Enables classic Office XP style theme.
  550. //     * <b>xtpTaskPanelThemeOffice2003Plain</b> Enables classic Office 2003 style theme.
  551. //     * <b>xtpTaskPanelThemeNativeWinXPPlain</b> Enables classic Explorer style theme.
  552. //     * <b>xtpTaskPanelThemeToolbox</b> Enables VS.NET style Toolbox theme.
  553. //     * <b>xtpTaskPanelThemeToolboxWhidbey</b> Enables Whidbey VS 2005 style Toolbox theme.
  554. //     * <b>xtpTaskPanelThemeListView</b> Enables Standard List View theme.
  555. //     * <b>xtpTaskPanelThemeListViewOfficeXP</b> Enables Office XP List View theme.
  556. //     * <b>xtpTaskPanelThemeListViewOffice2003</b> Enables Office 2003 List View theme.
  557. //     * <b>xtpTaskPanelThemeShortcutBarOffice2003</b> Enables ShortcutBar Office 2003 theme.
  558. //
  559. // See Also: CXTPTaskPanel::GetCurrentTheme
  560. //-----------------------------------------------------------------------
  561. void SetTheme(XTPTaskPanelPaintTheme paintTheme);
  562. //-----------------------------------------------------------------------
  563. // Summary:
  564. //     Call this member to set a custom theme.
  565. // Parameters:
  566. //     pPaintManager - New paint manager.
  567. //-----------------------------------------------------------------------
  568. void SetCustomTheme(CXTPTaskPanelPaintManager* pPaintManager);
  569. //-----------------------------------------------------------------------
  570. // Summary:
  571. //     Call this member to get the current paint manager.
  572. // Returns:
  573. //     The current paint manager.
  574. // See Also: CXTPTaskPanel::SetTheme
  575. //-----------------------------------------------------------------------
  576. CXTPTaskPanelPaintManager* GetPaintManager() const;
  577. //-----------------------------------------------------------------------
  578. // Summary:
  579. //     Call this member to get the current visual theme.
  580. // Returns:
  581. //     The current theme.
  582. // See Also: CXTPTaskPanel::SetTheme
  583. //-----------------------------------------------------------------------
  584. XTPTaskPanelPaintTheme GetCurrentTheme() const;
  585. //-----------------------------------------------------------------------
  586. // Summary:
  587. //     Call this method to get tooltip context pointer.
  588. //-----------------------------------------------------------------------
  589. CXTPToolTipContext* GetToolTipContext() const;
  590. public:
  591. //-----------------------------------------------------------------------
  592. // Summary:
  593. //     Call this member to expand or collapse a group.
  594. // Parameters:
  595. //     pGroup    - CXTPTaskPanelGroup to be expanded or closed
  596. //     bExpanded - TRUE to expand group, FALSE to collapse group
  597. // See Also: CXTPTaskPanelGroup::SetExpandable, CXTPTaskPanelGroup::IsExpandable
  598. //-----------------------------------------------------------------------
  599. virtual void ExpandGroup(CXTPTaskPanelGroup* pGroup, BOOL bExpanded);
  600. //-----------------------------------------------------------------------
  601. // Summary:
  602. //     Call this member to determine if a group is currently expanded
  603. //     or collapsed.
  604. // Parameters:
  605. //     pGroup - CXTPTaskPanelGroup to test.
  606. // Returns:
  607. //     TRUE if the group is currently expanded, FALSE if it is closed
  608. //-----------------------------------------------------------------------
  609. BOOL IsGroupExpanded(const CXTPTaskPanelGroup* pGroup) const;
  610. //-----------------------------------------------------------------------
  611. // Summary:
  612. //     Call this member to set the type of hot tracking that is used
  613. //     when the mouse is moved over a group or item.
  614. // Parameters:
  615. //     hotTrackStyle - The desired XTPTaskPanelHotTrackStyle.
  616. //-----------------------------------------------------------------------
  617. void SetHotTrackStyle(XTPTaskPanelHotTrackStyle hotTrackStyle);
  618. //-----------------------------------------------------------------------
  619. // Summary:
  620. //     Call this member to determine the type of hot tracking currently used.
  621. // Returns:
  622. //     The current XTPTaskPanelHotTrackStyle used.
  623. //-----------------------------------------------------------------------
  624. XTPTaskPanelHotTrackStyle GetHotTrackStyle() const;
  625. //-----------------------------------------------------------------------
  626. // Summary:
  627. //     Call this member to determine the item layout currently used.
  628. // Returns:
  629. //     The currently set XTPTaskPanelItemLayout.
  630. //-----------------------------------------------------------------------
  631. XTPTaskPanelItemLayout GetItemLayout() const;
  632. //-----------------------------------------------------------------------
  633. // Summary:
  634. //     Call this member to specify the item layout of the XTPTaskPanelItems.
  635. //     Layouts include text only, image only, image and text, and
  636. //     image with text below the image.    This applies to all groups
  637. //     unless each groups layout is set individually.
  638. // Parameters:
  639. //     itemLayout - The desired XTPTaskPanelItemLayout.
  640. // See Also: CXTPTaskPanelGroup::SetItemLayout
  641. //-----------------------------------------------------------------------
  642. void SetItemLayout(XTPTaskPanelItemLayout itemLayout);
  643. //-----------------------------------------------------------------------
  644. // Summary:
  645. //     Call this member to specify the behavior of the TaskPanel.
  646. //     The TaskPanel can behave like a ToolBox, List View, or Explorer.
  647. // Parameters:
  648. //     panelBehaviour - The desired XTPTaskPanelBehaviour.
  649. //-----------------------------------------------------------------------
  650. void SetBehaviour(XTPTaskPanelBehaviour panelBehaviour);
  651. //-----------------------------------------------------------------------
  652. // Summary:
  653. //     Call this member to determine the behavior the TaskPanel is using.
  654. // Returns:
  655. //     The currently set XTPTaskPanelBehaviour.
  656. //-----------------------------------------------------------------------
  657. XTPTaskPanelBehaviour GetBehaviour() const;
  658. //-----------------------------------------------------------------------
  659. // Summary:
  660. //     Call this member to get the currently active group.
  661. // Returns:
  662. //     Pointer to the active CXTPTaskPanelGroup.
  663. //-----------------------------------------------------------------------
  664. CXTPTaskPanelGroup* GetActiveGroup() const;
  665. //-----------------------------------------------------------------------
  666. // Summary:
  667. //     Call this member to specify whether items will receive focus when
  668. //     they are clicked.  If bSelect is TRUE, the item clicked receives
  669. //     focus and the previously focused item loses focus.  This must be
  670. //     FALSE to use toggle buttons or to allow multiple items to have
  671. //     focus.
  672. // Parameters:
  673. //     bSelect - TRUE if items will receive focus when they are clicked.
  674. //               If FALSE, items can be clicked, but they will not receive
  675. //               focus.
  676. // See Also: SetFocusedItem, GetFocusedItem
  677. //-----------------------------------------------------------------------
  678. void SetSelectItemOnFocus(BOOL bSelect);
  679. //-----------------------------------------------------------------------
  680. // Summary:
  681. //     Call this method to allow only one item to be selected.
  682. // Parameters:
  683. //     bSingleSelection - TRUE to use single selection.
  684. // See Also: IsSingleSelection, SetSelectItemOnFocus
  685. //-----------------------------------------------------------------------
  686. void SetSingleSelection(BOOL bSingleSelection = TRUE);
  687. //-----------------------------------------------------------------------
  688. // Summary:
  689. //     Call this method to get Single Selection property of control.
  690. // See Also: SetSingleSelection, SetSelectItemOnFocus
  691. //-----------------------------------------------------------------------
  692. BOOL IsSingleSelection() const;
  693. //-----------------------------------------------------------------------
  694. // Summary:
  695. //     Call this member to draw a focus rectangle around a
  696. //     CXTPTaskPanelGroupItem  CXTPTaskPanelItem when the Up and Down arrows
  697. //     are used to navigate the items in the TaskPanel.
  698. // Parameters:
  699. //     bAccept - TRUE if the focus rectangle is to be drawn, FALSE otherwise.
  700. // See Also:
  701. //     IsDrawFocusRect
  702. //-----------------------------------------------------------------------
  703. void DrawFocusRect(BOOL bAccept);
  704. //-----------------------------------------------------------------------
  705. // Summary:
  706. //     Call this member to get the outer margins of groups in the task
  707. //     panel.
  708. // Returns:
  709. //     Outer group margins.
  710. //-----------------------------------------------------------------------
  711. CRect GetMargins() const;
  712. //-----------------------------------------------------------------------
  713. // Summary:
  714. //     Call this member to get the current clipboard format.
  715. // Returns:
  716. //     Current CLIPFORMAT clipboard format.
  717. //-----------------------------------------------------------------------
  718. static CLIPFORMAT AFX_CDECL GetClipboardFormat();
  719. //-----------------------------------------------------------------------
  720. // Summary:
  721. //     Call this member to specify whether you can drag items within the
  722. //     TaskPanel and from the TaskPanel to other object.
  723. // Parameters:
  724. //     nAllowDrag - Drag options
  725. // Remarks:
  726. //     dragOptions parameter can be one or more of the following values:
  727. //          * <b>xtpTaskItemAllowDragCopyWithinGroup</b> To allow copy within group only
  728. //          * <b>xtpTaskItemAllowDragCopyWithinControl</b> To allow copy within task panel only
  729. //          * <b>xtpTaskItemAllowDragCopyOutsideControl</b> To allow copy outside task panel only
  730. //          * <b>xtpTaskItemAllowDragCopy</b> To allow copy operation
  731. //          * <b>xtpTaskItemAllowDragMoveWithinGroup</b> To allow move within group only
  732. //          * <b>xtpTaskItemAllowDragMoveWithinControl</b> To allow move within task panel only
  733. //          * <b>xtpTaskItemAllowDragMoveOutsideControl</b> To allow move outside task panel only
  734. //          * <b>xtpTaskItemAllowDragMove </b> To allow move operation
  735. //          * <b>xtpTaskItemAllowDragAll</b> To allow all drag operations
  736. // See Also:
  737. //     AllowDrop, XTPTaskPanelItemAllowDrag
  738. //-----------------------------------------------------------------------
  739. void AllowDrag(long nAllowDrag = xtpTaskItemAllowDragDefault);
  740. //-----------------------------------------------------------------------
  741. // Summary:
  742. //     Call this member to specify whether you can drop items within the
  743. //     TaskPanel from other objects to the TaskPanel.
  744. // Parameters:
  745. //     bAllowDrop - TRUE to allow task panel group items to be dropped
  746. //                  inside the task panel, FALSE to only allow items to be
  747. //                  dropped outside the task panel.
  748. // See Also:
  749. //     AllowDrag
  750. //-----------------------------------------------------------------------
  751. void AllowDrop(BOOL bAllowDrop);
  752. //-----------------------------------------------------------------------
  753. // Summary:
  754. //     Call this member to change the caption of a CXTPTaskPanelGroup
  755. //     or CXTPTaskPanelItem.  When the RenameItem method is called, an
  756. //     edit box appears on the group caption allowing you to type in a
  757. //     new name.
  758. // Parameters:
  759. //     pItem - TaskPanelGroup or TaskPanelItem who's caption will be renamed.
  760. // Remarks:
  761. //     OnEndLabelEdit is called when the user has finished editing the
  762. //     caption of the item.  This causes NotifyOwner to send a message
  763. //     to the parent that the caption is finished being edited.
  764. // See Also:
  765. //     OnEndLabelEdit
  766. //-----------------------------------------------------------------------
  767. void RenameItem(CXTPTaskPanelItem* pItem);
  768. //-----------------------------------------------------------------------
  769. // Summary:
  770. //     Call this member to retrieve a pointer to a group scroll button.
  771. // Parameters:
  772. //     bScrollUp - TRUE to retrieve the Up scroll button, FALSE to retrieve
  773. //                 the Down scroll button.
  774. // Returns:
  775. //     Pointer to the specified group scroll button.
  776. // See Also:
  777. //     CXTPTaskPanelScrollButton, m_pScrollButton
  778. //-----------------------------------------------------------------------
  779. CXTPTaskPanelScrollButton* GetScrollButton(BOOL bScrollUp) const;
  780. //-----------------------------------------------------------------------
  781. // Summary:
  782. //     This method determines where a point lies in a specified group scroll
  783. //     button.
  784. // Parameters:
  785. //     point - CPoint object that specifies the x and y to be tested.
  786. // Returns:
  787. //     A pointer to a CXTPTaskPanelScrollButton item that occupies the
  788. //     specified point or 0 (zero) if no group scroll button occupies the point.
  789. //-----------------------------------------------------------------------
  790. CXTPTaskPanelScrollButton* HitTestScrollButton(CPoint point) const;
  791. //-----------------------------------------------------------------------
  792. // Summary:
  793. //     Called by the framework to draw the task panel using the specified
  794. //     device context.
  795. // Parameters:
  796. //     pDC - Pointer to a valid device context.
  797. // Remarks:
  798. //     OnDraw calls the CXTPTaskPanelGroup::OnPaint method for each group in the task panel.
  799. //     OnPaint also calls CXTPTaskPanelPaintManager::FillTaskPanel and
  800. //     CXTPTaskPanelPaintManager::DrawScrollButton
  801. //-----------------------------------------------------------------------
  802. virtual void OnDraw(CDC* pDC, CRect rcClipBox);
  803. //-------------------------------------------------------------------------
  804. // Summary:
  805. //     The framework calls this member function to redraw the TaskPanel.
  806. // Parameters:
  807. //     lpRect - The rectangular area of the bar that is invalid.
  808. //     bAnimate - TRUE to animate changes in bounding rectangle.
  809. //-------------------------------------------------------------------------
  810. void Redraw(LPCRECT lpRect = NULL, BOOL bAnimate = FALSE);
  811. //-----------------------------------------------------------------------
  812. // Summary:
  813. //     This member is called to notify the parent window that an event
  814. //     has occurred in the task panel.
  815. // Parameters:
  816. //     wParam -  Specifies which event has occurred.
  817. //     lParam - Additional message-specific information.
  818. // Remarks:
  819. //     wParam parameter can be one of the following values:
  820. //          * <b>XTP_TPN_CLICK</b> Indicates the user clicked a TaskPanel item.
  821. //          * <b>XTP_TPN_RCLICK</b> Indicates the user pressed the right mouse button on a TaskPanel item.
  822. //          * <b>XTP_TPN_STARTDRAG</b> Indicates the user started to dragging an item.
  823. //                                          You can return XTP_ACTION_CANCEL to cancel the drag.
  824. //          * <b>XTP_TPN_ENDLABELEDIT</b> Indicates the user starts to rename an item.
  825. //          * <b>XTP_TPN_ITEMDROP</b> Indicates the user dropped item in task panel.
  826. //          * <b>XTP_TPN_GROUPEXPANDING</b> Indicates the group is about to be expanded.
  827. //                                          <i>lParam</i> contains XTP_TPNGROUPEXPANDING pointer.
  828. //                                          You can return XTP_ACTION_CANCEL to ignore expanding.
  829. //          * <b>XTP_TPN_GROUPEXPANDED</b> Indicates the user has expanded a group.
  830. //     <p/>
  831. //     The following method in the task panel use NotifyOwner to send
  832. //     messages:
  833. //          * <b>CXTPTaskPanelGroup::OnAnimate</b>
  834. //          * <b>CXTPTaskPanel::ExpandGroup</b> lParam contains XTP_TPNGROUPEXPANDING pointer.
  835. //                                              You can return XTP_ACTION_CANCEL to ignore expanding.
  836. //          * <b>CXTPTaskPanel::OnDrop</b>  lParam contains item dropped.
  837. //          * <b>CXTPTaskPanel::OnStartItemDrag</b> lParam contains item dragged.
  838. //          * <b>CXTPTaskPanel::OnRButtonDown</b> lParam contains item right-clicked.
  839. //          * <b>CXTPTaskPanel::OnClick</b> lParam contains item clicked.
  840. //          * <b>CXTPTaskPanel::OnEndLabelEdit</b> lParam contains item who's caption is being renamed.
  841. // See Also:
  842. //     XTPWM_TASKPANEL_NOTIFY
  843. //-----------------------------------------------------------------------
  844. virtual LRESULT NotifyOwner(WPARAM wParam, LPARAM lParam);
  845. //-----------------------------------------------------------------------
  846. // Summary:
  847. //     Call this member to set multi column groups.
  848. // Parameters:
  849. //     bMultiColumn - TRUE to set multicolumn groups
  850. // See Also: IsMultiColumn, SetColumnWidth
  851. //-----------------------------------------------------------------------
  852. void SetMultiColumn(BOOL bMultiColumn);
  853. //-----------------------------------------------------------------------
  854. // Summary:
  855. //     Determines if multi column enabled.
  856. // Returns:
  857. //     TRUE if multi column of groups enabled
  858. // See Also: SetMultiColumn, SetColumnWidth
  859. //-----------------------------------------------------------------------
  860. BOOL IsMultiColumn() const;
  861. //-----------------------------------------------------------------------
  862. // Summary:
  863. //     Sets the width in pixels of all columns in a multicolumn task panel
  864. // Parameters:
  865. //     nColumnWidth - Specifies the width in pixels of all columns.
  866. // See Also: SetMultiColumn, GetColumnWidth
  867. //-----------------------------------------------------------------------
  868. void SetColumnWidth(int nColumnWidth);
  869. //-----------------------------------------------------------------------
  870. // Summary:
  871. //     Determines the width in pixels of all columns in a multicolumn task panel
  872. // Returns:
  873. //     The width in pixels of all columns.
  874. // See Also: SetMultiColumn, SetColumnWidth
  875. //-----------------------------------------------------------------------
  876. int GetColumnWidth() const;
  877. //-----------------------------------------------------------------------
  878. // Summary:
  879. //     Retrieves minimum client height for all groups
  880. // Returns:
  881. //     Minimum client height
  882. //-----------------------------------------------------------------------
  883. int GetMinimumGroupClientHeight() const;
  884. //-----------------------------------------------------------------------
  885. // Summary:
  886. //     Call this method to set minimum client height for all groups
  887. // Parameters:
  888. //     nMinClientHeight - Minimum client height
  889. //-----------------------------------------------------------------------
  890. void SetMinimumGroupClientHeight(int nMinClientHeight);
  891. //-----------------------------------------------------------------------
  892. // Summary:
  893. //     Register the window class if it has not already been registered.
  894. // Parameters:
  895. //     hInstance - Instance of resource where control is located
  896. // Returns:
  897. //     TRUE if the window class was successfully registered.
  898. //-----------------------------------------------------------------------
  899. BOOL RegisterWindowClass(HINSTANCE hInstance = NULL);
  900. public:
  901. //-------------------------------------------------------------------------
  902. // Summary:
  903. //     Call this method to enable markup for tab captions
  904. // Parameters:
  905. //     bEnable - TRUE to enable markup
  906. //-------------------------------------------------------------------------
  907. void EnableMarkup(BOOL bEnable = TRUE);
  908. //-------------------------------------------------------------------------
  909. // Summary:
  910. //     Returns markup context
  911. //-------------------------------------------------------------------------
  912. CXTPMarkupContext* GetMarkupContext() const;
  913. protected:
  914. //-----------------------------------------------------------------------
  915. // Summary:
  916. //     Call this member to determine if the Explorer behavior
  917. //     is currently being used.
  918. // Returns:
  919. //     TRUE if the Explorer behavior is used, FALSE if a different
  920. //     behavior is used.
  921. // See Also:
  922. //     SetBehaviour, GetBehaviour, XTPTaskPanelBehaviour
  923. //-----------------------------------------------------------------------
  924. BOOL IsExplorerBehaviour() const;
  925. //-----------------------------------------------------------------------
  926. // Summary:
  927. //     This member is called when a group item is just starting to be
  928. //     dragged.
  929. // Parameters:
  930. //     pItem - Group item being dragged.
  931. // Remarks:
  932. //     OnMouseMove calls OnStartItemDrag is a group item is dragged.
  933. // See Also:
  934. //     OnStartGroupDrag, OnMouseMove
  935. //-----------------------------------------------------------------------
  936. virtual void OnStartItemDrag(CXTPTaskPanelGroupItem* pItem);
  937. //-----------------------------------------------------------------------
  938. // Summary:
  939. //     This member is called when a group is just starting to be
  940. //     dragged.
  941. // Parameters:
  942. //     pItem - Group being dragged.
  943. // Remarks:
  944. //     OnMouseMove calls OnStartGroupDrag is a group is dragged.
  945. // See Also:
  946. //     OnStartItemDrag, OnMouseMove
  947. //-----------------------------------------------------------------------
  948. virtual void OnStartGroupDrag(CXTPTaskPanelItem* pItem);
  949. //-----------------------------------------------------------------------
  950. // Summary:
  951. //     This method is called when the caption of an item is finished
  952. //     being editedrenamed.
  953. // Parameters:
  954. //     pItem - Item being edited.
  955. //     str   - New caption of item.
  956. // Remarks:
  957. //     This member is called after RenameItem.
  958. // See Also:
  959. //     RenameItem
  960. //-----------------------------------------------------------------------
  961. virtual void OnEndLabelEdit(CXTPTaskPanelItem* pItem, LPCTSTR str);
  962. //-----------------------------------------------------------------------
  963. // Summary:
  964. //     This member is called when an item is dragged over the task panel.
  965. // Parameters:
  966. //     pDataObject - Points to the COleDataObject being dragged over the
  967. //                   drop target.
  968. //     dwKeyState  - State of keys on keyboard.  Contains the state of the
  969. //                   modifier keys. This is a combination of any number of
  970. //                   the following: MK_CONTROL, MK_SHIFT, MK_ALT, MK_LBUTTON,
  971. //                   MK_MBUTTON, and MK_RBUTTON.
  972. //     point - The current mouse position relative to the task panel.
  973. // Returns:
  974. //     A value from the DROPEFFECT enumerated type, which indicates the type
  975. //     of drop that would occur if the user dropped the object at this
  976. //     position. The type of drop often depends on the current key state as
  977. //     indicated by dwKeyState. A standard mapping of keystates to DROPEFFECT
  978. //     values is:
  979. //       * <b>DROPEFFECT_NONE</b> The data object cannot be dropped in this
  980. //                                window.
  981. //       * <b>DROPEFFECT_COPY</b> for <b>MK_CONTROL</b>  Creates a copy of
  982. //                                                       the dropped object.
  983. //       * <b>DROPEFFECT_MOVE</b> for <b>MK_ALT</b> Creates a copy of the dropped
  984. //                                                  object and delete the original object.
  985. //                                                  This is typically the default drop effect,
  986. //                                                  when the view can accept the data object.
  987. //-----------------------------------------------------------------------
  988. virtual DROPEFFECT OnDragOver(COleDataObject* pDataObject, DWORD dwKeyState, CPoint point);
  989. //-----------------------------------------------------------------------
  990. // Summary:
  991. //     This member is called when an item has been dropped into the task panel.
  992. // Parameters:
  993. //     pDataObject - Points to the COleDataObject that is dropped into the drop target.
  994. //     dropEffect  - The drop effect that the user has requested. Can be any of the values listed in the Remarks section.
  995. //     point - The current mouse position relative to the task panel.
  996. // Remarks:
  997. //     The <i>dropEffect</i> parameter can be one of the following values:
  998. //     * <b>DROPEFFECT_COPY</b> Creates a copy of the data object being dropped.
  999. //     * <b>DROPEFFECT_MOVE</b> Moves the data object to the current mouse location.
  1000. // Returns:
  1001. //     TRUE if the drop was successful, otherwise FALSE.
  1002. //-----------------------------------------------------------------------
  1003. virtual BOOL OnDrop(COleDataObject* pDataObject, DROPEFFECT dropEffect, CPoint point);
  1004. //-------------------------------------------------------------------------
  1005. // Summary:
  1006. //     This member is called to reposition the group scroll buttons.
  1007. // Remarks:
  1008. //     Reposition and AnimateGroups call RepositionScrollButtons when the
  1009. //     groups in the task panel need to be repositioned.  I.e. During animation
  1010. //     while the group is expanding or collapsing.
  1011. //-------------------------------------------------------------------------
  1012. void RepositionScrollButtons();
  1013. //-----------------------------------------------------------------------
  1014. // Summary:
  1015. //     The member is called when a group scroll button is clicked.
  1016. // Parameters:
  1017. //     pScrollButton - Pointer to the group scroll button that
  1018. //                     was clicked.
  1019. // Remarks:
  1020. //     OnLButtonDown calls OnClickScrollButton when a group scroll button
  1021. //     is clicked.
  1022. // See Also:
  1023. //     CXTPTaskPanelScrollButton, m_pScrollButton
  1024. //-----------------------------------------------------------------------
  1025. void OnClickScrollButton(CXTPTaskPanelScrollButton* pScrollButton);
  1026. //-------------------------------------------------------------------------
  1027. // Summary:
  1028. //     This member is called to update the enableddisabled state of the
  1029. //     group scroll buttons.
  1030. // Remarks:
  1031. //     RepositionScrollButtons, CXTPTaskPanelGroup::Scroll, and
  1032. //     CXTPTaskPanelGroup::EnsureVisible call UpdateScrollButtons to update
  1033. //     the state of the group scroll buttons.
  1034. //-------------------------------------------------------------------------
  1035. void UpdateScrollButtons();
  1036. //-----------------------------------------------------------------------
  1037. // Summary:
  1038. //     This member is called to determine if the mouse cursor is positioned
  1039. //     over one of the group scroll buttons.
  1040. // Parameters:
  1041. //     point - CPoint object that specifies the x and y to be tested.
  1042. // Remarks:
  1043. //     If the mouse cursor is over a group scroll button, then the
  1044. //     buttons appearance is changed to "hot" is the button is enabled.
  1045. //     When the mouse cursor leaves the button, the appearance is
  1046. //     returned to normal.
  1047. //
  1048. //     OnMouseMove and OnMouseLeave call CheckScrollButtonMouseOver to
  1049. //     update the appearance of the group scroll buttons.
  1050. //-----------------------------------------------------------------------
  1051. void CheckScrollButtonMouseOver(CPoint point);
  1052. //-----------------------------------------------------------------------
  1053. // Summary:
  1054. //     This member is called when an item has been removed from the task panel.
  1055. // Parameters:
  1056. //     pItem - Item that was removed.
  1057. // Remarks:
  1058. //     CXTPTaskPanelItems::Clear and CXTPTaskPanelItems::RemoveAt call
  1059. //     OnItemRemoved.
  1060. // See Also:
  1061. //     CXTPTaskPanelItems::Clear, CXTPTaskPanelItems::RemoveAt
  1062. //-----------------------------------------------------------------------
  1063. virtual void OnItemRemoved(CXTPTaskPanelItem* pItem);
  1064. //-------------------------------------------------------------------------
  1065. // Summary:
  1066. //     This method is called to update the task panel's scroll bar.
  1067. // Remarks:
  1068. //     This updates the scroll bar that is displayed to scroll the entire
  1069. //     task panel.  This does not update the scroll bar placed inside
  1070. //     a task panel group, they are updated with UpdateScrollButtons.
  1071. //-------------------------------------------------------------------------
  1072. virtual void UpdateScrollBar();
  1073. //-------------------------------------------------------------------------
  1074. // Summary:
  1075. //     This method is called when client height was changed
  1076. //-------------------------------------------------------------------------
  1077. virtual void OnClientHeightChanged();
  1078. //-------------------------------------------------------------------------
  1079. // Summary:
  1080. //     This method is called to find next visible group
  1081. // Parameters:
  1082. //     nIndex - Index of group to start search
  1083. //     nDirection - Direction to search
  1084. //-------------------------------------------------------------------------
  1085. CXTPTaskPanelGroup* GetNextVisibleGroup(int nIndex, int nDirection = +1) const;
  1086. protected:
  1087. //{{AFX_CODEJOCK_PRIVATE
  1088. // System accessibility support.
  1089. virtual HRESULT GetAccessibleParent(IDispatch** ppdispParent);
  1090. virtual HRESULT GetAccessibleChildCount(long* pcountChildren);
  1091. virtual HRESULT GetAccessibleChild(VARIANT varChild, IDispatch** ppdispChild);
  1092. virtual HRESULT GetAccessibleName(VARIANT varChild, BSTR* pszName);
  1093. virtual HRESULT GetAccessibleRole(VARIANT varChild, VARIANT* pvarRole);
  1094. virtual HRESULT AccessibleLocation(long *pxLeft, long *pyTop, long *pcxWidth, long* pcyHeight, VARIANT varChild);
  1095. virtual HRESULT AccessibleHitTest(long xLeft, long yTop, VARIANT* pvarChild);
  1096. virtual HRESULT GetAccessibleState(VARIANT varChild, VARIANT* pvarState);
  1097. virtual CCmdTarget* GetAccessible();
  1098. CXTPTaskPanelItem* GetAccessibleItem(int nIndex);
  1099. int GetAccessibleIndex(CXTPTaskPanelItem* pItem);
  1100. //}}AFX_CODEJOCK_PRIVATE
  1101. protected:
  1102. //{{AFX_CODEJOCK_PRIVATE
  1103. DECLARE_MESSAGE_MAP()
  1104. //{{AFX_VIRTUAL(CXTPTaskPanel)
  1105. virtual void PreSubclassWindow();
  1106. virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
  1107. virtual INT_PTR OnToolHitTest(CPoint point, TOOLINFO* pTI) const;
  1108. BOOL OnWndMsg(UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pResult);
  1109. virtual BOOL PreTranslateMessage(MSG* pMsg);
  1110. //}}AFX_VIRTUAL
  1111. //{{AFX_MSG(CXTPTaskPanel)
  1112. afx_msg BOOL OnEraseBkgnd(CDC* pDC);
  1113. afx_msg void OnPaint();
  1114. afx_msg void OnSize(UINT nType, int cx, int cy);
  1115. afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
  1116. afx_msg void OnMouseMove(UINT nFlags, CPoint point);
  1117. afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
  1118. afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
  1119. afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
  1120. afx_msg void OnDestroy();
  1121. afx_msg void OnTimer(UINT_PTR nIDEvent);
  1122. afx_msg void OnSysColorChange();
  1123. afx_msg void OnSettingChange(UINT uFlags, LPCTSTR lpszSection);
  1124. afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
  1125. afx_msg void OnRButtonUp(UINT nFlags, CPoint point);
  1126. afx_msg void OnSetFocus(CWnd* pOldWnd);
  1127. afx_msg void OnKillFocus(CWnd* pNewWnd);
  1128. afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
  1129. afx_msg void OnSysKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
  1130. afx_msg void OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags);
  1131. afx_msg void OnSysKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags);
  1132. afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
  1133. afx_msg BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt);
  1134. afx_msg void OnMouseLeave();
  1135. afx_msg UINT OnGetDlgCode();
  1136. afx_msg void OnCaptureChanged(CWnd* pWnd);
  1137. afx_msg LRESULT OnPrintClient(WPARAM wParam, LPARAM lParam);
  1138. afx_msg LRESULT OnGetObject(WPARAM wParam, LPARAM lParam);
  1139. //}}AFX_MSG
  1140. //}}AFX_CODEJOCK_PRIVATE
  1141. private:
  1142. BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL);
  1143. BOOL GetMessageExt(MSG& msg);
  1144. void EnsureVisibleRect(const CRect& rc);
  1145. void GrabFocus();
  1146. HWND GetNextControl(BOOL bForward) const;
  1147. void CheckOldFocus(CWnd* pOldWnd);
  1148. CXTPTaskPanelGroupItem* FindControlItem(HWND hWnd);
  1149. HWND GetRootChild(HWND hWndTaskPanel, HWND hWnd);
  1150. protected:
  1151. CXTPTaskPanelGroups* m_pGroups;                 // Collection of groups.
  1152. CXTPTaskPanelAnimation* m_pAnimation;  // Animation context
  1153. CXTPTaskPanelPaintManager* m_pPaintManager;     // Current Paint Manager.
  1154. XTPTaskPanelPaintTheme m_paintTheme;            // Current theme.
  1155. BOOL m_bPreSubclassWindow;
  1156. BOOL m_nLockRedraw;                             // TRUE when control is locked.
  1157. int m_nClientHeight;                            // Group client height.  This is the area displayed under the group caption.
  1158. int m_nOldClientHeight;                         // Old group client height.
  1159. CRect m_rcMargins;                              // Outer margins of groups.
  1160. int m_nGroupSpacing;                            // Amount of space placed between groups.
  1161. BOOL m_bScrollVisible;                          // TRUE if scroll bar is visible. This refers to the scroll bar of the entire task panel, the the scroll bar uses to scroll group items or the group caption.
  1162. CXTPTaskPanelItem* m_pItemHot;                  // Currently hot item.
  1163. CXTPTaskPanelItem* m_pItemFocused;              // Currently focused item.
  1164. CXTPTaskPanelItem* m_pItemPressed;              // Currently pressed item.
  1165. CXTPTaskPanelItem* m_pItemDragging;             // Pointer to item currently being dragged.
  1166. CXTPTaskPanelItem* m_pItemDragOver;             // Pointer to item under mouse cursor with dragged icon.  This is the item that will appear directly under the dragged item if the item were dropped.
  1167. BOOL m_bAnimation;                              // TRUE if animation enabled.
  1168. XTPTaskPanelAnimation m_eAnimation;             // Current animation state.
  1169. HCURSOR m_hHandCursor;                          // Hand cursor.
  1170. UINT_PTR m_nAnimateTimer;                       // Timer identifier for animation.
  1171. int m_nAnimationStep;                           // Current step of animation.
  1172. CXTPImageManager* m_pImageManager;              // Image manager of task panel.  This is the collection of images that are used for task panel group and group item icons.
  1173. BOOL m_bExpandable;                             // TRUE if groups are expandable.
  1174. BOOL m_bAcceptFocus;                            // TRUE if control accept focus.
  1175. BOOL m_bGrabbingFocus;                          // TRUE if control move focus to itself.
  1176. BOOL m_bDrawFocusRect;                          // TRUE to draw focused rectangle drawn around the item when the Up and Down arrows are used to navigate the items in the TaskPanel.
  1177. CSize m_szItemIcon;                             // Size of group item icons.
  1178. CSize m_szGroupIcon;                            // Size of icons displayed in group captions.
  1179. BOOL m_bSelectItemOnFocus;                      // TRUE if items receive focus when they are clicked.
  1180. CPoint m_ptPressed;                             // Point on task panel that was clicked.
  1181. long m_nAllowDrag;                              // TRUE to allow task panel group items to be dragged.
  1182. BOOL m_bAllowDrop;                              // TRUE to allow task panel group items to be dropped inside the task panel, FALSE to only allow items to be dropped outside the task panel.
  1183. XTPTaskPanelItemLayout m_itemLayout;            // Currently set item layout.
  1184. BOOL m_bMultiColumn;                            // TRUE is multiple columns are used to display items in a group.
  1185. int m_nColumnWidth;                             // Width of task panel columns when m_bMultiColumn is TRUE.
  1186. XTPTaskPanelHotTrackStyle m_hotTrackStyle;      // Currently set hot tracking style.
  1187. XTPTaskPanelBehaviour m_panelBehaviour;         // Currently set TaskPanel behavior.
  1188. CXTPTaskPanelGroup* m_pActiveGroup;             // Pointer to currently active group.
  1189. CPanelDropTarget* m_pDropTarget;                // Internal drag'n'drop helper.
  1190. static CLIPFORMAT m_cfItem;                     // Clipboard format.
  1191. BOOL m_bTimerGroupHover;                        // TRUE if Timer for Hover event is currently set.  The timer for the Hover event is set when the mouse is left in the same position for at least 500 milliseconds.
  1192. CXTPTaskPanelScrollButton* m_pScrollButton[2];  // Scroll buttons of the task panel.  The task panel uses these scroll button in CXTPTaskPanelGroup objects when there are more items in the group than can be viewed.
  1193.                                                 // Only the necessary buttons are displayed.  If the items in the group can not be scrolled anymore, then that button is removed.  Scroll buttons are only visible
  1194.                                                 // when using the xtpTaskPanelBehaviourList and xtpTaskPanelBehaviourToolbox task panel behaviors.
  1195. BOOL m_bSingleSelection;                        // TRUE to use focused item as selected.
  1196. CXTPToolTipContext* m_pToolTipContext;          // Tooltip Context.
  1197. BOOL m_bInUpdateScrollBar;                      // TRUE is the CXTPTaskPanel::UpdateScrollBar() method is currently in use (Scrollbar is currently being updated).
  1198. int m_nGroupMinClientHeight;                    // Group minimum client height
  1199. long m_nOLEDropMode;                            // TRUE if ActiveX OLEDropMode used
  1200. BOOL m_bTabItems;
  1201. CXTPMarkupContext* m_pMarkupContext;
  1202. private:
  1203. friend class CXTPTaskPanelGroup;
  1204. friend class CXTPTaskPanelItem;
  1205. friend class CTaskPanelCtrl;
  1206. friend class CXTPTaskPanelPaintManager;
  1207. friend class CPanelDropTarget;
  1208. friend class CXTPTaskPanelGroupItem;
  1209. friend class CXTPTaskPanelEditItem;
  1210. friend class CXTPTaskPanelItems;
  1211. };
  1212. //////////////////////////////////////////////////////////////////////////
  1213. AFX_INLINE CXTPTaskPanelItems* CXTPTaskPanel::GetGroups() const {
  1214. return (CXTPTaskPanelItems*)m_pGroups;
  1215. }
  1216. AFX_INLINE CXTPTaskPanelPaintManager* CXTPTaskPanel::GetPaintManager() const {
  1217. return m_pPaintManager;
  1218. }
  1219. AFX_INLINE CXTPTaskPanelItem* CXTPTaskPanel::GetHotItem() const {
  1220. return m_pItemHot;
  1221. }
  1222. AFX_INLINE XTPTaskPanelPaintTheme CXTPTaskPanel::GetCurrentTheme() const {
  1223. return m_paintTheme;
  1224. }
  1225. AFX_INLINE void CXTPTaskPanel::SetExpandable(BOOL bExpandable) {
  1226. m_bExpandable = bExpandable;
  1227. }
  1228. AFX_INLINE XTPTaskPanelAnimation CXTPTaskPanel::GetAnimation() const {
  1229. return m_eAnimation;
  1230. }
  1231. AFX_INLINE BOOL CXTPTaskPanel::IsExpandable() const {
  1232. return m_bExpandable;
  1233. }
  1234. AFX_INLINE CSize CXTPTaskPanel::GetItemIconSize() const {
  1235. return m_szItemIcon;
  1236. }
  1237. AFX_INLINE CSize CXTPTaskPanel::GetGroupIconSize() const {
  1238. return m_szGroupIcon;
  1239. }
  1240. AFX_INLINE BOOL CXTPTaskPanel::IsExplorerBehaviour() const {
  1241. return m_panelBehaviour == xtpTaskPanelBehaviourExplorer;
  1242. }
  1243. AFX_INLINE CXTPTaskPanelGroup* CXTPTaskPanel::GetActiveGroup() const {
  1244. return m_pActiveGroup;
  1245. }
  1246. AFX_INLINE void CXTPTaskPanel::SetSelectItemOnFocus(BOOL bSelect) {
  1247. m_bSelectItemOnFocus = bSelect;
  1248. }
  1249. AFX_INLINE void CXTPTaskPanel::DrawFocusRect(BOOL bAccept) {
  1250. m_bAcceptFocus = bAccept;
  1251. }
  1252. AFX_INLINE CRect CXTPTaskPanel::GetMargins() const {
  1253. return m_rcMargins;
  1254. }
  1255. AFX_INLINE void CXTPTaskPanel::SetIconSize(CSize szIcon) {
  1256. m_szItemIcon = szIcon;
  1257. Reposition();
  1258. }
  1259. AFX_INLINE void CXTPTaskPanel::SetGroupIconSize(CSize szIcon) {
  1260. m_szGroupIcon = szIcon;
  1261. Reposition();
  1262. }
  1263. AFX_INLINE CLIPFORMAT AFX_CDECL CXTPTaskPanel::GetClipboardFormat() {
  1264. return m_cfItem;
  1265. }
  1266. AFX_INLINE void CXTPTaskPanel::AllowDrop(BOOL bAllowDrop) {
  1267. m_bAllowDrop = bAllowDrop;
  1268. }
  1269. AFX_INLINE CXTPTaskPanelScrollButton* CXTPTaskPanel::GetScrollButton(BOOL bScrollUp) const {
  1270. return bScrollUp ? m_pScrollButton[TRUE] : m_pScrollButton[FALSE];
  1271. }
  1272. AFX_INLINE BOOL CXTPTaskPanel::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext) {
  1273. return CWnd::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext);
  1274. }
  1275. AFX_INLINE void CXTPTaskPanel::SetSingleSelection(BOOL bSingleSelection) {
  1276. m_bSingleSelection = bSingleSelection;
  1277. Reposition();
  1278. }
  1279. AFX_INLINE BOOL CXTPTaskPanel::IsSingleSelection() const {
  1280. return m_bSingleSelection;
  1281. }
  1282. AFX_INLINE void CXTPTaskPanel::SetMultiColumn(BOOL bMultiColumn) {
  1283. m_bMultiColumn = bMultiColumn;
  1284. Reposition();
  1285. }
  1286. AFX_INLINE BOOL CXTPTaskPanel::IsMultiColumn() const {
  1287. return m_bMultiColumn;
  1288. }
  1289. AFX_INLINE void CXTPTaskPanel::SetColumnWidth(int nColumnWidth) {
  1290. m_nColumnWidth = nColumnWidth;
  1291. Reposition();
  1292. }
  1293. AFX_INLINE int CXTPTaskPanel::GetColumnWidth() const {
  1294. return m_nColumnWidth;
  1295. }
  1296. AFX_INLINE int CXTPTaskPanel::GetMinimumGroupClientHeight() const {
  1297. return m_nGroupMinClientHeight;
  1298. }
  1299. AFX_INLINE void CXTPTaskPanel::SetMinimumGroupClientHeight(int nMinClientHeight) {
  1300. m_nGroupMinClientHeight = nMinClientHeight;
  1301. }
  1302. AFX_INLINE void CXTPTaskPanel::NavigateItems(BOOL bTabItems) {
  1303. m_bTabItems = bTabItems;
  1304. }
  1305. AFX_INLINE CXTPMarkupContext* CXTPTaskPanel::GetMarkupContext() const {
  1306. return m_pMarkupContext;
  1307. }
  1308. #endif // !defined(__XTPTASKPANEL_H__)