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

对话框与窗口

开发平台:

Visual C++

  1. // XTPCalendarData.h: interface for the CXTPCalendarData 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(_XTPCALENDARDATA_H__)
  22. #define _XTPCALENDARDATA_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER > 1000
  25. #pragma once
  26. #endif // _MSC_VER > 1000
  27. ////////////////////////////////////////////////////////////////////////////
  28. #include "Common/XTPNotifyConnection.h"
  29. #include "XTPCalendarOptions.h"
  30. #include "XTPCalendarEvent.h"
  31. class CXTPCalendarRecurrencePattern;
  32. class CXTPCalendarEventLabels;
  33. class CXTPCalendarSchedules;
  34. class CXTPNotifyConnection;
  35. class CXTPCalendarOptions;
  36. //===========================================================================
  37. // Summary:
  38. //     Cache table size.
  39. // Remarks:
  40. //    Should be a prime number!
  41. //    like: 503, 1021, 1511, 2003, 3001, 4001, 5003, 6007, 8009, 12007, 16001,
  42. //          32003, 48017, 64007
  43. //===========================================================================
  44. #define XTP_OBJECT_CACHE_HASH_TABLE_SIZE 1021
  45. static const LPCTSTR cszProcess_RecurrenceState     = _T("process_RecurrenceState");    // String name for a corresponding property
  46. static const LPCTSTR cszProcess_RecurrencePatternID = _T("process_RecurrencePatternID");// String name for a corresponding property
  47. //===========================================================================
  48. // Summary:
  49. //     This class defines an abstract representation of the Calendar
  50. //     control data with all necessary methods and some predefined
  51. //     functionality added,
  52. // Remarks:
  53. //     This class is the definition of the XTPCalendarData abstract
  54. //     class which represents a data portion of the Calendar control.
  55. //
  56. //     To implement a custom Data Provider solution you should create a class
  57. //     derived from CXTPCalendarData and implement necessary virtual methods.
  58. //     The first main set of methods to be implemented are Open, Close, Save,
  59. //     Create, IsOpen, etc.
  60. //     The second main set of methods to be implemented is starting from Do verb.
  61. //     Those are: DoRetrieveDayEvents, DoRead_Event, DoUpdate_RPattern, etc.
  62. //
  63. //     To use a descendant of CXTPCalendarData in a regular way you first
  64. //     construct an instance of CXTPCalendarData object, then use Open()
  65. //     member function to establish connection to the data source and
  66. //     initialize the object. Class provides a number of functions to
  67. //     manipulate events and events related data. After finishing working
  68. //     with data source you should call Close() member function to close
  69. //     connection, de-initialize the object and free unused resources.
  70. //
  71. //     This class also contains an implementation of the data provider cache,
  72. //     which is used by default and gets a great performance increase in case
  73. //     when any slow connections are used (for example database connection).
  74. // See Also:
  75. //     CXTPCalendarData overview, CXTPCalendarEvents, CXTPCalendarEvent,
  76. //     CXTPCalendarCustomDataProvider
  77. //===========================================================================
  78. class _XTP_EXT_CLASS CXTPCalendarData : public CXTPCmdTarget
  79. {
  80. //{{AFX_CODEJOCK_PRIVATE
  81. friend class CXTPCalendarRecurrencePattern;
  82. friend class CXTPCalendarEvent;
  83. friend class CXTPCalendarOptions;
  84. friend class CXTPCalendarControl;
  85. DECLARE_DYNAMIC(CXTPCalendarData)
  86. //}}AFX_CODEJOCK_PRIVATE
  87. public:
  88. //-----------------------------------------------------------------------
  89. // Summary:
  90. //     Default constructor.
  91. // Remarks:
  92. //     Constructs a Data object. To establish a connection to a
  93. //     specified data source and initialize the object you must
  94. //     call Open() member function immediately after construction.
  95. // See Also: Open()
  96. //-----------------------------------------------------------------------
  97. CXTPCalendarData();
  98. //-----------------------------------------------------------------------
  99. // Summary:
  100. //     Default Destructor.
  101. // Remarks:
  102. //     Handles all deallocation.
  103. //-----------------------------------------------------------------------
  104. virtual ~CXTPCalendarData();
  105. //-----------------------------------------------------------------------
  106. // Summary:
  107. //     Call this member function to initialize a newly constructed
  108. //     Data object. Your data object must be created before you
  109. //     can call Open().
  110. // Returns:
  111. //     Boolean value represents succsess/failure result
  112. //-----------------------------------------------------------------------
  113. virtual BOOL Open();
  114. //-----------------------------------------------------------------------
  115. // Summary:
  116. //     Call this member function to create a file for storing custom
  117. //     data provider data.
  118. // Remarks:
  119. //     It will be opened by default.
  120. // Returns:
  121. //     TRUE is successful. FALSE otherwise.
  122. //-----------------------------------------------------------------------
  123. virtual BOOL Create();
  124. //-----------------------------------------------------------------------
  125. // Summary:
  126. //     This method saves data to the file.
  127. // Remarks:
  128. //     The most recent data from the data provider will be saved in
  129. //     the same external file as before.
  130. //     Note that all the data inside the data provider is already up to
  131. //     date, this method just allows it to be saved externally.
  132. // Returns:
  133. //     TRUE is successful. FALSE otherwise.
  134. //-----------------------------------------------------------------------
  135. virtual BOOL Save();
  136. //-----------------------------------------------------------------------
  137. // Summary:
  138. //     Call this member function to close the connection to a data source.
  139. //-----------------------------------------------------------------------
  140. virtual void Close();
  141. //-----------------------------------------------------------------------
  142. // Summary:
  143. //     This method determines whether a data source connection is opened..
  144. // Returns:
  145. //     TRUE when a connection is already opened. FALSE otherwise.
  146. //-----------------------------------------------------------------------
  147. virtual BOOL IsOpen();
  148. //-----------------------------------------------------------------------
  149. // Summary:
  150. //     This method determines a type of the current Data Provider
  151. //     implementation.
  152. // Returns:
  153. //     Current Data Provider implementation type.
  154. // See also:
  155. //     XTPCalendarDataProvider enumeration.
  156. //-----------------------------------------------------------------------
  157. virtual XTPCalendarDataProvider GetType();
  158. //-----------------------------------------------------------------------
  159. // Summary:
  160. //     Retrieves day events for a specified day from the data source.
  161. // Parameters:
  162. //     dtDay - A specified day.
  163. // Remarks:
  164. //     This method retrieves all appointments for a specified day from
  165. //     the data source. It includes recurrence appointments occurrences,
  166. //     regular appointments for this day, multi day appointments which
  167. //     also have a part of this day.
  168. //     This method uses DoRetrieveDayEvents realization and implements
  169. //     some additional service processing.
  170. // Returns:
  171. //     A collection of events for a specified day.
  172. //-----------------------------------------------------------------------
  173. virtual CXTPCalendarEventsPtr RetrieveDayEvents(COleDateTime dtDay);
  174. //-----------------------------------------------------------------------
  175. // Summary:
  176. //     Creates a new empty CXTPCalendarEvent object.
  177. // Parameters:
  178. //     dwEventID - ID for a new event
  179. // Remarks:
  180. //     This method creates a new CXTPCalendarEvent class and
  181. //     initializes it's ID.
  182. //
  183. //     It could be reimplemented in a descendant if it has its own
  184. //     ID's source (for example, database key field).
  185. // Returns:
  186. //     Created empty event.
  187. //-----------------------------------------------------------------------
  188. virtual CXTPCalendarEventPtr CreateNewEvent(DWORD dwEventID = XTP_CALENDAR_UNKNOWN_EVENT_ID);
  189. //-----------------------------------------------------------------------
  190. // Summary:
  191. //     Creates a new empty CXTPCalendarRecurrencePattern object.
  192. // Parameters:
  193. //     dwPatternID - ID for a new Recurrence Pattern
  194. // Remarks:
  195. //     This method creates a new CXTPCalendarRecurrencePattern class and
  196. //     initializes it's ID.
  197. //
  198. //     It could be reimplemented in a descendant if it has its own
  199. //     ID's source (for example, database key field).
  200. // Returns:
  201. //     Created empty Recurrence Pattern.
  202. //-----------------------------------------------------------------------
  203. virtual CXTPCalendarRecurrencePatternPtr CreateNewRecurrencePattern(DWORD dwPatternID = XTP_CALENDAR_UNKNOWN_RECURRENCE_PATTERN_ID);
  204. //-----------------------------------------------------------------------
  205. // Summary:
  206. //     Read event from the data source.
  207. // Parameters:
  208. //     dwEventID - Event ID of the read target.
  209. // Remarks:
  210. //     This method retrieves all data for a specified event.
  211. //     This method uses DoRead_Event realization and implements
  212. //     some additional service processing.
  213. // Returns:
  214. //     A pointer to the new CXTPCalendarEvent object which fields
  215. //     are filled with a data from the data source.
  216. //-----------------------------------------------------------------------
  217. virtual CXTPCalendarEventPtr GetEvent(DWORD dwEventID);
  218. //-----------------------------------------------------------------------
  219. // Summary:
  220. //     Read recurrence pattern from the data source
  221. // Parameters:
  222. //     dwPatternID - Pattern ID of the read target.
  223. // Remarks:
  224. //     This method retrieves all data for a specified recurrence pattern.
  225. //     This method uses DoRead_RPattern realization and implements
  226. //     some additional service processing.
  227. // Returns:
  228. //     A pointer to the new CXTPCalendarRecurrencePatternPtr object which
  229. //     fields are filled with a data from the data source.
  230. //-----------------------------------------------------------------------
  231. virtual CXTPCalendarRecurrencePatternPtr GetRecurrencePattern(DWORD dwPatternID);
  232. //-----------------------------------------------------------------------
  233. // Summary:
  234. //     Creates a new event in the data source
  235. // Parameters:
  236. //     pEvent - Pointer to the CXTPCalendarEvent object which describes
  237. //              all data fields of a newly created record.
  238. // Remarks:
  239. //     This method creates a data record corresponding with the
  240. //     specified event.
  241. //     This method uses DoCreate_Event realization and implements
  242. //     some additional service processing.
  243. // Returns:
  244. //     TRUE if event created successfully,
  245. //     FALSE in case of any error during the process.
  246. //-----------------------------------------------------------------------
  247. virtual BOOL AddEvent(CXTPCalendarEvent* pEvent);
  248. //-----------------------------------------------------------------------
  249. // Summary:
  250. //     Creates a set of events in the data source
  251. // Parameters:
  252. //     pEvents - Pointer to the CXTPCalendarEvents collection which
  253. //               contains a number of CXTPCalendarEvent objects.
  254. // Remarks:
  255. //     This method adds a collection of events into the data source.
  256. // Returns:
  257. //     TRUE if all events were added successfully,
  258. //     FALSE in case of any error during the process.
  259. //-----------------------------------------------------------------------
  260. virtual BOOL AddEvents(CXTPCalendarEvents* pEvents);
  261. //-----------------------------------------------------------------------
  262. // Summary:
  263. //     Removes all events from the data source.
  264. // Remarks:
  265. //     This method removes all appointments from the data source.
  266. //     This method uses DoRemoveAllEvents realization and implements
  267. //     some additional service processing.
  268. //-----------------------------------------------------------------------
  269. virtual void RemoveAllEvents();
  270. //-----------------------------------------------------------------------
  271. // Summary:
  272. //     Deletes an event from the data source.
  273. // Parameters:
  274. //     pEvent - Pointer to the CXTPCalendarEvent object which describes
  275. //              all data fields of an event.
  276. // Remarks:
  277. //     This method deletes a data record corresponding with the
  278. //     specified event.
  279. //     This method uses DoDelete_Event realization and implements
  280. //     some additional service processing.
  281. // Returns:
  282. //     TRUE if an event deleted successfully,
  283. //     FALSE in case of any errors during the process.
  284. //-----------------------------------------------------------------------
  285. virtual BOOL DeleteEvent(CXTPCalendarEvent* pEvent);
  286. //-----------------------------------------------------------------------
  287. // Summary:
  288. //     Updates event properties in the data source.
  289. // Parameters:
  290. //     pNewEvent - Pointer to the CXTPCalendarEvent object which describes
  291. //                 all data fields of an event.
  292. // Remarks:
  293. //     This method updates a data record corresponding with the
  294. //     specified event.
  295. //     This method uses DoUpdate_Event realization and implements
  296. //     some additional service processing.
  297. // Returns:
  298. //     TRUE if an event updated successfully,
  299. //     FALSE in case of any errors during the process.
  300. //-----------------------------------------------------------------------
  301. virtual BOOL ChangeEvent(CXTPCalendarEvent* pNewEvent);
  302. //-----------------------------------------------------------------------
  303. // Summary:
  304. //     Returns a connection pointer for the.data source.
  305. // Returns:
  306. //     A connection pointer.
  307. // See also;
  308. //     CXTPNotifyConnection overview.
  309. //-----------------------------------------------------------------------
  310. virtual CXTPNotifyConnection* GetConnection();
  311. //-----------------------------------------------------------------------
  312. // Summary:
  313. //     Returns a custom properties collection.
  314. // Returns:
  315. //     A custom properties collection associated with the data source..
  316. // See also;
  317. //     CXTPCalendarCustomProperties overview.
  318. //-----------------------------------------------------------------------
  319. virtual CXTPCalendarCustomProperties* GetCustomProperties();
  320. //-----------------------------------------------------------------------
  321. // Summary:
  322. //     Returns a collection of Labels used in this Data source.
  323. // Returns:
  324. //     A collection of Labels used in this Data source.
  325. //     By default it has some predefined values.
  326. // See also;
  327. //     CXTPCalendarEventLabels overview, SetLabelList(),
  328. //     CXTPCalendarEventLabels::InitDefaultValues
  329. //-----------------------------------------------------------------------
  330. virtual CXTPCalendarEventLabels* GetLabelList() const;
  331. //-----------------------------------------------------------------------
  332. // Summary:
  333. //     Returns a collection of Event categories.
  334. // Returns:
  335. //     A collection of Event categories.
  336. //     By default it has some predefined values.
  337. // See also;
  338. //     CXTPCalendarEventCategories overview,
  339. //     CXTPCalendarEventCategories::InitDefaultValues()
  340. //-----------------------------------------------------------------------
  341. virtual CXTPCalendarEventCategories* GetEventCategories() const;
  342. //-----------------------------------------------------------------------
  343. // Summary:
  344. //     Set custom collection of Labels to be used in this Data source.
  345. // Parameters:
  346. //     pLabelList - A custom collection of Labels to be used there.
  347. // See also;
  348. //     CXTPCalendarEventLabels overview, GetLabelList()
  349. //-----------------------------------------------------------------------
  350. virtual void SetLabelList(CXTPCalendarEventLabels* pLabelList);
  351. //-----------------------------------------------------------------------
  352. // Summary:
  353. //     Returns a collection of schedules used in this data source.
  354. // Returns:
  355. //     A collection of schedules associated with the data source.
  356. // See also;
  357. //     CXTPCalendarSchedules overview.
  358. //-----------------------------------------------------------------------
  359. virtual CXTPCalendarSchedules* GetSchedules() const;
  360. //-----------------------------------------------------------------------
  361. // Summary:
  362. //     Sets a data provider connection string.
  363. // Parameters:
  364. //     lpszConnectionString - A connection string.
  365. // See also;
  366. //     GetConnectionString(), GetDataSource()
  367. //-----------------------------------------------------------------------
  368. virtual void SetConnectionString(LPCTSTR lpszConnectionString);
  369. //-----------------------------------------------------------------------
  370. // Summary:
  371. //     Returns a data provider connection string.
  372. // Returns:
  373. //     Current connection string.
  374. // See also;
  375. //     SetConnectionString(), GetDataSource()
  376. //-----------------------------------------------------------------------
  377. virtual CString GetConnectionString();
  378. //-----------------------------------------------------------------------
  379. // Summary:
  380. //     Returns a data provider data source.
  381. // Returns:
  382. //     String with current data source settings.
  383. // Remarks:
  384. //     This method parses a connection string and returns a data source
  385. //     as a part of it.
  386. // See also;
  387. //     GetConnectionString(), SetConnectionString()
  388. //-----------------------------------------------------------------------
  389. virtual CString GetDataSource();
  390. //-----------------------------------------------------------------------
  391. // Summary:
  392. //     Determines current cache mode.
  393. // See also:
  394. //     XTPCalendarDataProviderCacheMode enumeration,
  395. //     SetCacheMode().
  396. //-----------------------------------------------------------------------
  397. virtual int GetCacheMode() const;
  398. //-----------------------------------------------------------------------
  399. // Summary:
  400. //     Set common data provider cache mode.
  401. // Parameters:
  402. //     eCacheMode         - Cache mode. See XTPCalendarDataProviderCacheMode
  403. //     pCacheDataProvider - Data Provider object which you want to use
  404. //                          for cache purposes. By default it is
  405. //                          CXTPCalendarMemoryDataProvider.
  406. // Remarks:
  407. //     This method updates an internal cache mode.
  408. // See also:
  409. //     XTPCalendarDataProviderCacheMode enumeration.
  410. //-----------------------------------------------------------------------
  411. virtual void SetCacheMode(int eCacheMode, CXTPCalendarData* pCacheDataProvider = NULL);
  412. //-----------------------------------------------------------------------
  413. // Summary:
  414. //     Clears common data provider cache.
  415. //-----------------------------------------------------------------------
  416. virtual void ClearCache();
  417. //-----------------------------------------------------------------------
  418. // Summary:
  419. //     Retrieves a collection of events expiring in the period from
  420. //     dtFrom during next spPeriod.
  421. // Parameters:
  422. //     dtFrom   - Start date and time of a specified period.
  423. //     spPeriod - A duration of a specified period.
  424. // Remarks:
  425. //     This method is used by a reminders manager.
  426. //     This method uses DoGetUpcomingEvents realization and implements
  427. //     some additional service processing.
  428. // Returns:
  429. //     A CXTPCalendarEvents pointer containing a collection of
  430. //     upcoming events.
  431. // See Also:
  432. //     CXTPCalendarRemindersManager overview
  433. //-----------------------------------------------------------------------
  434. virtual CXTPCalendarEventsPtr GetUpcomingEvents(COleDateTime dtFrom = (DATE)0, COleDateTimeSpan spPeriod = (DATE)0);
  435. //-----------------------------------------------------------------------
  436. // Summary:
  437. //     This method Gets all events without generating recurrence
  438. //     occurrences.
  439. // Remarks:
  440. //     Simple events are included as is.
  441. //     For the recurrence events only master events are included,
  442. //     recurrence occurrences are not generated.
  443. //     This method uses DoGetAllEvents_raw realization and implements
  444. //     some additional service processing.
  445. // Returns:
  446. //     A CXTPCalendarEvents pointer containing a collection of
  447. //     all events.
  448. // See Also: _Save(), Serialize(), DoGetAllEvents_raw()
  449. //-----------------------------------------------------------------------
  450. virtual CXTPCalendarEventsPtr GetAllEvents_raw();
  451. protected:
  452. //-----------------------------------------------------------------------
  453. // Summary:
  454. //     Retrieves day events for a specified day from the data source.
  455. // Parameters:
  456. //     dtDay - A specified day.
  457. // Remarks:
  458. //     This method retrieves all appointments for a specified day from
  459. //     the data source. It includes recurrence appointments occurrences,
  460. //     regular appointments for this day, multi day appointments which
  461. //     also have a part of this day.
  462. //     It has empty implementation in this class and should be
  463. //     implemented by any custom realization of CXTPCalendarData.
  464. // Returns:
  465. //     A collection of events for a specified day.
  466. //-----------------------------------------------------------------------
  467. virtual CXTPCalendarEventsPtr DoRetrieveDayEvents(COleDateTime dtDay);
  468. //-----------------------------------------------------------------------
  469. // Summary:
  470. //     Removes all events from the data source.
  471. // Remarks:
  472. //     This method removes all appointments from the data source.
  473. //     It has empty implementation in this class and should be
  474. //     implemented by any custom realization of CXTPCalendarData.
  475. //-----------------------------------------------------------------------
  476. virtual void DoRemoveAllEvents();
  477. //-----------------------------------------------------------------------
  478. // Summary:
  479. //     Read event from the data source.
  480. // Parameters:
  481. //     dwEventID - Event ID of the read target.
  482. // Remarks:
  483. //     This method retrieves all data for a specified event.
  484. //     It has empty implementation in this class and should be
  485. //     implemented by any custom realization of CXTPCalendarData.
  486. // Returns:
  487. //     A pointer to the new CXTPCalendarEvent object which fields
  488. //     are filled with a data from the data source.
  489. //-----------------------------------------------------------------------
  490. virtual CXTPCalendarEventPtr DoRead_Event(DWORD dwEventID);
  491. //-----------------------------------------------------------------------
  492. // Summary:
  493. //     Read recurrence pattern from the data source
  494. // Parameters:
  495. //     dwPatternID - Pattern ID of the read target.
  496. // Remarks:
  497. //     This method retrieves all data for a specified recurrence pattern.
  498. //     It has empty implementation in this class and should be
  499. //     implemented by any custom realization of CXTPCalendarData.
  500. // Returns:
  501. //     A pointer to the new CXTPCalendarRecurrencePatternPtr object which
  502. //     fields are filled with a data from the data source.
  503. //-----------------------------------------------------------------------
  504. virtual CXTPCalendarRecurrencePatternPtr DoRead_RPattern(DWORD dwPatternID);
  505. //-----------------------------------------------------------------------
  506. // Summary:
  507. //     Creates a new event in the data source
  508. // Parameters:
  509. //     pEvent - Pointer to the CXTPCalendarEvent object which describes
  510. //              all data fields of a newly created record.
  511. //     rdwNewEventID - [out] EventID of a newly created record
  512. // Remarks:
  513. //     This method creates a data record corresponding with the
  514. //     specified event.
  515. //     It has empty implementation in this class and should be
  516. //     implemented by any custom realization of CXTPCalendarData.
  517. // Returns:
  518. //     TRUE if event created successfully,
  519. //     FALSE in case of any error during the process.
  520. //-----------------------------------------------------------------------
  521. virtual BOOL DoCreate_Event(CXTPCalendarEvent* pEvent, DWORD& rdwNewEventID);
  522. //-----------------------------------------------------------------------
  523. // Summary:
  524. //     Updates event properties in the data source.
  525. // Parameters:
  526. //     pEvent - Pointer to the CXTPCalendarEvent object which describes
  527. //              all data fields of an event.
  528. // Remarks:
  529. //     This method updates a data record corresponding with the
  530. //     specified event.
  531. //     It has empty implementation in this class and should be
  532. //     implemented by any custom realization of CXTPCalendarData.
  533. // Returns:
  534. //     TRUE if an event updated successfully,
  535. //     FALSE in case of any errors during the process.
  536. //-----------------------------------------------------------------------
  537. virtual BOOL DoUpdate_Event(CXTPCalendarEvent* pEvent);
  538. //-----------------------------------------------------------------------
  539. // Summary:
  540. //     Deletes an event from the data source.
  541. // Parameters:
  542. //     pEvent - Pointer to the CXTPCalendarEvent object which describes
  543. //              all data fields of an event.
  544. // Remarks:
  545. //     This method deletes a data record corresponding with the
  546. //     specified event.
  547. //     It has empty implementation in this class and should be
  548. //     implemented by any custom realization of CXTPCalendarData.
  549. // Returns:
  550. //     TRUE if an event deleted successfully,
  551. //     FALSE in case of any errors during the process.
  552. //-----------------------------------------------------------------------
  553. virtual BOOL DoDelete_Event(CXTPCalendarEvent* pEvent);
  554. //-----------------------------------------------------------------------
  555. // Summary:
  556. //     Creates a new recurrence pattern in the data source
  557. // Parameters:
  558. //     pPattern - Pointer to the CXTPCalendarRecurrencePattern object which
  559. //                describes all data fields of a newly created record.
  560. //     rdwNewPatternID - [out] ID of a newly created record
  561. // Remarks:
  562. //     This method creates a data record corresponding with the
  563. //     specified recurrence pattern.
  564. //     It has empty implementation in this class and should be
  565. //     implemented by any custom realization of CXTPCalendarData.
  566. // Returns:
  567. //     TRUE if recurrence pattern created successfully,
  568. //     FALSE in case of any error during the process.
  569. //-----------------------------------------------------------------------
  570. virtual BOOL DoCreate_RPattern(CXTPCalendarRecurrencePattern* pPattern, DWORD& rdwNewPatternID);
  571. //-----------------------------------------------------------------------
  572. // Summary:
  573. //     Updates a recurrence pattern in the database
  574. // Parameters:
  575. //     pPattern - Pointer to the CXTPCalendarRecurrencePattern object.
  576. // Remarks:
  577. //     This method updates a data record corresponding with the
  578. //     specified recurrence pattern.
  579. //     It has empty implementation in this class and should be
  580. //     implemented by any custom realization of CXTPCalendarData.
  581. // Returns:
  582. //     TRUE if recurrence pattern updated successfully,
  583. //     FALSE in case of any error during the process.
  584. //-----------------------------------------------------------------------
  585. virtual BOOL DoUpdate_RPattern(CXTPCalendarRecurrencePattern* pPattern);
  586. //-----------------------------------------------------------------------
  587. // Summary:
  588. //     Deletes a recurrence pattern from the database
  589. // Parameters:
  590. //     pPattern - Pointer to the CXTPCalendarRecurrencePattern object
  591. //                which should be deleted.
  592. // Remarks:
  593. //     This method deletes a data record corresponding with the
  594. //     specified recurrence pattern.
  595. //     It has empty implementation in this class and should be
  596. //     implemented by any custom realization of CXTPCalendarData.
  597. // Returns:
  598. //     TRUE if recurrence pattern deleted successfully,
  599. //     FALSE in case of any error during the process.
  600. //-----------------------------------------------------------------------
  601. virtual BOOL DoDelete_RPattern(CXTPCalendarRecurrencePattern* pPattern);
  602. //-----------------------------------------------------------------------
  603. // Summary:
  604. //     Retrieves a collection of events expiring in the period from
  605. //     dtFrom during next spPeriod.
  606. // Parameters:
  607. //     dtFrom   - Start date and time of a specified period.
  608. //     spPeriod - A duration of a specified period.
  609. // Remarks:
  610. //     This method is used by a reminders manager.
  611. //     It has empty implementation in this class and should be
  612. //     implemented by any custom realization of CXTPCalendarData.
  613. // Returns:
  614. //     A CXTPCalendarEvents pointer containing a collection of
  615. //     upcoming events.
  616. // See Also:
  617. //     CXTPCalendarRemindersManager overview
  618. //-----------------------------------------------------------------------
  619. virtual CXTPCalendarEventsPtr DoGetUpcomingEvents(COleDateTime dtFrom, COleDateTimeSpan spPeriod);
  620. //-----------------------------------------------------------------------
  621. // Summary:
  622. //     Retrieves all events without generating
  623. //     recurrence occurrences.
  624. // Remarks:
  625. //     Simple events are included as is.
  626. //     For the recurrence events only master events are included,
  627. //     recurrence occurrences are not generated.
  628. //     It has empty implementation in this class and should be
  629. //     implemented by any custom realization of CXTPCalendarData.
  630. // Returns:
  631. //     A CXTPCalendarEvents pointer containing a collection of
  632. //     all events.
  633. // See Also: GetAllEvents_raw()
  634. //-----------------------------------------------------------------------
  635. virtual CXTPCalendarEventsPtr DoGetAllEvents_raw();
  636. protected:
  637. //-----------------------------------------------------------------------
  638. // Summary:
  639. //    Sends a notification to all listeners.
  640. // Parameters:
  641. //    EventCode - Notification event code.
  642. //    wParam    - First notification parameter.
  643. //    lParam    - Second notification parameter.
  644. // See Also:
  645. //    CXTPNotifyConnection overview
  646. //-----------------------------------------------------------------------
  647. virtual void SendNotification(XTP_NOTIFY_CODE EventCode, WPARAM wParam , LPARAM lParam);
  648. //-----------------------------------------------------------------------
  649. // Summary:
  650. //      This method is called by the calendar control framework when Time Zone is Changed.
  651. // Remarks:
  652. //      The data provider implementation may use this method to adjust its data for
  653. //      a new timezone.
  654. // Returns:
  655. //      TRUE if internal data changed and calendar must be re-populated, FALSE if this
  656. //      event is ignored (no data changed).
  657. //      Base implementation do nothing and returns FALSE.
  658. // See Also:
  659. //    CXTPTopLevelWndMsgNotifier, XTP_WM_TIME_ZONE_CHANGED
  660. //-----------------------------------------------------------------------
  661. virtual BOOL OnTimeZoneChanged() { return FALSE; };
  662. //{{AFX_CODEJOCK_PRIVATE
  663. virtual BOOL _AddRPatternWithExceptions(CXTPCalendarRecurrencePattern* pPattern);
  664. virtual BOOL _RemoveRPatternWithExceptions(CXTPCalendarRecurrencePattern* pPattern);
  665. virtual BOOL _ChangeRPatternWithExceptions(CXTPCalendarRecurrencePattern* pRecurrencePattern);
  666. virtual BOOL _ChangeRExceptionOccurrence_nf(CXTPCalendarEvent* pExcOcc, BOOL bSend_EventDeleted);
  667. virtual void _PostProcessOccurrencesFromMaster(COleDateTime dtDay, CXTPCalendarEvents* pEvents);
  668. virtual void _PostProcessOccurrencesFromMaster2(COleDateTime dtDayFrom, COleDateTime dtDayTo, CXTPCalendarEvents* pEvents);
  669. virtual BOOL _PostProcessRecurrenceIfNeed(CXTPCalendarEvent* pEvent);
  670. virtual void _PostProcessRecurrenceIfNeed(CXTPCalendarEvents* pEvents);
  671. virtual void _FilterDayEventsInstancesByEndTime(COleDateTime dtDay, CXTPCalendarEvents* pEvents);
  672. virtual CXTPCalendarRecurrencePatternPtr _GetRecurrencePattern_raw(DWORD dwPatternID);
  673. virtual CXTPCalendarEventPtr _GetEvent_raw(DWORD dwEventID);
  674. //}}AFX_CODEJOCK_PRIVATE
  675. protected:
  676. BOOL m_bOpened; // Stores a flag whether a data source connection is open
  677. CXTPNotifyConnection* m_pConnect;    // Connection object to send notifications.
  678. BOOL m_bDisableNotificationsSending; // Stores a flag whether notifications sending is disabled.
  679. CXTPCalendarEventLabels* m_pLabelList; // Event labels list.
  680. CXTPCalendarSchedules*   m_pSchedules; // Data source Schedules list
  681. CXTPCalendarEventCategories* m_pEventCategories; // Store a collection of Event categories.
  682. CXTPCalendarCustomProperties* m_pCustomProperties; //Custom properties collection object.
  683. protected:
  684. CString m_strConnectionString;         // default connection string;
  685. XTPCalendarDataProvider m_typeProvider;// Data provider type.
  686. //-----------------------------------------------------------------------
  687. // Remarks:
  688. //     Implementation of the data provider cache.
  689. //-----------------------------------------------------------------------
  690. class _XTP_EXT_CLASS CXTPDPCache
  691. {
  692. public:
  693. //-------------------------------------------------------------------
  694. // Summary:
  695. //     Default class constructor.
  696. //-------------------------------------------------------------------
  697. CXTPDPCache();
  698. //-------------------------------------------------------------------
  699. // Summary:
  700. //     Default class destructor.
  701. //-------------------------------------------------------------------
  702. virtual ~CXTPDPCache();
  703. //-------------------------------------------------------------------
  704. // Summary:
  705. //     Closes a cache.
  706. //-------------------------------------------------------------------
  707. void SafeClose();
  708. //-------------------------------------------------------------------
  709. // Summary:
  710. //     Safely removes all elements from cache.
  711. //-------------------------------------------------------------------
  712. void SafeRemoveAll();
  713. //-------------------------------------------------------------------
  714. // Summary:
  715. //     Checks whether events for this day are already stored in cache.
  716. // Parameters:
  717. //     dtDay - A day to check.
  718. // Returns:
  719. //     TRUE if day is already stored in cache,
  720. //     FALSE otherwise.
  721. //-------------------------------------------------------------------
  722. virtual BOOL IsDayInCache(COleDateTime dtDay);
  723. //-------------------------------------------------------------------
  724. // Summary:
  725. //     Sets a flag that this day is in cache.
  726. // Parameters:
  727. //     dtDay - A day to set.
  728. //     bSet  - Whether to set or clear flag.
  729. //-------------------------------------------------------------------
  730. virtual void SetDayInCache(COleDateTime dtDay, BOOL bSet = TRUE);
  731. //-------------------------------------------------------------------
  732. // Summary:
  733. //     Checks whether a specified event is already stored in cache.
  734. // Parameters:
  735. //     pEvent - An event to check.
  736. // Returns:
  737. //     TRUE if an event is already stored in cache,
  738. //     FALSE otherwise.
  739. //-------------------------------------------------------------------
  740. virtual BOOL IsEventInCache(CXTPCalendarEvent* pEvent);
  741. //-------------------------------------------------------------------
  742. // Summary:
  743. //     Adds a collection if events to the cache for a specified day.
  744. // Parameters:
  745. //     pEvents - An events collection.
  746. //     dtDay   - A specified day.
  747. //-------------------------------------------------------------------
  748. virtual void AddToCache(CXTPCalendarEvents* pEvents, COleDateTime dtDay);
  749. //-------------------------------------------------------------------
  750. // Summary:
  751. //     Checks whether a specified event is already stored in cache
  752. //     and adds it there if not.
  753. // Parameters:
  754. //     pEvent - An event to check / add.
  755. //-------------------------------------------------------------------
  756. virtual void AddToCacheIfNeed(CXTPCalendarEvent* pEvent);
  757. //-------------------------------------------------------------------
  758. // Summary:
  759. //     Checks whether a specified recurrence pattern is already
  760. //     stored in cache and adds it there if not.
  761. // Parameters:
  762. //     pPattern - An pattern to check / add.
  763. //-------------------------------------------------------------------
  764. virtual void _AddToCacheIfNeed(CXTPCalendarRecurrencePattern* pPattern);
  765. CXTPCalendarData* m_pCacheDP;   // Cache Data Provider.
  766. int               m_eCacheMode; // see XTPCalendarDataProviderCacheMode
  767. protected:
  768. CMap<DWORD, DWORD, BOOL, BOOL> m_mapIsDayInCache; // whether events for this day are already stored in cache
  769. };
  770. protected:
  771. CXTPDPCache m_cache; // Common data provider cache.
  772. //-----------------------------------------------------------------------
  773. // Remarks:
  774. //     This template class is used as a map (see CMap) to store
  775. //     ID and object pairs. Using the map allows for quick access
  776. //     using the ID.
  777. // See Also: CMap
  778. //-----------------------------------------------------------------------
  779. template<class _TObject>
  780. class EventsMapByID_T
  781. {
  782. public:
  783. //-----------------------------------------------------------------------
  784. // Summary:
  785. //     Default class constructor.
  786. // Parameters:
  787. //     uHashTableSize - Size of the map hash table.
  788. // See Also: CMap, CMap::InitHashTable
  789. //-----------------------------------------------------------------------
  790. EventsMapByID_T(UINT uHashTableSize = XTP_OBJECT_CACHE_HASH_TABLE_SIZE)
  791. {
  792. m_mapID2Object.InitHashTable(uHashTableSize, FALSE);
  793. };
  794. //-----------------------------------------------------------------------
  795. // Summary:
  796. //     Default class destructor.
  797. // Remarks:
  798. //     Handles member items deallocation. Decreases references of
  799. //     stored objects.
  800. // See Also: CMap
  801. //-----------------------------------------------------------------------
  802. virtual ~EventsMapByID_T() {};
  803. //-----------------------------------------------------------------------
  804. // Summary:
  805. //     This member function is used to add new or to replace existing
  806. //     pairs of IDs and Objects.
  807. // Parameters:
  808. //     dwID - Object ID.
  809. //     pObj - Object Pointer.
  810. // Remarks:
  811. //     Call this method to add new or to replace existing
  812. //     elements in the map. InternalAddRef is called for the
  813. //     stored object.
  814. // See Also: Get, Remove, CMap::SetAt
  815. //-----------------------------------------------------------------------
  816. void Add(DWORD dwID, _TObject* pObj)
  817. {
  818. if (!pObj) {
  819. ASSERT(FALSE);
  820. return;
  821. }
  822. TObjPtr ptrObj(pObj, TRUE);
  823. m_mapID2Object.SetAt(dwID, ptrObj);
  824. };
  825. //-----------------------------------------------------------------------
  826. // Summary:
  827. //     This member function is used to obtain a pointer to an object
  828. //     using the specified ID.
  829. // Parameters:
  830. //     dwID - Object ID.
  831. // Remarks:
  832. //     Call this method to search for the object using the ID.
  833. //     InternalAddRef is called for the non-NULL returned object.
  834. // Returns:
  835. //     Object pointer or NULL.
  836. // See Also: Add, CMap::Lookup
  837. //-----------------------------------------------------------------------
  838. _TObject* Get(DWORD dwID) {
  839. TObjPtr ptrObj;
  840. if (m_mapID2Object.Lookup(dwID, ptrObj) && ptrObj) {
  841. return (_TObject*)(CCmdTarget*)ptrObj;
  842. }
  843. return NULL;
  844. };
  845. //-----------------------------------------------------------------------
  846. // Summary:
  847. //     This member function is used to determine if an object with the
  848. //     specified ID exists.
  849. // Parameters:
  850. //     dwID - Object ID.
  851. // Remarks:
  852. //     Similar to Get method, but calls InternalAddRef for
  853. //     the returned object.
  854. // Returns:
  855. //     TRUE if object with ID exists. Otherwise FALSE.
  856. // See Also: Get, CMap::Lookup
  857. //-----------------------------------------------------------------------
  858. BOOL IsExist(DWORD dwID) {
  859. TObjPtr ptrObj;
  860. return m_mapID2Object.Lookup(dwID, ptrObj) && ptrObj;
  861. };
  862. //-----------------------------------------------------------------------
  863. // Summary:
  864. //     This member function is used to remove an object with the
  865. //     specified ID.
  866. // Parameters:
  867. //     dwID - Object ID.
  868. // Remarks:
  869. //     Call this method to remove an element with the supplied ID
  870. //     from the map.
  871. //     InternalAddRef is called for the removed object.
  872. // Returns: Nonzero if the entry was found and successfully removed; otherwise 0.
  873. // See Also: Add, RemoveAll, CMap::RemoveKey
  874. //-----------------------------------------------------------------------
  875. BOOL Remove(DWORD dwID) {
  876. BOOL bRes = m_mapID2Object.RemoveKey(dwID);
  877. return bRes;
  878. };
  879. //-----------------------------------------------------------------------
  880. // Summary:
  881. //     This member function is used to remove all stored objects
  882. //     from the map.
  883. // Remarks:
  884. //     Call this method to cleanup the map.
  885. //     InternalAddRef is called for all objects.
  886. // See Also: Remove, CMap::RemoveAll
  887. //-----------------------------------------------------------------------
  888. void RemoveAll() {
  889. m_mapID2Object.RemoveAll();
  890. }
  891. //-----------------------------------------------------------------------
  892. // Summary:
  893. //     This member function is used to get start iteration position.
  894. // Returns: A POSITION value that indicates a starting position for
  895. //          iterating the map; or NULL if the map is empty.
  896. // See Also: GetNextElement, CMap::GetStartPosition
  897. //-----------------------------------------------------------------------
  898. POSITION GetStartPosition() {
  899. return m_mapID2Object.GetStartPosition();
  900. }
  901. //-----------------------------------------------------------------------
  902. // Summary:
  903. //      This member function is used to get next object pointer.
  904. // Parameters:
  905. //      rPos    - [in/out]  Iteration position of the element.
  906. //      rID     - [out]     Element ID.
  907. // Remarks:
  908. //      Call this method to iterate on elements stored in the map.
  909. //      InternalAddRef is not called for the returned object.
  910. //      rPos parameter value is set to the element next position
  911. //      or NULL if iterating is finished.
  912. // Returns:
  913. //      A pointer to the object which corresponds to the specified
  914. //      position (rPos parameter value).
  915. // See Also: GetStartPosition, CMap::GetNextAssoc
  916. //-----------------------------------------------------------------------
  917. _TObject* GetNextElement(POSITION& rPos, DWORD& rID)
  918. {
  919. TObjPtr ptrElement;
  920. m_mapID2Object.GetNextAssoc(rPos, rID, ptrElement);
  921. return (_TObject*)(CCmdTarget*)ptrElement;
  922. }
  923. //-----------------------------------------------------------------------
  924. // Summary:
  925. //      This member function is used to get object count.
  926. // Returns:
  927. //      Count of the objects in the map.
  928. // See Also: CMap::GetCount
  929. //-----------------------------------------------------------------------
  930. int GetCount()  {
  931. return (int)m_mapID2Object.GetCount();
  932. }
  933. protected:
  934. //typedef CXTPSmartPtrInternalT<_TObject> TObjPtr;       // Smart pointer object type.
  935. // to avoid warning C4786 CCmdTarget used.
  936. typedef CXTPSmartPtrInternalT<CCmdTarget> TObjPtr;       // Smart pointer object type.
  937. CMap<DWORD, DWORD, TObjPtr, TObjPtr&>  m_mapID2Object; // The map of ID to object.
  938. };
  939. //-----------------------------------------------------------------------
  940. // Summary:
  941. //     Call this member function to get a unique temporary event ID.
  942. // Returns:
  943. //     New value for event ID.
  944. //-----------------------------------------------------------------------
  945. static DWORD GetNextFreeTempID();
  946. static DWORD ms_dwNextFreeTempID; // Next unique event ID.
  947. CXTPCalendarOptions* m_pCalendarOptions;    // This member stores user's calendar view options.
  948. private:
  949. //{{AFX_CODEJOCK_PRIVATE
  950. void SetOptionsToUpdate(CXTPCalendarOptions* pOptions);
  951. //}}AFX_CODEJOCK_PRIVATE
  952. protected:
  953. };
  954. /////////////////////////////////////////////////////////////////////////////
  955. AFX_INLINE BOOL CXTPCalendarData::Open() {
  956. ASSERT(!m_bOpened);
  957. return m_bOpened = TRUE;
  958. }
  959. AFX_INLINE BOOL CXTPCalendarData::Create() {
  960. ASSERT(!m_bOpened);
  961. return m_bOpened = TRUE;
  962. }
  963. AFX_INLINE BOOL CXTPCalendarData::IsOpen() {
  964. return m_bOpened;
  965. }
  966. AFX_INLINE BOOL CXTPCalendarData::Save() {
  967. ASSERT(m_bOpened);
  968. return TRUE;
  969. }
  970. AFX_INLINE void CXTPCalendarData::Close() {
  971. ASSERT(m_bOpened);
  972. m_cache.SafeClose();
  973. m_bOpened = FALSE;
  974. }
  975. AFX_INLINE CXTPNotifyConnection* CXTPCalendarData::GetConnection() {
  976. return m_pConnect;
  977. }
  978. AFX_INLINE DWORD CXTPCalendarData::GetNextFreeTempID() {
  979. return ms_dwNextFreeTempID--;
  980. }
  981. AFX_INLINE CXTPCalendarEventLabels* CXTPCalendarData::GetLabelList() const {
  982. return m_pLabelList;
  983. }
  984. AFX_INLINE CXTPCalendarEventCategories* CXTPCalendarData::GetEventCategories() const {
  985. return m_pEventCategories;
  986. }
  987. AFX_INLINE CXTPCalendarSchedules* CXTPCalendarData::GetSchedules() const {
  988. return m_pSchedules;
  989. }
  990. AFX_INLINE void CXTPCalendarData::SetConnectionString(LPCTSTR lpszConnectionString) {
  991. ASSERT(lpszConnectionString);
  992. if (lpszConnectionString) {
  993. m_strConnectionString = lpszConnectionString;
  994. }
  995. }
  996. AFX_INLINE CString CXTPCalendarData::GetConnectionString() {
  997. return m_strConnectionString;
  998. }
  999. AFX_INLINE XTPCalendarDataProvider CXTPCalendarData::GetType() {
  1000. return m_typeProvider;
  1001. }
  1002. AFX_INLINE int CXTPCalendarData::GetCacheMode() const {
  1003. return m_cache.m_eCacheMode;
  1004. }
  1005. AFX_INLINE CXTPCalendarCustomProperties* CXTPCalendarData::GetCustomProperties() {
  1006. return m_pCustomProperties;
  1007. }
  1008. #endif // !defined(_XTPCALENDARDATA_H__)