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.
366 lines
15 KiB
C
366 lines
15 KiB
C
2 years ago
|
// XTPPropertyGridView.h interface for the CXTPPropertyGridView class.
|
||
|
//
|
||
|
// This file is a part of the XTREME PROPERTYGRID 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(__XTPPROPERTYGRIDVIEW_H__)
|
||
|
#define __XTPPROPERTYGRIDVIEW_H__
|
||
|
//}}AFX_CODEJOCK_PRIVATE
|
||
|
|
||
|
#if _MSC_VER > 1000
|
||
|
#pragma once
|
||
|
#endif // _MSC_VER > 1000
|
||
|
|
||
|
class CXTPPropertyGridView;
|
||
|
class CXTPPropertyGridPaintManager;
|
||
|
class CXTPPropertyGrid;
|
||
|
class CXTPImageManager;
|
||
|
|
||
|
//===========================================================================
|
||
|
// Summary:
|
||
|
// CXTPPropertyGridToolTip is a CWnd derived class.
|
||
|
// It is an internal class used by Property Grid control
|
||
|
//===========================================================================
|
||
|
class _XTP_EXT_CLASS CXTPPropertyGridToolTip : public CWnd
|
||
|
{
|
||
|
public:
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Constructs a CXTPPropertyGridToolTip object
|
||
|
//-----------------------------------------------------------------------
|
||
|
CXTPPropertyGridToolTip();
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Activate Tooltip control.
|
||
|
// Parameters:
|
||
|
// bActive - TRUE to activate.
|
||
|
// pItem - Item which tooltip to show
|
||
|
// bValuePart - TRUE if tooltip of value part will be visible
|
||
|
//-----------------------------------------------------------------------
|
||
|
void Activate(BOOL bActive, CXTPPropertyGridItem* pItem, BOOL bValuePart);
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Creates Tooltip control.
|
||
|
// Parameters:
|
||
|
// pParentWnd - Points to a CXTPPropertyGridView object.
|
||
|
//-----------------------------------------------------------------------
|
||
|
void Create(CXTPPropertyGridView* pParentWnd);
|
||
|
|
||
|
protected:
|
||
|
|
||
|
//{{AFX_CODEJOCK_PRIVATE
|
||
|
DECLARE_MESSAGE_MAP()
|
||
|
|
||
|
//{{AFX_MSG(CXTPPropertyGridView)
|
||
|
afx_msg BOOL OnEraseBkgnd(CDC*);
|
||
|
afx_msg void OnPaint();
|
||
|
afx_msg LRESULT OnNcHitTest(CPoint point);
|
||
|
//}}AFX_MSG
|
||
|
//}}AFX_CODEJOCK_PRIVATE
|
||
|
|
||
|
private:
|
||
|
BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL);
|
||
|
|
||
|
protected:
|
||
|
CXTPPropertyGridView* m_pGrid; // Parent window.
|
||
|
CFont m_fnt; // Font used to display the tool tip
|
||
|
|
||
|
friend class CXTPPropertyGridView;
|
||
|
};
|
||
|
|
||
|
//{{AFX_CODEJOCK_PRIVATE
|
||
|
AFX_INLINE BOOL CXTPPropertyGridToolTip::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext) {
|
||
|
return CWnd::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext);
|
||
|
}
|
||
|
//}}AFX_CODEJOCK_PRIVATE
|
||
|
|
||
|
|
||
|
//===========================================================================
|
||
|
// Summary:
|
||
|
// CXTPPropertyGridView is a CListBox derived class.
|
||
|
// It is an internal class used by Property Grid control
|
||
|
//===========================================================================
|
||
|
class _XTP_EXT_CLASS CXTPPropertyGridView : public CListBox, public CXTPAccessible
|
||
|
{
|
||
|
struct WNDRECT;
|
||
|
DECLARE_DYNAMIC(CXTPPropertyGridView)
|
||
|
|
||
|
public:
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Constructs a CXTPPropertyGridView object
|
||
|
//-----------------------------------------------------------------------
|
||
|
CXTPPropertyGridView();
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Destroys a CXTPPropertyGridView object, handles cleanup and
|
||
|
// deallocation.
|
||
|
//-----------------------------------------------------------------------
|
||
|
virtual ~CXTPPropertyGridView();
|
||
|
|
||
|
public:
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Call this method to get the position of the divider.
|
||
|
// Returns:
|
||
|
// Position of the divider
|
||
|
//-----------------------------------------------------------------------
|
||
|
int GetDividerPos() const;
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Call this method to set the position of the divider.
|
||
|
// Parameters:
|
||
|
// nDivider - Position of the divider
|
||
|
//-----------------------------------------------------------------------
|
||
|
void SetDividerPos(int nDivider);
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Call this method to disable auto calculating divider position
|
||
|
//-----------------------------------------------------------------------
|
||
|
void LockDivider();
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// This method determines where a point lies in a specified item.
|
||
|
// Parameters:
|
||
|
// point - Specifies the point to be tested.
|
||
|
// Returns:
|
||
|
// A pointer to a CXTPPropertyGridItem object
|
||
|
//-----------------------------------------------------------------------
|
||
|
CXTPPropertyGridItem* ItemFromPoint(CPoint point) const;
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Call this method to refresh items in the list.
|
||
|
//-----------------------------------------------------------------------
|
||
|
void Refresh();
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Call this method to remove all items in the list.
|
||
|
//-----------------------------------------------------------------------
|
||
|
void ResetContent();
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// This method retrieves an item with the specified index.
|
||
|
// Parameters:
|
||
|
// nIndex - Specifies the zero-based index of the item to retrieve.
|
||
|
// Returns:
|
||
|
// A pointer to a CXTPPropertyGridItem object
|
||
|
//-----------------------------------------------------------------------
|
||
|
CXTPPropertyGridItem* GetItem(int nIndex) const;
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Call this member function to add a new category to a Property
|
||
|
// Grid Control.
|
||
|
// Parameters:
|
||
|
// strCaption - Name of the category to add.
|
||
|
// pCategory - Points to a CXTPPropertyGridItem object.
|
||
|
// Returns:
|
||
|
// A pointer to a CXTPPropertyGridItem object.
|
||
|
//-----------------------------------------------------------------------
|
||
|
CXTPPropertyGridItem* AddCategory(LPCTSTR strCaption, CXTPPropertyGridItem* pCategory = NULL);
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Call this member function to insert a new category to the Property Grid control.
|
||
|
// Parameters:
|
||
|
// strCaption - Name of the category to add.
|
||
|
// nIndex - Index of category to be inserted
|
||
|
// pCategory - Points to a CXTPPropertyGridItem object.
|
||
|
// Returns:
|
||
|
// The pointer to the item object of the newly inserted category.
|
||
|
//-----------------------------------------------------------------------
|
||
|
CXTPPropertyGridItem* InsertCategory(int nIndex, LPCTSTR strCaption, CXTPPropertyGridItem* pCategory = NULL);
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Returns the currently used control's Paint Manager.
|
||
|
// Remarks:
|
||
|
// Call this member function to get the paint manager object used
|
||
|
// for drawing a property grid control window.
|
||
|
// Returns:
|
||
|
// Pointer to the paint manager object.
|
||
|
//-----------------------------------------------------------------------
|
||
|
CXTPPropertyGridPaintManager* GetPaintManager() const;
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Retrieves Image manager associated with property grid
|
||
|
// Returns:
|
||
|
// Pointer to the image manager object that stores the images in
|
||
|
// the property grid.
|
||
|
//-----------------------------------------------------------------------
|
||
|
CXTPImageManager* GetImageManager() const;
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Sends the specified message to the owner window.
|
||
|
// Parameters:
|
||
|
// wParam - Specifies additional message-dependent information.
|
||
|
// lParam - Specifies additional message-dependent information
|
||
|
// Returns:
|
||
|
// The result of the message processing; its value depends on the message sent.
|
||
|
//-----------------------------------------------------------------------
|
||
|
LRESULT SendNotifyMessage(WPARAM wParam = 0, LPARAM lParam = 0);
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// Call this method to get parent property grid class
|
||
|
// Returns:
|
||
|
// Returns parent CXTPPropertyGrid object.
|
||
|
//-----------------------------------------------------------------------
|
||
|
CXTPPropertyGrid* GetPropertyGrid() const;
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// This method is called to move focus to in-place button
|
||
|
// Parameters:
|
||
|
// pButton - Button to move focus
|
||
|
//-----------------------------------------------------------------------
|
||
|
void FocusInplaceButton(CXTPPropertyGridInplaceButton* pButton);
|
||
|
|
||
|
protected:
|
||
|
//-----------------------------------------------------------------------
|
||
|
// Summary:
|
||
|
// This method is called to show tooltip under item
|
||
|
// Parameters:
|
||
|
// pt - Mouse position
|
||
|
//-----------------------------------------------------------------------
|
||
|
virtual void ShowToolTip(CPoint pt);
|
||
|
|
||
|
protected:
|
||
|
|
||
|
|
||
|
//{{AFX_CODEJOCK_PRIVATE
|
||
|
DECLARE_MESSAGE_MAP()
|
||
|
|
||
|
//{{AFX_VIRTUAL(CXTPPropertyGridView)
|
||
|
virtual void DrawItem(LPDRAWITEMSTRUCT);
|
||
|
virtual void MeasureItem(LPMEASUREITEMSTRUCT);
|
||
|
virtual int CompareItem(LPCOMPAREITEMSTRUCT) { return 0;}
|
||
|
virtual BOOL OnWndMsg(UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pResult);
|
||
|
virtual INT_PTR OnToolHitTest(CPoint point, TOOLINFO* pTI) const;
|
||
|
//}}AFX_VIRTUAL
|
||
|
|
||
|
//{{AFX_MSG(CXTPPropertyGridView)
|
||
|
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
|
||
|
afx_msg void OnPaint();
|
||
|
afx_msg void OnNcPaint();
|
||
|
afx_msg void OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS* lpncsp);
|
||
|
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
|
||
|
afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
|
||
|
afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
|
||
|
afx_msg void OnRButtonUp(UINT nFlags, CPoint point);
|
||
|
afx_msg void OnSelectionChanged();
|
||
|
afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
|
||
|
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
|
||
|
afx_msg void OnCaptureChanged(CWnd* pWnd);
|
||
|
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
|
||
|
afx_msg void OnSize(UINT nType, int cx, int cy);
|
||
|
afx_msg void OnChar(UINT nChar, UINT nRepCntr, UINT nFlags);
|
||
|
afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
|
||
|
afx_msg void OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags);
|
||
|
afx_msg UINT OnGetDlgCode();
|
||
|
afx_msg void OnSysKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
|
||
|
afx_msg void OnSysKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags);
|
||
|
afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
|
||
|
afx_msg BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt);
|
||
|
afx_msg void OnSetFocus(CWnd* pOldWnd);
|
||
|
afx_msg void OnKillFocus (CWnd* pNewWnd);
|
||
|
afx_msg LRESULT OnGetObject(WPARAM wParam, LPARAM lParam);
|
||
|
//}}AFX_MSG
|
||
|
//}}AFX_CODEJOCK_PRIVATE
|
||
|
|
||
|
protected:
|
||
|
//{{AFX_CODEJOCK_PRIVATE
|
||
|
// System accessibility support.
|
||
|
virtual HRESULT GetAccessibleParent(IDispatch** ppdispParent);
|
||
|
virtual HRESULT GetAccessibleChildCount(long* pcountChildren);
|
||
|
virtual HRESULT GetAccessibleChild(VARIANT varChild, IDispatch** ppdispChild);
|
||
|
virtual HRESULT GetAccessibleName(VARIANT varChild, BSTR* pszName);
|
||
|
virtual HRESULT GetAccessibleRole(VARIANT varChild, VARIANT* pvarRole);
|
||
|
virtual HRESULT AccessibleLocation(long *pxLeft, long *pyTop, long *pcxWidth, long* pcyHeight, VARIANT varChild);
|
||
|
virtual HRESULT AccessibleHitTest(long xLeft, long yTop, VARIANT* pvarChild);
|
||
|
virtual HRESULT GetAccessibleState(VARIANT varChild, VARIANT* pvarState);
|
||
|
virtual CCmdTarget* GetAccessible();
|
||
|
DECLARE_INTERFACE_MAP()
|
||
|
//}}AFX_CODEJOCK_PRIVATE
|
||
|
|
||
|
private:
|
||
|
CXTPPropertyGridItem* GetSelectedItem();
|
||
|
void SetPropertySort(XTPPropertyGridSortOrder sort, BOOL bRrefresh = FALSE, BOOL bSetRedraw = TRUE);
|
||
|
int InsertItem(CXTPPropertyGridItem* pItem, int nIndex);
|
||
|
int _DoExpand(CXTPPropertyGridItem* pItem, int nIndex);
|
||
|
void _DoCollapse(CXTPPropertyGridItem* pItem);
|
||
|
void _RefreshIndexes();
|
||
|
void SwitchExpandState(int nItem);
|
||
|
int HitTest(CPoint point) const;
|
||
|
|
||
|
void _ShowToolTip(CRect rcBound, CRect rcText, CXTPPropertyGridItem* pItem, BOOL bValuePart);
|
||
|
CSize _GetTextExtent(const CString& str, CXTPPropertyGridItem* pItem, BOOL bValuePart);
|
||
|
void RelayToolTipEvent(UINT message);
|
||
|
LRESULT OnScrollControl();
|
||
|
CPoint ViewToGrid(CPoint point);
|
||
|
|
||
|
protected:
|
||
|
CXTPPropertyGrid* m_pGrid; // Parent CXTPPropertyGrid class.
|
||
|
BOOL m_bTracking; // TRUE if grid in tracking mode.
|
||
|
CRect m_rcToolTip; // Position of the Tooltip.
|
||
|
double m_dDivider; // Divider position.
|
||
|
BOOL m_bAutoDivider; // TRUE to auto calculate divider
|
||
|
HCURSOR m_hCursor; // Handle of the cursor.
|
||
|
CString m_strTipText; // Tooltip text.
|
||
|
XTPPropertyGridSortOrder m_properetySort; // Current sort order.
|
||
|
CXTPPropertyGridItem* m_pSelected; // Current selected item.
|
||
|
CXTPPropertyGridItems* m_pCategories; // Collection of the categories.
|
||
|
CXTPPropertyGridToolTip m_wndTip; // Tooltip control.
|
||
|
int m_nLockUpdate; // TRUE to lock update.
|
||
|
UINT m_nItemHeight; // Default height of the item
|
||
|
BOOL m_bVariableSplitterPos; // TRUE to allow the user to resize the splitter with the mouse.
|
||
|
|
||
|
CXTPPropertyGridInplaceButton* m_pFocusedButton; // Currently focused button
|
||
|
CXTPPropertyGridInplaceButton* m_pHotButton; // Currently highlighted button
|
||
|
|
||
|
private:
|
||
|
|
||
|
friend class CXTPPropertyGridItem;
|
||
|
friend class CXTPPropertyGridItems;
|
||
|
friend class CXTPPropertyGrid;
|
||
|
friend class CXTPPropertyGridInplaceEdit;
|
||
|
friend class CPropertyGridCtrl;
|
||
|
friend class CXTPPropertyGridToolTip;
|
||
|
friend class CXTPPropertyGridInplaceButton;
|
||
|
friend class CXTPPropertyGridInplaceButtons;
|
||
|
};
|
||
|
|
||
|
AFX_INLINE CXTPPropertyGrid* CXTPPropertyGridView::GetPropertyGrid() const {
|
||
|
return m_pGrid;
|
||
|
}
|
||
|
|
||
|
#endif // #if !defined(__XTPPROPERTYGRIDVIEW_H__)
|