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

2 years ago
// 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__)