You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
469 lines
17 KiB
C++
469 lines
17 KiB
C++
// XTPReportRecord.h: interface for the CXTPReportRecord class.
|
|
//
|
|
// This file is a part of the XTREME REPORTCONTROL MFC class library.
|
|
// (c)1998-2012 Codejock Software, All Rights Reserved.
|
|
//
|
|
// THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
|
|
// RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
|
|
// CONSENT OF CODEJOCK SOFTWARE.
|
|
//
|
|
// THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
|
|
// IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
|
|
// YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
|
|
// SINGLE COMPUTER.
|
|
//
|
|
// CONTACT INFORMATION:
|
|
// support@codejock.com
|
|
// http://www.codejock.com
|
|
//
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
//{{AFX_CODEJOCK_PRIVATE
|
|
#if !defined(__XTPREPORTRECORD_H__)
|
|
#define __XTPREPORTRECORD_H__
|
|
//}}AFX_CODEJOCK_PRIVATE
|
|
|
|
#if _MSC_VER > 1000
|
|
#pragma once
|
|
#endif // _MSC_VER > 1000
|
|
|
|
|
|
class CXTPReportRecordItem;
|
|
class CXTPReportRecordItemPreview;
|
|
class CXTPReportColumn;
|
|
class CXTPReportRecords;
|
|
class CXTPPropExchange;
|
|
class CXTPMarkupContext;
|
|
|
|
struct XTP_REPORTRECORDITEM_DRAWARGS;
|
|
struct XTP_REPORTRECORDITEM_METRICS;
|
|
|
|
|
|
//===========================================================================
|
|
// Summary:
|
|
// CXTPReportRecord represents a collection of objects of CXTPReportRecordItem
|
|
// or objects of classes that are children of CXTPReportRecordItem.
|
|
// A collection of such items is one record in ReportControl list.
|
|
// You create an object of CXTPReportRecord by simply calling constructor.
|
|
// After it you can add items to the record.
|
|
// Example:
|
|
// <code>
|
|
// // add new record to the record list
|
|
// CXTPReportRecords* pList = new CXTPReportRecords();
|
|
// pList->Add(new CXTPReportRecord());
|
|
// </code>
|
|
//===========================================================================
|
|
class _XTP_EXT_CLASS CXTPReportRecord : public CXTPHeapObjectT<CCmdTarget, CXTPReportDataAllocator>
|
|
{
|
|
friend class CXTPReportRecords;
|
|
friend class CXTPReportRow;
|
|
friend class CXTPReportControl;
|
|
friend class CXTPReportRecordItem;
|
|
friend class CXTPReportPaintManager;
|
|
DECLARE_SERIAL(CXTPReportRecord)
|
|
|
|
public:
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Constructs a CXTPReportRecord object
|
|
//-----------------------------------------------------------------------
|
|
CXTPReportRecord();
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Destroys a CXTPReportRecord object, handles cleanup and deallocation
|
|
//-----------------------------------------------------------------------
|
|
virtual ~CXTPReportRecord();
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Returns the number of items inside record.
|
|
// Returns:
|
|
// The number of items inside the record.
|
|
// See Also: GetItem
|
|
//-----------------------------------------------------------------------
|
|
int GetItemCount() const;
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Returns an item by its index or column.
|
|
// Parameters:
|
|
// nIndex - zero-based index of item in the collection.
|
|
// pColumn - A pointer to a column object to find an item by.
|
|
// Remarks:
|
|
// You use this member function to get an item from collection by
|
|
// item index. If the given index is less than 0 or greater than
|
|
// the value returned by GetItemCount, GetItem returns NULL.
|
|
// Returns:
|
|
// Pointer to the found record item, if any, or NULL otherwise.
|
|
// See Also: GetItemCount
|
|
//-----------------------------------------------------------------------
|
|
CXTPReportRecordItem* GetItem(int nIndex) const;
|
|
CXTPReportRecordItem* GetItem(CXTPReportColumn* pColumn) const; // <COMBINE CXTPReportRecord::GetItem@int@const>
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Returns a preview item.
|
|
// Remarks:
|
|
// Preview items stores separate from all others items. One
|
|
// Record can have only one Preview Item. If ReportRecord doesn't
|
|
// have a preview item, GetItemPreview() returns NULL
|
|
// Returns:
|
|
// Associated Preview item.
|
|
// See Also: SetPreviewItem
|
|
//-----------------------------------------------------------------------
|
|
CXTPReportRecordItemPreview* GetItemPreview() const;
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Sets preview item for the record.
|
|
// Parameters:
|
|
// pItemPreview - Pointer to the associated preview item.
|
|
// Remarks:
|
|
// Preview items stores separate from all others items. One
|
|
// Record can have only one Preview Item.
|
|
// See Also: GetItemPreview
|
|
//-----------------------------------------------------------------------
|
|
void SetPreviewItem(CXTPReportRecordItemPreview* pItemPreview);
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Returns record visible state.
|
|
// Remarks:
|
|
// This member function returns FALSE if the record should be
|
|
// invisible, TRUE if visible.
|
|
// Returns:
|
|
// Boolean value that represents visible state.
|
|
// See Also: SetVisible
|
|
//-----------------------------------------------------------------------
|
|
BOOL IsVisible() const;
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Sets record visibility state.
|
|
// Parameters:
|
|
// bVisible - TRUE if the record should be visible,
|
|
// FALSE if the record should be hidden.
|
|
// See Also: IsVisible
|
|
//-----------------------------------------------------------------------
|
|
void SetVisible(BOOL bVisible);
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Returns record locked state.
|
|
// Returns:
|
|
// TRUE if the record is locked, FALSE otherwise.
|
|
// See Also: SetLocked
|
|
//-----------------------------------------------------------------------
|
|
BOOL IsLocked() const;
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Sets record locked state.
|
|
// Parameters:
|
|
// bLocked - TRUE if record is locked, FALSE otherwise.
|
|
// Remarks:
|
|
// You set the record locked when it shouldn't be sorted on hide.
|
|
// To set record locked or unlocked, you use SetLocked(BOOL)
|
|
// See Also: IsLocked
|
|
//-----------------------------------------------------------------------
|
|
void SetLocked(BOOL bLocked);
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Returns record editable state.
|
|
// Returns:
|
|
// TRUE if the record is editable, FALSE otherwise.
|
|
// See Also: SetEditable
|
|
//-----------------------------------------------------------------------
|
|
BOOL IsEditable() const;
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Sets record editable state.
|
|
// Parameters:
|
|
// bEditable - TRUE if the record is editable, FALSE otherwise.
|
|
//-----------------------------------------------------------------------
|
|
void SetEditable(BOOL bEditable = TRUE);
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Returns record children.
|
|
// Remarks:
|
|
// ReportRecord can have a list of child items.
|
|
// To get the pointer to that list, use GetChilds()
|
|
// Returns:
|
|
// A collection of record children.
|
|
//-----------------------------------------------------------------------
|
|
CXTPReportRecords* GetChilds();
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Returns parent records.
|
|
// Returns:
|
|
// A collection of parent records.
|
|
//-----------------------------------------------------------------------
|
|
CXTPReportRecords* GetRecords() const;
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Determines if record has children records
|
|
// Returns:
|
|
// TRUE if record has children records
|
|
// See Also: GetChilds
|
|
//-----------------------------------------------------------------------
|
|
BOOL HasChildren() const;
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Removes all items.
|
|
//-----------------------------------------------------------------------
|
|
void RemoveAll();
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Returns an index of the provided record item object.
|
|
// Parameters:
|
|
// pItem - record item which index need to retrieve.
|
|
// Remarks:
|
|
// This member function is used to get the zero-based index
|
|
// of items in the record collection. If the item is not found, it returns
|
|
// -1
|
|
// Returns:
|
|
// Zero-based index of provided record item
|
|
//-----------------------------------------------------------------------
|
|
int IndexOf(const CXTPReportRecordItem* pItem) const;
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Calculates item metrics based on the provided draw arguments.
|
|
// Could be overridden by descendants.
|
|
// Parameters:
|
|
// pDrawArgs - Draw arguments for calculating item metrics.
|
|
// pItemMetrics - Pointer to the metrics item to fill with values.
|
|
//-----------------------------------------------------------------------
|
|
virtual void GetItemMetrics(XTP_REPORTRECORDITEM_DRAWARGS* pDrawArgs, XTP_REPORTRECORDITEM_METRICS* pItemMetrics);
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// function to update DataSet in VirtualMode without _RecordsetPtr involved
|
|
// Remarks:
|
|
// Could be overridden by descendants.
|
|
// Parameters:
|
|
// row - Row
|
|
// index - Index
|
|
// sText - value as a string
|
|
// Returns:
|
|
// BOOLEAN value - TRUE if success
|
|
virtual BOOL UpdateRecordField(int row, int index, CString sText);
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Returns the expanded state of the Record
|
|
// Remarks:
|
|
// Returns expanded state of the Record. If expanded state is set to
|
|
// TRUE, the control tries to draw the record with all its children
|
|
// Returns:
|
|
// BOOLEAN value the represent expanded state of ReportRecord
|
|
// See Also: SetExpanded
|
|
//-----------------------------------------------------------------------
|
|
BOOL IsExpanded() const;
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// This member function sets the expanded state of the Record
|
|
// Parameters:
|
|
// bExpanded - TRUE to set record expanded.
|
|
// Remarks:
|
|
// Returns the expanded state of the Record. If the expanded state is set to
|
|
// TRUE, the control tries to draw the record with all its children
|
|
// See Also: IsExpanded
|
|
//-----------------------------------------------------------------------
|
|
virtual void SetExpanded(BOOL bExpanded);
|
|
|
|
BOOL IsSelected() const;
|
|
|
|
void SetSelected(BOOL bSelected);
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Returns TRUE if record is filtered.
|
|
// Returns:
|
|
// TRUE if the record is filtered, FALSE otherwise
|
|
//-----------------------------------------------------------------------
|
|
virtual BOOL IsFiltered() const;
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Retrieves record index in the array.
|
|
// Returns:
|
|
// The record index in the array.
|
|
//-----------------------------------------------------------------------
|
|
int GetIndex() const;
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Adds a record item to the internal records item collection.
|
|
// Parameters:
|
|
// pItem - Pointer to the new record item.
|
|
// Returns:
|
|
// Pointer to the recently added record item.
|
|
//-----------------------------------------------------------------------
|
|
CXTPReportRecordItem* AddItem(CXTPReportRecordItem* pItem);
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Call this member function to Store/Load a report record with record
|
|
// items using the specified data object.
|
|
// Parameters:
|
|
// pPX - Source or destination CXTPPropExchange data object reference.
|
|
//-----------------------------------------------------------------------
|
|
virtual void DoPropExchange(CXTPPropExchange* pPX);
|
|
|
|
//-------------------------------------------------------------------------
|
|
// Summary:
|
|
// Call this method to remove record
|
|
//-------------------------------------------------------------------------
|
|
void Delete();
|
|
|
|
//-------------------------------------------------------------------------
|
|
// Summary:
|
|
// Call this method to increment reference counter of a record and all its children
|
|
//-------------------------------------------------------------------------
|
|
void TreeAddRef();
|
|
|
|
//-------------------------------------------------------------------------
|
|
// Summary:
|
|
// Call this method to decrement reference counter of a record and all its children
|
|
//-------------------------------------------------------------------------
|
|
void TreeRelease();
|
|
|
|
//-------------------------------------------------------------------------
|
|
// Summary:
|
|
// Call this method to set a bookmark to data source record.
|
|
// Parameters:
|
|
// vtBookmark - VARIANT
|
|
//-------------------------------------------------------------------------
|
|
void SetBookmark(VARIANT vtBookmark);
|
|
|
|
//-------------------------------------------------------------------------
|
|
// Summary:
|
|
// Call this method to get a bookmark to data source record.
|
|
// Returns:
|
|
// Bookmark to data source record.
|
|
//-------------------------------------------------------------------------
|
|
VARIANT GetBookmark() const;
|
|
|
|
//-------------------------------------------------------------------------
|
|
// Summary:
|
|
// Call this method to get markup context object.
|
|
// Returns:
|
|
// A pointer to markup context object.
|
|
//-------------------------------------------------------------------------
|
|
CXTPMarkupContext* GetMarkupContext() const;
|
|
|
|
//-------------------------------------------------------------------------
|
|
// Summary:
|
|
// Call this method to get the parent record.
|
|
// Returns:
|
|
// A pointer to report record object.
|
|
//-------------------------------------------------------------------------
|
|
CXTPReportRecord* GetParentRecord() const;
|
|
|
|
|
|
protected:
|
|
CArray<CXTPReportRecordItem*, CXTPReportRecordItem*> m_arrItems; // An internal storage for record items.
|
|
|
|
|
|
CXTPReportRecordItemPreview* m_pPreviewItem; // store Preview Item for record
|
|
|
|
CXTPReportControl *m_pControl; // Pointer to the parent report control.
|
|
CXTPReportRecords *m_pRecords; // Parent records collection.
|
|
CXTPReportRecords *m_pChildren; // A collection of children records.
|
|
|
|
BOOL m_bExpanded; // Contains record expanded state.
|
|
BOOL m_bEditable; // TRUE if the record is editable, FALSE otherwise.
|
|
BOOL m_bVisible; // Is this record visible or not
|
|
BOOL m_bLocked; // Stores locked state for the record.
|
|
BOOL m_bSelected; // Tell whether the record is selected as child or not.
|
|
|
|
int m_nFreeHeight; // Height of visual row in FreeHeight RC mode.
|
|
int m_nIndex; // Index of the record within the collection records.
|
|
VARIANT m_vtBookmark; // Bookmark to data source record for data binding.
|
|
|
|
};
|
|
|
|
AFX_INLINE int CXTPReportRecord::GetItemCount() const
|
|
{
|
|
return (int)m_arrItems.GetSize();
|
|
}
|
|
|
|
AFX_INLINE CXTPReportRecordItem* CXTPReportRecord::GetItem(int nIndex) const
|
|
{
|
|
return nIndex >= 0 && nIndex < GetItemCount() ? m_arrItems.GetAt(nIndex) : NULL;
|
|
}
|
|
|
|
AFX_INLINE BOOL CXTPReportRecord::IsVisible() const
|
|
{
|
|
return m_bVisible;
|
|
}
|
|
|
|
AFX_INLINE void CXTPReportRecord::SetVisible(BOOL bVisible)
|
|
{
|
|
m_bVisible = bVisible;
|
|
}
|
|
|
|
AFX_INLINE BOOL CXTPReportRecord::IsEditable() const
|
|
{
|
|
return m_bEditable;
|
|
}
|
|
|
|
AFX_INLINE BOOL CXTPReportRecord::IsExpanded() const
|
|
{
|
|
return m_bExpanded;
|
|
}
|
|
|
|
AFX_INLINE BOOL CXTPReportRecord::IsLocked() const
|
|
{
|
|
return m_bLocked;
|
|
}
|
|
|
|
AFX_INLINE void CXTPReportRecord::SetLocked(BOOL bLocked)
|
|
{
|
|
m_bLocked = bLocked;
|
|
}
|
|
|
|
AFX_INLINE BOOL CXTPReportRecord::IsSelected() const
|
|
{
|
|
return m_bSelected;
|
|
}
|
|
|
|
AFX_INLINE void CXTPReportRecord::SetSelected(BOOL bSelected)
|
|
{
|
|
m_bSelected = bSelected;
|
|
}
|
|
|
|
AFX_INLINE void CXTPReportRecord::GetItemMetrics(
|
|
XTP_REPORTRECORDITEM_DRAWARGS *pDrawArgs,
|
|
XTP_REPORTRECORDITEM_METRICS *pItemMetrics)
|
|
{
|
|
UNREFERENCED_PARAMETER(pDrawArgs);
|
|
UNREFERENCED_PARAMETER(pItemMetrics);
|
|
}
|
|
|
|
AFX_INLINE BOOL CXTPReportRecord::UpdateRecordField(int /*row*/, int /*index*/, CString /*sText*/) {
|
|
return TRUE;
|
|
}
|
|
AFX_INLINE CXTPReportRecords* CXTPReportRecord::GetRecords() const {
|
|
return m_pRecords;
|
|
}
|
|
AFX_INLINE void CXTPReportRecord::SetBookmark(VARIANT vtBookmark) {
|
|
m_vtBookmark = vtBookmark;
|
|
}
|
|
AFX_INLINE VARIANT CXTPReportRecord::GetBookmark() const {
|
|
return m_vtBookmark;
|
|
}
|
|
|
|
#endif //#if !defined(__XTPREPORTRECORD_H__)
|