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

对话框与窗口

开发平台:

Visual C++

  1. // XTPCalendarView.h: interface for the CXTPCalendarView 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(_XTPCALENDARVIEW_H__)
  22. #define _XTPCALENDARVIEW_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER > 1000
  25. #pragma once
  26. #endif // _MSC_VER > 1000
  27. #include "Common/XTPNotifyConnection.h"
  28. #include "XTPCalendarPtrCollectionT.h"
  29. #include "XTPCalendarEvent.h"
  30. #include "XTPCalendarNotifications.h"
  31. class CXTPCalendarControl;
  32. class CXTPCalendarPaintManager;
  33. class CXTPCalendarTheme;
  34. class CXTPCalendarViewDay;
  35. class CXTPCalendarViewEvent;
  36. class CXTPCalendarViewPart;
  37. struct XTP_CALENDAR_HITTESTINFO;
  38. ////////////////////////////////////////////////////////////////////////////
  39. //===========================================================================
  40. // Remarks:
  41. //     Timeout before appearing in the event subject editor window.
  42. //===========================================================================
  43. #define XTP_CALENDAR_START_EDIT_SUBJECT_TIMEOUT_MS 400
  44. //===========================================================================
  45. // Remarks:
  46. //     Calendar events clipboard format name.
  47. //===========================================================================
  48. static const LPCTSTR XTPCALENDARCTRL_CF_EVENT = _T("XTPCalendar_CF_Event");
  49. //{{AFX_CODEJOCK_PRIVATE
  50. enum XTPEnumCalendarUpdateResult
  51. {
  52. xtpCalendar_Skip        = 0,
  53. xtpCalendar_Redraw      = 1,
  54. xtpCalendar_Populate    = 2
  55. };
  56. //===========================================================================
  57. // use project settings to define _TRACE_EDITING_ON
  58. #ifdef _TRACE_EDITING_ON
  59. #define TRACE_MOUSE         TRACE
  60. #define TRACE_KEYBOARD      TRACE
  61. #define TRACE_DRAGGING      TRACE
  62. #define TRACE_EDIT_SUBJECT  TRACE
  63. #else
  64. #define TRACE_MOUSE
  65. #define TRACE_KEYBOARD
  66. #define TRACE_DRAGGING
  67. #define TRACE_EDIT_SUBJECT
  68. #endif
  69. //===========================================================================
  70. //}}AFX_CODEJOCK_PRIVATE
  71. //===========================================================================
  72. // Summary:
  73. //     This class helps to handle Windows messages (WM_*) processing portion
  74. //     of the Calendar control views.
  75. // Remarks:
  76. //     All calendar views are derived from this class. When a message is
  77. //     handled by main Calendar control window (CXTPCalendarControl class),
  78. //     it is then forwarded down to views by hierarchy.
  79. //     control -> day/week/month -> single day -> resource group -> event
  80. //===========================================================================
  81. class _XTP_EXT_CLASS CXTPCalendarWMHandler : public CXTPCmdTarget
  82. {
  83. //{{AFX_CODEJOCK_PRIVATE
  84. DECLARE_DYNAMIC(CXTPCalendarWMHandler)
  85. typedef CCmdTarget TBase;
  86. //}}AFX_CODEJOCK_PRIVATE
  87. public:
  88. //-----------------------------------------------------------------------
  89. // Summary:
  90. //     Default object constructor.
  91. //-----------------------------------------------------------------------
  92. CXTPCalendarWMHandler();
  93. //-----------------------------------------------------------------------
  94. // Summary:
  95. //     This member function is used to obtain the number of
  96. //     CXTPCalendarWMHandler elements in the descendant handlers collection.
  97. // Remarks:
  98. //     Call this method to retrieve the number of elements in the array.
  99. //     Because indexes are zero-based, the size is 1 greater than
  100. //     the largest index.
  101. //
  102. //     This number shows a count of single day views for a day/week/month
  103. //     view, a number of resource groups for a single day view, a number
  104. //     of event views for a resource group view, and so on.
  105. // Returns:
  106. //     A count of descendant handlers.
  107. // See Also:
  108. //     CXTPCalendarWMHandler overview
  109. //-----------------------------------------------------------------------
  110. virtual int GetChildHandlersCount();
  111. //-----------------------------------------------------------------------
  112. // Summary:
  113. //     Call this method to get a handler object at the specified numeric
  114. //     index.
  115. // Parameters:
  116. //     nIndex - An integer index that is greater than or equal to 0
  117. //              and less than the value returned by GetChildHandlersCount.
  118. // Remarks:
  119. //     Returns the array element at the specified index.
  120. // Returns:
  121. //     The pointer to the CXTPCalendarWMHandler element currently at this
  122. //     index.
  123. //-----------------------------------------------------------------------
  124. virtual CXTPCalendarWMHandler* GetChildHandlerAt(int nIndex);
  125. //-----------------------------------------------------------------------
  126. // Summary:
  127. //     This member function is used to process left mouse button down events.
  128. // Parameters:
  129. //     nFlags  - An int that indicates whether various virtual keys are down.
  130. //     point   - A CPoint object that specifies the x- and y- coordinates of the cursor.
  131. //               These coordinates are always relative to the
  132. //               upper-left corner of the window.
  133. // Remarks:
  134. //     This method is called by the CalendarView when the user
  135. //     presses the left mouse button.
  136. //-----------------------------------------------------------------------
  137. virtual BOOL OnLButtonDown(UINT nFlags, CPoint point);
  138. //-----------------------------------------------------------------------
  139. // Summary:
  140. //     This member function is used to process left mouse button up events.
  141. // Parameters:
  142. //     nFlags  - An int that indicates whether various virtual keys are down.
  143. //     point   - A CPoint object that specifies the x- and y- coordinates of the cursor.
  144. //               These coordinates are always relative to the
  145. //               upper-left corner of the window.
  146. // Remarks:
  147. //     This method is called by the CalendarView when the user
  148. //     releases the left mouse button.
  149. //-----------------------------------------------------------------------
  150. virtual BOOL OnLButtonUp(UINT nFlags, CPoint point);
  151. //-----------------------------------------------------------------------
  152. // Summary:
  153. //     This member function is used to process left mouse button
  154. //     double click events.
  155. // Parameters:
  156. //     nFlags  - An int that indicates whether various virtual keys are down.
  157. //     point   - A CPoint object that specifies the x- and y- coordinates of the cursor.
  158. //               These coordinates are always relative to the
  159. //               upper-left corner of the window.
  160. // Remarks:
  161. //     This method is called by the CalendarView when the user
  162. //     double clicks the left mouse button.
  163. //-----------------------------------------------------------------------
  164. virtual BOOL OnLButtonDblClk(UINT nFlags, CPoint point);
  165. //-----------------------------------------------------------------------
  166. // Summary:
  167. //     This member function is used to process mouse movement events.
  168. // Parameters:
  169. //     nFlags  - A UINT that indicates whether various virtual keys are down.
  170. //     point   - A CPoint object that specifies the x- and y- coordinates of the cursor.
  171. //               These coordinates are always relative to the
  172. //               upper-left corner of the window.
  173. // Remarks:
  174. //     This method is called by the CalendarView when the user
  175. //     moves the mouse cursor or stylus.
  176. //-----------------------------------------------------------------------
  177. virtual void OnMouseMove(UINT nFlags, CPoint point);
  178. //-----------------------------------------------------------------------
  179. // Summary:
  180. //     This member function is used to processes keyboard events.
  181. // Parameters:
  182. //     nChar   - A UINT that contains the character code value of the key.
  183. //     nRepCnt - A UINT that is used to count the number of times the
  184. //               keystroke is repeated as a result of the user holding
  185. //               down the key.
  186. //     nFlags  - A UINT that contains the Scan code, key-transition code,
  187. //               previous key state, and the context code.
  188. // Remarks:
  189. //     This method is called by the CalendarControl when a keystroke
  190. //     translates to a nonsystem character.
  191. //-----------------------------------------------------------------------
  192. virtual void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags);
  193. //-----------------------------------------------------------------------
  194. // Summary:
  195. //     This member function is used to process key-down keyboard events.
  196. // Parameters:
  197. //     nChar   - A UINT that specifies the virtual key code of the given key.
  198. //     nRepCnt - A UINT that specifies the number of times the keystroke
  199. //               is repeated as a result of the user holding down the key.
  200. //     nFlags  - A UINT that specifies the scan code, key-transition code,
  201. //               previous key state, and the context code.
  202. // Remarks:
  203. //     This method is called by the CalendarView when the user
  204. //     presses keys on the keyboard.
  205. //-----------------------------------------------------------------------
  206. virtual void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
  207. //-----------------------------------------------------------------------
  208. // Summary:
  209. //     This member function is used to process key-up keyboard events.
  210. // Parameters:
  211. //     nChar   - A UINT that specifies the virtual key code of the given key.
  212. //     nRepCnt - A UINT that specifies the number of times the keystroke
  213. //               is repeated as a result of the user holding down the key.
  214. //     nFlags  - A UINT that specifies the scan code, key-transition code,
  215. //               previous key state, and the context code.
  216. // Remarks:
  217. //     This method is called by the CalendarView when the user
  218. //     releases keys on the keyboard.
  219. //-----------------------------------------------------------------------
  220. virtual void OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags);
  221. //-----------------------------------------------------------------------
  222. // Summary:
  223. //     This member function is used to process key-up keyboard events.
  224. // Parameters:
  225. //     nChar   - A UINT that specifies the virtual key code of the given key.
  226. //     nRepCnt - A UINT that specifies the number of times the keystroke
  227. //               is repeated as a result of the user holding down the key.
  228. //     nFlags  - A UINT that specifies the scan code, key-transition code,
  229. //               previous key state, and the context code.
  230. // Remarks:
  231. //     This method is called by the CalendarView when the user
  232. //     presses keys on the keyboard.
  233. //-----------------------------------------------------------------------
  234. virtual BOOL OnSysKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
  235. //-----------------------------------------------------------------------
  236. // Summary:
  237. //     The framework calls this member function after each interval
  238. //     specified in the SetTimer member function.
  239. // Parameters:
  240. //     uTimerID    - A UINT that is used to specify the identifier
  241. //                   of the timer.
  242. //-----------------------------------------------------------------------
  243. virtual BOOL OnTimer(UINT_PTR uTimerID);
  244. //-----------------------------------------------------------------------
  245. // Summary:
  246. //     This member function is used to perform additional adjustments
  247. //     in some kinds of views.
  248. // Remarks:
  249. //     Call this member function to perform additional adjustments after
  250. //     all adjustment activities are completed.
  251. //-----------------------------------------------------------------------
  252. virtual void OnPostAdjustLayout();
  253. //-----------------------------------------------------------------------
  254. // Summary:
  255. //     This member function is called by the framework before destroying
  256. //     the view.
  257. //-----------------------------------------------------------------------
  258. virtual void OnBeforeDestroy();
  259. //{{AFX_CODEJOCK_PRIVATE
  260. virtual void OnFinalRelease();
  261. //}}AFX_CODEJOCK_PRIVATE
  262. };
  263. //===========================================================================
  264. // Summary:
  265. //     This class represents the view portion of the Calendar control.
  266. // Remarks:
  267. //     It represents a specific view of the Control's associated events
  268. //     data and provides basic functionality on the data using user
  269. //     input through the keyboard and mouse.
  270. //
  271. //          The following predefined view implementations are available
  272. //          for the Calendar control:
  273. //
  274. //
  275. //          * Day and work week views - using CXTPCalendarDayView class.
  276. //          * Week view               - using CXTPCalendarWeekView class.
  277. //          * Month view              - using CXTPCalendarMonthView class.
  278. //
  279. //
  280. //          Furthermore, any type of user defined view can also be implemented as
  281. //          a descendant of the CXTPCalendarView class.
  282. //
  283. //          A typical Calendar View model consists of a collection of
  284. //          corresponding ViewDay's, which realizes the contents on a square
  285. //          of one day. ViewDay in its turn contains a collection of ViewEvent's
  286. //          for the particular day, each of them represents a view of an
  287. //          CXTPCalendarEvent object.
  288. //
  289. // See Also: CXTPCalendarDayView, CXTPCalendarWeekView, CXTPCalendarMonthView,
  290. //          CXTPCalendarViewDay, CXTPCalendarViewEvent
  291. //===========================================================================
  292. class _XTP_EXT_CLASS CXTPCalendarView : public CXTPCalendarWMHandler
  293. {
  294. //{{AFX_CODEJOCK_PRIVATE
  295. friend class CXTPCalendarControl;
  296. friend class CXTPCalendarViewDay;
  297. friend class CXTPCalendarViewEvent;
  298. friend class CXTPCalendarResource;
  299. friend class CXTPCalendarTheme;
  300. friend class CXTPCalendarDayViewGroup;
  301. DECLARE_DYNAMIC(CXTPCalendarView)
  302. typedef CXTPCalendarWMHandler TBase;
  303. //}}AFX_CODEJOCK_PRIVATE
  304. public:
  305. //-----------------------------------------------------------------------
  306. // Summary:
  307. //     Default object constructor.
  308. // Parameters:
  309. //     pCalendarControl - A Pointer to CXTPCalendarControl object.
  310. // See Also: ~CXTPCalendarEvent()
  311. //-----------------------------------------------------------------------
  312. CXTPCalendarView(CXTPCalendarControl* pCalendarControl);
  313. //-----------------------------------------------------------------------
  314. // Summary:
  315. //     Default class destructor.
  316. // Remarks:
  317. //     Handles member items deallocation.
  318. //-----------------------------------------------------------------------
  319. virtual ~CXTPCalendarView();
  320. //-----------------------------------------------------------------------
  321. // Summary:
  322. //     Call this member function to obtain the view type flag.
  323. // Remarks:
  324. //     This is a pure virtual function.  This function must be defined
  325. //     in the derived class.
  326. // Returns:
  327. //     A XTPCalendarViewType view type flag.
  328. // See Also: XTPCalendarViewType
  329. //-----------------------------------------------------------------------
  330. virtual XTPCalendarViewType GetViewType() = 0;
  331. //-----------------------------------------------------------------------
  332. // Summary:
  333. //     This member function is used to populate the view with data
  334. //     for all items contained in the view.
  335. //-----------------------------------------------------------------------
  336. virtual void Populate();
  337. //-----------------------------------------------------------------------
  338. // Summary:
  339. //     This member function is used to adjust the view's layout
  340. //     depending on the window client size and calls AdjustLayout()
  341. //     for all sub-items.
  342. // Parameters:
  343. //     pDC                     - Pointer to a valid device context.
  344. //     rcView                  - A CRect that contains the coordinates
  345. //                               for drawing the view.
  346. //     bCallPostAdjustLayout   - A BOOL. This is a flag that is used to
  347. //                               call for additional adjustments. If TRUE,
  348. //                               then additional adjustments are performed
  349. //                               for multi day events. If FALSE, then no
  350. //                               additional adjustments are made.
  351. // Remarks:
  352. //     Call Populate() prior adjusting layout.
  353. //     AdjustLayout2 is called by calendar control instead of AdjustLayout
  354. //     when theme is set.
  355. //-----------------------------------------------------------------------
  356. virtual void AdjustLayout(CDC* pDC, const CRect& rcView, BOOL bCallPostAdjustLayout = TRUE);
  357. virtual void AdjustLayout2(CDC* pDC, const CRect& rcView, BOOL bCallPostAdjustLayout = TRUE);//<COMBINE AdjustLayout>
  358. //-----------------------------------------------------------------------
  359. // Summary:
  360. //     This member function is used to perform the redrawing of the
  361. //     control's layout.
  362. // Remarks:
  363. //     Call AdjystLayout() prior to redrawing the control.
  364. //-----------------------------------------------------------------------
  365. virtual void RedrawControl();
  366. //-----------------------------------------------------------------------
  367. // Summary:
  368. //     This member function is used to show the specified day in the
  369. //     calendar view.
  370. // Parameters:
  371. //     date - A COleDateTime object that contains the date to show.
  372. //     bSelect - TRUE to select the specified day after showing,
  373. //               FALSE otherwise. TRUE is the default value.
  374. // Remarks:
  375. //     Call this member function to show only the specified day in the
  376. //     calendar view.
  377. //-----------------------------------------------------------------------
  378. virtual void ShowDay(const COleDateTime& date, BOOL bSelect = TRUE) = 0;
  379. //-----------------------------------------------------------------------
  380. // Summary:
  381. //     Scroll vertically.
  382. // Parameters:
  383. //     nPos     - An int that contains the position value.
  384. //     nPos_raw - An int that contains the raw position value.
  385. // Remarks:
  386. //     This member function is used to vertical scroll the contents
  387. //     of the view.
  388. //-----------------------------------------------------------------------
  389. virtual void ScrollV(int nPos, int nPos_raw) {
  390. UNREFERENCED_PARAMETER(nPos);
  391. UNREFERENCED_PARAMETER(nPos_raw);
  392. }
  393. //-----------------------------------------------------------------------
  394. // Summary:
  395. //     Scroll horizontally.
  396. // Parameters:
  397. //     nPos     - An int that contains the position value.
  398. //     nPos_raw - An int that contains the raw position value.
  399. // Remarks:
  400. //     This member function is used to horizontal scroll the contents
  401. //     of the view.
  402. //-----------------------------------------------------------------------
  403. virtual void ScrollH(int nPos, int nPos_raw) {
  404. UNREFERENCED_PARAMETER(nPos);
  405. UNREFERENCED_PARAMETER(nPos_raw);
  406. }
  407. //-----------------------------------------------------------------------
  408. // Summary:
  409. //     This member function is used to retrieve the information about
  410. //     a scroll bar state.
  411. // Parameters:
  412. //     pSI - A SCROLLINFO pointer that contains information about the
  413. //           current state of the scroll bar.
  414. // Returns:
  415. //     A BOOL. The base class definition always returns FALSE.
  416. //     The derived class definition should return TRUE if the function
  417. //     is successful. Return FALSE otherwise.
  418. //-----------------------------------------------------------------------
  419. virtual BOOL GetScrollBarInfoV(SCROLLINFO* pSI) {
  420. UNREFERENCED_PARAMETER(pSI);
  421. return FALSE;
  422. }
  423. //-----------------------------------------------------------------------
  424. // Summary:
  425. //     This member function is used to retrieve the information about
  426. //     a scroll bar state.
  427. // Parameters:
  428. //     pSI - A SCROLLINFO pointer that contains information about the
  429. //           current state of the scroll bar.
  430. //     pnScrollStep - A pointer to int to receive scroll step. Can be NULL.
  431. // Returns:
  432. //     A BOOL. The base class definition always returns FALSE.
  433. //     The derived class definition should return TRUE if the function
  434. //     is successful. Return FALSE otherwise.
  435. //-----------------------------------------------------------------------
  436. virtual BOOL GetScrollBarInfoH(SCROLLINFO* pSI, int* pnScrollStep = NULL) {
  437. UNREFERENCED_PARAMETER(pSI); UNREFERENCED_PARAMETER(pnScrollStep);
  438. return FALSE;
  439. }
  440. //-----------------------------------------------------------------------
  441. // Summary:
  442. //     This member function performs all of the drawing logic of the
  443. //     calendar view.
  444. // Parameters:
  445. //     pDC - Pointer to a valid device context.
  446. //-----------------------------------------------------------------------
  447. virtual void OnDraw(CDC* pDC);
  448. //-----------------------------------------------------------------------
  449. // Summary:
  450. //     This member function is used to draw the view content using the
  451. //     specified device context.
  452. // Parameters:
  453. //     pDC - A pointer to a valid device context.
  454. // Remarks:
  455. //     Call AdjustLayout() before calling Draw().
  456. //     Draw2 is called from OnDraw instead of Draw when theme
  457. //     is set.
  458. // See Also: OnDraw, AdjustLayout
  459. //-----------------------------------------------------------------------
  460. virtual void Draw(CDC* pDC) {
  461. UNREFERENCED_PARAMETER(pDC);
  462. }
  463. //<COMBINE Draw>
  464. virtual void Draw2(CDC* pDC) {
  465. UNREFERENCED_PARAMETER(pDC);
  466. //Draw(pDC);
  467. }
  468. //-----------------------------------------------------------------------
  469. // Summary:
  470. //     This member function is used to processes left mouse button events.
  471. // Parameters:
  472. //     nFlags  - A UINT that is used to indicates whether various virtual
  473. //               keys are down.
  474. //     point   - A CPoint that specifies the x- and y- coordinates of the cursor.
  475. //               These coordinates are always relative to the
  476. //               upper-left corner of the window.
  477. // Remarks:
  478. //     This method is called by the CalendarControl when the user
  479. //     presses the left mouse button.
  480. //-----------------------------------------------------------------------
  481. virtual BOOL OnLButtonDown(UINT nFlags, CPoint point);
  482. //-----------------------------------------------------------------------
  483. // Summary:
  484. //     This member function is used to processes left mouse button events.
  485. // Parameters:
  486. //     nFlags  - A UINT that is used to indicate whether various virtual keys are down.
  487. //     point   - A CPoint that specifies the x- and y- coordinates of the cursor.
  488. //               These coordinates are always relative to the
  489. //               upper-left corner of the window.
  490. // Remarks:
  491. //     This method is called by the CalendarControl when the user
  492. //     releases the left mouse button.
  493. //-----------------------------------------------------------------------
  494. virtual BOOL OnLButtonUp(UINT nFlags, CPoint point);
  495. //-----------------------------------------------------------------------
  496. // Summary:
  497. //     This member function is used to processes mouse movement events.
  498. // Parameters:
  499. //     nFlags  - A UINT that is used to indicate whether various virtual
  500. //               keys are down.
  501. //     point   - A CPoint that specifies the x- and y- coordinates of the cursor.
  502. //               These coordinates are always relative to the
  503. //               upper-left corner of the window.
  504. // Remarks:
  505. //     This method is called by the CalendarControl when the user
  506. //     moves the mouse cursor or stylus.
  507. //-----------------------------------------------------------------------
  508. virtual void OnMouseMove(UINT nFlags, CPoint point);
  509. //-----------------------------------------------------------------------
  510. // Summary:
  511. //     This member function is used to process mouse double-click events.
  512. // Parameters:
  513. //     nFlags  - A UINT that is used to indicate whether various virtual
  514. //               keys are down.
  515. //     point   - A CPoint that specifies the x- and y- coordinates of the cursor.
  516. //               These coordinates are always relative to the
  517. //               upper-left corner of the window.
  518. // Remarks:
  519. //     This method is called by the CalendarControl when the user
  520. //     presses, releases, and then presses the left mouse button again
  521. //     within the system's double-click time limit.
  522. //-----------------------------------------------------------------------
  523. virtual BOOL OnLButtonDblClk(UINT nFlags, CPoint point);
  524. //-----------------------------------------------------------------------
  525. // Summary:
  526. //     This member function is used to process keyboard events.
  527. // Parameters:
  528. //     nChar   - A UINT that contains the character code value of the key.
  529. //     nRepCnt - A UINT that is used to count the number of times the
  530. //               keystroke is repeated as a result of the user holding
  531. //               down the key.
  532. //     nFlags  - A UINT that contains the Scan code, key-transition code,
  533. //               previous key state, and the context code.
  534. // Remarks:
  535. //     This method is called by the CalendarControl when a keystroke
  536. //     translates to a nonsystem character.
  537. //-----------------------------------------------------------------------
  538. virtual void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags);
  539. //-----------------------------------------------------------------------
  540. // Summary:
  541. //     This member function is used to processes keyboard events.
  542. // Parameters:
  543. //     nChar   - A UINT that is used to identify the virtual key code
  544. //               of the given key.
  545. //     nRepCnt - A UINT that is used to count the number of times the
  546. //               keystroke is repeated as a result of the user holding
  547. //               down the key.
  548. //     nFlags  - A UINT that contains the Scan code, key-transition code,
  549. //               previous key state, and the context code.
  550. // Remarks:
  551. //     This method is called by the CalendarControl when the user
  552. //     presses keys on the keyboard.
  553. //-----------------------------------------------------------------------
  554. virtual void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
  555. //-----------------------------------------------------------------------
  556. // Summary:
  557. //     This member function is used to processes system keyboard events.
  558. // Parameters:
  559. //     nChar   - A UINT that specifies the virtual key code of the given key.
  560. //     nRepCnt - A UINT that contains the number of times the keystroke is
  561. //               repeated as a result of the user holding down the key.
  562. //     nFlags  - A UINT that contains the scan code, key-transition code,
  563. //               previous key state, and the context code.
  564. // Remarks:
  565. //     This method is called by the CalendarControl when the user
  566. //     presses keys on the keyboard.
  567. //-----------------------------------------------------------------------
  568. virtual BOOL OnSysKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
  569. //-----------------------------------------------------------------------
  570. // Summary:
  571. //     Call this member function to obtain the view's bounding rectangle.
  572. // Returns:
  573. //     A CRect object that contains the view's bounding rectangle coordinates.
  574. //-----------------------------------------------------------------------
  575. CRect GetViewRect();
  576. //-----------------------------------------------------------------------
  577. // Summary:
  578. //     This member function is used to obtain the number of
  579. //     CXTPCalendarWMHandler elements in the descendant handlers collection.
  580. // Remarks:
  581. //     Call this method to retrieve the number of elements in the array.
  582. //     Because indexes are zero-based, the size is 1 greater than
  583. //     the largest index.
  584. // Returns:
  585. //     A count of descendant handlers.
  586. // See Also:
  587. //     CXTPCalendarWMHandler overview
  588. //-----------------------------------------------------------------------
  589. virtual int GetChildHandlersCount();
  590. //-----------------------------------------------------------------------
  591. // Summary:
  592. //     Call this method to get a handler object at the specified numeric
  593. //     index.
  594. // Parameters:
  595. //     nIndex - An integer index that is greater than or equal to 0
  596. //              and less than the value returned by GetChildHandlersCount.
  597. // Remarks:
  598. //     Returns the array element at the specified index.
  599. // Returns:
  600. //     The pointer to the CXTPCalendarWMHandler element currently at this
  601. //     index.
  602. //-----------------------------------------------------------------------
  603. virtual CXTPCalendarWMHandler* GetChildHandlerAt(int nIndex);
  604. //-----------------------------------------------------------------------
  605. // Summary:
  606. //     Call this member function to obtain the number of "day views"
  607. //     in the view collection.
  608. // Remarks:
  609. //     This is a pure virtual function.  This function must be defined
  610. //     in the derived class.
  611. // Returns:
  612. //     An int that contains the the number of "day views" in the view
  613. //     collection.
  614. //-----------------------------------------------------------------------
  615. virtual int GetViewDayCount() = 0;
  616. //-----------------------------------------------------------------------
  617. // Summary:
  618. //     Call this member function to obtain the date of the day view by
  619. //     the day's index.
  620. // Parameters:
  621. //     nIndex  - An int that contains the day view index in the view collection.
  622. // Remarks:
  623. //     Indexed number starts from 0 and cannot be negative.
  624. //     This is a pure virtual function.  This function must be defined
  625. //     in the derived class.
  626. // Returns:
  627. //     A COleDateTime object that contains the day view date and time.
  628. // See Also: GetViewDayCount()
  629. //-----------------------------------------------------------------------
  630. virtual COleDateTime GetViewDayDate(int nIndex) = 0;
  631. //-----------------------------------------------------------------------
  632. // Summary:
  633. //     Call this member function to obtain the CXTPCalendarViewDay object
  634. //     by the day's index.
  635. // Parameters:
  636. //     nIndex  - An int that is used as the day view index in the view collection.
  637. //     dtDay   - A day date to find.
  638. // Remarks:
  639. //     Index numbers start with 0 and cannot be negative.
  640. //     This is a pure virtual function.  This function must be defined
  641. //     in the derived class.
  642. // Returns:
  643. //     A pointer to a CXTPCalendarViewDay object.
  644. // See Also: GetViewDayCount()
  645. //-----------------------------------------------------------------------
  646. virtual CXTPCalendarViewDay* GetViewDay_(int nIndex) = 0;
  647. virtual CXTPCalendarViewDay* _GetViewDay(const COleDateTime& dtDay); //<COMBINE CXTPCalendarView::GetViewDay_@int>
  648. //-----------------------------------------------------------------------
  649. // Summary:
  650. //     This member function is used to determines which view item,
  651. //     if any, is at a specified position index, and returns additional
  652. //     information in the XTP_CALENDAR_HITTESTINFO argument.
  653. // Parameters:
  654. //     pt       - A CPoint that contains the coordinates of the point to test.
  655. //     pHitTest - A pointer a XTP_CALENDAR_HITTESTINFO structure.
  656. // Remarks:
  657. //     This is a pure virtual function.  This function must be defined
  658. //     in the derived class.
  659. // Returns:
  660. //     A BOOL. TRUE if the item is found. FALSE otherwise.
  661. // See Also: XTP_CALENDAR_HITTESTINFO
  662. //-----------------------------------------------------------------------
  663. virtual BOOL HitTest(CPoint pt, XTP_CALENDAR_HITTESTINFO* pHitTest) = 0;
  664. //-----------------------------------------------------------------------
  665. // Summary:
  666. //     Call this member function to determine the current dragging mode.
  667. // Returns:
  668. //     An XTPCalendarDraggingModeFlag object that contains the current
  669. //     dragging mode.
  670. // See Also: XTPCalendarDraggingMode
  671. //-----------------------------------------------------------------------
  672. virtual XTPCalendarDraggingMode GetDraggingMode() const;
  673. //-----------------------------------------------------------------------
  674. // Summary:
  675. //     Call this member function to obtain the PaintManager object.
  676. // Returns:
  677. //     A pointer to the CXTPCalendarPaintManager object.
  678. // See Also: CXTPCalendarPaintManager, GetTheme
  679. //-----------------------------------------------------------------------
  680. virtual CXTPCalendarPaintManager* GetPaintManager();
  681. //-----------------------------------------------------------------------
  682. // Summary:
  683. //     This member function obtains a pointer to the associated theme
  684. //     object.
  685. //
  686. // Remarks:
  687. //     It calls CXTPCalendarControl::GetTheme() method.
  688. // Returns:
  689. //     A CXTPCalendarTheme pointer to the associated theme object or NULL.
  690. // See Also:
  691. //     CXTPCalendarControl::GetTheme, GetPaintManager
  692. //-----------------------------------------------------------------------
  693. virtual CXTPCalendarTheme* GetTheme();
  694. //-----------------------------------------------------------------------
  695. // Summary:
  696. //     Call this member function to obtain a pointer to the Calendar
  697. //     Control object.
  698. // Returns:
  699. //     A pointer to the CXTPCalendarControl object.
  700. // See Also: CXTPCalendarControl
  701. //-----------------------------------------------------------------------
  702. virtual CXTPCalendarControl* GetCalendarControl();
  703. //-----------------------------------------------------------------------
  704. // Summary:
  705. //     Call this member function to obtain a pointer to the associated
  706. //     Calendar Resources collection object.
  707. // Returns:
  708. //     A pointer to the CXTPCalendarResources collection object.
  709. // See Also:
  710. //     CXTPCalendarResources overview, CXTPCalendarResource overview
  711. //-----------------------------------------------------------------------
  712. virtual CXTPCalendarResources* GetResources();
  713. //-----------------------------------------------------------------------
  714. // Summary:
  715. //     This member function sets the new Resources collection for the view.
  716. // Parameters:
  717. //     pResources - A pointer to the CXTPCalendarResources collection object.
  718. // Remarks:
  719. //     Call this member function to programmatically set the new
  720. //     Resources collection for the view.
  721. //-----------------------------------------------------------------------
  722. virtual void SetResources(CXTPCalendarResources* pResources);
  723. //-----------------------------------------------------------------------
  724. // Summary:
  725. //     Call this member function to un-select all of the events of the
  726. //     current view.
  727. //-----------------------------------------------------------------------
  728. virtual void UnselectAllEvents();
  729. //-----------------------------------------------------------------------
  730. // Summary:
  731. //     This member function is used to select or un-select the provided event.
  732. // Parameters:
  733. //     pEvent  - A pointer to the CXTPCalendarEvent object.
  734. //     bSelect - A BOOL. If TRUE, then select the event.
  735. //               If FALSE, then un-select the event.
  736. // Remarks:
  737. //     This method doesn't redraw control's window in order to avoid
  738. //     blinking when executed in groups (like selecting a number of events).
  739. //     So far, you'll have to call Calendar.RedrawControl after that.
  740. // See Also: SelectViewEvent(), CXTPCalendarEvent
  741. //-----------------------------------------------------------------------
  742. virtual void SelectEvent(CXTPCalendarEvent* pEvent, BOOL bSelect = TRUE);
  743. //-----------------------------------------------------------------------
  744. // Summary:
  745. //     This member function is used to select or un-select the provided event.
  746. // Parameters:
  747. //     pViewEvent   - A pointer to the CXTPCalendarViewEvent object.
  748. //     bSelect      - A BOOL. If TRUE, then select the event.
  749. //                    If FALSE, then un-select the event.
  750. // Remarks:
  751. //     This method doesn't redraw control's window in order to avoid
  752. //     blinking when executed in groups (like selecting a number of events).
  753. //     So far, you'll have to call Calendar.RedrawControl after that.
  754. // See Also: SelectEvent(), CXTPCalendarViewEvent
  755. //-----------------------------------------------------------------------
  756. void SelectViewEvent(CXTPCalendarViewEvent* pViewEvent, BOOL bSelect  = TRUE);
  757. //-----------------------------------------------------------------------
  758. // Summary:
  759. //     This member function is used to select or un-select the provided
  760. //     day, including all of the day's events.
  761. // Parameters:
  762. //     pDay         - A pointer to a CXTPCalendarViewDay object.
  763. //     nGroupIndex  - A group index to select.
  764. // See Also: CXTPCalendarViewDay, SelectDay(COleDateTime dtSelDay, BOOL bSelect)
  765. //-----------------------------------------------------------------------
  766. virtual void SelectDay(CXTPCalendarViewDay* pDay, int nGroupIndex = 0);
  767. //-----------------------------------------------------------------------
  768. // Summary:
  769. //     Call this member function to obtain a pointer to a selected
  770. //     event's views.
  771. // Remarks:
  772. //     Tims method may return few event views instances for a one event.
  773. //     (multi day event has a separate view event object for each day).
  774. // Returns:
  775. //     A pointer to a CXTPCalendarViewEvents object that contains the
  776. //     selected event views.
  777. // See Also: CXTPCalendarViewEvents, CXTPCalendarViewDay,
  778. //           SelectDay(COleDateTime dtSelDay, BOOL bSelect),
  779. //           GetSelectedEvents()
  780. //-----------------------------------------------------------------------
  781. virtual CXTPCalendarViewEvents* GetSelectedViewEvents();
  782. //-----------------------------------------------------------------------
  783. // Summary:
  784. //     Call this member function to obtain a pointer to a selected
  785. //     event's views collection.
  786. // Remarks:
  787. //      Tims method returns one event view instance for a one event.
  788. //     (multi day event has a separate view event object for each day).
  789. // Returns:
  790. //     A smart pointer to a CXTPCalendarEvents object that contains the
  791. //     selected events.
  792. // See Also: GetSelectedViewEvents(), CXTPCalendarViewEvents
  793. //-----------------------------------------------------------------------
  794. virtual CXTPCalendarViewEventsPtr GetSelectedEvents();
  795. //-----------------------------------------------------------------------
  796. // Summary:
  797. //     This member function is used to obtain the last selected event view.
  798. // Returns:
  799. //     A pointer to last selected event view or NULL.
  800. // See Also: CXTPCalendarViewEvent, GetSelectedViewEvents().
  801. //-----------------------------------------------------------------------
  802. CXTPCalendarViewEvent* GetLastSelectedViewEvent();
  803. //-----------------------------------------------------------------------
  804. // Summary:
  805. //     Call this member function to determine if there are selected event view
  806. // See Also: GetSelectedViewEvents
  807. //-----------------------------------------------------------------------
  808. virtual BOOL HasSelectedViewEvent();
  809. //-----------------------------------------------------------------------
  810. // Summary:
  811. //      This member function is used to determine is just one event is selected.
  812. // Returns:
  813. //      TRUE - if only one event is selected, FALSE - if no events are selected or
  814. //      if more than one event is selected.
  815. // See Also: GetSelectedViewEvents(), SelectViewEvent(), SelectEvent().
  816. //-----------------------------------------------------------------------
  817. BOOL IsSingleEventSelected();
  818. //-----------------------------------------------------------------------
  819. // Summary:
  820. //     This member function is used to obtain the last selected day index.
  821. // Returns:
  822. //     Index of the last selected day of -1.
  823. // See Also: GetLastSelectedDate()
  824. //-----------------------------------------------------------------------
  825. int FindLastSelectedDay();
  826. //-----------------------------------------------------------------------
  827. // Summary:
  828. //     This member function is used to obtain the last selected day date.
  829. // Returns:
  830. //     Date of the last selected day or the middle view day date.
  831. // See Also: FindLastSelectedDay(), GetSelection(), SetSelection().
  832. //-----------------------------------------------------------------------
  833. COleDateTime GetLastSelectedDate();
  834. //-----------------------------------------------------------------------
  835. // Summary:
  836. //     This member function is used to obtain the view's selection.
  837. // Parameters:
  838. //     pBegin                 - A pointer to the COleDateTime object
  839. //                              that contains the beginning of the selection.
  840. //     pEnd                   - A pointer to the COleDateTime object
  841. //                              that contains the ending of the selection.
  842. //     pbAllDayEvent          - A pointer to the BOOL variable
  843. //                              that contains the AllDayEvent attribute of
  844. //                              the selection (used in the day view only).
  845. //     pnGroupIndex           - A pointer to int to receive group index.
  846. //     pspSelectionResolution - A pointer to the COleDateTimeSpan
  847. //                              object that contains the selection unit
  848. //                              length. (i.e. 1 day, 1 Hour, ... 5 min)
  849. // Remarks:
  850. //     Call this member function to fill the provided COleDateTime
  851. //     objects with the values of the selection beginning, ending,
  852. //     and selection unit length.
  853. // Returns:
  854. //     A BOOL. TRUE if the selection is returned successfully.
  855. //     FALSE otherwise.
  856. //-----------------------------------------------------------------------
  857. virtual BOOL GetSelection(COleDateTime* pBegin = NULL, COleDateTime* pEnd = NULL,
  858.   BOOL* pbAllDayEvent = NULL, int* pnGroupIndex = NULL,
  859.   COleDateTimeSpan* pspSelectionResolution = NULL);
  860. //-----------------------------------------------------------------------
  861. // Summary:
  862. //     This member function sets the new selection for the view.
  863. // Parameters:
  864. //     dtBegin      - Selection beginning time.
  865. //     dtEnd        - Selection ending time.
  866. //     bAllDayEvent - Selection AllDayEvent attribute (used in the day view only).
  867. //     nGroupIndex  - A group index.
  868. // Remarks:
  869. //     Call this member function to programmatically set the new
  870. //     selection beginning and ending for the view.
  871. //-----------------------------------------------------------------------
  872. void SetSelection(const COleDateTime& dtBegin, const COleDateTime& dtEnd,
  873.   BOOL bAllDayEvent = FALSE, int nGroupIndex = 0);
  874. //-----------------------------------------------------------------------
  875. // Summary:
  876. //     This member function resets the current selection - set it empty.
  877. // Remarks:
  878. //     Call this member function to programmatically clear the current
  879. //     selection.
  880. //-----------------------------------------------------------------------
  881. void ResetSelection();
  882. //-----------------------------------------------------------------------
  883. // Summary:
  884. //     This member function is used to determine if a date time value
  885. //     is contained inside the selection.
  886. // Parameters:
  887. //     date         - A COleDateTime object that contains a date time value.
  888. //     nGroupIndex  - A group index or -1 for any group.
  889. //     pbAllDaySelection - A pointer to BOOL to receive is selection All Day.
  890. // Returns:
  891. //     TRUE - If date is contained inside the selection.
  892. //     FALSE otherwise.
  893. //-----------------------------------------------------------------------
  894. BOOL SelectionContains(COleDateTime date, int nGroupIndex = -1, BOOL* pbAllDaySelection = NULL);
  895. //-----------------------------------------------------------------------
  896. // Summary:
  897. //     This member function is used to select or un-select the day
  898. //     identified by the provided date.
  899. // Parameters:
  900. //     dtSelDay     - A COleDateTime object that contains a date time value.
  901. //     nGroupIndex  - A group index to select.
  902. // See Also: CXTPCalendarViewDay, SelectDay
  903. //-----------------------------------------------------------------------
  904. virtual void SelectDay(COleDateTime dtSelDay, int nGroupIndex = 0);
  905. //-----------------------------------------------------------------------
  906. // Summary:
  907. //     Call this member function to determine the row height required
  908. //     to display the event.
  909. // Returns:
  910. //     An int that contains the height of the row required to display a
  911. //     single event.
  912. //-----------------------------------------------------------------------
  913. virtual int GetRowHeight() const;
  914. //-----------------------------------------------------------------------
  915. // Summary:
  916. //     Call this member function to get the collection of the day's
  917. //     events.
  918. // Parameters:
  919. //     pRC   - A pointer to calendar resource object.
  920. //     dtDay - A COleDateTime object that contains the day's date.
  921. // Returns:
  922. //     A pointer to a CXTPCalendarEvents object that contains the
  923. //     collection of the day's events.
  924. // See Also: CXTPCalendarEvents
  925. //-----------------------------------------------------------------------
  926. virtual CXTPCalendarEventsPtr RetrieveDayEvents(CXTPCalendarResource* pRC, COleDateTime dtDay);
  927. //-----------------------------------------------------------------------
  928. // Summary:
  929. //     Call this member function to determine if the subject is in an
  930. //     editable mode.
  931. // Returns:
  932. //     A BOOL. TRUE if the subject is ready for editing. FALSE otherwise.
  933. //-----------------------------------------------------------------------
  934. virtual BOOL IsEditingSubject() const;
  935. //-----------------------------------------------------------------------
  936. // Summary:
  937. //     Call this member function to obtain the bounding rectangle of
  938. //     the subject editor.
  939. // Returns:
  940. //     A CRect object that contains the current coordinates of the
  941. //     subject editor.
  942. //-----------------------------------------------------------------------
  943. virtual CRect GetSubjectEditorRect() const;
  944. //-----------------------------------------------------------------------
  945. // Summary:
  946. //     Call this member function to obtain the bounding rectangle of
  947. //     the tooltip space (currently this is only "click to add new appointment").
  948. //     Tooltip rectangle is calculated basing on the current mouse position
  949. // Returns:
  950. //     A CRect object with relative coordinates of the tooltip.
  951. //-----------------------------------------------------------------------
  952. virtual CRect GetTooltipRect(const CPoint& ptHit, const XTP_CALENDAR_HITTESTINFO& hitInfo);
  953. //-----------------------------------------------------------------------
  954. // Summary:
  955. //     This member function is used to show/hide a ToolTip rectangle.
  956. // Parameters:
  957. //     bShow :  TRUE to show a tooltip, FALSE to hide it.
  958. //-----------------------------------------------------------------------
  959. virtual void ShowToolTip(BOOL bShow = TRUE);
  960. //-----------------------------------------------------------------------
  961. // Summary:
  962. //     This member function is used to obtain the timeout value for
  963. //     displaying a tooltip.
  964. // Returns:
  965. //     A UINT that contains the value of timeout in milliseconds.
  966. //-----------------------------------------------------------------------
  967. virtual UINT GetShowToolTipTimeOut() const;
  968. // -----------------------------------------------------------------
  969. // Summary:
  970. //     Call this member function to set the new subject text for the
  971. //     editing event.
  972. // Parameters:
  973. //     strNewSubject :  New subject value.
  974. // -----------------------------------------------------------------
  975. virtual void OnUpdateEditingSubject(CString strNewSubject);
  976. //-----------------------------------------------------------------------
  977. // Summary:
  978. //     Call this member function to determine if you can perform an
  979. //     undo operation for the subject editor.
  980. // Returns:
  981. //     A BOOL. TRUE if there is the possibility to perform an undo
  982. //     operation. FALSE otherwise.
  983. //-----------------------------------------------------------------------
  984. virtual BOOL CanUndo();
  985. //-----------------------------------------------------------------------
  986. // Summary:
  987. //     Call this member function to determine if a redo operation is
  988. //     possible for the subject editor.
  989. // Returns:
  990. //     A BOOL. TRUE if it is possible to perform a redo operation on
  991. //     the subject-editor. FALSE otherwise.
  992. //-----------------------------------------------------------------------
  993. virtual BOOL CanRedo();
  994. //-----------------------------------------------------------------------
  995. // Summary:
  996. //     This member function is used to perform an Undo operation.
  997. // Returns:
  998. //     A BOOL. TRUE if the undo operation is successful. FALSE otherwise.
  999. //-----------------------------------------------------------------------
  1000. virtual BOOL Undo();
  1001. //-----------------------------------------------------------------------
  1002. // Summary:
  1003. //     This member function is used to perform a Redo operation.
  1004. // Returns:
  1005. //     A BOOL. TRUE if the redo operation is successful. FALSE otherwise.
  1006. //-----------------------------------------------------------------------
  1007. virtual BOOL Redo();
  1008. //-----------------------------------------------------------------------
  1009. // Summary:
  1010. //     This member function is used to erases the undo buffer.
  1011. //-----------------------------------------------------------------------
  1012. virtual void EmptyUndoBuffer();
  1013. // ----------------------------------------------------------------------
  1014. // Summary:
  1015. //     This member function is used to format the time using the provided
  1016. //     format.
  1017. // Parameters:
  1018. //     dtTime : Date-time value to format time part.
  1019. // Returns:
  1020. //     A CString object containing the formatted time string.
  1021. // ----------------------------------------------------------------------
  1022. virtual CString FormatEventTime(COleDateTime dtTime);
  1023. //-----------------------------------------------------------------------
  1024. // Summary:
  1025. //     Call this member function to determine the current format string.
  1026. // Returns:
  1027. //     A CString object that contains the format string.
  1028. //-----------------------------------------------------------------------
  1029. virtual CString GetDayHeaderFormat();
  1030. //-----------------------------------------------------------------------
  1031. // Summary:
  1032. //     Call this member function to determine if it is possible to
  1033. //     perform a Cut operation.
  1034. // Remarks:
  1035. //     This member function is used to determine the possibility of
  1036. //     performing a Cut operation in the subject editor.
  1037. // Returns:
  1038. //     A BOOL. TRUE if the cut operation is possible. FALSE otherwise.
  1039. //-----------------------------------------------------------------------
  1040. virtual BOOL CanCut();
  1041. //-----------------------------------------------------------------------
  1042. // Summary:
  1043. //     Call this member function to determine if it is possible to
  1044. //     perform a Copy operation.
  1045. // Remarks:
  1046. //     This member function is used to determine the possibility of
  1047. //     performing a Copy operation in the subject editor.
  1048. // Returns:
  1049. //     A BOOL. TRUE if the copy operation is possible. FALSE otherwise.
  1050. //-----------------------------------------------------------------------
  1051. virtual BOOL CanCopy();
  1052. //-----------------------------------------------------------------------
  1053. // Summary:
  1054. //     Call this member function to determine if it is possible to
  1055. //     perform a Paste operation.
  1056. // Remarks:
  1057. //     This member function is used to determine the possibility of
  1058. //     performing a Paste operation in the subject editor.
  1059. // Returns:
  1060. //     A BOOL. TRUE if the paste operation is possible. FALSE otherwise.
  1061. //-----------------------------------------------------------------------
  1062. virtual BOOL CanPaste();
  1063. //-----------------------------------------------------------------------
  1064. // Summary:
  1065. //     This member function is used to perform a Cut operation.
  1066. // Remarks:
  1067. //     Call this member function to perform a Cut operation in the subject
  1068. //     editor's window.
  1069. // Returns:
  1070. //     A BOOL. TRUE if the cut operation is successful. FALSE otherwise.
  1071. //-----------------------------------------------------------------------
  1072. virtual BOOL Cut();
  1073. //-----------------------------------------------------------------------
  1074. // Summary:
  1075. //     This member function is used to perform a Copy operation.
  1076. // Remarks:
  1077. //     Call this member function to perform a Copy operation in the
  1078. //     subject editor's window.
  1079. // Returns:
  1080. //     A BOOL. TRUE if the copy operation is successful. FALSE otherwise.
  1081. //-----------------------------------------------------------------------
  1082. virtual BOOL Copy();
  1083. //-----------------------------------------------------------------------
  1084. // Summary:
  1085. //     This member function is used to perform a Paste operation.
  1086. // Remarks:
  1087. //     Call this member function to perform a Paste operation in the
  1088. //     subject editor's window.
  1089. // Returns:
  1090. //     A BOOL. TRUE if the paste operation is successful. FALSE otherwise.
  1091. //-----------------------------------------------------------------------
  1092. virtual BOOL Paste();
  1093. //-----------------------------------------------------------------------
  1094. // Summary:
  1095. //     This member function is used to obtain the event object before
  1096. //     the start of the event editing (dragging).
  1097. // Returns:
  1098. //     A pointer to a CXTPCalendarEvent object before the start the
  1099. //     event editing or NULL.
  1100. //-----------------------------------------------------------------------
  1101. virtual CXTPCalendarEvent* GetDraggingEventOrig();
  1102. //-----------------------------------------------------------------------
  1103. // Summary:
  1104. //     This member function is used to obtain the event object that
  1105. //     is currently being edited. (i.e. dragging)
  1106. // Returns:
  1107. //     A pointer to a CXTPCalendarEvent object or NULL.
  1108. //-----------------------------------------------------------------------
  1109. virtual CXTPCalendarEvent* GetDraggingEventNew();
  1110. // ----------------------------------------------------------------------
  1111. // Summary:
  1112. //     This member function is used to prepare the event to event editing
  1113. //     (dragging) operation.
  1114. // Returns:
  1115. //     A BOOL. TRUE if the event editing is successful. FALSE otherwise.
  1116. // Parameters:
  1117. //     pEventOrig : Pointer to an initial event for the dragging.
  1118. // ----------------------------------------------------------------------
  1119. virtual BOOL SetDraggingEvent(CXTPCalendarEvent* pEventOrig);
  1120. //-----------------------------------------------------------------------
  1121. // Summary:
  1122. //     This member function is used to commit the event editing
  1123. //     (dragging) operation.
  1124. // Returns:
  1125. //     A BOOL. TRUE if the event editing is successful. FALSE otherwise.
  1126. //-----------------------------------------------------------------------
  1127. virtual BOOL CommitDraggingEvent();
  1128. //-----------------------------------------------------------------------
  1129. // Summary:
  1130. //     This member function is used to cancel the event editing
  1131. //     (dragging) operation.
  1132. //-----------------------------------------------------------------------
  1133. virtual void CancelDraggingEvent();
  1134. //-----------------------------------------------------------------------
  1135. // Summary:
  1136. //     This member function is used to start the event editing (dragging).
  1137. // Parameters:
  1138. //     point    - A CPoint that contains the mouse position with the
  1139. //                coordinates to start the event editing (dragging).
  1140. //     pHitTest - A pointer to a XTP_CALENDAR_HITTESTINFO struct that
  1141. //                contains the HitTest results from a specified point.
  1142. //-----------------------------------------------------------------------
  1143. virtual void OnStartDragging(CPoint point, XTP_CALENDAR_HITTESTINFO* pHitTest);
  1144. //-----------------------------------------------------------------------
  1145. // Summary:
  1146. //     This member function is used to perform the event editing
  1147. //     (dragging) operation step.
  1148. // Parameters:
  1149. //     point    - A CPoint that contains the mouse position coordinates.
  1150. //     pHitTest - A pointer to a XTP_CALENDAR_HITTESTINFO struct that
  1151. //                contains the HitTest results from the specified point.
  1152. //-----------------------------------------------------------------------
  1153. virtual BOOL OnDragging(CPoint point, XTP_CALENDAR_HITTESTINFO* pHitTest);
  1154. // ----------------------------------------------------------------------
  1155. // Summary:
  1156. //     This member function is used to finish the event editing
  1157. //     (dragging) operation.
  1158. // Parameters:
  1159. //     point :     A CPoint that contains the mouse position coordinates.
  1160. // pHitInfo :  A pointer to a XTP_CALENDAR_HITTESTINFO struct that contains
  1161. //                 the HitTest results from the specified point.
  1162. // ----------------------------------------------------------------------
  1163. virtual BOOL OnEndDragging(CPoint point, XTP_CALENDAR_HITTESTINFO* pHitInfo);
  1164. //-----------------------------------------------------------------------
  1165. // Summary:
  1166. //     This member function is used to start the event subject editing.
  1167. // Parameters:
  1168. //     pViewEvent  - A pointer to a CXTPCalendarViewEvent event view
  1169. //                   that is used to edit the subject.
  1170. //-----------------------------------------------------------------------
  1171. virtual void StartEditSubject(CXTPCalendarViewEvent* pViewEvent);
  1172. //-----------------------------------------------------------------------
  1173. // Summary:
  1174. //     This member function is used to finish the event subject editing.
  1175. // Parameters:
  1176. //     eAction        - An XTPCalendarEndEditSubjectAction object that
  1177. //                      contains the value to commit or cancel the operation.
  1178. //                      See enum XTPCalendarEndEditSubjectAction.
  1179. //     bUpdateControl - A BOOL. If TRUE, then redraw the control immediately,
  1180. //                      otherwise perform only the specified action
  1181. //                      without redrawing.
  1182. //-----------------------------------------------------------------------
  1183. virtual void EndEditSubject(XTPCalendarEndEditSubjectAction eAction, BOOL bUpdateControl = TRUE);
  1184. //-----------------------------------------------------------------------
  1185. // Summary:
  1186. //     This member function is used to obtain the time value after
  1187. //     a mouse click event in the subject editing window.
  1188. // Returns:
  1189. //     A UINT that contains the timeout value in milliseconds before
  1190. //     the start event subject editing.
  1191. //-----------------------------------------------------------------------
  1192. virtual UINT GetStartEditSubjectTimeOut() const;
  1193. //-----------------------------------------------------------------------
  1194. // Summary:
  1195. //     This member function is used to create a new event and start
  1196. //      subject editing.
  1197. // Parameters:
  1198. //      pcszInitialSubject - A pointer to the string which contains initial
  1199. //                           subject value for new event (generally initial
  1200. //                           char).
  1201. //-----------------------------------------------------------------------
  1202. virtual void StartEditNewEventInplace(LPCTSTR pcszInitialSubject);
  1203. //-----------------------------------------------------------------------
  1204. // Summary:
  1205. //     This member function is used to obtain the event view object
  1206. //     for the specified event and day.
  1207. // Parameters:
  1208. //     pEvent - A CXTPCalendarEvent object that contains the value
  1209. //              to search for.
  1210. //     dtDay  - A COleDateTime object that contains the day that
  1211. //              corresponds to the event object.
  1212. // Returns:
  1213. //     A CXTPCalendarViewEvent object that contains the view object or NULL.
  1214. //-----------------------------------------------------------------------
  1215. virtual CXTPCalendarViewEvent* FindViewEvent(CXTPCalendarEvent* pEvent,
  1216.  COleDateTime dtDay);
  1217. //-----------------------------------------------------------------------
  1218. // Summary:
  1219. //     This member function is used to obtain the next event view
  1220. //     object used for editing events by pressing the TAB key.
  1221. // Parameters:
  1222. //     dtMinStart  - A COleDateTime object that contains the first
  1223. //                   date and time to start the search.
  1224. //     bReverse    - If TRUE the reverse order is used, otherwise normal is used.
  1225. //     pAfterEvent - A CXTPCalendarEvent object that contains the
  1226. //                   last event object to search for.
  1227. // Returns:
  1228. //     A CXTPCalendarViewEvent object that contains the view object or NULL.
  1229. // See Also: GetNextTimeEditByTAB, UpdateNextTimeEditByTAB
  1230. //-----------------------------------------------------------------------
  1231. virtual CXTPCalendarViewEvent* FindEventToEditByTAB(COleDateTime dtMinStart,
  1232. BOOL bReverse, CXTPCalendarEvent* pAfterEvent = NULL);
  1233. //-----------------------------------------------------------------------
  1234. // Summary:
  1235. //     This member function is used to obtain the next date and time
  1236. //     to start the find event view for editing events using the TAB key.
  1237. // Returns:
  1238. //     A COleDateTime object that contains the next date and time.
  1239. // See Also: FindEventToEditByTAB, UpdateNextTimeEditByTAB
  1240. //-----------------------------------------------------------------------
  1241. virtual COleDateTime GetNextTimeEditByTAB();
  1242. //-----------------------------------------------------------------------
  1243. // Summary:
  1244. //     This member function is used to set the next date and time to
  1245. //     start the find event view for editing events using the TAB key.
  1246. // Parameters:
  1247. //     dtNext   - A COleDateTime object that contains the next date and
  1248. //                time to start the find event view.
  1249. //     bReverse - If TRUE the reverse order is used, otherwise normal is used.
  1250. //     bReset   - If TRUE the next time is set to the start (or end)
  1251. //                iteration position.
  1252. // See Also: GetNextTimeEditByTAB, FindEventToEditByTAB
  1253. //-----------------------------------------------------------------------
  1254. virtual void UpdateNextTimeEditByTAB(COleDateTime dtNext, BOOL bReverse,
  1255.  BOOL bReset = FALSE);
  1256. //-----------------------------------------------------------------------
  1257. // Summary:
  1258. //     This member function is used to process the days selection that
  1259. //     are selected with the mouse.
  1260. // Parameters:
  1261. //     pInfo  - A pointer to a XTP_CALENDAR_HITTESTINFO struct that contains
  1262. //              HitTest information about the current mouse position.
  1263. //     nFlags - A UINT that contains the current state of the additional
  1264. //              mouse and keyboard buttons. Like MK_SHIFT, ...
  1265. // See Also: SelectDays
  1266. //-----------------------------------------------------------------------
  1267. virtual void ProcessDaySelection(XTP_CALENDAR_HITTESTINFO* pInfo, UINT nFlags);
  1268. //-----------------------------------------------------------------------
  1269. // Summary:
  1270. //     This member function is used to change the days selection depending
  1271. //     on the previous state of the selection.
  1272. // Parameters:
  1273. //     dtNewSel - A COleDateTime object that contains the day date where
  1274. //                the selection has moved.
  1275. //-----------------------------------------------------------------------
  1276. virtual void SelectDays(COleDateTime dtNewSel);
  1277. //-----------------------------------------------------------------------
  1278. // Summary:
  1279. //     This member function is used to process events that are selected
  1280. //     with the mouse.
  1281. // Parameters:
  1282. //     pInfo  - A pointer to an XTP_CALENDAR_HITTESTINFO struct that contains
  1283. //              HitTest information about current mouse position.
  1284. //     nFlags - A UINT that contains the current state of the additional
  1285. //              mouse and keyboard buttons. Like MK_SHIFT, ...
  1286. //-----------------------------------------------------------------------
  1287. virtual void ProcessEventSelection(XTP_CALENDAR_HITTESTINFO* pInfo, UINT nFlags);
  1288. //-----------------------------------------------------------------------
  1289. // Summary:
  1290. //      This member function(s) is used to disable or enable vertical or
  1291. //      horizontal scrolling of the view (by date or time).
  1292. // Parameters:
  1293. //     bEnable - Set TRUE to enable scrolling, FALSE to disable.
  1294. // Remarks:
  1295. //      Vertical and horizontal scrolling are enabled by default.
  1296. //-----------------------------------------------------------------------
  1297. virtual void EnableVScroll(BOOL bEnable = TRUE);
  1298. virtual void EnableHScroll(BOOL bEnable = TRUE); // <COMBINE CXTPCalendarView::EnableVScroll>
  1299. //-----------------------------------------------------------------------
  1300. // Summary:
  1301. //      This member function(s) is used to obtain status of the vertical or
  1302. //      horizontal scrolling features of the view (by date or time).
  1303. // Returns:
  1304. //     TRUE if scrolling enabled, FALSE otherwise.
  1305. //-----------------------------------------------------------------------
  1306. virtual BOOL IsHScrollEnabled();
  1307. virtual BOOL IsVScrollEnabled();// <COMBINE CXTPCalendarView::IsHScrollEnabled>
  1308. //-----------------------------------------------------------------------
  1309. // Summary:
  1310. //      This member function(s) is used to set date format string for the
  1311. //      day view.
  1312. // Parameters:
  1313. //     pcszCustomFormat - Date format string.
  1314. // Remarks:
  1315. //      Long, Middle, Short and Shortest format strings are used for
  1316. //      different header widths. Calendar control select the longest format
  1317. //      which can be drawn for active day header width.
  1318. //      By default these format strings are build using locale settings
  1319. //      and SetDayHeaderFormatXXX methods should be used to customize
  1320. //      default settings.
  1321. //-----------------------------------------------------------------------
  1322. virtual void SetDayHeaderFormatLong(LPCTSTR pcszCustomFormat);
  1323. // <COMBINE SetDayHeaderFormatLong>
  1324. virtual void SetDayHeaderFormatMiddle(LPCTSTR pcszCustomFormat);
  1325. // <COMBINE SetDayHeaderFormatLong>
  1326. virtual void SetDayHeaderFormatShort(LPCTSTR pcszCustomFormat);
  1327. // <COMBINE SetDayHeaderFormatLong>
  1328. virtual void SetDayHeaderFormatShortest(LPCTSTR pcszCustomFormat);
  1329. //-----------------------------------------------------------------------
  1330. // Summary:
  1331. //     Call this member function to determine is Today day visible.
  1332. // Returns:
  1333. //     A BOOL. TRUE if Today day is visible, FALSE otherwise.
  1334. //-----------------------------------------------------------------------
  1335. virtual BOOL IsTodayVisible();
  1336. //-----------------------------------------------------------------------
  1337. // Summary:
  1338. //     This member function is called by the calendar framework to retrieve
  1339. //     event time string with maximum length (to reserve space).
  1340. // Returns:
  1341. //     A maximum time string.
  1342. //-----------------------------------------------------------------------
  1343. virtual CString GetItemTextEventTimeMax();
  1344. //-----------------------------------------------------------------------
  1345. // Summary:
  1346. //     This member function creates the day header format string.
  1347. // Parameters:
  1348. //     pDC       - Pointer to a valid device context.
  1349. //     nWidth    - An int that contains the day header with in pixels.
  1350. //     pTextFont - A pointer to a CFont object that is
  1351. //                 used to calculate the text dimensions.
  1352. // Remarks:
  1353. //     Call this member function to create day header format
  1354. //     string based on the current locale.
  1355. //-----------------------------------------------------------------------
  1356. virtual void CalculateHeaderFormat(CDC* pDC, int nWidth, CFont* pTextFont);
  1357. protected:
  1358. //-----------------------------------------------------------------------
  1359. // Summary:
  1360. //     This member function is used to create a timer event.
  1361. // Parameters:
  1362. //     uTimeOut_ms - A UINT that contains the duration of the timer
  1363. //                   event in milliseconds.
  1364. // Returns:
  1365. //     A UINT that contains the identifier of the timer.
  1366. //-----------------------------------------------------------------------
  1367. virtual UINT SetTimer(UINT uTimeOut_ms);
  1368. //-----------------------------------------------------------------------
  1369. // Summary:
  1370. //     This member function is used to destroy a timer event.
  1371. // Parameters:
  1372. //     uTimerID - A UINT that is used to specify the identifier of the timer.
  1373. //-----------------------------------------------------------------------
  1374. virtual void KillTimer(UINT uTimerID);
  1375. //-----------------------------------------------------------------------
  1376. // Summary:
  1377. //     The framework calls this member function after each interval
  1378. //     specified in the SetTimer member function.
  1379. // Parameters:
  1380. //     uTimerID    - A UINT that is used to specify the identifier
  1381. //                   of the timer.
  1382. //-----------------------------------------------------------------------
  1383. virtual BOOL OnTimer(UINT_PTR uTimerID);
  1384. //-----------------------------------------------------------------------
  1385. // Summary:
  1386. //     This member function is used to perform additional adjustments
  1387. //     in some kinds of views.
  1388. // Remarks:
  1389. //     Call this member function to perform additional adjustments after
  1390. //     all adjustment activities are completed.
  1391. //-----------------------------------------------------------------------
  1392. //virtual void OnPostAdjustLayout();
  1393. //-----------------------------------------------------------------------
  1394. // Summary:
  1395. //     This member function is called by the framework before destroying
  1396. //     the view.
  1397. //-----------------------------------------------------------------------
  1398. virtual void OnBeforeDestroy();
  1399. //-----------------------------------------------------------------------
  1400. // Summary:
  1401. //     This member function is called by the framework view is activated
  1402. //     or deactivated.
  1403. // Parameters:
  1404. //     bActivate     - Indicates whether the view is being activated or
  1405. //                     deactivated.
  1406. //     pActivateView - Points to the view object that is being activated.
  1407. //     pInactiveView - Points to the view object that is being deactivated.
  1408. // Remarks:
  1409. //     Override this member function to handle activated/deactivated
  1410. //     events.
  1411. // See Also:
  1412. //     CXTPCalendarControl::SwitchActiveView(XTPCalendarViewType eView),
  1413. //     CXTPCalendarControl::SetActiveView(CXTPCalendarView* pView)
  1414. //-----------------------------------------------------------------------
  1415. virtual void OnActivateView(BOOL bActivate, CXTPCalendarView* pActivateView,
  1416. CXTPCalendarView* pInactiveView);
  1417. //-----------------------------------------------------------------------
  1418. // Summary:
  1419. //     This member function is used to send a notification from the
  1420. //     parent Calendar control.
  1421. // Parameters:
  1422. //     EventCode - A XTP_NOTIFY_CODE that contains the specific
  1423. //                 code of the event.
  1424. //     wParam -  A DWORD that contains the first custom parameter.
  1425. //               Depends on the event type. See specific event description
  1426. //               for details.
  1427. //     lParam -  A DWORD that contains the second custom parameter.
  1428. //               Depends on the event type. See specific event description
  1429. //               for details.
  1430. // Remarks:
  1431. //     This member function is called internally from inside the
  1432. //     class when a notification is sent to all listeners.
  1433. // See Also: XTP_NOTIFY_CODE
  1434. //-----------------------------------------------------------------------
  1435. virtual void SendNotification(XTP_NOTIFY_CODE EventCode, WPARAM wParam = 0, LPARAM lParam = 0);
  1436. //-----------------------------------------------------------------------
  1437. // Summary:
  1438. //     This member function is used to create the time format string.
  1439. // Remarks:
  1440. //     Call this member function to create the time format string
  1441. //     based on the current locale.
  1442. //-----------------------------------------------------------------------
  1443. virtual void _CalculateEventTimeFormat();
  1444. //-----------------------------------------------------------------------
  1445. // Summary:
  1446. //     This function is used to calculates the max width of the date
  1447. //     used in the specified format string.
  1448. // Parameters:
  1449. //     pDC       - Pointer to a valid device context.
  1450. //     strFormat - A CString that contains the date format string.
  1451. //     bMonth    - A BOOL. If TRUE, then calculate the max width for
  1452. //                 all the months in a year, otherwise calculate the
  1453. //                 max width for all week days.
  1454. // Remarks:
  1455. //     Use this member function to calculate the header format width.
  1456. // Returns:
  1457. //     A CString containing the name of the month or the name of the
  1458. //     day of the week that has the maximum width.
  1459. //-----------------------------------------------------------------------
  1460. virtual CString _GetMaxWidthFormat(CDC* pDC, CString strFormat, BOOL bMonth);
  1461. //-----------------------------------------------------------------------
  1462. // Summary:
  1463. //     This member function is used to calculate, in pixels, the max
  1464. //     date width for the specified format string.
  1465. // Parameters:
  1466. //     pDC       - A pointer to a valid device context.
  1467. //     strFormat - A CString that contains the date format string.
  1468. // Remarks:
  1469. //     Use this member function to calculate the maximum width of the
  1470. //     date string.
  1471. // Returns:
  1472. //     An int that contains the maximum date width, in pixels.
  1473. //-----------------------------------------------------------------------
  1474. virtual int _GetMaxWidth(CDC* pDC, CString strFormat);
  1475. //-----------------------------------------------------------------------
  1476. // Summary:
  1477. //     This member function is used to remove the year part from the
  1478. //     specified format string.
  1479. // Parameters:
  1480. //     strFormat - [IN/OUT] A CString object that contains the date
  1481. //                          format string reference.
  1482. // Remarks:
  1483. //     This member function is used to calculate the header format.
  1484. //-----------------------------------------------------------------------
  1485. virtual void _RemoveYearPart(CString& strFormat);
  1486. //-----------------------------------------------------------------------
  1487. // Summary:
  1488. //      This member function is used to build day header date format
  1489. //      default strings.
  1490. // Remarks:
  1491. //      This member function read locale settings and fill
  1492. //      m_strDayHeaderFormatDefaultXXX members.
  1493. // See Also:
  1494. //      CalculateHeaderFormat(),
  1495. //      m_strDayHeaderFormatDefaultLong, m_strDayHeaderFormatDefaultMiddle,
  1496. //      m_strDayHeaderFormatDefaultShort, m_strDayHeaderFormatDefaultShortest.
  1497. //-----------------------------------------------------------------------
  1498. virtual void _ReadDefaultHeaderFormats();
  1499. //-----------------------------------------------------------------------
  1500. // Summary:
  1501. //      This member function get custom or default day header date format
  1502. //      string.
  1503. // Parameters:
  1504. //      nLevel - Format width level:
  1505. //                  0 - Long,
  1506. //                  1 - Middle,
  1507. //                  2 - Short,
  1508. //                  3 - Shortest.
  1509. // Remarks:
  1510. //      Returns m_strDayHeaderFormatXXX member value if is not empty,
  1511. //      otherwise  m_strDayHeaderFormatDefaultXXX member value is returned.
  1512. // Returns:
  1513. //      Active header date format string for the specified width level.
  1514. // See Also:
  1515. //      m_strDayHeaderFormatDefaultLong, m_strDayHeaderFormatDefaultMiddle,
  1516. //      m_strDayHeaderFormatDefaultShort, m_strDayHeaderFormatDefaultShortest,
  1517. //      m_strDayHeaderFormatLong, m_strDayHeaderFormatMiddle,
  1518. //      m_strDayHeaderFormatShort, m_strDayHeaderFormatShortest.
  1519. //-----------------------------------------------------------------------
  1520. virtual CString _GetDayHeaderFormat(int nLevel);
  1521. //-----------------------------------------------------------------------
  1522. // Summary:
  1523. //     This member function is used to determine if the specified
  1524. //     editing operation command is possible for the event subject
  1525. //     editor window.
  1526. // Parameters:
  1527. //     idEditCmd - A UINT that contains the editing operation command ID:
  1528. //                 ID_EDIT_UNDO, ID_EDIT_CUT, ID_EDIT_COPY, or ID_EDIT_PASTE.
  1529. // Remarks:
  1530. //     This function works correctly even when there is no subject editing mode.
  1531. // Returns:
  1532. //     A BOOL. TRUE - if the subject editing mode and specified editing
  1533. //     operation are possible. FALSE otherwise.
  1534. //-----------------------------------------------------------------------
  1535. virtual BOOL _CanSubjectEditor(UINT idEditCmd);
  1536. //-----------------------------------------------------------------------
  1537. // Summary:
  1538. //     This member function is used to obtain a pointer to the event
  1539. //     subject editor window.
  1540. // Remarks:
  1541. //     Works correctly even when not using a subject editing mode.
  1542. // Returns:
  1543. //     Pointer to the CWnd or NULL.
  1544. //-----------------------------------------------------------------------
  1545. virtual CWnd* _GetSubjectEditorWnd();
  1546. //-----------------------------------------------------------------------
  1547. // Summary:
  1548. //     This member function is used to copy selected events and CXTPCalendarEvent objects,
  1549. //     to a COleDataSource object.
  1550. // Parameters:
  1551. //     dwCopyFlags - A DWORD that contains a set of flags from the enum
  1552. //                   XTPCalendarClipboardCopyFlags or user defined
  1553. //                   values.
  1554. // Remarks:
  1555. //     COleDataSource->SetClipboard method must be called to place
  1556. //     data into the clipboard. Keep in mind - SetClipboard calls
  1557. //     InternalRelease.
  1558. // Returns:
  1559. //     If there are selected events, then the function returns a pointer
  1560. //     to a new COleDataSource object. If there are no selected events,
  1561. //     then the function returns NULL.
  1562. // See Also: _ReadEventsFromClipboard, XTPCalendarClipboardCopyFlags,
  1563. //           XTPCALENDARCTRL_CF_EVENT, COleDataSource
  1564. //-----------------------------------------------------------------------
  1565. virtual COleDataSource* _CopySelectedEvents(DWORD dwCopyFlags = 0);
  1566. //-----------------------------------------------------------------------
  1567. // Summary:
  1568. //     This member function is used to read events and CXTPCalendarEvent
  1569. //     objects, from a COleDataSource object.
  1570. // Parameters:
  1571. //     pData        - A COleDataObject pointer to the data object.
  1572. //     pdwCopyFlags - A pointer to a DWORD that contains the CopyFlags.
  1573. //                    These flags are set in the _CopySelectedEvents call.
  1574. //                    The flag values are from the XTPCalendarClipboardCopyFlags
  1575. //                    enum or are user defined values.
  1576. // Remarks:
  1577. //     COleDataSource->AttachClipboard method must be called to
  1578. //     retrieve data from the clipboard.
  1579. // Returns:
  1580. //     A pointer to a CXTPCalendarEvents object. NULL - If there are no events
  1581. //     in the clipboard. Otherwise, a pointer to a new CXTPCalendarEvents objects
  1582. //     collection.
  1583. // See Also: _CopySelectedEvents, XTPCalendarClipboardCopyFlags,
  1584. //           XTPCALENDARCTRL_CF_EVENT, COleDataSource
  1585. //-----------------------------------------------------------------------
  1586. virtual CXTPCalendarEventsPtr _ReadEventsFromClipboard(COleDataObject* pData,
  1587. DWORD* pdwCopyFlags = NULL);
  1588. //-----------------------------------------------------------------------
  1589. // Summary:
  1590. //     This member function is used to obtain the minimum event duration
  1591. //     visible in the current view.
  1592. // Returns:
  1593. //     A COleDateTimeSpan object that contains the minimum duration
  1594. //     of the event.
  1595. //-----------------------------------------------------------------------
  1596. virtual COleDateTimeSpan GetEventDurationMin() const;
  1597. //-----------------------------------------------------------------------
  1598. // Summary:
  1599. //     This member function is used to perform an undo/redo operation
  1600. //     for the specified event.
  1601. // Parameters:
  1602. //     pEvent - A pointer to a CXTPCalendarEvent object that contains
  1603. //              the undo/redo action.
  1604. // Returns:
  1605. //     A BOOL. TRUE if the undo operation is successful. FALSE otherwise.
  1606. // See Also:
  1607. //     Undo, Redo, m_UndoBuffer, m_eUndoMode, XTPCalendarUndoMode
  1608. //-----------------------------------------------------------------------
  1609. virtual BOOL _Undo(CXTPCalendarEvent* pEvent = NULL);
  1610. //{{AFX_CODEJOCK_PRIVATE
  1611. void _ReSelectSelectEvents();
  1612. //}}AFX_CODEJOCK_PRIVATE
  1613. //-----------------------------------------------------------------------
  1614. // Summary:
  1615. //     This member function handles changing of an event in the associated
  1616. //     data provider. It performs all the necessary validation of this
  1617. //     action and returns an update result.
  1618. // Parameters:
  1619. //     nfCode - Notification code of the data provider update operation.
  1620. //     pEvent - A pointer to a CXTPCalendarEvent object that was changed.
  1621. // Returns:
  1622. //     A code of the update action to be performed in the view.
  1623. // See Also:
  1624. //     XTP_NOTIFY_CODE overview, XTPEnumCalendarUpdateResult overview
  1625. //-----------------------------------------------------------------------
  1626. virtual XTPEnumCalendarUpdateResult OnEventChanged_InDataProvider(XTP_NOTIFY_CODE nfCode, CXTPCalendarEvent* pEvent);
  1627. protected:
  1628. //=======================================================================
  1629. // Summary:
  1630. //     This helper class implements Undo/Redo events editing
  1631. //     functionality.
  1632. //=======================================================================
  1633. class _XTP_EXT_CLASS CUndoBuffer {
  1634. public:
  1635. //-----------------------------------------------------------------------
  1636. // Summary:
  1637. //     Default class constructor.
  1638. //-----------------------------------------------------------------------
  1639. CUndoBuffer() {};
  1640. //-----------------------------------------------------------------------
  1641. // Summary:
  1642. //     Default class destructor.
  1643. //-----------------------------------------------------------------------
  1644. virtual ~CUndoBuffer() {
  1645. RemoveAll();
  1646. };
  1647. //-----------------------------------------------------------------------
  1648. // Summary:
  1649. //     This member function is used to add an Undo action to the buffer.
  1650. // Parameters:
  1651. //     pPrev - A CXTPCalendarEvent object that contains the instance
  1652. //             before the edit action.
  1653. //     pNew  - A CXTPCalendarEvent that contains the instance after
  1654. //             the edit action.
  1655. //-----------------------------------------------------------------------
  1656. void AddUndoAction(CXTPCalendarEvent* pPrev, CXTPCalendarEvent* pNew)
  1657. {
  1658. CXTPCalendarEventPtr ptrPrevCopy = pPrev ? pPrev->CloneEvent() : NULL;
  1659. CXTPCalendarEventPtr ptrNewCopy = pNew ? pNew->CloneEvent() : NULL;
  1660. m_arUndoActions.Add(SUndoAction(ptrPrevCopy, ptrNewCopy));
  1661. }
  1662. //-----------------------------------------------------------------------
  1663. // Summary:
  1664. //     Call this member function to clear the Undo buffer.
  1665. //-----------------------------------------------------------------------
  1666. void RemoveAll() {
  1667. m_arUndoActions.RemoveAll();
  1668. }
  1669. //-----------------------------------------------------------------------
  1670. // Summary:
  1671. //     This member function is used to search for an undo action for a
  1672. //     specified event in the buffer.
  1673. // Parameters:
  1674. //     pEvent - A CXTPCalendarEvent object to search for in the buffer.
  1675. // Returns:
  1676. //     A BOOL. TRUE if undo action for a specified event exists in the
  1677. //     buffer. FALSE otherwise.
  1678. //-----------------------------------------------------------------------
  1679. BOOL IsInUndoBuffer(CXTPCalendarEvent* pEvent)
  1680. {
  1681. int nCount = (int)m_arUndoActions.GetSize();
  1682. for (int i = nCount-1; i >= 0; i--) {
  1683. SUndoAction& rAction = m_arUndoActions.ElementAt(i);
  1684. if (rAction.ptrPrev && rAction.ptrPrev->IsEqualIDs(pEvent) ||
  1685. rAction.ptrNew && rAction.ptrNew->IsEqualIDs(pEvent))
  1686. {
  1687. return TRUE;
  1688. }
  1689. }
  1690. return FALSE;
  1691. }
  1692. //-----------------------------------------------------------------------
  1693. // Summary:
  1694. //     Call this member function to obtain the number of undo actions.
  1695. // Returns:
  1696. //     An int that contains the number of Undo actions.
  1697. //-----------------------------------------------------------------------
  1698. int GetCount() const {
  1699. return (int)m_arUndoActions.GetSize();
  1700. }
  1701. //-----------------------------------------------------------------------
  1702. // Summary:
  1703. //     Call this member function to obtain the first undo event.
  1704. // Returns:
  1705. //     A CXTPCalendarEvent object that contains the first undo event
  1706. //     or NULL if there are no undo events.
  1707. //-----------------------------------------------------------------------
  1708. CXTPCalendarEventPtr GetFirstUndoEvent()
  1709. {
  1710. int nCount = (int)m_arUndoActions.GetSize();
  1711. if (nCount > 0)
  1712. {
  1713. SUndoAction& rAction = m_arUndoActions.ElementAt(0);
  1714. if (rAction.ptrPrev) {
  1715. return rAction.ptrPrev;
  1716. }
  1717. else if (rAction.ptrNew) {
  1718. return rAction.ptrNew;
  1719. }
  1720. }
  1721. return NULL;
  1722. }
  1723. //-----------------------------------------------------------------------
  1724. // Summary:
  1725. //     This member function is used to search for the first action for
  1726. //     a specified event in the buffer.
  1727. // Parameters:
  1728. //     pEvent - A CXTPCalendarEvent object that contains the event to
  1729. //              search for in the buffer.
  1730. // Returns:
  1731. //     A CXTPCalendarEvent that contains the oldest event object from
  1732. //     all of the editing actions or NULL if there are no events.
  1733. //-----------------------------------------------------------------------
  1734. CXTPCalendarEventPtr UndoAllForEvent(CXTPCalendarEvent* pEvent)
  1735. {
  1736. int nCount = (int)m_arUndoActions.GetSize();
  1737. for (int i = 0; i < nCount; i++)
  1738. {
  1739. SUndoAction& rAction = m_arUndoActions.ElementAt(i);
  1740. if (rAction.ptrPrev && rAction.ptrPrev->IsEqualIDs(pEvent) ||
  1741. rAction.ptrNew && rAction.ptrNew->IsEqualIDs(pEvent))
  1742. {
  1743. return rAction.ptrPrev;
  1744. }
  1745. }
  1746. return NULL;
  1747. }
  1748. //-----------------------------------------------------------------------
  1749. // Summary:
  1750. //     This member function is used to search for last action for a
  1751. //     specified event in the buffer.
  1752. // Parameters:
  1753. //     pEvent - A CXTPCalendarEvent object that contains the event
  1754. //              to search for in the buffer.
  1755. // Returns:
  1756. //     A CXTPCalendarEvent that contains the latest event object from
  1757. //     all of the editing actions or NULL if there are no events.
  1758. //-----------------------------------------------------------------------
  1759. CXTPCalendarEventPtr RedoAllForEvent(CXTPCalendarEvent* pEvent)
  1760. {
  1761. CXTPCalendarEventPtr ptrResult;
  1762. int nCount = (int)m_arUndoActions.GetSize();
  1763. for (int i = nCount-1; i >= 0; i--)
  1764. {
  1765. SUndoAction& rAction = m_arUndoActions.ElementAt(i);
  1766. if (rAction.ptrPrev && rAction.ptrPrev->IsEqualIDs(pEvent) ||
  1767. rAction.ptrNew && rAction.ptrNew->IsEqualIDs(pEvent))
  1768. {
  1769. return rAction.ptrNew;
  1770. }
  1771. }
  1772. return NULL;
  1773. }
  1774. //-----------------------------------------------------------------------
  1775. // Summary:
  1776. //     This member function is used to clear the current buffer of all
  1777. //     undo actions and then add new undo actions to the buffer from
  1778. //     the source object.
  1779. // Parameters:
  1780. //     rSrc - A CUndoBuffer object that contains the new undo actions
  1781. //            to add to the undo buffer object.
  1782. //-----------------------------------------------------------------------
  1783. void Set(CUndoBuffer& rSrc) {
  1784. m_arUndoActions.RemoveAll();
  1785. m_arUndoActions.Append(rSrc.m_arUndoActions);
  1786. }
  1787. protected:
  1788. //-----------------------------------------------------------------------
  1789. // Remarks:
  1790. //     Helper structure to store editing/undo actions.
  1791. //-----------------------------------------------------------------------
  1792. struct SUndoAction
  1793. {
  1794. CXTPCalendarEventPtr ptrPrev; // Event instance before edit action.
  1795. CXTPCalendarEventPtr ptrNew;  // Event instance after edit action.
  1796. //-----------------------------------------------------------------------
  1797. // Summary:
  1798. //     Default class constructor.
  1799. // Parameters:
  1800. //     pPrev - A CXTPCalendarEvent object that contains the instance
  1801. //             before the edit action.
  1802. //     pNew  - A CXTPCalendarEvent object that contains the instance
  1803. //             after the edit action.
  1804. //-----------------------------------------------------------------------
  1805. SUndoAction(CXTPCalendarEvent* pPrev = NULL, CXTPCalendarEvent* pNew = NULL) :
  1806. ptrPrev(pPrev, TRUE), ptrNew(pNew, TRUE) {};
  1807. //-----------------------------------------------------------------------
  1808. // Parameters:
  1809. //     src - A SUndoAction object that contains the source object.
  1810. // Summary:
  1811. //     Copy class constructor.
  1812. //-----------------------------------------------------------------------
  1813. SUndoAction(const SUndoAction& src) {
  1814. *this = src;
  1815. }
  1816. //-----------------------------------------------------------------------
  1817. // Summary:
  1818. //     Default class destructor.
  1819. //-----------------------------------------------------------------------
  1820. virtual ~SUndoAction() {}
  1821. //-----------------------------------------------------------------------
  1822. // Summary:
  1823. //     This is the overloaded assignment operator.
  1824. // Parameters:
  1825. //     src - Source object.
  1826. // Remarks:
  1827. //     Copy class operator.
  1828. //-----------------------------------------------------------------------
  1829. const SUndoAction& operator=(const SUndoAction& src) {
  1830. ptrPrev = src.ptrPrev;
  1831. ptrNew = src.ptrNew;
  1832. return *this;
  1833. }
  1834. };
  1835. CArray<SUndoAction, const SUndoAction&> m_arUndoActions; // Array of editing/undo actions.
  1836. };
  1837. //-----------------------------------------------------------------------
  1838. // Summary:
  1839. //      This method is used to determine Copy or Move dragging mode.
  1840. // Parameters:
  1841. //      eDragMode - A value from enum XTPCalendarDraggingMode.
  1842. // Returns:
  1843. //      TRUE if eDragMode == xtpCalendaDragModeCopy or eDragMode == xtpCalendaDragModeMove.
  1844. //-----------------------------------------------------------------------
  1845. BOOL _IsDragModeCopyMove(int eDragMode) const;
  1846. //-----------------------------------------------------------------------
  1847. // Summary:
  1848. //      This method is used to determine is specified editing operation
  1849. //      disabled.
  1850. // Parameters:
  1851. //      eOperation - A value from enum XTPCalendarEditOperation.
  1852. //      pEventView - A pointer to event view.
  1853. // Returns:
  1854. //      TRUE if specified editing operation disabled, otherwise FALSE.
  1855. // See Also:
  1856. //      XTP_NC_CALENDAR_IS_EVENT_EDIT_OPERATION_DISABLED,
  1857. //      XTP_NC_CALENDAR_BEFORE_EVENT_EDIT_OPERATION, XTPCalendarEditOperation.
  1858. //-----------------------------------------------------------------------
  1859. BOOL IsEditOperationDisabledNotify(XTPCalendarEditOperation eOperation, CXTPCalendarViewEvent* pEventView);
  1860. //-----------------------------------------------------------------------
  1861. // Summary:
  1862. //      This method is used to customize or disable specified editing
  1863. //      operation.
  1864. // Parameters:
  1865. //      eOperation - A value from enum XTPCalendarEditOperation.
  1866. //      pEventView - A pointer to event view.
  1867. // Returns:
  1868. //      TRUE if specified editing operation disabled or handled,
  1869. //      otherwise FALSE.
  1870. // See Also:
  1871. //      XTP_NC_CALENDAR_IS_EVENT_EDIT_OPERATION_DISABLED,
  1872. //      XTP_NC_CALENDAR_BEFORE_EVENT_EDIT_OPERATION, XTPCalendarEditOperation.
  1873. //-----------------------------------------------------------------------
  1874. BOOL OnBeforeEditOperationNotify(XTPCalendarEditOperation eOperation, CXTPCalendarViewEvent* pEventView);
  1875. BOOL OnBeforeEditOperationNotify(XTPCalendarEditOperation eOperation, CXTPCalendarViewEvents* pEventViews); // <COMBINE CXTPCalendarView::OnBeforeEditOperationNotify@XTPCalendarEditOperation@CXTPCalendarViewEvent*>
  1876. //-----------------------------------------------------------------------
  1877. // Summary:
  1878. //      This method is used to customize or disable paste editing
  1879. //      operation.
  1880. // Parameters:
  1881. //      pEvent                        - A pointer to event prepared for paste.
  1882. //      bPasteWillChangeExistingEvent - If this parameter is TRUE, the new
  1883. //                                      event will not be added, just
  1884. //                                      existing event will be updated.
  1885. //                                      Used for creating recurrence event
  1886. //                                      exceptions by cut operation.
  1887. // Returns:
  1888. //      TRUE if paste editing operation disabled or handled,
  1889. //      otherwise FALSE.
  1890. // See Also:
  1891. //      XTP_NC_CALENDAR_IS_EVENT_EDIT_OPERATION_DISABLED,
  1892. //      XTP_NC_CALENDAR_BEFORE_EVENT_EDIT_OPERATION, XTPCalendarEditOperation.
  1893. //-----------------------------------------------------------------------
  1894. BOOL OnBeforePasteNotify(CXTPCalendarEvent* pEvent, BOOL bPasteWillChangeExistingEvent);
  1895. //-----------------------------------------------------------------------
  1896. // Summary:
  1897. //      This method is used to customize or disable xtpCalendarEO_InPlaceCreateEvent
  1898. //      editing operation.
  1899. // Parameters:
  1900. //      pcszInitialSubject - A pointer to the string which contains initial
  1901. //                           subject value for new event (generally initial
  1902. //                           char).
  1903. // Returns:
  1904. //      TRUE if In-place create event editing operation disabled or handled,
  1905. //      otherwise FALSE.
  1906. // See Also:
  1907. //      XTP_NC_CALENDAR_IS_EVENT_EDIT_OPERATION_DISABLED,
  1908. //      XTP_NC_CALENDAR_BEFORE_EVENT_EDIT_OPERATION, XTPCalendarEditOperation.
  1909. //-----------------------------------------------------------------------
  1910. BOOL OnInPlaceCreateEvent(LPCTSTR pcszInitialSubject);
  1911. //=======================================================================
  1912. // Summary:
  1913. //      Class CSelectionChangedContext used to avoid multiple sending of
  1914. //      XTP_NC_CALENDAR_SELECTION_CHANGED notification for one selection
  1915. //      changing operation.
  1916. //=======================================================================
  1917. class CSelectionChangedContext
  1918. {
  1919. public:
  1920. //-------------------------------------------------------------------
  1921. // Summary:
  1922. //     Constructs a CSelectionChangedContext object.
  1923. // Parameters:
  1924. //     pView    - Pointer to parent CXTPCalendarView object.
  1925. //     eSelType - Value from enum XTPCalendarSelectionChanged.
  1926. //                Changed selection type.
  1927. // Remarks:
  1928. //     eSelType = xtpCalendarSelectionUnknown only lock sending notifications.
  1929. // See Also: XTP_NC_CALENDAR_SELECTION_CHANGED
  1930. //-------------------------------------------------------------------
  1931. CSelectionChangedContext(CXTPCalendarView* pView, int eSelType = xtpCalendarSelectionUnknown);
  1932. //-------------------------------------------------------------------
  1933. // Summary:
  1934. //      Destroys a CSelectionChangedContext object and send notification(s)
  1935. //      if this is last locker object.
  1936. //-------------------------------------------------------------------
  1937. virtual ~CSelectionChangedContext();
  1938. private:
  1939. CXTPCalendarView* m_pView;
  1940. int m_eSelType;
  1941. };
  1942. protected:
  1943. //=======================================================================
  1944. // Summary: This class defines an internal structure used as a counter on
  1945. //          selection changes, which is needed to redraw a view when
  1946. //          necessary.
  1947. //=======================================================================
  1948. class CSelectionChanged_ContextData
  1949. {
  1950. public:
  1951. //-------------------------------------------------------------------
  1952. // Summary:
  1953. //      Default object constructor.
  1954. //-------------------------------------------------------------------
  1955. CSelectionChanged_ContextData();
  1956. int m_nLockCount;         // Selection change notification global Lock counter.
  1957. int m_nLockCount_Day;     // Days selection change notification Lock counter.
  1958. int m_nLockCount_Event;   // Events selection change notification Lock counter.
  1959. BOOL m_bRequest_Day;      // Days selection change send notification request.
  1960. BOOL m_bRequest_Event;    // Events selection change send notification request.
  1961. };
  1962. CSelectionChanged_ContextData   m_cntSelChanged; // Counter on selection changes,
  1963.                                                  // is needed to redraw a view when necessary.
  1964. //{{AFX_CODEJOCK_PRIVATE
  1965. friend class CSelectionChangedContext;
  1966. friend class CXTPCalendarViewSelection;
  1967. //}}AFX_CODEJOCK_PRIVATE
  1968. protected:
  1969. CUndoBuffer m_UndoBuffer;       // Undo buffer object.
  1970. int         m_eUndoMode;        // Undo mode, see XTPCalendarUndoMode.
  1971. BOOL        m_bResetUndoBuffer; // Clean undo buffer before add next undo action.
  1972. CUndoBuffer m_PrevUndoBuffer;   // Undo buffer data after last undo buffer clean.
  1973. private:
  1974. //{{AFX_CODEJOCK_PRIVATE
  1975. BOOL _EditOperationNotify(XTP_NOTIFY_CODE ncEvent, XTPCalendarEditOperation eOperation,
  1976.   CXTPCalendarViewEvent* pEventView, CXTPCalendarViewEvents* pEventViews = NULL);
  1977. XTPCalendarDraggingMode _GetDraggingMode(XTP_CALENDAR_HITTESTINFO* pHitTest) const;
  1978. XTPCalendarEditOperation    _DragMod2Operation(int eDragMode);
  1979. virtual CXTPCalendarData* _GetDataProviderBySelection(UINT* puScheduleID = NULL);
  1980. virtual CXTPCalendarData* _GetDataProviderByConnStr(LPCTSTR pcszConnStr, BOOL bCompareNoCase = TRUE);
  1981. virtual BOOL _IsScheduleVisible(CXTPCalendarData* pDataProvider, UINT uScheduleID);
  1982. //}}AFX_CODEJOCK_PRIVATE
  1983. public:
  1984. //{{AFX_CODEJOCK_PRIVATE
  1985. struct XTP_VIEW_LAYOUT
  1986. {
  1987. int m_nRowHeight;                // One row height in pixels.
  1988. };
  1989. //}}AFX_CODEJOCK_PRIVATE
  1990. protected:
  1991. //{{AFX_CODEJOCK_PRIVATE
  1992. virtual XTP_VIEW_LAYOUT& GetLayout_();
  1993. virtual BOOL IsUseCellAlignedDraggingInTimeArea();
  1994. //}}AFX_CODEJOCK_PRIVATE
  1995. protected:
  1996. XTP_VIEW_LAYOUT m_Layout; // Layout data.
  1997. //===========================================================================
  1998. // Remarks:
  1999. //     This helper struct is used to group information which is
  2000. //     necessary to format Start/End events times.
  2001. // See Also: FormatEventTime, _CalculateEventTimeFormat.
  2002. //===========================================================================
  2003. struct SEventTimeFormatInfo
  2004. {
  2005. CString strFormat;  // Time format string.
  2006. CString strAM;      // AM symbol.
  2007. CString strPM;      // PM symbol.
  2008. BOOL b24_HFormat;   // Is 24 hours time format.
  2009. //-----------------------------------------------------------------------
  2010. // Summary:
  2011. //     Default object constructor.
  2012. //-----------------------------------------------------------------------
  2013. SEventTimeFormatInfo() {b24_HFormat = FALSE;}
  2014. };
  2015. SEventTimeFormatInfo m_EventTimeFormat; // Information used to format events times.
  2016. CString m_strHeaderFormat;              // Day header active date format string.
  2017. CString m_strDayHeaderFormatLong;       // Day header Long date format custom string.
  2018. CString m_strDayHeaderFormatMiddle;     // Day header Middle date format custom string.
  2019. CString m_strDayHeaderFormatShort;      // Day header Short date format custom string.
  2020. CString m_strDayHeaderFormatShortest;   // Day header Shortest date format custom string.
  2021. CString m_strDayHeaderFormatDefaultLong;        // Day header Long date format default string.
  2022. CString m_strDayHeaderFormatDefaultMiddle;      // Day header Middle date format default string.
  2023. CString m_strDayHeaderFormatDefaultShort;       // Day header Short date format default string.
  2024. CString m_strDayHeaderFormatDefaultShortest;    // Day header Shortest date format default string.
  2025. CRect m_rcView;                  // Client rect.
  2026. CRect m_rcTooltip;               // Last shown tooltip rect (while GetTooltipRect returns calculated
  2027.                                  // currently required tooltip rect)
  2028. protected:
  2029. CXTPCalendarEventPtr    m_ptrDraggingEventOrig; // Event object before start event editing.
  2030. CXTPCalendarEventPtr    m_ptrDraggingEventNew;  // Editing event object.
  2031. COleDateTimeSpan        m_spDraggingStartOffset;// Start dragging operation offset from the beginning of the event.
  2032. CPoint                  m_ptStartDragging;      // Request to start dragging operation from this point.
  2033. XTPCalendarDraggingMode m_eDraggingMode;        // Editing event mode.
  2034. BOOL m_bStartedClickInside;                     // Is OnLButtonDown was inside view rect.
  2035. CXTPCalendarViewEventPtr m_ptrEditingViewEvent; // Currently editing subject event view or event view requested to edit subject by timeout.
  2036. UINT m_nTimerID_StartEditSubject;   // Timer ID of edit event subject request.
  2037. UINT m_nTimerID_ShowToolTip;        // Timer ID of start show tooltip request.
  2038. CXTPCalendarControl* m_pControl; // Pointer to the owner control object.
  2039. CXTPCalendarViewEvents* m_pSelectedEvents;  //Selected Events;
  2040. XTP_CALENDAR_HITTESTINFO  m_LastHitInfo;    // Last HitInfo data. It is used in CXTPCalendarView::OnMouseMove() for processing selecting, dragging and other operations.
  2041. UINT m_nKeyStateTimerID;                // Timer ID to check Keys state (like Control).
  2042. XTP_CALENDAR_VIEWSELECTION m_selectedBlock; // Current selection.
  2043. BOOL m_bScrollV_Disabled;               // Is vertical scrolling disabled for a view.
  2044. BOOL m_bScrollH_Disabled;               // Is horizontal scrolling disabled for a view.
  2045. CXTPCalendarResources*  m_pResources; // Resources array
  2046. };
  2047. //===========================================================================
  2048. // Summary:
  2049. //     This template class represents a view portion of the Calendar control.
  2050. // Remarks:
  2051. //     It represents a specific view of the Control's associated events
  2052. //     data and provides basic functionality on this data using user
  2053. //     input through the keyboard and the mouse.
  2054. //     It is used as a part of the calendar control framework to build
  2055. //     <b><i>View</i></b> layer of <b>View->DayView->ViewEvent</b>
  2056. //     typed objects hierarchy.
  2057. //     These are the template parameters:
  2058. //     _TViewDay   - Type of View Day objects stored in View.
  2059. //     _TViewEvent - Type of View Event objects stored in View Day.
  2060. //     _THitTest   - Type of HitTest struct, used as parameter in the
  2061. //                   member functions.
  2062. //
  2063. //          You must provide all of the above parameters.
  2064. //
  2065. //          These are the predefined view implementations available
  2066. //          for the Calendar control:
  2067. //
  2068. //
  2069. //          * Day and work week views - Using the CXTPCalendarDayView class.
  2070. //          * Week view               - Using the CXTPCalendarWeekView class.
  2071. //          * Month view              - Using the CXTPCalendarMonthView class.
  2072. //
  2073. //
  2074. //          Furthermore, any type of user defined view may also be implemented as
  2075. //          a descendant of the CXTPCalendarView class.
  2076. //
  2077. //          A typical Calendar View model consists of a collection of
  2078. //          corresponding ViewDay's, which realizes the contents on a square
  2079. //          of one day. ViewDay in turn contains a collection of ViewEvent's
  2080. //          for the particular day, each of them represents a view of an
  2081. //          CXTPCalendarEvent object.
  2082. //
  2083. // See Also: CXTPCalendarDayView, CXTPCalendarWeekView, CXTPCalendarMonthView,
  2084. //          CXTPCalendarViewDay, CXTPCalendarViewEvent
  2085. //===========================================================================
  2086. template<class _TViewDay, class _THitTest >
  2087. class CXTPCalendarViewT : public CXTPCalendarView
  2088. {
  2089. public:
  2090. //-----------------------------------------------------------------------
  2091. // Summary:
  2092. //     Default object constructor.
  2093. // Parameters:
  2094. //     pCalendarControl - A pointer to a CXTPCalendarControlT object.
  2095. //     nViewType        - An XTPCalendarViewType object that contains the
  2096. //                        view type identifier.
  2097. // See Also: XTPCalendarViewType, ~CXTPCalendarEventT()
  2098. //-----------------------------------------------------------------------
  2099. CXTPCalendarViewT (CXTPCalendarControl* pCalendarControl, XTPCalendarViewType nViewType) :
  2100. CXTPCalendarView(pCalendarControl)
  2101. {
  2102. m_nViewType = nViewType;
  2103. }
  2104. //-----------------------------------------------------------------------
  2105. // Summary:
  2106. //     Default class destructor.
  2107. // Remarks:
  2108. //     Handles member item deallocation.
  2109. //-----------------------------------------------------------------------
  2110. virtual ~CXTPCalendarViewT() {
  2111. };
  2112. //-----------------------------------------------------------------------
  2113. // Summary:
  2114. //     Call this member function to obtain the view type flag.
  2115. // Returns:
  2116. //     An XTPCalendarViewType object that contains the view type flag.
  2117. // See Also: XTPCalendarViewType
  2118. //-----------------------------------------------------------------------
  2119. virtual XTPCalendarViewType GetViewType() {
  2120. return m_nViewType;
  2121. }
  2122. //-----------------------------------------------------------------------
  2123. // Summary:
  2124. //     Call this member function to obtain the number of day views in
  2125. //     the view collection.
  2126. // Returns:
  2127. //     An int that contains the number of day views.
  2128. //-----------------------------------------------------------------------
  2129. virtual int GetViewDayCount() {
  2130. return m_arDays.GetCount();
  2131. }
  2132. //-----------------------------------------------------------------------
  2133. // Summary:
  2134. //     Call this member function to get the CXTPCalendarViewDay object
  2135. //     by day's index.
  2136. // Parameters:
  2137. //     nIndex  - An int that contains the day view index in the view collection.
  2138. // Returns:
  2139. //     A pointer to a CXTPCalendarViewDay object.
  2140. // Remarks:
  2141. //     Index numbers start with 0 and cannot be negative.
  2142. // See Also: GetViewDayCount()
  2143. //-----------------------------------------------------------------------
  2144. virtual CXTPCalendarViewDay* GetViewDay_(int nIndex)
  2145. {
  2146. ASSERT(this);
  2147. _TViewDay* pViewDay = this ? GetViewDay(nIndex) : NULL;
  2148. return pViewDay;
  2149. }
  2150. //-----------------------------------------------------------------------
  2151. // Summary:
  2152. //     Call this member function to obtain a _TViewDay object corresponding
  2153. //     with the day's index.
  2154. // Parameters:
  2155. //     nIndex  - An int that contains the day view index in the view collection.
  2156. // Returns:
  2157. //     If the day's index is valid, then the function returns a pointer to a
  2158. //     _TViewDay object that corresponds with the day's index.  Otherwise,
  2159. //     the function returns NULL.
  2160. // Remarks:
  2161. //     Index numbers start with 0 and cannot be negative.
  2162. // See Also: GetViewDayCount()
  2163. //-----------------------------------------------------------------------
  2164. virtual _TViewDay*  GetViewDay(int nIndex)
  2165. {
  2166. ASSERT(this);
  2167. if (!this) {
  2168. return NULL;
  2169. }
  2170. int nCount = m_arDays.GetCount();
  2171. ASSERT(nIndex >= 0 && nIndex < nCount);
  2172. return (nIndex >= 0 && nIndex < nCount) ? m_arDays.GetAt(nIndex) : NULL;
  2173. }
  2174. //-----------------------------------------------------------------------
  2175. // Summary:
  2176. //     This member function is used to determine which view item,
  2177. //     if any, is at the specified position index, and returns
  2178. //     additional info in an XTP_CALENDAR_HITTESTINFO struct.
  2179. // Parameters:
  2180. //     pt          - A CPoint object that contains the coordinates of
  2181. //                   the point to test.
  2182. //     pHitTest    - A pointer to an XTP_CALENDAR_HITTESTINFO struct that
  2183. //                   contains information about the point to test.
  2184. // Returns:
  2185. //     A BOOL. TRUE if the item is found. FALSE otherwise.
  2186. // See Also: XTP_CALENDAR_HITTESTINFO
  2187. //-----------------------------------------------------------------------
  2188. virtual BOOL HitTest(CPoint pt, XTP_CALENDAR_HITTESTINFO* pHitTest)
  2189. {
  2190. ASSERT(pHitTest);
  2191. _THitTest hitInfo;
  2192. BOOL bRes = HitTestEx(pt, &hitInfo);
  2193. if (bRes && pHitTest) {
  2194. *pHitTest = (XTP_CALENDAR_HITTESTINFO)hitInfo;
  2195. }
  2196. return bRes;
  2197. }
  2198. //-----------------------------------------------------------------------
  2199. // Summary:
  2200. //     This member function is used to determine which view item,
  2201. //     if any, is at a specified position index, and returns additional
  2202. //     info in a _THitTest object.
  2203. // Parameters:
  2204. //     pt       - A CPoint object that contains the coordinates of the
  2205. //                point to test.
  2206. //     pHitTest - A pointer to the template parameter _THitTest
  2207. //                object that contains information on the point
  2208. //                to test.
  2209. // Returns:
  2210. //     TRUE if item found; FALSE otherwise.
  2211. //-----------------------------------------------------------------------
  2212. virtual BOOL HitTestEx(CPoint pt, _THitTest* pHitTest)
  2213. {
  2214. if (!pHitTest) {
  2215. ASSERT(FALSE);
  2216. return FALSE;
  2217. }
  2218. int nCount = GetViewDayCount();
  2219. for (int i = 0; i < nCount; i++)
  2220. {
  2221. _TViewDay* pViewDay = GetViewDay(i);
  2222. ASSERT(pViewDay);
  2223. if (pViewDay && pViewDay->HitTestEx(pt, pHitTest))
  2224. {
  2225. ASSERT(!pHitTest->pViewDay || pHitTest->pViewDay == pViewDay);
  2226. pHitTest->nDay = i;
  2227. pHitTest->pViewDay = pViewDay;
  2228. return TRUE;
  2229. }
  2230. }
  2231. return FALSE;
  2232. }
  2233. protected:
  2234. CXTPCalendarPtrCollectionT< _TViewDay > m_arDays; // Stores the view day collection.
  2235. private:
  2236. XTPCalendarViewType m_nViewType;
  2237. };
  2238. AFX_INLINE CXTPCalendarControl* CXTPCalendarView::GetCalendarControl() {
  2239. ASSERT(this && m_pControl);
  2240. return this ? m_pControl : NULL;
  2241. }
  2242. AFX_INLINE CRect CXTPCalendarView::GetViewRect() {
  2243. return m_rcView;
  2244. }
  2245. AFX_INLINE XTPCalendarDraggingMode CXTPCalendarView::GetDraggingMode() const {
  2246. return m_eDraggingMode;
  2247. }
  2248. AFX_INLINE int CXTPCalendarView::GetRowHeight() const {
  2249. return m_Layout.m_nRowHeight;
  2250. }
  2251. AFX_INLINE UINT CXTPCalendarView::GetStartEditSubjectTimeOut() const {
  2252. return XTP_CALENDAR_START_EDIT_SUBJECT_TIMEOUT_MS;
  2253. }
  2254. AFX_INLINE BOOL CXTPCalendarView::IsEditingSubject() const {
  2255. return m_ptrEditingViewEvent != NULL;
  2256. }
  2257. AFX_INLINE void CXTPCalendarView::EmptyUndoBuffer() {
  2258. m_UndoBuffer.RemoveAll();
  2259. m_eUndoMode = xtpCalendarUndoModeUnknown;
  2260. }
  2261. AFX_INLINE CString CXTPCalendarView::GetDayHeaderFormat() {
  2262. return m_strHeaderFormat;
  2263. }
  2264. AFX_INLINE BOOL CXTPCalendarView::_IsDragModeCopyMove(int eDragMode) const {
  2265. return eDragMode == xtpCalendaDragModeCopy || eDragMode == xtpCalendaDragModeMove;
  2266. }
  2267. AFX_INLINE XTPCalendarEditOperation CXTPCalendarView::_DragMod2Operation(int eDragMode)
  2268. {
  2269. return (XTPCalendarEditOperation)eDragMode;
  2270. }
  2271. AFX_INLINE void CXTPCalendarView::EnableVScroll(BOOL bEnable) {
  2272. m_bScrollV_Disabled = !bEnable;
  2273. }
  2274. AFX_INLINE void CXTPCalendarView::EnableHScroll(BOOL bEnable) {
  2275. m_bScrollH_Disabled = !bEnable;
  2276. }
  2277. AFX_INLINE BOOL CXTPCalendarView::IsHScrollEnabled() {
  2278. return !m_bScrollH_Disabled;
  2279. }
  2280. AFX_INLINE BOOL CXTPCalendarView::IsVScrollEnabled() {
  2281. return !m_bScrollV_Disabled;
  2282. }
  2283. AFX_INLINE void CXTPCalendarView::SetDayHeaderFormatLong(LPCTSTR pcszCustomFormat) {
  2284. m_strDayHeaderFormatLong = pcszCustomFormat;
  2285. }
  2286. AFX_INLINE void CXTPCalendarView::SetDayHeaderFormatMiddle(LPCTSTR pcszCustomFormat) {
  2287. m_strDayHeaderFormatMiddle = pcszCustomFormat;
  2288. }
  2289. AFX_INLINE void CXTPCalendarView::SetDayHeaderFormatShort(LPCTSTR pcszCustomFormat) {
  2290. m_strDayHeaderFormatShort = pcszCustomFormat;
  2291. }
  2292. AFX_INLINE void CXTPCalendarView::SetDayHeaderFormatShortest(LPCTSTR pcszCustomFormat) {
  2293. m_strDayHeaderFormatShortest = pcszCustomFormat;
  2294. }
  2295. AFX_INLINE int CXTPCalendarView::GetChildHandlersCount() {
  2296. return GetViewDayCount();
  2297. }
  2298. AFX_INLINE CXTPCalendarView::XTP_VIEW_LAYOUT& CXTPCalendarView::GetLayout_() {
  2299. return m_Layout;
  2300. }
  2301. AFX_INLINE BOOL CXTPCalendarView::IsUseCellAlignedDraggingInTimeArea() {
  2302. return FALSE;
  2303. }
  2304. AFX_INLINE UINT CXTPCalendarView::GetShowToolTipTimeOut() const {
  2305. return XTP_CALENDAR_SHOW_BUTTON_TIMEOUT_MS;
  2306. }
  2307. /////////////////////////////////////////////////////////////////////////////
  2308. #endif // !defined(_XTPCALENDARVIEW_H__)