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.

529 lines
20 KiB
C++

// XTPPropertyGridInplaceButton.h interface for the CXTPPropertyGridInplaceButton 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(__XTPPROPERTYGRIDINPLACEBUTTON_H__)
#define __XTPPROPERTYGRIDINPLACEBUTTON_H__
//}}AFX_CODEJOCK_PRIVATE
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
// class forwards
class CXTPPropertyGridView;
class CXTPPropertyGridItem;
class CXTPImageManagerIcon;
const UINT XTP_ID_PROPERTYGRID_EXPANDBUTTON = 100; //<ALIAS CXTPPropertyGridInplaceButton::CXTPPropertyGridInplaceButton@UINT>
const UINT XTP_ID_PROPERTYGRID_COMBOBUTTON = 101; //<ALIAS CXTPPropertyGridInplaceButton::CXTPPropertyGridInplaceButton@UINT>
//===========================================================================
// Summary:
// CXTPPropertyGridInplaceButton is a CCmdTarget derived class.
// It represents inplace button in Property Grid control.
//===========================================================================
class _XTP_EXT_CLASS CXTPPropertyGridInplaceButton : public CXTPCmdTarget
{
public:
//-----------------------------------------------------------------------
// Summary:
// Constructs a CXTPPropertyGridInplaceButton object
// Parameters:
// nID - Identifier of button
//-----------------------------------------------------------------------
CXTPPropertyGridInplaceButton(UINT nID);
//-----------------------------------------------------------------------
// Summary:
// Destroys a CXTPPropertyGridInplaceButton object, handles cleanup
// and deallocation.
//-----------------------------------------------------------------------
virtual ~CXTPPropertyGridInplaceButton();
//-----------------------------------------------------------------------
// Summary:
// Retrieves width of the button.
// Returns:
// Width of the button.
// See Also: SetWidth
//-----------------------------------------------------------------------
int GetWidth();
//-----------------------------------------------------------------------
// Summary:
// Call this method to set width of the button
// Parameters:
// nWidth - New width to be set
// See Also: GetWidth
//-----------------------------------------------------------------------
void SetWidth(int nWidth);
//-----------------------------------------------------------------------
// Summary:
// Retrieves caption of the button.
// Returns:
// Caption of the button.
// See Also: SetCaption
//-----------------------------------------------------------------------
CString GetCaption() const;
//-----------------------------------------------------------------------
// Summary:
// Call this method to set caption text of the button.
// Parameters:
// lpszCaption - New caption to be set.
// See Also: GetCaption
//-----------------------------------------------------------------------
void SetCaption(LPCTSTR lpszCaption);
//-----------------------------------------------------------------------
// Summary:
// Retrieves image index of the button.
// Returns:
// Image index of the button.
// See Also: SetIconIndex
//-----------------------------------------------------------------------
int GetIconIndex() const;
//-----------------------------------------------------------------------
// Summary:
// Associates ToolTip text with the item.
// Parameters:
// lpstrTooltip - The ToolTip text to display when the mouse cursor is over the item.
//-----------------------------------------------------------------------
void SetTooltip(LPCTSTR lpstrTooltip);
//-----------------------------------------------------------------------
// Summary:
// Call this member to retrieve the item's tooltip.
// Returns:
// The ToolTip text for the item.
//-----------------------------------------------------------------------
CString GetTooltip() const;
//-----------------------------------------------------------------------
// Summary:
// Call this method to assign icon index for the button. Add icons first to
// Image manager of Property Grid.
// Parameters:
// nIconIndex - Image index to be set.
// See Also: GetImage, GetIconIndex, CXTPPropertyGrid::GetImageManager
//-----------------------------------------------------------------------
void SetIconIndex(int nIconIndex);
//-----------------------------------------------------------------------
// Summary:
// Call this method to retrieve image assigned for the button.
// Returns:
// CXTPImageManagerIcon object holdin gthe image.
// See Also: SetIconIndex, CXTPPropertyGrid::GetImageManager
//-----------------------------------------------------------------------
virtual CXTPImageManagerIcon* GetImage() const;
//-----------------------------------------------------------------------
// Summary:
// This member function retrieves the parent property grid item
// Returns:
// A pointer to a CXTPPropertyGridItem object
//-----------------------------------------------------------------------
CXTPPropertyGridItem* GetItem() const;
//-----------------------------------------------------------------------
// Summary:
// Retrieves identifier of the button.
// Remarks:
// Default identifier for expand button is XTP_ID_PROPERTYGRID_EXPANDBUTTON;
// Default identifier for combo button is XTP_ID_PROPERTYGRID_COMBOBUTTON
// Returns:
// Identifier of the button.
//-----------------------------------------------------------------------
UINT GetID() const;
//-----------------------------------------------------------------------
// Summary:
// Retrieves bounding rectangle of the button.
// Returns:
// Bounding rectangle of the button.
//-----------------------------------------------------------------------
CRect GetRect() const;
//-----------------------------------------------------------------------
// Summary:
// Determines if button has focus.
// Returns:
// TRUE if button has focus, FALSE otherwise.
//-----------------------------------------------------------------------
BOOL IsFocused() const;
//-----------------------------------------------------------------------
// Summary:
// Determines if cursor under button.
// Returns:
// TRUE if button is hot, FALSE otherwise.
//-----------------------------------------------------------------------
BOOL IsHot() const;
//-----------------------------------------------------------------------
// Summary:
// Determines if user push the button.
// Returns:
// TRUE if button is pressed, FALSE otherwise.
//-----------------------------------------------------------------------
BOOL IsPressed() const;
//-----------------------------------------------------------------------
// Summary:
// Retrieves index of button in array of item's buttons.
// Returns:
// Index of button in array of item's buttons.
//-----------------------------------------------------------------------
int GetIndex() const;
//-----------------------------------------------------------------------
// Summary:
// This method is called to draw the button
// Override this method to draw custom button
// Parameters:
// pDC - Pointer to valid device context
// rc - Bounding rectangle of the button
//-----------------------------------------------------------------------
virtual void OnDraw(CDC* pDC, CRect rc);
//-----------------------------------------------------------------------
// Summary:
// This method is called when user press the button
// Parameters:
// nFlags - Indicates whether various virtual keys are down
// point - Specifies the x- and y-coordinate of the cursor
//-----------------------------------------------------------------------
virtual void OnLButtonDown(UINT nFlags, CPoint point);
//-----------------------------------------------------------------------
// Summary:
// This method is called when user press key while button has focus
// Parameters:
// nChar - Specifies the virtual-key code of the given key.
//-----------------------------------------------------------------------
virtual void OnKeyDown(UINT nChar);
//-----------------------------------------------------------------------
// Summary:
// Retrieves parent grid object
// Returns:
// Pointer to parent CXTPPropertyGridView object
//-----------------------------------------------------------------------
CXTPPropertyGridView* GetGrid() const;
//-----------------------------------------------------------------------
// Summary:
// Call this member to determine if the button is enabled.
// Returns:
// TRUE if the button is enabled, FALSE if it is disabled.
//-----------------------------------------------------------------------
BOOL GetEnabled() const;
//-----------------------------------------------------------------------
// Summary: Call this method to enable or disable button
// Parameters:
// bEnabled - TRUE to enable; FALSE to disable button
//-----------------------------------------------------------------------
void SetEnabled(BOOL bEnabled);
//-----------------------------------------------------------------------
// Summary: Determines if inplace button is hyperlink
// Returns:
// TRUE if button is hyperlink
//-----------------------------------------------------------------------
BOOL IsHyperlink() const;
//-----------------------------------------------------------------------
// Summary: Call this method to make inplace act button as hyperlink
// Parameters:
// bHyperlink - TRUE to set; FALSE to remove hyperlink.
//-----------------------------------------------------------------------
void SetHyperlink(BOOL bHyperlink = TRUE);
//-----------------------------------------------------------------------
// Summary: Determines if button is always visible.
// Returns:
// TRUE if always visible, FALSE otherwise.
//-----------------------------------------------------------------------
BOOL GetShowAlways() const;
//-----------------------------------------------------------------------
// Summary: Call this method to show this button always
// Parameters:
// bShowAlways - TRUE to show button always; FALSE to show only when item is selected
//-----------------------------------------------------------------------
void SetShowAlways(BOOL bShowAlways);
//-----------------------------------------------------------------------
// Summary: Returns alignment of button.
// Returns:
// Alignment of button.
//-----------------------------------------------------------------------
int GetAlignment() const;
//-----------------------------------------------------------------------
// Summary: Call this method to set alignment of button's position
// Parameters:
// nAlignment - DT_LEFT or DT_RIGHT alignment of button
//-----------------------------------------------------------------------
void SetAlignment(int nAlignment);
//-----------------------------------------------------------------------
// Summary: Specifies whether a user can use the TAB key to move the focus to the inplace button.
// Returns:
// True if button can participate in tabbing, False if the button cannot participate in tabbing.
//-----------------------------------------------------------------------
BOOL GetTabStop() const;
protected:
//{{AFX_CODEJOCK_PRIVATE
BOOL m_bPressed; // TRUE if the button is pressed.
int m_nIndex;
CXTPPropertyGridView* m_pGrid;
CXTPPropertyGridItem* m_pItem;
UINT m_nID;
CRect m_rcButton;
int m_nWidth;
CString m_strCaption;
int m_nIconIndex;
BOOL m_bEnabled;
CString m_strTooltip;
BOOL m_bHyperlink;
BOOL m_bShowAlways;
BOOL m_bTabStop;
int m_nAlignment;
//}}AFX_CODEJOCK_PRIVATE
protected:
private:
friend class CXTPPropertyGridItem;
friend class CXTPPropertyGridItems;
friend class CXTPPropertyGridInplaceButtons;
};
//===========================================================================
// Summary:
// CXTPPropertyGridInplaceButtons is a CCmdTarget derived class.
// It represents collection of inplace buttons for specified grid item
//===========================================================================
class _XTP_EXT_CLASS CXTPPropertyGridInplaceButtons : public CXTPCmdTarget
{
public:
//-----------------------------------------------------------------------
// Summary:
// Constructs a CXTPPropertyGridInplaceButtons object
// Parameters:
// pItem - Parent Item of buttons
//-----------------------------------------------------------------------
CXTPPropertyGridInplaceButtons(CXTPPropertyGridItem* pItem);
//-----------------------------------------------------------------------
// Summary:
// Destroys a CXTPPropertyGridInplaceButtons object, handles cleanup
// and deallocation.
//-----------------------------------------------------------------------
~CXTPPropertyGridInplaceButtons();
public:
//-----------------------------------------------------------------------
// Summary:
// Call this method to add standard combo button
//-----------------------------------------------------------------------
void AddComboButton();
//-----------------------------------------------------------------------
// Summary:
// Call this method to add standard expand button
//-----------------------------------------------------------------------
void AddExpandButton();
//-----------------------------------------------------------------------
// Summary:
// Call this method to add custom button.
// Parameters:
// pButton - Pointer to button to add.
// Returns:
// Pointer to the CXTPPropertyGridInplaceButton button just added.
// Example:
// <code>pItem->GetInplaceButtons()->AddButton(new CXTPPropertyGridInplaceButton(1));</code>
//-----------------------------------------------------------------------
CXTPPropertyGridInplaceButton* AddButton(CXTPPropertyGridInplaceButton* pButton);
public:
//-----------------------------------------------------------------------
// Summary:
// Retrieves count of buttons in collection.
// Returns:
// Count of buttons in collection.
//-----------------------------------------------------------------------
int GetCount() const;
//-----------------------------------------------------------------------
// Summary:
// Retrieves button by its index.
// Parameters:
// nIndex - Index to retrieve button.
// Returns:
// CXTPPropertyGridInplaceButton at the specified index.
//-----------------------------------------------------------------------
CXTPPropertyGridInplaceButton* GetAt(int nIndex) const;
//-----------------------------------------------------------------------
// Summary:
// Call this method to remove all buttons.
//-----------------------------------------------------------------------
void RemoveAll();
//-----------------------------------------------------------------------
// Summary:
// Call this method to remove specified button.
// Parameters:
// pButton - Button to remove.
//-----------------------------------------------------------------------
void Remove(CXTPPropertyGridInplaceButton* pButton);
//-----------------------------------------------------------------------
// Summary:
// Call this method to remove button by its identifier
// Parameters:
// nID - Identifier of the button to remove
//-----------------------------------------------------------------------
void Remove(UINT nID);
//-----------------------------------------------------------------------
// Summary:
// Call this method to remove button by its index.
// Parameters: nIndex - Index of the button to remove.
//-----------------------------------------------------------------------
void RemoveAt(long nIndex);
//-----------------------------------------------------------------------
// Summary:
// Determines which button, if any, is at a specified position.
// Parameters:
// point - Point to test.
// Returns:
// The button at the specified position, if any,
// or NULL otherwise.
//-----------------------------------------------------------------------
CXTPPropertyGridInplaceButton* HitTest(CPoint point) const;
//-----------------------------------------------------------------------
// Summary:
// Finds button by its identifier.
// Parameters:
// nID - Identifier to find.
// Returns:
// The button with specified identifier, if any,
// or NULL otherwise.
//-----------------------------------------------------------------------
CXTPPropertyGridInplaceButton* Find(UINT nID) const;
protected:
//-----------------------------------------------------------------------
// Summary:
// This removes the grids possible reference to the button in this array.
// Parameters:
// pButton - pointer to the button that is being removed.
//-----------------------------------------------------------------------
virtual void OnButtonRemoved(CXTPPropertyGridInplaceButton* pButton);
private:
void UpdateIndexes();
private:
CArray<CXTPPropertyGridInplaceButton*, CXTPPropertyGridInplaceButton*> m_arrButtons;
CXTPPropertyGridItem* m_pItem;
friend class CXTPPropertyGridItem;
};
AFX_INLINE CXTPPropertyGridItem* CXTPPropertyGridInplaceButton::GetItem() const {
return m_pItem;
}
AFX_INLINE UINT CXTPPropertyGridInplaceButton::GetID() const {
return m_nID;
}
AFX_INLINE CRect CXTPPropertyGridInplaceButton::GetRect() const {
return m_rcButton;
}
AFX_INLINE CString CXTPPropertyGridInplaceButton::GetCaption() const {
return m_strCaption;
}
AFX_INLINE int CXTPPropertyGridInplaceButton::GetIconIndex() const {
return m_nIconIndex;
}
AFX_INLINE void CXTPPropertyGridInplaceButton::SetIconIndex(int nIconIndex) {
m_nIconIndex = nIconIndex;
}
AFX_INLINE CXTPPropertyGridView* CXTPPropertyGridInplaceButton::GetGrid() const {
return m_pGrid;
}
AFX_INLINE void CXTPPropertyGridInplaceButton::SetTooltip(LPCTSTR lpstrTooltip) {
m_strTooltip = lpstrTooltip;
}
AFX_INLINE CString CXTPPropertyGridInplaceButton::GetTooltip() const {
return m_strTooltip;
}
AFX_INLINE int CXTPPropertyGridInplaceButtons::GetCount() const {
return (int)m_arrButtons.GetSize();
}
AFX_INLINE CXTPPropertyGridInplaceButton* CXTPPropertyGridInplaceButtons::GetAt(int nIndex) const {
return nIndex >= 0 && nIndex < GetCount() ? m_arrButtons.GetAt(nIndex) : NULL;
}
AFX_INLINE void CXTPPropertyGridInplaceButton::SetHyperlink(BOOL bHyperlink) {
m_bHyperlink = bHyperlink;
}
AFX_INLINE BOOL CXTPPropertyGridInplaceButton::IsHyperlink() const {
return m_bHyperlink;
}
AFX_INLINE BOOL CXTPPropertyGridInplaceButton::GetShowAlways() const {
return m_bShowAlways;
}
AFX_INLINE void CXTPPropertyGridInplaceButton::SetShowAlways(BOOL bShowAlways) {
m_bShowAlways = bShowAlways;
}
AFX_INLINE int CXTPPropertyGridInplaceButton::GetAlignment() const {
return m_nAlignment;
}
AFX_INLINE void CXTPPropertyGridInplaceButton::SetAlignment(int nAlignment) {
m_nAlignment = nAlignment;
}
AFX_INLINE BOOL CXTPPropertyGridInplaceButton::GetTabStop() const {
return m_bTabStop;
}
#endif //#if !defined(__XTPPROPERTYGRIDINPLACEBUTTON_H__)