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.
363 lines
13 KiB
C
363 lines
13 KiB
C
2 years ago
|
// XTPTrackControlItem.h: interface for the CXTPTrackControlItem 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(__XTPTRACKCONTROLITEM_H__)
|
||
|
#define __XTPTRACKCONTROLITEM_H__
|
||
|
//}}AFX_CODEJOCK_PRIVATE
|
||
|
|
||
|
#if _MSC_VER > 1000
|
||
|
#pragma once
|
||
|
#endif // _MSC_VER > 1000
|
||
|
|
||
|
class CXTPTrackControl;
|
||
|
class CXTPTrackBlock;
|
||
|
typedef CArray<CXTPTrackBlock*, CXTPTrackBlock*> CXTPTrackBlockArray;
|
||
|
|
||
|
//===========================================================================
|
||
|
// Summary:
|
||
|
// This Class represents a container cell for set of Blocks and Keys
|
||
|
// and inherits basic functionality from CXTPReportRecordItem class.
|
||
|
// See Also: CXTPReportRecordItem
|
||
|
//===========================================================================
|
||
|
class _XTP_EXT_CLASS CXTPTrackControlItem : public CXTPReportRecordItem
|
||
|
{
|
||
|
DECLARE_SERIAL(CXTPTrackControlItem)
|
||
|
|
||
|
public:
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Creates a CXTPTrackControlItem item.
|
||
|
//-----------------------------------------------------------------------
|
||
|
CXTPTrackControlItem();
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// CXTPTrackControlItem default destructor
|
||
|
//-----------------------------------------------------------------------
|
||
|
virtual ~CXTPTrackControlItem();
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Returns a text caption of this item.
|
||
|
// Parameters:
|
||
|
// pColumn - Corresponded column of the item.
|
||
|
// Remarks:
|
||
|
// Overwrites parents' member function
|
||
|
// Returns:
|
||
|
// Text caption of the item.
|
||
|
//-----------------------------------------------------------------------
|
||
|
CString GetCaption(CXTPReportColumn* pColumn);
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Should be overridden by descendants for drawing itself.
|
||
|
// Parameters:
|
||
|
// pDrawArgs - structure which contains drawing arguments:
|
||
|
// Remarks:
|
||
|
// Call this member function to draw an item. Actually this function
|
||
|
// only prepares and calls needed drawing functions from PaintManager.
|
||
|
// Thus if you wish to change the look of your report item, you must just provide
|
||
|
// your own implementation of PaintManager
|
||
|
// Example:
|
||
|
// <code>
|
||
|
// // fill structure
|
||
|
// XTP_REPORTRECORDITEM_DRAWARGS drawArgs;
|
||
|
// drawArgs.pDC = pDC;
|
||
|
// drawArgs.pControl = m_pControl;
|
||
|
// drawArgs.pRow = this;
|
||
|
// // call function
|
||
|
// Draw(&drawArgs);
|
||
|
// </code>
|
||
|
//
|
||
|
// See Also: XTP_REPORTRECORDITEM_DRAWARGS
|
||
|
//-----------------------------------------------------------------------
|
||
|
virtual int Draw(XTP_REPORTRECORDITEM_DRAWARGS* pDrawArgs);
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Use this member function to get the block at a point of hit.
|
||
|
// Parameters:
|
||
|
// ptPoint - Coordinate to test
|
||
|
// Returns:
|
||
|
// A pointer to CXTPTrackBlock, which is hit.
|
||
|
//-----------------------------------------------------------------------
|
||
|
CXTPTrackBlock* HitTest(CPoint ptPoint);
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Call this function to remove a block
|
||
|
// Parameters:
|
||
|
// pBlock - A pointer to the block to be removed.
|
||
|
// Returns:
|
||
|
// TRUE if the removal is successful and FALSE else.
|
||
|
//-----------------------------------------------------------------------
|
||
|
BOOL Remove(CXTPTrackBlock* pBlock);
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Call this function to remove a block
|
||
|
// Parameters:
|
||
|
// nIndex - Zero based index of the block to be removed.
|
||
|
// Returns:
|
||
|
// TRUE if the removal is successful and FALSE else.
|
||
|
//-----------------------------------------------------------------------
|
||
|
BOOL RemoveAt(int nIndex);
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Call this function to remove all blocks
|
||
|
//-----------------------------------------------------------------------
|
||
|
void RemoveAll();
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Call this function to add a block to the track item.
|
||
|
// Parameters:
|
||
|
// pBlock - A pointer to track block which is to be added.
|
||
|
// Returns:
|
||
|
// A pointer to the newly added block.
|
||
|
//-----------------------------------------------------------------------
|
||
|
CXTPTrackBlock* Add(CXTPTrackBlock* pBlock);
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Call this function to the track control associated with this item.
|
||
|
// Returns:
|
||
|
// A pointer to the track control.
|
||
|
//-----------------------------------------------------------------------
|
||
|
CXTPTrackControl* GetTrackControl() const;
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Call this function to the track control associated with this item.
|
||
|
// Parameters:
|
||
|
// nIndex - Index of block to return
|
||
|
// Returns:
|
||
|
// A pointer to the track control.
|
||
|
//-----------------------------------------------------------------------
|
||
|
CXTPTrackBlock* GetBlock(int nIndex) const;
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Call this function to the number of block in the track control item.
|
||
|
// Returns:
|
||
|
// An integer telling the number of blocks in a track.
|
||
|
//-----------------------------------------------------------------------
|
||
|
int GetBlockCount() const;
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Use this method to know whether the track control item is locked
|
||
|
// or not.
|
||
|
// Returns:
|
||
|
// A boolean value of TRUE if the track item is locked and FALSE if
|
||
|
// not.
|
||
|
// Remarks:
|
||
|
// If a track is locked it can't be moved and none of it's blocks or
|
||
|
// keys can be moved. When locked, blocks and keys from other tracks
|
||
|
// can't be dragged into this track.
|
||
|
//-----------------------------------------------------------------------
|
||
|
BOOL IsLocked() const;
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Use this method to set the track control item locked/unlocked.
|
||
|
// Parameters:
|
||
|
// bLocked - A boolean value of TRUE if the track control item is to
|
||
|
// be locked and FALSE if not.
|
||
|
// Remarks:
|
||
|
// If a track is locked it can't be moved and none of it's blocks or
|
||
|
// keys can be moved. When locked, blocks and keys from other tracks
|
||
|
// can't be dragged into this track.
|
||
|
//-----------------------------------------------------------------------
|
||
|
void SetLocked(BOOL bLocked = TRUE);
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Processes mouse left button down clicks.
|
||
|
// Parameters:
|
||
|
// pClickArgs - structure which contains mouse click arguments
|
||
|
// Remarks:
|
||
|
// Usually this function is called by ReportRow's OnLButtonDown function
|
||
|
// See Also: XTP_REPORTRECORDITEM_CLICKARGS
|
||
|
//-----------------------------------------------------------------------
|
||
|
virtual BOOL OnLButtonDown(XTP_REPORTRECORDITEM_CLICKARGS* pClickArgs);
|
||
|
|
||
|
// virtual BOOL OnRButtonDown(XTP_REPORTRECORDITEM_CLICKARGS* pClickArgs);
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Processes mouse left button up clicks.
|
||
|
// Parameters:
|
||
|
// pClickArgs - structure which contains mouse click arguments
|
||
|
// Remarks:
|
||
|
// Usually this function is called by ReportRow's OnLButtonUp function
|
||
|
// See Also: XTP_REPORTRECORDITEM_CLICKARGS
|
||
|
//-----------------------------------------------------------------------
|
||
|
virtual BOOL OnLButtonUp(XTP_REPORTRECORDITEM_CLICKARGS* pClickArgs);
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Processes single mouse clicks.
|
||
|
// Parameters:
|
||
|
// pClickArgs - structure which contains mouse click arguments
|
||
|
// Remarks:
|
||
|
// Usually this function is called by ReportRow's OnClick function
|
||
|
// See Also: XTP_REPORTRECORDITEM_CLICKARGS
|
||
|
//-----------------------------------------------------------------------
|
||
|
virtual void OnClick(XTP_REPORTRECORDITEM_CLICKARGS* pClickArgs);
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Processes single mouse clicks.
|
||
|
// Parameters:
|
||
|
// pClickArgs - structure which contains mouse click arguments:
|
||
|
// Remarks:
|
||
|
// Usually this function is called by ReportRow's OnDblClick function
|
||
|
// See Also: XTP_REPORTRECORDITEM_CLICKARGS
|
||
|
//-----------------------------------------------------------------------
|
||
|
virtual void OnDblClick(XTP_REPORTRECORDITEM_CLICKARGS* pClickArgs);
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Processes the move mouse event.
|
||
|
// Parameters:
|
||
|
// point - mouse point
|
||
|
// nFlags - additional flags.
|
||
|
// pControl - pointer to report control.
|
||
|
// Remarks:
|
||
|
// Usually this function is called by ReportRow's OnMouseMove function
|
||
|
//-----------------------------------------------------------------------
|
||
|
virtual void OnMouseMove(UINT nFlags, CPoint point, CXTPReportControl* pControl = NULL);
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Call this member function to Store/Load a report record item using
|
||
|
// the specified data object.
|
||
|
// Parameters:
|
||
|
// pPX - Source or destination CXTPPropExchange data object reference.
|
||
|
//-----------------------------------------------------------------------
|
||
|
virtual void DoPropExchange(CXTPPropExchange* pPX);
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Call this member function to do a hit test on the track control
|
||
|
// item and fill the TOOLINFO with the contextual display string.
|
||
|
// Parameters:
|
||
|
// point - The point of hit.
|
||
|
// pTI - The tool info.
|
||
|
// Returns:
|
||
|
// An INT_PTR value pointing to the track control item on which the
|
||
|
// hit test done.
|
||
|
//-----------------------------------------------------------------------
|
||
|
INT_PTR OnToolHitTest(CPoint point, TOOLINFO* pTI);
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Call the RecalcLayout method to correctly size the track items when
|
||
|
// the layout has changed.
|
||
|
//-----------------------------------------------------------------------
|
||
|
void RecalcLayout();
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Call the function to adjust the block position when the block is
|
||
|
// moved or resized.
|
||
|
// Parameters:
|
||
|
// pBlock - Pointer to the track block which is moved or resized.
|
||
|
// bResize - Tells whether the block is being resized.
|
||
|
//-----------------------------------------------------------------------
|
||
|
void AdjustBlockPosition(CXTPTrackBlock* pBlock, BOOL bResize = FALSE);
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Call this method to do a redrawing of the track control.
|
||
|
//-----------------------------------------------------------------------
|
||
|
void RedrawControl();
|
||
|
protected:
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Call this function to highlight the work area.
|
||
|
// Parameters:
|
||
|
// pDC - Pointer to the device context.
|
||
|
// rcItem - The work area rectangle.
|
||
|
//-----------------------------------------------------------------------
|
||
|
virtual void HighlightWorkArea(CDC* pDC, CRect rcItem);
|
||
|
|
||
|
|
||
|
#ifdef _XTP_ACTIVEX
|
||
|
//{{AFX_CODEJOCK_PRIVATE
|
||
|
DECLARE_DISPATCH_MAP()
|
||
|
DECLARE_INTERFACE_MAP()
|
||
|
|
||
|
|
||
|
LPDISPATCH OleGetBlock(int nIndex);
|
||
|
int OleGetBlockCount();
|
||
|
LPDISPATCH OleAddBlock(BOOL bKey, int nPosition, int nLength);
|
||
|
void OleRemoveBlock(int nIndex);
|
||
|
|
||
|
BOOL OleGetLocked();
|
||
|
void OleSetLocked(BOOL bLocked);
|
||
|
|
||
|
DECLARE_OLETYPELIB_EX(CXTPTrackControlItem);
|
||
|
//}}AFX_CODEJOCK_PRIVATE
|
||
|
#endif
|
||
|
|
||
|
public:
|
||
|
BOOL m_bLocked; // TRUE if whole track is locked
|
||
|
|
||
|
protected:
|
||
|
CXTPTrackBlockArray m_arrBlocks; // Blocks array
|
||
|
|
||
|
protected:
|
||
|
|
||
|
struct DOCK_INFO;
|
||
|
class CDockInfoArray;
|
||
|
|
||
|
friend class CXTPTrackControl;
|
||
|
|
||
|
};
|
||
|
|
||
|
AFX_INLINE CXTPTrackBlock* CXTPTrackControlItem::GetBlock(int nIndex) const
|
||
|
{
|
||
|
return m_arrBlocks[nIndex];
|
||
|
}
|
||
|
|
||
|
AFX_INLINE int CXTPTrackControlItem::GetBlockCount() const
|
||
|
{
|
||
|
return (int)m_arrBlocks.GetSize();
|
||
|
}
|
||
|
|
||
|
AFX_INLINE BOOL CXTPTrackControlItem::IsLocked() const
|
||
|
{
|
||
|
return m_bLocked;
|
||
|
}
|
||
|
|
||
|
AFX_INLINE void CXTPTrackControlItem::SetLocked(BOOL bLocked)
|
||
|
{
|
||
|
m_bLocked = bLocked;
|
||
|
}
|
||
|
|
||
|
|
||
|
#endif //#if !defined(__XTPTRACKCONTROLITEM_H__)
|