diff options
Diffstat (limited to 'rsc/source/res/rscflag.cxx')
-rw-r--r-- | rsc/source/res/rscflag.cxx | 490 |
1 files changed, 490 insertions, 0 deletions
diff --git a/rsc/source/res/rscflag.cxx b/rsc/source/res/rscflag.cxx new file mode 100644 index 000000000000..e742b806408e --- /dev/null +++ b/rsc/source/res/rscflag.cxx @@ -0,0 +1,490 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_rsc.hxx" +/****************** I N C L U D E S **************************************/ + +// C and C++ Includes. +#include <stdlib.h> +#include <stdio.h> +#include <string.h> + +#include <rscflag.hxx> + +/****************** C O D E **********************************************/ +/****************** R s c F l a g ****************************************/ +/************************************************************************* +|* +|* RscFlag::RscFlag() +|* +|* Beschreibung +|* Ersterstellung MM 03.04.91 +|* Letzte Aenderung MM 03.04.91 +|* +*************************************************************************/ +RscFlag::RscFlag( Atom nId, sal_uInt32 nTypeId ) + : RscConst( nId, nTypeId ) +{} + +/************************************************************************* +|* +|* RscFlag::Size() +|* +|* Beschreibung Die Groe�e der Instanzdaten richtet sich nach +|* der Anzahl der Flags +|* Ersterstellung MM 03.04.91 +|* Letzte Aenderung MM 03.04.91 +|* +*************************************************************************/ +sal_uInt32 RscFlag::Size() +{ + return( ALIGNED_SIZE( sizeof( RscFlagInst ) * + ( 1 + (nEntries -1) / (sizeof( sal_uInt32 ) * 8) ) ) ); +} + +/************************************************************************* +|* +|* RscFlag::SetNotConst() +|* +|* Beschreibung +|* Ersterstellung MM 03.04.91 +|* Letzte Aenderung MM 03.04.91 +|* +*************************************************************************/ +ERRTYPE RscFlag::SetNotConst( const RSCINST & rInst, Atom nConst ) +{ + sal_uInt32 i = 0, nFlag = 0; + + if( nEntries != (i = GetConstPos( nConst )) ){ + nFlag = 1 << (i % (sizeof( sal_uInt32 ) * 8) ); + i = i / (sizeof( sal_uInt32 ) * 8); + ((RscFlagInst *)rInst.pData)[ i ].nFlags &= ~nFlag; + ((RscFlagInst *)rInst.pData)[ i ].nDfltFlags &= ~nFlag; + return( ERR_OK ); + }; + + return( ERR_RSCFLAG ); +} + +/************************************************************************* +|* +|* RscFlag::SetConst() +|* +|* Beschreibung +|* Ersterstellung MM 03.04.91 +|* Letzte Aenderung MM 03.04.91 +|* +*************************************************************************/ +ERRTYPE RscFlag::SetConst( const RSCINST & rInst, Atom nConst, INT32 /*nVal*/ ) +{ + sal_uInt32 i = 0, nFlag = 0; + + if( nEntries != (i = GetConstPos( nConst )) ){ + nFlag = 1 << (i % (sizeof( sal_uInt32 ) * 8) ); + i = i / (sizeof( sal_uInt32 ) * 8); + ((RscFlagInst *)rInst.pData)[ i ].nFlags |= nFlag; + ((RscFlagInst *)rInst.pData)[ i ].nDfltFlags &= ~nFlag; + return( ERR_OK ); + }; + + return( ERR_RSCFLAG ); +} + +/************************************************************************* +|* +|* RscFlag::CreateBasic() +|* +|* Beschreibung +|* Ersterstellung MM 16.01.92 +|* Letzte Aenderung MM 16.01.92 +|* +*************************************************************************/ +RSCINST RscFlag::CreateBasic( RSCINST * pInst ) +{ + RSCINST aInst; + + if( !pInst ){ + aInst.pClass = this; + aInst.pData = (CLASS_DATA) rtl_allocateMemory( Size() ); + } + else + aInst = *pInst; + + return( aInst ); +} + +/************************************************************************* +|* +|* RscFlag::Create() +|* +|* Beschreibung +|* Ersterstellung MM 03.04.91 +|* Letzte Aenderung MM 16.01.92 +|* +*************************************************************************/ +RSCINST RscFlag::Create( RSCINST * pInst, const RSCINST & rDflt, BOOL bOwnClass ) +{ + RSCINST aInst = CreateBasic( pInst ); + sal_uInt32 i = 0; + + if( !bOwnClass && rDflt.IsInst() ) + bOwnClass = rDflt.pClass->InHierarchy( this ); + + if( bOwnClass ) + memmove( aInst.pData, rDflt.pData, Size() ); + else + { + for( i = 0; i < Size() / sizeof( RscFlagInst ); i++ ) + { + ((RscFlagInst *)aInst.pData)[ i ].nFlags = 0; + ((RscFlagInst *)aInst.pData)[ i ].nDfltFlags = 0xFFFFFFFF; + } + }; + + return( aInst ); +} + +/************************************************************************* +|* +|* RscFlag::CreateClient() +|* +|* Beschreibung +|* Ersterstellung MM 16.01.92 +|* Letzte Aenderung MM 16.01.92 +|* +*************************************************************************/ +RSCINST RscFlag::CreateClient( RSCINST * pInst, const RSCINST & rDfltI, + BOOL bOwnClass, Atom nConstId ) +{ + RSCINST aInst = CreateBasic( pInst ); + sal_uInt32 i = 0, nFlag = 0; + + if( !bOwnClass && rDfltI.IsInst() ) + bOwnClass = rDfltI.pClass->InHierarchy( this ); + + if( nEntries != (i = GetConstPos( nConstId )) ){ + nFlag = 1 << (i % (sizeof( sal_uInt32 ) * 8) ); + i = i / (sizeof( sal_uInt32 ) * 8); + if( bOwnClass ){ + ((RscFlagInst *)aInst.pData)[ i ].nFlags &= + ~nFlag | ((RscFlagInst *)rDfltI.pData)[ i ].nFlags; + ((RscFlagInst *)aInst.pData)[ i ].nDfltFlags &= + ~nFlag | ((RscFlagInst *)rDfltI.pData)[ i ].nDfltFlags; + } + else{ + ((RscFlagInst *)aInst.pData)[ i ].nFlags &= ~nFlag; + ((RscFlagInst *)aInst.pData)[ i ].nDfltFlags |= nFlag; + } + } + + return( aInst ); +} + +/************************************************************************* +|* +|* RscFlag::SetToDefault() +|* +|* Beschreibung +|* Ersterstellung MM 03.04.91 +|* Letzte Aenderung MM 03.04.91 +|* +*************************************************************************/ +void RscFlag::SetToDefault( const RSCINST & rInst ) +{ + sal_uInt32 i = 0; + + for( i = 0; i < Size() / sizeof( RscFlagInst ); i++ ) + ((RscFlagInst *)rInst.pData)[ i ].nDfltFlags = 0xFFFFFFFF; +} + +/************************************************************************* +|* +|* RscFlag::IsDlft() +|* +|* Beschreibung +|* Ersterstellung MM 03.04.91 +|* Letzte Aenderung MM 03.04.91 +|* +*************************************************************************/ +BOOL RscFlag::IsDefault( const RSCINST & rInst ) +{ + sal_uInt32 i = 0; + + for( i = 0; i < Size() / sizeof( RscFlagInst ); i++ ) + if( ((RscFlagInst *)rInst.pData)[ i ].nDfltFlags != 0xFFFFFFFF ) + return( FALSE ); + return( TRUE ); +} + +BOOL RscFlag::IsDefault( const RSCINST & rInst, Atom nConstId ) +{ + sal_uInt32 i = 0, nFlag = 0; + + if( nEntries != (i = GetConstPos( nConstId )) ){ + nFlag = 1 << (i % (sizeof( sal_uInt32 ) * 8) ); + i = i / (sizeof( sal_uInt32 ) * 8); + if( ((RscFlagInst *)rInst.pData)[ i ].nDfltFlags & nFlag ) + return( TRUE ); + else + return( FALSE ); + }; + return( TRUE ); +} + +/************************************************************************* +|* +|* RscFlag::IsValueDefault() +|* +|* Beschreibung +|* Ersterstellung MM 25.04.91 +|* Letzte Aenderung MM 25.04.91 +|* +*************************************************************************/ +BOOL RscFlag::IsValueDefault( const RSCINST & rInst, CLASS_DATA pDef, + Atom nConstId ) +{ + sal_uInt32 i = 0, nFlag = 0; + + if( nEntries != (i = GetConstPos( nConstId )) ){ + nFlag = 1 << (i % (sizeof( sal_uInt32 ) * 8) ); + i = i / (sizeof( sal_uInt32 ) * 8); + + if( pDef ){ + if( (((RscFlagInst *)rInst.pData)[ i ].nFlags & nFlag) + == (((RscFlagInst *)pDef)[ i ].nFlags & nFlag) ) + { + return TRUE; + } + } + }; + + return FALSE; +} + +BOOL RscFlag::IsValueDefault( const RSCINST & rInst, CLASS_DATA pDef ) +{ + sal_uInt32 i = 0; + + if( pDef ){ + sal_uInt32 Flag = 0, nIndex = 0; + + Flag = 1; + for( i = 0; i < nEntries; i++ ){ + nIndex = i / (sizeof( sal_uInt32 ) * 8); + if( (((RscFlagInst *)rInst.pData)[ nIndex ].nFlags & Flag) + != (((RscFlagInst *)pDef)[ nIndex ].nFlags & Flag) ) + { + return FALSE; + } + Flag <<= 1; + if( !Flag ) + Flag = 1; + }; + } + else + return FALSE; + + return TRUE; +} + +/************************************************************************* +|* +|* RscFlag::IsSet() +|* +|* Beschreibung +|* Ersterstellung MM 10.04.91 +|* Letzte Aenderung MM 10.04.91 +|* +*************************************************************************/ +BOOL RscFlag::IsSet( const RSCINST & rInst, Atom nConstId ) +{ + sal_uInt32 i = 0, nFlag = 0; + + if( nEntries != (i = GetConstPos( nConstId )) ){ + nFlag = 1 << (i % (sizeof( sal_uInt32 ) * 8) ); + i = i / (sizeof( sal_uInt32 ) * 8); + if( ((RscFlagInst *)rInst.pData)[ i ].nFlags & nFlag ) + return( TRUE ); + else + return( FALSE ); + }; + return( TRUE ); +} + +/************************************************************************* +|* +|* RscFlag::WriteSrc() +|* +|* Beschreibung +|* Ersterstellung MM 08.04.91 +|* Letzte Aenderung MM 08.04.91 +|* +*************************************************************************/ +void RscFlag::WriteSrc( const RSCINST & rInst, FILE * fOutput, + RscTypCont *, sal_uInt32, const char * ) +{ + sal_uInt32 i = 0, Flag = 0, nIndex = 0; + BOOL bComma = FALSE; + + Flag = 1; + for( i = 0; i < nEntries; i++ ){ + nIndex = i / (sizeof( sal_uInt32 ) * 8); + if( !( ((RscFlagInst *)rInst.pData)[ nIndex ].nDfltFlags & Flag) ){ + if( bComma ) + fprintf( fOutput, ", " ); + if( ((RscFlagInst *)rInst.pData)[ nIndex ].nFlags & Flag ) + fprintf( fOutput, "%s", pHS->getString( pVarArray[ i ].nId ).getStr() ); + else{ + fprintf( fOutput, "not " ); + fprintf( fOutput, "%s", pHS->getString( pVarArray[ i ].nId ).getStr() ); + } + bComma = TRUE; + } + Flag <<= 1; + if( !Flag ) + Flag = 1; + }; +} + +/************************************************************************* +|* +|* RscFlag::WriteRc() +|* +|* Beschreibung +|* Ersterstellung MM 15.04.91 +|* Letzte Aenderung MM 15.04.91 +|* +*************************************************************************/ +ERRTYPE RscFlag::WriteRc( const RSCINST & rInst, RscWriteRc & aMem, + RscTypCont *, sal_uInt32, BOOL ) +{ + INT32 lVal = 0; + sal_uInt32 i = 0, Flag = 0, nIndex = 0; + + Flag = 1; + for( i = 0; i < nEntries; i++ ){ + nIndex = i / (sizeof( sal_uInt32 ) * 8); + if( ((RscFlagInst *)rInst.pData)[ nIndex ].nFlags & Flag ) + lVal |= pVarArray[ i ].lValue; + + Flag <<= 1; + if( !Flag ) + Flag = 1; + }; + + aMem.Put( (INT32)lVal ); + return( ERR_OK ); +} + +/************************************************************************* +|* +|* RscClient::RscClient() +|* +|* Beschreibung +|* Ersterstellung MM 08.04.91 +|* Letzte Aenderung MM 08.04.91 +|* +*************************************************************************/ +RscClient::RscClient( Atom nId, sal_uInt32 nTypeId, RscFlag * pClass, + Atom nConstantId ) + : RscTop ( nId, nTypeId ) +{ + pRefClass = pClass; + nConstId = nConstantId; +} + +/************************************************************************* +|* +|* RscClient::GetClassType() +|* +|* Beschreibung +|* Ersterstellung MM 08.04.91 +|* Letzte Aenderung MM 08.04.91 +|* +*************************************************************************/ +RSCCLASS_TYPE RscClient::GetClassType() const +{ + return RSCCLASS_BOOL; +} + +/************************************************************************* +|* +|* RscClient::WriteSrc() +|* +|* Beschreibung +|* Ersterstellung MM 08.04.91 +|* Letzte Aenderung MM 08.04.91 +|* +*************************************************************************/ +void RscClient::WriteSrc( const RSCINST & rInst, FILE * fOutput, + RscTypCont *, sal_uInt32, const char * ) +{ + if( pRefClass->IsSet( rInst, nConstId ) ) + fprintf( fOutput, "TRUE" ); + else + fprintf( fOutput, "FALSE" ); +} + +/************************************************************************* +|* +|* RscClient::Create() +|* +|* Beschreibung +|* Ersterstellung MM 08.04.91 +|* Letzte Aenderung MM 08.04.91 +|* +*************************************************************************/ +RSCINST RscClient::Create( RSCINST * pInst, const RSCINST & rDflt, + BOOL bOwnClass ) +{ + RSCINST aTmpI, aDfltI; + + if( pInst ){ + aTmpI.pClass = pRefClass; + aTmpI.pData = pInst->pData; + } + + if( !bOwnClass && rDflt.IsInst() ){ + bOwnClass = rDflt.pClass->InHierarchy( this ); + if( bOwnClass ){ + aDfltI.pClass = pRefClass; + aDfltI.pData = rDflt.pData; + } + } + + if( pInst ) + aTmpI = pRefClass->CreateClient( &aTmpI, aDfltI, + bOwnClass, nConstId ); + else + aTmpI = pRefClass->CreateClient( NULL, aDfltI, + bOwnClass, nConstId ); + aTmpI.pClass = this; + + return( aTmpI ); +} + |