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

对话框与窗口

开发平台:

Visual C++

  1. // XTPCalendarController.h: interface for the CXTPCalendarController 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(_XTPCALENDARCONTROLLER_H__)
  22. #define _XTPCALENDARCONTROLLER_H__
  23. #if _MSC_VER > 1000
  24. #pragma once
  25. #endif // _MSC_VER > 1000
  26. //}}AFX_CODEJOCK_PRIVATE
  27. class CXTPDatePickerControl;
  28. class CXTPCalendarControl;
  29. class CXTPCalendarResourcesNf;
  30. struct XTP_DAYITEM_METRICS;
  31. //===========================================================================
  32. // Summary:
  33. //     Class CXTPCalendarController provides a connection between a
  34. //     CXTPCalendarControl object and a CXTPDatePickerControl object.
  35. // Remarks:
  36. //     A CXTPCalendarController object provides a synchronization
  37. //     facilities between CXTPCalendarControl and CXTPDatePickerControl
  38. //     controls. It works as a "glue" between both controls and
  39. //     reflects changes on one of them to the corresponded changes on the
  40. //     second one.
  41. // See Also: CXTPCalendarControl, CXTPDatePickerControl
  42. //===========================================================================
  43. class _XTP_EXT_CLASS CXTPCalendarController : public CXTPCmdTarget
  44. {
  45. //{{AFX_CODEJOCK_PRIVATE
  46. DECLARE_DYNCREATE(CXTPCalendarController)
  47. //}}AFX_CODEJOCK_PRIVATE
  48. public:
  49. //-----------------------------------------------------------------------
  50. // Summary:
  51. //     Constructs a CXTPCalendarController object.
  52. // Remarks:
  53. //     Construction of the CXTPCalendarController object defines
  54. //     a point of synchronization between CXTPCalendarControl and
  55. //     CXTPDatePickerControl controls. It can be constructed both
  56. //     in the same scope with controls which would provide us with
  57. //     full live objects time synchronization, and in the local scope
  58. //     for short time synchronization.
  59. //
  60. // Example:
  61. // <code>
  62. // Declare a local CXTPCalendarController object.
  63. // CXTPCalendarController myCalendarController;
  64. //
  65. // // Assigns CXTPCalendarControl instance to the object.
  66. // myCalendarController.SetCalendar(&m_wndCalendar);
  67. //
  68. // // Assigns CXTPDatePickerControl instance to the object.
  69. // myCalendarController.SetDatePicker(&m_wndDatePicker);
  70. // </code>
  71. // See Also: SetCalendar, SetDatePicker
  72. //-----------------------------------------------------------------------
  73. CXTPCalendarController();
  74. //-----------------------------------------------------------------------
  75. // Summary:
  76. //     Destroys a CXTPCalendarController object, handles cleanup and
  77. //     de-allocation.
  78. //-----------------------------------------------------------------------
  79. virtual ~CXTPCalendarController();
  80. // Attributes
  81. public:
  82. //-----------------------------------------------------------------------
  83. // Summary:
  84. //     This member function associates a custom calendar control
  85. //     with the controller.
  86. // Parameters:
  87. //     pCalendarCtrl - A pointer to the user's CXTPCalendarControl object.
  88. // Remarks:
  89. //     Call this member function to associate your CXTPCalendarControl
  90. //     object with this calendar controller.
  91. // See Also: CXTPCalendarControl overview, SetDatePicker
  92. //-----------------------------------------------------------------------
  93. virtual void SetCalendar(CXTPCalendarControl* pCalendarCtrl);
  94. //-----------------------------------------------------------------------
  95. // Summary:
  96. //     This member function associates a custom date picker control
  97. //     with the controller.
  98. // Parameters:
  99. //     pDatePickerCtrl - Pointer to the user's CXTPDatePickerControl object.
  100. // Remarks:
  101. //     Call this member function to associate your CXTPDatePickerControl
  102. //     object with this calendar controller.
  103. // See Also: CXTPDatePickerControl overview, SetCalendar
  104. //-----------------------------------------------------------------------
  105. virtual void SetDatePicker(CXTPDatePickerControl* pDatePickerCtrl);
  106. //-----------------------------------------------------------------------
  107. // Summary:
  108. //     Get a calendar control object associated with the controller.
  109. // Remarks:
  110. //     A pointer to calendar control object associated with the
  111. //     controller or NULL.
  112. // See Also: SetCalendar, SetDatePicker, GetDatePicker
  113. //-----------------------------------------------------------------------
  114. virtual CXTPCalendarControl* GetCalendar() const;
  115. //-----------------------------------------------------------------------
  116. // Summary:
  117. //     Get a date picker control object associated with the controller.
  118. // Remarks:
  119. //     A pointer to date picker control object associated with the
  120. //     controller or NULL.
  121. // See Also: SetCalendar, SetDatePicker, GetCalendar
  122. //-----------------------------------------------------------------------
  123. virtual CXTPDatePickerControl* GetDatePicker() const;
  124. public:
  125. //-----------------------------------------------------------------------
  126. // Summary:
  127. //     This member function used to determine whether Bold font is used
  128. //     for days in DatePicker which have corresponding Calendar events.
  129. // Returns:
  130. //     TRUE when Bold font is used, FALSE otherwise.
  131. // See Also:
  132. //     SetBoldDaysWithEvents
  133. //-----------------------------------------------------------------------
  134. virtual BOOL IsBoldDaysWithEvents() const;
  135. //-----------------------------------------------------------------------
  136. // Summary:
  137. //     This member function enables or disables Bold font usage for
  138. //     displaying days in DatePicker which have corresponding Calendar
  139. //     events.
  140. // Parameters:
  141. //     bBold - TRUE to enable; FALSE to disable.
  142. // Remarks:
  143. //     Disabling this parameter could be useful in cases when determining
  144. //     whether a particular day has events takes a long time.
  145. // See Also:
  146. //     IsBoldDaysWithEvents
  147. //-----------------------------------------------------------------------
  148. virtual void SetBoldDaysWithEvents(BOOL bBold);
  149. //-----------------------------------------------------------------------
  150. // Summary:
  151. //     Is BoldDaysOnIdle option enabled or disabled.
  152. // Returns:
  153. //     TRUE if enabled retrieve days state (bold or regular)
  154. //     on idle (by timer) for the associated DatePicker.
  155. // See Also:
  156. //     SetBoldDaysOnIdle, GetBoldDaysPerIdleStep, GetBoldDaysIdleStepTime_ms,
  157. //     SetBoldDaysPerIdleStep, SetBoldDaysIdleStepTime_ms.
  158. //-----------------------------------------------------------------------
  159. virtual BOOL IsBoldDaysOnIdle() const;
  160. //-----------------------------------------------------------------------
  161. // Summary:
  162. //     Enable or Disable retrieve days state (bold or regular)
  163. //     on idle (by timer) for the associated DatePicker.
  164. // Parameters:
  165. //     bBoldDaysOnIdle - Set as TRUE to Enable or FALSE to Disable retrieve
  166. //                       days state on idle.
  167. // See Also:
  168. //     IsBoldDaysOnIdle, GetBoldDaysPerIdleStep, GetBoldDaysIdleStepTime_ms,
  169. //     SetBoldDaysPerIdleStep, SetBoldDaysIdleStepTime_ms.
  170. //-----------------------------------------------------------------------
  171. virtual void SetBoldDaysOnIdle(BOOL bBoldDaysOnIdle);
  172. //-----------------------------------------------------------------------
  173. // Summary:
  174. //     Returns Amount of days for the associated DatePicker to update state
  175. //     in one idle step.
  176. // Returns:
  177. //     Amount of days for the associated DatePicker to update state in one
  178. //     idle step.
  179. // See Also:
  180. //     SetBoldDaysOnIdle, IsBoldDaysOnIdle, GetBoldDaysIdleStepTime_ms,
  181. //     SetBoldDaysPerIdleStep, SetBoldDaysIdleStepTime_ms.
  182. //-----------------------------------------------------------------------
  183. virtual long GetBoldDaysPerIdleStep() const;
  184. //-----------------------------------------------------------------------
  185. // Summary:
  186. //     Returns time between idle steps to update days state (bold or regular)
  187. //     for the associated DatePicker.
  188. // Returns:
  189. //     Time between idle steps in milliseconds.
  190. // See Also:
  191. //     SetBoldDaysOnIdle, IsBoldDaysOnIdle, GetBoldDaysPerIdleStep,
  192. //     SetBoldDaysPerIdleStep, SetBoldDaysIdleStepTime_ms.
  193. //-----------------------------------------------------------------------
  194. virtual long GetBoldDaysIdleStepTime_ms() const;
  195. //-----------------------------------------------------------------------
  196. // Summary:
  197. //     Set amount of days for the associated DatePicker to update state
  198. //     in one idle step.
  199. // Parameters:
  200. //     nDaysPerStep - An amount of days to update in one step.
  201. // See Also:
  202. //     SetBoldDaysOnIdle, IsBoldDaysOnIdle, GetBoldDaysIdleStepTime_ms,
  203. //     GetBoldDaysPerIdleStep, SetBoldDaysIdleStepTime_ms.
  204. //-----------------------------------------------------------------------
  205. virtual void SetBoldDaysPerIdleStep(long nDaysPerStep);
  206. //-----------------------------------------------------------------------
  207. // Summary:
  208. //     Set time (in milliseconds) between idle steps to update days state
  209. //     (bold or regular) for the associated DatePicker.
  210. // Parameters:
  211. //     nStepTime_ms - An idle step in milliseconds.
  212. // See Also:
  213. //     SetBoldDaysOnIdle, IsBoldDaysOnIdle, GetBoldDaysPerIdleStep,
  214. //     SetBoldDaysPerIdleStep, GetBoldDaysIdleStepTime_ms.
  215. //-----------------------------------------------------------------------
  216. virtual void SetBoldDaysIdleStepTime_ms(long nStepTime_ms);
  217. // Implementation
  218. protected:
  219. //{{AFX_CODEJOCK_PRIVATE
  220. DECLARE_XTP_SINK(CXTPCalendarController, m_Sink)
  221. //}}AFX_CODEJOCK_PRIVATE
  222. //-----------------------------------------------------------------------
  223. // Summary:
  224. //     This member function subscribes itself for all necessary notifications.
  225. // Remarks:
  226. //     This member function is called when controller object wants to
  227. //     reinitialize its event subscriptions from associated controls.
  228. // See Also: CXTPCalendarController overview
  229. //-----------------------------------------------------------------------
  230. virtual void AdviseToNotifications();
  231. //-----------------------------------------------------------------------
  232. // Summary:
  233. //      This member function get first day of week from the calendar control
  234. //      and set the same value to the date picker control.
  235. // See Also: OnEvent_CalendarOptionsChanged(), CXTPCalendarController overview
  236. //-----------------------------------------------------------------------
  237. virtual void SetFirstDayOfWeekToDatePicker();
  238. //-----------------------------------------------------------------------
  239. // Summary:
  240. //      This member function used to determine is Compressed Weekend Day -
  241. //      Sunday, used as first day of week in the active calendar view.
  242. // Remarks:
  243. //      It means that first day of week is automatically shifted from
  244. //      Sunday to Monday because Sunday is compressed with Saturday and
  245. //      it cannot be shown as first day of week in the active calendar view.
  246. // See Also: CXTPCalendarWeekView, CXTPCalendarMonthView,
  247. //           CXTPCalendarControl::MonthView_IsCompressWeekendDays(),
  248. //           CXTPCalendarControl::GetFirstDayOfWeek()
  249. //-----------------------------------------------------------------------
  250. virtual BOOL IsFirstDayOfWeekShifted_FromSun2Mon();
  251. //-----------------------------------------------------------------------
  252. // Summary:
  253. //     This member function catches all the events from the associated
  254. //     calendar control and its view.
  255. // Parameters:
  256. //     Event - Events code
  257. //     wParam - First user's parameter.
  258. //     lParam - Second user's parameter.
  259. // Remarks:
  260. //     This member function is called when an event is fired from the
  261. //     associated CXTPCalendarControl object or from its view.
  262. // See Also: AdviseToNotifications
  263. //-----------------------------------------------------------------------
  264. virtual void OnEvent_CalendarView(XTP_NOTIFY_CODE Event, WPARAM wParam, LPARAM lParam);
  265. //-----------------------------------------------------------------------
  266. // Summary:
  267. //     This member function catches all the events when calendar control
  268. //     options were changed.
  269. // Parameters:
  270. //     Event - Events code
  271. //     wParam - First user's parameter.
  272. //     lParam - Second user's parameter.
  273. // Remarks:
  274. //     This member function is called when an event is fired when calendar
  275. //     control options where changed..
  276. // See Also: AdviseToNotifications
  277. //-----------------------------------------------------------------------
  278. virtual void OnEvent_CalendarOptionsChanged(XTP_NOTIFY_CODE Event, WPARAM wParam, LPARAM lParam);
  279. //-----------------------------------------------------------------------
  280. // Summary:
  281. //     This member function catches all the events when resource
  282. //     configuration was changed in the CalendarControl.
  283. // Parameters:
  284. //     Event - Events code
  285. //     wParam - First user's parameter.
  286. //     lParam - Second user's parameter.
  287. // See Also: AdviseToNotifications
  288. //-----------------------------------------------------------------------
  289. virtual void OnEvent_CalendarResourcesChanged(XTP_NOTIFY_CODE Event, WPARAM wParam, LPARAM lParam);
  290. //-----------------------------------------------------------------------
  291. // Summary:
  292. //     This member function catches the XTP_NC_CALENDAR_THEME_CHANGED event.
  293. // Parameters:
  294. //     Event - Events code
  295. //     wParam - First user's parameter.
  296. //     lParam - Second user's parameter.
  297. // See Also: AdviseToNotifications
  298. //-----------------------------------------------------------------------
  299. virtual void OnEvent_CalendarThemeChanged(XTP_NOTIFY_CODE Event, WPARAM wParam, LPARAM lParam);
  300. //-----------------------------------------------------------------------
  301. // Summary:
  302. //     This member function catches all the events from the associated
  303. //     date picker control.
  304. // Parameters:
  305. //     Event - Events code.
  306. //     wParam - First user's parameter.
  307. //     lParam - Second user's parameter.
  308. // Remarks:
  309. //     This member function is called when an event is fired from the
  310. //     associated CXTPDatePickerControl object.
  311. // See Also: AdviseToNotifications
  312. //-----------------------------------------------------------------------
  313. virtual void OnEvent_DatePicker(XTP_NOTIFY_CODE Event, WPARAM wParam, LPARAM lParam);
  314. virtual void OnEvent_DtPickGetItemMetrics(XTP_NOTIFY_CODE Event, WPARAM wParam, LPARAM lParam); //<COMBINE OnEvent_DatePicker>
  315. protected:
  316. CXTPCalendarControl* m_pCalendarCtrl;       // Pointer to the associated Calendar control.
  317. CXTPDatePickerControl* m_pDatePickerCtrl;   // Pointer to the associated DatePicker control.
  318. BOOL m_bBoldDaysWithEvents;           // TRUE to use Bold for days with events in the associated DatePicker.
  319. BOOL m_bUseActiveViewResoucesForBold; // If true - active view resources are used, if FALSE - calendar control Resources are used.
  320. BOOL m_bBoldDaysOnIdle;          // TRUE to retrieve days state (bold or regular) on idle (by timer) for the associated DatePicker.
  321. long m_nBoldDaysPerIdleStep;     // Amount of days for the associated DatePicker to update state in one idle step.
  322. long m_nBoldDaysIdleStepTime_ms; // Time between idle steps to update days state (bold or regular) for the associated DatePicker.
  323. //-----------------------------------------------------------------------
  324. // Summary:
  325. //     This member function used to determine has the specified day events or not.
  326. // Parameters:
  327. //     dtDay - A COleDateTime object that contains the day's date.
  328. // Returns:
  329. //     TRUE if the specified day has events, FALSE otherwise.
  330. //-----------------------------------------------------------------------
  331. BOOL _HasEvents(COleDateTime dtDay);
  332. private:
  333. void _AdviseToDataChanged();
  334. void _UnadviseFromDataChanged();
  335. virtual void OnEvent_CalendarDataChanged(XTP_NOTIFY_CODE Event, WPARAM wParam, LPARAM lParam);
  336. BOOL m_bAdjustingView;
  337. CXTPCalendarResourcesNf* m_pResourcesNf;
  338. int m_eLastActiveView;
  339. XTP_CONNECTION_ID m_cnidEventAdded;
  340. XTP_CONNECTION_ID m_cnidEventChanged;
  341. XTP_CONNECTION_ID m_cnidEventDeleted;
  342. //
  343. class CXTPDayInfoCache
  344. {
  345. struct XTPDayInfo
  346. {
  347. BOOL bHasEvents;
  348. DATE dtLastAccessTime;
  349. };
  350. CMap<long, long, XTPDayInfo, XTPDayInfo&>   m_mapDaysInfo;
  351. CMap<long, long, UINT, UINT>                m_mapDaysToRefresh;
  352. CXTPCalendarController* m_pOwner;
  353. UINT_PTR                m_uTimerID;
  354. DWORD                   m_dwLastRedrawTime;
  355. DWORD                   m_dwLastSelfClearTime;
  356. DWORD                   m_dwWaitingDataTime;
  357. UINT                    m_uActivePriority;
  358. public:
  359. CXTPDayInfoCache();
  360. virtual ~CXTPDayInfoCache();
  361. BOOL HasEvents(DATE dtDay);
  362. void Init(CXTPCalendarController* pOwner);
  363. void Clear();
  364. void ClearDays(COleDateTime dtDayFrom, COleDateTime dtDayTo);
  365. void RequestToRefreshDays(COleDateTime dtDayFrom, COleDateTime dtDayTo);
  366. UINT UpActivePriority();
  367. protected:
  368. void UpdateDayInfo(DATE dtDay, BOOL bHasEvents);
  369. void KillTimer();
  370. void _RequestToRefreshDays(COleDateTime dtDayFrom, COleDateTime dtDayTo, UINT uPriority = 0);
  371. void OnRefreshDays(int nDaysCountToRefresh = 1);
  372. void OnSelfClearOld();
  373. static VOID CALLBACK OnTimerCallback(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime);
  374. typedef CMap<UINT_PTR, UINT_PTR, CXTPDayInfoCache*, CXTPDayInfoCache*> CXTPMapTimers;
  375. static CXTPMapTimers m_mapTimers;
  376. };
  377. friend class CXTPDayInfoCache;
  378. CXTPDayInfoCache m_DayInfoCache;
  379. };
  380. /////////////////////////////////////////////////////////////////////////////
  381. AFX_INLINE BOOL CXTPCalendarController::IsBoldDaysWithEvents() const {
  382. return m_bBoldDaysWithEvents;
  383. }
  384. AFX_INLINE BOOL CXTPCalendarController::IsBoldDaysOnIdle() const {
  385. return m_bBoldDaysOnIdle;
  386. }
  387. AFX_INLINE void CXTPCalendarController::SetBoldDaysOnIdle(BOOL bBoldDaysOnIdle) {
  388. m_bBoldDaysOnIdle = bBoldDaysOnIdle;
  389. m_DayInfoCache.Clear();
  390. }
  391. AFX_INLINE long CXTPCalendarController::GetBoldDaysPerIdleStep() const {
  392. return m_nBoldDaysPerIdleStep;
  393. }
  394. AFX_INLINE void CXTPCalendarController::SetBoldDaysPerIdleStep(long nDaysPerStep) {
  395. m_nBoldDaysPerIdleStep = nDaysPerStep;
  396. }
  397. AFX_INLINE long CXTPCalendarController::GetBoldDaysIdleStepTime_ms() const {
  398. return m_nBoldDaysIdleStepTime_ms;
  399. }
  400. AFX_INLINE void CXTPCalendarController::SetBoldDaysIdleStepTime_ms(long nStepTime_ms) {
  401. m_nBoldDaysIdleStepTime_ms = nStepTime_ms;
  402. }
  403. #endif // !defined(_XTPCALENDARCONTROLLER_H__)