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.

454 lines
18 KiB
C++

// XTPDockingPaneTabbedContainer.h : interface for the CXTPDockingPaneTabbedContainer class.
//
// This file is a part of the XTREME DOCKINGPANE 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(__XTPDOCKINGPANETABBEDCONTAINER_H__)
#define __XTPDOCKINGPANETABBEDCONTAINER_H__
//}}AFX_CODEJOCK_PRIVATE
#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
class CXTPDockingPaneAutoHidePanel;
class CXTPDockingPaneCaptionButton;
//===========================================================================
// Summary:
// CXTPDockingPaneTabbedContainer is a multiple inheritance class derived from
// CWnd and CXTPDockingPaneBase. It represents a tabbed container for Docking
// Panes.
//===========================================================================
class _XTP_EXT_CLASS CXTPDockingPaneTabbedContainer : public CWnd, public CXTPDockingPaneBaseContainer, public CXTPTabManager, public CXTPAccessible
{
DECLARE_DYNAMIC(CXTPDockingPaneTabbedContainer)
protected:
//-----------------------------------------------------------------------
// Summary:
// Constructs a CXTPDockingPaneTabbedContainer object
// Protected constructor. Internally constructed only.
// Parameters:
// pLayout - Points to a CXTPDockingPaneLayout object.
//-----------------------------------------------------------------------
CXTPDockingPaneTabbedContainer(CXTPDockingPaneLayout* pLayout);
//-----------------------------------------------------------------------
// Summary:
// Destroys a CXTPDockingPaneTabbedContainer object, handles cleanup and
// deallocation
//-----------------------------------------------------------------------
virtual ~CXTPDockingPaneTabbedContainer();
public:
//-----------------------------------------------------------------------
// Summary:
// Call this member to activate a child docking pane.
// Parameters:
// pPane - Pane to be activated.
// bSetFocus - TRUE to set focus to child docking pane.
// bDelayRedraw - TRUE to redraw caption delayed.
//-----------------------------------------------------------------------
virtual void SelectPane(CXTPDockingPane* pPane, BOOL bSetFocus = TRUE, BOOL bDelayRedraw = TRUE);
//-----------------------------------------------------------------------
// Summary:
// Call this member function to get child pane state.
// Returns:
// TRUE if a child pane is active.
//-----------------------------------------------------------------------
BOOL IsActive() const;
//-----------------------------------------------------------------------
// Summary:
// Call this member function to get selected pane.
// Returns:
// The selected child pane.
//-----------------------------------------------------------------------
CXTPDockingPane* GetSelected() const;
//-----------------------------------------------------------------------
// Summary:
// Call this member to access title's close button.
// Returns:
// A reference to the title's close button.
//-----------------------------------------------------------------------
CXTPDockingPaneCaptionButton* GetCloseButton() const;
//-----------------------------------------------------------------------
// Summary:
// Call this member to access title's pin button.
// Returns:
// A reference to the title's pin button.
//-----------------------------------------------------------------------
CXTPDockingPaneCaptionButton* GetPinButton() const;
//-----------------------------------------------------------------------
// Summary:
// Call this member to determine if the title is visible.
// Returns:
// TRUE if the title is visible.
//-----------------------------------------------------------------------
BOOL IsTitleVisible() const;
//-----------------------------------------------------------------------
// Summary:
// Returns TRUE if caption drawn vertically
// Returns:
// TRUE if the caption drawn vertically
//-----------------------------------------------------------------------
virtual BOOL IsCaptionVertical() const;
//-----------------------------------------------------------------------
// Summary:
// Call this member to determine if the tab bar is visible.
// Returns:
// TRUE if the tab bar is visible.
//-----------------------------------------------------------------------
virtual BOOL IsTabsVisible() const;
//-----------------------------------------------------------------------
// Summary:
// Retrieves safe window handle.
// Returns: Safe window handle.
//-----------------------------------------------------------------------
virtual HWND GetPaneHwnd() const;
//-----------------------------------------------------------------------
// Summary:
// Call this member to determine if the tabbed container is
// auto-hidden. If one pane in a group of panes is auto-hidden,
// then the entire group will be auto-hidden.
// Returns:
// TRUE if the tabbed container is auto-hidden, FALSE if the
// tab group is visible.
//-----------------------------------------------------------------------
BOOL IsHidden() const;
//-----------------------------------------------------------------------
// Summary:
// This member is called by the framework when the left mouse
// button is clicked while the mouse pointer is positioned over
// a pane caption. This will give the pane focus and begin the
// pane dragging process (If the left button is held down).
// Parameters:
// point - Cursor location on the pane's caption that was clicked.
//-----------------------------------------------------------------------
virtual void OnCaptionLButtonDown(CPoint point);
//-----------------------------------------------------------------------
// Summary:
// This method called to check if docking pane can be attached to tabbed container.
// Parameters:
// rcClient - Client rectangle of container.
// pt - Point to attach.
// Returns:
// TRUE if pane can be attached as new tab to tabbed container.
//-----------------------------------------------------------------------
virtual BOOL CanAttach(CRect& rcClient, CPoint pt) const;
//-----------------------------------------------------------------------
// Summary:
// Call this member to fill the pMinMaxInfo structure with the
// minimum and maximum width and height of the container.
// This will look at the MinMaxInfo for each pane in the
// container and set the appropriate minimum and maximum width
// and height for the container.
// Parameters:
// pMinMaxInfo - Pointer to MINMAXINFO structure
//-----------------------------------------------------------------------
void GetMinMaxInfo(LPMINMAXINFO pMinMaxInfo) const;
//-----------------------------------------------------------------------
// Summary:
// Call this member to get pane by its index.
// Parameters:
// nIndex - Index of pane need to retrieve
// Returns:
// CXTPDockingPane pointer corresponded with nIndex
//-----------------------------------------------------------------------
CXTPDockingPane* GetItemPane(int nIndex) const;
//-----------------------------------------------------------------------
// Summary:
// Call this member to get tab for corresponded pane.
// Parameters:
// pPane - Pane to get tab for
// Returns:
// CXTPTabManagerItem pointer corresponded with pPane
//-----------------------------------------------------------------------
CXTPTabManagerItem* GetPaneTab(CXTPDockingPane* pPane) const;
//-----------------------------------------------------------------------
// Summary:
// Call this member to get the text in the caption for the tabbed container (group of panes).
// Returns:
// The text in the caption for the tabbed container (group of panes).
//-----------------------------------------------------------------------
CString GetTitle() const;
protected:
//-----------------------------------------------------------------------
// Summary:
// This member is called to determine if a specific caption button
// is visible.
// Parameters:
// pButton - Button to check to see if it is visible.
// Returns:
// TRUE if the caption button specified is visible, FALSE otherwise.
//-----------------------------------------------------------------------
virtual BOOL IsCaptionButtonVisible(CXTPDockingPaneCaptionButton* pButton);
//-----------------------------------------------------------------------
// Summary:
// This member is called by the framework when a caption button
// is clicked.
// Parameters:
// pButton - Caption button that was clicked.
//-----------------------------------------------------------------------
virtual void OnCaptionButtonClick(CXTPDockingPaneCaptionButton* pButton);
virtual void OnNavigateButtonClick(CXTPTabManagerNavigateButton* pButton);
protected:
//-----------------------------------------------------------------------
// Summary:
// Constructs a CXTPDockingPaneTabbedContainer object
// Protected constructor. Internally constructed only.
// Parameters:
// pPane - Child pane.
// pFrame - Parent Frame.
// pLayout - Points to a CXTPDockingPaneLayout object.
//-----------------------------------------------------------------------
void Init(CXTPDockingPane* pPane, CWnd* pFrame);
//-----------------------------------------------------------------------
// Summary:
// Copies a CXTPDockingPaneTabbedContainer object
// Parameters:
// pClone - Points to a CXTPDockingPaneTabbedContainer object
// pMap - Points to a CXTPPaneToPaneMap object
// dwIgnoredOptions - Options that must be skipped.
// See Also:
// CXTPPaneToPaneMap
//-----------------------------------------------------------------------
virtual void Copy(CXTPDockingPaneBase* pClone, CXTPPaneToPaneMap* pMap, DWORD dwIgnoredOptions);
//-----------------------------------------------------------------------
// Summary:
// This member is called to recalculate the positions of
// tab groups/Items.
//-----------------------------------------------------------------------
virtual void Reposition();
//-----------------------------------------------------------------------
// Summary:
// This member is called to redraw the tabbed control, I.e. When
// an Icon has changed.
// Parameters:
// lpRect - The rectangular area of the window that is invalid.
// bAnimate - TRUE to animate changes in bounding rectangle.
//-----------------------------------------------------------------------
virtual void RedrawControl(LPCRECT lpRect, BOOL bAnimate);
//-----------------------------------------------------------------------
// Summary:
// This member is called to access the visual elements of the docking
// pane tabs. I.e. Tab colors, styles, etc...
// Returns:
// Pointer to CXTPTabPaintManager that contains the visual elements
// of the docking pane tabs.
//-----------------------------------------------------------------------
virtual CXTPTabPaintManager* GetPaintManager() const;
//-----------------------------------------------------------------------
// Summary:
// This member function is called in a derived class to set a pointer
// the tab paint manager.
// Parameters:
// pPaintManager - Pointer to a CXTPTabPaintManager object.
//-----------------------------------------------------------------------
virtual void SetPaintManager(CXTPTabPaintManager* pPaintManager);
//-----------------------------------------------------------------------
// Summary:
// This member is called when the icon of the tab in the tabbed
// container needs to be drawn. I.e. On mouse over.
// Parameters:
// pDC - Pointer to the destination device context.
// pt - Specifies the location of the image.
// pItem - CXTPTabManagerItem object to draw icon on.
// bDraw - TRUE if the icon needs to be drawn, I.e. the icon size
// changed. FALSE if the icon does not need to be
// drawn or redrawn.
// szIcon - Size of the tab icon.
// Returns:
// TRUE if the icon was successfully drawn, FALSE if the icon
// was not drawn.
//-----------------------------------------------------------------------
virtual BOOL DrawIcon(CDC* pDC, CPoint pt, CXTPTabManagerItem* pItem, BOOL bDraw, CSize& szIcon) const;
//-----------------------------------------------------------------------
// Summary:
// This member is called to save/restore the settings of the pane.
// Parameters:
// pPX - Points to a CXTPPropExchange object.
// Returns:
// TRUE if successful; otherwise returns FALSE.
//-----------------------------------------------------------------------
virtual BOOL DoPropExchange(CXTPPropExchange* pPX);
//-----------------------------------------------------------------------
// Summary:
// This member is called to when tabs was changed.
//-----------------------------------------------------------------------
virtual void OnTabsChanged();
//-----------------------------------------------------------------------
// Summary:
// This member is called to create pane
//-----------------------------------------------------------------------
virtual void CreateContainer();
protected:
//{{AFX_CODEJOCK_PRIVATE
virtual void OnSizeParent(CWnd* pParent, CRect rect, LPVOID lParam);
virtual void OnFocusChanged();
virtual void SetDockingSite(CWnd* pFrame);
virtual void RemovePane(CXTPDockingPaneBase* pPane);
virtual void OnParentContainerChanged(CXTPDockingPaneBase* pContainer);
void ShowTitle(BOOL bShow);
void Show(BOOL bSetFocus);
void ShowPane(CXTPDockingPane* pPane, BOOL bSetFocus);
void _Swap(CXTPDockingPane* p1, CXTPDockingPane* p2);
void _InsertPane(CXTPDockingPane* pPane, BOOL bSetFocus = TRUE);
int HitTest(CPoint point) const;
void AdjustMinMaxInfoClientRect(LPMINMAXINFO pMinMaxInfo, BOOL bCaptionOnly = FALSE) const;
void InvalidatePane(BOOL bSelectionChanged);
void _RestoreFocus();
void EnsureSelectedTabVisible();
BOOL OnCaptionButtonDown(CXTPDockingPaneCaptionButton* pButton);
CXTPDockingPaneCaptionButton* HitTestCaptionButton(CPoint point) const;
void DeletePane();
void ClosePane(CXTPDockingPane* pPane);
BOOL IsPaneRestored() const;
BOOL IsAllowMaximize() const;
BOOL IsPaneMaximized() const;
BOOL IsPaneMinimized() const;
void Restore();
void Maximize();
void NormalizeDockingSize();
//}}AFX_CODEJOCK_PRIVATE
protected:
//{{AFX_CODEJOCK_PRIVATE
DECLARE_MESSAGE_MAP()
//{{AFX_VIRTUAL(CXTPDockingPaneTabbedContainer)
virtual INT_PTR OnToolHitTest(CPoint point, TOOLINFO* pTI) const;
LRESULT OnHelpHitTest(WPARAM, LPARAM);
BOOL OnWndMsg(UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pResult);
virtual void OnFinalRelease();
//}}AFX_VIRTUAL
//{{AFX_MSG(CXTPDockingPaneTabbedContainer)
afx_msg void OnPaint();
afx_msg LRESULT OnPrintClient(WPARAM wParam, LPARAM /*lParam*/);
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnRButtonDown(UINT nFlags, CPoint point);
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
afx_msg void OnRButtonUp(UINT nFlags, CPoint point);
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
afx_msg void OnCaptureChanged(CWnd* pWnd);
afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
afx_msg void OnMouseLeave();
afx_msg void OnDestroy();
afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
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 HRESULT GetAccessibleDefaultAction(VARIANT varChild, BSTR* pszDefaultAction);
virtual HRESULT AccessibleDoDefaultAction(VARIANT varChild);
virtual CCmdTarget* GetAccessible();
DECLARE_INTERFACE_MAP()
//}}AFX_CODEJOCK_PRIVATE
protected:
BOOL m_bActive; // TRUE if Tabbed container has active caption
BOOL m_bTitleVisible; // TRUE if title is visible
int m_nLockReposition; // InvalidatePane method currently executed.
BOOL m_bDelayRedraw; // TRUE to redraw pane after small delay
CXTPDockingPane* m_pSelectedPane; // Pointer to selected pane
CXTPDockingPane* m_pTrackingPane; // Pointer to dragging pane
CArray<CRect, CRect&> m_lstRects; // Array of previous tabs positions
COleDropTarget* m_pDropTarget; // Pointer to Ole Drop Target
BOOL m_bMaximized; // TRUE if Pane is currently maximized
BOOL m_bEnsureSelectedTab; // TRUE to check if selected tab is visible after delay
private:
class CContainerDropTarget;
private:
friend class CXTPDockingPaneManager;
friend class CXTPDockingPane;
friend class CXTPDockingPaneContext;
friend class CXTPDockingPaneMiniWnd;
friend class CXTPDockingPaneLayout;
friend class CXTPDockingPaneAutoHidePanel;
friend class CXTPDockingPaneAutoHideWnd;
friend class CXTPDockingPaneCaptionButton;
friend class CContainerDropTarget;
friend class CXTPDockingPaneSidePanel;
};
AFX_INLINE BOOL CXTPDockingPaneTabbedContainer::IsActive() const {
return m_bActive;
}
AFX_INLINE CXTPDockingPane* CXTPDockingPaneTabbedContainer::GetSelected() const {
return m_pSelectedPane;
}
AFX_INLINE HWND CXTPDockingPaneTabbedContainer::GetPaneHwnd() const {
return CWnd::GetSafeHwnd();
}
#endif // #if !defined(__XTPDOCKINGPANETABBEDCONTAINER_H__)