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

对话框与窗口

开发平台:

Visual C++

  1. // XTPReportColumn.h: interface for the CXTPReportColumn 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(__XTPREPORTCOLUMN_H__)
  22. #define __XTPREPORTCOLUMN_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER > 1000
  25. #pragma once
  26. #endif // _MSC_VER > 1000
  27. #include "XTPReportDefines.h"
  28. class CXTPReportGroups;
  29. class CXTPReportRecordItemEditOptions;
  30. class CXTPPropExchange;
  31. //-----------------------------------------------------------------------
  32. // Summary:
  33. //      This enum defines the best fit mode.
  34. //-----------------------------------------------------------------------
  35. enum XTPReportColumnBestFitMode
  36. {
  37. xtpColumnBestFitModeVisibleData = 0, // Fit by visible column data.
  38. xtpColumnBestFitModeAllData     = 1, // Fit by all column data.
  39. };
  40. //===========================================================================
  41. // Summary:
  42. //     Represents report column item with its properties and operations.
  43. // Remarks:
  44. //     You create object of CXTPReportColumn by calling a constructor and
  45. //     provide all necessary parameters. Many of the parameters have default
  46. //     values. Column has 3 properties that greatly influence its behavior:
  47. //
  48. //     bAutoSize - TRUE allows auto resizing of the width of columns when
  49. //                 ReportControl's client area is resized by the user. If
  50. //                 bAutoSize is set to FALSE, the column keeps its initial
  51. //                 size
  52. //
  53. //     bSortable - Allows column to be sortable if it has value TRUE. If
  54. //                 you set it to FALSE, you won't be able to sort records
  55. //                 by their column
  56. //
  57. //     bVisible  - Determines if columns will draw by control or not. For
  58. //                 example, if the column is dragged into FieldChooser,
  59. //                 the column still exists in the columns list, but it
  60. //                 becomes invisible.
  61. // See Also: CXTPReportControl, CXTPReportColumns
  62. //===========================================================================
  63. class _XTP_EXT_CLASS CXTPReportColumn : public CXTPCmdTarget
  64. {
  65. //{{AFX_CODEJOCK_PRIVATE
  66. friend class CXTPReportControl;
  67. friend class CXTPReportColumns;
  68. friend class CXTPReportHeader;
  69. friend class CXTPReportRows;
  70. friend class CXTPReportRow;
  71. friend class CXTPReportColumnOrder;
  72. //}}AFX_CODEJOCK_PRIVATE
  73. public:
  74. //-----------------------------------------------------------------------
  75. // Summary:
  76. //     Constructs a CXTPReportColumn object.
  77. // Parameters:
  78. //     strName    - Column name.
  79. //     nItemIndex - An index of the corresponding record item.
  80. //     nWidth     - An initial width of the created column.
  81. //     nMinWidth  - Minimal width of the column.
  82. //     nIconID    - Number of the corresponding icon in the image list.
  83. //     bAutoSize  - Is column resizable flag.
  84. //     bSortable  - Is column sortable flag.
  85. //     bVisible   - Is column visible flag.
  86. //     strInternalName - Internal column name (to serialize colunm options).
  87. // Remarks:
  88. //     There are 3 parameters that greatly influence a column's behavior:
  89. //     * <b>bAutoSize</b> TRUE allows auto resizing of width of columns when
  90. //           the ReportControl's client area is resized by the
  91. //           user. If bAutoSize is set to FALSE, the column
  92. //           keeps its initial size
  93. //     * <b>bSortable</b> Allows the column to be sortable if has value TRUE.
  94. //           If you set it to FALSE, you won't be able to sort
  95. //           records by their column
  96. //     * <b>bVisible</b>  Determines if columns will draw by control or not.
  97. //           For example if the column is dragged into FieldChooser,
  98. //           the column still exists in the columns list,
  99. //           but it becomes invisible.
  100. // Example:
  101. // <code>
  102. // #define COLUMN_ICON 1
  103. // #define COLUMN_MAIL_ICON 1
  104. //
  105. // CXTPReportControl wndReport;
  106. // wndReport.AddColumn(new CXTPReportColumn(COLUMN_ICON, _T("Message Class"), 18, FALSE, COLUMN_MAIL_ICON));
  107. // </code>
  108. //-----------------------------------------------------------------------
  109. CXTPReportColumn(int nItemIndex, LPCTSTR strName, int nWidth, BOOL bAutoSize = TRUE, int nIconID = XTP_REPORT_NOICON , BOOL bSortable = TRUE, BOOL bVisible = TRUE);
  110. CXTPReportColumn(int nItemIndex, LPCTSTR strDisplayName, LPCTSTR strInternalName, int nWidth, BOOL bAutoSize = TRUE, int nIconID = XTP_REPORT_NOICON , BOOL bSortable = TRUE, BOOL bVisible = TRUE); // <COMBINE CXTPReportColumn::CXTPReportColumn@int@LPCTSTR@int@BOOL@int@BOOL@BOOL>
  111. //-----------------------------------------------------------------------
  112. // Summary:
  113. //     Destroys a CXTPReportColumn object, handles cleanup and deallocation
  114. //-----------------------------------------------------------------------
  115. virtual ~CXTPReportColumn();
  116. //-----------------------------------------------------------------------
  117. // Summary:
  118. //     Returns current column header drag mode.
  119. // Remarks:
  120. //     ReportColumn may be moved (change order of columns, delete columns from
  121. //     header, move column to FieldChooser) using drag and drop. When column
  122. //     is moved, it is in Dragged mode. You use IsDragging() to determine if
  123. //     columns are in Dragged mode
  124. // Returns:
  125. //     TRUE if the column header is in dragging mode, FALSE otherwise.
  126. // See Also: IsAllowDragging
  127. //-----------------------------------------------------------------------
  128. BOOL IsDragging() const;
  129. //-----------------------------------------------------------------------
  130. // Summary:
  131. //     Returns the last drawn column rect.
  132. // Remarks:
  133. //     Each time when the column is drawing, its rectangle is recalculated
  134. //     to fit in size after ReportControl resizing, Column resizing
  135. //     or moving, etc. You use GetRect() to get the latest rectangle sizes.
  136. // Returns:
  137. //     The client rectangle where the column was drawn last time.
  138. //-----------------------------------------------------------------------
  139. CRect GetRect() const;
  140. //-----------------------------------------------------------------------
  141. // Summary:
  142. //     Returns column width.
  143. // Remarks:
  144. //     Each time when the column is drawing, its rectangle is recalculated
  145. //     to fit in size after ReportControl resizing, Column resizing
  146. //     or moving, etc. You use GetWidth() to get the latest rectangle width.
  147. // Returns:
  148. //     The current column width in logical units.
  149. //-----------------------------------------------------------------------
  150. int GetWidth() const;
  151. //-----------------------------------------------------------------------
  152. // Summary:
  153. //     Calculates caption length.
  154. // Parameters:
  155. //     pDC - Device context to calculate width at.
  156. // Remarks:
  157. //     This function calculates caption text length in logical units
  158. //     using the given device context, current caption font, and string
  159. //     of text.
  160. // Returns:
  161. //     Caption length in pixels.
  162. //-----------------------------------------------------------------------
  163. int GetCaptionWidth(CDC* pDC) const;
  164. //-----------------------------------------------------------------------
  165. // Summary:
  166. //     Sets column width.
  167. // Parameters:
  168. //     nNewWidth - New column width in pixels.
  169. // Remarks:
  170. //     This member function gives you possibility to change column width
  171. //     manually. To set initial width or set width for columns which
  172. //     AutoSize = FALSE.
  173. // Returns:
  174. //     Previous column width in pixels.
  175. //-----------------------------------------------------------------------
  176. int SetWidth(int nNewWidth);
  177. //-----------------------------------------------------------------------
  178. // Summary:
  179. //     Returns column indentation.
  180. // Returns:
  181. //     Previous column indentation in pixels.
  182. //-----------------------------------------------------------------------
  183. int GetIndent() const;
  184. //-----------------------------------------------------------------------
  185. // Summary:
  186. //     Returns the index of the associated record item.
  187. // Returns:
  188. //     The index of the associated record item.
  189. //-----------------------------------------------------------------------
  190. int GetItemIndex() const;
  191. //-----------------------------------------------------------------------
  192. // Summary:
  193. //     Returns the index of the column.
  194. // Returns:
  195. //     The index of the column.
  196. //-----------------------------------------------------------------------
  197. int GetIndex() const;
  198. //-----------------------------------------------------------------------
  199. // Summary:
  200. //     Returns the ID of the associated column header icon.
  201. // Remarks:
  202. //     Column can have an image that will be drawn on it. You use
  203. //     GetIconID() to get the current image id which passes to the
  204. //     column ID of the column. It must match to one of the ids in the
  205. //     imagelist
  206. // Returns:
  207. //     The ID of the associated column header icon.
  208. //-----------------------------------------------------------------------
  209. int GetIconID() const;
  210. //-----------------------------------------------------------------------
  211. // Summary:
  212. //     Sets the ID of the associated column header icon.
  213. // Remarks:
  214. //     Column can have an image that will be drawn on it. You use
  215. //     GetIconID() to get the current image id which passes to the
  216. //     column ID of the column. It must match to one of the ids in the
  217. //     imagelist
  218. // Parameters:
  219. //     nIconId - The ID of the associated column header icon.
  220. //-----------------------------------------------------------------------
  221. void SetIconID(int nIconId);
  222. //-----------------------------------------------------------------------
  223. // Summary:
  224. //     Returns the text caption for the column header.
  225. // Remarks:
  226. //     You use GetCaption() to get the current column caption.
  227. // Returns:
  228. //     The text caption for the column header.
  229. //-----------------------------------------------------------------------
  230. CString GetCaption() const;
  231. //-----------------------------------------------------------------------
  232. // Summary:
  233. //     Call this member to set/change the column header caption.
  234. // Parameters:
  235. //     strCaption - String caption of the column.  Text displayed in the column header.
  236. //-----------------------------------------------------------------------
  237. void SetCaption(LPCTSTR strCaption);
  238. //-----------------------------------------------------------------------
  239. // Summary:
  240. //     Call this member to set/change the column footer text.
  241. // Parameters:
  242. //     strFooter - String footer of the column.  Text displayed in the column footer.
  243. // Remarks
  244. //     Call CXTPReportControl::ShowFooter to show footer area.
  245. // See Also: GetFooterText, CXTPReportControl::ShowFooter
  246. //-----------------------------------------------------------------------
  247. void SetFooterText(LPCTSTR strFooter);
  248. //-----------------------------------------------------------------------
  249. // Summary:
  250. //     Returns the footer text for the column.
  251. // Remarks:
  252. //     Use SetFooterText() to set the current footer text.
  253. // Returns:
  254. //     The text caption for the column footer.
  255. //-----------------------------------------------------------------------
  256. CString GetFooterText() const;
  257. //-----------------------------------------------------------------------
  258. // Summary:
  259. //     Call this member to set/change the column footer font.
  260. // Parameters:
  261. //     pFont - Pointer to font object. May be NULL.
  262. // Remarks:
  263. //     The CXTPReportPaintManager::m_fontCaption is used as default footer
  264. //     font. If pFont is NULL the default font will be used.
  265. // See Also:
  266. //     GetFooterFont
  267. //-----------------------------------------------------------------------
  268. void SetFooterFont(CFont* pFont);
  269. //-----------------------------------------------------------------------
  270. // Summary:
  271. //     Returns the footer font for the column.
  272. // Remarks:
  273. //     The CXTPReportPaintManager::m_fontCaption is used as default footer
  274. //     font.
  275. // Returns:
  276. //     The footer font for the column.
  277. // See Also:
  278. //     SetFooterFont
  279. //-----------------------------------------------------------------------
  280. CFont* GetFooterFont();
  281. //-----------------------------------------------------------------------
  282. // Summary:
  283. //     Call this member to set/change is the right column footer divider
  284. //     visible.
  285. // Parameters:
  286. //     bSet - If TRUE divider is visible, FALSE - invisible.
  287. // Remarks:
  288. //     By default divider is visible.
  289. // See Also:
  290. //     GetDrawFooterDivider
  291. //-----------------------------------------------------------------------
  292. void SetDrawFooterDivider(BOOL bSet);
  293. //-----------------------------------------------------------------------
  294. // Summary:
  295. //     Returns is right column footer divider visible.
  296. // Remarks:
  297. //     By default divider is visible.
  298. // Returns:
  299. //     Is column footer divider visible.
  300. // See Also:
  301. //     SetDrawFooterDivider
  302. //-----------------------------------------------------------------------
  303. BOOL GetDrawFooterDivider();
  304. //-----------------------------------------------------------------------
  305. // Summary:
  306. //     Call this member to set/change is the right column header divider
  307. //     visible.
  308. // Parameters:
  309. //     bSet - If TRUE divider is visible, FALSE - invisible.
  310. // Remarks:
  311. //     By default divider is visible.
  312. // See Also:
  313. //     GetDrawHeaderDivider
  314. //-----------------------------------------------------------------------
  315. void SetDrawHeaderDivider(BOOL bSet);
  316. //-----------------------------------------------------------------------
  317. // Summary:
  318. //     Returns is right column header divider visible.
  319. // Remarks:
  320. //     By default divider is visible.
  321. // Returns:
  322. //     Is column footer divider visible.
  323. // See Also:
  324. //     SetDrawHeaderDivider
  325. //-----------------------------------------------------------------------
  326. BOOL GetDrawHeaderDivider();
  327. //-----------------------------------------------------------------------
  328. // Summary:
  329. //     Returns the text tool tip for the column header.
  330. // Returns:
  331. //     The text tool tip for the column header.
  332. //-----------------------------------------------------------------------
  333. CString GetTooltip() const;
  334. //-----------------------------------------------------------------------
  335. // Summary:
  336. //     Call this member to set/change the column tool tip.
  337. // Parameters:
  338. //     lpszTooltip - Tool tip of the column
  339. //-----------------------------------------------------------------------
  340. void SetTooltip(LPCTSTR lpszTooltip);
  341. //-----------------------------------------------------------------------
  342. // Summary:
  343. //     Returns the current column header visibility mode.
  344. // Returns:
  345. //     TRUE if the column header is visible, FALSE otherwise.
  346. // See Also: SetVisible
  347. //-----------------------------------------------------------------------
  348. BOOL IsVisible() const;
  349. //-----------------------------------------------------------------------
  350. // Summary:
  351. //     Sets column visible mode (TRUE - visible, FALSE - invisible).
  352. // Parameters:
  353. //     bVisible - New column visible state.
  354. // Remarks:
  355. //     When you move a column to FieldChooser, it becomes invisible.
  356. //     To change visibility of column you use SetVisible(BOOL)
  357. // See Also: IsVisible
  358. //-----------------------------------------------------------------------
  359. void SetVisible(BOOL bVisible = TRUE);
  360. //-----------------------------------------------------------------------
  361. // Summary:
  362. //     Returns the current column header filtrability mode.
  363. // Returns:
  364. //     TRUE if the column header is filtrable, FALSE otherwise.
  365. // See Also: SetFiltrable
  366. //-----------------------------------------------------------------------
  367. BOOL IsFiltrable() const;
  368. //-----------------------------------------------------------------------
  369. // Summary:
  370. //     Determines if group is highlighted
  371. // Returns:
  372. //     TRUE if group is highlighted
  373. //-----------------------------------------------------------------------
  374. BOOL IsHotTracking() const;
  375. //-----------------------------------------------------------------------
  376. // Summary:
  377. //     Sets column filtrable mode (TRUE - filtrable, FALSE - not filtrable).
  378. // Parameters:
  379. //     bFiltrable - New column filtrable state.
  380. // Returns:
  381. //     Previous column filtrable state.
  382. // See Also: IsFiltrable
  383. //-----------------------------------------------------------------------
  384. BOOL SetFiltrable(BOOL bFiltrable = TRUE);
  385. //-----------------------------------------------------------------------
  386. // Summary:
  387. //     Returns column allow resizing state.
  388. // Returns:
  389. //     TRUE if the column allows resizing, FALSE otherwise.
  390. // See Also: EnableResize
  391. //-----------------------------------------------------------------------
  392. BOOL IsResizable() const;
  393. //-----------------------------------------------------------------------
  394. // Summary:
  395. //     Enable/Disables the column's allow resizing mode.
  396. // Parameters:
  397. //     bIsResizable - TRUE if column will be resizable, FALSE otherwise.
  398. // See Also: IsResizable
  399. //-----------------------------------------------------------------------
  400. void EnableResize(BOOL bIsResizable);
  401. //-----------------------------------------------------------------------
  402. // Summary:
  403. //     Sets minimal width value for column.
  404. // Parameters:
  405. //     nMinWidth - New column minimal width value.
  406. // Remarks:
  407. //     After you set the minimal width for the column, it cannot be
  408. //     resizable to less than minimal width.
  409. // Returns:
  410. //     Previous column minimal width value.
  411. // See Also: GetMinWidth
  412. //-----------------------------------------------------------------------
  413. int SetMinWidth(int nMinWidth);
  414. //-----------------------------------------------------------------------
  415. // Summary:
  416. //     Returns the current minimal column width.
  417. // Returns:
  418. //     Column minimal width value in pixels.
  419. // See Also: SetMinWidth
  420. //-----------------------------------------------------------------------
  421. int GetMinWidth() const;
  422. //-----------------------------------------------------------------------
  423. // Summary:
  424. //     Returns the column sortable flag.
  425. // Returns:
  426. //     TRUE if column is sortable, FALSE otherwise.
  427. // See Also: IsSorted, IsSortedIncreasing, IsSortedDecreasing
  428. //-----------------------------------------------------------------------
  429. BOOL IsSortable() const;
  430. //-----------------------------------------------------------------------
  431. // Summary:
  432. //     Call this member to determine if the column can be grouped.
  433. // Remarks:
  434. //     Not all columns allow for grouping. You use IsGroupable
  435. //     to determine if the column can be grouped.  I.e. Added
  436. //     to the "Group By" box.
  437. // Returns:
  438. //     TRUE if the column can be grouped, FALSE otherwise.
  439. //-----------------------------------------------------------------------
  440. BOOL IsGroupable() const;
  441. //-----------------------------------------------------------------------
  442. // Summary:
  443. //     Determine is this column sortable when grouped by.
  444. // Remarks:
  445. //     TRUE by default. If FALSE - records will be grouped without sorting
  446. //     by this column (sort by other columns will be applied).
  447. // Returns:
  448. //     TRUE if the column is sortable when grouped by, FALSE otherwise.
  449. //-----------------------------------------------------------------------
  450. BOOL IsAutoSortWhenGrouped() const;
  451. //-----------------------------------------------------------------------
  452. // Summary:
  453. //     Returns the column dragging allowance flag.
  454. // Returns:
  455. //     TRUE if the column can be dragged, FALSE otherwise.
  456. // See Also: IsDragging
  457. //-----------------------------------------------------------------------
  458. BOOL IsAllowDragging() const;
  459. //-----------------------------------------------------------------------
  460. // Summary:
  461. //     Determines if the column is sorted in the increasing order.
  462. // Returns:
  463. //     TRUE if the column is sorted in increasing order, FALSE otherwise.
  464. // See Also: IsSorted, IsSortable, IsSortedDecreasing
  465. //-----------------------------------------------------------------------
  466. BOOL IsSortedIncreasing() const;
  467. //-----------------------------------------------------------------------
  468. // Summary:
  469. //     Determines if the column is sorted in the decreasing order.
  470. // Returns:
  471. //     TRUE if the column is sorted in decreasing order, FALSE otherwise.
  472. // See Also: IsSorted, IsSortable, IsSortedIncreasing
  473. //-----------------------------------------------------------------------
  474. BOOL IsSortedDecreasing() const;
  475. //-----------------------------------------------------------------------
  476. // Summary:
  477. //     Call this member to specify that the column is sorted in the increasing order.
  478. // Parameters:
  479. //     bSortIncreasing - TRUE if the column should be sorted in increasing
  480. //                       order, FALSE otherwise.
  481. // See Also: IsSorted, IsSortable, IsSortedIncreasing, IsSortedDecreasing
  482. //-----------------------------------------------------------------------
  483. void SetSortIncreasing(BOOL bSortIncreasing);
  484. //-----------------------------------------------------------------------
  485. // Summary:
  486. //     Determines if the column is sorted.
  487. // Returns:
  488. //     TRUE if the column is sorted, FALSE otherwise.
  489. // Remarks:
  490. //     If the records list is sorted by given column IsSorted() returns
  491. //     TRUE, otherwise - FALSE
  492. // See Also: IsSortable, IsSortedIncreasing, IsSortedDecreasing
  493. //-----------------------------------------------------------------------
  494. BOOL IsSorted() const;
  495. //-----------------------------------------------------------------------
  496. // Summary:
  497. //     Makes/unmakes the current column as containing a tree inside.
  498. // Parameters:
  499. //     bIsTreeColumn - TRUE if this column contains tree items
  500. //                     (collapse/expand buttons) drawn inside,
  501. //                     FALSE otherwise.
  502. // See Also: IsTreeColumn
  503. //-----------------------------------------------------------------------
  504. void SetTreeColumn(BOOL bIsTreeColumn);
  505. //-----------------------------------------------------------------------
  506. // Summary:
  507. //     Returns TRUE if the current column contains tree.
  508. // Returns:
  509. //     TRUE if the current column contains tree items, FALSE otherwise.
  510. // See Also: SetTreeColumn
  511. //-----------------------------------------------------------------------
  512. BOOL IsTreeColumn() const;
  513. //-----------------------------------------------------------------------
  514. // Summary:
  515. //     Reads or writes column data to/from the provided archive stream.
  516. // Parameters:
  517. //     pPX - A CXTPPropExchange object to serialize to or from.
  518. //----------------------------------------------------------------------
  519. virtual void DoPropExchange(CXTPPropExchange* pPX);
  520. //-----------------------------------------------------------------------
  521. // Summary:
  522. //     Sets new Alignment value for column.
  523. // Parameters:
  524. //     nAlignment - New alignment value.
  525. //                  Possible alignment values: DT_LEFT, DT_CENTER, DT_RIGHT and DT_WORDBREAK.
  526. //                  See also DrawText() Format Flags.
  527. // Returns:
  528. //     Previous alignment column value.
  529. //-----------------------------------------------------------------------
  530. int SetAlignment(int nAlignment);
  531. //-----------------------------------------------------------------------
  532. // Summary:
  533. //     Returns the current alignment value for the column.
  534. // Returns:
  535. //     Current column alignment value.
  536. //     The result is one of the following: DT_LEFT, DT_CENTER, DT_RIGHT.
  537. //-----------------------------------------------------------------------
  538. int GetAlignment() const;
  539. //-----------------------------------------------------------------------
  540. // Summary:
  541. //     Sets new Alignment for column text.
  542. // Parameters:
  543. //     nAlignment - New alignment value.
  544. //                  Possible alignment values: DT_LEFT, DT_CENTER, DT_RIGHT and DT_WORDBREAK.
  545. //                  See also DrawText() Format Flags.
  546. //-----------------------------------------------------------------------
  547. void SetHeaderAlignment(int nAlignment);
  548. //-----------------------------------------------------------------------
  549. // Summary:
  550. //     Returns the current alignment for the column text.
  551. // Returns:
  552. //     Current column alignment value.
  553. //     The result is one of the following: DT_LEFT, DT_CENTER, DT_RIGHT.
  554. //-----------------------------------------------------------------------
  555. int GetHeaderAlignment() const;
  556. //-----------------------------------------------------------------------
  557. // Summary:
  558. //     Sets new Alignment for column footer.
  559. // Parameters:
  560. //     nAlignment - New alignment value.
  561. //                  Possible alignment values: DT_LEFT, DT_CENTER, DT_RIGHT and DT_WORDBREAK.
  562. //                  See also DrawText() Format Flags.
  563. //-----------------------------------------------------------------------
  564. void SetFooterAlignment(int nAlignment);
  565. //-----------------------------------------------------------------------
  566. // Summary:
  567. //     Returns the current alignment value for the column footer.
  568. // Returns:
  569. //     Current column alignment value.
  570. //     The result is one of the following: DT_LEFT, DT_CENTER, DT_RIGHT.
  571. //-----------------------------------------------------------------------
  572. int GetFooterAlignment() const;
  573. //-----------------------------------------------------------------------
  574. // Summary:
  575. //     Checks if the column header should have the sort triangle drawn.
  576. // Returns:
  577. //     TRUE if the sort triangle should be drawn for this column,
  578. //     FALSE otherwise.
  579. //-----------------------------------------------------------------------
  580. BOOL HasSortTriangle() const;
  581. //-----------------------------------------------------------------------
  582. // Summary:
  583. //     Call this method to set the column auto sized.
  584. // Returns:
  585. //     TRUE if the column is automatically sized.
  586. //-----------------------------------------------------------------------
  587. BOOL IsAutoSize() const;
  588. //-----------------------------------------------------------------------
  589. // Summary:
  590. //     Call this member to specify whether the column can be sorted when
  591. //     the user clicks on the column header.
  592. // Parameters:
  593. //     bSortable - If TRUE, records can be sorted by this column by
  594. //                 clicking on the column header.  Each time the
  595. //                 column header is clicked the sort order will
  596. //                 toggle between ascending and descending.  by
  597. //                 default, bSortable is TRUE.
  598. //                 If FALSE, records can not be sorted by this column
  599. //                 by clicking on the column header.  The column can
  600. //                 still be sorted, but not by clicking on the column
  601. //                 header.  If you would like to sort the column when
  602. //                 bSortable is FALSE, then you can add the column to
  603. //                 the ReportControl's SortOrder, this will allow you
  604. //                 to keep a column sorted at all times.
  605. // See Also: SetGroupable
  606. //-----------------------------------------------------------------------
  607. void SetSortable(BOOL bSortable);
  608. //-----------------------------------------------------------------------
  609. // Summary:
  610. //     Call this member to specify whether the column sortable when grouped by.
  611. // Parameters:
  612. //     bAutoSortWhenGrouped - Used to enable or disable Auto sorting for
  613. //                            grouped column.
  614. // Remarks:
  615. //     TRUE by default. If FALSE - records will be grouped without sorting
  616. //     by this column (sort by other columns will be applied).
  617. //-----------------------------------------------------------------------
  618. void SetAutoSortWhenGrouped(BOOL bAutoSortWhenGrouped);
  619. //-----------------------------------------------------------------------
  620. // Summary:
  621. //     Call this member to specify whether the column can be grouped.
  622. // Parameters:
  623. //     bGroupable - If TRUE, the column can be added to the "Group By"
  624. //                  box and the contents of the ReportControl will be
  625. //                  grouped by the column.
  626. //                  If FALSE, the column can't be added to the "Group By" box.
  627. // See Also: SetSortable
  628. //-----------------------------------------------------------------------
  629. void SetGroupable(BOOL bGroupable);
  630. //-----------------------------------------------------------------------
  631. // Summary:
  632. //     Call this member to specify whether the column can be dragged.
  633. // Parameters:
  634. //     bAllowDrag - If TRUE, the column can be dragged with the mouse.
  635. //                  If FALSE, the dragging for this column is prohibited.
  636. // See Also: SetSortable, SetGroupable
  637. //-----------------------------------------------------------------------
  638. void SetAllowDrag(BOOL bAllowDrag);
  639. //-----------------------------------------------------------------------
  640. // Summary:
  641. //     Retrieves columns array
  642. // Returns:
  643. //     CXTPReportColumns object
  644. //-----------------------------------------------------------------------
  645. CXTPReportColumns* GetColumns() const;
  646. //-----------------------------------------------------------------------
  647. // Summary:
  648. //     Retrieved parent report control
  649. // Returns:
  650. //     Parent report control
  651. // See Also: GetColumns
  652. //-----------------------------------------------------------------------
  653. CXTPReportControl* GetControl() const;
  654. //-----------------------------------------------------------------------
  655. // Summary:
  656. //     Call this member to determine if the column header will appear in
  657. //     the field chooser when hidden or in the GroupBy Box.
  658. // Returns:
  659. //     TRUE is if the column header will be displayed in the field chooser when
  660. //     the column is hidden or in the GroupBy Box, FALSE if it will not.
  661. // See Also: SetShowInFieldChooser
  662. //-----------------------------------------------------------------------
  663. BOOL IsShowInFieldChooser() const;
  664. //-----------------------------------------------------------------------
  665. // Summary:
  666. //     Call this member to specify whether the column will appear in
  667. //     the FieldChooser when the column is hidden or in the "Group By Box."
  668. // Parameters:
  669. //     bShow - TRUE is the column should be displayed in the field chooser
  670. //             when hidden, FALSE otherwise.
  671. // Remarks:
  672. //     When a column is hidden or added to the "Group By Box" it will be
  673. //     automatically added to the FieldChooser unless the ShowInFieldChooser
  674. //     property is set to FALSE.
  675. //     If you would like to have a hidden column that the user can not access
  676. //     and you enable the FieldChooser, then you will need to set the
  677. //     ShowInFieldChooser property to FALSE.  By default this property is TRUE.
  678. // See Also: IsShowInFieldChooser
  679. //-----------------------------------------------------------------------
  680. void SetShowInFieldChooser(BOOL bShow);
  681. //-----------------------------------------------------------------------
  682. // Summary:
  683. //     Retrieves CXTPReportRecordItemEditOptions.
  684. // Returns:
  685. //     Edit Options of column
  686. //-----------------------------------------------------------------------
  687. CXTPReportRecordItemEditOptions* GetEditOptions() const;
  688. //-----------------------------------------------------------------------
  689. // Summary:
  690. //     Call this member to determine if an edit box is added for the items
  691. //     in the column.
  692. // Returns:
  693. //     TRUE is the items in the column are editable, FALSE if the items
  694. //     can not be edited.
  695. // See Also: SetEditable
  696. //-----------------------------------------------------------------------
  697. BOOL IsEditable() const;
  698. //-----------------------------------------------------------------------
  699. // Summary:
  700. //     Call this member to specify whether the CXTPReportRecordItem(s)
  701. //     in the column can be edited.  This will add an edit box to edit the item
  702. //     when the item is click/double-clicked.  This can be overridden for individual
  703. //     items if the CXTPReportRecordItem::SetEditable member is called.
  704. // Parameters:
  705. //     bEditable - TRUE is the items in the column are editable (an
  706. //                 edit box is added to edit the contents of the item).
  707. // See Also: IsEditable
  708. //-----------------------------------------------------------------------
  709. void SetEditable(BOOL bEditable = TRUE);
  710. //-----------------------------------------------------------------------
  711. // Summary:
  712. //     Allows/disallows column removing.
  713. // Parameters:
  714. //     bAllow - TRUE for allowing column removing, FALSE for disallowing.
  715. // Remarks:
  716. //     Usually user is allowed to remove a column using mouse drag and drop.
  717. //     Using this member function, you can change the user's permissions
  718. //     force allowing or disallowing of column removing.
  719. // See Also: CXTPReportHeader::AllowColumnRemove
  720. //-----------------------------------------------------------------------
  721. void AllowRemove(BOOL bAllow);
  722. //-----------------------------------------------------------------------
  723. // Summary:
  724. //     Call this member to determine if column removing allowed.
  725. // Returns:
  726. //     TRUE is the items in the column removing allowed, FALSE otherwise.
  727. // See Also: AllowRemove
  728. //-----------------------------------------------------------------------
  729. BOOL IsAllowRemove() const;
  730. //-----------------------------------------------------------------------
  731. // Summary:
  732. //     Returns column print width.
  733. // Parameters:
  734. //  nTotalWidth - Total width in pixels.
  735. // Returns:
  736. //     The current column width in logical units for print mode.
  737. //-----------------------------------------------------------------------
  738. int GetPrintWidth(int nTotalWidth) const;
  739. //-----------------------------------------------------------------------
  740. // Summary:
  741. //     Returns internal column name which used in serialization to unique
  742. //     identify column rather than column index.
  743. // Returns:
  744. //     Internal column name string.
  745. //-----------------------------------------------------------------------
  746. const CString& GetInternalName() const;
  747. //-----------------------------------------------------------------------
  748. // Summary:
  749. //     Sets internal column name which used in serialization to unique
  750. //     identify column rather than column index.
  751. // Returns:
  752. //     pcszName - Internal column name string.
  753. //-----------------------------------------------------------------------
  754. void SetInternalName(LPCTSTR pcszName);
  755. //-----------------------------------------------------------------------
  756. // Summary:
  757. //     Call this member to determine if vertical grid to be shown for header rows.
  758. // Returns:
  759. //     TRUE is vertical grid will be shown, FALSE otherwise.
  760. // See Also: SetDrawHeaderRowsVGrid
  761. //-----------------------------------------------------------------------
  762. BOOL GetDrawHeaderRowsVGrid() const;
  763. //-----------------------------------------------------------------------
  764. // Summary:
  765. //     Call this member to determine if vertical grid to be shown for footer rows.
  766. // Returns:
  767. //     TRUE is vertical grid will be shown, FALSE otherwise.
  768. // See Also: SetDrawFooterRowsVGrid
  769. //-----------------------------------------------------------------------
  770. BOOL GetDrawFooterRowsVGrid() const;
  771. //-----------------------------------------------------------------------
  772. // Summary:
  773. //     Call this member to specify whether to show vertical grid for header rows.
  774. // Parameters:
  775. //     bDrawVGrid - TRUE to show vertical grid for header rows.
  776. // See Also: GetDrawHeaderRowsVGrid
  777. //-----------------------------------------------------------------------
  778. void SetDrawHeaderRowsVGrid(BOOL bDrawVGrid = TRUE);
  779. //-----------------------------------------------------------------------
  780. // Summary:
  781. //     Call this member to specify whether to show vertical grid for footer rows.
  782. // Parameters:
  783. //     bDrawVGrid - TRUE to show vertical grid for footer rows.
  784. // See Also: GetDrawFooterRowsVGrid
  785. //-----------------------------------------------------------------------
  786. void SetDrawFooterRowsVGrid(BOOL bDrawVGrid = TRUE);
  787. //-----------------------------------------------------------------------
  788. // Summary:
  789. //     Call this member to force this column to be visible.  This will cause
  790. //     the report control to scroll to this column.
  791. //-----------------------------------------------------------------------
  792. virtual void EnsureVisible();
  793. //-----------------------------------------------------------------------
  794. // Summary:
  795. //     Call this member to determine the column best fit mode.
  796. // Returns:
  797. //     nBestFitMode - the column best fit mode.
  798. // See Also: SetBestFitMode
  799. //-----------------------------------------------------------------------
  800. int GetBestFitMode() const;
  801. //-----------------------------------------------------------------------
  802. // Summary:
  803. //     Call this member to specify the column best fit mode.
  804. // Parameters:
  805. //     nMode - the column best fit mode.
  806. // See Also: GetBestFitMode
  807. //-----------------------------------------------------------------------
  808. void SetBestFitMode(int nMode);
  809. //private:
  810. //{{AFX_CODEJOCK_PRIVATE
  811. int GetNormAlignment(int nAlignment) const;
  812. int GetBestFitWidth();
  813. //}}AFX_CODEJOCK_PRIVATE
  814. private:
  815. void _initData(int nItemIndex, LPCTSTR strDisplayName, LPCTSTR strInternalName, int nWidth, BOOL bAutoSize, int nIconID, BOOL bSortable, BOOL bVisible);
  816. protected:
  817. CString m_strInternalName;          // Internal column name (to serialize colunm options).
  818. CString m_strName;                  // Column name.
  819. CString m_strTooltip;               // Column tooltip.
  820. int m_nItemIndex;                   // Column index.
  821. CString m_strFooterText;            // Column Footer Text.
  822. CFont   m_fontFooter;               // Column Footer font. If Font handle is NULL - the default font is used.
  823. BOOL    m_bDrawFooterDivider;       // If TRUE - draw footer column right divider.
  824. BOOL    m_bDrawHeaderDivider;       // If TRUE - draw header column right divider.
  825. BOOL m_bSortIncreasing;             // Stores column sort direction (used when m_bSortable is TRUE).
  826. BOOL m_bSortable;                   // Determines if the column could be sortable by.
  827. BOOL m_bGroupable;                  // Determines if the column could be grouped by.
  828. BOOL m_bAutoSortWhenGrouped;        // If TRUE this column will be sortable when grouped by, otherwise it will grouped without sorting by it (sort by  other columns wiil be applied).
  829. BOOL m_bAllowDrag;                  // Allow/disallow dragging of the column
  830. BOOL m_bAllowRemove;                // TRUE to allow column remove
  831. CXTPReportColumns* m_pColumns;      // Stores a pointer to the parent columns collection.
  832. int m_nIconID;                      // Associated icon ID.
  833. BOOL m_bVisible;                    // Visible state.
  834. BOOL m_bFiltrable;                  // Is filtering by this column allowed?.
  835. BOOL m_bIsResizable;                // Indicates if the column allows width resizing
  836. CRect m_rcColumn;                   // Saves rectangle where column was drawn last time.
  837. CRect m_rcGroupBy;                  // Saves rectangle where column was drawn in group box.
  838. int m_nMinWidth;                    // Minimal column width. It is not allowed to do it less then minimal.
  839. int m_nMaxItemWidth;                // Contains maximal width of the corresponding item drawn in the column.
  840. int m_nAlignment;                   // Alignment mode for column: DT_LEFT || DT_RIGHT || DT_CENTER
  841. int m_nHeaderAlignment;         // Alignment mode for column text: DT_LEFT || DT_RIGHT || DT_CENTER
  842. int m_nFooterAlignment;         // Alignment mode for column footer text: DT_LEFT || DT_RIGHT || DT_CENTER
  843. int m_nColumnAutoWidth;             // The column a  automatic width
  844. int m_nColumnStaticWidth;           // The user defined with.
  845. BOOL m_bAutoSize;                   // TRUE if column auto sized.
  846. BOOL m_bShowInFieldChooser;         // Indicates if column is shown in the field chooser when the column is hidden or in the GroupBy Box.
  847. BOOL m_bEditable;                   // Indicates whether an edit box should be added to the items in the column.
  848. BOOL m_bDrawHeaderRowsVGrid;            // Indicates whether to draw vertical grid for headers rows.
  849. BOOL m_bDrawFooterRowsVGrid;            // Indicates whether to draw vertical grid for footers rows.
  850. int m_nBestFitMode;                 // Best fit mode. See enum XTPReportColumnBestFitMode
  851. CXTPReportRecordItemEditOptions* m_pEditOptions;    // Edit options of the column
  852. };
  853. AFX_INLINE CString CXTPReportColumn::GetCaption() const{
  854. return m_strName;
  855. }
  856. AFX_INLINE int CXTPReportColumn::GetIconID() const{
  857. return m_nIconID;
  858. }
  859. AFX_INLINE void CXTPReportColumn::SetIconID(int nIconId) {
  860. m_nIconID = nIconId;
  861. }
  862. AFX_INLINE int CXTPReportColumn::SetMinWidth(int nMinWidth) {
  863. int OldMinWidth = m_nMinWidth;
  864. m_nMinWidth = nMinWidth;
  865. return OldMinWidth;
  866. }
  867. AFX_INLINE BOOL CXTPReportColumn::IsFiltrable() const {
  868. return m_bFiltrable;
  869. }
  870. AFX_INLINE BOOL CXTPReportColumn::SetFiltrable(BOOL bFiltrable) {
  871. BOOL bOldFiltrable = m_bFiltrable; m_bFiltrable = bFiltrable; return bOldFiltrable;
  872. }
  873. AFX_INLINE BOOL CXTPReportColumn::IsResizable() const{
  874. return m_bIsResizable;
  875. }
  876. AFX_INLINE void CXTPReportColumn::EnableResize(BOOL bIsResizable) {
  877. m_bIsResizable = bIsResizable;
  878. }
  879. AFX_INLINE BOOL CXTPReportColumn::IsSortable() const{
  880. return m_bSortable;
  881. }
  882. AFX_INLINE BOOL CXTPReportColumn::IsGroupable()const {
  883. return m_bGroupable;
  884. }
  885. AFX_INLINE BOOL CXTPReportColumn::IsAutoSortWhenGrouped() const {
  886. return m_bAutoSortWhenGrouped;
  887. }
  888. AFX_INLINE BOOL CXTPReportColumn::IsAllowDragging() const{
  889. return m_bAllowDrag;
  890. }
  891. AFX_INLINE int CXTPReportColumn::SetAlignment(int nAlignment) {
  892. int nOld = m_nAlignment; m_nAlignment = nAlignment; return nOld;
  893. }
  894. AFX_INLINE BOOL CXTPReportColumn::IsAutoSize() const{
  895. return m_bAutoSize;
  896. }
  897. AFX_INLINE void CXTPReportColumn::SetSortable(BOOL bSortable) {
  898. m_bSortable = bSortable;
  899. }
  900. AFX_INLINE void CXTPReportColumn::SetGroupable(BOOL bGroupable) {
  901. m_bGroupable = bGroupable;
  902. }
  903. AFX_INLINE void CXTPReportColumn::SetAutoSortWhenGrouped(BOOL bAutoSortWhenGrouped) {
  904. m_bAutoSortWhenGrouped = bAutoSortWhenGrouped;
  905. }
  906. AFX_INLINE void CXTPReportColumn::SetAllowDrag(BOOL bAllowDrag) {
  907. m_bAllowDrag = bAllowDrag;
  908. }
  909. AFX_INLINE CXTPReportColumns* CXTPReportColumn::GetColumns() const{
  910. return m_pColumns;
  911. }
  912. AFX_INLINE void CXTPReportColumn::SetSortIncreasing(BOOL bSortIncreasing) {
  913. m_bSortIncreasing = bSortIncreasing;
  914. }
  915. AFX_INLINE CXTPReportRecordItemEditOptions* CXTPReportColumn::GetEditOptions() const{
  916. return m_pEditOptions;
  917. }
  918. AFX_INLINE BOOL CXTPReportColumn::IsEditable() const{
  919. return m_bEditable;
  920. }
  921. AFX_INLINE void CXTPReportColumn::SetEditable(BOOL bEditable /*= TRUE*/) {
  922. m_bEditable = bEditable;
  923. }
  924. AFX_INLINE void CXTPReportColumn::AllowRemove(BOOL bAllow) {
  925. m_bAllowRemove = bAllow;
  926. }
  927. AFX_INLINE BOOL CXTPReportColumn::IsAllowRemove() const {
  928. return m_bAllowRemove;
  929. }
  930. AFX_INLINE CString CXTPReportColumn::GetTooltip() const {
  931. return m_strTooltip;
  932. }
  933. AFX_INLINE void CXTPReportColumn::SetTooltip(LPCTSTR lpszTooltip) {
  934. m_strTooltip = lpszTooltip;
  935. }
  936. AFX_INLINE CString CXTPReportColumn::GetFooterText() const {
  937. return m_strFooterText;
  938. }
  939. AFX_INLINE void CXTPReportColumn::SetHeaderAlignment(int nAlignment) {
  940. m_nHeaderAlignment = nAlignment;
  941. }
  942. AFX_INLINE BOOL CXTPReportColumn::GetDrawFooterDivider() {
  943. return m_bDrawFooterDivider;
  944. }
  945. AFX_INLINE BOOL CXTPReportColumn::GetDrawHeaderDivider() {
  946. return m_bDrawHeaderDivider;
  947. }
  948. AFX_INLINE const CString& CXTPReportColumn::GetInternalName() const {
  949. return m_strInternalName;
  950. }
  951. AFX_INLINE void CXTPReportColumn::SetInternalName(LPCTSTR pcszName) {
  952. m_strInternalName = pcszName;
  953. }
  954. AFX_INLINE BOOL CXTPReportColumn::GetDrawHeaderRowsVGrid() const{
  955. return m_bDrawHeaderRowsVGrid;
  956. }
  957. AFX_INLINE void CXTPReportColumn::SetDrawHeaderRowsVGrid(BOOL bDrawVGrid) {
  958. m_bDrawHeaderRowsVGrid = bDrawVGrid;
  959. }
  960. AFX_INLINE BOOL CXTPReportColumn::GetDrawFooterRowsVGrid() const{
  961. return m_bDrawFooterRowsVGrid;
  962. }
  963. AFX_INLINE void CXTPReportColumn::SetDrawFooterRowsVGrid(BOOL bDrawVGrid) {
  964. m_bDrawFooterRowsVGrid = bDrawVGrid;
  965. }
  966. AFX_INLINE int CXTPReportColumn::GetBestFitMode() const{
  967. return m_nBestFitMode;
  968. }
  969. AFX_INLINE void CXTPReportColumn::SetBestFitMode(int nMode) {
  970. m_nBestFitMode = nMode;
  971. }
  972. #endif //#if !defined(__XTPREPORTCOLUMN_H__)