reman3/Rayman_X/cpa/tempgrp/ITF/CPAMdfO.cpp

160 lines
6.2 KiB
C++

/*=========================================================================
*
* CPASectO.hpp - CPA_SectionObject : implementation
*
*
* Version 1.0
* Creation date 20.06.97
* Revision date
*
* Shaitan
*=======================================================================*/
#include "stdafx.h"
#ifdef ACTIVE_EDITOR
#include "acp_base.h"
#include "itf/CPAMdfO.hpp"
#include "itf/CPAEditB.hpp"
/*-----------------------------------------------------------------------------
* MACRO
*---------------------------------------------------------------------------*/
#define lMAKE_MODIF( bExists, bInitialState ) ( (long) ((bExists ? 0x0000ffff : 0) + (bInitialState ? 0xffff0000 : 0)) )
#define M_bExists( lModif ) ( (BOOL ) ( lModif & 0x0000ffff ) )
#define M_bOnInitialState( lModif ) ( (BOOL ) ( lModif & 0xffff0000 ) )
/*-----------------------------------------------------------------------------
* Description :
*---------------------------------------------------------------------------*/
CPA_ModifiableObject::CPA_ModifiableObject(CPA_EditorBase *pEditor, const CString csType, tdeSaveStatus eStatus,
CPA_BaseObject *pOwner, BOOL bAvailable,
char *p_szDataPath, SCR_tdpfn_Ntfy_Callback pCallBack)
:CPA_SaveObject(pEditor, csType, eStatus, pOwner, bAvailable, p_szDataPath, pCallBack)
{
m_p_oListOfModifNames = pEditor -> fn_p_oGetModifNamesList(csType);
//
m_oListOfModifications . RemoveAll();
if( m_p_oListOfModifNames != NULL )
{
for( int i=0 ; i < m_p_oListOfModifNames -> GetCount() ; i++ )
m_oListOfModifications . AddTail( lMAKE_MODIF( FALSE, TRUE ) );
}
}
/*-----------------------------------------------------------------------------
* Description :
*---------------------------------------------------------------------------*/
CPA_ModifiableObject::CPA_ModifiableObject(CPA_ModifiableObject &r_oSource)
:CPA_SaveObject(r_oSource)
{
m_p_oListOfModifNames = r_oSource . m_p_oListOfModifNames;
m_oListOfModifications . RemoveAll();
if( m_p_oListOfModifNames != NULL )
{
for( int i=0 ; i < m_p_oListOfModifNames -> GetCount() ; i++ )
m_oListOfModifications . AddTail( lMAKE_MODIF( FALSE, TRUE ) );
}
}
/*-----------------------------------------------------------------------------
* Description :
*---------------------------------------------------------------------------*/
CPA_ModifiableObject::~CPA_ModifiableObject()
{
m_oListOfModifications . RemoveAll();
}
/*-----------------------------------------------------------------------------
* Description :
*---------------------------------------------------------------------------*/
void CPA_ModifiableObject::fn_vSetCurrentState(const CString _ocsModificationType, BOOL _bInitialState)
{
POSITION stPos = fn_stGetModificationPos( _ocsModificationType );
if( stPos )
{
long lModif = m_oListOfModifications . GetAt( stPos );
BOOL bHasModif = M_bExists( lModif );
fn_vSetOnState( _ocsModificationType, _bInitialState );
lModif = lMAKE_MODIF( bHasModif, _bInitialState );
m_oListOfModifications . SetAt( stPos, lModif );
}
}
/*-----------------------------------------------------------------------------
* Description :
*---------------------------------------------------------------------------*/
void CPA_ModifiableObject::fn_vSetModification(const CString _ocsModificationType, BOOL _bModified /*=TRUE*/, BOOL _bInitialState /*=TRUE*/)
{
fn_vSetOnState( _ocsModificationType, _bInitialState );
fn_vUpdateModification(_ocsModificationType, _bModified, _bInitialState);
}
/*-----------------------------------------------------------------------------
* Description :
*---------------------------------------------------------------------------*/
void CPA_ModifiableObject::fn_vUpdateModification (const CString _ocsModificationType, BOOL _bModified, BOOL bInitialState)
{
POSITION stPos = fn_stGetModificationPos( _ocsModificationType );
if( stPos )
m_oListOfModifications . SetAt( stPos, lMAKE_MODIF( _bModified, bInitialState ) );
}
/*-----------------------------------------------------------------------------
* Description :
*---------------------------------------------------------------------------*/
BOOL CPA_ModifiableObject::fn_bIsOnInitialState(const CString _ocsModificationType)
{
POSITION stPos = fn_stGetModificationPos( _ocsModificationType );
if( stPos )
return M_bOnInitialState( m_oListOfModifications . GetAt( stPos ) );
return TRUE;
}
/*-----------------------------------------------------------------------------
* Description :
*---------------------------------------------------------------------------*/
BOOL CPA_ModifiableObject::fn_bIsModified(const CString _ocsModificationType)
{
POSITION stPos = fn_stGetModificationPos( _ocsModificationType );
if( stPos )
return M_bExists( m_oListOfModifications . GetAt( stPos ) );
return FALSE;
}
/*-----------------------------------------------------------------------------
* Description :
*---------------------------------------------------------------------------*/
void CPA_ModifiableObject::fn_vValidateState(const CString _ocsModificationType, BOOL bInitialState)
{
fn_vSetModification( _ocsModificationType, FALSE, bInitialState);
}
/*-----------------------------------------------------------------------------
* Description :
*---------------------------------------------------------------------------*/
POSITION CPA_ModifiableObject::fn_stGetModificationPos( const CString _ocsModificationType )
{
if( m_p_oListOfModifNames != NULL )
{
POSITION xPosName = m_p_oListOfModifNames -> GetHeadPosition();
POSITION xPosModif = m_oListOfModifications . GetHeadPosition();
while( xPosName )
{
ASSERT( xPosModif );
CString csName = m_p_oListOfModifNames -> GetNext( xPosName );
if( csName == _ocsModificationType )
return xPosModif;
m_oListOfModifications . GetNext( xPosModif );
}
}
return NULL;
}
#endif // ACTIVE_EDITOR