249 lines
6.4 KiB
C++
249 lines
6.4 KiB
C++
// ==========================================================================
|
|
// Class Implementation : COXSplitterColRowState
|
|
// ==========================================================================
|
|
|
|
// Source file : OXSplitterColRowState.cpp
|
|
|
|
// Version: 9.3
|
|
|
|
// This software along with its related components, documentation and files ("The Libraries")
|
|
// is © 1994-2007 The Code Project (1612916 Ontario Limited) and use of The Libraries is
|
|
// governed by a software license agreement ("Agreement"). Copies of the Agreement are
|
|
// available at The Code Project (www.codeproject.com), as part of the package you downloaded
|
|
// to obtain this file, or directly from our office. For a copy of the license governing
|
|
// this software, you may contact us at legalaffairs@codeproject.com, or by calling 416-849-8900.
|
|
|
|
// //////////////////////////////////////////////////////////////////////////
|
|
|
|
#include "stdafx.h"
|
|
|
|
#if (_MFC_VER < 0x0420)
|
|
// This file uses classes that were introduced in MFC Version 4.2
|
|
// These classes are now officially documented by Microsoft, but did not exist in previous versions
|
|
// Therefore this file will be completely excluded for older versions of MFC
|
|
#pragma message("Warning : OXSplitterColRowState.cpp not included because MFC Version < 4.2")
|
|
#else
|
|
// The entire file
|
|
|
|
|
|
#include "OXSplitterColRowState.h"
|
|
|
|
#ifdef _DEBUG
|
|
#undef THIS_FILE
|
|
static char BASED_CODE THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
const int COXSplitterColRowState::m_nSerializeSchemaVersion = 1;
|
|
|
|
IMPLEMENT_SERIAL(COXSplitterColRowState, CObject, COXSplitterColRowState::m_nSerializeSchemaVersion | VERSIONABLE_SCHEMA)
|
|
|
|
#define new DEBUG_NEW
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// Definition of static members
|
|
|
|
// Data members -------------------------------------------------------------
|
|
// protected:
|
|
// BOOL m_bRow;
|
|
// --- Whether this is the property of a row (TRUE) or column (FALSE)
|
|
|
|
// int m_nColRowIndex;
|
|
// --- The index row (or column)
|
|
|
|
// int m_nIdealSize;
|
|
// --- The size set by the user (ideal size upon restore)
|
|
|
|
// int m_nMinSize;
|
|
// --- Size below which the pane should not be shown
|
|
|
|
// int m_nSerializeSchemaVersionLoad;
|
|
// --- The schema version number that is read from archive
|
|
|
|
// private:
|
|
|
|
// Member functions ---------------------------------------------------------
|
|
// public:
|
|
|
|
COXSplitterColRowState::COXSplitterColRowState()
|
|
{
|
|
Initialize();
|
|
|
|
ASSERT_VALID(this);
|
|
}
|
|
|
|
BOOL COXSplitterColRowState::ComputeProperties(CSplitterWnd* pSplitterWnd, int nColRowIndex, BOOL bRow)
|
|
{
|
|
ASSERT_VALID(this);
|
|
|
|
if (pSplitterWnd == NULL)
|
|
{
|
|
TRACE0("COXSplitterColRowState::ComputeProperties : No splitter window, failing\n");
|
|
return FALSE;
|
|
}
|
|
|
|
m_bRow = bRow;
|
|
m_nColRowIndex = nColRowIndex;
|
|
if (bRow)
|
|
pSplitterWnd->GetRowInfo(nColRowIndex, m_nIdealSize, m_nMinSize);
|
|
else
|
|
pSplitterWnd->GetColumnInfo(nColRowIndex, m_nIdealSize, m_nMinSize);
|
|
|
|
|
|
ASSERT_VALID(this);
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL COXSplitterColRowState::ApplyProperties(CSplitterWnd* pSplitterWnd) const
|
|
{
|
|
ASSERT_VALID(this);
|
|
|
|
if (pSplitterWnd == NULL)
|
|
{
|
|
TRACE0("COXSplitterColRowState::ApplyProperties : No splitter window, failing\n");
|
|
return FALSE;
|
|
}
|
|
|
|
if (m_bRow)
|
|
pSplitterWnd->SetRowInfo(m_nColRowIndex, m_nIdealSize, m_nMinSize);
|
|
else
|
|
pSplitterWnd->SetColumnInfo(m_nColRowIndex, m_nIdealSize, m_nMinSize);
|
|
|
|
ASSERT_VALID(this);
|
|
return TRUE;
|
|
}
|
|
|
|
void COXSplitterColRowState::Serialize(CArchive& ar)
|
|
{
|
|
ASSERT_VALID(this);
|
|
|
|
// Check the version
|
|
// (If version == -1, the version is unknown, this occurs when Serialize() is called directly)
|
|
if (ar.IsLoading())
|
|
{
|
|
m_nSerializeSchemaVersionLoad = (int)ar.GetObjectSchema();
|
|
if (m_nSerializeSchemaVersion < m_nSerializeSchemaVersionLoad)
|
|
{
|
|
TRACE1("COXSplitterColRowState::Serialize : Unexpected schema version : %i, throwing CArchiveException\n",
|
|
m_nSerializeSchemaVersionLoad);
|
|
AfxThrowArchiveException(CArchiveException::badSchema);
|
|
}
|
|
}
|
|
|
|
// Call base class implementation
|
|
CObject::Serialize(ar);
|
|
|
|
// Serialize all data
|
|
if (ar.IsStoring())
|
|
StoreProperties(ar);
|
|
else
|
|
LoadProperties(ar);
|
|
|
|
ASSERT_VALID(this);
|
|
}
|
|
|
|
#ifdef _DEBUG
|
|
void COXSplitterColRowState::AssertValid() const
|
|
{
|
|
CObject::AssertValid();
|
|
}
|
|
|
|
void COXSplitterColRowState::Dump(CDumpContext& dc) const
|
|
{
|
|
CObject::Dump(dc);
|
|
}
|
|
#endif //_DEBUG
|
|
|
|
COXSplitterColRowState::~COXSplitterColRowState()
|
|
{
|
|
ASSERT_VALID(this);
|
|
}
|
|
|
|
// protected:
|
|
void COXSplitterColRowState::Initialize()
|
|
// --- In :
|
|
// --- Out :
|
|
// --- Returns :
|
|
// --- Effect : Initialized the data members of this object
|
|
{
|
|
m_bRow = TRUE;
|
|
m_nColRowIndex = 0;
|
|
m_nIdealSize = 0;
|
|
m_nMinSize = 0;
|
|
|
|
m_nSerializeSchemaVersionLoad = -1;
|
|
}
|
|
|
|
void COXSplitterColRowState::StoreProperties(CArchive& ar)
|
|
// --- In : ar : Archive used in serialization
|
|
// --- Out :
|
|
// --- Returns :
|
|
// --- Effect : Stores the properties of this object to archive
|
|
// This action may throw an exception on failure
|
|
{
|
|
ASSERT_VALID(this);
|
|
ASSERT(ar.IsStoring());
|
|
|
|
ar << m_bRow;
|
|
ar << m_nColRowIndex;
|
|
ar << m_nIdealSize;
|
|
ar << m_nMinSize;
|
|
|
|
// Some sanity checks
|
|
ASSERT((m_bRow == FALSE) || (m_bRow == TRUE));
|
|
ASSERT(0 <= m_nColRowIndex);
|
|
ASSERT(0 <= m_nIdealSize);
|
|
ASSERT(0 <= m_nMinSize);
|
|
|
|
ASSERT_VALID(this);
|
|
}
|
|
|
|
void COXSplitterColRowState::LoadProperties(CArchive& ar)
|
|
// --- In : ar : Archive used in serialization
|
|
// --- Out :
|
|
// --- Returns :
|
|
// --- Effect : loads the properties of this object from archive
|
|
// This action may throw an exception on failure
|
|
{
|
|
ASSERT_VALID(this);
|
|
ASSERT(ar.IsLoading());
|
|
|
|
// Some sanity checks
|
|
ASSERT((m_bRow == FALSE) || (m_bRow == TRUE));
|
|
ASSERT(0 <= m_nColRowIndex);
|
|
ASSERT(0 <= m_nIdealSize);
|
|
ASSERT(0 <= m_nMinSize);
|
|
|
|
ar >> m_bRow;
|
|
ar >> m_nColRowIndex;
|
|
ar >> m_nIdealSize;
|
|
ar >> m_nMinSize;
|
|
|
|
ASSERT_VALID(this);
|
|
}
|
|
|
|
// ==========================================================================
|
|
void AFXAPI SerializeElements(CArchive& ar, COXSplitterColRowState** pSplitterColRowState, int nCount)
|
|
{
|
|
ASSERT(AfxIsValidAddress(pSplitterColRowState, sizeof(COXSplitterColRowState*) * nCount, ar.IsStoring()));
|
|
|
|
if (ar.IsStoring())
|
|
{
|
|
for (int i = 0; i < nCount; i++)
|
|
{
|
|
ASSERT_VALID(pSplitterColRowState[i]);
|
|
ar << pSplitterColRowState[i];
|
|
}
|
|
}
|
|
else
|
|
{
|
|
for (int i = 0; i < nCount; i++)
|
|
{
|
|
ar >> pSplitterColRowState[i];
|
|
ASSERT_VALID(pSplitterColRowState[i]);
|
|
}
|
|
}
|
|
}
|
|
|
|
#endif // _MFC_VER
|
|
// ==========================================================================
|