diff options
Diffstat (limited to 'idl/inc/basobj.hxx')
-rw-r--r-- | idl/inc/basobj.hxx | 294 |
1 files changed, 294 insertions, 0 deletions
diff --git a/idl/inc/basobj.hxx b/idl/inc/basobj.hxx new file mode 100644 index 000000000000..f6705dae8be6 --- /dev/null +++ b/idl/inc/basobj.hxx @@ -0,0 +1,294 @@ +/************************************************************************* + * + * 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. + * + ************************************************************************/ + +#ifndef _BASOBJ_HXX +#define _BASOBJ_HXX + +#include <tools/ref.hxx> +#include <bastype.hxx> +#include <tools/pstm.hxx> + +class SvTokenStream; +class SvMetaObject; +class SvAttributeList; +class SvIdlDataBase; + +typedef SvMetaObject * (*CreateMetaObjectType)(); +#define IDL_WRITE_COMPILER 0x8000 +#define IDL_WRITE_BROWSER 0x4000 +#define IDL_WRITE_CALLING 0x2000 +#define IDL_WRITE_MASK 0xE000 + +#define C_PREF "C_" + +enum WriteType +{ + WRITE_IDL, WRITE_ODL, WRITE_SLOTMAP, WRITE_C_HEADER, WRITE_C_SOURCE, + WRITE_CXX_HEADER, WRITE_CXX_SOURCE, WRITE_DOCU +}; + +enum +{ + WA_METHOD = 0x1, WA_VARIABLE = 0x2, WA_ARGUMENT = 0x4, + WA_STRUCT = 0x8, WA_READONLY = 0x10 +}; +typedef int WriteAttribute; + +/******************** Meta Factory **************************************/ +#ifdef IDL_COMPILER + +#define PRV_SV_DECL_META_FACTORY( Class ) \ + static SvAttributeList * pAttribList; \ + static SvMetaObject * Create() { return new Class; } \ + static const char * GetClassName() { return #Class; } + +#define PRV_SV_IMPL_META_FACTORY( Class ) \ + SvAttributeList * Class::pAttribList = NULL; + +#else + +#define PRV_SV_DECL_META_FACTORY( Class ) + +#define PRV_SV_IMPL_META_FACTORY( Class ) + +#endif // IDL_COMPILER + +#define SV_DECL_META_FACTORY( Class, CLASS_ID ) \ + SV_DECL_PERSIST( Class, CLASS_ID ) \ + PRV_SV_DECL_META_FACTORY( Class ) + + +#define SV_DECL_META_FACTORY1( Class, Super1, CLASS_ID ) \ + SV_DECL_PERSIST1( Class, Super1, CLASS_ID ) \ + PRV_SV_DECL_META_FACTORY( Class ) + +#define SV_IMPL_META_FACTORY( Class ) \ + PRV_SV_IMPL_META_FACTORY( Class ) \ + SV_IMPL_PERSIST( Class ) + + +#define SV_IMPL_META_FACTORY1( Class, Super1 ) \ + PRV_SV_IMPL_META_FACTORY( Class ) \ + SV_IMPL_PERSIST1( Class, Super1 ) + + +/******************** class SvMetaObject ********************************/ +class SvMetaObject : public SvPersistBase +{ +public: + SV_DECL_META_FACTORY1( SvMetaObject, SvPersistBase, 14 ) + SvMetaObject(); + +#ifdef IDL_COMPILER + static void WriteTab( SvStream & rOutStm, USHORT nTab ); + static BOOL TestAndSeekSpaceOnly( SvStream &, ULONG nBegPos ); + static void Back2Delemitter( SvStream & ); + static void WriteStars( SvStream & ); + + virtual BOOL ReadSvIdl( SvIdlDataBase &, SvTokenStream & rInStm ); + virtual void WriteSvIdl( SvIdlDataBase & rBase, SvStream & rOutStm, USHORT nTab ); + + virtual void Write( SvIdlDataBase & rBase, SvStream & rOutStm, USHORT nTab, + WriteType, WriteAttribute = 0 ); + + virtual void WriteCxx( SvIdlDataBase & rBase, SvStream & rOutStm, USHORT nTab ); + virtual void WriteHxx( SvIdlDataBase & rBase, SvStream & rOutStm, USHORT nTab ); +#endif +}; +SV_DECL_IMPL_REF(SvMetaObject) +//SV_DECL_IMPL_PERSIST_LIST(SvMetaObject,SvMetaObject *) +SV_DECL_PERSIST_LIST(SvMetaObject,SvMetaObject *) +SV_IMPL_PERSIST_LIST(SvMetaObject,SvMetaObject *) + + +class SvMetaObjectMemberStack +{ + SvMetaObjectMemberList aList; +public: + SvMetaObjectMemberStack() {;} + + void Push( SvMetaObject * pObj ) + { aList.Insert( pObj, LIST_APPEND ); } + SvMetaObject * Pop() { return aList.Remove( aList.Count() -1 ); } + SvMetaObject * Top() const { return aList.GetObject( aList.Count() -1 ); } + void Clear() { aList.Clear(); } + ULONG Count() const { return aList.Count(); } + + SvMetaObject * Get( TypeId nType ) + { + SvMetaObject * pObj = aList.Last(); + while( pObj ) + { + if( pObj->IsA( nType ) ) + return pObj; + pObj = aList.Prev(); + } + return NULL; + } +}; + +/******************** class SvMetaName **********************************/ +class SvMetaName : public SvMetaObject +{ + SvString aName; + SvHelpContext aHelpContext; + SvHelpText aHelpText; + SvString aConfigName; + SvString aDescription; + +protected: +#ifdef IDL_COMPILER + virtual BOOL ReadNameSvIdl( SvIdlDataBase &, SvTokenStream & rInStm ); + void DoReadContextSvIdl( SvIdlDataBase &, SvTokenStream & rInStm, + char c = '\0' ); + virtual void ReadContextSvIdl( SvIdlDataBase &, SvTokenStream & rInStm ); + virtual void WriteContextSvIdl( SvIdlDataBase & rBase, + SvStream & rOutStm, USHORT nTab ); + virtual void ReadAttributesSvIdl( SvIdlDataBase & rBase, + SvTokenStream & rInStm ); + virtual void WriteAttributesSvIdl( SvIdlDataBase & rBase, + SvStream & rOutStm, USHORT nTab ); + virtual void WriteAttributes( SvIdlDataBase & rBase, SvStream & rOutStm, USHORT nTab, + WriteType, WriteAttribute = 0); + virtual void WriteContext( SvIdlDataBase & rBase, SvStream & rOutStm, USHORT nTab, + WriteType, WriteAttribute = 0); +#endif +public: + SV_DECL_META_FACTORY1( SvMetaName, SvMetaObject, 15 ) + SvMetaName(); + + virtual BOOL SetName( const ByteString & rName, SvIdlDataBase * = NULL ); + void SetDescription( const ByteString& rText ) + { aDescription = rText; } + const SvHelpContext& GetHelpContext() const { return aHelpContext; } + virtual const SvString & GetName() const { return aName; } + virtual const SvString & GetHelpText() const { return aHelpText; } + virtual const SvString & GetConfigName() const{ return aConfigName; } + virtual const SvString& GetDescription() const{ return aDescription; } + +#ifdef IDL_COMPILER + virtual BOOL Test( SvIdlDataBase &, SvTokenStream & rInStm ); + virtual BOOL ReadSvIdl( SvIdlDataBase &, SvTokenStream & rInStm ); + virtual void WriteSvIdl( SvIdlDataBase & rBase, SvStream & rOutStm, USHORT nTab ); + virtual void Write( SvIdlDataBase & rBase, SvStream & rOutStm, USHORT nTab, + WriteType, WriteAttribute = 0); + void WriteDescription( SvStream& rOutStm ); +#endif +}; +SV_DECL_IMPL_REF(SvMetaName) +SV_DECL_IMPL_PERSIST_LIST(SvMetaName,SvMetaName *) + + +/******************** class SvMetaReference *****************************/ +SV_DECL_REF(SvMetaReference) +class SvMetaReference : public SvMetaName +{ +protected: + SvMetaReferenceRef aRef; +public: + SV_DECL_META_FACTORY1( SvMetaReference, SvMetaName, 17 ) + SvMetaReference(); + + const SvString & GetName() const + { + return ( !aRef.Is() + || SvMetaName::GetName().Len() ) + ? SvMetaName::GetName() + : aRef->GetName(); + } + + const SvString & GetHelpText() const + { + return ( !aRef.Is() + || SvMetaName::GetHelpText().Len() ) + ? SvMetaName::GetHelpText() + : aRef->GetHelpText(); + } + + const SvString & GetConfigName() const + { + return ( !aRef.Is() + || SvMetaName::GetConfigName().Len() ) + ? SvMetaName::GetConfigName() + : aRef->GetConfigName(); + } + + const SvString & GetDescription() const + { + return ( !aRef.Is() + || SvMetaName::GetDescription().Len() ) + ? SvMetaName::GetDescription() + : aRef->GetDescription(); + } + SvMetaReference * GetRef() const { return aRef; } + void SetRef( SvMetaReference * pRef ) + { aRef = pRef; } +}; +SV_IMPL_REF(SvMetaReference) +SV_DECL_IMPL_PERSIST_LIST(SvMetaReference,SvMetaReference *) + + +/******************** class SvMetaExtern *********************************/ +class SvMetaModule; +class SvMetaExtern : public SvMetaReference +{ + SvMetaModule * pModule; // in welchem Modul enthalten + + SvUUId aUUId; + SvVersion aVersion; + BOOL bReadUUId; + BOOL bReadVersion; +public: + SV_DECL_META_FACTORY1( SvMetaExtern, SvMetaName, 16 ) + SvMetaExtern(); + + SvMetaModule * GetModule() const; + + const SvGlobalName &GetUUId() const; + const SvVersion & GetVersion() const { return aVersion; } +#ifdef IDL_COMPILER + void SetModule( SvIdlDataBase & rBase ); + virtual BOOL ReadSvIdl( SvIdlDataBase &, SvTokenStream & rInStm ); + virtual void WriteSvIdl( SvIdlDataBase & rBase, SvStream & rOutStm, USHORT nTab ); + + virtual void Write( SvIdlDataBase & rBase, SvStream & rOutStm, USHORT nTab, + WriteType, WriteAttribute = 0); +protected: + virtual void ReadAttributesSvIdl( SvIdlDataBase &, SvTokenStream & rInStm ); + virtual void WriteAttributesSvIdl( SvIdlDataBase & rBase, + SvStream & rOutStm, USHORT nTab ); + virtual void WriteAttributes( SvIdlDataBase & rBase, SvStream & rOutStm, USHORT nTab, + WriteType, WriteAttribute = 0); +#endif +}; +SV_DECL_IMPL_REF(SvMetaExtern) +SV_DECL_IMPL_PERSIST_LIST(SvMetaExtern,SvMetaExtern *) + + +#endif // _BASOBJ_HXX + + |