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

对话框与窗口

开发平台:

Visual C++

  1. // XTPReportRows.h: interface for the CXTPReportRows 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(__XTPREPORTROWS_H__)
  22. #define __XTPREPORTROWS_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER > 1000
  25. #pragma once
  26. #endif // _MSC_VER > 1000
  27. class CXTPReportRow;
  28. class CXTPReportControl;
  29. class CXTPReportColumns;
  30. //===========================================================================
  31. // Summary:
  32. //     This enum defines selection change action.
  33. // See Also: XTP_NM_REPORT_SELCHANGING, XTP_NM_SELECTION_CHANGING
  34. //===========================================================================
  35. enum XTPReportSelectionChangeType
  36. {
  37. xtpReportSelectionAdd,      // Row will be added to selected rows collection.
  38. xtpReportSelectionRemove,   // Row will be removed from selected rows collection.
  39. xtpReportSelectionClear     // The selected rows collection will be cleared.
  40. };
  41. //===========================================================================
  42. // Summary:
  43. //     This struct defines data for XTP_NM_REPORT_SELCHANGING notification.
  44. // See Also: XTP_NM_REPORT_SELCHANGING, XTP_NM_SELECTION_CHANGING
  45. //===========================================================================
  46. struct XTP_NM_SELECTION_CHANGING
  47. {
  48. NMHDR hdr;                          // Standard structure, containing information
  49.                                     // about a notification message.
  50. CXTPReportRow* pRow;                // Pointer to the row associated with the
  51.                                     // notification. It is NULL for xtpReportSelectionClear action.
  52. XTPReportSelectionChangeType nType; // Selection change action.
  53. };
  54. //===========================================================================
  55. // Summary:
  56. //     This class represents a rows collection class.
  57. //     It supports an array of CXTPReportRow pointers.
  58. // Example:
  59. //     See CXTPReportRows::Add for an example of how to work with this class.
  60. // See Also: CXTPReportRow, CXTPReportSelectedRows
  61. //===========================================================================
  62. class _XTP_EXT_CLASS CXTPReportRows : public CXTPHeapObjectT<CCmdTarget, CXTPReportDataAllocator>
  63. {
  64. public:
  65. //-----------------------------------------------------------------------
  66. // Summary:
  67. //     Define a function pointer for comparing events.
  68. // Remarks:
  69. //     This function pointer is used in the SortEx method.
  70. // See Also:
  71. //     Sort, SortEx, CXTPReportControl::SetRowsCompareFunc
  72. //-----------------------------------------------------------------------
  73. typedef int (_cdecl* T_CompareFunc)(const CXTPReportRow** pRow1, const CXTPReportRow** pRow2);
  74. public:
  75. //-----------------------------------------------------------------------
  76. // Summary:
  77. //     Constructs an empty CXTPReportRow pointer array.
  78. // Example:
  79. // <code>
  80. // // Declare a local CXTPReportRows object.
  81. // CXTPReportRows myList;
  82. //
  83. // // Declare a dynamic CXTPReportRows object.
  84. // CXTPReportRows* pTree = new CXTPReportRows();
  85. // </code>
  86. //-----------------------------------------------------------------------
  87. CXTPReportRows();
  88. //-----------------------------------------------------------------------
  89. // Summary:
  90. //     Destroys CXTPReportRows object. Performs cleanup operations.
  91. //-----------------------------------------------------------------------
  92. virtual ~CXTPReportRows();
  93. //-----------------------------------------------------------------------
  94. // Summary:
  95. //     Removes all the elements from this array.
  96. // Parameters:
  97. //     bResetRow - TRUE to remove visible flag of child rows.
  98. // Remarks:
  99. //     Removes all the pointers from this array and releases instances
  100. //     of all stored CXTPReportRow objects.
  101. // Example:
  102. //     See example for CXTPReportRows::Add method.
  103. // See Also: CXTPReportRows overview
  104. //-----------------------------------------------------------------------
  105. virtual void Clear(BOOL bResetRow = TRUE);
  106. //-----------------------------------------------------------------------
  107. // Summary:
  108. //     Gets the number of CXTPReportRow elements in this collection.
  109. // Remarks:
  110. //     Call this method to retrieve the number of elements in the array.
  111. //     Because indexes are zero-based, the size is 1 greater than
  112. //     the largest index.
  113. // Example:
  114. //     See example for CXTPReportRows::Add method.
  115. // Returns:
  116. //     The number of items in the collection.
  117. // See Also: CXTPReportRows overview
  118. //-----------------------------------------------------------------------
  119. int GetCount() const;
  120. //-----------------------------------------------------------------------
  121. // Summary:
  122. //     Returns a row at the specified numeric index.
  123. // Parameters:
  124. //     nIndex - An integer index that is greater than or equal to 0
  125. //              and less than the value returned by GetCount.
  126. // Remarks:
  127. //     Returns the array element at the specified index.
  128. // Example:
  129. //     See example for CXTPReportRows::Add method.
  130. // Returns:
  131. //     The row element currently at this index.
  132. //-----------------------------------------------------------------------
  133. virtual CXTPReportRow* GetAt(int nIndex) const;
  134. //-----------------------------------------------------------------------
  135. // Summary:
  136. //     Adds a new Row element to the end of an array.
  137. // Parameters:
  138. //     pRow - The row element to be added to this array.
  139. // Remarks:
  140. //     Use this method to add the specified CXTPReportRow pointer
  141. //     to the end of the CXTPReportRows collection.
  142. // Returns:
  143. //     The index of the added row.
  144. // Example:
  145. // <code>
  146. // CXTPReportRows* pTree = new CXTPReportRows();
  147. // pTree->Add(new CXTPReportRow(pControl, pRecord1));
  148. // pTree->Add(new CXTPReportRow(pControl, pRecord2));
  149. // CXTPReportRow* pRow0 = pTree->GetAt(0);
  150. // CXTPReportRow* pRow1 = pTree->GetAt(1);
  151. // ASSERT(pRow0 == pTree->GetPrev(pRow1));
  152. // ASSERT(pRow1 == pTree->GetNext(pRow0));
  153. // pTree->RemoveAt(0);
  154. // ASSERT(1 == pTree->GetCount());
  155. // pTree->InsertAt(0, pRow0);
  156. // ASSERT(2 == pTree->GetCount());
  157. // pTree->Clear();
  158. // ASSERT(0 == pTree->GetCount());
  159. // </code>
  160. // See Also:
  161. //     CXTPReportRows overview, GetAt, InsertAt, Clear, GetNext, GetPrev, GetCount
  162. //-----------------------------------------------------------------------
  163. virtual int Add(CXTPReportRow* pRow);
  164. //-----------------------------------------------------------------------
  165. // Summary:
  166. //     Removes an item from the collection on specified position.
  167. // Parameters:
  168. //     nIndex - An integer index that is greater than or equal to 0
  169. //              and less than the value returned by GetCount.
  170. // Remarks:
  171. //     In the process, it shifts down all the elements above the
  172. //     removed element. It decrements the upper bound of the array
  173. //     but does not free memory.
  174. //     It also releases an instance of the removed element.
  175. // Example:
  176. //     See example for CXTPReportRows::Add method.
  177. //-----------------------------------------------------------------------
  178. virtual void RemoveAt(int nIndex);
  179. //-----------------------------------------------------------------------
  180. // Summary:
  181. //     Removes specified row from the collection.
  182. // Parameters:
  183. //     pRow   - The row element to be removed.
  184. //-----------------------------------------------------------------------
  185. virtual int RemoveRow(CXTPReportRow* pRow);
  186. //-----------------------------------------------------------------------
  187. // Summary:
  188. //     Adds one more Row object to the collection at the specified position.
  189. // Parameters:
  190. //     nIndex - An integer index that is greater than or equal to 0
  191. //              and less than the value returned by GetCount.
  192. //     pRow   - The row element to be placed in this array.
  193. // Remarks:
  194. //     InsertAt inserts one element at a specified index in an array.
  195. //     In the process, it shifts up (by incrementing the index) the
  196. //     existing element at this index, and it shifts up all the elements
  197. //     above it.
  198. // Example:
  199. //     See example for CXTPReportRows::Add method.
  200. //-----------------------------------------------------------------------
  201. virtual void InsertAt(int nIndex, CXTPReportRow* pRow);
  202. //-----------------------------------------------------------------------
  203. // Summary:
  204. //     Returns next row in the list.
  205. // Parameters:
  206. //     pRow            - A reference to the current element of the list.
  207. //     bSkipGroupFocus - TRUE to skip all groups.
  208. // Remarks:
  209. //     This function finds a pointer to the provided row element
  210. //     in the list, and returns a pointer to the elements following
  211. //     the found one.
  212. // Returns:
  213. //     A pointer to a next element of the list.
  214. // Example:
  215. //     See example for CXTPReportRows::Add method.
  216. // See Also: GetPrev, CXTPReportControl::SkipGroupsFocus
  217. //-----------------------------------------------------------------------
  218. virtual CXTPReportRow* GetNext(CXTPReportRow* pRow, BOOL bSkipGroupFocus);
  219. //-----------------------------------------------------------------------
  220. // Summary:
  221. //     Returns previous row in the list.
  222. // Parameters:
  223. //     pRow            - A reference to the current element of the list.
  224. //     bSkipGroupFocus - TRUE to skip all groups.
  225. // Remarks:
  226. //     This function finds a pointer to the provided row element
  227. //     in the list, and returns a pointer to the elements before
  228. //     the found one.
  229. // Returns:
  230. //     A pointer to a previous element of the list.
  231. // Example:
  232. //     See example for CXTPReportRows::Add method.
  233. // See Also: GetNext, CXTPReportControl::SkipGroupsFocus
  234. //-----------------------------------------------------------------------
  235. virtual CXTPReportRow* GetPrev(CXTPReportRow* pRow, BOOL bSkipGroupFocus);
  236. //-----------------------------------------------------------------------
  237. // Summary:
  238. //     Call this method to set virtual mode with nCount rows.
  239. // Parameters:
  240. //     pRow   - Virtual row
  241. //     nCount - Count of virtual rows
  242. //-----------------------------------------------------------------------
  243. virtual void SetVirtualMode(CXTPReportRow* pRow, int nCount);
  244. //-----------------------------------------------------------------------
  245. // Summary:
  246. //     Call this method to find row corresponded with specified record
  247. // Parameters:
  248. //     pRecord  - Record need to find.
  249. // Returns:
  250. //     A pointer to associated row object or NULL.
  251. //-----------------------------------------------------------------------
  252. virtual CXTPReportRow* Find(CXTPReportRecord* pRecord);
  253. //-----------------------------------------------------------------------
  254. // Summary:
  255. //     Call this method to find row corresponded with specified record.
  256. //     This function performs search in children too.
  257. // Parameters:
  258. //     pRecord  - Record need to find.
  259. // Returns:
  260. //     A pointer to associated row object or NULL.
  261. //-----------------------------------------------------------------------
  262. virtual CXTPReportRow* FindInTree(CXTPReportRecord* pRecord);
  263. //-----------------------------------------------------------------------
  264. // Summary:
  265. //     Call this method to find a position to insert a new row at.
  266. //     This function performs search in children too.
  267. // Parameters:
  268. //     pRow  - A row to insert.
  269. //     bInsertAfter  - the function sets it to TRUE if a row has to be inserted after the row found.
  270. // Returns:
  271. //     A pointer to the found row object or NULL.
  272. //-----------------------------------------------------------------------
  273. virtual CXTPReportRow* FindInsertionPos(CXTPReportRow* pRow, BOOL& bInsertAfter);
  274. //-----------------------------------------------------------------------
  275. // Summary:
  276. //     Recalculates child indices of all rows in the collection.
  277. // Parameters:
  278. //     bRunInChildren - if TRUE, indices are refreshed in children also.
  279. //-----------------------------------------------------------------------
  280. virtual void RefreshChildIndices(BOOL bRunInChildren = TRUE);
  281. //-----------------------------------------------------------------------
  282. // Summary:
  283. //     Sorts collection elements.
  284. // Parameters:
  285. //     pCompareFunc - A T_CompareFunc function pointer that is used
  286. //                    to compare rows.
  287. // Remarks:
  288. //     This method uses Visual C++ run-time library (MSVCRT)
  289. //     implementation of the quick-sort function, qsort, for sorting
  290. //     stored CXTPReportRow objects.
  291. //
  292. //     Sort() internally uses CompareRows method for comparing 2 rows.
  293. // See Also: CompareRows
  294. //-----------------------------------------------------------------------
  295. virtual void SortEx(T_CompareFunc pCompareFunc);
  296. virtual void Sort(); // <COMBINE SortEx>
  297. //-----------------------------------------------------------------------
  298. // Summary:
  299. //     Compares 2 rows using groups and sort orders of the report control.
  300. // Parameters:
  301. //     pRow1 - First row for comparison.
  302. //     pRow2 - Second row for comparison.
  303. // Remarks:
  304. //     This function is called directly by Sort method.
  305. //
  306. //     The default implementation returns the result of the comparison
  307. //     of *pRow1 and *pRow2.
  308. //
  309. //     This implementation uses CXTPReportRecordItem::Compare for comparing
  310. //     two corresponding items from the row records. First it compares
  311. //     record items in the group order, then by sort order. It returns
  312. //     the first comparison result differ from equality. If no differences was
  313. //     found, it returns 0.
  314. //
  315. // Returns:
  316. //     Zero if pRow1 is equal to pRow2;
  317. //     Less than zero if pRow1 is less than pRow2;
  318. //     Greater than zero if pRow1 is greater than pRow2.
  319. // See Also: Sort, CXTPReportRecordItem::Compare
  320. //-----------------------------------------------------------------------
  321. static int _cdecl CompareRows(const CXTPReportRow** pRow1, const CXTPReportRow** pRow2);
  322. static int _cdecl CompareRows2(const CXTPReportRow** pRow1, const CXTPReportRow** pRow2); //<COMBINE CompareRows>
  323. //{{AFX_CODEJOCK_PRIVATE
  324. virtual void ReserveSize(INT_PTR nNewSize, INT_PTR nGrowBy = -1);
  325. virtual void SetSize(INT_PTR nNewSize, INT_PTR nGrowBy = -1);
  326. virtual void SetAt(INT_PTR nIndex, CXTPReportRow* pRow);
  327. //}}AFX_CODEJOCK_PRIVATE
  328. protected:
  329. //{{AFX_CODEJOCK_PRIVATE
  330. class CXTPReportRowsArray : public CArray<CXTPReportRow*, CXTPReportRow*>
  331. {
  332. public:
  333. void ReserveSize(INT_PTR nNewSize, INT_PTR nGrowBy = -1)
  334. {
  335. if (GetSize() != 0)
  336. {
  337. ASSERT(FALSE);
  338. return;
  339. }
  340. SetSize(1, nNewSize);
  341. Add(NULL);
  342. SetSize(1, nGrowBy < 0 ? 0 : nGrowBy);
  343. m_nSize = 0;
  344. //ASSERT(m_pData == NULL);
  345. //if (m_pData)
  346. //  delete m_pData;
  347. //m_pData = (CXTPReportRow**) new CXTPReportRow*[nNewSize];
  348. //m_nSize = 0;
  349. //m_nMaxSize = nNewSize;
  350. //m_nGrowBy = nGrowBy < 0 ? 0 : nGrowBy;
  351. }
  352. };
  353. CXTPReportRowsArray m_arrRows;   // Internal storage for CXTPReportRow objects.
  354. //}}AFX_CODEJOCK_PRIVATE
  355. CXTPReportRow* m_pVirtualRow;    // Virtual row.
  356. int m_nVirtualRowsCount;         // Count of virtual rows.
  357. };
  358. //===========================================================================
  359. // Summary:
  360. //     Encapsulates a collection of CXTPReportRow pointers that represent
  361. //     the selected rows in a Report Control.
  362. // Remarks:
  363. //     Use this class to programmatically manage a collection of
  364. //     CXTPReportRow pointers that represent the selected rows in a
  365. //     Report Control. This class is commonly used to add or remove rows
  366. //     from the collection.
  367. //
  368. //     Typical work flow is using Add and Remove methods for changing
  369. //     contents of the selection and using Contains method for checking
  370. //     a specific row for its presence in the selection.
  371. // Example:
  372. //     The following example demonstrates how to programmatically use
  373. //     the CXTPReportSelectedRows class to select rows in the Report control.
  374. // <code>
  375. // CXTPReportSelectedRows* pSelRows = pReportControl->GetSelectedRows();
  376. // pSelRows->Add(pRow1);
  377. // pSelRows->Add(pRow2);
  378. // ASSERT(TRUE == pSelRows->Contains(pRow1));
  379. // ASSERT(TRUE == pSelRows->Contains(pRow2));
  380. // pSelRows->Remove(pRow1);
  381. // ASSERT(FALSE == pSelRows->Contains(pRow1));
  382. // pSelRows->Select(pRow1);
  383. // ASSERT(TRUE == pSelRows->Contains(pRow1));
  384. // ASSERT(FALSE == pSelRows->Contains(pRow2));
  385. // </code>
  386. //
  387. // See Also: CXTPReportRow, CXTPReportSelectedRows, CXTPReportControl::GetSelectedRows
  388. //===========================================================================
  389. class _XTP_EXT_CLASS CXTPReportSelectedRows : public CXTPCmdTarget
  390. {
  391. public:
  392. //-----------------------------------------------------------------------
  393. // Summary:
  394. //     Constructs an empty CXTPReportSelectedRows collection.
  395. // Parameters:
  396. //     pControl - Pointer to the parent report control.
  397. // Remarks:
  398. //     This collection could be created only in association with
  399. //     the CXTPReportControl object.
  400. // Example:
  401. // <code>
  402. // // from CXTPReportControl member function
  403. // CXTPReportSelectedRows* pSelectedRows = new CXTPReportSelectedRows(this);
  404. // </code>
  405. // See Also: CXTPReportSelectedRows overview
  406. //-----------------------------------------------------------------------
  407. CXTPReportSelectedRows(CXTPReportControl* pControl);
  408. //-----------------------------------------------------------------------
  409. // Summary:
  410. //     Selects a block of rows.
  411. // Parameters:
  412. //     nBlockBegin - First row index from the block.
  413. //     nBlockEnd   - Final row index from the block.
  414. // Remarks:
  415. //     This function uses pRowBegin and pRowEnd as the bound for the
  416. //     required selection. It enumerates parent report control rows
  417. //     collection and adds all rows from pRowBegin to pRowEnd inclusively
  418. //     to the selection.
  419. //-----------------------------------------------------------------------
  420. void SelectBlock(int nBlockBegin, int nBlockEnd);
  421. //-----------------------------------------------------------------------
  422. // Summary:
  423. //     Clears itself, removing selection.
  424. // Remarks:
  425. //     Removes all the elements from the selection.
  426. //-----------------------------------------------------------------------
  427. void Clear();
  428. //-----------------------------------------------------------------------
  429. // Summary:
  430. //     Adds a row to the selection.
  431. // Parameters:
  432. //     pRow - Pointer to the row to be added to the selection.
  433. // Remarks:
  434. //     This method adds a pointer to the provided row to the selection.
  435. //     After adding, Contains method will return TRUE for all
  436. //     checking attempts of this row pointer.
  437. // Example:
  438. //     See example at CXTPReportSelectedRows overview
  439. // See Also: CXTPReportSelectedRows overview, Remove, Select, Clear, Contains
  440. //-----------------------------------------------------------------------
  441. void Add(CXTPReportRow* pRow);
  442. //-----------------------------------------------------------------------
  443. // Summary:
  444. //     Adds a rows to the selection.
  445. // Parameters:
  446. //     nIndexBegin - First row index of block to be selected.
  447. //     nIndexEnd - Last row index of block to be selected.
  448. //-----------------------------------------------------------------------
  449. void AddBlock(int nIndexBegin, int nIndexEnd);
  450. //-----------------------------------------------------------------------
  451. // Summary:
  452. //     Removes a row from the selection.
  453. // Parameters:
  454. //     pRow - Pointer to the row to be removed from the selection.
  455. // Remarks:
  456. //     This method removes a provided row pointer from the selection.
  457. //     After removing, Contains method will return FALSE for all
  458. //     checking attempts of this row pointer.
  459. // Example:
  460. //     See example at CXTPReportSelectedRows overview
  461. // See Also: CXTPReportSelectedRows overview, Add, Select, Clear, Contains
  462. //-----------------------------------------------------------------------
  463. void Remove(CXTPReportRow* pRow);
  464. //-----------------------------------------------------------------------
  465. // Summary:
  466. //     Returns a value indicating whether the CXTPReportSelectedRows
  467. //     contains the specified CXTPReportRow pointer.
  468. // Parameters:
  469. //     pRow - The CXTPReportRow pointer to search for in the CXTPReportSelectedRows.
  470. // Remarks:
  471. //     Use this method to determine whether the CXTPReportSelectedRows
  472. //     contains the specified CXTPReportRow pointer.
  473. // Returns:
  474. //     TRUE if row is contained in the selection, FALSE otherwise.
  475. // Example:
  476. //     See example at CXTPReportSelectedRows overview
  477. // See Also: CXTPReportSelectedRows overview, Add, Remove, Select, Clear
  478. //-----------------------------------------------------------------------
  479. BOOL Contains(const CXTPReportRow* pRow);
  480. //-----------------------------------------------------------------------
  481. // Summary:
  482. //     Inverts selection for the specified row.
  483. // Parameters:
  484. //     pRow - Pointer to the specified row.
  485. // Remarks:
  486. //     This methods checks the specified method for its presence in
  487. //     the collection and adds or removes it in the reverse order
  488. //     depending on the result.
  489. // Example:
  490. // <code>
  491. // CXTPReportSelectedRows* pSelRows = pReportControl->GetSelectedRows();
  492. // ASSERT(TRUE == pSelRows->Contains(pRow1));
  493. // pSelRows->Invert(pRow1);
  494. // ASSERT(FALSE == pSelRows->Contains(pRow1));
  495. // pSelRows->Invert(pRow1);
  496. // ASSERT(TRUE == pSelRows->Contains(pRow1));
  497. // </code>
  498. // See Also: Add, Remove, Contains
  499. //-----------------------------------------------------------------------
  500. void Invert(CXTPReportRow* pRow);
  501. //-----------------------------------------------------------------------
  502. // Summary:
  503. //     Selects only the specified row.
  504. // Parameters:
  505. //     pRow - Pointer to the specified row.
  506. // Remarks:
  507. //     This method clears the initial selection and
  508. //     selects only the specified row.
  509. // Example:
  510. //     See example at CXTPReportSelectedRows overview
  511. // See Also: CXTPReportSelectedRows overview, Add, Remove, Contains, Clear
  512. //-----------------------------------------------------------------------
  513. void Select(CXTPReportRow* pRow);
  514. //-----------------------------------------------------------------------
  515. // Summary:
  516. //     Gets the number of selected rows in the collection.
  517. // Remarks:
  518. //     Call this method to retrieve the number of selected rows
  519. //     in the array.
  520. // Returns:
  521. //     The number of items in the collection.
  522. // See Also: CXTPReportRows overview
  523. //-----------------------------------------------------------------------
  524. int GetCount();
  525. //-----------------------------------------------------------------------
  526. // Summary:
  527. //     Retrieves selected row by index.
  528. // Parameters:
  529. //     nIndex - Index of selected row to retrieve.
  530. // Remarks:
  531. //     Recommended to use GetFirstSelectedRowPosition / GetNextSelectedRow methods.
  532. // See Also: GetFirstSelectedRowPosition, GetNextSelectedRow
  533. //-----------------------------------------------------------------------
  534. CXTPReportRow* GetAt (int nIndex);
  535. //-----------------------------------------------------------------------
  536. // Summary:
  537. //     Gets the position of the first selected row in the list report control.
  538. // Returns:
  539. //     value that can be used for iteration or object pointer retrieval;
  540. //     NULL if no items are selected.
  541. // See Also: GetNextSelectedItem
  542. //-----------------------------------------------------------------------
  543. POSITION GetFirstSelectedRowPosition();
  544. //-----------------------------------------------------------------------
  545. // Summary:
  546. //     Gets next selected row in the list report control.
  547. // Parameters:
  548. //     pos - A reference to a POSITION value returned by a previous call to
  549. //           GetNextSelectedRow or GetFirstSelectedRowPosition.
  550. //           The value is updated to the next position by this call.
  551. // Returns:
  552. //     The pointer of the next selected row in the list report control.
  553. //-----------------------------------------------------------------------
  554. CXTPReportRow* GetNextSelectedRow(POSITION& pos);
  555. //-----------------------------------------------------------------------
  556. // Summary:
  557. //     Call this method to check if selection was changed.
  558. //-----------------------------------------------------------------------
  559. BOOL IsChanged() const;
  560. //-----------------------------------------------------------------------
  561. // Summary:
  562. //     This method is called to reset changed flag.
  563. // Parameters:
  564. //     bChanged - TRUE to reset.
  565. //-----------------------------------------------------------------------
  566. void SetChanged(BOOL bChanged = TRUE);
  567. //private:
  568. //{{AFX_CODEJOCK_PRIVATE
  569. void _NotifySelChanging(XTPReportSelectionChangeType nType, CXTPReportRow* pRow = NULL);
  570. void _InsertBlock(int nIndexInsert, int nIndexBegin, int nIndexEnd);
  571. void _OnExpanded(int nIndex, int nCount);
  572. void _OnCollapsed(int nIndex, int nCount);
  573. //private:
  574. struct SELECTED_BLOCK
  575. {
  576. int nIndexBegin;
  577. int nIndexEnd;
  578. };
  579. //private:
  580. CXTPReportControl* m_pControl;      // Pointer to the parent report control.
  581. int m_nRowBlockBegin;               // Pointer to the row where rows block begin from.
  582. int m_nPosSelected;
  583. CArray<SELECTED_BLOCK, SELECTED_BLOCK&> m_arrSelectedBlocks;
  584. BOOL m_bChanged;
  585. XTPReportRowType m_nRowType;        // Only rows of one type can be selected (i.e. body, header, or footer).
  586. //}}AFX_CODEJOCK_PRIVATE
  587. friend class CXTPReportControl;
  588. };
  589. AFX_INLINE BOOL CXTPReportSelectedRows::IsChanged() const {
  590. return m_bChanged;
  591. }
  592. AFX_INLINE void CXTPReportSelectedRows::SetChanged(BOOL bChanged /*= TRUE*/) {
  593. m_bChanged = bChanged;
  594. }
  595. #endif //#if !defined(__XTPREPORTROWS_H__)