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.

244 lines
8.4 KiB
C++

// XTPDockingPaneLayout.h : interface for the CXTPDockingPaneLayout 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(__XTPDOCKINGPANELAYOUT_H__)
#define __XTPDOCKINGPANELAYOUT_H__
//}}AFX_CODEJOCK_PRIVATE
#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
class CXTPDockingPaneBase;
class CXTPDockingPaneSplitterContainer;
class CXTPDockingPaneBase;
class CXTPDockingPaneAutoHidePanel;
class CXTPDockingPaneManager;
class CXTPPropExchange;
class CXTPDockingPaneTabbedContainer;
class CXTPDockingPaneSplitterWnd;
class CXTPDockingPaneClientContainer;
namespace XTPXML
{
struct IXMLDOMNode;
};
//===========================================================================
// Summary:
// CXTPDockingPaneLayout is a stand alone class. It is used to manipulate
// a pane's layouts.
//===========================================================================
class _XTP_EXT_CLASS CXTPDockingPaneLayout : public CXTPCmdTarget
{
public:
//-----------------------------------------------------------------------
// Summary:
// Constructs a CXTPDockingPaneLayout object.
// Parameters:
// pManager - Points to a CXTPDockingPaneManager object
// Returns:
// A CXTPDockingPaneLayout object.
//-----------------------------------------------------------------------
CXTPDockingPaneLayout(CXTPDockingPaneManager* pManager);
//-----------------------------------------------------------------------
// Summary:
// Destroys a CXTPDockingPaneLayout object, handles cleanup and deallocation
//-----------------------------------------------------------------------
virtual ~CXTPDockingPaneLayout();
public:
//-----------------------------------------------------------------------
// Summary:
// Call this member function to copy one layout to another.
// Parameters:
// pLayout - Source Layout.
//-----------------------------------------------------------------------
void Copy(const CXTPDockingPaneLayout* pLayout);
//-----------------------------------------------------------------------
// Summary:
// Call this member function to save the layout to the registry.
// Parameters:
// lpszSection - Registry section.
//-----------------------------------------------------------------------
void Save(LPCTSTR lpszSection);
//-----------------------------------------------------------------------
// Summary:
// Call this member function to load the layout from the registry.
// Parameters:
// lpszSection - Registry section.
// Returns:
// TRUE if successful, otherwise returns FALSE.
//-----------------------------------------------------------------------
BOOL Load(LPCTSTR lpszSection);
//-----------------------------------------------------------------------
// Summary:
// Retrieves list of layout's panes.
// Returns:
// A list of the layout's panes
// See Also:
// CXTPDockingPaneInfoList
//-----------------------------------------------------------------------
CXTPDockingPaneInfoList& GetPaneList() const;
//-----------------------------------------------------------------------
// Summary:
// Reads or writes this object from or to an archive.
// Parameters:
// ar - A CArchive object to serialize to or from.
//-----------------------------------------------------------------------
void Serialize(CArchive& ar);
#ifndef _XTP_EXCLUDE_XML
//-----------------------------------------------------------------------
// Summary:
// Call this member function to save the layout to the file.
// Parameters:
// lpszFileName - The full path and file name.
// lpszSection - Registry section.
//-----------------------------------------------------------------------
void SaveToFile(LPCTSTR lpszFileName, LPCTSTR lpszSection);
//-----------------------------------------------------------------------
// Summary:
// Call this member function to load the layout from the file.
// Parameters:
// lpszFileName - The full path and file name.
// lpszSection - Registry section.
// Returns:
// TRUE if successful, otherwise returns FALSE.
//-----------------------------------------------------------------------
BOOL LoadFromFile(LPCTSTR lpszFileName, LPCTSTR lpszSection);
//-----------------------------------------------------------------------
// Summary:
// Call this member function to save the layout to the XML node.
// Parameters:
// xmlNode - XML node to save.
// lpszSection - Registry section.
//-----------------------------------------------------------------------
void SaveToNode(XTPXML::IXMLDOMNode* pNode, LPCTSTR lpszSection);
//-----------------------------------------------------------------------
// Summary:
// Call this member function to load the layout from the XML node.
// Parameters:
// xmlNode - XML node to load.
// lpszSection - Registry section.
// Returns:
// TRUE if successful, otherwise returns FALSE.
//-----------------------------------------------------------------------
BOOL LoadFromNode(XTPXML::IXMLDOMNode* pNode, LPCTSTR lpszSection);
#endif
//-----------------------------------------------------------------------
// Summary:
// Call this member to determine if it is a user created layout.
// Returns:
// TRUE if it is a user created layout.
//-----------------------------------------------------------------------
BOOL IsUserLayout() const;
//-----------------------------------------------------------------------
// Summary:
// Determines if layout is valid.
// Returns:
// TRUE if Layout is valid
//-----------------------------------------------------------------------
BOOL IsValid() const;
public:
void DestroyPane(CXTPDockingPane* pPane);
CXTPDockingPane* FindPane(int nID) const;
public:
//-----------------------------------------------------------------------
// 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.
//-----------------------------------------------------------------------
BOOL DoPropExchange(CXTPPropExchange* pPX);
private:
void Push(CXTPDockingPaneBase* pPane) { m_lstStack.AddTail(pPane); }
void HidePane(CXTPDockingPaneBase* pPane);
void OnSizeParent(CWnd* pParent, CRect rect, LPVOID lParam);
void Free();
void _FreeEmptyPanes();
XTPDockingPaneDirection _GetPaneDirection(const CXTPDockingPaneBase* pPane) const;
void _Save(CXTPPropExchange* pPX);
BOOL _Load(CXTPPropExchange* pPX);
BOOL _FindTabbedPaneToHide(CXTPDockingPaneAutoHidePanel* pPanel, CXTPDockingPaneBase* pPane);
void _AddPanesTo(CXTPDockingPaneTabbedContainer* pContainer, CXTPDockingPaneBaseList& lst, DWORD dwIgnoredOptions);
void MoveToTail(CXTPDockingPaneBase* pBase);
private:
CXTPDockingPaneSplitterContainer* m_pTopContainer;
CXTPDockingPaneBase* m_pClient;
CXTPDockingPaneInfoList m_lstPanes;
CXTPDockingPaneBaseList m_lstStack;
XTP_DOCKINGPANE_INFO* FindPaneInfo(CXTPDockingPane* pPane);
void RepositionMargins(CRect& rect, const CRect& lpszClientMargins);
CXTPDockingPaneAutoHidePanel* m_wndPanels[4];
CXTPDockingPaneSplitterWnd* m_wndMargins[4];
BOOL m_bUserLayout;
CXTPDockingPaneManager* m_pManager;
private:
friend class CXTPDockingPaneManager;
friend class CXTPDockingPaneBase;
friend class CXTPDockingPane;
friend class CXTPDockingPaneAutoHidePanel;
friend class CDockingPaneSite;
friend class CDockingPaneCtrl;
friend class CXTPDockingPaneSidePanel;
};
AFX_INLINE BOOL CXTPDockingPaneLayout::IsUserLayout() const {
return m_bUserLayout;
}
AFX_INLINE CXTPDockingPaneInfoList& CXTPDockingPaneLayout::GetPaneList() const {
return (CXTPDockingPaneInfoList&)m_lstPanes;
}
#endif // #if !defined(__XTPDOCKINGPANELAYOUT_H__)