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

对话框与窗口

开发平台:

Visual C++

  1. // XTPCalendarRemindersManager.h: interface for the
  2. // CXTPCalendarRemindersManager class.
  3. //
  4. // This file is a part of the XTREME CALENDAR MFC class library.
  5. // (c)1998-2008 Codejock Software, All Rights Reserved.
  6. //
  7. // THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
  8. // RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
  9. // CONSENT OF CODEJOCK SOFTWARE.
  10. //
  11. // THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
  12. // IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
  13. // YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
  14. // SINGLE COMPUTER.
  15. //
  16. // CONTACT INFORMATION:
  17. // support@codejock.com
  18. // http://www.codejock.com
  19. //
  20. /////////////////////////////////////////////////////////////////////////////
  21. //{{AFX_CODEJOCK_PRIVATE
  22. #if !defined(_XTP_CALENDAR_REMINDERS_MANAGER_H__)
  23. #define _XTP_CALENDAR_REMINDERS_MANAGER_H__
  24. //}}AFX_CODEJOCK_PRIVATE
  25. #if _MSC_VER > 1000
  26. #pragma once
  27. #endif // _MSC_VER > 1000
  28. //////////////////////
  29. #include "Common/XTPNotifyConnection.h"
  30. #include "XtpCalendarPtrs.h"
  31. #include "XTPCalendarUtils.h"
  32. #include "XTPCalendarPtrCollectionT.h"
  33. class CXTPCalendarData;
  34. class CXTPCalendarResources;
  35. class CXTPCalendarResourcesNf;
  36. class CXTPCalendarRemindersManager;
  37. //===========================================================================
  38. // Summary:
  39. //     This class describes a reminder for calendar event and implements base
  40. //     properties and operations on reminder.
  41. //===========================================================================
  42. class _XTP_EXT_CLASS CXTPCalendarReminder : public CXTPCmdTarget
  43. {
  44. //{{AFX_CODEJOCK_PRIVATE
  45. DECLARE_DYNAMIC(CXTPCalendarReminder)
  46. friend class CXTPCalendarRemindersManager;
  47. friend class CXTPCalendarReminders;
  48. //}}AFX_CODEJOCK_PRIVATE
  49. public:
  50. //-----------------------------------------------------------------------
  51. // Summary:
  52. //     Default object constructor.
  53. // Parameters:
  54. //     pOwnerMan - A pointer to the reminders manager which own this object.
  55. // See Also: ~CXTPCalendarReminder()
  56. //-----------------------------------------------------------------------
  57. CXTPCalendarReminder(CXTPCalendarRemindersManager* pOwnerMan = NULL);
  58. //-----------------------------------------------------------------------
  59. // Summary:
  60. //     Default class destructor.
  61. // Remarks:
  62. //     Handles member items deallocation.
  63. // See Also: CXTPCalendarReminder()
  64. //-----------------------------------------------------------------------
  65. virtual ~CXTPCalendarReminder();
  66. //-----------------------------------------------------------------------
  67. // Summary:
  68. //     Retrieve calendar event for which this reminder is related.
  69. // Returns:
  70. //     A pointer to calendar event object.
  71. //-----------------------------------------------------------------------
  72. virtual CXTPCalendarEventPtr GetEvent();
  73. //-----------------------------------------------------------------------
  74. // Summary:
  75. //     Call this member function to retrieve date and time when reminder
  76. //     is scheduled to be activated.
  77. // Remarks:
  78. //     This value for non snoozed event is:
  79. //          EventStartTime - MinutesBeforeStart.
  80. //     For snoozed event this value is set when Snooze() method is called.
  81. // Returns:
  82. //     Reminder activation date and time.
  83. // See Also: GetMinutesBeforeStart, Snooze, GetEvent.
  84. //-----------------------------------------------------------------------
  85. virtual COleDateTime GetNextReminderTime();
  86. //-----------------------------------------------------------------------
  87. // Summary:
  88. //     Call this member function to determine the number of minutes
  89. //     before the start of an event.
  90. // Returns:
  91. //     An int that contains the number of Minutes before the start of
  92. //     an event.
  93. // See Also: CXTPCalendarEvent::GetReminderMinutesBeforeStart, GetEvent.
  94. //-----------------------------------------------------------------------
  95. virtual int GetMinutesBeforeStart();
  96. //-----------------------------------------------------------------------
  97. // Summary:
  98. //     Call this member function to Snooze active reminder.
  99. // Parameters:
  100. //     nMinutesAfterNow - A value in minutes to activate reminder again.
  101. // Returns:
  102. //     TRUE if operation is successful, FALSE otherwise.
  103. // See Also:
  104. //     Dismiss, GetNextReminderTime, GetEvent,
  105. //     CXTPCalendarRemindersManager::Snooze
  106. //-----------------------------------------------------------------------
  107. virtual BOOL Snooze(int nMinutesAfterNow);
  108. //-----------------------------------------------------------------------
  109. // Summary:
  110. //     Call this member function to Dismiss active reminder.
  111. // Remarks:
  112. //     Reminder flag for corresponding event object is set to FALSE.
  113. // Returns:
  114. //     TRUE if operation is successful, FALSE otherwise.
  115. // See Also:
  116. //     Snooze, GetEvent, CXTPCalendarRemindersManager::Dismiss
  117. //-----------------------------------------------------------------------
  118. virtual BOOL Dismiss();
  119. //-----------------------------------------------------------------------
  120. // Summary:
  121. //     Call this member function to determine are reminders objects have
  122. //     equal IDs (or are they represent the same reminder).
  123. // Parameters:
  124. //     pReminder2 - A pointer to reminder object to compare.
  125. // Returns:
  126. //     TRUE if reminders objects have equal IDs, FALSE otherwise.
  127. //-----------------------------------------------------------------------
  128. virtual BOOL IsEqualID(const CXTPCalendarReminder* pReminder2) const;
  129. protected:
  130. COleDateTime    m_dtNextReminderTime;   // Store reminder activation date and time.
  131. int             m_nMinutesBeforeStart;  // Store minutes before start event to activate reminder.
  132. //-----------------------------------------------------------------------
  133. // Summary:
  134. //     Set calendar event for which this reminder is related.
  135. // Parameters:
  136. //     pEvent - A pointer to calendar event.
  137. // See Also: GetEvent
  138. //-----------------------------------------------------------------------
  139. virtual void SetEvent(CXTPCalendarEvent* pEvent);
  140. //-----------------------------------------------------------------------
  141. // Summary:
  142. //     This enum define the event type: recurrence or non-recurrence.
  143. //-----------------------------------------------------------------------
  144. enum EventType {
  145. evtNormal = 1,      // event type is recurrence.
  146. evtRecurrence = 2,  // event type is non-recurrence.
  147. };
  148. //-----------------------------------------------------------------------
  149. // Summary:
  150. //     This structure contains data members to unambiguously define related
  151. //     recurrence event occurrence.
  152. // See Also: EventType
  153. //-----------------------------------------------------------------------
  154. struct RecurrenceEventInfo
  155. {
  156. DWORD   m_dwMasterEventID;          // Recurrence master event ID.
  157. DATE    m_dtOccurrenceStartTime;    // Recurrence occurrence start time or recurrence exception original start time.
  158. DATE    m_dtOccurrenceEndTime;      // Recurrence occurrence end time or recurrence exception original end time.
  159. };
  160. COleDateTime    m_dtEventStartTime;     // Store related event start time.
  161. CXTPCalendarData* m_pEventDataProvider; // Store related event data provider.
  162. EventType   m_eEventType;               // Define related event type: recurrence or non-recurrence.
  163. //-----------------------------------------------------------------------
  164. // Summary:
  165. //     This union contains data members to unambiguously define related
  166. //     event.
  167. // See Also: RecurrenceEventInfo, m_eEventType
  168. //-----------------------------------------------------------------------
  169. union {
  170. DWORD               m_dwNormalEventID;          // Non-recurrence event ID.
  171. RecurrenceEventInfo m_RecurrenceEventInfo;      // Recurrence event information (instead of ID).
  172. };
  173. private:
  174. CXTPCalendarRemindersManager* m_pOwnerMan;
  175. protected:
  176. };
  177. //===========================================================================
  178. // Summary:
  179. //      This class represents a simple array collection of CXTPCalendarReminder
  180. //      objects.
  181. //===========================================================================
  182. class _XTP_EXT_CLASS CXTPCalendarReminders : public CXTPCalendarPtrCollectionT<CXTPCalendarReminder>
  183. {
  184. public:
  185. //-----------------------------------------------------------------------
  186. // Summary:
  187. //     Finds a specified reminder object in the collection.
  188. // Remarks:
  189. //     CXTPCalendarReminder::IsEqualID method is used to compare reminders.
  190. // Parameters:
  191. //     pReminder - A pointer to reminder object to find.
  192. // Returns:
  193. //     Index of the equal reminder object in the collection or -1 if such
  194. //     object is not present.
  195. // See Also: Find@CXTPCalendarEvent
  196. //-----------------------------------------------------------------------
  197. virtual int Find(const CXTPCalendarReminder* pReminder) const;
  198. //-----------------------------------------------------------------------
  199. // Summary:
  200. //     Finds a reminder object in the collection which is related to
  201. //     the event specified.
  202. // Parameters:
  203. //     pEvent - A pointer to event.
  204. // Returns:
  205. //     Index of the related reminder object in the collection or
  206. //     -1 if such object is not present.
  207. // See Also: Find@CXTPCalendarReminder
  208. //-----------------------------------------------------------------------
  209. virtual int Find(CXTPCalendarEvent* pEvent) const;
  210. //-----------------------------------------------------------------------
  211. // Summary:
  212. //     Finds a reminder object in the collection which is related to
  213. //     the specified event ID.
  214. // Parameters:
  215. //     dwEventID - Event ID of normal event or Master event.
  216. //    pDP    - A pointer to event data provider.
  217. // Returns:
  218. //     Index of the related reminder object in the collection or
  219. //     -1 if such object is not present.
  220. // See Also: Find@CXTPCalendarReminder, Find@CXTPCalendarEvent
  221. //-----------------------------------------------------------------------
  222. virtual int Find(DWORD dwEventID, CXTPCalendarData* pDP = NULL) const;
  223. //-----------------------------------------------------------------------
  224. // Summary:
  225. //     Try to find and remove reminder object which is related to
  226. //     the event specified.
  227. // Parameters:
  228. //     pEvent - A pointer to event.
  229. // Returns:
  230. //     TRUE if the related reminder object is removed from the collection,
  231. //     FALSE otherwise.
  232. //-----------------------------------------------------------------------
  233. virtual BOOL RemoveDataForEvent(CXTPCalendarEvent* pEvent);
  234. //-----------------------------------------------------------------------
  235. // Summary:
  236. //     Sort reminders by the event start time field.
  237. //-----------------------------------------------------------------------
  238. virtual void Sort();
  239. protected:
  240. //-----------------------------------------------------------------------
  241. // Summary:
  242. //     Try to find and remove reminder(s) object(s) which are related to
  243. //     the recurrence master event specified.
  244. // Parameters:
  245. //     pEvent - A pointer to master event.
  246. // Returns:
  247. //     TRUE if the related reminder(s) object(s) was removed from
  248. //     the collection, FALSE otherwise.
  249. //-----------------------------------------------------------------------
  250. virtual BOOL _RemoveDataForMasterEvent(CXTPCalendarEvent* pEvent);
  251. };
  252. //===========================================================================
  253. // Summary:
  254. //     This class is used to monitor and manage calendar events reminders.
  255. //     It will send notifications when active reminders list
  256. //     is changed - new reminder(s) come or some reminder(s) goes away.
  257. // Remarks:
  258. //     When Reminder manager starts it check all events which have Reminder
  259. //     flag set.
  260. //     Reminder for event is added to active reminders list when:
  261. //         Event->StartTime - Event->ReminderMinutesBeforeStart <= Now
  262. //
  263. //     There are 2 actions with reminder:
  264. //         Dismiss - reset Reminder flag for the event and remove reminder.
  265. //                   Reminder never comes back;
  266. //
  267. //         Snooze - set new NextReminderTime value and remove reminder.
  268. //                  Reminder will come back when NextReminderTime <= Now.
  269. //
  270. //     Some Reminder manager data stored in CalendarEvent custom properties
  271. //     (or RecurrencePattern custom properties) - this means if own events
  272. //     storage is used you have to save/load custom properties too.
  273. //
  274. //     StartMonitoring/StopMonitoring are used to start/stop reminders manager.
  275. //     These methods are called by the calendar control automatically when
  276. //     CXTPCalendarControl::EnableReminders() method is called.
  277. //
  278. //     GetActiveReminders is used to retrieve collection of active reminders.
  279. //===========================================================================
  280. class _XTP_EXT_CLASS CXTPCalendarRemindersManager : public CWnd
  281. {
  282. //{{AFX_CODEJOCK_PRIVATE
  283. DECLARE_DYNAMIC(CXTPCalendarRemindersManager)
  284. friend class CXTPCalendarReminder;
  285. //}}AFX_CODEJOCK_PRIVATE
  286. public:
  287. //-----------------------------------------------------------------------
  288. // Summary:
  289. //     Default object constructor.
  290. // See Also: ~CXTPCalendarRemindersManager()
  291. //-----------------------------------------------------------------------
  292. CXTPCalendarRemindersManager();
  293. //-----------------------------------------------------------------------
  294. // Summary:
  295. //     Default object destructor.
  296. // See Also: CXTPCalendarRemindersManager()
  297. //-----------------------------------------------------------------------
  298. virtual ~CXTPCalendarRemindersManager();
  299. //-----------------------------------------------------------------------
  300. // Summary:
  301. //     Call this method to retrieve reminders count in the active
  302. //     reminders collection.
  303. // Remarks:
  304. //     Can be useful to quick determine is active reminders collection
  305. //     empty without copy collection.
  306. // Returns:
  307. //     Active reminders count.
  308. // See Also:
  309. //     GetActiveReminders
  310. //-----------------------------------------------------------------------
  311. virtual int GetActiveRemindersCount();
  312. //-----------------------------------------------------------------------
  313. // Summary:
  314. //     Call this method to retrieve active reminders collection.
  315. // Parameters:
  316. //     rarActiveReminders - A reference to an array to retrieve active
  317. //                          reminders.
  318. // See Also:
  319. //     GetActiveRemindersCount
  320. //-----------------------------------------------------------------------
  321. virtual void GetActiveReminders(CXTPCalendarReminders& rarActiveReminders);
  322. //-----------------------------------------------------------------------
  323. // Summary:
  324. //     Call this member function to Snooze specified reminder.
  325. // Parameters:
  326. //     pReminder        - A pointer to reminder object
  327. //     nMinutesAfterNow - A value in minutes to activate reminder again.
  328. // Returns:
  329. //     TRUE if operation is successful, FALSE otherwise.
  330. // See Also:
  331. //     Dismiss, CXTPCalendarReminder::Snooze, CXTPCalendarReminder::Dismiss,
  332. //     CXTPCalendarReminder::GetNextReminderTime
  333. //-----------------------------------------------------------------------
  334. virtual BOOL Snooze(CXTPCalendarReminder* pReminder, int nMinutesAfterNow);
  335. //-----------------------------------------------------------------------
  336. // Summary:
  337. //     Call this member function to Dismiss specified reminder.
  338. // Remarks:
  339. //     Reminder flag for corresponding event object is set to FALSE.
  340. // Parameters:
  341. //     pReminder    - A pointer to reminder object
  342. // Returns:
  343. //     TRUE if operation is successful, FALSE otherwise.
  344. // See Also:
  345. //     Snooze, CXTPCalendarReminder::Snooze, CXTPCalendarReminder::Dismiss
  346. //-----------------------------------------------------------------------
  347. virtual BOOL Dismiss(CXTPCalendarReminder* pReminder);
  348. //-----------------------------------------------------------------------
  349. // Summary:
  350. //     Call this member function to Dismiss all active reminders.
  351. // Remarks:
  352. //     Reminder flag for each event object is set to FALSE.
  353. // Returns:
  354. //     TRUE if operation is successful, FALSE otherwise.
  355. // See Also:
  356. //     Snooze, Dismiss, CXTPCalendarReminder::Snooze, CXTPCalendarReminder::Dismiss
  357. //-----------------------------------------------------------------------
  358. virtual BOOL DismissAll();
  359. //-----------------------------------------------------------------------
  360. // Summary:
  361. //     Obtain a pointer to the notification connection object.
  362. // Remarks:
  363. //     Used to subscribe (Advice) for notification events from the
  364. //     reminders manager.
  365. // Returns:
  366. //     Connection object pointer.
  367. // See Also:
  368. //     CXTPNotifyConnection overview, IXTPNotificationSink overview
  369. //-----------------------------------------------------------------------
  370. virtual CXTPNotifyConnection* GetConnection();
  371. //-----------------------------------------------------------------------
  372. // Summary:
  373. //     This method is used to attach to calendar resources (data provider)
  374. //     and start reminders monitoring.
  375. // Parameters:
  376. //     pResources     - A pointer to calendar resources collection.
  377. //     spPeriod2Cache - A time period for which reminder manager will read
  378. //                      reminders from calendar resources (data provider).
  379. //  Remarks:
  380. //     To retrieve reminders CXTPCalendarData::GetUpcomingEvents() method
  381. //     is used. This can be a slow operation and using spPeriod2Cache
  382. //     parameter value we can control how often this method will be called.
  383. //
  384. //     For example calendar control use spPeriod2Cache = 2 hours by default.
  385. //     This means than GetUpcomingEvents will be called only once per 2 hours.
  386. // Returns:
  387. //     TRUE if operation is successful, FALSE otherwise.
  388. // See Also:
  389. //     StopMonitoring
  390. //-----------------------------------------------------------------------
  391. virtual BOOL StartMonitoring(CXTPCalendarResources* pResources, COleDateTimeSpan spPeriod2Cache);
  392. //-----------------------------------------------------------------------
  393. // Summary:
  394. //     This method is used to detach from calendar resources (data provider)
  395. //     and and clear all reminders in reminders manager.
  396. // Returns:
  397. //     TRUE if operation is successful, FALSE otherwise.
  398. // See Also:
  399. //     StartMonitoring
  400. //-----------------------------------------------------------------------
  401. virtual BOOL StopMonitoring();
  402. //-----------------------------------------------------------------------
  403. // Summary:
  404. //     Call this method to determine is StartMonitoring was successfully
  405. //     called and reminders manager monitoring reminders.
  406. // Returns:
  407. //     TRUE if reminders manager active (started/running), FALSE otherwise.
  408. // See Also:
  409. //     StartMonitoring, StopMonitoring
  410. //-----------------------------------------------------------------------
  411. virtual BOOL IsMonitoringRunning() const;
  412. protected:
  413. //-----------------------------------------------------------------------
  414. // Summary:
  415. //     This method is used to send XTP_NC_CALENDAR_ON_REMINDERS notification
  416. //     via connection object.
  417. // Parameters:
  418. //     eAction - A reminders action. Value from enum XTPCalendarRemindersAction.
  419. //               lParam - Reserved. Set to 0.
  420. // See Also:
  421. //     XTP_NC_CALENDAR_ON_REMINDERS, XTPCalendarRemindersAction.
  422. //-----------------------------------------------------------------------
  423. virtual void NotifyReminders(int eAction, LPARAM lParam = 0);
  424. //-------------------------------------------------------------------------
  425. // Summary:
  426. //     Schedule to call NotifyReminders(xtpCalendarRemindersFire) in 500 ms.
  427. // See Also:
  428. //     NotifyReminders, XTP_NC_CALENDAR_ON_REMINDERS, XTPCalendarRemindersAction.
  429. //-------------------------------------------------------------------------
  430. virtual void PostNotify_RemindersFire();
  431. //-----------------------------------------------------------------------
  432. // Summary:
  433. //     This method clear all reminders in reminders manager collections.
  434. // See Also:
  435. //     StopMonitoring
  436. //-----------------------------------------------------------------------
  437. virtual void RemoveAll();
  438. //{{AFX_CODEJOCK_PRIVATE
  439. DECLARE_XTP_SINK(CXTPCalendarRemindersManager, m_Sink)
  440. afx_msg void OnTimeChange();
  441. afx_msg void OnTimer(UINT_PTR uTimerID);
  442. virtual BOOL _Dismiss(CXTPCalendarReminder* pReminder);
  443. virtual BOOL UpdateDataFromDP(COleDateTime dtFrom, COleDateTimeSpan spPeriod);
  444. virtual BOOL GetUpcomingEventsAll(COleDateTime dtFrom, COleDateTimeSpan spPeriod, CXTPCalendarEventsPtr& rptrEvents);
  445. virtual BOOL ProcessActiveReminders(COleDateTime dtTime);
  446. virtual void OnEventChanged(XTP_NOTIFY_CODE Event, WPARAM wParam , LPARAM lParam);
  447. virtual BOOL ProcessNewEvent(CXTPCalendarEvent* pEvent, COleDateTime dtFrom, COleDateTimeSpan spPeriod);
  448. virtual BOOL ProcessChangedEvent(CXTPCalendarEvent* pEvent);
  449. virtual BOOL _ProcessNewSingleEvent(CXTPCalendarEvent* pEvent, COleDateTime dtFrom, COleDateTimeSpan spPeriod);
  450. virtual BOOL _ProcessNewMasterEvent(CXTPCalendarEvent* pEvent, COleDateTime dtFrom, COleDateTimeSpan spPeriod);
  451. virtual BOOL _GetMaxExceptionReminder(CXTPCalendarRecurrencePattern* pPattern,int& rnMinutes);
  452. virtual BOOL _RemoveSnoozeData(CXTPCalendarReminder* pRmd);
  453. virtual BOOL _CreateWnd();
  454. virtual void OnFinalRelease();
  455. //}}AFX_CODEJOCK_PRIVATE
  456. //{{AFX_CODEJOCK_PRIVATE
  457. DECLARE_MESSAGE_MAP()
  458. //}}AFX_CODEJOCK_PRIVATE
  459. protected:
  460. CXTPNotifyConnection* m_pConnection;        // A pointer to the notification connection object.
  461. CXTPCalendarResourcesNf* m_pResourcesNf;    // A collection of calendar resources to be monitored.
  462. COleDateTimeSpan        m_spPeriod2Cache;   // Time period to cache data from the calendar resources.
  463. COleDateTime            m_dtLastUpdateTime; // Store last time when reminders data was loaded from the calendar resources.
  464. CXTPCalendarReminders   m_arWaitingReminders;  // Waiting reminders collection.
  465. CXTPCalendarReminders   m_arActiveReminders;   // Active reminders collection.
  466. BOOL m_bMonitoringRunning;          // Flag indicate that reminders manager is started;
  467. //{{AFX_CODEJOCK_PRIVATE
  468. BOOL m_bSkipOnEventChanged;
  469. //}}AFX_CODEJOCK_PRIVATE
  470. protected:
  471. };
  472. ////////////////////////////////////////////////////////////////////////////
  473. AFX_INLINE COleDateTime CXTPCalendarReminder::GetNextReminderTime() {
  474. return m_dtNextReminderTime;
  475. }
  476. AFX_INLINE int  CXTPCalendarReminder::GetMinutesBeforeStart() {
  477. return m_nMinutesBeforeStart;
  478. }
  479. AFX_INLINE BOOL CXTPCalendarReminder::Snooze(int nMinutesAfterNow) {
  480. ASSERT(m_pOwnerMan);
  481. return m_pOwnerMan ? m_pOwnerMan->Snooze(this, nMinutesAfterNow) : FALSE;
  482. }
  483. AFX_INLINE BOOL CXTPCalendarReminder::Dismiss() {
  484. ASSERT(m_pOwnerMan);
  485. return m_pOwnerMan ? m_pOwnerMan->Dismiss(this) : FALSE;
  486. }
  487. //===========================================================================
  488. AFX_INLINE CXTPNotifyConnection* CXTPCalendarRemindersManager::GetConnection() {
  489. return m_pConnection;
  490. }
  491. AFX_INLINE BOOL CXTPCalendarRemindersManager::IsMonitoringRunning() const {
  492. return m_bMonitoringRunning;
  493. }
  494. #endif // !defined(_XTP_CALENDAR_REMINDERS_MANAGER_H__)