blob: 645111dc60ee678c47d698085cc0e9079b22ca2e [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_idl.hxx"
#include <ctype.h>
#include <stdio.h>
#include <tools/debug.hxx>
#include <attrib.hxx>
#include <slot.hxx>
#include <globals.hxx>
#include <database.hxx>
/****************** SvMetaSlot *****************************************/
SV_IMPL_META_FACTORY1( SvMetaSlot, SvMetaAttribute );
SvMetaObject *SvMetaSlot::MakeClone() const
{
return new SvMetaSlot( *this );
}
/*************************************************************************
|* SvMetaSlot::SvMetaSlot()
|*
|* Beschreibung Zweites sal_False bei den SvBOOL-Objekten bedeutet,
|* IsSet() liefert sal_False (Defaultinitialisierung).
*************************************************************************/
SvMetaSlot::SvMetaSlot()
: aCachable( sal_True, sal_False )
, aSynchron( sal_True, sal_False )
, aRecordPerSet( sal_True, sal_False )
, aRecordAbsolute( sal_False, sal_False )
, pLinkedSlot(0)
, pNextSlot(0)
, pEnumValue(0)
{
}
SvMetaSlot::SvMetaSlot( SvMetaType * pType )
: SvMetaAttribute( pType )
, aCachable( sal_True, sal_False )
, aSynchron( sal_True, sal_False )
, aRecordPerSet( sal_True, sal_False )
, aRecordAbsolute( sal_False, sal_False )
, pLinkedSlot(0)
, pNextSlot(0)
, pEnumValue(0)
{
}
/*
#define TEST_READ \
{ \
sal_uInt32 nPos; \
rStm >> nPos; \
DBG_ASSERT( nPos +4 == rStm.Tell(), "stream pos error" ); \
}
#define TEST_WRITE \
rStm << (sal_uInt32)rStm.Tell();
*/
#define TEST_READ
#define TEST_WRITE
void SvMetaSlot::Load( SvPersistStream & rStm )
{
SvMetaAttribute::Load( rStm );
sal_uInt16 nMask;
rStm >> nMask;
TEST_READ
if( nMask & 0x0001 )
{
SvMetaAttribute * pMeth;
rStm >> pMeth;
aMethod = pMeth;
}
TEST_READ
if( nMask & 0x0002 ) rStm >> aGroupId;
TEST_READ
if( nMask & 0x0004 ) rStm >> aHasCoreId;
TEST_READ
if( nMask & 0x0008 ) rStm >> aConfigId;
TEST_READ
if( nMask & 0x0010 ) rStm >> aExecMethod;
TEST_READ
if( nMask & 0x0020 ) rStm >> aStateMethod;
TEST_READ
if( nMask & 0x0040 ) rStm >> aDefault;
TEST_READ
if( nMask & 0x0080 ) rStm >> aPseudoSlots;
TEST_READ
if( nMask & 0x0100 ) rStm >> aGet;
TEST_READ
if( nMask & 0x0200 ) rStm >> aSet;
TEST_READ
if( nMask & 0x0400 ) rStm >> aCachable;
TEST_READ
if( nMask & 0x0800 ) rStm >> aVolatile;
TEST_READ
if( nMask & 0x1000 ) rStm >> aToggle;
TEST_READ
if( nMask & 0x2000 ) rStm >> aAutoUpdate;
TEST_READ
if( nMask & 0x4000 ) rStm >> aSynchron;
TEST_READ
if( nMask & 0x8000 ) rStm >> aAsynchron;
nMask = 0;
rStm >> nMask;
TEST_READ
if( nMask & 0x0001 ) rStm >> aRecordPerItem;
TEST_READ
if( nMask & 0x0002 ) rStm >> aRecordManual;
TEST_READ
if( nMask & 0x0004 ) rStm >> aNoRecord;
TEST_READ
if( nMask & 0x0008 ) rStm >> aHasDialog;
TEST_READ
if( nMask & 0x0010 ) rStm >> aDisableFlags;
TEST_READ
if( nMask & 0x0020 ) rStm >> aPseudoPrefix;
TEST_READ
if( nMask & 0x0040 ) rStm >> aRecordPerSet;
TEST_READ
if( nMask & 0x0080 ) rStm >> aMenuConfig;
TEST_READ
if( nMask & 0x0100 ) rStm >> aToolBoxConfig;
TEST_READ
if( nMask & 0x0200 ) rStm >> aStatusBarConfig;
TEST_READ
if( nMask & 0x0400 ) rStm >> aAccelConfig;
TEST_READ
if( nMask & 0x0800 ) rStm >> aFastCall;
TEST_READ
if( nMask & 0x1000 ) rStm >> aContainer;
TEST_READ
if( nMask & 0x2000 )
{
SvMetaType * pT;
rStm >> pT;
aSlotType = pT;
}
TEST_READ
if( nMask & 0x4000 ) rStm >> aRecordAbsolute;
TEST_READ
if( nMask & 0x8000 ) rStm >> aImageRotation;
nMask = 0;
rStm >> nMask;
TEST_READ
if( nMask & 0x0001 ) rStm >> aUnoName;
if( nMask & 0x0002 ) rStm >> aImageReflection;
}
void SvMetaSlot::Save( SvPersistStream & rStm )
{
SvMetaAttribute::Save( rStm );
// Maske erstellen
sal_uInt16 nMask = 0;
if( aMethod.Is() ) nMask |= 0x0001;
if( aGroupId.Len() ) nMask |= 0x0002;
if( aHasCoreId.IsSet() ) nMask |= 0x0004;
if( aConfigId.Len() ) nMask |= 0x0008;
if( aExecMethod.Len() ) nMask |= 0x0010;
if( aStateMethod.Len() ) nMask |= 0x0020;
if( aDefault.Len() ) nMask |= 0x0040;
if( aPseudoSlots.IsSet() ) nMask |= 0x0080;
if( aGet.IsSet() ) nMask |= 0x0100;
if( aSet.IsSet() ) nMask |= 0x0200;
if( aCachable.IsSet() ) nMask |= 0x0400;
if( aVolatile.IsSet() ) nMask |= 0x0800;
if( aToggle.IsSet() ) nMask |= 0x1000;
if( aAutoUpdate.IsSet() ) nMask |= 0x2000;
if( aSynchron.IsSet() ) nMask |= 0x4000;
if( aAsynchron.IsSet() ) nMask |= 0x8000;
// Daten schreiben
rStm << nMask;
TEST_WRITE
if( nMask & 0x0001 ) rStm << aMethod;
TEST_WRITE
if( nMask & 0x0002 ) rStm << aGroupId;
TEST_WRITE
if( nMask & 0x0004 ) rStm << aHasCoreId;
TEST_WRITE
if( nMask & 0x0008 ) rStm << aConfigId;
TEST_WRITE
if( nMask & 0x0010 ) rStm << aExecMethod;
TEST_WRITE
if( nMask & 0x0020 ) rStm << aStateMethod;
TEST_WRITE
if( nMask & 0x0040 ) rStm << aDefault;
TEST_WRITE
if( nMask & 0x0080 ) rStm << aPseudoSlots;
TEST_WRITE
if( nMask & 0x0100 ) rStm << aGet;
TEST_WRITE
if( nMask & 0x0200 ) rStm << aSet;
TEST_WRITE
if( nMask & 0x0400 ) rStm << aCachable;
TEST_WRITE
if( nMask & 0x0800 ) rStm << aVolatile;
TEST_WRITE
if( nMask & 0x1000 ) rStm << aToggle;
TEST_WRITE
if( nMask & 0x2000 ) rStm << aAutoUpdate;
TEST_WRITE
if( nMask & 0x4000 ) rStm << aSynchron;
TEST_WRITE
if( nMask & 0x8000 ) rStm << aAsynchron;
// naechste Fuhre schreiben
// Maske erstellen
nMask = 0;
if( aRecordPerItem.IsSet() ) nMask |= 0x0001;
if( aRecordManual.IsSet() ) nMask |= 0x0002;
if( aNoRecord.IsSet() ) nMask |= 0x0004;
if( aHasDialog.IsSet() ) nMask |= 0x0008;
if ( aDisableFlags.IsSet() ) nMask |= 0x0010;
if( aPseudoPrefix.Len() ) nMask |= 0x0020;
if( aRecordPerSet.IsSet() ) nMask |= 0x0040;
if( aMenuConfig.IsSet() ) nMask |= 0x0080;
if( aToolBoxConfig.IsSet() ) nMask |= 0x0100;
if( aStatusBarConfig.IsSet() )nMask |= 0x0200;
if( aAccelConfig.IsSet() ) nMask |= 0x0400;
if( aFastCall.IsSet() ) nMask |= 0x0800;
if( aContainer.IsSet() ) nMask |= 0x1000;
if( aSlotType.Is() ) nMask |= 0x2000;
if( aRecordAbsolute.IsSet() ) nMask |= 0x4000;
if( aImageRotation.IsSet() ) nMask |= 0x8000;
// Daten schreiben
rStm << nMask;
TEST_WRITE
if( nMask & 0x0001 ) rStm << aRecordPerItem;
TEST_WRITE
if( nMask & 0x0002 ) rStm << aRecordManual;
TEST_WRITE
if( nMask & 0x0004 ) rStm << aNoRecord;
TEST_WRITE
if( nMask & 0x0008 ) rStm << aHasDialog;
TEST_WRITE
if( nMask & 0x0010 ) rStm << aDisableFlags;
TEST_WRITE
if( nMask & 0x0020 ) rStm << aPseudoPrefix;
TEST_WRITE
if( nMask & 0x0040 ) rStm << aRecordPerSet;
TEST_WRITE
if( nMask & 0x0080 ) rStm << aMenuConfig;
TEST_WRITE
if( nMask & 0x0100 ) rStm << aToolBoxConfig;
TEST_WRITE
if( nMask & 0x0200 ) rStm << aStatusBarConfig;
TEST_WRITE
if( nMask & 0x0400 ) rStm << aAccelConfig;
TEST_WRITE
if( nMask & 0x0800 ) rStm << aFastCall;
TEST_WRITE
if( nMask & 0x1000 ) rStm << aContainer;
TEST_WRITE
if( nMask & 0x2000 ) rStm << aSlotType;
TEST_WRITE
if( nMask & 0x4000 ) rStm << aRecordAbsolute;
TEST_WRITE
if( nMask & 0x8000 ) rStm << aImageRotation;
nMask = 0;
if( aUnoName.IsSet() ) nMask |= 0x0001;
if( aImageReflection.IsSet() ) nMask |= 0x0002;
rStm << nMask;
TEST_WRITE
if( nMask & 0x0001 ) rStm << aUnoName;
TEST_WRITE
if( nMask & 0x0002 ) rStm << aImageReflection;
}
/*************************************************************************
|* SvMetaSlot::IsVariable()
|*
|* Beschreibung
*************************************************************************/
sal_Bool SvMetaSlot::IsVariable() const
{
return SvMetaAttribute::IsVariable();
}
/*************************************************************************
|* SvMetaSlot::IsMethod()
|*
|* Beschreibung
*************************************************************************/
sal_Bool SvMetaSlot::IsMethod() const
{
sal_Bool b = SvMetaAttribute::IsMethod();
b |= NULL != GetMethod();
return b;
}
/*************************************************************************
|* SvMetaSlot::HasMethods()
|*
|* Beschreibung
*************************************************************************/
ByteString SvMetaSlot::GetMangleName( sal_Bool bVariable ) const
{
if( !bVariable )
{
SvMetaAttribute * pMeth = GetMethod();
if( pMeth )
return pMeth->GetName();
}
return GetName();
}
/*************************************************************************
|* Referenz
|*
|* Beschreibung Zweites sal_False bei den SvBOOL-Objekten bedeutet,
|* IsSet() liefert sal_False (Defaultinitialisierung).
*************************************************************************/
/** Referenz Aufloesung **/
SvMetaType * SvMetaSlot::GetSlotType() const
{
if( aSlotType.Is() || !GetRef() ) return aSlotType;
return ((SvMetaSlot *)GetRef())->GetSlotType();
}
SvMetaAttribute * SvMetaSlot::GetMethod() const
{
if( aMethod.Is() || !GetRef() ) return aMethod;
return ((SvMetaSlot *)GetRef())->GetMethod();
}
sal_Bool SvMetaSlot::GetHasCoreId() const
{
if( aHasCoreId.IsSet() || !GetRef() ) return aHasCoreId;
return ((SvMetaSlot *)GetRef())->GetHasCoreId();
}
const ByteString & SvMetaSlot::GetGroupId() const
{
if( aGroupId.Len() || !GetRef() ) return aGroupId;
return ((SvMetaSlot *)GetRef())->GetGroupId();
}
const ByteString & SvMetaSlot::GetDisableFlags() const
{
if( aDisableFlags.Len() || !GetRef() ) return aDisableFlags;
return ((SvMetaSlot *)GetRef())->GetDisableFlags();
}
const ByteString & SvMetaSlot::GetConfigId() const
{
if( aConfigId.Len() || !GetRef() ) return aConfigId;
return ((SvMetaSlot *)GetRef())->GetConfigId();
}
const ByteString & SvMetaSlot::GetExecMethod() const
{
if( aExecMethod.Len() || !GetRef() ) return aExecMethod;
return ((SvMetaSlot *)GetRef())->GetExecMethod();
}
const ByteString & SvMetaSlot::GetStateMethod() const
{
if( aStateMethod.Len() || !GetRef() ) return aStateMethod;
return ((SvMetaSlot *)GetRef())->GetStateMethod();
}
const ByteString & SvMetaSlot::GetDefault() const
{
if( aDefault.Len() || !GetRef() ) return aDefault;
return ((SvMetaSlot *)GetRef())->GetDefault();
}
sal_Bool SvMetaSlot::GetPseudoSlots() const
{
if( aPseudoSlots.IsSet() || !GetRef() ) return aPseudoSlots;
return ((SvMetaSlot *)GetRef())->GetPseudoSlots();
}
/*
sal_Bool SvMetaSlot::GetGet() const
{
if( aGet.IsSet() || !GetRef() ) return aGet;
return ((SvMetaSlot *)GetRef())->GetGet();
}
sal_Bool SvMetaSlot::GetSet() const
{
if( aSet.IsSet() || !GetRef() ) return aSet;
return ((SvMetaSlot *)GetRef())->GetSet();
}
*/
sal_Bool SvMetaSlot::GetCachable() const
{
// Cachable und Volatile sind exclusiv
if( !GetRef() || aCachable.IsSet() || aVolatile.IsSet() )
return aCachable;
return ((SvMetaSlot *)GetRef())->GetCachable();
}
sal_Bool SvMetaSlot::GetVolatile() const
{
// Cachable und Volatile sind exclusiv
if( !GetRef() || aVolatile.IsSet() || aCachable.IsSet() )
return aVolatile;
return ((SvMetaSlot *)GetRef())->GetVolatile();
}
sal_Bool SvMetaSlot::GetToggle() const
{
if( aToggle.IsSet() || !GetRef() ) return aToggle;
return ((SvMetaSlot *)GetRef())->GetToggle();
}
sal_Bool SvMetaSlot::GetAutoUpdate() const
{
if( aAutoUpdate.IsSet() || !GetRef() ) return aAutoUpdate;
return ((SvMetaSlot *)GetRef())->GetAutoUpdate();
}
sal_Bool SvMetaSlot::GetSynchron() const
{
// Synchron und Asynchron sind exclusiv
if( !GetRef() || aSynchron.IsSet() || aAsynchron.IsSet() )
return aSynchron;
return ((SvMetaSlot *)GetRef())->GetSynchron();
}
sal_Bool SvMetaSlot::GetAsynchron() const
{
// Synchron und Asynchron sind exclusiv
if( !GetRef() || aAsynchron.IsSet() || aSynchron.IsSet() )
return aAsynchron;
return ((SvMetaSlot *)GetRef())->GetAsynchron();
}
sal_Bool SvMetaSlot::GetRecordPerItem() const
{
// Record- PerItem, No, PerSet und Manual sind exclusiv
if( !GetRef() || aRecordPerItem.IsSet() || aNoRecord.IsSet()
|| aRecordPerSet.IsSet() || aRecordManual.IsSet() )
return aRecordPerItem;
return ((SvMetaSlot *)GetRef())->GetRecordPerItem();
}
sal_Bool SvMetaSlot::GetRecordPerSet() const
{
// Record- PerItem, No, PerSet und Manual sind exclusiv
if( !GetRef() || aRecordPerItem.IsSet() || aNoRecord.IsSet()
|| aRecordPerSet.IsSet() || aRecordManual.IsSet() )
return aRecordPerSet;
return ((SvMetaSlot *)GetRef())->GetRecordPerSet();
}
sal_Bool SvMetaSlot::GetRecordManual() const
{
// Record- PerItem, No, PerSet und Manual sind exclusiv
if( !GetRef() || aRecordPerItem.IsSet() || aNoRecord.IsSet()
|| aRecordPerSet.IsSet() || aRecordManual.IsSet() )
return aRecordManual;
return ((SvMetaSlot *)GetRef())->GetRecordManual();
}
sal_Bool SvMetaSlot::GetNoRecord() const
{
// Record- PerItem, No, PerSet und Manual sind exclusiv
if( !GetRef() || aRecordPerItem.IsSet() || aNoRecord.IsSet()
|| aRecordPerSet.IsSet() || aRecordManual.IsSet() )
return aNoRecord;
return ((SvMetaSlot *)GetRef())->GetNoRecord();
}
sal_Bool SvMetaSlot::GetRecordAbsolute() const
{
if( !GetRef() || aRecordAbsolute.IsSet() )
return aRecordAbsolute;
return ((SvMetaSlot *)GetRef())->GetRecordAbsolute();
}
sal_Bool SvMetaSlot::GetHasDialog() const
{
if( aHasDialog.IsSet() || !GetRef() ) return aHasDialog;
return ((SvMetaSlot *)GetRef())->GetHasDialog();
}
const ByteString & SvMetaSlot::GetPseudoPrefix() const
{
if( aPseudoPrefix.Len() || !GetRef() ) return aPseudoPrefix;
return ((SvMetaSlot *)GetRef())->GetPseudoPrefix();
}
sal_Bool SvMetaSlot::GetMenuConfig() const
{
if( aMenuConfig.IsSet() || !GetRef() ) return aMenuConfig;
return ((SvMetaSlot *)GetRef())->GetMenuConfig();
}
sal_Bool SvMetaSlot::GetToolBoxConfig() const
{
if( aToolBoxConfig.IsSet() || !GetRef() ) return aToolBoxConfig;
return ((SvMetaSlot *)GetRef())->GetToolBoxConfig();
}
sal_Bool SvMetaSlot::GetStatusBarConfig() const
{
if( aStatusBarConfig.IsSet() || !GetRef() ) return aStatusBarConfig;
return ((SvMetaSlot *)GetRef())->GetStatusBarConfig();
}
sal_Bool SvMetaSlot::GetAccelConfig() const
{
if( aAccelConfig.IsSet() || !GetRef() ) return aAccelConfig;
return ((SvMetaSlot *)GetRef())->GetAccelConfig();
}
sal_Bool SvMetaSlot::GetFastCall() const
{
if( aFastCall.IsSet() || !GetRef() ) return aFastCall;
return ((SvMetaSlot *)GetRef())->GetFastCall();
}
sal_Bool SvMetaSlot::GetContainer() const
{
if( aContainer.IsSet() || !GetRef() ) return aContainer;
return ((SvMetaSlot *)GetRef())->GetContainer();
}
sal_Bool SvMetaSlot::GetImageRotation() const
{
if( aImageRotation.IsSet() || !GetRef() ) return aImageRotation;
return ((SvMetaSlot *)GetRef())->GetImageRotation();
}
sal_Bool SvMetaSlot::GetImageReflection() const
{
if( aImageReflection.IsSet() || !GetRef() ) return aImageReflection;
return ((SvMetaSlot *)GetRef())->GetImageReflection();
}
const ByteString& SvMetaSlot::GetUnoName() const
{
if( aUnoName.IsSet() || !GetRef() ) return aUnoName;
return ((SvMetaSlot *)GetRef())->GetUnoName();
}
/*************************************************************************
|* SvMetaSlot::FillSbxObject()
|*
|* Beschreibung
*************************************************************************/
/*
void SvMetaSlot::FillSbxObject( SvIdlDataBase & rBase, SbxObject * pObj,
sal_Bool bVariable )
{
// keine Attribut fuer Automation
if( !GetAutomation() || !GetExport() )
return;
if( !bVariable )
{
SvMetaAttributeRef xM = GetMethod();
if( xM.Is() )
{
SvMetaType * pType = xM->GetType();
SvMetaType * pRetBaseType = pType->GetReturnType()->GetBaseType();
ByteString aName = xM->GetName();
SbxMethodRef xMeth = new SbxMethod( aName,
pRetBaseType->GetSbxDataType() );
pType->FillSbxObject( xMeth, bVariable );
xMeth->SetUserData( MakeSlotValue(rBase, sal_False) );
pObj->Insert( &xMeth );
return;
}
}
SvMetaAttribute::FillSbxObject( rBase, pObj, bVariable );
}
*/
#ifdef IDL_COMPILER
/*************************************************************************
|* SvMetaSlot::ReadAttributesSvIdl()
|*
|* Beschreibung
*************************************************************************/
void SvMetaSlot::ReadAttributesSvIdl( SvIdlDataBase & rBase,
SvTokenStream & rInStm )
{
SvMetaAttribute::ReadAttributesSvIdl( rBase, rInStm );
sal_Bool bOk = sal_False;
bOk |= aDefault.ReadSvIdl( SvHash_Default(), rInStm );
bOk |= aPseudoSlots.ReadSvIdl( SvHash_PseudoSlots(), rInStm );
bOk |= aHasCoreId.ReadSvIdl( SvHash_HasCoreId(), rInStm );
bOk |= aGroupId.ReadSvIdl( SvHash_GroupId(), rInStm );
bOk |= aExecMethod.ReadSvIdl( SvHash_ExecMethod(), rInStm );
bOk |= aStateMethod.ReadSvIdl( SvHash_StateMethod(), rInStm );
bOk |= aDisableFlags.ReadSvIdl( SvHash_DisableFlags(), rInStm );
if( aGet.ReadSvIdl( SvHash_Get(), rInStm ) )
{
rBase.WriteError( "warning", ByteString( rInStm.GetFileName(), RTL_TEXTENCODING_UTF8 ),
"<Get> old style, use Readonly",
rInStm.GetToken()->GetLine(),
rInStm.GetToken()->GetColumn() );
}
if( aSet.ReadSvIdl( SvHash_Set(), rInStm ) )
{
rBase.WriteError( "warning", ByteString( rInStm.GetFileName(), RTL_TEXTENCODING_UTF8 ),
"<Set> old style, use method declaration",
rInStm.GetToken()->GetLine(),
rInStm.GetToken()->GetColumn() );
}
if( aCachable.ReadSvIdl( SvHash_Cachable(), rInStm ) )
SetCachable( aCachable ), bOk = sal_True;
if( aVolatile.ReadSvIdl( SvHash_Volatile(), rInStm ) )
SetVolatile( aVolatile ), bOk = sal_True;
if( aToggle.ReadSvIdl( SvHash_Toggle(), rInStm ) )
SetToggle( aToggle ), bOk = sal_True;
if( aAutoUpdate.ReadSvIdl( SvHash_AutoUpdate(), rInStm ) )
SetAutoUpdate( aAutoUpdate ), bOk = sal_True;
if( aSynchron.ReadSvIdl( SvHash_Synchron(), rInStm ) )
SetSynchron( aSynchron ), bOk = sal_True;
if( aAsynchron.ReadSvIdl( SvHash_Asynchron(), rInStm ) )
SetAsynchron( aAsynchron ), bOk = sal_True;
if( aRecordAbsolute.ReadSvIdl( SvHash_RecordAbsolute(), rInStm ) )
SetRecordAbsolute( aRecordAbsolute), bOk = sal_True;
if( aRecordPerItem.ReadSvIdl( SvHash_RecordPerItem(), rInStm ) )
SetRecordPerItem( aRecordPerItem ), bOk = sal_True;
if( aRecordPerSet.ReadSvIdl( SvHash_RecordPerSet(), rInStm ) )
SetRecordPerSet( aRecordPerSet ), bOk = sal_True;
if( aRecordManual.ReadSvIdl( SvHash_RecordManual(), rInStm ) )
SetRecordManual( aRecordManual ), bOk = sal_True;
if( aNoRecord.ReadSvIdl( SvHash_NoRecord(), rInStm ) )
SetNoRecord( aNoRecord ), bOk = sal_True;
bOk |= aHasDialog.ReadSvIdl( SvHash_HasDialog(), rInStm );
bOk |= aPseudoPrefix.ReadSvIdl( SvHash_PseudoPrefix(), rInStm );
bOk |= aMenuConfig.ReadSvIdl( SvHash_MenuConfig(), rInStm );
bOk |= aToolBoxConfig.ReadSvIdl( SvHash_ToolBoxConfig(), rInStm );
bOk |= aStatusBarConfig.ReadSvIdl( SvHash_StatusBarConfig(), rInStm );
bOk |= aAccelConfig.ReadSvIdl( SvHash_AccelConfig(), rInStm );
SvBOOL aAllConfig;
if( aAllConfig.ReadSvIdl( SvHash_AllConfig(), rInStm ) )
SetAllConfig( aAllConfig ), bOk = sal_True;
bOk |= aFastCall.ReadSvIdl( SvHash_FastCall(), rInStm );
bOk |= aContainer.ReadSvIdl( SvHash_Container(), rInStm );
bOk |= aImageRotation.ReadSvIdl( SvHash_ImageRotation(), rInStm );
bOk |= aImageReflection.ReadSvIdl( SvHash_ImageReflection(), rInStm );
bOk |= aUnoName.ReadSvIdl( SvHash_UnoName(), rInStm );
if( !bOk )
{
if( !aSlotType.Is() )
{
sal_uInt32 nTokPos = rInStm.Tell();
SvToken * pTok = rInStm.GetToken_Next();
if( pTok->Is( SvHash_SlotType() ) )
{
sal_Bool bBraket = rInStm.Read( '(' );
if( bBraket || rInStm.Read( '=' ) )
{
aSlotType = rBase.ReadKnownType( rInStm );
if( aSlotType.Is() )
{
if( aSlotType->IsItem() )
{
if( bBraket )
{
if( rInStm.Read( ')' ) )
return;
}
else
return;
}
rBase.SetError( "the SlotType is not a item", rInStm.GetToken() );
rBase.WriteError( rInStm );
}
rBase.SetError( "SlotType with unknown item type", rInStm.GetToken() );
rBase.WriteError( rInStm );
}
}
rInStm.Seek( nTokPos );
}
if( !aMethod.Is() )
{
SvToken * pTok = rInStm.GetToken();
if( pTok->IsIdentifier() )
{
aMethod = new SvMetaSlot();
sal_uInt32 nTokPos = rInStm.Tell();
if( aMethod->ReadSvIdl( rBase, rInStm ) )
{
if( aMethod->IsMethod() )
{
aMethod->SetSlotId( GetSlotId() );
if( aMethod->Test( rBase, rInStm ) )
return;
}
rInStm.Seek( nTokPos );
}
aMethod.Clear();
}
}
}
}
/*************************************************************************
|* SvMetaSlot::WriteAttributesSvIdl()
|*
|* Beschreibung
*************************************************************************/
void SvMetaSlot::WriteAttributesSvIdl( SvIdlDataBase & rBase,
SvStream & rOutStm,
sal_uInt16 nTab )
{
SvMetaAttribute::WriteAttributesSvIdl( rBase, rOutStm, nTab );
if( aSlotType.Is() )
{
WriteTab( rOutStm, nTab );
rOutStm << SvHash_SlotType()->GetName().GetBuffer() << '(';
aSlotType->WriteTheType( rBase, rOutStm, nTab, WRITE_IDL );
rOutStm << ");" << endl;
}
if( aMethod.Is() )
{
WriteTab( rOutStm, nTab );
aMethod->WriteSvIdl( rBase, rOutStm, nTab );
rOutStm << ';' << endl;
}
if( aHasCoreId )
{
aHasCoreId.WriteSvIdl( SvHash_HasCoreId(), rOutStm );
rOutStm << ';' << endl;
}
if( aGroupId.Len() )
{
WriteTab( rOutStm, nTab );
aGroupId.WriteSvIdl( SvHash_GroupId(), rOutStm, nTab +1);
rOutStm << ';' << endl;
}
if( aExecMethod.Len() )
{
WriteTab( rOutStm, nTab );
aExecMethod.WriteSvIdl( SvHash_ExecMethod(), rOutStm, nTab +1);
rOutStm << ';' << endl;
}
if( aStateMethod.Len() )
{
WriteTab( rOutStm, nTab );
aStateMethod.WriteSvIdl( SvHash_StateMethod(), rOutStm, nTab +1);
rOutStm << ';' << endl;
}
if( aDisableFlags.Len() )
{
WriteTab( rOutStm, nTab );
aDisableFlags.WriteSvIdl( SvHash_DisableFlags(), rOutStm, nTab +1);
rOutStm << ';' << endl;
}
if( aSet || aGet || aPseudoSlots )
{
WriteTab( rOutStm, nTab );
char const * p = "";
if( aPseudoSlots )
{
aPseudoSlots.WriteSvIdl( SvHash_PseudoSlots(), rOutStm );
p = ", ";
}
if( aGet )
{
rOutStm << p;
aGet.WriteSvIdl( SvHash_Get(), rOutStm );
p = ", ";
}
if( aSet )
{
rOutStm << p;
aSet.WriteSvIdl( SvHash_Set(), rOutStm );
}
rOutStm << ';' << endl;
}
ByteString aDel( ", " );
ByteString aOut;
if( aVolatile )
aOut += aVolatile.GetSvIdlString( SvHash_Volatile() );
else if( !aCachable )
// wegen Default == sal_True, nur wenn kein anderer gesetzt
aOut += aCachable.GetSvIdlString( SvHash_Cachable() );
else
aDel.Erase();
if( aToggle )
{
( aOut += aDel ) += aToggle.GetSvIdlString( SvHash_Toggle() );
aDel = ", ";
}
if( aAutoUpdate )
{
(aOut += aDel ) += aAutoUpdate.GetSvIdlString( SvHash_AutoUpdate() );
aDel = ", ";
}
ByteString aDel1( ", " );
if( aAsynchron )
( aOut += aDel ) += aAsynchron.GetSvIdlString( SvHash_Asynchron() );
else if( !aSynchron )
// wegen Default == sal_True, nur wenn kein anderer gesetzt
( aOut += aDel ) += aSynchron.GetSvIdlString( SvHash_Synchron() );
else
aDel1 = aDel;
aDel = ", ";
if( aRecordManual )
( aOut += aDel1 ) += aRecordManual.GetSvIdlString( SvHash_RecordManual() );
else if( aNoRecord )
( aOut += aDel1 ) += aNoRecord.GetSvIdlString( SvHash_NoRecord() );
else if( !aRecordPerSet )
// wegen Default == sal_True, nur wenn kein anderer gesetzt
( aOut += aDel1 ) += aRecordPerSet.GetSvIdlString( SvHash_RecordPerSet() );
else if( aRecordPerItem )
( aOut += aDel1 ) += aRecordPerItem.GetSvIdlString( SvHash_RecordPerItem() );
else
aDel = aDel1;
if( aRecordAbsolute )
{
( aOut += aDel ) += aRecordAbsolute.GetSvIdlString( SvHash_RecordAbsolute() );
aDel = ", ";
}
if( aHasDialog )
{
( aOut += aDel ) += aHasDialog.GetSvIdlString( SvHash_HasDialog() );
aDel = ", ";
}
if( aMenuConfig )
{
( aOut += aDel ) += aMenuConfig.GetSvIdlString( SvHash_MenuConfig() );
aDel = ", ";
}
if( aToolBoxConfig )
{
( aOut += aDel ) += aToolBoxConfig.GetSvIdlString( SvHash_ToolBoxConfig() );
aDel = ", ";
}
if( aStatusBarConfig )
{
( aOut += aDel ) += aStatusBarConfig.GetSvIdlString( SvHash_StatusBarConfig() );
aDel = ", ";
}
if( aAccelConfig )
{
( aOut += aDel ) += aAccelConfig.GetSvIdlString( SvHash_AccelConfig() );
aDel = ", ";
}
if( aFastCall )
{
( aOut += aDel ) += aFastCall.GetSvIdlString( SvHash_FastCall() );
aDel = ", ";
}
if( aContainer )
{
( aOut += aDel ) += aContainer.GetSvIdlString( SvHash_Container() );
aDel = ", ";
}
if( aImageRotation )
{
( aOut += aDel ) += aImageRotation.GetSvIdlString( SvHash_ImageRotation() );
aDel = ", ";
}
if( aImageReflection )
{
( aOut += aDel ) += aImageReflection.GetSvIdlString( SvHash_ImageReflection() );
aDel = ", ";
}
if( aOut.Len() )
{
WriteTab( rOutStm, nTab );
rOutStm << aOut.GetBuffer() << endl;
}
}
/*************************************************************************
|* SvMetaSlot::Test()
|*
|* Beschreibung
*************************************************************************/
sal_Bool SvMetaSlot::Test( SvIdlDataBase & rBase, SvTokenStream & rInStm )
{
sal_Bool bOk = SvMetaAttribute::Test( rBase, rInStm );
if( bOk )
{
SvMetaType * pType = GetType();
if( pType->GetType() == TYPE_METHOD )
pType = pType->GetReturnType();
if( !pType->IsItem() )
{
rBase.SetError( "this attribute is not a slot", rInStm.GetToken() );
rBase.WriteError( rInStm );
bOk = sal_False;
}
}
return bOk;
}
/*************************************************************************
|* SvMetaSlot::ReadSvIdl()
|*
|* Beschreibung
*************************************************************************/
sal_Bool SvMetaSlot::ReadSvIdl( SvIdlDataBase & rBase, SvTokenStream & rInStm )
{
sal_uInt32 nTokPos = rInStm.Tell();
sal_Bool bOk = sal_True;
SvMetaAttribute * pAttr = rBase.ReadKnownAttr( rInStm, GetType() );
if( pAttr )
{
// F"ur Testzwecke: Referenz bei Kurz-Syntax
SvMetaSlot * pKnownSlot = PTR_CAST( SvMetaSlot, pAttr );
if( pKnownSlot )
{
SetRef( pKnownSlot );
SetName( pKnownSlot->GetName(), &rBase );
bOk = SvMetaName::ReadSvIdl( rBase, rInStm );
}
else
{
ByteString aStr( "attribute " );
aStr += pAttr->GetName();
aStr += " is method or variable but not a slot";
rBase.SetError( aStr, rInStm.GetToken() );
rBase.WriteError( rInStm );
bOk = sal_False;
}
}
else
{
bOk = SvMetaAttribute::ReadSvIdl( rBase, rInStm );
SvMetaAttribute *pAttr2 = rBase.SearchKnownAttr( GetSlotId() );
if( pAttr2 )
{
// F"ur Testzwecke: Referenz bei kompletter Definition
SvMetaSlot * pKnownSlot = PTR_CAST( SvMetaSlot, pAttr2 );
if( pKnownSlot )
{
SetRef( pKnownSlot );
// Namen d"urfen abweichen, da mit angegeben
if ( pKnownSlot->GetName() != GetName() )
{
DBG_ERROR("Illegal definition!");
rInStm.Seek( nTokPos );
return sal_False;
}
SetName( pKnownSlot->GetName(), &rBase );
}
else
{
ByteString aStr( "attribute " );
aStr += pAttr2->GetName();
aStr += " is method or variable but not a slot";
rBase.SetError( aStr, rInStm.GetToken() );
rBase.WriteError( rInStm );
bOk = sal_False;
}
}
}
if( !bOk )
rInStm.Seek( nTokPos );
return bOk;
}
/*************************************************************************
|* SvMetaSlot::WriteSvIdl()
|*
|* Beschreibung
*************************************************************************/
void SvMetaSlot::WriteSvIdl( SvIdlDataBase & rBase, SvStream & rOutStm,
sal_uInt16 nTab )
{
SvMetaAttribute::WriteSvIdl( rBase, rOutStm, nTab );
}
/*************************************************************************
|* SvMetaSlot::Write()
|*
|* Beschreibung
*************************************************************************/
void SvMetaSlot::Write( SvIdlDataBase & rBase,
SvStream & rOutStm, sal_uInt16 nTab,
WriteType nT, WriteAttribute nA )
{
if ( nT == WRITE_DOCU )
{
if ( GetHidden() )
return;
}
else
{
// keine Attribut fuer Automation
if( !GetAutomation() || !GetExport() )
return;
}
if( !(nA & WA_VARIABLE) )
{
SvMetaAttributeRef xM = GetMethod();
if( xM.Is() )
{
xM->SetSlotId( GetSlotId() );
xM->SetDescription( GetDescription() );
xM->Write( rBase, rOutStm, nTab, nT, nA );
return;
}
}
SvMetaAttribute::Write( rBase, rOutStm, nTab, nT, nA );
}
void SvMetaSlot::Insert( SvSlotElementList& rList, const ByteString & rPrefix,
SvIdlDataBase& rBase)
{
// Einf"ugeposition durch bin"are Suche in der SlotListe ermitteln
sal_uInt16 nId = (sal_uInt16) GetSlotId().GetValue();
sal_uInt16 nListCount = (sal_uInt16) rList.Count();
sal_uInt16 nPos;
sal_uLong m; // for inner "for" loop
if ( !nListCount )
nPos = 0;
else if ( nListCount == 1 )
nPos = rList.GetObject(0)->xSlot->GetSlotId().GetValue() >= nId ? 0 : 1;
else
{
sal_uInt16 nMid = 0, nLow = 0;
sal_uInt16 nHigh = nListCount - 1;
sal_Bool bFound = sal_False;
while ( !bFound && nLow <= nHigh )
{
nMid = (nLow + nHigh) >> 1;
DBG_ASSERT( nMid < nListCount, "bsearch ist buggy" );
int nDiff = (int) nId - (int) rList.GetObject(nMid)->xSlot->GetSlotId().GetValue();
if ( nDiff < 0)
{
if ( nMid == 0 )
break;
nHigh = nMid - 1;
}
else if ( nDiff > 0 )
{
nLow = nMid + 1;
if ( nLow == 0 )
break;
}
else
bFound = sal_True;
}
DBG_ASSERT(!bFound, "Duplicate SlotId!");
nPos = bFound ? nMid : nLow;
}
DBG_ASSERT( nPos <= nListCount,
"nPos too large" );
DBG_ASSERT( nPos == nListCount || nId <=
(sal_uInt16) rList.GetObject(nPos)->xSlot->GetSlotId().GetValue(),
"Successor has lower SlotId" );
DBG_ASSERT( nPos == 0 || nId >
(sal_uInt16) rList.GetObject(nPos-1)->xSlot->GetSlotId().GetValue(),
"Predecessor has higher SlotId" );
DBG_ASSERT( nPos+1 >= nListCount || nId <
(sal_uInt16) rList.GetObject(nPos+1)->xSlot->GetSlotId().GetValue(),
"Successor has lower SlotId" );
rList.Insert( new SvSlotElement( this, rPrefix ), nPos );
// EnumSlots plattklopfen
SvMetaTypeEnum * pEnum = NULL;
SvMetaType * pBType = GetType()->GetBaseType();
pEnum = PTR_CAST( SvMetaTypeEnum, pBType );
if( GetPseudoSlots() && pEnum && pEnum->Count() )
{
// Den MasterSlot clonen
SvMetaSlotRef xEnumSlot;
SvMetaSlot *pFirstEnumSlot = NULL;
for( sal_uLong n = 0; n < pEnum->Count(); n++ )
{
// Die SlotId erzeugen
SvMetaEnumValue *enumValue = pEnum->GetObject(n);
ByteString aValName = enumValue->GetName();
ByteString aSId( GetSlotId() );
if( GetPseudoPrefix().Len() )
aSId = GetPseudoPrefix();
aSId += '_';
aSId += aValName.Copy( pEnum->GetPrefix().Len() );
xEnumSlot = NULL;
for( m=0; m<rBase.GetAttrList().Count(); m++ )
{
SvMetaAttribute * pAttr = rBase.GetAttrList().GetObject( m );
if( pAttr->GetSlotId() == aSId )
{
SvMetaSlot* pSlot = PTR_CAST( SvMetaSlot, pAttr );
xEnumSlot = pSlot->Clone();
break;
}
}
if ( m == rBase.GetAttrList().Count() )
{
DBG_ERROR("Invalid EnumSlot!");
xEnumSlot = Clone();
sal_uLong nValue;
if ( rBase.FindId(aSId , &nValue) )
{
SvNumberIdentifier aId;
*((SvIdentifier*)&aId) = aSId;
aId.SetValue(nValue);
xEnumSlot->SetSlotId(aId);
}
}
// Die Slaves sind kein Master !
xEnumSlot->aPseudoSlots = sal_False;
xEnumSlot->SetEnumValue(enumValue);
if ( !pFirstEnumSlot || xEnumSlot->GetSlotId().GetValue() < pFirstEnumSlot->GetSlotId().GetValue() )
pFirstEnumSlot = xEnumSlot;
// Den erzeugten Slave ebenfalls einf"ugen
xEnumSlot->Insert( rList, rPrefix, rBase);
// Die EnumSlots mit dem Master verketten
xEnumSlot->pLinkedSlot = this;
}
// Master zeigt auf den ersten Slave
pLinkedSlot = pFirstEnumSlot;
// Slaves untereinander verketten
rList.Seek((sal_uLong)0);
xEnumSlot = pFirstEnumSlot;
SvSlotElement *pEle;
do
{
pEle = rList.Next();
if ( pEle && pEle->xSlot->pLinkedSlot == this )
{
xEnumSlot->pNextSlot = pEle->xSlot;
xEnumSlot = pEle->xSlot;
}
}
while ( pEle );
xEnumSlot->pNextSlot = pFirstEnumSlot;
}
}
/*************************************************************************
|* SvMetaSlot::WriteSlotMap()
|*
|* Beschreibung
*************************************************************************/
static ByteString MakeSlotName( SvStringHashEntry * pEntry )
{
ByteString aName( "SFX_SLOT_" );
aName += pEntry->GetName();
return aName.ToUpperAscii();
};
void SvMetaSlot::WriteSlotStubs( const ByteString & rShellName,
ByteStringList & rList,
SvStream & rOutStm )
{
/*
ByteString aName = GetName();
SvMetaAttribute * pAttr = rAttrList.First();
while( pAttr )
{
if( pAttr->GetName() == aName )
break;
pAttr = rAttrList.Next();
}
if( pAttr )
return;
*/
if ( !GetExport() && !GetHidden() )
return;
ByteString aMethodName( GetExecMethod() );
if ( aMethodName.Len() && aMethodName != "NoExec" )
{
sal_Bool bIn = sal_False;
for( sal_uInt16 n = 0; n < rList.Count(); n++ )
{
if( *(rList.GetObject(n)) == aMethodName )
{
bIn=sal_True;
break;
}
}
if ( !bIn )
{
rList.Insert( new ByteString(aMethodName), LIST_APPEND );
rOutStm << "SFX_EXEC_STUB("
<< rShellName.GetBuffer()
<< ','
<< aMethodName.GetBuffer()
<< ')' << endl;
}
}
aMethodName = GetStateMethod();
if ( aMethodName.Len() && aMethodName != "NoState" )
{
sal_Bool bIn = sal_False;
for ( sal_uInt16 n=0; n < rList.Count(); n++ )
{
if ( *(rList.GetObject(n)) == aMethodName )
{
bIn=sal_True;
break;
}
}
if ( !bIn )
{
rList.Insert( new ByteString(aMethodName), LIST_APPEND );
rOutStm << "SFX_STATE_STUB("
<< rShellName.GetBuffer()
<< ','
<< aMethodName.GetBuffer()
<< ')' << endl;
}
}
}
void SvMetaSlot::WriteSlot( const ByteString & rShellName, sal_uInt16 nCount,
const ByteString & rSlotId,
SvSlotElementList& rSlotList,
const ByteString & rPrefix,
SvIdlDataBase & rBase, SvStream & rOutStm )
{
if ( !GetExport() && !GetHidden() )
return;
// sal_Bool bIsEnumSlot = 0 != rValueName.Len();
sal_Bool bIsEnumSlot = 0 != pEnumValue;
rOutStm << "// Slot Nr. " << ByteString::CreateFromInt32(nListPos).GetBuffer() << " : ";
ByteString aSlotIdValue( ByteString::CreateFromInt32( GetSlotId().GetValue() ) );
rOutStm << aSlotIdValue.GetBuffer() << endl;
WriteTab( rOutStm, 1 );
if( bIsEnumSlot )
rOutStm << "SFX_NEW_SLOT_ENUM( ";
else
rOutStm << "SFX_NEW_SLOT_ARG( " << rShellName.GetBuffer() << ',' ;
rOutStm << rSlotId.GetBuffer() << ',';
const SvHelpContext& rHlpCtx = GetHelpContext();
if( rHlpCtx.IsSet() )
rOutStm << rHlpCtx.GetBuffer() << ',';
else
rOutStm << rSlotId.GetBuffer() << ',';
// GroupId
if( GetGroupId().Len() )
rOutStm << GetGroupId().GetBuffer();
else
rOutStm << '0';
rOutStm << ',' << endl;
WriteTab( rOutStm, 4 );
if( bIsEnumSlot )
{
rOutStm << "&a" << rShellName.GetBuffer() << "Slots_Impl["
<< ByteString::CreateFromInt32(pLinkedSlot->GetListPos()).GetBuffer()
<< "] /*Offset Master*/, " << endl;
WriteTab( rOutStm, 4 );
rOutStm << "&a" << rShellName.GetBuffer() << "Slots_Impl["
<< ByteString::CreateFromInt32(pNextSlot->GetListPos()).GetBuffer()
<< "] /*Offset Next*/, " << endl;
WriteTab( rOutStm, 4 );
// SlotId
if( GetSlotId().Len() )
rOutStm << pLinkedSlot->GetSlotId().GetBuffer();
else
rOutStm << '0';
rOutStm << ',';
rOutStm << pEnumValue->GetName().GetBuffer();
}
else
{
// Den n"achsten Slot suchen, der die gleiche StateMethod hat wie ich
// Die SlotList ist auf den aktuellen Slot geseekt
SvSlotElement * pEle = rSlotList.Next();
pNextSlot = pEle ? &pEle->xSlot : NULL;
while ( pNextSlot )
{
if ( !pNextSlot->pNextSlot &&
pNextSlot->GetStateMethod() == GetStateMethod() )
break;
pEle = rSlotList.Next();
pNextSlot = pEle ? &pEle->xSlot : NULL;
}
if ( !pNextSlot )
{
// Es gibt nach mir keinen Slot mehr, der die gleiche ExecMethode
// hat. Also suche ich den ersten Slot, der diese hatte (das
// k"onnte auch ich selbst sein)
pEle = rSlotList.First();
pNextSlot = pEle ? &pEle->xSlot : NULL;
while ( pNextSlot != this )
{
if ( !pNextSlot->pEnumValue &&
pNextSlot->GetStateMethod() == GetStateMethod() )
break;
pEle = rSlotList.Next();
pNextSlot = pEle ? &pEle->xSlot : NULL;
}
}
if ( !pLinkedSlot )
{
rOutStm << "0 ,";
}
else
{
rOutStm << "&a" << rShellName.GetBuffer() << "Slots_Impl["
<< ByteString::CreateFromInt32(pLinkedSlot->GetListPos()).GetBuffer()
<< "] /*Offset Linked*/, " << endl;
WriteTab( rOutStm, 4 );
}
rOutStm << "&a" << rShellName.GetBuffer() << "Slots_Impl["
<< ByteString::CreateFromInt32(pNextSlot->GetListPos()).GetBuffer()
<< "] /*Offset Next*/, " << endl;
WriteTab( rOutStm, 4 );
// ExecMethod schreiben, wenn nicht angegeben, standard Namen
if( GetExecMethod().Len() && GetExecMethod() != "NoExec")
rOutStm << "SFX_STUB_PTR(" << rShellName.GetBuffer() << ','
<< GetExecMethod().GetBuffer() << ')';
else
rOutStm << "SFX_STUB_PTR_EXEC_NONE";
rOutStm << ',';
// StateMethod schreiben, wenn nicht angegeben, standard Namen
if( GetStateMethod().Len() && GetStateMethod() != "NoState")
rOutStm << "SFX_STUB_PTR(" << rShellName.GetBuffer() << ','
<< GetStateMethod().GetBuffer() << ')';
else
rOutStm << "SFX_STUB_PTR_STATE_NONE";
}
rOutStm << ',' << endl;
WriteTab( rOutStm, 4 );
// Flags schreiben
if( GetHasCoreId() )
rOutStm << MakeSlotName( SvHash_HasCoreId() ).GetBuffer() << '|';
if( GetCachable() )
rOutStm << MakeSlotName( SvHash_Cachable() ).GetBuffer() << '|';
if( GetVolatile() )
rOutStm << MakeSlotName( SvHash_Volatile() ).GetBuffer() << '|';
if( GetToggle() )
rOutStm << MakeSlotName( SvHash_Toggle() ).GetBuffer() << '|';
if( GetAutoUpdate() )
rOutStm << MakeSlotName( SvHash_AutoUpdate() ).GetBuffer() << '|';
if( GetSynchron() )
rOutStm << MakeSlotName( SvHash_Synchron() ).GetBuffer() << '|';
if( GetAsynchron() )
rOutStm << MakeSlotName( SvHash_Asynchron() ).GetBuffer() << '|';
if( GetRecordPerItem() )
rOutStm << MakeSlotName( SvHash_RecordPerItem() ).GetBuffer() << '|';
if( GetRecordPerSet() )
rOutStm << MakeSlotName( SvHash_RecordPerSet() ).GetBuffer() << '|';
if( GetRecordManual() )
rOutStm << MakeSlotName( SvHash_RecordManual() ).GetBuffer() << '|';
if( GetNoRecord() )
rOutStm << MakeSlotName( SvHash_NoRecord() ).GetBuffer() << '|';
if( GetRecordAbsolute() )
rOutStm << MakeSlotName( SvHash_RecordAbsolute() ).GetBuffer() << '|';
if( GetHasDialog() )
rOutStm << MakeSlotName( SvHash_HasDialog() ).GetBuffer() << '|';
if( GetMenuConfig() )
rOutStm << MakeSlotName( SvHash_MenuConfig() ).GetBuffer() << '|';
if( GetToolBoxConfig() )
rOutStm << MakeSlotName( SvHash_ToolBoxConfig() ).GetBuffer() << '|';
if( GetStatusBarConfig() )
rOutStm << MakeSlotName( SvHash_StatusBarConfig() ).GetBuffer() << '|';
if( GetAccelConfig() )
rOutStm << MakeSlotName( SvHash_AccelConfig() ).GetBuffer() << '|';
if( GetFastCall() )
rOutStm << MakeSlotName( SvHash_FastCall() ).GetBuffer() << '|';
if( GetContainer() )
rOutStm << MakeSlotName( SvHash_Container() ).GetBuffer() << '|';
if ( GetReadOnlyDoc() )
rOutStm << MakeSlotName( SvHash_ReadOnlyDoc() ).GetBuffer() << '|';
if( GetImageRotation() )
rOutStm << MakeSlotName( SvHash_ImageRotation() ).GetBuffer() << '|';
if( GetImageReflection() )
rOutStm << MakeSlotName( SvHash_ImageReflection() ).GetBuffer() << '|';
rOutStm << '0';
rOutStm << ',' << endl;
WriteTab( rOutStm, 4 );
if ( !GetDisableFlags().Len() )
rOutStm << "0";
else
rOutStm << GetDisableFlags().GetBuffer();
// Attribut Typ schreiben
if( !bIsEnumSlot )
{
rOutStm << ',' << endl;
WriteTab( rOutStm, 4 );
SvMetaType * pT = GetSlotType();
if( !pT )
{
if( !IsVariable() )
pT = rBase.FindType( "SfxVoidItem" );
else
pT = GetType();
}
if( pT )
{
rOutStm << pT->GetName().GetBuffer();
if( !rBase.FindType( pT, rBase.aUsedTypes ) )
rBase.aUsedTypes.Append( pT );
}
else
rOutStm << "SfxVoidItem not defined";
}
else
{
SvMetaType *pT = rBase.FindType( "SfxBoolItem" );
if ( pT && !rBase.FindType( pT, rBase.aUsedTypes ) )
rBase.aUsedTypes.Append( pT );
}
if( !bIsEnumSlot )
{
rOutStm << ',' << endl;
WriteTab( rOutStm, 4 );
rOutStm << ByteString::CreateFromInt32( nCount ).GetBuffer() << "/*Offset*/, ";
if( IsMethod() )
{
SvMetaAttribute * pMethod = GetMethod();
SvMetaType * pType;
if( pMethod )
pType = pMethod->GetType();
else
pType = GetType();
sal_uLong nSCount = pType->GetAttrCount();
rOutStm << ByteString::CreateFromInt32( nSCount ).GetBuffer() << "/*Count*/";
}
else
rOutStm << '0';
// Name f"urs Recording
if ( GetExport() )
{
rOutStm << ",\"";
if( rPrefix.Len() )
rOutStm << rPrefix.GetBuffer();
rOutStm << '.';
if ( !IsVariable() || !GetType() ||
GetType()->GetBaseType()->GetType() != TYPE_STRUCT )
rOutStm << GetMangleName( sal_False ).GetBuffer();
rOutStm << "\",";
}
else
rOutStm << ", 0, ";
// Method/Property Flags
if( IsMethod() )
rOutStm << "SFX_SLOT_METHOD|";
if( IsVariable() )
{
rOutStm << "SFX_SLOT_PROPGET|";
if( !GetReadonly() )
rOutStm << "SFX_SLOT_PROPSET|";
}
rOutStm << '0';
}
// if ( GetUnoName().Len() )
{
rOutStm << ",\"";
rOutStm << GetMangleName( sal_False ).GetBuffer();
//rOutStm << GetUnoName().GetBuffer();
rOutStm << "\"";
}
// else
// rOutStm << ", 0";
rOutStm << " )," << endl;
}
sal_uInt16 SvMetaSlot::WriteSlotParamArray( SvIdlDataBase & rBase, SvStream & rOutStm )
{
if ( !GetExport() && !GetHidden() )
return 0;
SvMetaAttribute * pMethod = GetMethod();
if( IsMethod() )
{
SvMetaType * pType;
if( pMethod )
pType = pMethod->GetType();
else
pType = GetType();
if( !rBase.FindType( pType, rBase.aUsedTypes ) )
rBase.aUsedTypes.Append( pType );
const SvMetaAttributeMemberList & rList =
pType->GetAttrList();
for( sal_uLong n = 0; n < rList.Count(); n++ )
{
SvMetaAttribute * pPar = rList.GetObject( n );
SvMetaType * pPType = pPar->GetType();
WriteTab( rOutStm, 1 );
rOutStm << "SFX_ARGUMENT("
<< pPar->GetSlotId().GetBuffer() << ',' // SlodId
// Parameter Name
<< "\"" << pPar->GetName().GetBuffer() << "\","
// Item Name
<< pPType->GetName().GetBuffer() << ")," << endl;
if( !rBase.FindType( pPType, rBase.aUsedTypes ) )
rBase.aUsedTypes.Append( pPType );
}
return (sal_uInt16)rList.Count();
}
return 0;
}
sal_uInt16 SvMetaSlot::WriteSlotMap( const ByteString & rShellName, sal_uInt16 nCount,
SvSlotElementList& rSlotList,
const ByteString & rPrefix,
SvIdlDataBase & rBase,
SvStream & rOutStm )
{
// SlotId, wenn nicht angegeben, aus Namen generieren
ByteString slotId = GetSlotId();
sal_uInt16 nSCount = 0;
if( IsMethod() )
{
SvMetaType * pType;
SvMetaAttribute * pMethod = GetMethod();
if( pMethod )
pType = pMethod->GetType();
else
pType = GetType();
nSCount = (sal_uInt16)pType->GetAttrCount();
}
WriteSlot( rShellName, nCount, slotId, rSlotList, rPrefix, rBase, rOutStm );
return nSCount;
}
/*************************************************************************
|* SvMetaSlot::WriteSrc()
*************************************************************************/
void SvMetaSlot::WriteSrc( SvIdlDataBase & rBase, SvStream & rOutStm,
Table * pTable )
{
if (!GetToolBoxConfig() && !GetAccelConfig() && !GetMenuConfig() && !GetStatusBarConfig() )
return;
sal_uLong nSId = GetSlotId().GetValue();
if( !pTable->IsKeyValid( nSId ) )
{
pTable->Insert( nSId, this );
rOutStm << "SfxSlotInfo " << ByteString::CreateFromInt32( nSId ).GetBuffer()
<< endl << '{' << endl;
WriteTab( rOutStm, 1 );
ByteString aStr = GetConfigName();
if( !aStr.Len() )
aStr = GetName();
rOutStm << "SlotName = \"" << aStr.GetBuffer() << "\";" << endl;
aStr = GetHelpText();
if( aStr.Len() )
{
WriteTab( rOutStm, 1 );
rOutStm << "HelpText = \"" << aStr.GetBuffer() << "\";" << endl;
}
rOutStm << "};" << endl;
}
SvMetaTypeEnum * pEnum = PTR_CAST( SvMetaTypeEnum, GetType() );
if( GetPseudoSlots() && pEnum )
{
for( sal_uLong n = 0; n < pEnum->Count(); n++ )
{
ByteString aValName = pEnum->GetObject( n )->GetName();
ByteString aSId( GetSlotId() );
if( GetPseudoPrefix().Len() )
aSId = GetPseudoPrefix();
aSId += '_';
aSId += aValName.Copy( pEnum->GetPrefix().Len() );
sal_uLong nSId2;
sal_Bool bIdOk = sal_False;
if( rBase.FindId( aSId, &nSId2 ) )
{
aSId = ByteString::CreateFromInt32( nSId2 );
bIdOk = sal_True;
}
// wenn Id nicht gefunden, immer schreiben
if( !bIdOk || !pTable->IsKeyValid( nSId2 ) )
{
pTable->Insert( nSId2, this );
rOutStm << "SfxSlotInfo " << aSId.GetBuffer()
<< endl << '{' << endl;
WriteTab( rOutStm, 1 );
rOutStm << "SlotName = \"" << aValName.GetBuffer() << "\";" << endl;
ByteString aStr = GetHelpText();
if( aStr.Len() )
{
WriteTab( rOutStm, 1 );
rOutStm << "HelpText = \"" << aStr.GetBuffer() << "\";" << endl;
}
rOutStm << "};" << endl;
}
}
}
}
void SvMetaSlot::WriteHelpId( SvIdlDataBase & rBase, SvStream & rOutStm,
Table * pTable )
{
sal_uLong nSId = GetSlotId().GetValue();
if( !pTable->IsKeyValid( nSId ) )
{
pTable->Insert( nSId, this );
rOutStm << "#define " << GetSlotId().GetBuffer() << '\t' << ByteString::CreateFromInt32( nSId ).GetBuffer() << endl;
}
SvMetaTypeEnum * pEnum = PTR_CAST( SvMetaTypeEnum, GetType() );
if( GetPseudoSlots() && pEnum )
{
for( sal_uLong n = 0; n < pEnum->Count(); n++ )
{
ByteString aValName = pEnum->GetObject( n )->GetName();
ByteString aSId( GetSlotId() );
if( GetPseudoPrefix().Len() )
aSId = GetPseudoPrefix();
aSId += '_';
aSId += aValName.Copy( pEnum->GetPrefix().Len() );
sal_uLong nSId2;
sal_Bool bIdOk = sal_False;
if( rBase.FindId( aSId, &nSId2 ) )
{
aSId = ByteString::CreateFromInt32( nSId2 );
bIdOk = sal_True;
}
// wenn Id nicht gefunden, immer schreiben
if( !bIdOk || !pTable->IsKeyValid( nSId2 ) )
{
pTable->Insert( nSId2, this );
rOutStm << "#define " << aSId.GetBuffer() << '\t'
<< ByteString::CreateFromInt32( nSId2 ).GetBuffer() << endl;
}
}
}
}
void WriteBool( sal_Bool bSet, SvStream& rStream )
{
if ( bSet )
rStream << "sal_True" << ',';
else
rStream << "sal_False" << ',';
}
void SvMetaSlot::WriteCSV( SvIdlDataBase& rBase, SvStream& rStrm )
{
rStrm << "PROJECT,";
rStrm << GetSlotId().GetBuffer() << ',';
rStrm << ByteString::CreateFromInt32( GetSlotId().GetValue() ).GetBuffer() << ',';
if ( GetPseudoPrefix().Len() )
rStrm << GetPseudoPrefix().GetBuffer() << ',';
else
rStrm << ',';
rStrm << GetGroupId().GetBuffer() << ',';
WriteBool( GetAccelConfig(), rStrm );
WriteBool( GetMenuConfig(), rStrm );
WriteBool( GetStatusBarConfig(), rStrm );
WriteBool( GetToolBoxConfig(), rStrm );
if ( GetSlotType() )
rStrm << GetSlotType()->GetName().GetBuffer() << ',';
else
rStrm << ',';
WriteBool( GetAutoUpdate(), rStrm );
if ( GetCachable() )
rStrm << "Cachable" << ',';
else
rStrm << "Volatile" << ',';
WriteBool( GetContainer(), rStrm );
WriteBool( GetFastCall(), rStrm );
WriteBool( GetHasCoreId(), rStrm );
WriteBool( GetHasDialog(), rStrm );
WriteBool( GetReadOnlyDoc(), rStrm );
WriteBool( GetImageRotation(), rStrm );
WriteBool( GetImageReflection(), rStrm );
rStrm << GetDisableFlags().GetBuffer() << ',';
if( GetSynchron() )
rStrm << "Synchron" << ',';
else
rStrm << "Asynchron" << ',';
WriteBool( GetToggle(), rStrm );
WriteBool( GetReadonly(), rStrm );
WriteBool( GetExport(), rStrm );
if( GetRecordPerItem() )
rStrm << "RecordPerItem" << ',';
else if ( GetNoRecord() )
rStrm << "NoRecord" << ',';
else if ( GetRecordManual() )
rStrm << "RecordManual" << ',';
else
rStrm << "RecordPerSet" << ',';
WriteBool( GetRecordAbsolute(), rStrm );
if ( GetType()->GetType() != TYPE_METHOD && GetMethod() )
{
rStrm << GetMethod()->GetType()->GetReturnType()->GetName().GetBuffer() << ',';
rStrm << GetMethod()->GetName().GetBuffer() << ',';
}
else
{
rStrm << ",,";
}
rStrm << GetType()->GetSvName().GetBuffer() << ',';
rStrm << GetName().GetBuffer() << ',';
if ( GetType()->GetType() == TYPE_METHOD || GetMethod() )
{
SvMetaAttributeMemberList *pList = &GetType()->GetAttrList();
if ( GetMethod() )
pList = &GetMethod()->GetType()->GetAttrList();
if( pList && pList->Count() )
{
rStrm << "\"(";
SvMetaAttribute* pAttr = pList->First();
while( pAttr )
{
pAttr->WriteCSV( rBase, rStrm );
pAttr = pList->Next();
if( pAttr )
rStrm << ',';
}
rStrm << ")\"";
}
else
rStrm << "()";
}
rStrm << endl;
}
#endif // IDL_COMPILER