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

对话框与窗口

开发平台:

Visual C++

  1. // XTPCalendarViewDay.h: interface for the CXTPCalendarViewDay class.
  2. //
  3. // This file is a part of the XTREME CALENDAR 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(_XTPCALENDARVIEWDAY_H__)
  22. #define _XTPCALENDARVIEWDAY_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER > 1000
  25. #pragma once
  26. #endif // _MSC_VER > 1000
  27. #include "XTPCalendarPaintManager.h"
  28. #include "XTPCalendarView.h"
  29. #include "XTPCalendarResource.h"
  30. #include "XTPCalendarControl.h"
  31. #pragma warning(disable : 4786)
  32. class CXTPCalendarView;
  33. class CXTPCalendarViewDay;
  34. class CXTPCalendarViewGroup;
  35. class CXTPCalendarViewEvent;
  36. class CXTPCalendarEvent;
  37. struct XTP_CALENDAR_HITTESTINFO;
  38. //===========================================================================
  39. //
  40. // Regular schema:
  41. //    - CalendarView consists of CalendarView(s)Day
  42. //    - CalendarViewDay consists of CalendarView(s)Resource
  43. //    - CalendarViewGroup contains CalendarView(s)Event
  44. //
  45. // ViewGroup draws a single resource depending on the type of parent
  46. // day view.
  47. //
  48. //===========================================================================
  49. class _XTP_EXT_CLASS CXTPCalendarViewGroup : public CXTPCalendarWMHandler
  50. {
  51. //{{AFX_CODEJOCK_PRIVATE
  52. friend class CXTPCalendarView;
  53. friend class CXTPCalendarViewDay;
  54. friend class CXTPCalendarViewEvent;
  55. friend class CXTPCalendarTheme;
  56. DECLARE_DYNAMIC(CXTPCalendarViewGroup)
  57. //}}AFX_CODEJOCK_PRIVATE
  58. typedef CXTPCalendarWMHandler TBase;    // Base class shortcut
  59. public:
  60. //-----------------------------------------------------------------------
  61. // Summary:
  62. //     Default object constructor. Construct CXTPCalendarViewGroup object.
  63. // See Also: ~CXTPCalendarViewGroup()
  64. //-----------------------------------------------------------------------
  65. CXTPCalendarViewGroup();
  66. //-----------------------------------------------------------------------
  67. // Summary:
  68. //     Default class destructor.
  69. // Remarks:
  70. //     Handles member item deallocation.
  71. //-----------------------------------------------------------------------
  72. virtual ~CXTPCalendarViewGroup();
  73. //-----------------------------------------------------------------------
  74. // Summary:
  75. //     Obtain a pointer to collection of Calendar Resources.
  76. // Remarks:
  77. //     Use this method to retrieve a pointer to the Calendar Resources
  78. //     collection of this Group View.
  79. // Returns:
  80. //     CXTPCalendarResources pointer.
  81. // See Also:
  82. //     CXTPCalendarResources overview, SetResources, AddResource
  83. //-----------------------------------------------------------------------
  84. virtual CXTPCalendarResources* GetResources();
  85. //-----------------------------------------------------------------------
  86. // Summary:
  87. //     Returns data provider for this view group.
  88. // Returns:
  89. //     A pointer to the data provider object if it was previously set;
  90. //     otherwise, returns NULL.
  91. // See Also:
  92. //     CXTPCalendarData overview
  93. //-----------------------------------------------------------------------
  94. virtual CXTPCalendarData* GetDataProvider();
  95. //-----------------------------------------------------------------------
  96. // Summary:
  97. //     Adds a new Resource object into the collection of resources for
  98. //     this Group View.
  99. // Parameters:
  100. //     pResource   - Pointer to the added CXTPCalendarResource object.
  101. //     bWithAddRef - Set this value to TRUE to increment the reference
  102. //                   count of the inserted object,
  103. //                   FALSE to insert object without incrementing
  104. //                   reference count.
  105. // See Also:
  106. //     CXTPCalendarResources::Add
  107. //-----------------------------------------------------------------------
  108. virtual void AddResource(CXTPCalendarResource* pResource, BOOL bWithAddRef);
  109. //-----------------------------------------------------------------------
  110. // Summary:
  111. //     Assigns a new Resources collection to this Group View.
  112. // Parameters:
  113. //     pResources - Pointer to the new Resources collection to be copied
  114. //                  into internal collections of this Group View.
  115. // See Also:
  116. //     GetResources, AddResource
  117. //-----------------------------------------------------------------------
  118. virtual void SetResources(CXTPCalendarResources* pResources);
  119. //-----------------------------------------------------------------------
  120. // Summary:
  121. //     Returns default Schedule ID - the first existing one.
  122. // Returns:
  123. //     The first existing Schedule ID or
  124. //     XTP_CALENDAR_UNKNOWN_SCHEDULE_ID if not found.
  125. //-----------------------------------------------------------------------
  126. virtual UINT GetScheduleID();
  127. //-----------------------------------------------------------------------
  128. // Summary:
  129. //     This member function is used to populate the view with data for
  130. //     all items contained in the view.
  131. // Parameters:
  132. //     dtDayDate - A COleDateTime object that contains the day's date.
  133. // Remarks:
  134. //     This is a pure virtual function. This function must be defined
  135. //     in the derived class.
  136. //-----------------------------------------------------------------------
  137. virtual void Populate(COleDateTime dtDayDate) = 0;
  138. //-----------------------------------------------------------------------
  139. // Summary:
  140. //     This member function is used to adjust the view's layout depending
  141. //     on the provided rectangle and then calls AdjustLayout() for all
  142. //     of the sub-items.
  143. // Parameters:
  144. //     pDC     - Pointer to a valid device context.
  145. //     rcGroup - A CRect object that contains the rectangle coordinates
  146. //               that are used to draw the view.
  147. // Remarks:
  148. //     Call Populate(COleDateTime dtDayDate) prior to calling AdjustLayout().
  149. //     AdjustLayout2 is called by calendar control instead of AdjustLayout
  150. //     when theme is set.
  151. //-----------------------------------------------------------------------
  152. virtual void AdjustLayout(CDC* pDC, const CRect& rcGroup);
  153. virtual void AdjustLayout2(CDC* pDC, const CRect& rcGroup); //<COMBINE AdjustLayout>
  154. //-----------------------------------------------------------------------
  155. // Summary:
  156. //     This member function is used to draw the view contents using
  157. //     the specified device context.
  158. // Parameters:
  159. //     pDC - A pointer to a valid device context.
  160. // Remarks:
  161. //     Call AdjustLayout() before calling Draw().
  162. // See Also: AdjustLayout(CRect rcGroup)
  163. //-----------------------------------------------------------------------
  164. virtual void Draw(CDC* pDC);
  165. //-----------------------------------------------------------------------
  166. // Summary:
  167. //     This member function is used to determine which view item,
  168. //     if any, is at the specified position index, and returns additional
  169. //     info in an XTP_CALENDAR_HITTESTINFO struct.
  170. // Parameters:
  171. //     pt       - A CPoint object that contains the coordinates of
  172. //                the point to test.
  173. //     pHitTest - A pointer to an XTP_CALENDAR_HITTESTINFO struct that
  174. //                contains information about the point to test.
  175. // Remarks:
  176. //     This is a pure virtual function. This function must be defined
  177. //     in the derived class.
  178. // Returns:
  179. //     A BOOL. TRUE if the item is found. FALSE otherwise.
  180. // See Also: XTP_CALENDAR_HITTESTINFO
  181. //-----------------------------------------------------------------------
  182. virtual BOOL HitTest(CPoint pt, XTP_CALENDAR_HITTESTINFO* pHitTest) = 0;
  183. //-----------------------------------------------------------------------
  184. // Summary:
  185. //     Call this member function to obtain the group's rectangle area.
  186. // Returns:
  187. //     A CRect that contains the rectangle coordinates of the group view
  188. //     in client coordinates of the parent's CXTPDatePickerControl object.
  189. // See Also:
  190. //     GetHeaderRect
  191. //-----------------------------------------------------------------------
  192. virtual CRect GetRect()
  193. {
  194. return m_Layout.m_rcGroup;
  195. }
  196. //-----------------------------------------------------------------------
  197. // Summary:
  198. //     Call this member function to obtain the group's header rectangle
  199. //     area.
  200. // Returns:
  201. //     A CRect that contains the rectangle coordinates of the group view
  202. //     header part in client coordinates of the parent's
  203. //     CXTPDatePickerControl object.
  204. // See Also:
  205. //     GetRect
  206. //-----------------------------------------------------------------------
  207. virtual CRect GetHeaderRect()
  208. {
  209. return m_Layout.m_rcGroupHeader;
  210. }
  211. //-----------------------------------------------------------------------
  212. // Summary:
  213. //     Call this member function to obtain the bounding rectangle of
  214. //     the tooltip space (currently this is only "click to add new appointment").
  215. //     Tooltip rectangle is calculated basing on the current mouse position
  216. // Returns:
  217. //     A CRect object with relative coordinates of the tooltip.
  218. // Remarks:
  219. //     This member function always returns an empty rectangle.
  220. //     Actual tooltip rectangle is calculated by ViewGroups of specific
  221. //     views (currently DayView and MonthView are supported).
  222. //-----------------------------------------------------------------------
  223. virtual CRect GetTooltipRect(const CPoint& ptHit, const XTP_CALENDAR_HITTESTINFO& hitInfo);
  224. //-----------------------------------------------------------------------
  225. // Summary:
  226. //     Call this member function to obtain the number of event views
  227. //     in the day view collection.
  228. // Remarks:
  229. //     This is a pure virtual function. This function must be defined
  230. //     in the derived class.
  231. // Returns:
  232. //     An int that contains the number of event views.
  233. //-----------------------------------------------------------------------
  234. virtual int GetViewEventsCount() = 0;
  235. //-----------------------------------------------------------------------
  236. // Summary:
  237. //     Call this member function to obtain a pointer to a
  238. //     CXTPCalendarViewEvent object associated with the event's index.
  239. // Parameters:
  240. //     nIndex  - An int that contains the event view index in the day
  241. //               view collection.
  242. // Remarks:
  243. //     Index number starts with 0 and cannot be negative.
  244. //     This is a pure virtual function. This function must be defined
  245. //     in the derived class.
  246. // Returns:
  247. //     A pointer to a CXTPCalendarViewEvent object.
  248. // See Also: GetViewEventsCount()
  249. //-----------------------------------------------------------------------
  250. virtual CXTPCalendarViewEvent* GetViewEvent_(int nIndex) = 0;
  251. //-----------------------------------------------------------------------
  252. // Summary:
  253. //     Call this member function to obtain a pointer to the containing
  254. //     CXTPCalendarViewDay object.
  255. // Returns:
  256. //     A pointer to the CXTPCalendarViewDay object.
  257. //-----------------------------------------------------------------------
  258. virtual CXTPCalendarViewDay* GetViewDay_() const = 0;
  259. //-----------------------------------------------------------------------
  260. // Summary:
  261. //     This member function is used to obtain the index of the "this"
  262. //     pointer Group View in the Calendar Day View.
  263. // Returns:
  264. //     An int that contains the index of the "this" day in the Calendar
  265. //     Day View.
  266. //-----------------------------------------------------------------------
  267. virtual int GetGroupIndex() const;
  268. //-----------------------------------------------------------------------
  269. // Summary:
  270. //     This member function is used to obtain a group's view caption.
  271. // Returns:
  272. //     A CString object that contains the group's view caption.
  273. //-----------------------------------------------------------------------
  274. virtual CString GetCaption();
  275. //-----------------------------------------------------------------------
  276. // Summary:
  277. //     This member function is used to obtain the number of
  278. //     event views elements in this Group View.
  279. // Remarks:
  280. //     Call this method to retrieve the number of elements in the array
  281. //     of event views inside this Group View.
  282. //     Because indexes are zero-based, the size is 1 greater than
  283. //     the largest index.
  284. // Returns:
  285. //     A count of event views elements.
  286. // See Also:
  287. //     GetChildHandlerAt
  288. //-----------------------------------------------------------------------
  289. virtual int GetChildHandlersCount();
  290. //-----------------------------------------------------------------------
  291. // Summary:
  292. //     Call this method to get a event view object at the
  293. //     specified numeric index.
  294. // Parameters:
  295. //     nIndex - An integer index that is greater than or equal to 0
  296. //              and less than the value returned by GetChildHandlersCount.
  297. // Remarks:
  298. //     Returns the array element at the specified index.
  299. // Returns:
  300. //     The pointer to the descendant of CXTPCalendarWMHandler element
  301. //     currently at this index.
  302. // See Also:
  303. //     GetChildHandlersCount
  304. //-----------------------------------------------------------------------
  305. virtual CXTPCalendarWMHandler* GetChildHandlerAt(int nIndex);
  306. //-----------------------------------------------------------------------
  307. // Summary:
  308. //     Call this member function to obtain a pointer a CXTPCalendarViewEvent
  309. //     object that is identified by the corresponding event object.
  310. // Parameters:
  311. //     pEvent  - Pointer to a CXTPCalendarEvent object.
  312. // Returns:
  313. //     A pointer to a CXTPCalendarViewEvent object.
  314. // See Also: CXTPCalendarEvent, CXTPCalendarViewEvent
  315. //-----------------------------------------------------------------------
  316. virtual CXTPCalendarViewEvent* GetViewEventByEvent_(CXTPCalendarEvent* pEvent);
  317. //-----------------------------------------------------------------------
  318. // Summary:
  319. //     Call this member function to obtain an event view object identified
  320. //     by its event place number.
  321. // Parameters:
  322. //     nEventPlace - An int that contains the ViewEvent place identifier.
  323. // Returns:
  324. //     A pointer to a CXTPCalendarViewEvent object.
  325. // See Also: CXTPCalendarEvent, CXTPCalendarViewEvent
  326. //-----------------------------------------------------------------------
  327. virtual CXTPCalendarViewEvent* GetViewEventByPlace_(int nEventPlace);
  328. protected:
  329. //-----------------------------------------------------------------------
  330. // Summary:
  331. //     This member function is used to exchange event view positions.
  332. // Parameters:
  333. //     pViewEvent - A pointer to a CXTPCalendarViewEvent object.
  334. //     nNewPlace  - An int that contains the new event view position.
  335. // Remarks:
  336. //     Each event view has a unique position number for the day. In the
  337. //     simple case, this is the row number used to draw the event view.
  338. //     This function is used to avoid duplicating position numbers.
  339. // See Also: CXTPCalendarViewEvent::ChangeEventPlace,
  340. //           CXTPCalendarViewEvent::GetEventPlaceNumber,
  341. //           CXTPCalendarViewEvent::AddMultiDayEvent_Slave,
  342. //           CXTPCalendarViewEvent::AdjustLayout
  343. //-----------------------------------------------------------------------
  344. virtual void ExchangeEventPlace(CXTPCalendarViewEvent* pViewEvent, int nNewPlace);
  345. //-----------------------------------------------------------------------
  346. // Summary:
  347. //     This member function is used to create a timer event.
  348. // Parameters:
  349. //     uTimeOut_ms - A UINT that contains the duration of the timer in
  350. //                   milliseconds.
  351. // Returns:
  352. //     A UINT that is the identifier of the timer.
  353. //-----------------------------------------------------------------------
  354. virtual UINT SetTimer(UINT uTimeOut_ms);
  355. //-----------------------------------------------------------------------
  356. // Summary:
  357. //     This member function is used to destroy a timer event.
  358. // Parameters:
  359. //     uTimerID - A UINT that specifies the identifier of the timer.
  360. //-----------------------------------------------------------------------
  361. virtual void KillTimer(UINT uTimerID);
  362. //-----------------------------------------------------------------------
  363. // Summary:
  364. //     This member function is used to allow some customization before
  365. //     show events.
  366. // Parameters:
  367. //     pEvents - A pointer to events array to draw.
  368. // Remarks:
  369. //     Default implementation send XTP_NC_CALENDAR_PREPOPULATE notification.
  370. // See Also: XTP_NC_CALENDAR_PREPOPULATE
  371. //-----------------------------------------------------------------------
  372. virtual void OnPrePopulate(CXTPCalendarEvents* pEvents);
  373. public:
  374. //{{AFX_CODEJOCK_PRIVATE
  375. // This structure describes coordinates of the group View.
  376. struct XTP_VIEW_GROUP_LAYOUT
  377. {
  378. CRect m_rcGroup;        // Group View rectangle.
  379. CRect m_rcGroupHeader;  // Group View header rectangle.
  380. };
  381. //}}AFX_CODEJOCK_PRIVATE
  382. protected:
  383. //{{AFX_CODEJOCK_PRIVATE
  384. virtual XTP_VIEW_GROUP_LAYOUT& GetLayout_();
  385. //}}AFX_CODEJOCK_PRIVATE
  386. protected:
  387. XTP_VIEW_GROUP_LAYOUT m_Layout; // This group view client coordinates.
  388. CXTPCalendarResources*  m_pResources;   // An associated resource object.
  389. };
  390. //===========================================================================
  391. // Summary:
  392. //     This class represents the day view portion of the CalendarView.
  393. // Remarks:
  394. //     It represents a specific view of the CalendarView's associated events
  395. //     data grouped by one day and provides basic functionality on this
  396. //     data using user input through the keyboard and the mouse.
  397. //
  398. //          These are the predefined view implementations available
  399. //          for the Calendar control:
  400. //
  401. //
  402. //          * Day and work week day views - Using the CXTPCalendarDayViewDay class.
  403. //          * Week day view               - Using the CXTPCalendarWeekViewDay class.
  404. //          * Month day view              - Using the CXTPCalendarMonthViewDay class.
  405. //
  406. //
  407. //          Furthermore, any user defined day view may also be implemented as
  408. //          a descendant of the CXTPCalendarViewDay class.
  409. //
  410. //          A typical day view model consists of a collection of ViewEvent's for
  411. //          the particular day, each of them represents a view of an CXTPCalendarEvent
  412. //          object.
  413. //
  414. // See Also: CXTPCalendarViewDayT, CXTPCalendarDayViewDay,
  415. //           CXTPCalendarWeekViewDay, CXTPCalendarMonthViewDay,
  416. //           CXTPCalendarView, CXTPCalendarViewEvent
  417. //===========================================================================
  418. class _XTP_EXT_CLASS CXTPCalendarViewDay : public CXTPCalendarWMHandler
  419. {
  420. //{{AFX_CODEJOCK_PRIVATE
  421. friend class CXTPCalendarView;
  422. friend class CXTPCalendarViewEvent;
  423. friend class CXTPCalendarTheme;
  424. DECLARE_DYNAMIC(CXTPCalendarViewDay)
  425. typedef CXTPCalendarWMHandler TBase;
  426. //}}AFX_CODEJOCK_PRIVATE
  427. public:
  428. //-----------------------------------------------------------------------
  429. // Summary:
  430. //     Default object constructor. Construct CXTPCalendarViewDay object.
  431. // Parameters:
  432. //     pView - Pointer to CXTPCalendarView object.
  433. // See Also: ~CXTPCalendarViewDay()
  434. //-----------------------------------------------------------------------
  435. CXTPCalendarViewDay(CXTPCalendarView* pView);
  436. //-----------------------------------------------------------------------
  437. // Summary:
  438. //     Default class destructor.
  439. // Remarks:
  440. //     Handles member item deallocation.
  441. //-----------------------------------------------------------------------
  442. virtual ~CXTPCalendarViewDay();
  443. //-----------------------------------------------------------------------
  444. // Summary:
  445. //     This member function is used to populate the view with data for
  446. //     all items contained in the view.
  447. // Parameters:
  448. //     dtDayDate - A COleDateTime object that contains the day's date.
  449. // Remarks:
  450. //     This is a pure virtual function. This function must be defined
  451. //     in the derived class.
  452. //-----------------------------------------------------------------------
  453. virtual void Populate(COleDateTime dtDayDate) = 0;
  454. //-----------------------------------------------------------------------
  455. // Summary:
  456. //     This member function is used to adjust the view's layout depending
  457. //     on the provided rectangle and then calls AdjustLayout() for all
  458. //     of the sub-items.
  459. // Parameters:
  460. //     pDC     - A pointer to a valid device context.
  461. //     rcDay   - A CRect object that contains the rectangle coordinates
  462. //               that are used to draw the view.
  463. // Remarks:
  464. //     Call Populate(COleDateTime dtDayDate) prior to calling AdjustLayout().
  465. //-----------------------------------------------------------------------
  466. virtual void AdjustLayout(CDC* pDC, const CRect& rcDay);
  467. //-----------------------------------------------------------------------
  468. // Summary:
  469. //     This member function is used to draw the view contents using
  470. //     the specified device context.
  471. // Parameters:
  472. //     pDC - A pointer to a valid device context.
  473. // Remarks:
  474. //     Call AdjustLayout() before calling Draw().
  475. // See Also: AdjustLayout(CRect rcDay)
  476. //-----------------------------------------------------------------------
  477. virtual void Draw(CDC* pDC) {
  478. UNREFERENCED_PARAMETER(pDC);
  479. }
  480. //-----------------------------------------------------------------------
  481. // Summary:
  482. //     This member function is used to obtain the number of
  483. //     resource group views elements in the collection.
  484. // Remarks:
  485. //     Call this method to retrieve the number of elements in the array.
  486. //     Because indexes are zero-based, the size is 1 greater than
  487. //     the largest index.
  488. // Returns:
  489. //     A count of resource group views elements.
  490. //-----------------------------------------------------------------------
  491. virtual int GetChildHandlersCount() { return GetViewGroupsCount(); }
  492. //-----------------------------------------------------------------------
  493. // Summary:
  494. //     Call this method to get a resource group view object at the
  495. //     specified numeric index.
  496. // Parameters:
  497. //     nIndex - An integer index that is greater than or equal to 0
  498. //              and less than the value returned by GetChildHandlersCount.
  499. // Remarks:
  500. //     Returns the array element at the specified index.
  501. // Returns:
  502. //     The pointer to the CXTPCalendarWMHandler element currently at this
  503. //     index.
  504. //-----------------------------------------------------------------------
  505. virtual CXTPCalendarWMHandler* GetChildHandlerAt(int nIndex) {
  506. ASSERT_KINDOF(CXTPCalendarWMHandler, GetViewGroup_(nIndex));
  507. return GetViewGroup_(nIndex);
  508. }
  509. //-----------------------------------------------------------------------
  510. // Summary:
  511. //     This member function is used to determine which view item,
  512. //     if any, is at the specified position index, and returns additional
  513. //     info in an XTP_CALENDAR_HITTESTINFO struct.
  514. // Parameters:
  515. //     pt       - A CPoint object that contains the coordinates of
  516. //                the point to test.
  517. //     pHitTest - A pointer to an XTP_CALENDAR_HITTESTINFO struct that
  518. //                contains information about the point to test.
  519. // Remarks:
  520. //     This is a pure virtual function. This function must be defined
  521. //     in the derived class.
  522. // Returns:
  523. //     A BOOL. TRUE if the item is found. FALSE otherwise.
  524. // See Also: XTP_CALENDAR_HITTESTINFO
  525. //-----------------------------------------------------------------------
  526. virtual BOOL HitTest(CPoint pt, XTP_CALENDAR_HITTESTINFO* pHitTest) = 0;
  527. //-----------------------------------------------------------------------
  528. // Summary:
  529. //     Call this member function to obtain a pointer to a
  530. //     CXTPCalendarView object.
  531. // Remarks:
  532. //     This is a pure virtual function. This function must be defined
  533. //     in the derived class.
  534. // Returns:
  535. //     A pointer to a CXTPCalendarView object.
  536. //-----------------------------------------------------------------------
  537. virtual CXTPCalendarView* GetView_() const = 0;
  538. //-----------------------------------------------------------------------
  539. // Summary:
  540. //     Call this member function to obtain a pointer to a
  541. //     CXTPCalendarControl object.
  542. // Returns:
  543. //     A pointer to a CXTPCalendarControl object.
  544. //-----------------------------------------------------------------------
  545. virtual CXTPCalendarControl* GetCalendarControl();
  546. //-----------------------------------------------------------------------
  547. // Summary:
  548. //     Call this member function to obtain a pointer to the associated
  549. //     Calendar Resources collection object.
  550. // Returns:
  551. //     A pointer to the CXTPCalendarResources collection object.
  552. // See Also:
  553. //     CXTPCalendarResources overview, CXTPCalendarResource overview
  554. //-----------------------------------------------------------------------
  555. virtual CXTPCalendarResources* GetResources();
  556. //-----------------------------------------------------------------------
  557. // Summary:
  558. //     This member function sets the new Resources collection for the view day.
  559. // Parameters:
  560. //     pResources - A pointer to the CXTPCalendarResources collection object.
  561. // Remarks:
  562. //     Call this member function to programmatically set the new
  563. //     Resources collection for the view day.
  564. //-----------------------------------------------------------------------
  565. virtual void SetResources(CXTPCalendarResources* pResources);
  566. //-----------------------------------------------------------------------
  567. // Summary:
  568. //     Call this member function to obtain the number of event views
  569. //     in the day view collection.
  570. // Remarks:
  571. //     This function left for for compatibility with previous versions
  572. //     and only for singe resource group mode.
  573. // Returns:
  574. //     An int that contains the number of event views.
  575. //-----------------------------------------------------------------------
  576. virtual int GetViewEventsCount();
  577. //-----------------------------------------------------------------------
  578. // Summary:
  579. //     Call this member function to obtain a pointer to a
  580. //     CXTPCalendarViewEvent object associated with the event's index.
  581. // Parameters:
  582. //     nIndex  - An int that contains the event view index in the day
  583. //               view collection.
  584. // Remarks:
  585. //     Index number starts with 0 and cannot be negative.
  586. //     This function left for for compatibility with previous versions
  587. //     and only for singe resource group mode.
  588. // Returns:
  589. //     A pointer to a CXTPCalendarViewEvent object.
  590. // See Also: GetViewEventsCount()
  591. //-----------------------------------------------------------------------
  592. virtual CXTPCalendarViewEvent* GetViewEvent_(int nIndex);
  593. //-----------------------------------------------------------------------
  594. // Summary:
  595. //     Call this member function to obtain the number of resource group
  596. //     views in the view day collection.
  597. // Remarks:
  598. //     This is a pure virtual function. This function must be defined
  599. //     in the derived class.
  600. // Returns:
  601. //     An int that contains the number of event views.
  602. //-----------------------------------------------------------------------
  603. virtual int GetViewGroupsCount() = 0;
  604. //-----------------------------------------------------------------------
  605. // Summary:
  606. //     Call this member function to obtain a pointer to a
  607. //     CXTPCalendarViewGroup object associated with the group's index.
  608. // Parameters:
  609. //     nIndex  - An int that contains the group view index in the day
  610. //               view collection.
  611. // Remarks:
  612. //     Index number starts with 0 and cannot be negative.
  613. //     This is a pure virtual function. This function must be defined
  614. //     in the derived class.
  615. // Returns:
  616. //     A pointer to a CXTPCalendarViewGroup object.
  617. // See Also: GetViewGroupsCount()
  618. //-----------------------------------------------------------------------
  619. virtual CXTPCalendarViewGroup* GetViewGroup_(int nIndex) = 0;
  620. //-----------------------------------------------------------------------
  621. // Summary:
  622. //     Call this member function to obtain a day date value.
  623. // Returns:
  624. //     A COleDateTime object containing the day's date.
  625. // See Also: SetDayDate(COleDateTime dtDayDate)
  626. //-----------------------------------------------------------------------
  627. virtual COleDateTime GetDayDate() const;
  628. //-----------------------------------------------------------------------
  629. // Summary:
  630. //     Call this member function to obtain the day date value.
  631. // Parameters:
  632. //     dtDayDate   - A COleDateTime object that contains the new day's
  633. //                   date value.
  634. // Returns:
  635. //     A COleDateTime object that contains the previous day's date value.
  636. // See Also: GetDayDate()
  637. //-----------------------------------------------------------------------
  638. virtual COleDateTime SetDayDate(COleDateTime dtDayDate);
  639. //-----------------------------------------------------------------------
  640. // Summary:
  641. //     Call this member function to determine if all day's event
  642. //     views are visible.
  643. // Remarks:
  644. //     This function is used for determining if the expanding sings are
  645. //     drawn.
  646. // Returns:
  647. //     A BOOL. TRUE if there is at least one event that is completely
  648. //     invisible. FALSE otherwise.
  649. //-----------------------------------------------------------------------
  650. virtual BOOL _NoAllEventsAreVisible();
  651. //-----------------------------------------------------------------------
  652. // Summary:
  653. //     Call this member function to determine if the day view is selected.
  654. // Returns:
  655. //     A BOOL. TRUE if the day view is selected. FALSE otherwise.
  656. // See Also: SetSelected(bSet)
  657. //-----------------------------------------------------------------------
  658. virtual BOOL IsSelected() const;
  659. //-----------------------------------------------------------------------
  660. // Summary:
  661. //     This member function is used to set the day view as selected
  662. // See Also: IsSelected()
  663. //-----------------------------------------------------------------------
  664. virtual void SetSelected();
  665. //-----------------------------------------------------------------------
  666. // Summary:
  667. //     Call this member function to obtain the day view rectangle coordinates.
  668. // Returns:
  669. //     A CRect object containing the day view rectangle coordinates.
  670. // See Also: SetDayRect(CRect rcDay)
  671. //-----------------------------------------------------------------------
  672. virtual CRect GetDayRect();
  673. //-----------------------------------------------------------------------
  674. // Summary:
  675. //     This member function is used to set the day view rectangle coordinates.
  676. // Parameters:
  677. //     rcDay - A CRect object containing the new rectangle coordinates.
  678. // See Also: GetDayRect()
  679. //-----------------------------------------------------------------------
  680. virtual void SetDayRect(CRect rcDay);
  681. //-----------------------------------------------------------------------
  682. // Summary:
  683. //     Call this member function to determine if there are event views
  684. //     invisible because the boundaries of the day view are hidden, and
  685. //     the day view should display the expand sign.
  686. // Returns:
  687. //     A BOOL. TRUE if there are invisible views. FALSE otherwise.
  688. //-----------------------------------------------------------------------
  689. virtual BOOL IsExpanded();
  690. //-----------------------------------------------------------------------
  691. // Summary:
  692. //     Call this member function to obtain the expand sign rectangle.
  693. // Returns:
  694. //     A CRect object that contains the expand sign rectangle coordinates.
  695. //-----------------------------------------------------------------------
  696. virtual CRect GetExpandSignRect();
  697. //-----------------------------------------------------------------------
  698. // Summary:
  699. //     This member function is used to create a timer event.
  700. // Parameters:
  701. //     uTimeOut_ms - A UINT that contains the duration of the timer in
  702. //                   milliseconds.
  703. // Returns:
  704. //     A UINT that is the identifier of the timer.
  705. //-----------------------------------------------------------------------
  706. virtual UINT SetTimer(UINT uTimeOut_ms);
  707. //-----------------------------------------------------------------------
  708. // Summary:
  709. //     This member function is used to destroy a timer event.
  710. // Parameters:
  711. //     uTimerID - A UINT that specifies the identifier of the timer.
  712. //-----------------------------------------------------------------------
  713. virtual void KillTimer(UINT uTimerID);
  714. //-----------------------------------------------------------------------
  715. // Summary:
  716. //     This member function is used to obtain the index of the "this"
  717. //     pointer day in the Calendar Day View.
  718. // Returns:
  719. //     An int that contains the index of the "this" day in the Calendar
  720. //     Day View.
  721. //-----------------------------------------------------------------------
  722. virtual int GetDayIndex() const;
  723. //-----------------------------------------------------------------------
  724. // Summary:
  725. //      This member function used to process user action xtpCalendarUserAction_OnExpandDay.
  726. // Parameters:
  727. //      eButton - [in] a button from which this action comes.
  728. // Remarks:
  729. //      Implementation send a XTP_NC_CALENDAR_USERACTION notification.
  730. //
  731. // Returns:
  732. //      TRUE if action was handled by user and default processing must  be
  733. //      skipped, FALSE otherwise.
  734. // See Also: XTP_NC_CALENDAR_USERACTION
  735. //-----------------------------------------------------------------------
  736. virtual BOOL UserAction_OnExpandDay(XTPCalendarExpandDayButton eButton);
  737. protected:
  738. //-----------------------------------------------------------------------
  739. // Summary:
  740. //     This member function is used to allow some customization before
  741. //     show events.
  742. // Remarks:
  743. //     Default implementation send XTP_NC_CALENDAR_PREPOPULATE_DAY notification.
  744. // See Also: XTP_NC_CALENDAR_PREPOPULATE
  745. //-----------------------------------------------------------------------
  746. virtual void OnPrePopulateDay();
  747. public:
  748. //{{AFX_CODEJOCK_PRIVATE
  749. struct XTP_VIEW_DAY_LAYOUT
  750. {
  751. CRect m_rcDay;          // Day rectangle.
  752. CRect m_rcDayHeader;    // Day header rectangle.
  753. CRect m_rcExpandSign;       // Expand Sign rectangle.
  754. int   m_nHotState;  // Last Items Hot state.
  755. enum XTPEnumHotItem
  756. {
  757. xtpHotExpandButton  = 0x001,
  758. xtpHotDayHeader     = 0x002,
  759. };
  760. };
  761. protected:
  762. //{{AFX_CODEJOCK_PRIVATE
  763. virtual XTP_VIEW_DAY_LAYOUT& GetLayout_();
  764. //}}AFX_CODEJOCK_PRIVATE
  765. protected:
  766. XTP_VIEW_DAY_LAYOUT m_Layout; // Layout data.
  767. COleDateTime m_dtDate;          // Day date.
  768. CXTPCalendarResources*  m_pResources; // Resources array
  769. protected:
  770. };
  771. //===========================================================================
  772. // Summary:
  773. //     This class template customizes, overrides and implements some
  774. //     functionality for the CXTPCalendarViewDay base class.
  775. // Remarks:
  776. //     It is used as a part of the calendar control framework to build
  777. //     <b><i>ViewDay</i></b> layer of <b>View->DayView->ViewDay</b>
  778. //     typed objects hierarchy.
  779. //     These are template parameters:
  780. //     _TView      - Type of owner View object.
  781. //     _TViewGroup - Type of View Resource objects stored in View Day.
  782. //     _THitTest   - Type of HitTest struct, used as parameter in the
  783. //                   member functions.
  784. //     _TPThis     - The last derived class type in the class hierarchy.
  785. //
  786. //          You must provide all of the above parameters.
  787. // See Also: CXTPCalendarViewDay
  788. //===========================================================================
  789. template<class _TView, class _TViewGroup, class _THitTest, class _TPThis >
  790. class CXTPCalendarViewDayT : public CXTPCalendarViewDay
  791. {
  792. public:
  793. //------------------------------------------------------------------------
  794. // Remarks:
  795. //     Owner view class type definition.
  796. //------------------------------------------------------------------------
  797. typedef _TView TView;
  798. //------------------------------------------------------------------------
  799. // Remarks:
  800. //     Event views collection type definition.
  801. //------------------------------------------------------------------------
  802. //  typedef CXTPCalendarPtrCollectionT< _TViewEvent > TViewEventsCollection;
  803. //------------------------------------------------------------------------
  804. // Remarks:
  805. //     Resource views collection type definition.
  806. //------------------------------------------------------------------------
  807. typedef CXTPCalendarPtrCollectionT< _TViewGroup > TViewGroupsCollection;
  808. public:
  809. //-----------------------------------------------------------------------
  810. // Summary:
  811. //     Default object constructor.
  812. // Parameters:
  813. //     pView - Pointer to owner view object.
  814. // See Also: ~CXTPCalendarViewDayT()
  815. //-----------------------------------------------------------------------
  816. CXTPCalendarViewDayT(_TView* pView) : CXTPCalendarViewDay((CXTPCalendarView*)pView)
  817. {
  818. m_pView = pView;
  819. }
  820. //-----------------------------------------------------------------------
  821. // Summary:
  822. //     Default class destructor.
  823. // Remarks:
  824. //     Handles class members deallocation.
  825. //-----------------------------------------------------------------------
  826. virtual ~CXTPCalendarViewDayT() {
  827. };
  828. //-----------------------------------------------------------------------
  829. // Summary:
  830. //     This member function is used to determine which view item,
  831. //     if any, is at a specified position index, and returns additional
  832. //     info in a XTP_CALENDAR_HITTESTINFO struct.
  833. // Parameters:
  834. //     pt       - A CPoint object that contains the coordinates of
  835. //                the point to test.
  836. //     pHitTest - A pointer to a XTP_CALENDAR_HITTESTINFO struct that
  837. //                contains information about the point to test.
  838. // Remarks:
  839. //     Implements standard functionality for the HitTest method.
  840. // Returns:
  841. //     A BOOL. TRUE if the item is found. FALSE otherwise.
  842. // See Also: XTP_CALENDAR_HITTESTINFO
  843. //-----------------------------------------------------------------------
  844. virtual BOOL HitTest(CPoint pt, XTP_CALENDAR_HITTESTINFO* pHitTest)
  845. {
  846. _THitTest hitInfo;
  847. BOOL bRes = HitTestEx(pt, &hitInfo);
  848. if (bRes && pHitTest) {
  849. *pHitTest = (XTP_CALENDAR_HITTESTINFO)hitInfo;
  850. }
  851. return bRes;
  852. }
  853. //-----------------------------------------------------------------------
  854. // Summary:
  855. //     This member function is used to determine which view item,
  856. //     if any, is at the specified position index, and returns additional
  857. //     info in the _THitTest template object.
  858. // Parameters:
  859. //     pt       - A CPoint that contains the coordinates of the point test.
  860. //     pHitTest - A pointer to a _THitTest structure.
  861. // Remarks:
  862. //     Implements standard functionality for the HitTestEx method.
  863. // Returns:
  864. //     A BOOL. TRUE if the item is found. FALSE otherwise.
  865. // See Also: XTP_CALENDAR_HITTESTINFO
  866. //-----------------------------------------------------------------------
  867. virtual BOOL HitTestEx(CPoint pt, _THitTest* pHitTest)
  868. {
  869. if (!pHitTest) {
  870. ASSERT(FALSE);
  871. return FALSE;
  872. }
  873. if (!m_Layout.m_rcDay.PtInRect(pt)) {
  874. return FALSE;
  875. }
  876. if (m_Layout.m_rcDayHeader.PtInRect(pt)) {
  877. FillHitTestEx(pHitTest);
  878. pHitTest->uHitCode = xtpCalendarHitTestDayHeader;
  879. return TRUE;
  880. }
  881. if (m_Layout.m_rcExpandSign.PtInRect(pt) &&
  882. !XTP_SAFE_GET1(GetView_(), GetTheme(), NULL))
  883. {
  884. FillHitTestEx(pHitTest);
  885. pHitTest->uHitCode = xtpCalendarHitTestDayExpandButton;
  886. return TRUE;
  887. }
  888. int nCount = GetViewGroupsCount();
  889. for (int i = 0; i < nCount; i++)
  890. {
  891. _TViewGroup* pViewGroup = GetViewGroup(i);
  892. ASSERT(pViewGroup);
  893. if (pViewGroup && pViewGroup->HitTestEx(pt, pHitTest))
  894. {
  895. ASSERT(!pHitTest->pViewGroup || pHitTest->pViewGroup == pViewGroup);
  896. pHitTest->nGroup = i;
  897. pHitTest->pViewGroup = pViewGroup;
  898. return TRUE;
  899. }
  900. }
  901. FillHitTestEx(pHitTest);
  902. pHitTest->uHitCode = xtpCalendarHitTestDayArea;
  903. return TRUE;
  904. }
  905. //-----------------------------------------------------------------------
  906. // Summary:
  907. //     This member function is used to fill the pHitTest structure
  908. //     members with the default values for the current day view object.
  909. // Parameters:
  910. //     pHitTest - A Pointer to a _THitTest structure.
  911. // Remarks:
  912. //     This is a pure virtual function.  This function must be defined
  913. //     in the derived class.
  914. //-----------------------------------------------------------------------
  915. virtual void FillHitTestEx(_THitTest* pHitTest) = 0;
  916. //-----------------------------------------------------------------------
  917. // Summary:
  918. //     This member function is used to obtain a pointer to the owner
  919. //     view object.
  920. // Returns:
  921. //     A CXTPCalendarView pointer to the owner view object.
  922. // See Also: GetView
  923. //-----------------------------------------------------------------------
  924. AFX_INLINE virtual CXTPCalendarView* GetView_() const {
  925. ASSERT(this);
  926. return this ? (CXTPCalendarView*)m_pView : NULL;
  927. }
  928. //-----------------------------------------------------------------------
  929. // Summary:
  930. //     This member function is used to obtain the owner view object.
  931. // Returns:
  932. //     A _TView template pointer to the owner view object.
  933. // See Also: GetView_
  934. //-----------------------------------------------------------------------
  935. AFX_INLINE _TView* GetView() const {
  936. ASSERT(this);
  937. return this ? m_pView : NULL;
  938. }
  939. //-----------------------------------------------------------------------
  940. // Summary:
  941. //     Call this member function to obtain the number of resource views
  942. //     in the day view collection.
  943. // Returns:
  944. //     An int that contains the number of resource views.
  945. //-----------------------------------------------------------------------
  946. virtual int GetViewGroupsCount() {
  947. return m_arViewGroups.GetCount();
  948. }
  949. //-----------------------------------------------------------------------
  950. // Summary:
  951. //     Call this member function to obtain a pointer to the _TViewGroup
  952. //     object that corresponds to the resource's index.
  953. // Parameters:
  954. //     nIndex  - An int that contains the resource view index in the day
  955. //               view collection.
  956. // Returns:
  957. //     A pointer to a _TViewGroup template object.
  958. // Remarks:
  959. //     Index number starts with 0 and cannot be negative.
  960. // See Also:
  961. //     GetViewGroupsCount(), GetViewGroup_()
  962. //-----------------------------------------------------------------------
  963. virtual _TViewGroup* GetViewGroup(int nIndex)
  964. {
  965. ASSERT(this);
  966. if (!this) {
  967. return NULL;
  968. }
  969. int nCount = m_arViewGroups.GetCount();
  970. ASSERT(nIndex >= 0 && nIndex < nCount);
  971. return (nIndex >= 0 && nIndex < nCount) ? m_arViewGroups.GetAt(nIndex) : NULL;
  972. }
  973. //-----------------------------------------------------------------------
  974. // Summary:
  975. //     Call this member function to obtain a pointer to the base CXTPCalendarViewGroup*
  976. //     object that corresponds to the resource's index.
  977. // Parameters:
  978. //     nIndex  - An int that contains the resource view index in the day
  979. //               view collection.
  980. // Returns:
  981. //     A pointer to a base of the _TViewGroup template object.
  982. // Remarks:
  983. //     Index number starts with 0 and cannot be negative.
  984. // See Also:
  985. //     GetViewGroupsCount(), GetViewGroup()
  986. //-----------------------------------------------------------------------
  987. virtual CXTPCalendarViewGroup* GetViewGroup_(int nIndex)
  988. {
  989. ASSERT(this);
  990. _TViewGroup* pViewGroup = this ? GetViewGroup(nIndex) : NULL;
  991. return pViewGroup;
  992. }
  993. //-----------------------------------------------------------------------
  994. // Summary:
  995. //     This member function is used to populate the view with data for
  996. //     all resource items contained in the view.
  997. // Parameters:
  998. //     dtDayDate - A COleDateTime object that contains the day's date.
  999. // Remarks:
  1000. //     This function provides common functionality for all CXTPCalendarViewDay -
  1001. //     derived classes.
  1002. //-----------------------------------------------------------------------
  1003. virtual void Populate(COleDateTime dtDayDate)
  1004. {
  1005. m_dtDate = CXTPCalendarUtils::ResetTime(dtDayDate);
  1006. m_arViewGroups.RemoveAll();
  1007. if (!GetView_()) {
  1008. return;
  1009. }
  1010. OnPrePopulateDay();
  1011. CXTPCalendarResources* pResources = GetResources();
  1012. if (!pResources)
  1013. return;
  1014. _TViewGroup* pGroup = new _TViewGroup(GetPThis());
  1015. if (!pGroup) {
  1016. return;
  1017. }
  1018. m_arViewGroups.Add(pGroup);
  1019. pGroup->SetResources(pResources);
  1020. pGroup->Populate(m_dtDate);
  1021. }
  1022. //-----------------------------------------------------------------------
  1023. // Summary:
  1024. //     This member function is used to adjust the view's layout depending
  1025. //     on the provided rectangle and then calls AdjustLayout() for all
  1026. //     of the sub-items.
  1027. // Parameters:
  1028. //     pDC     - A pointer to a valid device context.
  1029. //     rcDay   - A CRect object that contains the rectangle coordinates
  1030. //               that are used to draw the view.
  1031. // Remarks:
  1032. //     Call Populate(COleDateTime dtDayDate) prior to calling AdjustLayout().
  1033. //-----------------------------------------------------------------------
  1034. virtual void AdjustLayout(CDC* pDC, const CRect& rcDay)
  1035. {
  1036. CXTPCalendarViewDay::AdjustLayout(pDC, rcDay);
  1037. int nCount = GetViewGroupsCount();
  1038. for (int i = 0; i < nCount; i++)
  1039. {
  1040. CXTPCalendarViewGroup* pViewGroup = GetViewGroup_(i);
  1041. ASSERT(pViewGroup);
  1042. if (pViewGroup) {
  1043. pViewGroup->AdjustLayout(pDC, rcDay);
  1044. }
  1045. }
  1046. }
  1047. //-----------------------------------------------------------------------
  1048. // Summary:
  1049. //     Call this member function to determine if all of the day's event
  1050. //     views are not visible and to calculate the rectangle for the ExpandSign.
  1051. // Parameters:
  1052. //     pDC - A pointer to a valid device context.
  1053. // Returns:
  1054. //     TRUE if there are invisible event views. FALSE otherwise.
  1055. // See Also: CXTPCalendarViewDay::_NoAllEventsAreVisible
  1056. //-----------------------------------------------------------------------
  1057. virtual BOOL NoAllEventsAreVisible()
  1058. {
  1059. if (CXTPCalendarViewDay::_NoAllEventsAreVisible())
  1060. {
  1061. if (GetView_() && !GetView_()->GetTheme())
  1062. {
  1063. CSize szBm = XTP_SAFE_GET2(GetView_(), GetPaintManager(), GetExpandSignSize(), CSize(0) );
  1064. m_Layout.m_rcExpandSign.SetRect(m_Layout.m_rcDay.right - szBm.cx, m_Layout.m_rcDay.bottom - szBm.cy,
  1065. m_Layout.m_rcDay.right, m_Layout.m_rcDay.bottom);
  1066. }
  1067. return TRUE;
  1068. }
  1069. else
  1070. {
  1071. m_Layout.m_rcExpandSign.SetRect(m_Layout.m_rcDay.right, m_Layout.m_rcDay.bottom,
  1072. m_Layout.m_rcDay.right, m_Layout.m_rcDay.bottom);
  1073. return FALSE;
  1074. }
  1075. }
  1076. protected:
  1077. //-----------------------------------------------------------------------
  1078. // Summary:
  1079. //     Call this member function to obtain the typed pointer to the
  1080. //     last derived class in the class hierarchy.
  1081. // Remarks: _TPThis - The last derived class type in the class hierarchy.
  1082. //          This is a pure virtual function. This function must be defined
  1083. //          in the derived class.
  1084. // Returns:
  1085. //     Pointer to this object as last derived class type.
  1086. //-----------------------------------------------------------------------
  1087. virtual _TPThis* GetPThis() = 0;
  1088. TViewGroupsCollection m_arViewGroups; // Storage for views of groups.
  1089. private:
  1090. _TView* m_pView; // Storage for a owner view.
  1091. };
  1092. ////////////////////////////////////////////////////////////////////////////
  1093. AFX_INLINE COleDateTime CXTPCalendarViewDay::GetDayDate() const {
  1094. return m_dtDate;
  1095. }
  1096. AFX_INLINE COleDateTime CXTPCalendarViewDay::SetDayDate(COleDateTime dtDayDate) {
  1097. COleDateTime dtOld(m_dtDate);
  1098. m_dtDate = CXTPCalendarUtils::ResetTime(dtDayDate);
  1099. return dtOld;
  1100. }
  1101. AFX_INLINE CRect CXTPCalendarViewDay::GetDayRect() {
  1102. return m_Layout.m_rcDay;
  1103. }
  1104. AFX_INLINE void CXTPCalendarViewDay::SetDayRect(CRect rcDay) {
  1105. m_Layout.m_rcDay.CopyRect(rcDay);
  1106. }
  1107. AFX_INLINE BOOL CXTPCalendarViewDay::IsExpanded() {
  1108. return m_Layout.m_rcExpandSign.Width() > 0 ? TRUE : FALSE;
  1109. }
  1110. AFX_INLINE CRect CXTPCalendarViewDay::GetExpandSignRect() {
  1111. return m_Layout.m_rcExpandSign;
  1112. }
  1113. //===========================================================================
  1114. // Summary:
  1115. //     This class template customizes, overrides and implements some
  1116. //     functionality for the CXTPCalendarViewGroup base class.
  1117. // Remarks:
  1118. //     It is used as a part of the calendar control framework to build
  1119. //     <b><i>ViewGroup</i></b> layer of <b>View->DayView->ViewDay->ViewGroup</b>
  1120. //     typed objects hierarchy.
  1121. //     These are template parameters:
  1122. //     _TView      - Type of owner View object.
  1123. //     _TViewEvent - Type of View Event objects stored in Group View.
  1124. //     _THitTest   - Type of HitTest struct, used as parameter in the
  1125. //                   member functions.
  1126. //     _TPThis     - The last derived class type in the class hierarchy.
  1127. //
  1128. //          You must provide all of the above parameters.
  1129. // See Also: CXTPCalendarViewGroup
  1130. //===========================================================================
  1131. template<class _TViewDay, class _TViewEvent, class _THitTest, class _TPThis>
  1132. class CXTPCalendarViewGroupT : public CXTPCalendarViewGroup
  1133. {
  1134. public:
  1135. //------------------------------------------------------------------------
  1136. // Remarks:
  1137. //     Owner view class type definition.
  1138. //------------------------------------------------------------------------
  1139. typedef _TViewDay TViewDay;
  1140. //------------------------------------------------------------------------
  1141. // Remarks:
  1142. //     Event views collection type definition.
  1143. //------------------------------------------------------------------------
  1144. typedef CXTPCalendarPtrCollectionT< _TViewEvent > TViewEventsCollection;
  1145. public:
  1146. //-----------------------------------------------------------------------
  1147. // Summary:
  1148. //     Default object constructor.
  1149. // Parameters:
  1150. //     pViewDay - Pointer to owner view Day object.
  1151. // See Also: ~CXTPCalendarViewGroupT()
  1152. //-----------------------------------------------------------------------
  1153. CXTPCalendarViewGroupT(_TViewDay* pViewDay)
  1154. {
  1155. m_pViewDay = pViewDay;
  1156. }
  1157. //-----------------------------------------------------------------------
  1158. // Summary:
  1159. //     Default class destructor.
  1160. // Remarks:
  1161. //     Handles class members deallocation.
  1162. //-----------------------------------------------------------------------
  1163. virtual ~CXTPCalendarViewGroupT() {
  1164. };
  1165. //-----------------------------------------------------------------------
  1166. // Summary:
  1167. //     This member function is used to determine which view item,
  1168. //     if any, is at a specified position index, and returns additional
  1169. //     info in a XTP_CALENDAR_HITTESTINFO struct.
  1170. // Parameters:
  1171. //     pt       - A CPoint object that contains the coordinates of
  1172. //                the point to test.
  1173. //     pHitTest - A pointer to a XTP_CALENDAR_HITTESTINFO struct that
  1174. //                contains information about the point to test.
  1175. // Remarks:
  1176. //     Implements standard functionality for the HitTest method.
  1177. // Returns:
  1178. //     A BOOL. TRUE if the item is found. FALSE otherwise.
  1179. // See Also: XTP_CALENDAR_HITTESTINFO
  1180. //-----------------------------------------------------------------------
  1181. virtual BOOL HitTest(CPoint pt, XTP_CALENDAR_HITTESTINFO* pHitTest)
  1182. {
  1183. _THitTest hitInfo;
  1184. BOOL bRes = HitTestEx(pt, &hitInfo);
  1185. if (bRes && pHitTest) {
  1186. *pHitTest = (XTP_CALENDAR_HITTESTINFO)hitInfo;
  1187. }
  1188. return bRes;
  1189. }
  1190. //-----------------------------------------------------------------------
  1191. // Summary:
  1192. //     This member function is used to determine which view item,
  1193. //     if any, is at the specified position index, and returns additional
  1194. //     info in the _THitTest template object.
  1195. // Parameters:
  1196. //     pt       - A CPoint that contains the coordinates of the point test.
  1197. //     pHitTest - A pointer to a _THitTest structure.
  1198. // Remarks:
  1199. //     Implements standard functionality for the HitTestEx method.
  1200. // Returns:
  1201. //     A BOOL. TRUE if the item is found. FALSE otherwise.
  1202. // See Also: XTP_CALENDAR_HITTESTINFO
  1203. //-----------------------------------------------------------------------
  1204. virtual BOOL HitTestEx(CPoint pt, _THitTest* pHitTest)
  1205. {
  1206. if (!pHitTest) {
  1207. ASSERT(FALSE);
  1208. return FALSE;
  1209. }
  1210. if (!m_Layout.m_rcGroup.PtInRect(pt)) {
  1211. return FALSE;
  1212. }
  1213. if (m_Layout.m_rcGroupHeader.PtInRect(pt)) {
  1214. FillHitTestEx(pHitTest);
  1215. pHitTest->uHitCode = xtpCalendarHitTestGroupHeader;
  1216. return TRUE;
  1217. }
  1218. int nCount = GetViewEventsCount();
  1219. for (int i = 0; i < nCount; i++)
  1220. {
  1221. _TViewEvent* pViewEvent = GetViewEvent(i);
  1222. ASSERT(pViewEvent);
  1223. if (pViewEvent && pViewEvent->HitTestEx(pt, pHitTest))
  1224. {
  1225. ASSERT(!pHitTest->pViewEvent || pHitTest->pViewEvent == pViewEvent);
  1226. pHitTest->nEvent = i;
  1227. pHitTest->pViewEvent = pViewEvent;
  1228. return TRUE;
  1229. }
  1230. }
  1231. FillHitTestEx(pHitTest);
  1232. pHitTest->uHitCode = xtpCalendarHitTestGroupArea;
  1233. return TRUE;
  1234. }
  1235. //-----------------------------------------------------------------------
  1236. // Summary:
  1237. //     This member function is used to fill the pHitTest structure
  1238. //     members with the default values for the current group view object.
  1239. // Parameters:
  1240. //     pHitTest - A Pointer to a _THitTest structure.
  1241. // Remarks:
  1242. //     This is a pure virtual function.  This function must be defined
  1243. //     in the derived class.
  1244. //-----------------------------------------------------------------------
  1245. virtual void FillHitTestEx(_THitTest* pHitTest) = 0;
  1246. //-----------------------------------------------------------------------
  1247. // Summary:
  1248. //     This member function is used to obtain a pointer to the owner
  1249. //     view object.
  1250. // Returns:
  1251. //     A CXTPCalendarView pointer to the owner view object.
  1252. // See Also: GetView
  1253. //-----------------------------------------------------------------------
  1254. AFX_INLINE virtual CXTPCalendarViewDay* GetViewDay_() const {
  1255. ASSERT(this);
  1256. return this ? (CXTPCalendarViewDay*)m_pViewDay : NULL;
  1257. }
  1258. //-----------------------------------------------------------------------
  1259. // Summary:
  1260. //     This member function is used to obtain the owner view object.
  1261. // Returns:
  1262. //     A _TView template pointer to the owner view object.
  1263. // See Also: GetView_
  1264. //-----------------------------------------------------------------------
  1265. AFX_INLINE _TViewDay* GetViewDay() const {
  1266. ASSERT(this);
  1267. return this ? m_pViewDay : NULL;
  1268. }
  1269. //-----------------------------------------------------------------------
  1270. // Summary:
  1271. //     Call this member function to obtain the number of event views
  1272. //     in the day view collection.
  1273. // Returns:
  1274. //     An int that contains the number of event views.
  1275. //-----------------------------------------------------------------------
  1276. virtual int GetViewEventsCount() {
  1277. return m_arEvents.GetCount();
  1278. }
  1279. //-----------------------------------------------------------------------
  1280. // Summary:
  1281. //     Call this member function to obtain a pointer to the _TViewEvent
  1282. //     object that corresponds to the event's index.
  1283. // Parameters:
  1284. //     nIndex  - An int that contains the event view index in the day
  1285. //               view collection.
  1286. // Returns:
  1287. //     A pointer to a _TViewEvent template object.
  1288. // Remarks:
  1289. //     Index number starts with 0 and cannot be negative.
  1290. // See Also:
  1291. //     GetViewEventsCount(), GetViewEvent_()
  1292. //-----------------------------------------------------------------------
  1293. virtual _TViewEvent* GetViewEvent(int nIndex)
  1294. {
  1295. ASSERT(this);
  1296. if (!this) {
  1297. return NULL;
  1298. }
  1299. int nCount = m_arEvents.GetCount();
  1300. ASSERT(nIndex >= 0 && nIndex < nCount);
  1301. return (nIndex >= 0 && nIndex < nCount) ? m_arEvents.GetAt(nIndex) : NULL;
  1302. }
  1303. //-----------------------------------------------------------------------
  1304. // Summary:
  1305. //     Call this member function to obtain a pointer to the base CXTPCalendarViewEvent*
  1306. //     object that corresponds to the event's index.
  1307. // Parameters:
  1308. //     nIndex  - An int that contains the event view index in the day
  1309. //               view collection.
  1310. // Returns:
  1311. //     A pointer to a base of the _TViewEvent template object.
  1312. // Remarks:
  1313. //     Index number starts with 0 and cannot be negative.
  1314. // See Also:
  1315. //     GetViewEventsCount(), GetViewEvent()
  1316. //-----------------------------------------------------------------------
  1317. virtual CXTPCalendarViewEvent* GetViewEvent_(int nIndex)
  1318. {
  1319. ASSERT(this);
  1320. _TViewEvent* pViewEvent = this ? GetViewEvent(nIndex) : NULL;
  1321. return pViewEvent;
  1322. }
  1323. //-----------------------------------------------------------------------
  1324. // Summary:
  1325. //     This member function is used to populate the view with data for
  1326. //     all event items contained in the view.
  1327. // Parameters:
  1328. //     dtDayDate - A COleDateTime object that contains the day's date.
  1329. // Remarks:
  1330. //     This function provides common functionality for all CXTPCalendarViewGroup -
  1331. //     derived classes.
  1332. //-----------------------------------------------------------------------
  1333. virtual void Populate(COleDateTime dtDayDate)
  1334. {
  1335. dtDayDate = CXTPCalendarUtils::ResetTime(dtDayDate);
  1336. m_arEvents.RemoveAll();
  1337. CXTPCalendarEventsPtr ptrEventsAr = new CXTPCalendarEvents();
  1338. CXTPCalendarView* pView = XTP_SAFE_GET1(GetViewDay_(), GetView_(), NULL);
  1339. if (!GetResources() || !pView || !ptrEventsAr) {
  1340. return;
  1341. }
  1342. int nResourcesCount = GetResources()->GetCount();
  1343. for (int nRc = 0; nRc < nResourcesCount; nRc++)
  1344. {
  1345. CXTPCalendarResource* pRC = GetResources()->GetAt(nRc);
  1346. if (!pRC) {
  1347. continue;
  1348. }
  1349. // to support dragging common mechanism "pView->RetrieveDayEvents" is used.
  1350. CXTPCalendarEventsPtr ptrEvents = pView->RetrieveDayEvents(pRC, dtDayDate);
  1351. if (!ptrEvents) {
  1352. continue;
  1353. }
  1354. // append events
  1355. ptrEventsAr->Append(ptrEvents);
  1356. }
  1357. // sort events by start time and some other criteria
  1358. ptrEventsAr->Sort(CXTPCalendarEvents::CompareEvents_ForView);
  1359. //---------------------
  1360. CXTPCalendarEvent* pDragNew = XTP_SAFE_GET2(GetViewDay_(), GetView_(), GetDraggingEventNew(), NULL);
  1361. CXTPCalendarEvent* pDragOrig = XTP_SAFE_GET2(GetViewDay_(), GetView_(), GetDraggingEventOrig(), NULL);
  1362. // remove duplicated events
  1363. int nCount = ptrEventsAr->GetCount();
  1364. for (int nEvent = nCount - 2; nEvent >= 0; nEvent--)
  1365. {
  1366. CXTPCalendarEvent* pEvent0 = ptrEventsAr->GetAt(nEvent);
  1367. CXTPCalendarEvent* pEvent1 = ptrEventsAr->GetAt(nEvent + 1);
  1368. if (!pEvent0 || !pEvent1) {
  1369. ASSERT(FALSE);
  1370. continue;
  1371. }
  1372. if (pEvent0 == pDragNew || pEvent1 == pDragNew) {
  1373. continue;
  1374. }
  1375. if (pEvent0->GetDataProvider() == pEvent1->GetDataProvider() &&
  1376. pEvent0->IsEqualIDs(pEvent1))
  1377. {
  1378. ASSERT(pEvent0->GetScheduleID() == pEvent1->GetScheduleID());
  1379. ptrEventsAr->RemoveAt(nEvent + 1);
  1380. }
  1381. }
  1382. // dragging support
  1383. if (pDragNew && !pDragOrig)
  1384. {
  1385. int nFIdx = ptrEventsAr->Find(pDragNew);
  1386. if (nFIdx > 0)
  1387. {
  1388. ptrEventsAr->InsertAt(0, pDragNew, TRUE);
  1389. ptrEventsAr->RemoveAt(nFIdx+1);
  1390. }
  1391. }
  1392. // to allow some customization before show events
  1393. OnPrePopulate(ptrEventsAr);
  1394. // Create events views:
  1395. nCount = ptrEventsAr->GetCount();
  1396. for (int nEventId = 0; nEventId < nCount; nEventId++)
  1397. {
  1398. CXTPCalendarEvent* pEvent = ptrEventsAr->GetAt(nEventId);
  1399. if (!pEvent) {
  1400. ASSERT(FALSE);
  1401. continue;
  1402. }
  1403. // the same checking is in the data provider.
  1404. // check again for dragging event.
  1405. if (!(pEvent->GetStartTime() < dtDayDate &&
  1406. CXTPCalendarUtils::IsEqual(pEvent->GetEndTime(), dtDayDate)) )
  1407. {
  1408. m_arEvents.Add(new _TViewEvent(pEvent, GetPThis()));
  1409. }
  1410. if (dtDayDate < CXTPCalendarUtils::ResetTime(pEvent->GetStartTime()) ||
  1411. dtDayDate > CXTPCalendarUtils::ResetTime(pEvent->GetEndTime()) )
  1412. {
  1413. ASSERT(FALSE);
  1414. TRACE(_T("ERROR data: Day: %s  EVENT {%s - %s} n"),
  1415. (LPCTSTR)dtDayDate.Format(_T("#%Y-%m-%d#")),
  1416. (LPCTSTR)CXTPCalendarUtils::ResetTime(pEvent->GetStartTime()).Format(_T("#%Y-%m-%d#")),
  1417. (LPCTSTR)CXTPCalendarUtils::ResetTime(pEvent->GetEndTime()).Format(_T("#%Y-%m-%d#"))
  1418. );
  1419. }
  1420. }
  1421. }
  1422. protected:
  1423. //-----------------------------------------------------------------------
  1424. // Summary:
  1425. //     Call this member function to obtain the typed pointer to the
  1426. //     last derived class in the class hierarchy.
  1427. // Remarks: _TPThis - The last derived class type in the class hierarchy.
  1428. //          This is a pure virtual function. This function must be defined
  1429. //          in the derived class.
  1430. // Returns:
  1431. //     Pointer to this object as last derived class type.
  1432. //-----------------------------------------------------------------------
  1433. virtual _TPThis* GetPThis() = 0;
  1434. TViewEventsCollection m_arEvents; // Storage for events views.
  1435. private:
  1436. _TViewDay* m_pViewDay; // Parent day view
  1437. };
  1438. ////////////////////////////////////////////////////////////////////////////
  1439. AFX_INLINE CXTPCalendarViewDay::XTP_VIEW_DAY_LAYOUT& CXTPCalendarViewDay::GetLayout_() {
  1440. return m_Layout;
  1441. }
  1442. AFX_INLINE CXTPCalendarResources* CXTPCalendarViewGroup::GetResources() {
  1443. return m_pResources;
  1444. }
  1445. AFX_INLINE int CXTPCalendarViewGroup::GetChildHandlersCount() {
  1446. return GetViewEventsCount();
  1447. }
  1448. AFX_INLINE CXTPCalendarViewGroup::XTP_VIEW_GROUP_LAYOUT& CXTPCalendarViewGroup::GetLayout_() {
  1449. return m_Layout;
  1450. }
  1451. ////////////////////////////////////////////////////////////////////////////
  1452. #endif // !defined(_XTPCALENDARVIEWDAY_H__)