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

对话框与窗口

开发平台:

Visual C++

  1. // XTPReportRow.h: interface for the CXTPReportRow class.
  2. //
  3. // This file is a part of the XTREME REPORTCONTROL 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(__XTPREPORTROW_H__)
  22. #define __XTPREPORTROW_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER > 1000
  25. #pragma once
  26. #endif // _MSC_VER > 1000
  27. #include "XTPReportDefines.h"
  28. class CXTPReportRecord;
  29. class CXTPReportControl;
  30. class CXTPReportTip;
  31. class CXTPReportRecordItem;
  32. class CXTPReportRows;
  33. class CXTPReportColumn;
  34. struct XTP_REPORTRECORDITEM_DRAWARGS;
  35. struct XTP_REPORTRECORDITEM_METRICS;
  36. struct XTP_REPORTRECORDITEM_CLICKARGS;
  37. //-----------------------------------------------------------------------
  38. // Summary:
  39. //      This enum defines body, header, and footer rows.
  40. // See Also:
  41. //      CXTPReportRow::m_nRowType
  42. //-----------------------------------------------------------------------
  43. enum XTPReportRowType
  44. {
  45. xtpRowTypeBody      = 0,    // The row is in body rows collection.
  46. xtpRowTypeHeader    = 1,    // The row is in Headers rows collection.
  47. xtpRowTypeFooter    = 2     // The row is in Footers rows collection.
  48. };
  49. //===========================================================================
  50. // Summary:
  51. //     CXTPReportRow class represents an row of the report control
  52. //     window.
  53. // Remarks:
  54. //     Each item has corresponding a CXTPReportRecord, and could have a list
  55. //     of sub-items associated with it. By clicking a Row item, the user
  56. //     can expand and collapse the associated list of sub-items.
  57. //
  58. //     CXTPReportRow handles a behavior of report row. It processes
  59. //     user mouse and keyboard events, it also implements external control
  60. //     member functions. It is also handling drawing logic for the row.
  61. //
  62. //     A collection of report row items is combined into CXTPReportRows
  63. //     and could be accessed via CXTPReportControl::GetRows() method.
  64. // See Also:
  65. //     CXTPReportControl overview, CXTPReportRows, CXTPReportRecord,
  66. //     CXTPReportRecordItem, CXTPReportGroupRow
  67. //===========================================================================
  68. class _XTP_EXT_CLASS CXTPReportRow : public CXTPHeapObjectT<CCmdTarget, CXTPReportRowAllocator>
  69. {
  70. DECLARE_DYNAMIC(CXTPReportRow)
  71. public:
  72. //-----------------------------------------------------------------------
  73. // Summary:
  74. //     A constructor of the CXTPReportRow object.
  75. //-----------------------------------------------------------------------
  76. CXTPReportRow();
  77. //-----------------------------------------------------------------------
  78. // Summary:
  79. //     Destroys CXTPReportRow object, handles cleanup and deallocation.
  80. //-----------------------------------------------------------------------
  81. virtual ~CXTPReportRow();
  82. public:
  83. //-----------------------------------------------------------------------
  84. // Summary:
  85. //     This method is called for initial initialization of the row.
  86. // Parameters:
  87. //     pRow - Row which settings will be copied for the row.
  88. //     pControl - Pointer to the parent report control.
  89. //     pRecord - Pointer to the record associated with the row.
  90. //-----------------------------------------------------------------------
  91. virtual void InitRow(CXTPReportRow* pRow);
  92. virtual void InitRow(CXTPReportControl* pControl, CXTPReportRecord* pRecord);// <COMBINE CXTPReportRow::InitRow@CXTPReportRow*>
  93. //-----------------------------------------------------------------------
  94. // Summary:
  95. //     Get associated record.
  96. // Returns:
  97. //     Associated list record with data.
  98. // Example:
  99. //     <code>CXTPReportRecord* pRecord = pRow->GetRecord();</code>
  100. // See Also: CXTPReportRecord overview
  101. //-----------------------------------------------------------------------
  102. virtual CXTPReportRecord* GetRecord() const;
  103. //-----------------------------------------------------------------------
  104. // Summary:
  105. //     Draws the row on the provided DC.
  106. // Parameters:
  107. //     pDC    - Pointer to control drawing context.
  108. //     rcRow  - Coordinates of the rectangle for drawing this row.
  109. //     nLeftOffset - Start drawing left offset in pixels (Horizontal scroll position).
  110. // Remarks:
  111. //     Call this member function to draw an item. This function
  112. //     only prepares data for drawing and calls needed drawing functions
  113. //     from PaintManager.
  114. //
  115. //     Thus if you wish to change the look of your report item, you must just
  116. //     provide your own implementation of PaintManager
  117. // See Also: CXTPPaintManager
  118. //-----------------------------------------------------------------------
  119. virtual void Draw(CDC* pDC, CRect rcRow, int nLeftOffset);
  120. //-----------------------------------------------------------------------
  121. // Summary:
  122. //     Calculates height of the row depending on the provided DC.
  123. // Parameters:
  124. //     pDC - Provided DC.
  125. //  nWidth - Row width.
  126. // Remarks:
  127. //     Row height depends of many factors: provided device context,
  128. //     font to print text, visibility of rows items. GetHeight()
  129. //     takes into account all of them to get real height of Row.
  130. // Returns:
  131. //     Returns height of the row in logical units.
  132. //-----------------------------------------------------------------------
  133. virtual int GetHeight(CDC* pDC, int nWidth);
  134. //-----------------------------------------------------------------------
  135. // Summary:
  136. //     Returns current row index in the view.
  137. // Remarks:
  138. //     ReportControl draws row in some order. It depends of Index value
  139. //     You use GetIndex() to get current index value for particular row
  140. // Returns:
  141. //     Current row index in the view.
  142. //-----------------------------------------------------------------------
  143. virtual int GetIndex() const;
  144. //-----------------------------------------------------------------------
  145. // Summary:
  146. //     Returns row focused state.
  147. // Remarks:
  148. //     Call this member function if you want to determine whether
  149. //     this row is focused in the report control or not.
  150. // Returns:
  151. //     TRUE if row is focused, FALSE otherwise.
  152. // See Also: IsSelected
  153. //-----------------------------------------------------------------------
  154. virtual BOOL IsFocused() const;
  155. //-----------------------------------------------------------------------
  156. // Summary:
  157. //     Returns row selected state.
  158. // Remarks:
  159. //     Call this member function if you want to determine whether
  160. //     this row is selected in the report control or not.
  161. // Returns:
  162. //     TRUE if row is selected, FALSE otherwise.
  163. // See Also: IsFocused
  164. //-----------------------------------------------------------------------
  165. virtual BOOL IsSelected() const;
  166. //-----------------------------------------------------------------------
  167. // Summary:
  168. //     Returns row expanded state.
  169. // Remarks:
  170. //     Call this member function if you want to determine whether
  171. //     this row is expanded in the report control or not.
  172. // Returns:
  173. //     TRUE if row is expanded, FALSE otherwise.
  174. // See Also: SetExpanded
  175. //-----------------------------------------------------------------------
  176. virtual BOOL IsExpanded() const;
  177. //-----------------------------------------------------------------------
  178. // Summary:
  179. //     Sets row expanded state.
  180. // Parameters:
  181. //     bExpanded - New row expanded state.
  182. // Remarks:
  183. //     Call this member function if you want to expand or collapse
  184. //     this row.
  185. // See Also: IsExpanded
  186. //-----------------------------------------------------------------------
  187. virtual void SetExpanded(BOOL bExpanded);
  188. //-----------------------------------------------------------------------
  189. // Summary:
  190. //     Call this member to select/set focus to the row.  If multiple
  191. //     selection is enabled, then this row will be added to the selection.
  192. // Parameters:
  193. //     bSelected - TRUE to select the row, FALSE to de-select the row.
  194. //-----------------------------------------------------------------------
  195. virtual void SetSelected(BOOL bSelected);
  196. //-----------------------------------------------------------------------
  197. // Summary:
  198. //     Call this member to select all child items of specified row.
  199. //-----------------------------------------------------------------------
  200. virtual void SelectChilds();
  201. //-----------------------------------------------------------------------
  202. // Summary:
  203. //     Determines if this row is a group row.
  204. // Remarks:
  205. //     Call this member function if you want to determine whether
  206. //     this row is a group row or not.
  207. // Returns:
  208. //     TRUE if it is a group row, FALSE otherwise.
  209. //-----------------------------------------------------------------------
  210. virtual BOOL IsGroupRow() const;
  211. //-----------------------------------------------------------------------
  212. // Summary:
  213. //     Determines which report item, if any, is at a specified position.
  214. // Parameters:
  215. //     ptPoint     - Point to test.
  216. //     pRectItem   - Returns item rect.
  217. //     ppColumn    - Returns a pointer to the column at tested position.
  218. // Remarks:
  219. //     Call this member function to test a row contents at the
  220. //     specified position.
  221. // Returns:
  222. //     The record item at the specified position, if any,
  223. //     or NULL otherwise.
  224. //-----------------------------------------------------------------------
  225. virtual CXTPReportRecordItem* HitTest(CPoint ptPoint, CRect* pRectItem = NULL, CXTPReportColumn** ppColumn = NULL) const;
  226. //-----------------------------------------------------------------------
  227. // Summary:
  228. //     Process mouse clicks. Called by the framework when the user
  229. //     has clicked the mouse button in the row area.
  230. // Parameters:
  231. //     ptClicked - Position of the cursor, in screen coordinates,
  232. //                 at the time of the mouse click.
  233. // Remarks:
  234. //     Call this member function if you want a row to process
  235. //     a mouse button click message.
  236. //     You should provide the method with the coordinates of the
  237. //     mouse message to proceed.
  238. // See Also: OnDblClick, OnMouseMove, OnContextMenu
  239. //-----------------------------------------------------------------------
  240. virtual void OnClick(CPoint ptClicked);
  241. //-----------------------------------------------------------------------
  242. // Summary:
  243. //     Processes mouse left button down clicks.
  244. // Parameters:
  245. //     pClickArgs - structure which contains mouse click arguments
  246. // See Also: OnLButtonUp, OnClick
  247. //-----------------------------------------------------------------------
  248. virtual BOOL OnLButtonDown(XTP_REPORTRECORDITEM_CLICKARGS* pClickArgs);
  249. //-----------------------------------------------------------------------
  250. // Summary:
  251. //     Processes mouse left button up clicks.
  252. // Parameters:
  253. //     pClickArgs - structure which contains mouse click arguments
  254. // See Also: OnLButtonDown, OnClick
  255. //-----------------------------------------------------------------------
  256. virtual BOOL OnLButtonUp(XTP_REPORTRECORDITEM_CLICKARGS* pClickArgs);
  257. //-----------------------------------------------------------------------
  258. // Summary:
  259. //     Process mouse double clicks. Called by the framework when
  260. //     the user has double-clicked the mouse button in the row area.
  261. // Parameters:
  262. //     ptClicked - Position of the cursor, in screen coordinates,
  263. //                 at the time of the mouse click.
  264. // Remarks:
  265. //     Call this member function if you want a row to process
  266. //     a mouse button double click message.
  267. //     You should provide the method with the coordinates of the
  268. //     mouse message to proceed.
  269. // See Also: OnClick, OnMouseMove, OnContextMenu
  270. //-----------------------------------------------------------------------
  271. virtual void OnDblClick(CPoint ptClicked);
  272. //-----------------------------------------------------------------------
  273. // Summary:
  274. //     Process mouse moving.
  275. // Parameters:
  276. //     nFlags - Indicates whether various virtual keys are down.
  277. //     point  - Point coordinates where the message was fired from.
  278. // Remarks:
  279. //     Call this member function if you want a row to process
  280. //     a mouse move message. You should provide the method with the
  281. //     coordinates of the mouse message to proceed and a flag
  282. //     showing which of virtual keys were down.
  283. // See Also: OnClick, OnDblClick, OnContextMenu
  284. //-----------------------------------------------------------------------
  285. virtual void OnMouseMove(UINT nFlags, CPoint point);
  286. //-----------------------------------------------------------------------
  287. // Summary:
  288. //     Process context menu. Called by the framework when the user
  289. //     has clicked the right mouse button (right clicked) in the window.
  290. // Parameters:
  291. //     ptClick - Position of the cursor, in screen coordinates,
  292. //               at the time of the mouse click.
  293. // Remarks:
  294. //     Call this member function if you want a row to process
  295. //     a mouse right button down (context menu call) message.
  296. //     You should provide the method with the coordinates of the
  297. //     mouse message to proceed.
  298. // See Also: OnClick, OnDblClick, OnMouseMove
  299. //-----------------------------------------------------------------------
  300. virtual void OnContextMenu(CPoint ptClick);
  301. //-----------------------------------------------------------------------
  302. // Summary:
  303. //     Shows a specified tooltip window at the specified position.
  304. // Parameters:
  305. //     ptTip   - A screen position to show tooltip at.
  306. //     pTipWnd - Pointer to the specified tooltip window.
  307. // Remarks:
  308. //     Call this member function if you want to show a report
  309. //     tip window for this row.
  310. // See Also: CXTPReportTip overview
  311. //-----------------------------------------------------------------------
  312. virtual void ShowToolTip(CPoint ptTip, CXTPReportTip* pTipWnd);
  313. //-----------------------------------------------------------------------
  314. // Summary:
  315. //     Returns a pointer to the parent report control.
  316. // Remarks:
  317. //     Call this member function to retrieve a pointer to the
  318. //     CXTPReportControl which this item belongs to.
  319. // Returns:
  320. //     A pointer to an associated report control object.
  321. // See Also: CXTPReportControl overview
  322. //-----------------------------------------------------------------------
  323. CXTPReportControl* GetControl() const;
  324. //-----------------------------------------------------------------------
  325. // Summary:
  326. //     Returns the parent row of the current row.
  327. // Remarks:
  328. //     When report rows are arranged as a tree view, this member
  329. //     function returns a pointer to the parent CXTPReportRow item.
  330. // Returns:
  331. //     Pointer to the parent row if any, or NULL otherwise.
  332. // See Also: HasParent, GetTreeDepth, GetChilds, AddChild, HasChildren
  333. //-----------------------------------------------------------------------
  334. virtual CXTPReportRow* GetParentRow() const;
  335. //-----------------------------------------------------------------------
  336. // Summary:
  337. //     Returns the parent rows of the current row.
  338. // Remarks:
  339. //     When report rows are arranged as a tree view, this member
  340. //     function returns a pointer to the parent CXTPReportRows item.
  341. // Returns:
  342. //     Pointer to the parent rows if any, or NULL otherwise.
  343. // See Also: HasParent, GetTreeDepth, GetChilds, AddChild, HasChildren
  344. //-----------------------------------------------------------------------
  345. virtual CXTPReportRows* GetParentRows() const;
  346. //-----------------------------------------------------------------------
  347. // Summary:
  348. //     Returns a depth of this row in tree view.
  349. // Remarks:
  350. //     When report rows are arranged as a tree view, this member
  351. //     function returns a depth level of the row, which means
  352. //     the number of parent elements for the row..
  353. // Returns:
  354. //     A depth of this row in tree view in levels.
  355. // See Also: GetParentRow, HasParent, GetChilds, AddChild, HasChildren
  356. //-----------------------------------------------------------------------
  357. virtual int GetTreeDepth() const;
  358. //-----------------------------------------------------------------------
  359. // Summary:
  360. //     Determines if a row has a parent in tree view.
  361. // Parameters:
  362. //     pRow - A row to check.
  363. // Remarks:
  364. //     When report rows are arranged as a tree view, this member
  365. //     function calculates whether this row has a parent row or not.
  366. // Returns:
  367. //     TRUE if specified row has a parent, FALSE otherwise.
  368. // See Also:
  369. //     HasParent, GetParentRow, GetTreeDepth, GetChilds, AddChild, HasChildren
  370. //-----------------------------------------------------------------------
  371. virtual BOOL HasParent(CXTPReportRow* pRow);
  372. //-----------------------------------------------------------------------
  373. // Summary:
  374. //     Returns a collection of this row children.
  375. // Remarks:
  376. //     Call this member function to retrieve access to the collection
  377. //     of row children.
  378. // Returns:
  379. //     CXTPReportRows collection of row children.
  380. // See Also:
  381. //     CXTPReportRows overview, GetParentRow, HasParent, GetTreeDepth, AddChild, HasChildren
  382. //-----------------------------------------------------------------------
  383. virtual CXTPReportRows* GetChilds();
  384. //-----------------------------------------------------------------------
  385. // Summary:
  386. //     Adds a child row to the current row.
  387. // Parameters:
  388. //     pRow - Pointer to a child CXTPReportRow object.
  389. // Remarks:
  390. //     Call this member function if you want to add a CXTPReportRow
  391. //     object as a child of current row in tree view mode.
  392. // Returns:
  393. //     A pointer to the added CXTPReportRow object.
  394. // See Also: GetParentRow, HasParent, GetTreeDepth, GetChilds
  395. //-----------------------------------------------------------------------
  396. virtual CXTPReportRow* AddChild(CXTPReportRow* pRow);
  397. //-----------------------------------------------------------------------
  398. // Summary:
  399. //     Determines if a row has children in tree view.
  400. // Parameters:
  401. //     pRow - A row to check.
  402. // Remarks:
  403. //     When report rows are arranged as a tree view, this member
  404. //     function calculates whether this row has children rows or not.
  405. // Returns:
  406. //     TRUE if the specified row has children rows, FALSE otherwise.
  407. // See Also:
  408. //     HasParent, GetParentRow, GetTreeDepth, GetChilds, AddChild, HasChildren
  409. //-----------------------------------------------------------------------
  410. virtual BOOL HasChildren() const;
  411. //-----------------------------------------------------------------------
  412. // Summary:
  413. //     Returns the next sibling row of the current row.
  414. // Remarks:
  415. //     When report rows are arranged as a tree view, this member
  416. //     function returns a pointer to the next CXTPReportRow item.
  417. // Returns:
  418. //     Pointer to the next sibling row if any, or NULL otherwise.
  419. // See Also: HasParent, GetTreeDepth, GetChilds, AddChild, HasChildren
  420. //-----------------------------------------------------------------------
  421. virtual CXTPReportRow* GetNextSiblingRow() const;
  422. //-----------------------------------------------------------------------
  423. // Summary:
  424. //     Sets coordinates of the collapse/expand button for this row.
  425. // Parameters:
  426. //     rcCollapse - The rectangle in report window client coordinates.
  427. // Remarks:
  428. //     Call this member function to setup the coordinates of the
  429. //     collapse/expand button for the row. Note that it could be
  430. //     different depending on the row tree depth.
  431. // See Also: GetTreeDepth, GetRect
  432. //-----------------------------------------------------------------------
  433. virtual void SetCollapseRect(CRect rcCollapse);
  434. //-----------------------------------------------------------------------
  435. // Summary:
  436. //     Determines if preview item is visible.
  437. // Remarks:
  438. //     Call this member function to determine whether preview item
  439. //     for this row is visible or not.
  440. // Returns:
  441. //     TRUE if preview item is visible, FALSE otherwise.
  442. // See Also: CXTPReportRecordItemPreview overview, CXTPReportRecord::GetItemPreview
  443. //-----------------------------------------------------------------------
  444. virtual BOOL IsPreviewVisible() const;
  445. //-----------------------------------------------------------------------
  446. // Summary:
  447. //     Determines if items are visible
  448. // Returns:
  449. //     TRUE if items are visible
  450. // See Also IsPreviewVisible
  451. //-----------------------------------------------------------------------
  452. virtual BOOL IsItemsVisible() const;
  453. //-----------------------------------------------------------------------
  454. // Summary:
  455. //     Returns coordinates of the row rectangle.
  456. // Returns:
  457. //     Coordinates of the row rectangle in report window client coordinates.
  458. // Remarks:
  459. //     Call this member function to determine the coordinates of
  460. //     the region where this row is drawn on the parent window.
  461. // See Also: SetCollapseRect
  462. //-----------------------------------------------------------------------
  463. virtual CRect GetRect() const;
  464. //-----------------------------------------------------------------------
  465. // Summary:
  466. //     Returns drawing metrics for the row.
  467. // Parameters:
  468. //     pDrawArgs    - Pointer to the provided draw arguments
  469. //                    structure for calculating metrics.
  470. //     pItemMetrics - Pointer to the metrics structure to fill.
  471. // Remarks:
  472. //     Call this member function when you want to retrieve drawing metrics.
  473. // See Also: XTP_REPORTRECORDITEM_DRAWARGS, XTP_REPORTRECORDITEM_METRICS
  474. //-----------------------------------------------------------------------
  475. virtual void GetItemMetrics(XTP_REPORTRECORDITEM_DRAWARGS* pDrawArgs, XTP_REPORTRECORDITEM_METRICS* pItemMetrics);
  476. //-----------------------------------------------------------------------
  477. // Summary:
  478. //     Call this member to determine the row depth level when row is a group row.
  479. // Returns:
  480. //     Row depth level when row is a group row.
  481. //-----------------------------------------------------------------------
  482. virtual int GetGroupLevel() const;
  483. //-----------------------------------------------------------------------
  484. // Summary:
  485. //     Determines rectangle of specified item
  486. // Parameters:
  487. //     pItem - Record Item
  488. // Returns:
  489. //     Rectangle of the item.
  490. //-----------------------------------------------------------------------
  491. virtual CRect GetItemRect(CXTPReportRecordItem* pItem);
  492. //-----------------------------------------------------------------------
  493. // Summary:
  494. //     Call this member to determine if the row is the last tree row.
  495. //     Or is not part of a tree row.
  496. // Returns:
  497. //     TRUE if the row is the last tree row.  FALSE if the row is not
  498. //     part of a tree row or is not the last tree row.
  499. //-----------------------------------------------------------------------
  500. virtual BOOL IsLastTreeRow() const;
  501. //-----------------------------------------------------------------------
  502. // Summary:
  503. //     Call this member to force this row to be visible.  This will cause
  504. //     the report control to scroll to this row.  This is also called by
  505. //     CXTPReportControl::SetFocusedRow to make visible the newly focused row.
  506. //-----------------------------------------------------------------------
  507. virtual void EnsureVisible();
  508. //-----------------------------------------------------------------------
  509. // Summary:
  510. //     Draws the row (of header/footer records) on the provided DC.
  511. // Parameters:
  512. //     pDC    - Pointer to control drawing context.
  513. //     rcRow  - Coordinates of the rectangle for drawing this row.
  514. //     nLeftOffset - Start drawing left offset in pixels (Horizontal scroll position).
  515. //     rcArea - Coordinates of the rectangle for drawing rows of header/footer records.
  516. // Remarks:
  517. //     Call this member function to draw an item. This function
  518. //     only prepares data for drawing and calls needed drawing functions
  519. //     from PaintManager.
  520. //
  521. //     Thus if you wish to change the look of your report item, you must just
  522. //     provide your own implementation of PaintManager
  523. // See Also: CXTPPaintManager
  524. //-----------------------------------------------------------------------
  525. void DrawFixed(CDC* pDC, CRect rcRow, int nLeftOffset, CRect rcArea);
  526. public:
  527. //-----------------------------------------------------------------------
  528. // Summary:
  529. //     This method is call to update rectangle of item
  530. // Parameters:
  531. //     rcItem - Bounding Rectangle of item cell
  532. //     pColumn - Column to test for tree column
  533. // See Also: CXTPReportColumn::IsTreeColumn
  534. //-----------------------------------------------------------------------
  535. virtual void ShiftTreeIndent(CRect& rcItem, CXTPReportColumn* pColumn) const;
  536. //-----------------------------------------------------------------------
  537. // Summary:
  538. //     Fill XTP_REPORTRECORDITEM_METRICS structure with drawing metrics
  539. // Parameters:
  540. //     pColumn - Column of the item
  541. //     pItem - Item to be draen
  542. //     pMetrics - Output drawing metrics for the item
  543. // See Also: GetItemMetrics
  544. //-----------------------------------------------------------------------
  545. virtual void FillMetrics(CXTPReportColumn* pColumn, CXTPReportRecordItem* pItem, XTP_REPORTRECORDITEM_METRICS* pMetrics);
  546. //-----------------------------------------------------------------------
  547. // Summary:
  548. //     The framework calls this member function to determine whether a
  549. //     point is in the bounding rectangle of the specified tool.
  550. // Parameters:
  551. //     point - Specifies the x- and y-coordinate of the cursor. These
  552. //             coordinates are always relative to the upper-left corner of the window
  553. //     pTI   - A pointer to a TOOLINFO structure.
  554. // Returns:
  555. //     If the tooltip control was found, the window control ID. If
  556. //     the tooltip control was not found, -1.
  557. //-----------------------------------------------------------------------
  558. virtual INT_PTR OnToolHitTest(CPoint point, TOOLINFO* pTI);
  559. //-----------------------------------------------------------------------
  560. // Summary:
  561. //     Call this member to determine the row type: body, header, or footer.
  562. // Returns:
  563. //     A value of enum XTPReportRowType.
  564. //-----------------------------------------------------------------------
  565. XTPReportRowType GetType() const;
  566. protected:
  567. //-----------------------------------------------------------------------
  568. // Summary:
  569. //     Sets new row index in the view.
  570. // Parameters:
  571. //     nNewIndex - New row numeric index.
  572. // Remarks:
  573. //     Call this member function when you want to change the row
  574. //     position in the corresponding row collection.
  575. //-----------------------------------------------------------------------
  576. virtual void SetIndex(int nNewIndex);
  577. //private:
  578. //-----------------------------------------------------------------------
  579. // Summary:
  580. //     Get the latest row index from the group specified.
  581. // Parameters:
  582. //     pChilds - Children collection.
  583. // Returns:
  584. //     Last row index in group.
  585. //-----------------------------------------------------------------------
  586. int GetLastChildRow(CXTPReportRows* pChilds) const;
  587. protected:
  588. CXTPReportRecord* m_pRecord;    // Pointer to the associated CXTPReportRecord object.
  589. CXTPReportControl* m_pControl;  // Pointer to the parent report control.
  590. int m_nIndex;                   // Item index.
  591. CRect m_rcRow;                  // A rectangle where a row is to be drawn.
  592. CRect m_rcCollapse;             // A rectangle with coordinates of collapse/expand bitmap.
  593. CXTPReportRow* m_pParentRow;    // Pointer to the parent row in the tree.
  594. CXTPReportRows* m_pParentRows;  // Pointer to the parent rows in the tree.
  595. int m_nRowLevel;                // Row depth level in a tree.
  596. int m_nGroupLevel;              // Contains row depth level when row is a group row.
  597. BOOL m_bVisible;                // TRUE if this row should be visible, FALSE when row is hidden.
  598. CXTPReportRows* m_pChilds;      // A collection of row children.
  599. BOOL m_bExpanded;               // TRUE when row is expanded in a tree view, FALSE when row is collapsed.
  600. int m_nPreviewHeight;           // Height of the preview item of this row.
  601. int m_nChildIndex;              // Index of row inside parent rows.
  602. XTPReportRowType m_nRowType;    // Row type from XTPReportRowType
  603. private:
  604. //{{AFX_CODEJOCK_PRIVATE
  605. friend class CXTPReportControl;
  606. friend class CXTPReportSelectedRows;
  607. friend class CXTPReportRows;
  608. friend class CXTPReportRecordItem;
  609. //}}AFX_CODEJOCK_PRIVATE
  610. };
  611. AFX_INLINE void CXTPReportRow::SetIndex(int nNewIndex) {
  612. m_nIndex = nNewIndex;
  613. }
  614. AFX_INLINE CXTPReportRecord* CXTPReportRow::GetRecord() const{
  615. return m_pRecord;
  616. }
  617. AFX_INLINE CXTPReportRow* CXTPReportRow::GetParentRow() const {
  618. return m_pParentRow;
  619. }
  620. AFX_INLINE CXTPReportControl* CXTPReportRow::GetControl() const {
  621. return m_pControl;
  622. }
  623. AFX_INLINE void CXTPReportRow::SetCollapseRect(CRect rcCollapse) {
  624. m_rcCollapse = rcCollapse;
  625. }
  626. AFX_INLINE CRect CXTPReportRow::GetRect() const {
  627. return m_rcRow;
  628. }
  629. AFX_INLINE int CXTPReportRow::GetGroupLevel() const {
  630. return m_nGroupLevel;
  631. }
  632. AFX_INLINE CXTPReportRows* CXTPReportRow::GetParentRows() const {
  633. return m_pParentRows;
  634. }
  635. AFX_INLINE XTPReportRowType CXTPReportRow::GetType() const {
  636. return m_nRowType;
  637. }
  638. #endif //#if !defined(__XTPREPORTROW_H__)