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.

390 lines
15 KiB
C

2 years ago
// XTPDockingPaneAutoHidePanel.h : interface for the CXTPDockingPaneAutoHidePanel 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(__XTPDOCKINGPANEAUTOHIDEPANEL_H__)
#define __XTPDOCKINGPANEAUTOHIDEPANEL_H__
//}}AFX_CODEJOCK_PRIVATE
#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
class CXTPDockingPaneLayout;
class CXTPDockingPaneAutoHidePanel;
//===========================================================================
// Summary:
// CXTPDockingPaneAutoHideWnd is a CMiniFrameWnd derived class. It is
// used internally by CXTPDockingPaneAutoHidePanel
// as a sliding auto-hide window for the hidden pane.
//===========================================================================
class _XTP_EXT_CLASS CXTPDockingPaneAutoHideWnd : public CMiniFrameWnd
{
DECLARE_DYNAMIC(CXTPDockingPaneAutoHideWnd)
private:
CXTPDockingPaneAutoHideWnd(CXTPDockingPaneAutoHidePanel* pPanel, CXTPDockingPaneTabbedContainer* pPane);
public:
//-----------------------------------------------------------------------
// Summary:
// Retrieves child container of sliding auto-hide window.
//-----------------------------------------------------------------------
CXTPDockingPaneTabbedContainer* GetPane() const;
protected:
//{{AFX_CODEJOCK_PRIVATE
DECLARE_MESSAGE_MAP()
//{{AFX_VIRTUAL(CXTPDockingPaneAutoHideWnd)
virtual void PostNcDestroy();
//}}AFX_VIRTUAL
//{{AFX_MSG(CXTPDockingPaneAutoHideWnd)
afx_msg void OnClose();
afx_msg void OnPaint();
afx_msg void OnTimer(UINT_PTR nIDEvent);
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
//}}AFX_MSG
//}}AFX_CODEJOCK_PRIVATE
private:
void CloseWindow();
CXTPDockingPaneManager* GetDockingPaneManager() const;
void GetMinMaxInfo (LPMINMAXINFO pMinMaxInfo, BOOL bIncludeSplitter = TRUE) const;
void RecalcLayout(BOOL bNotify = TRUE);
void DoSlideStep();
void Reposition(CRect rc, CRect rcClient);
BOOL GetAvailableRect(CRect& rcAvail, CRect& rc) const;
public:
static double m_dAnimationDelay; // Animation delay
static int m_nAnimationInterval; // Delay in ms between animation steps
static int m_nAnimationDuration; // Duration of sliding animation in ms
static DWORD m_nMouseHoverDelay; // Duration of mouse hover before expanding
static UINT m_nInactiveCollapseDelay; // Delay before collapsing inactive.
private:
CXTPDockingPaneTabbedContainer* m_pPane;
CXTPDockingPaneAutoHidePanel* m_pPanel;
XTPDockingPaneDirection m_direction;
BOOL m_bHoriz;
int m_nSlideStep;
int m_nStepsCount;
BOOL m_bSlideOut;
CRect m_rcWindow;
int m_nDeactivationCount;
BOOL m_bTracking;
private:
friend class CXTPDockingPaneAutoHidePanel;
};
//===========================================================================
// Summary:
// CXTPDockingPaneAutoHidePanel is a multiple inheritance class derived from
// CWnd and CXTPDockingPaneBase. It is used internally as an auto-hide container
// for CXTPDockingPaneBase derived classes.
//===========================================================================
class _XTP_EXT_CLASS CXTPDockingPaneAutoHidePanel : public CWnd, public CXTPDockingPaneBaseContainer, public CXTPTabManager
{
private:
class CAutoHidePanelTabManager;
class CAutoHidePanelTabManagersArray;
class CPanelDropTarget;
protected:
//-----------------------------------------------------------------------
// Summary:
// Constructs a CXTPDockingPaneAutoHidePanel object
// Protected constructor. Internally constructed only.
// Parameters:
// pLayout - Points to a CXTPDockingPaneLayout object.
//-----------------------------------------------------------------------
CXTPDockingPaneAutoHidePanel(CXTPDockingPaneLayout* pLayout);
//-----------------------------------------------------------------------
// Summary:
// Destroys a CXTPDockingPaneAutoHidePanel object, handles cleanup and
// deallocation
//-----------------------------------------------------------------------
~CXTPDockingPaneAutoHidePanel();
public:
//-----------------------------------------------------------------------
// Summary:
// Call this member function to determine the position of the
// auto-hide panel.
// Returns:
// The panel's direction.
//-----------------------------------------------------------------------
XTPDockingPaneDirection GetDirection() const;
//-----------------------------------------------------------------------
// Summary:
// Returns the window handle for a window.
// Returns:
// Returns NULL if the HWND is not attached to a window or if it
// is used with a NULL HWND pointer.
//-----------------------------------------------------------------------
virtual HWND GetPaneHwnd() const;
//-----------------------------------------------------------------------
// Summary:
// This member function determines which header item, if any, is
// at a specified cursor position
// Parameters:
// point - Point to be tested.
// Returns:
// The index of the item at the position specified by 'pt',
// otherwise returns NULL.
//-----------------------------------------------------------------------
CXTPDockingPane* HitTest(CPoint point) 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:
// 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 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:
// Call this member to get the position of the pane's tab in the auto hide panel.
// Returns:
// Flag from the XTPTabPosition enumeration that specifies the position.
//-----------------------------------------------------------------------
XTPTabPosition GetPosition() const;
//-----------------------------------------------------------------------
// Summary:
// Call this member to get the length of the items in the auto hide panel.
// Returns:
// Length of the items in the auto hide panel.
//-----------------------------------------------------------------------
virtual int GetItemsLength() const;
protected:
//-----------------------------------------------------------------------
// Summary:
// This method is called to set the position of the pane
// Parameters:
// pParent - Points to a CWnd object.
// rect - Rectangle of the pane to be set.
// lParam - Pointer to AFX_SIZEPARENTPARAMS structure.
// ----------------------------------------------------------------------
virtual void OnSizeParentEx(CWnd* pParent, CRect& rect, LPVOID lParam);
//-----------------------------------------------------------------------
// Summary:
// Call this member to remove a pane from collection.
// Parameters:
// pPane - Points to a CXTPDockingPaneBase object.
//-----------------------------------------------------------------------
virtual void RemovePane(CXTPDockingPaneBase* pPane);
//-----------------------------------------------------------------------
// Summary:
// This member is called when a child pane collection is changed.
// Parameters:
// pContainer - Points to a CXTPDockingPaneBase object that is changed.
//-----------------------------------------------------------------------
virtual void OnChildContainerChanged(CXTPDockingPaneBase* pContainer);
//-----------------------------------------------------------------------
// Summary:
// Call this member to insert a pane into a collection
// Parameters:
// pPane - Points to a CXTPDockingPaneBase object
//-----------------------------------------------------------------------
virtual void _InsertPane(CXTPDockingPaneBase* pPane);
//-----------------------------------------------------------------------
// Summary:
// Call this member function 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:
// Call this member to close the active window from panel
// Parameters:
// bDelayed - FALSE to delay the closing
// See Also: CloseActiveWindows
//-----------------------------------------------------------------------
void CloseActiveWindow(BOOL bDelayed = FALSE);
//-------------------------------------------------------------------------
// Summary:
// Call this member to close active windows from all panels
// See Also: CloseActiveWindow
//-------------------------------------------------------------------------
void CloseActiveWindows();
//-----------------------------------------------------------------------
// Summary:
// Call this member to show (activate) a pane by its identifier.
// Parameters:
// pPane - Points to a CXTPDockingPane object.
// bSetFocus - TRUE to set focus to child docking pane
//-----------------------------------------------------------------------
void ShowPane(CXTPDockingPane* pPane, BOOL bSetFocus = TRUE);
//-----------------------------------------------------------------------
// Summary:
// Call this member to refresh the manager array
// Parameters:
// pDC - Points to a CDC object
// rcClient - Size of the client area
//-----------------------------------------------------------------------
void RefreshManagersArray(CDC* pDC, CRect rcClient);
//-----------------------------------------------------------------------
// Summary:
// Retrieves the height of the panel
// Returns:
// The height of the panel
//-----------------------------------------------------------------------
int GetPanelHeight() const;
//-----------------------------------------------------------------------
// Summary:
// Creates auto-hide panel.
// Parameters:
// pParent - Parent frame site.
//-----------------------------------------------------------------------
virtual void Create(CWnd* pParent);
//-----------------------------------------------------------------------
// Summary:
// This member is called when a need to redraw pane.
// Parameters:
// bSelectionChanged - TRUE if selected pane was changed
//-----------------------------------------------------------------------
virtual void InvalidatePane(BOOL bSelectionChanged);
protected:
//{{AFX_CODEJOCK_PRIVATE
DECLARE_MESSAGE_MAP()
virtual void RedrawControl(LPCRECT lpRect, BOOL /*bAnimate*/);
virtual void Reposition();
void DeletePane();
void OnFinalRelease();
//{{AFX_MSG(CXTPDockingPaneAutoHidePanel)
afx_msg void OnPaint();
afx_msg void OnDraw(CDC* pDC);
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 OnRButtonUp(UINT /*nFlags*/, CPoint point);
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
afx_msg LRESULT OnMouseHover(WPARAM, LPARAM lParam);
afx_msg void OnMouseLeave();
//}}AFX_MSG
//}}AFX_CODEJOCK_PRIVATE
private:
void Copy(CXTPDockingPaneBase* pClone, CXTPPaneToPaneMap* pMap, DWORD dwIgnoredOptions);
BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL);
public:
static BOOL m_bCloseActiveWindow; // TRUE to allow the AutoHide window to be closed.
protected:
CXTPDockingPaneAutoHideWnd* m_pActiveWnd; // Active window
XTPDockingPaneDirection m_direction; // Location of hidden panel
private:
CAutoHidePanelTabManagersArray* m_pTabManagers;
CPanelDropTarget* m_pDropTarget;
CRect m_rcFrameRect;
int m_nItemsLength;
private:
friend class CXTPDockingPaneLayout;
friend class CXTPDockingPaneAutoHideWnd;
friend class CXTPDockingPaneTabbedContainer;
friend class CXTPDockingPaneManager;
friend class CPanelDropTarget;
};
AFX_INLINE BOOL CXTPDockingPaneAutoHidePanel::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_INLINE XTPDockingPaneDirection CXTPDockingPaneAutoHidePanel::GetDirection() const {
return m_direction;
}
AFX_INLINE HWND CXTPDockingPaneAutoHidePanel::GetPaneHwnd() const {
return CWnd::GetSafeHwnd();
}
AFX_INLINE CXTPDockingPaneTabbedContainer* CXTPDockingPaneAutoHideWnd::GetPane() const {
return m_pPane;
}
#endif // #if !defined(__XTPDOCKINGPANEAUTOHIDEPANEL_H__)