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

对话框与窗口

开发平台:

Visual C++

  1. //-----------------------------------------------------------------------
  2. void AllowEdit(BOOL bAllowEdit);
  3. //-----------------------------------------------------------------------
  4. // Summary:
  5. //     Call this member to specify whether a CXTPReportRecordItem can be edited by
  6. //     single-clicking on the item.
  7. // Parameters:
  8. //     bEditOnClick - If TRUE, when the CXTPReportRecordItem is single-clicked,
  9. //                    the item will become editable.  The entire ReportControl
  10. //                    or the specific CXTPReportRecordItem must have the bAllowEdit
  11. //                    property set to TRUE for this to work.
  12. //                    If FALSE, the item must be double-clicked to become editable.
  13. // See Also: AllowEdit, IsAllowEdit, IsEditOnClick
  14. //-----------------------------------------------------------------------
  15. void EditOnClick(BOOL bEditOnClick);
  16. //-----------------------------------------------------------------------
  17. // Summary:
  18. //     Call this member to determine whether items are edited with a single-click.
  19. // Returns:
  20. //     TRUE it items can be edited with a single-click, FALSE is a
  21. //     double-click is needed to edit items.
  22. // See Also: AllowEdit, IsAllowEdit, EditOnClick
  23. //-----------------------------------------------------------------------
  24. BOOL IsEditOnClick() const;
  25. //-----------------------------------------------------------------------
  26. // Summary:
  27. //     Call this member to enable auto check mode for check box items.
  28. // Parameters:
  29. //     bAutoCheck - TRUE to enable auto check mode, FALSE to disable auto check mode.
  30. // Remarks:
  31. //     When TRUE, the check box will become checked or unchecked automatically when the
  32. //     user clicks on the check box.
  33. // See Also: IsAutoCheckItems, CXTPReportRecordItem::OnClick, CXTPReportRecordItem::OnChar
  34. //-----------------------------------------------------------------------
  35. void SetAutoCheckItems(BOOL bAutoCheck);
  36. //-----------------------------------------------------------------------
  37. // Summary:
  38. //     Call this member to determine id auto check mode for check box items is enabled.
  39. // Remarks:
  40. //     If TRUE is returned, the check box will become checked or unchecked automatically when the
  41. //     user clicks on the check box.
  42. // Returns:
  43. //      TRUE if auto check mode is enabled, FALSE if auto check mode is disable.
  44. // See Also: SetAutoCheckItems, CXTPReportRecordItem::OnClick, CXTPReportRecordItem::OnChar
  45. //-----------------------------------------------------------------------
  46. BOOL IsAutoCheckItems() const;
  47. //-----------------------------------------------------------------------
  48. // Summary:
  49. //     This method is called to start editing a report cell.
  50. //     It makes a specified cell focused and starts in-place editing
  51. //     control which was specified there.
  52. // Remarks:
  53. //     Note that all editing options should be enabled for this method
  54. //     to be executed successfully.
  55. // Parameters:
  56. //     pItemArgs - Arguments of item to be edit.
  57. // Remarks:
  58. //     Call this method with NULL as parameter to stop item edit.
  59. // See Also: AllowEdit, CXTPReportColumn::SetEditable
  60. //-----------------------------------------------------------------------
  61. void EditItem(XTP_REPORTRECORDITEM_ARGS* pItemArgs);
  62. //-----------------------------------------------------------------------
  63. // Summary:
  64. //     Retrieves in-place edit pointer
  65. // Returns:in-place
  66. //     Pointer to in-place edit control
  67. //-----------------------------------------------------------------------
  68. CXTPReportInplaceEdit* GetInplaceEdit() const;
  69. //-----------------------------------------------------------------------
  70. // Summary:
  71. //     Retrieves in-place buttons of report control
  72. // Returns:
  73. //     Collection of in-place buttons.
  74. //-----------------------------------------------------------------------
  75. CXTPReportInplaceButtons* GetInplaceButtons() const;
  76. //-----------------------------------------------------------------------
  77. // Summary:
  78. //     Retrieves in-place list of report controls
  79. // Returns:
  80. //     Pointer to in-place list.
  81. //-----------------------------------------------------------------------
  82. CXTPReportInplaceList* GetInplaceList() const;
  83. //-----------------------------------------------------------------------
  84. // Summary:
  85. //     Call this member to determine if the ReportControl has focus.
  86. // Returns:
  87. //     TRUE if the ReportControl has focus, FALSE otherwise.
  88. //-----------------------------------------------------------------------
  89. BOOL HasFocus() const;
  90. //-----------------------------------------------------------------------
  91. // Summary:
  92. //     Call this member to retrieve the currently active item, which
  93. //     is the item that has focus.
  94. // Returns:
  95. //     A pointer to the currently active(focused) CXTPReportRecordItem.
  96. //-----------------------------------------------------------------------
  97. CXTPReportRecordItem* GetActiveItem() const;
  98. //-----------------------------------------------------------------------
  99. // Summary:
  100. //     Call this member to specifies the indentation placed before the
  101. //     text of each child node in a hierarchical tree structure.
  102. // Parameters:
  103. //     nIndent - Indentation used when displaying child nodes.
  104. //-----------------------------------------------------------------------
  105. void SetTreeIndent(int nIndent);
  106. //-----------------------------------------------------------------------
  107. // Summary:
  108. //     Call this method to enable virtual mode of the control
  109. // Parameters:
  110. //     pVirtualRecord - record to be used as virtual for all rows.
  111. //     nCount - Count of virtual records.
  112. // Example:
  113. // <code>
  114. // class CVirtualRecord : public CXTPReportRecord
  115. // {
  116. // public:
  117. //     CVirtualRecord()
  118. //     {
  119. //         AddItem(new CXTPReportRecordItem());
  120. //         AddItem(new CXTPReportRecordItem());
  121. //         AddItem(new CXTPReportRecordItem());
  122. //     }
  123. //
  124. //     void GetItemMetrics (XTP_REPORTRECORDITEM_DRAWARGS* pDrawArgs, XTP_REPORTRECORDITEM_METRICS* pItemMetrics)
  125. //     {
  126. //         // Draw virtual record
  127. //     }
  128. // }
  129. // ...
  130. // m_wndReport.SetVirtualMode(new CVirtualRecord(), 540);
  131. // </code>
  132. // See Also: IsVirtualMode
  133. //-----------------------------------------------------------------------
  134. void SetVirtualMode(CXTPReportRecord* pVirtualRecord, int nCount);
  135. //-----------------------------------------------------------------------
  136. // Summary:
  137. //     Determines if control in virtual mode
  138. // Returns;
  139. //     TRUE if virtual mode is enabled; FALSE otherwise.
  140. // See Also: IsVirtualMode
  141. //-----------------------------------------------------------------------
  142. BOOL IsVirtualMode() const;
  143. //-----------------------------------------------------------------------
  144. // Summary:
  145. //     Returns the text from the associated filter edit control.
  146. // Returns:
  147. //     Text string entered by user inside filter edit control.
  148. // See Also: SetFilterText
  149. //-----------------------------------------------------------------------
  150. virtual CString GetFilterText();
  151. //-----------------------------------------------------------------------
  152. // Summary:
  153. //     Call this method to set new filter for control.
  154. // Parameters:
  155. //     strFilterText - Filter text to be applied for control.
  156. // Remarks:
  157. //     You must call Populate method to update rows.
  158. // See Also: GetFilterText, Populate
  159. //-----------------------------------------------------------------------
  160. virtual void SetFilterText(LPCTSTR strFilterText);
  161. //-----------------------------------------------------------------------
  162. // Summary:
  163. //     Determine if control search filter text in hidden columns too.
  164. //     This option is disabled by default.
  165. // Returns;
  166. //     TRUE if control search filter text in hidden columns; FALSE otherwise.
  167. // See Also: SetFilterHiddenColumns, GetFilterText, SetFilterText
  168. //-----------------------------------------------------------------------
  169. virtual BOOL IsFilterHiddenColumns() const;
  170. //-----------------------------------------------------------------------
  171. // Summary:
  172. //     Call this method to enable or disable search filter text in hidden
  173. //     columns.
  174. // Parameters:
  175. //     bFilterHidden - TRUE to search filter text in hidden columns;
  176. //                     FALSE to search in visible columns only.
  177. // Remarks:
  178. //     This option is disabled by default.
  179. //     You must call Populate method to update rows.
  180. // See Also: IsFilterHiddenColumns, GetFilterText, SetFilterText, Populate
  181. //-----------------------------------------------------------------------
  182. virtual void SetFilterHiddenColumns(BOOL bFilterHidden);
  183. //-----------------------------------------------------------------------
  184. // Summary:
  185. //     Register the window class if it has not already been registered.
  186. // Parameters:
  187. //     hInstance - Instance of resource where control is located
  188. // Returns:
  189. //     TRUE if the window class was successfully registered.
  190. //-----------------------------------------------------------------------
  191. BOOL RegisterWindowClass(HINSTANCE hInstance = NULL);
  192. //-----------------------------------------------------------------------
  193. // Summary:
  194. //      Returns TRUE if one or more records are selected indicating the
  195. //  Cut command can be used.
  196. // See Also:
  197. //      CanPaste, Cut, Copy, Paste.
  198. //-----------------------------------------------------------------------
  199. virtual BOOL CanCut();
  200. //-----------------------------------------------------------------------
  201. // Summary:
  202. //      Returns TRUE if one or more records are selected indicating the
  203. //  Copy command can be used.
  204. // See Also:
  205. //      CanPaste, Cut, Copy, Paste.
  206. //-----------------------------------------------------------------------
  207. virtual BOOL CanCopy();
  208. //-----------------------------------------------------------------------
  209. // Summary:
  210. //     Returns TRUE if BinaryRecords or Text data exists in the clipboard.
  211. // See Also:
  212. //      CanCut, CanCopy, Cut, Copy, Paste.
  213. //-----------------------------------------------------------------------
  214. virtual BOOL CanPaste();
  215. //-----------------------------------------------------------------------
  216. // Summary:
  217. //      Copy selected records data (in the Binary and Text data formats) to
  218. //      the clipboard and delete records.
  219. // See Also:
  220. //      CanCut, CanCopy, CanPaste, Copy, Paste,
  221. //      OnBeforeCopyToText, OnBeforePasteFromText, OnBeforePaste.
  222. //-----------------------------------------------------------------------
  223. virtual void Cut();
  224. //-----------------------------------------------------------------------
  225. // Summary:
  226. //      Copy selected records data (in the Binary and Text data formats) to
  227. //      the clipboard.
  228. // See Also:
  229. //      CanCut, CanCopy, CanPaste, Cut, Paste,
  230. //      OnBeforeCopyToText, OnBeforePasteFromText, OnBeforePaste.
  231. //-----------------------------------------------------------------------
  232. virtual void Copy();
  233. //-----------------------------------------------------------------------
  234. // Summary:
  235. //      Reads records from the clipboard and add them to records collection.
  236. //      The Binary data format is used rather than Text format.
  237. // See Also:
  238. //      CanCut, CanCopy, CanPaste, Cut, Copy,
  239. //      OnBeforeCopyToText, OnBeforePasteFromText, OnBeforePaste.
  240. //-----------------------------------------------------------------------
  241. virtual void Paste();
  242. //-----------------------------------------------------------------------
  243. // Summary:
  244. //     Returns TRUE if inplace edit control is active (visible and focused),
  245. //     FALSE otherwise.
  246. // See Also:
  247. //      GetInplaceEdit.
  248. //-----------------------------------------------------------------------
  249. virtual BOOL IsEditMode();
  250. //-----------------------------------------------------------------------
  251. // Summary:
  252. //     Set compare function to sort.
  253. // Parameters:
  254. //     pCompareFunc - A T_CompareFunc function pointer that is used
  255. //                    to compare rows or NULL to use the default one.
  256. // Remarks:
  257. //     This method uses Visual C++ run-time library (MSVCRT)
  258. //     implementation of the quick-sort function, qsort, for sorting
  259. //     stored CXTPReportRow objects.
  260. //     If pCompareFunc = NULL the default compare function is used.
  261. //     Call Populate() method to resort items.
  262. //
  263. // See Also:
  264. //     SortRows, CXTPReportRows::SortEx, CXTPReportRows::Sort,
  265. //     CXTPReportRows::T_CompareFunc
  266. //-----------------------------------------------------------------------
  267. virtual void SetRowsCompareFunc(CXTPReportRows::T_CompareFunc pCompareFunc);
  268. //-----------------------------------------------------------------------
  269. // Summary:
  270. //      Use this function to determine is sort order applied for record children.
  271. // Returns:
  272. //      TRUE if sort order applied for record children, FALSE otherwise.
  273. //-----------------------------------------------------------------------
  274. virtual BOOL IsSortRecordChilds();
  275. //-----------------------------------------------------------------------
  276. // Summary:
  277. //     Call this method to apply sort order for record children
  278. // Parameters:
  279. //     bSortRecordChilds - TRUE to sort record children.
  280. //-----------------------------------------------------------------------
  281. virtual void SetSortRecordChilds(BOOL bSortRecordChilds);
  282. //-----------------------------------------------------------------------
  283. // Summary:
  284. //      Use this function to get horizontal scrolling step.
  285. // Returns:
  286. //      Horizontal scrolling step in pixels.
  287. //-----------------------------------------------------------------------
  288. virtual int GetHScrollStep();
  289. //-----------------------------------------------------------------------
  290. // Summary:
  291. //      Use this function to set horizontal scrolling step.
  292. // Parameters:
  293. //      nStep - Horizontal scrolling step in pixels.
  294. //-----------------------------------------------------------------------
  295. virtual void SetHScrollStep(int nStep);
  296. //-----------------------------------------------------------------------
  297. // Summary:
  298. //     Call this member to allow the text in all CXTPReportRecordItem(s) to be edited (for header records only).
  299. //     This will add an edit box to the item where the text can be edited.
  300. // Parameters:
  301. //     bAllowEdit - TRUE to add an edit box to the CXTPReportRecordItem(s) so they are editable.
  302. //                  FALSE to remove the edit box and not allow them to be edited.
  303. // See Also: IsHeaderRowsAllowEdit, EditOnClick, IsEditOnClick
  304. //-----------------------------------------------------------------------
  305. void HeaderRowsAllowEdit(BOOL bAllowEdit);
  306. //-----------------------------------------------------------------------
  307. // Summary:
  308. //     Call this member to allow the text in all CXTPReportRecordItem(s) to be edited (for footer records only).
  309. //     This will add an edit box to the item where the text can be edited.
  310. // Parameters:
  311. //     bAllowEdit - TRUE to add an edit box to the CXTPReportRecordItem(s) so they are editable.
  312. //                  FALSE to remove the edit box and not allow them to be edited.
  313. // See Also: IsFooterRowsAllowEdit, EditOnClick, IsEditOnClick
  314. //-----------------------------------------------------------------------
  315. void FooterRowsAllowEdit(BOOL bAllowEdit);
  316. //-----------------------------------------------------------------------
  317. // Summary:
  318. //     Call this member to determine if the CXTPReportRecordItem(s) are editable (for header records only).
  319. // Returns:
  320. //     TRUE is the CXTPReportRecordItem(s) are editable, FALSE otherwise.
  321. // See Also: HeaderRowsAllowEdit, EditOnClick, IsEditOnClick
  322. //-----------------------------------------------------------------------
  323. BOOL IsHeaderRowsAllowEdit() const;
  324. //-----------------------------------------------------------------------
  325. // Summary:
  326. //     Call this member to determine if the CXTPReportRecordItem(s) are editable (for footer records only).
  327. // Returns:
  328. //     TRUE is the CXTPReportRecordItem(s) are editable, FALSE otherwise.
  329. // See Also: FooterRowsAllowEdit, EditOnClick, IsEditOnClick
  330. //-----------------------------------------------------------------------
  331. BOOL IsFooterRowsAllowEdit() const;
  332. //-----------------------------------------------------------------------
  333. // Summary:
  334. //     Call this member to determine if rows selection is enabled.
  335. // Returns:
  336. //     TRUE if rows selection is enabled, FALSE otherwise.
  337. // See Also: SelectionEnable
  338. //-----------------------------------------------------------------------
  339. BOOL IsSelectionEnabled() const;
  340. //-----------------------------------------------------------------------
  341. // Summary:
  342. //     Call this member to enable rows selection.
  343. // Parameters:
  344. //     bEnable - TRUE to enable rows selection.
  345. //                  FALSE to disable rows selection.
  346. // See Also: IsSelectionEnabled
  347. //-----------------------------------------------------------------------
  348. void SelectionEnable(BOOL bEnable);
  349. //-----------------------------------------------------------------------
  350. // Summary:
  351. //     Call this member to determine if the row focus is visible.
  352. // Returns:
  353. //     TRUE if the the row focus is visible, FALSE otherwise.
  354. // See Also: ShowRowFocus
  355. //-----------------------------------------------------------------------
  356. BOOL IsRowFocusVisible() const;
  357. //-----------------------------------------------------------------------
  358. // Summary:
  359. //     Call this member to enable showing the row focus.
  360. // Parameters:
  361. //     bEnable - TRUE to enable showing the row focus.
  362. //                  FALSE to disable showing the row focus.
  363. // See Also: IsRowFocusVisible
  364. //-----------------------------------------------------------------------
  365. void ShowRowFocus(BOOL bShow);
  366. //-----------------------------------------------------------------------
  367. // Summary:
  368. //     Call this member to allow user moving the selection to header rows.
  369. // Parameters:
  370. //     bAllowAccess - TRUE - selection of header rows is allowed, FALSE otherwise.
  371. // See Also: IsHeaderRowsAllowAccess
  372. //-----------------------------------------------------------------------
  373. void HeaderRowsAllowAccess(BOOL bAllowAccess);
  374. //-----------------------------------------------------------------------
  375. // Summary:
  376. //     Call this member to allow user moving the selection to footer rows.
  377. // Parameters:
  378. //     bAllowAccess - TRUE - selection of footer rows is allowed, FALSE otherwise.
  379. // See Also: IsFooterRowsAllowAccess
  380. //-----------------------------------------------------------------------
  381. void FooterRowsAllowAccess(BOOL bAllowAccess);
  382. //-----------------------------------------------------------------------
  383. // Summary:
  384. //     Call this member to determine if user can move selection to header rows.
  385. // Returns:
  386. //     TRUE if user can move selection to header rows, FALSE otherwise.
  387. // See Also: HeaderRowsAllowAccess.
  388. //-----------------------------------------------------------------------
  389. BOOL IsHeaderRowsAllowAccess() const;
  390. //-----------------------------------------------------------------------
  391. // Summary:
  392. //     Call this member to determine if user can move selection to footer rows.
  393. // Returns:
  394. //     TRUE if user can move selection to footer rows, FALSE otherwise.
  395. // See Also: FooterRowsAllowAccess.
  396. //-----------------------------------------------------------------------
  397. BOOL IsFooterRowsAllowAccess() const;
  398. //-----------------------------------------------------------------------
  399. // Summary:
  400. //     Call this member to enable selection in header rows.
  401. // Parameters:
  402. //     bEnable - TRUE - selection of header rows is enabled, FALSE otherwise.
  403. // See Also: IsHeaderRowsSelectionEnabled
  404. //-----------------------------------------------------------------------
  405. void HeaderRowsEnableSelection(BOOL bEnable);
  406. //-----------------------------------------------------------------------
  407. // Summary:
  408. //     Call this member to determine if selection in header rows is enabled.
  409. // Returns:
  410. //     TRUE if selection in header rows is enabled, FALSE otherwise.
  411. // See Also: HeaderRowsEnableSelection.
  412. //-----------------------------------------------------------------------
  413. BOOL IsHeaderRowsSelectionEnabled() const;
  414. //-----------------------------------------------------------------------
  415. // Summary:
  416. //     Call this member to enable selection in footer rows.
  417. // Parameters:
  418. //     bEnable - TRUE - selection of footer rows is enabled, FALSE otherwise.
  419. // See Also: IsFooterRowsSelectionEnabled
  420. //-----------------------------------------------------------------------
  421. void FooterRowsEnableSelection(BOOL bEnable);
  422. //-----------------------------------------------------------------------
  423. // Summary:
  424. //     Call this member to determine if selection in footer rows is enabled.
  425. // Returns:
  426. //     TRUE if selection in footer rows is enabled, FALSE otherwise.
  427. // See Also: FooterRowsEnableSelection.
  428. //-----------------------------------------------------------------------
  429. BOOL IsFooterRowsSelectionEnabled() const;
  430. //-----------------------------------------------------------------------
  431. // Summary:
  432. //     Call this member to determine current watermark alignment flags.
  433. // Returns:
  434. //     Current watermark alignment.
  435. // See Also: XTPReportWatermarkAlignment, SetWatermarkAlignment.
  436. //-----------------------------------------------------------------------
  437. int GetWatermarkAlignment() const;
  438. //-----------------------------------------------------------------------
  439. // Summary:
  440. //     Call this member to set watermark alignment flags.
  441. // Parameters:
  442. //     nWatermarkAlignment - watermark alignment flags.
  443. // See Also: XTPReportWatermarkAlignment, GetWatermarkAlignment.
  444. //-----------------------------------------------------------------------
  445. void SetWatermarkAlignment(int nWatermarkAlignment);
  446. protected:
  447. //-----------------------------------------------------------------------
  448. // Summary:
  449. //     Sets new operational control mouse mode.
  450. // Parameters:
  451. //     nMode - New mouse mode. For available values, see XTPReportMouseMode enum.
  452. // See Also: XTPReportMouseMode overview, GetMouseMode
  453. //-----------------------------------------------------------------------
  454. void SetMouseMode(XTPReportMouseMode nMode);
  455. //-----------------------------------------------------------------------
  456. // Summary:
  457. //     Returns the current control mouse mode.
  458. // Returns:
  459. //     Current control mouse mode.
  460. //     For available values, see XTPReportMouseMode enum.
  461. // See Also: XTPReportMouseMode overview, SetMouseMode
  462. //-----------------------------------------------------------------------
  463. XTPReportMouseMode GetMouseMode() const;
  464. //-----------------------------------------------------------------------
  465. // Summary:
  466. //     Performs all drawing logic.
  467. // Parameters:
  468. //     pDC - Provided DC to draw control image with.
  469. //-----------------------------------------------------------------------
  470. virtual void OnDraw(CDC* pDC);
  471. //-----------------------------------------------------------------------
  472. // Summary:
  473. //     Draws all rows on the provided DC.
  474. // Parameters:
  475. //     pDC - Provided DC to draw rows image with.
  476. //     rcClient - A rectangle to draw rows image into.
  477. //-----------------------------------------------------------------------
  478. virtual void DrawRows(CDC* pDC, CRect& rcClient);
  479. //-----------------------------------------------------------------------
  480. // Summary:
  481. //     Draws 'NoItems' text on the provided DC.
  482. // Parameters:
  483. //     pDC - Provided DC to draw text.
  484. //     rcClient - A rectangle to draw text into.
  485. //-----------------------------------------------------------------------
  486. virtual void DrawNoItems(CDC* pDC, const CRect& rcClient);
  487. //-----------------------------------------------------------------------
  488. // Summary:
  489. //     Returns changed status flag of the control. Used for caching control image drawing.
  490. // Returns:
  491. //     TRUE if the internal control state was changed since last drawing, FALSE otherwise.
  492. //-----------------------------------------------------------------------
  493. BOOL IsChanged() const;
  494. //-----------------------------------------------------------------------
  495. // Summary:
  496. //     Sets new changed status flag for the control. Used for caching control image drawing.
  497. // Parameters:
  498. //     bChanged - TRUE when something was changed in the control contents and control needs to be republished.
  499. //-----------------------------------------------------------------------
  500. void SetChanged(BOOL bChanged = TRUE);
  501. //-----------------------------------------------------------------------
  502. // Summary:
  503. //     Sorts rows corresponding to the sort order taken from columns.
  504. // Parameters:
  505. //     pRows - A rows collection to sort.
  506. //-----------------------------------------------------------------------
  507. virtual void SortRows(CXTPReportRows* pRows);
  508. //-----------------------------------------------------------------------
  509. // Summary:
  510. //     Sorts rows tree corresponding to the sort order taken from columns.
  511. // Parameters:
  512. //     pTree - A rows tree collection to sort.
  513. //-----------------------------------------------------------------------
  514. virtual void SortTree(CXTPReportRows* pTree);
  515. //-----------------------------------------------------------------------
  516. // Summary:
  517. //     ReSorts rows tree corresponding to the sort order taken from columns.
  518. //     Works faster than Populate.
  519. //-----------------------------------------------------------------------
  520. virtual void ReSortRows();
  521. //-----------------------------------------------------------------------
  522. // Summary:
  523. //     Update field chooser control with its content.
  524. //-----------------------------------------------------------------------
  525. void UpdateSubList();
  526. //-----------------------------------------------------------------------
  527. // Summary:
  528. //     Builds rows tree based on provided data record.
  529. // Parameters:
  530. //     pTree      - Rows tree to add items into.
  531. //     pParentRow - Parent tree row.
  532. //     pRecords   - Records collection for transferring to rows.
  533. // Remarks:
  534. //     Builds rows tree based on provided data record.
  535. //     Recursively calls itself when build nested branches of rows
  536. //-----------------------------------------------------------------------
  537. virtual void BuildTree(CXTPReportRows* pTree, CXTPReportRow* pParentRow, CXTPReportRecords* pRecords);
  538. //-----------------------------------------------------------------------
  539. // Summary:
  540. //     Collapses all children of the specified row.
  541. // Parameters:
  542. //     pRow - A row to collapse.
  543. //-----------------------------------------------------------------------
  544. virtual void _DoCollapse(CXTPReportRow* pRow);
  545. //-----------------------------------------------------------------------
  546. // Summary:
  547. //     Expands all children of the specified row.
  548. // Parameters:
  549. //     nIndex - An index to insert rows from.
  550. //     pRow   - A row to expand.
  551. // Returns:
  552. //     A count of the newly added rows or void.
  553. //-----------------------------------------------------------------------
  554. virtual int _DoExpand(int nIndex, CXTPReportRow* pRow);
  555. virtual void _DoExpand(CXTPReportRow* pRow); // <COMBINE CXTPReportControl::_DoExpand@int@CXTPReportRow*>
  556. //-----------------------------------------------------------------------
  557. // Summary:
  558. //     Inserts the specified row at the specified position.
  559. // Parameters:
  560. //     nIndex - A position to insert row at.
  561. //     pRow   - A row to insert.
  562. // Remarks:
  563. //     Inserts the specified row to the rows array at the specified position
  564. //     with all its children expanded. Use _DoExpand() to expand
  565. //     all child items
  566. // Returns:
  567. //     A number of the inserted rows.
  568. //-----------------------------------------------------------------------
  569. virtual int InsertRow(int nIndex, CXTPReportRow* pRow);
  570. //-----------------------------------------------------------------------
  571. // Summary:
  572. //     Recalculates indexes of all rows.
  573. // Parameters:
  574. //     bAdjustLayout - If TRUE, layout is adjusted.
  575. //     bReverseOrder - If TRUE, row indices are updated in reverse order, starting from the last row.
  576. //-----------------------------------------------------------------------
  577. virtual void RefreshIndexes(BOOL bAdjustLayout = TRUE, BOOL bReverseOrder = FALSE);
  578. virtual void _RefreshIndexes(BOOL bAdjustLayout = TRUE, BOOL bReverseOrder = FALSE);
  579. //-----------------------------------------------------------------------
  580. // Summary:
  581. //     Checks a record for filter text.
  582. // Parameters:
  583. //     pRecord         - A record to apply filter to.
  584. //     strFilterText   - Filter string text.
  585. //     bIncludePreview - Include preview item in filtering or not.
  586. // Remarks:
  587. //     This member function represents filter functionality. First, it parses
  588. //     the input text of a filter string by tokens; second it enumerates all visible
  589. //     columns to find text matching to the filter string. Returns TRUE if
  590. //     matching found, FALSE otherwise
  591. // Returns:
  592. //     TRUE if record is filtered with the specified filter,
  593. //     FALSE otherwise.
  594. //-----------------------------------------------------------------------
  595. virtual BOOL ApplyFilter(CXTPReportRecord* pRecord, CString strFilterText, BOOL bIncludePreview);
  596. //-----------------------------------------------------------------------
  597. // Summary:
  598. //     This member function is called after a user selects a row or a column
  599. // Remarks:
  600. //     After user selects row or column, ReportControl sends notification to the
  601. //     parent window by calling OnSelectionChanged()
  602. // See Also: XTP_NM_REPORT_SELCHANGED, SendNotifyMessage()
  603. //-----------------------------------------------------------------------
  604. virtual void OnSelectionChanged();
  605. //-----------------------------------------------------------------------
  606. // Summary:
  607. //     This member function is called before the focus change
  608. // Parameters:
  609. //     pNewRow  - A pointer to row object which been focused;
  610. //     pNewCol  - A pointer to column object which been focused;
  611. // Remarks:
  612. //     Before user changes focused row or column, ReportControl sends notification to the
  613. //     parent window by calling OnFocusChanging()
  614. // Returns:
  615. //     Returns True if selection changing is OK, False if selection is to be
  616. //     canceled.
  617. // See Also: XTP_NM_REPORT_FOCUS_CHANGING, SendNotifyMessage(), OnFocusChanged
  618. //-----------------------------------------------------------------------
  619. virtual BOOL OnFocusChanging(CXTPReportRow* pNewRow, CXTPReportColumn* pNewCol);
  620. //-----------------------------------------------------------------------
  621. // Summary:
  622. //     Returns drawing metrics for the row.
  623. // Parameters:
  624. //     pDrawArgs    - Pointer to the provided draw arguments structure for calculating metrics.
  625. //     pItemMetrics - Pointer to the metrics structure to fill.
  626. //-----------------------------------------------------------------------
  627. virtual void GetItemMetrics(XTP_REPORTRECORDITEM_DRAWARGS* pDrawArgs, XTP_REPORTRECORDITEM_METRICS* pItemMetrics);
  628. //-----------------------------------------------------------------------
  629. // Summary:
  630. //     This method is called to create new CXTPReportRow object. Overwrite it
  631. //     to use derived CXTPReportRow class.
  632. // Returns:
  633. //     New CXTPReportRow object.
  634. //-----------------------------------------------------------------------
  635. virtual CXTPReportRow* CreateRow();
  636. //-----------------------------------------------------------------------
  637. // Summary:
  638. //     This method is called to create new CXTPReportGroupRow object. Overwrite it
  639. //     to use derived CXTPReportGroupRow class.
  640. // Returns:
  641. //     New CXTPReportGroupRow object.
  642. //-----------------------------------------------------------------------
  643. virtual CXTPReportGroupRow* CreateGroupRow();
  644. //-----------------------------------------------------------------------
  645. // Summary:
  646. //     This method is called to create new CXTPReportRow object for
  647. //     header/footer rows. Overwrite it to use derived CXTPReportRow class.
  648. // Returns:
  649. //     New CXTPReportRow object.
  650. //-----------------------------------------------------------------------
  651. virtual CXTPReportRow* CreateHeaderFooterRow();
  652. //-----------------------------------------------------------------------
  653. // Summary:
  654. //     This method is called when user start drag row
  655. // Parameters:
  656. //     point - Drag point
  657. // Remarks:
  658. //     Use can override this method or catch LVN_BEGINDRAG message to proceed drag
  659. //     operations.
  660. //-----------------------------------------------------------------------
  661. virtual void OnBeginDrag(CPoint point);
  662. //-----------------------------------------------------------------------
  663. // Summary:
  664. //     This method is called before add record text data to the clipboard.
  665. // Parameters:
  666. //     pRecord      - [in] A pointer to source record;
  667. //     rarStrings   - [in/out] Reference to strings array with record items
  668. //                    values. By default this array contains visible items
  669. //                    captions.
  670. // Remarks:
  671. //     If you would like to customize text data for the clipboard you can
  672. //     change rarStrings as you need.
  673. //
  674. //     Default implementation sends XTP_NM_REPORT_BEFORE_COPY_TOTEXT
  675. //     notification.
  676. // Returns:
  677. //     TRUE to cancel copying this record to the clipboard in text format,
  678. //     FALSE to continue.
  679. // See Also:
  680. //     OnBeforePasteFromText, OnBeforePaste, Cut, Copy, Paste.
  681. //-----------------------------------------------------------------------
  682. virtual BOOL OnBeforeCopyToText(CXTPReportRecord* pRecord, CStringArray& rarStrings);
  683. //-----------------------------------------------------------------------
  684. // Summary:
  685. //     This method is called before creating new record using text data
  686. //     from the clipboard.
  687. // Parameters:
  688. //     arStrings    - [in] Strings array with record items values.
  689. //     ppRecord     - [out] A pointer to new record pointer;
  690. // Remarks:
  691. //     If you would like to customize creating new record from text data
  692. //     you have to create new record object with record items and fill
  693. //     them using default values and strings provided in arStrings parameter.
  694. //
  695. //     If new record will not be set to ppRecord parameter, control will
  696. //     create CXTPReportRecord object with
  697. //     CXTPReportRecordItemVariant items and fill visible items using
  698. //     strings provided in arStrings parameter.
  699. //
  700. //     Default implementation sends XTP_NM_REPORT_BEFORE_PASTE_FROMTEXT
  701. //     notification.
  702. // Returns:
  703. //     TRUE to cancel adding this record, FALSE to continue.
  704. // See Also:
  705. //     OnBeforeCopyToText, OnBeforePaste, Cut, Copy, Paste.
  706. //-----------------------------------------------------------------------
  707. virtual BOOL OnBeforePasteFromText(CStringArray& arStrings, CXTPReportRecord** ppRecord);
  708. //-----------------------------------------------------------------------
  709. // Summary:
  710. //     This method is called after creating new record using binary data
  711. //     from the clipboard, but before add it to records collection.
  712. // Parameters:
  713. //     ppRecord     - [in/out] A pointer to new record pointer;
  714. // Remarks:
  715. //     If you would like to customize new record created from binary data
  716. //     you may to create new or change provided record using
  717. //     ppRecord parameter.
  718. //
  719. //     Default implementation sends XTP_NM_REPORT_BEFORE_PASTE
  720. //     notification.
  721. // Returns:
  722. //     TRUE to cancel adding this record, FALSE to continue.
  723. // See Also:
  724. //     OnBeforeCopyToText, OnBeforePasteFromText, Cut, Copy, Paste.
  725. //-----------------------------------------------------------------------
  726. virtual BOOL OnBeforePaste(CXTPReportRecord** ppRecord);
  727. //-----------------------------------------------------------------------
  728. // Summary:
  729. //     This method is called before processing OnKeyDown event.
  730. // Parameters:
  731. //     rnChar     - [in/out] A reference to variable which specifies
  732. //                  the virtual key code of the given key. For a list of
  733. //                  of standard virtual key codes, see Winuser.h.
  734. //     nRepCnt    - [in] Repeat count (the number of times the keystroke
  735. //                  is repeated as a result of the user holding down the key).
  736. //     nFlags     - [in] Specifies the scan code, key-transition code,
  737. //                  previous key state, and context code.
  738. // Remarks:
  739. //     If you would like to customize keyboard behavior you can change
  740. //     rnChar parameter value or perform your logic and return FALSE to
  741. //     disable default processing.
  742. //
  743. //     Default implementation sends XTP_NM_REPORT_PREVIEWKEYDOWN
  744. //     notification.
  745. // Returns:
  746. //     TRUE to continue processing key, FALSE to cancel.
  747. // See Also:
  748. //     OnKeyDown, CWnd::OnKeyDown, XTP_NM_REPORT_PREVIEWKEYDOWN.
  749. //-----------------------------------------------------------------------
  750. virtual BOOL OnPreviewKeyDown(UINT& rnChar, UINT nRepCnt, UINT nFlags);
  751. //-----------------------------------------------------------------------
  752. // Summary:
  753. //     This method is used by the report control to calculate BestFit
  754. //     column width.
  755. // Parameters:
  756. //     pColumn - Pointer to a column for width calculation.
  757. // Returns:
  758. //     BestFit column width (or zero).
  759. //-----------------------------------------------------------------------
  760. virtual int OnGetColumnDataBestFitWidth(CXTPReportColumn* pColumn);
  761. //-----------------------------------------------------------------------
  762. // Summary:
  763. //     This method is used by the report control to calculate items
  764. //     captions maximum width.
  765. // Parameters:
  766. //     pDC      - Pointer to a compatible CDC object.
  767. //     pRows    - Pointer to a rows collection.
  768. //     pColumn  - Pointer to a column for width calculation.
  769. // Returns:
  770. //     Items captions maximum width.
  771. //-----------------------------------------------------------------------
  772. virtual int OnGetItemsCaptionMaxWidth(CDC* pDC, CXTPReportRows* pRows,
  773.   CXTPReportColumn* pColumn);
  774. //-----------------------------------------------------------------------
  775. // Summary:
  776. //     This method is used to enable monitoring mouse position for automatic
  777. //     vertical scrolling.
  778. // Remarks:
  779. //     Used when dragging records.
  780. // See Also:
  781. //     EnsureStopAutoVertScroll, DoAutoVertScrollIfNeed
  782. //-----------------------------------------------------------------------
  783. virtual void EnsureStartAutoVertScroll();
  784. //-----------------------------------------------------------------------
  785. // Summary:
  786. //     This method is used to stop monitoring mouse position for automatic
  787. //     vertical scrolling.
  788. // Remarks:
  789. //     Used when dragging records.
  790. // See Also:
  791. //     EnsureStartAutoVertScroll, DoAutoVertScrollIfNeed
  792. //-----------------------------------------------------------------------
  793. virtual void EnsureStopAutoVertScroll();
  794. //-----------------------------------------------------------------------
  795. // Summary:
  796. //     This method is used to monitoring mouse position. If mouse
  797. //     will be moved to 20 pixels before top or before bottom report borders
  798. //     the control will be scrolled vertically.
  799. // Parameters:
  800. //     ptClick - Coordinates of initial click (or mouse down).
  801. //     pt      - Current mouse position.
  802. // Remarks:
  803. //     Used when dragging records.
  804. // See Also:
  805. //     EnsureStartAutoVertScroll, EnsureStopAutoVertScroll
  806. //-----------------------------------------------------------------------
  807. virtual void DoAutoVertScrollIfNeed(CPoint ptClick, CPoint pt);
  808. //-----------------------------------------------------------------------
  809. // Summary:
  810. //     Draws fixed rows on the provided DC.
  811. // Parameters:
  812. //     pDC - Provided DC to draw header rows image with.
  813. //     rcClient - A rectangle to draw header rows image into.
  814. //     pRows - Pointer to header/footer record rows.
  815. //-----------------------------------------------------------------------
  816. virtual void DrawFixedRows(CDC* pDC, CRect& rcClient, CXTPReportRows* pRows);
  817. //-----------------------------------------------------------------------
  818. // Summary:
  819. //     Returns calculated rows height.
  820. // Parameters:
  821. //     pDC   - Pointer to the used Device Context.
  822. //     nTotalWidth - Width of the row
  823. //     nMaxHeight - The maximum rows height to stop calculation.
  824. //                  Set this parameter as -1 to calculate all rows height.
  825. // Returns:
  826. //     The height of the default rectangle where row's items will draw.
  827. // Example:
  828. //     <code>int nHeaderRowsHeight = GetRowHeight(pDC, pRow)</code>
  829. //-----------------------------------------------------------------------
  830. virtual int GetRowsHeight(CXTPReportRows* pRows, int nTotalWidth, int nMaxHeight = -1);
  831. //-----------------------------------------------------------------------
  832. // Summary:
  833. //     Returns header divider height.
  834. // Parameters:
  835. //     pDC   - Pointer to the used Device Context.
  836. // Returns:
  837. //     The height of the header divider, depending on the chosen header divider style.
  838. // See Also:
  839. //     XTPReportFixedRowsDividerStyle in XTPReportPaintManager.h
  840. //-----------------------------------------------------------------------
  841. virtual int GetHeaderRowsDividerHeight();
  842. //-----------------------------------------------------------------------
  843. // Summary:
  844. //     Returns footer divider height.
  845. // Parameters:
  846. //     pDC   - Pointer to the used Device Context.
  847. // Returns:
  848. //     The height of the header divider, depending on the chosen footer divider style.
  849. // See Also:
  850. //     XTPReportFixedRowsDividerStyle in XTPReportPaintManager.h
  851. //-----------------------------------------------------------------------
  852. virtual int GetFooterRowsDividerHeight();
  853. //-----------------------------------------------------------------------
  854. // Summary:
  855. //     Sets a watermark bitmap to be shown in the report control background.
  856. // Parameters:
  857. //     hBitmap - bitmap handle.
  858. //     szPath - path to bitmap file.
  859. //     Transparency - transparency value.
  860. // Returns:
  861. //     TRUE if watermark bitmap successfully added or removed, FALSE otherwise.
  862. //-----------------------------------------------------------------------
  863. virtual BOOL SetWatermarkBitmap(HBITMAP hBitmap, BYTE Transparency);
  864. virtual BOOL SetWatermarkBitmap(LPCTSTR szPath, BYTE Transparency); //<COMBINE SetWatermarkBitmap@HBITMAP@BYTE>
  865. //-----------------------------------------------------------------------
  866. // Summary:
  867. //     Draws fixed rows divider on the provided DC.
  868. // Parameters:
  869. //     pDC - Provided DC to draw fixed rows divider image with.
  870. //     rcClient - A rectangle to draw fixed rows divider into.
  871. //     bHeaderRows - TRUE if the divider is under header rows; FALSE - if above footer rows.
  872. //-----------------------------------------------------------------------
  873. void DrawFixedRecordsDivider(CDC* pDC, CRect& rcClient, BOOL bHeaderRows);
  874. //-----------------------------------------------------------------------
  875. // Summary:
  876. //     This method is used to notify about changing constraint selection.
  877. // Parameters:
  878. //     pRow         - A pointer to current row object;
  879. //     pItem        - A pointer to current record item object;
  880. //     pColumn      - A pointer to current column object;
  881. //     pConstraint  - A pointer to hot selected constraint;
  882. // Remarks:
  883. //     Send for every selection change before new selection applied or canceled.
  884. // Returns:
  885. //     TRUE if notification successfully sent, FALSE otherwise.
  886. //-----------------------------------------------------------------------
  887. virtual BOOL OnConstraintSelecting(CXTPReportRow* pRow, CXTPReportRecordItem* pItem, CXTPReportColumn* pColumn,
  888.    CXTPReportRecordItemConstraint* pConstraint);
  889. //-----------------------------------------------------------------------
  890. // Summary:
  891. //     This method is used to notify about changing constraint selection.
  892. // Parameters:
  893. //     pRow             - A pointer to current row object;
  894. //     pItem            - A pointer to current record item object;
  895. //     rstrToolTipText  - A reference to CString object to customize tool tip
  896. //                        text. It contains default tool tip text;
  897. // Remarks:
  898. //     If rstrToolTipText set to empty - the default tool tip will be shown
  899. //     when not enough space to draw item text.
  900. //     If rstrToolTipText set to single space (" ") no tool tip will be shown.
  901. // Returns:
  902. //     A reference to XTP_NM_REPORTTOOLTIPINFO structure.
  903. //-----------------------------------------------------------------------
  904. virtual const XTP_NM_REPORTTOOLTIPINFO& OnGetToolTipInfo(CXTPReportRow* pRow, CXTPReportRecordItem* pItem, CString& rstrToolTipText);
  905. //-----------------------------------------------------------------------
  906. // Summary:
  907. //     Call this method to retrieve report element rectangle.
  908. // Returns:
  909. //     Report element rectangle.
  910. //-----------------------------------------------------------------------
  911. CRect GetElementRect(int nElement) const;
  912. protected:
  913. //{{AFX_CODEJOCK_PRIVATE
  914. virtual CString _GetSelectedRowsVisibleColsText();
  915. BOOL _GetSelectedRows(CXTPReportRecords* pRecords, CXTPInternalCollectionT<CXTPReportRow> * pRows = NULL);
  916. void _SelectRows(CXTPReportRecords* pRecords);
  917. virtual BOOL _ReadRecodsFromText(LPCTSTR pcszText, CXTPReportRecords& rarRecords);
  918. virtual CXTPReportRecord* _CreateRecodFromText(LPCTSTR pcszRecord);
  919. virtual BOOL _WriteSelectedRowsData(CXTPPropExchange* pPX);
  920. virtual BOOL _ReadRecodsFromData(CXTPPropExchange* pPX, CXTPReportRecords& rarRecords);
  921. BOOL _WriteRecordsData(CXTPPropExchange* pPX, CXTPReportRecords* pRecords);
  922. virtual void DrawDropMarker(CDC* pDC);
  923. //}}AFX_CODEJOCK_PRIVATE
  924. protected:
  925. //-----------------------------------------------------------------------
  926. // Summary:
  927. //     Adjust control indentation properties depending on current tree depth.
  928. // See Also: GetIndent
  929. //-----------------------------------------------------------------------
  930. void AdjustIndentation();
  931. protected:
  932. //-----------------------------------------------------------------------
  933. // Summary:
  934. //     This member is called when an item is dragged over the report control.
  935. // Parameters:
  936. //     pDataObject - Points to the COleDataObject being dragged over the
  937. //                   drop target.
  938. //     dwKeyState  - State of keys on keyboard.  Contains the state of the
  939. //                   modifier keys. This is a combination of any number of
  940. //                   the following: MK_CONTROL, MK_SHIFT, MK_ALT, MK_LBUTTON,
  941. //                   MK_MBUTTON, and MK_RBUTTON.
  942. //     point - The current mouse position relative to the report control.
  943. //     nState - The transition state (0 - enter, 1 - leave, 2 - over).
  944. // Returns:
  945. //     A value from the DROPEFFECT enumerated type, which indicates the type
  946. //     of drop that would occur if the user dropped the object at this
  947. //     position. The type of drop often depends on the current key state as
  948. //     indicated by dwKeyState. A standard mapping of keystates to DROPEFFECT
  949. //     values is:
  950. //       * <b>DROPEFFECT_NONE</b> The data object cannot be dropped in this
  951. //                                window.
  952. //       * <b>DROPEFFECT_COPY</b> for <b>MK_CONTROL</b>  Creates a copy of
  953. //                                                       the dropped object.
  954. //       * <b>DROPEFFECT_MOVE</b> for <b>MK_ALT</b> Creates a copy of the dropped
  955. //                                                  object and delete the original object.
  956. //                                                  This is typically the default drop effect,
  957. //                                                  when the view can accept the data object.
  958. //-----------------------------------------------------------------------
  959. virtual DROPEFFECT OnDragOver(COleDataObject* pDataObject, DWORD dwKeyState, CPoint point, int nState);
  960. //-----------------------------------------------------------------------
  961. // Summary:
  962. //     This member is called when an item has been dropped into the report control.
  963. // Parameters:
  964. //     pDataObject - Points to the COleDataObject that is dropped into the drop target.
  965. //     dropEffect  - The drop effect that the user has requested. Can be any of the values listed in the Remarks section.
  966. //     point - The current mouse position relative to the report control.
  967. // Remarks:
  968. //     The <i>dropEffect</i> parameter can be one of the following values:
  969. //     * <b>DROPEFFECT_COPY</b> Creates a copy of the data object being dropped.
  970. //     * <b>DROPEFFECT_MOVE</b> Moves the data object to the current mouse location.
  971. // Returns:
  972. //     TRUE if the drop was successful, otherwise FALSE.
  973. //-----------------------------------------------------------------------
  974. virtual BOOL OnDrop(COleDataObject* pDataObject, DROPEFFECT dropEffect, CPoint point);
  975. protected:
  976. //{{AFX_CODEJOCK_PRIVATE
  977. DECLARE_MESSAGE_MAP()
  978. //{{AFX_VIRTUAL(CXTPReportControl)
  979. virtual BOOL PreTranslateMessage(MSG* pMsg);
  980. virtual BOOL OnWndMsg(UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pResult);
  981. virtual INT_PTR OnToolHitTest(CPoint point, TOOLINFO* pTI) const;
  982. virtual CScrollBar* GetScrollBarCtrl(int nBar) const;
  983. //{{AFX_VIRTUAL(CXTPReportControl)
  984. //{{AFX_MSG(CXTPReportControl)
  985. afx_msg void OnPaint();
  986. afx_msg LRESULT OnPrintClient(WPARAM wParam, LPARAM /*lParam*/);
  987. afx_msg BOOL OnEraseBkgnd(CDC* pDC);
  988. afx_msg void OnSize(UINT nType, int cx, int cy);
  989. afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
  990. afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
  991. afx_msg void OnContextMenu(CWnd* pWnd, CPoint pos);
  992. afx_msg void OnMouseMove(UINT nFlags, CPoint point);
  993. afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
  994. afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
  995. afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) ;
  996. afx_msg BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt);
  997. afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
  998. afx_msg void OnSysKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
  999. afx_msg void OnLButtonDblClk(UINT nFlags, CPoint ptDblClick);
  1000. afx_msg void OnCaptureChanged(CWnd* pWnd);
  1001. afx_msg void OnSysColorChange();
  1002. afx_msg void OnSetFocus(CWnd* pOldWnd);
  1003. afx_msg void OnKillFocus (CWnd* pNewWnd);
  1004. afx_msg void OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags);
  1005. afx_msg void OnSysKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags);
  1006. afx_msg UINT OnGetDlgCode();
  1007. afx_msg void OnChar(UINT nChar, UINT nRepCntr, UINT nFlags);
  1008. afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
  1009. afx_msg void OnRButtonUp(UINT nFlags, CPoint point);
  1010. afx_msg void OnMouseLeave();
  1011. afx_msg void OnStyleChanged(int nStyleType, LPSTYLESTRUCT lpStyleStruct);
  1012. afx_msg void OnEnable(BOOL bEnable);
  1013. afx_msg void OnTimer(UINT_PTR uTimerID);
  1014. //}}AFX_MSG
  1015. //}}AFX_CODEJOCK_PRIVATE
  1016. //{{AFX_CODEJOCK_PRIVATE
  1017. static UINT AFX_CDECL GetMouseScrollLines();
  1018. virtual void RelayToolTipEvent(UINT message);
  1019. virtual CXTPReportColumn* GetNextFocusableColumn(CXTPReportRow* pRow, int nColumnIndex, int nDirection);
  1020. //}}AFX_CODEJOCK_PRIVATE
  1021. private:
  1022. BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL);
  1023. void DrawDefaultGrid(CDC* pDC, CRect rcClient, int nRowHeight, int nLeftOffset);
  1024. protected:
  1025. BOOL m_bChanged;                // Internal member for storing changed flag.
  1026. BOOL m_bRefreshIndexes;         // TRUE when it is required to refresh items indexes.
  1027. int m_nLockUpdateCount;         // A counter of the update locks. An image will be redrawn only when the lock counter is equal to zero.
  1028. CRect m_rcGroupByArea;          // The area occupied by Group By item.
  1029. CRect m_rcHeaderArea;           // The area occupied by the header.
  1030. CRect m_rcFooterArea;           // The area occupied by the footer.
  1031. CRect m_rcReportArea;           // The area occupied by rows.
  1032. CRect m_rcHeaderRecordsArea;    // The area occupied by the header records.
  1033. CRect m_rcFooterRecordsArea;    // The area occupied by the footer records.
  1034. CRect m_rcHeaderRecordsDividerArea;    // The area occupied by the header records divider.
  1035. CRect m_rcFooterRecordsDividerArea;    // The area occupied by the footer records divider.
  1036. CXTPReportRows* m_pRows;        // Virtual list rows container. Used for changing order, etc.
  1037. CXTPReportRows* m_pPlainTree;   // Tree rows container.
  1038. CXTPReportRecords* m_pRecords;  // List records container.
  1039. CXTPReportColumns* m_pColumns;  // List columns container.
  1040. CXTPReportRecords* m_pHeaderRecords;  // Header records container.
  1041. CXTPReportRecords* m_pFooterRecords;  // Footer records container.
  1042. CXTPReportRows*    m_pHeaderRows;  // Virtual list of header rows container.
  1043. CXTPReportRows*    m_pFooterRows;  // Virtual list of footer rows container.
  1044. CXTPReportPaintManager* m_pPaintManager;    // Paint manager.
  1045. CXTPReportNavigator* m_pNavigator;          // Navigator
  1046. int m_nTopRow;                              // Current top row in the visible area.
  1047. int m_nLeftOffset;                          // Horizontal scroll position.
  1048. int m_nFreezeColumnsCount;                  // Count of none-scrolled columns at the left side.
  1049. int m_nDisableReorderColumnsCount;          // Count of columns at the left side where reordering is disabled.
  1050. int m_nHScrollStep;                         // Horizontal scroll step (in pixels).
  1051. BOOL m_bFullColumnScrolling;                // Store Full Column Scrolling mode for horizontal scrolling.
  1052. int m_nFocusedRow;                          // Pointer to the currently focused row.
  1053. int m_nFocusedHeaderRow;                    // Pointer to the currently focused header row.
  1054. int m_nFocusedFooterRow;                    // Pointer to the currently focused footer row.
  1055. CXTPReportSelectedRows* m_pSelectedRows;    // Container for the currently selected rows.
  1056. CXTPReportRow* m_pHotRow;                   // Hot row
  1057. int m_nRowsPerWheel;                        // Amount of rows to scroll by mouse wheel.
  1058. CXTPReportTip m_wndTip;                     // Tip window.
  1059. CBitmap m_bmpCache;                         // Cached window bitmap.
  1060. BOOL m_bGroupByEnabled;                     // TRUE if Group By box is enabled
  1061. BOOL m_bSortRecordChilds;                   // TRUE to apply sort order for Record children.
  1062. XTPReportMouseMode m_mouseMode;             // Current mouse operation mode
  1063. BOOL m_bMultipleSelection;                  // TRUE if multiple selection enabled.
  1064. BOOL m_bMultiSelectionMode;                 // TRUE if multiselection mode enabled (i.e. VK_CTRL is always on).
  1065. BOOL m_bShowTooltips;                       // TRUE if showing tool tips enabled.
  1066. BOOL m_bAutoCheckItems;                     // TRUE to enable auto check mode, FALSE to disable auto check mode.
  1067. CXTPImageManager* m_pImageManager;          // Contains image list for report control
  1068. BOOL m_bSkipGroupsFocus;                    // TRUE if group rows are skipped when navigating rows with the Up and Down arrow keys
  1069. BOOL m_bFocusSubItems;                      // TRUE if sub-items can receive focus.
  1070. BOOL m_bEditOnClick;                        // TRUE if sub-items become editable on a single-click
  1071. BOOL m_bAllowEdit;                          // TRUE if sub-items can be edited.
  1072. BOOL m_bHeaderAllowEdit;                    // TRUE if sub-items of header rows can be edited.
  1073. BOOL m_bFooterAllowEdit;                    // TRUE if sub-items of footer rows can be edited.
  1074. BOOL m_bHeaderVisible;                      // TRUE if column headers are visible.
  1075. BOOL m_bFooterVisible;                      // TRUE if column footer are visible.
  1076. BOOL m_bHeaderRecordsVisible;               // TRUE if header records are visible.
  1077. BOOL m_bFooterRecordsVisible;               // TRUE if footer records are visible.
  1078. BOOL m_bPinFooterRecords;                   // TRUE if footer records are drawn immediately after the body rows.
  1079. BOOL m_bSelectionEnable;                    // TRUE if selection enabled.
  1080. BOOL m_bRowFocusVisible;                    // TRUE if showing focused row rectangle enabled.
  1081. BOOL m_bHeaderRowsAllowAccess;                  // TRUE if a header row can be selected by user.
  1082. BOOL m_bFooterRowsAllowAccess;                  // TRUE if a footer row can be selected by user.
  1083. BOOL m_bHeaderRowsSelectionEnable;              // TRUE if header row selection enabled.
  1084. BOOL m_bFooterRowsSelectionEnable;              // TRUE if footer row selection enabled.
  1085. CXTPReportColumn* m_pFocusedColumn;         // Pointer to the currently focused CXTPReportColumn.
  1086. CXTPToolTipContext* m_pToolTipContext;      // Tool tip Context.
  1087. CXTPReportRecordItem* m_pActiveItem;        // Pointer to the currently focused CXTPReportRecordItem.
  1088. CXTPReportInplaceEdit* m_pInplaceEdit;      // In-place edit pointer
  1089. CXTPReportInplaceButtons* m_pInplaceButtons;// In-place buttons pointer
  1090. CXTPReportInplaceList* m_pInplaceList;      // In-place list pointer
  1091. BOOL m_bVScrollBarVisible;                  // TRUE if vertical scroll bar is visible
  1092. BOOL m_bHScrollBarVisible;                  // TRUE if horizontal scroll bar is visible
  1093. CPoint m_pointDrag;                         // Drag position
  1094. BOOL m_bPrepareDrag;                        // TRUE if user click the report control and doesn't release button.
  1095. CXTPReportRows m_arrScreenRows;             // Rows currently presented on screen.
  1096. CString m_strFilterText;                    // Filter text.
  1097. BOOL    m_bFilterHiddenColumns;             // Search filter text in hidden columns too.
  1098. CXTPReportHeader* m_pReportHeader;          // List header member.
  1099. int m_nPopulatedRecordsCount;               // Current number of records in the report after using m_strFilterText.
  1100. CLIPFORMAT m_cfReport;                      // Report Clipboard format for drag/drop operations
  1101. CReportDropTarget* m_pDropTarget;           // Internal drag/drop helper.
  1102. BOOL m_bDragMode;                           // TRUE if records currently dragging
  1103. DWORD m_dwDragDropFlags;                    // Drag/drop flags.
  1104. int m_nDropPos;                             // Position of records to be dropped
  1105. CXTPReportRecords* m_pDropRecords;          // Drop records.
  1106. CXTPReportRow* m_pSelectOnUpRow;            // Row to select on mouse up. Can be null.
  1107. BOOL        m_bOnSizeRunning;               // TRUE if OnSize handler is entered, FALSE otherwise. Used to prevent OnSize reenter and stack overflow in Win95/98/ME.
  1108. UINT_PTR    m_uAutoScrollTimerID;           // Auto scroll timer ID or 0.
  1109. //{{AFX_CODEJOCK_PRIVATE
  1110. long m_nOLEDropMode;                        // Store OLE drop mode.
  1111. //}}AFX_CODEJOCK_PRIVATE
  1112. CXTPReportRow* m_ptrVirtualEditingRow;      // Currently editing row in virtual mode.
  1113. CXTPReportRows::T_CompareFunc m_pRowsCompareFunc;   // Pointer to rows compare function.
  1114. HBITMAP m_hbmpWatermark;                    // Watermark bitmap handle.
  1115. BYTE m_WatermarkTransparency;               // Watermark bitmap transparency value.
  1116. BITMAP m_bmWatermark;                       // Watermark bitmap info.
  1117. XTPReportWatermarkAlignment m_WatermarkAlignment; // Watermark alignment flags.
  1118. int m_nEnsureVisibleRowIdx;                 // Ensure visible row index.
  1119. int m_nEnsureVisibleColumnIdx;              // Ensure visible column index.
  1120. private:
  1121. XTP_NM_REPORTTOOLTIPINFO* m_pCachedToolTipInfo;
  1122. friend class CReportControlCtrl;
  1123. friend class CReportDropTarget;
  1124. };
  1125. //===========================================================================
  1126. // Summary:
  1127. //      Helper class with static member functions to control active locale for
  1128. //      Report Control and perform some locale dependent tasks.
  1129. //===========================================================================
  1130. class _XTP_EXT_CLASS CXTPReportControlLocale
  1131. {
  1132. private:
  1133. CXTPReportControlLocale(){};
  1134. public:
  1135. //-----------------------------------------------------------------------
  1136. // Summary:
  1137. //      Determine which locale is used active locale: current user locale
  1138. //      or resource file locale.
  1139. // Returns:
  1140. //      TRUE if resource file locale is used active locale, FALSE otherwise.
  1141. // See Also:
  1142. //      SetUseResourceFileLocale, CXTPResourceManager::GetResourcesLangID,
  1143. //      GetActiveLCID, LOCALE_USER_DEFAULT
  1144. //-----------------------------------------------------------------------
  1145. static BOOL AFX_CDECL IsUseResourceFileLocale();
  1146. //-----------------------------------------------------------------------
  1147. // Summary:
  1148. //      Used to set which locale is used active locale: current user locale
  1149. //      or resource file locale.
  1150. // Parameters:
  1151. //      bUseResourceFileLocale - If TRUE resource file locale will be used,
  1152. //                               if FALSE current user locale will be used.
  1153. // See Also:
  1154. //      IsUseResourceFileLocale, CXTPResourceManager::GetResourcesLangID,
  1155. //      GetActiveLCID, LOCALE_USER_DEFAULT
  1156. //-----------------------------------------------------------------------
  1157. static void AFX_CDECL SetUseResourceFileLocale(BOOL bUseResourceFileLocale);
  1158. //-----------------------------------------------------------------------
  1159. // Summary:
  1160. //      Returns active locale ID (current user locale or resource file locale)
  1161. // Returns:
  1162. //      LOCALE_USER_DEFAULT or resource file locale ID.
  1163. // See Also:
  1164. //      IsUseResourceFileLocale, SetUseResourceFileLocale,
  1165. //      CXTPResourceManager::GetResourcesLangID, LOCALE_USER_DEFAULT
  1166. //-----------------------------------------------------------------------
  1167. static LCID AFX_CDECL GetActiveLCID();
  1168. //-----------------------------------------------------------------------
  1169. // Summary:
  1170. //      Use to change VARIANT type using active locale ID.
  1171. // Parameters:
  1172. //      rVarValue   - [in, out] Reference to VARIANT value to change type.
  1173. //      vartype     - [in] new variant type.
  1174. //      bThrowError - [in] if FALSE function returns TRUE or FALSE,
  1175. //                         if TRUE function throw exception in case of error.
  1176. // Returns:
  1177. //      TRUE if successful, FALSE otherwise.
  1178. // See Also:
  1179. //      GetActiveLCID, ::VariantChangeTypeEx API function.
  1180. //-----------------------------------------------------------------------
  1181. static BOOL AFX_CDECL VariantChangeTypeEx(VARIANT& rVarValue, VARTYPE vartype, BOOL bThrowError = TRUE);
  1182. //-----------------------------------------------------------------------
  1183. // Summary:
  1184. //      Format a string using strftime() function format specifiers.
  1185. //      The active locale ID is used.
  1186. // Parameters:
  1187. //      dt                - [in] A COleDateTime object with date and time value to format.
  1188. //      lpcszFormatString - [in] Format-control string.
  1189. // Returns:
  1190. //      A string which contains date-time formatted using active locale ID.
  1191. // See Also:
  1192. //      GetActiveLCID, strftime
  1193. //-----------------------------------------------------------------------
  1194. static CString AFX_CDECL FormatDateTime(const COleDateTime& dt, LPCTSTR lpcszFormatString);
  1195. private:
  1196. static BOOL s_bUseResourceFileLocale;
  1197. private:
  1198. static CString AFX_CDECL _FormatDateTime(const COleDateTime& dt, LPCTSTR lpcszFormatString, LCID lcLocaleID);
  1199. static void AFX_CDECL _InitMappedSpecs();
  1200. static void AFX_CDECL _ProcessMappedSpecs(CString& rstrFormat, const SYSTEMTIME* pST, LCID lcLocaleID);
  1201. static void AFX_CDECL _ProcessDateTimeSpecs(CString& rstrFormat, const SYSTEMTIME* pST, LCID lcLocaleID);
  1202. static void AFX_CDECL __ProcessDate_x(CString& rstrFormat, const SYSTEMTIME* pST, LCID lcLocaleID);
  1203. static void AFX_CDECL __ProcessTime_X(CString& rstrFormat, const SYSTEMTIME* pST, LCID lcLocaleID);
  1204. static void AFX_CDECL _ProcessOtherSpecs(CString& rstrFormat, const COleDateTime& dt);
  1205. private:
  1206. struct XTP_TIMESPEC
  1207. {
  1208. LPCTSTR pcszSpec;
  1209. LPCTSTR pcszFormat;
  1210. BOOL    bTime;
  1211. };
  1212. static CArray<XTP_TIMESPEC, XTP_TIMESPEC&> s_arMappedSpecs;
  1213. static void AFX_CDECL _AddsMappedSpec(LPCTSTR pcszSpec, LPCTSTR pcszFormat, BOOL bTime);
  1214. };
  1215. //////////////////////////////////////////////////////////////////////////
  1216. AFX_INLINE CXTPReportPaintManager* CXTPReportControl::GetPaintManager() const {
  1217. return m_pPaintManager;
  1218. }
  1219. AFX_INLINE CXTPReportNavigator* CXTPReportControl::GetNavigator() const {
  1220. return m_pNavigator;
  1221. }
  1222. AFX_INLINE CXTPReportSelectedRows* CXTPReportControl::GetSelectedRows() const{
  1223. return m_pSelectedRows;
  1224. }
  1225. AFX_INLINE CXTPReportRows* CXTPReportControl::GetRows() const{
  1226. return m_pRows;
  1227. }
  1228. AFX_INLINE CXTPReportRecords* CXTPReportControl::GetRecords() const{
  1229. return m_pRecords;
  1230. }
  1231. AFX_INLINE CXTPReportColumns* CXTPReportControl::GetColumns() const{
  1232. return m_pColumns;
  1233. }
  1234. AFX_INLINE XTPReportMouseMode CXTPReportControl::GetMouseMode() const {
  1235. return m_mouseMode;
  1236. }
  1237. AFX_INLINE void CXTPReportControl::SetGridStyle(BOOL bVertical, XTPReportGridStyle gridStyle) {
  1238. m_pPaintManager->SetGridStyle(bVertical, gridStyle);
  1239. AdjustScrollBars();
  1240. }
  1241. AFX_INLINE XTPReportGridStyle CXTPReportControl::GetGridStyle(BOOL bVertical) const{
  1242. return bVertical ? m_pPaintManager->m_verticalGridStyle : m_pPaintManager->m_horizontalGridStyle;
  1243. }
  1244. AFX_INLINE COLORREF CXTPReportControl::SetGridColor(COLORREF clrGridLine) {
  1245. return m_pPaintManager->SetGridColor(clrGridLine);
  1246. }
  1247. AFX_INLINE void CXTPReportControl::EnablePreviewMode(BOOL bIsPreviewMode) {
  1248. m_pPaintManager->EnablePreviewMode(bIsPreviewMode);
  1249. }
  1250. AFX_INLINE BOOL CXTPReportControl::IsPreviewMode() const{
  1251. return m_pPaintManager->IsPreviewMode();
  1252. }
  1253. AFX_INLINE BOOL CXTPReportControl::IsChanged() const{
  1254. return m_bChanged;
  1255. }
  1256. AFX_INLINE void CXTPReportControl::SetChanged(BOOL bChanged) {
  1257. m_bChanged = bChanged;
  1258. }
  1259. AFX_INLINE void CXTPReportControl::ShowGroupBy(BOOL bEnable) {
  1260. ASSERT(!IsVirtualMode());
  1261. m_bGroupByEnabled = bEnable;
  1262. AdjustLayout();
  1263. AdjustScrollBars();
  1264. }
  1265. AFX_INLINE BOOL CXTPReportControl::IsGroupByVisible() const {
  1266. return m_bGroupByEnabled;
  1267. }
  1268. AFX_INLINE void CXTPReportControl::ShowHeader(BOOL bShow /*= TRUE*/) {
  1269. m_bHeaderVisible = bShow;
  1270. AdjustLayout();
  1271. AdjustScrollBars();
  1272. }
  1273. AFX_INLINE BOOL CXTPReportControl::IsHeaderVisible()const {
  1274. return m_bHeaderVisible;
  1275. }
  1276. AFX_INLINE void CXTPReportControl::ShowFooter(BOOL bShow /*= TRUE*/) {
  1277. m_bFooterVisible = bShow;
  1278. AdjustLayout();
  1279. AdjustScrollBars();
  1280. }
  1281. AFX_INLINE BOOL CXTPReportControl::IsFooterVisible()const {
  1282. return m_bFooterVisible;
  1283. }
  1284. AFX_INLINE void CXTPReportControl::ShadeGroupHeadings(BOOL bEnable) {
  1285. if (m_pPaintManager)
  1286. m_pPaintManager->m_bShadeGroupHeadings = bEnable;
  1287. AdjustScrollBars();
  1288. }
  1289. AFX_INLINE BOOL CXTPReportControl::IsShadeGroupHeadingsEnabled() const{
  1290. return m_pPaintManager ? m_pPaintManager->m_bShadeGroupHeadings : FALSE;
  1291. }
  1292. AFX_INLINE void CXTPReportControl::SetGroupRowsBold(BOOL bBold) {
  1293. if (m_pPaintManager)
  1294. m_pPaintManager->m_bGroupRowTextBold = bBold;
  1295. }
  1296. AFX_INLINE BOOL CXTPReportControl::IsGroupRowsBold() const {
  1297. return m_pPaintManager ? m_pPaintManager->m_bGroupRowTextBold : FALSE;
  1298. }
  1299. AFX_INLINE CRect CXTPReportControl::GetReportRectangle() const{
  1300. return m_rcReportArea;
  1301. }
  1302. AFX_INLINE BOOL CXTPReportControl::IsMultipleSelection() const {
  1303. return m_bMultipleSelection;
  1304. }
  1305. AFX_INLINE void CXTPReportControl::SetMultipleSelection(BOOL bMultipleSelection) {
  1306. m_bMultipleSelection = bMultipleSelection;
  1307. SetFocusedRow(GetFocusedRow());
  1308. }
  1309. AFX_INLINE BOOL CXTPReportControl::IsMultiSelectionMode() const {
  1310. return m_bMultiSelectionMode;
  1311. }
  1312. AFX_INLINE void CXTPReportControl::SetMultiSelectionMode(BOOL bMultiSelectionMode) {
  1313. m_bMultiSelectionMode = bMultiSelectionMode;
  1314. }
  1315. AFX_INLINE void CXTPReportControl::EnableToolTips(BOOL bEnable) {
  1316. m_bShowTooltips = bEnable;
  1317. }
  1318. AFX_INLINE void CXTPReportControl::SkipGroupsFocus(BOOL bSkipFocus) {
  1319. m_bSkipGroupsFocus = bSkipFocus;
  1320. }
  1321. AFX_INLINE BOOL CXTPReportControl::IsSkipGroupsFocusEnabled()const {
  1322. return m_bSkipGroupsFocus;
  1323. }
  1324. AFX_INLINE CXTPImageManager* CXTPReportControl::GetImageManager() const{
  1325. return m_pImageManager;
  1326. }
  1327. AFX_INLINE CXTPReportColumn* CXTPReportControl::GetFocusedColumn() const{
  1328. return m_pFocusedColumn;
  1329. }
  1330. AFX_INLINE void CXTPReportControl::FocusSubItems(BOOL bFocusSubItems) {
  1331. m_bFocusSubItems = bFocusSubItems;
  1332. m_pFocusedColumn = NULL;
  1333. }
  1334. AFX_INLINE BOOL CXTPReportControl::IsAllowEdit() const{
  1335. return m_bAllowEdit;
  1336. }
  1337. AFX_INLINE CXTPReportInplaceEdit* CXTPReportControl::GetInplaceEdit() const{
  1338. return m_pInplaceEdit;
  1339. }
  1340. AFX_INLINE CXTPReportInplaceButtons* CXTPReportControl::GetInplaceButtons() const{
  1341. return m_pInplaceButtons;
  1342. }
  1343. AFX_INLINE CXTPReportInplaceList* CXTPReportControl::GetInplaceList() const{
  1344. return m_pInplaceList;
  1345. }
  1346. AFX_INLINE CXTPReportRecordItem* CXTPReportControl::GetActiveItem() const{
  1347. return m_pActiveItem;
  1348. }
  1349. AFX_INLINE void CXTPReportControl::AllowEdit(BOOL bAllowEdit) {
  1350. m_bAllowEdit = bAllowEdit;
  1351. }
  1352. AFX_INLINE BOOL CXTPReportControl::IsFocusSubItems() const{
  1353. return m_bFocusSubItems;
  1354. }
  1355. AFX_INLINE void CXTPReportControl::EditOnClick(BOOL bEditOnClick) {
  1356. m_bEditOnClick = bEditOnClick;
  1357. }
  1358. AFX_INLINE BOOL CXTPReportControl::IsEditOnClick() const{
  1359. return m_bEditOnClick;
  1360. }
  1361. AFX_INLINE BOOL CXTPReportControl::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext) {
  1362. return CWnd::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext);
  1363. }
  1364. AFX_INLINE CString CXTPReportControl::GetFilterText() {
  1365. return m_strFilterText;
  1366. }
  1367. AFX_INLINE void CXTPReportControl::SetFilterText(LPCTSTR strFilterText) {
  1368. m_strFilterText = strFilterText;
  1369. }
  1370. AFX_INLINE CXTPReportHeader* CXTPReportControl::GetReportHeader() const {
  1371. return m_pReportHeader;
  1372. }
  1373. AFX_INLINE long CXTPReportControl::GetTopRowIndex() const{
  1374. return m_nTopRow;
  1375. }
  1376. AFX_INLINE void CXTPReportControl::SetAutoCheckItems(BOOL bAutoCheck) {
  1377. m_bAutoCheckItems = bAutoCheck;
  1378. }
  1379. AFX_INLINE BOOL CXTPReportControl::IsAutoCheckItems() const {
  1380. return m_bAutoCheckItems;
  1381. }
  1382. AFX_INLINE int CXTPReportControl::GetFreezeColumnsCount() const {
  1383. return m_nFreezeColumnsCount;
  1384. }
  1385. AFX_INLINE int CXTPReportControl::GetDisableReorderColumnsCount() const {
  1386. return m_nDisableReorderColumnsCount;
  1387. }
  1388. AFX_INLINE void CXTPReportControl::SetFreezeColumnsCount(int nCount) {
  1389. ASSERT(nCount >= 0);
  1390. m_nFreezeColumnsCount = nCount;
  1391. }
  1392. AFX_INLINE void CXTPReportControl::SetDisableReorderColumnsCount(int nCount) {
  1393. ASSERT(nCount >= 0);
  1394. m_nDisableReorderColumnsCount = nCount;
  1395. }
  1396. AFX_INLINE int CXTPReportControl::GetLockUpdateCount() const {
  1397. return m_nLockUpdateCount;
  1398. }
  1399. AFX_INLINE void CXTPReportControl::SetRowsCompareFunc(CXTPReportRows::T_CompareFunc pCompareFunc) {
  1400. m_pRowsCompareFunc = pCompareFunc;
  1401. }
  1402. AFX_INLINE BOOL CXTPReportControl::IsFullColumnScrolling() const {
  1403. return m_bFullColumnScrolling;
  1404. }
  1405. AFX_INLINE int CXTPReportControl::GetHScrollStep() {
  1406. return m_nHScrollStep;
  1407. }
  1408. AFX_INLINE void CXTPReportControl::SetHScrollStep(int nStep) {
  1409. ASSERT(nStep > 0);
  1410. m_nHScrollStep = max(1, nStep);
  1411. }
  1412. AFX_INLINE CXTPReportRecords* CXTPReportControl::GetHeaderRecords() const{
  1413. return m_pHeaderRecords;
  1414. }
  1415. AFX_INLINE CXTPReportRecords* CXTPReportControl::GetFooterRecords() const{
  1416. return m_pFooterRecords;
  1417. }
  1418. AFX_INLINE CXTPReportRows* CXTPReportControl::GetHeaderRows() const{
  1419. return m_pHeaderRows;
  1420. }
  1421. AFX_INLINE CXTPReportRows* CXTPReportControl::GetFooterRows() const{
  1422. return m_pFooterRows;
  1423. }
  1424. AFX_INLINE CRect CXTPReportControl::GetHeaderRowsRect() const{
  1425. return m_rcHeaderRecordsArea;
  1426. }
  1427. AFX_INLINE CRect CXTPReportControl::GetFooterRowsRect() const{
  1428. return m_rcFooterRecordsArea;
  1429. }
  1430. AFX_INLINE void CXTPReportControl::ShowHeaderRows(BOOL bShow /*= TRUE*/) {
  1431. m_bHeaderRecordsVisible = bShow;
  1432. if(!bShow)
  1433. GetNavigator()->SetCurrentFocusInHeadersRows(FALSE);
  1434. AdjustLayout();
  1435. AdjustScrollBars();
  1436. }
  1437. AFX_INLINE void CXTPReportControl::ShowFooterRows(BOOL bShow /*= TRUE*/) {
  1438. m_bFooterRecordsVisible = bShow;
  1439. if(!bShow)
  1440. GetNavigator()->SetCurrentFocusInFootersRows(FALSE);
  1441. AdjustLayout();
  1442. AdjustScrollBars();
  1443. }
  1444. AFX_INLINE void CXTPReportControl::PinFooterRows(BOOL bPin /*= TRUE*/) {
  1445. m_bPinFooterRecords = bPin;
  1446. AdjustLayout();
  1447. AdjustScrollBars();
  1448. }
  1449. AFX_INLINE BOOL CXTPReportControl::IsHeaderRowsVisible() const {
  1450. return m_bHeaderRecordsVisible;
  1451. }
  1452. AFX_INLINE BOOL CXTPReportControl::IsFooterRowsVisible() const {
  1453. return m_bFooterRecordsVisible;
  1454. }
  1455. AFX_INLINE BOOL CXTPReportControl::IsFooterRowsPinned() const {
  1456. return m_bPinFooterRecords;
  1457. }
  1458. AFX_INLINE BOOL CXTPReportControl::IsHeaderRowsAllowEdit() const{
  1459. return m_bHeaderAllowEdit;
  1460. }
  1461. AFX_INLINE BOOL CXTPReportControl::IsFooterRowsAllowEdit() const{
  1462. return m_bFooterAllowEdit;
  1463. }
  1464. AFX_INLINE void CXTPReportControl::HeaderRowsAllowEdit(BOOL bAllowEdit) {
  1465. m_bHeaderAllowEdit = bAllowEdit;
  1466. }
  1467. AFX_INLINE void CXTPReportControl::FooterRowsAllowEdit(BOOL bAllowEdit) {
  1468. m_bFooterAllowEdit = bAllowEdit;
  1469. }
  1470. AFX_INLINE void CXTPReportControl::SetSortRecordChilds(BOOL bSortRecordChilds) {
  1471. m_bSortRecordChilds = bSortRecordChilds;
  1472. }
  1473. AFX_INLINE BOOL CXTPReportControl::IsSortRecordChilds() {
  1474. return m_bSortRecordChilds;
  1475. }
  1476. AFX_INLINE BOOL CXTPReportControl::IsFilterHiddenColumns() const {
  1477. return m_bFilterHiddenColumns;
  1478. }
  1479. AFX_INLINE void CXTPReportControl::SetFilterHiddenColumns(BOOL bFilterHidden) {
  1480. m_bFilterHiddenColumns = bFilterHidden;
  1481. }
  1482. AFX_INLINE BOOL CXTPReportControl::IsSelectionEnabled() const{
  1483. return m_bSelectionEnable;
  1484. }
  1485. AFX_INLINE void CXTPReportControl::SelectionEnable(BOOL bEnable) {
  1486. m_bSelectionEnable = bEnable;
  1487. if(!m_bSelectionEnable)
  1488. m_pSelectedRows->Clear();
  1489. }
  1490. AFX_INLINE BOOL CXTPReportControl::IsRowFocusVisible() const{
  1491. return m_bRowFocusVisible;
  1492. }
  1493. AFX_INLINE void CXTPReportControl::ShowRowFocus(BOOL bShow) {
  1494. m_bRowFocusVisible = bShow;
  1495. }
  1496. AFX_INLINE BOOL CXTPReportControl::IsHeaderRowsAllowAccess() const{
  1497. return m_bHeaderRowsAllowAccess;
  1498. }
  1499. AFX_INLINE BOOL CXTPReportControl::IsFooterRowsAllowAccess() const{
  1500. return m_bFooterRowsAllowAccess;
  1501. }
  1502. AFX_INLINE void CXTPReportControl::HeaderRowsAllowAccess(BOOL bAllowAccess) {
  1503. m_bHeaderRowsAllowAccess = bAllowAccess;
  1504. }
  1505. AFX_INLINE void CXTPReportControl::FooterRowsAllowAccess(BOOL bAllowAccess) {
  1506. m_bFooterRowsAllowAccess = bAllowAccess;
  1507. }
  1508. AFX_INLINE void CXTPReportControl::HeaderRowsEnableSelection(BOOL bEnable) {
  1509. m_bHeaderRowsSelectionEnable = bEnable;
  1510. }
  1511. AFX_INLINE BOOL CXTPReportControl::IsHeaderRowsSelectionEnabled() const{
  1512. return m_bHeaderRowsSelectionEnable;
  1513. }
  1514. AFX_INLINE void CXTPReportControl::FooterRowsEnableSelection(BOOL bEnable) {
  1515. m_bFooterRowsSelectionEnable = bEnable;
  1516. }
  1517. AFX_INLINE BOOL CXTPReportControl::IsFooterRowsSelectionEnabled() const{
  1518. return m_bFooterRowsSelectionEnable;
  1519. }
  1520. AFX_INLINE int CXTPReportControl::GetWatermarkAlignment() const{
  1521. return m_WatermarkAlignment;
  1522. }
  1523. AFX_INLINE void CXTPReportControl::SetWatermarkAlignment(int nWatermarkAlignment) {
  1524. m_WatermarkAlignment = (XTPReportWatermarkAlignment)nWatermarkAlignment;
  1525. }
  1526. #endif //#if !defined(__XTPREPORTCONTROL_H__)