1*f7c60c9cSAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*f7c60c9cSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*f7c60c9cSAndrew Rist * or more contributor license agreements. See the NOTICE file 5*f7c60c9cSAndrew Rist * distributed with this work for additional information 6*f7c60c9cSAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*f7c60c9cSAndrew Rist * to you under the Apache License, Version 2.0 (the 8*f7c60c9cSAndrew Rist * "License"); you may not use this file except in compliance 9*f7c60c9cSAndrew Rist * with the License. You may obtain a copy of the License at 10*f7c60c9cSAndrew Rist * 11*f7c60c9cSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12*f7c60c9cSAndrew Rist * 13*f7c60c9cSAndrew Rist * Unless required by applicable law or agreed to in writing, 14*f7c60c9cSAndrew Rist * software distributed under the License is distributed on an 15*f7c60c9cSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*f7c60c9cSAndrew Rist * KIND, either express or implied. See the License for the 17*f7c60c9cSAndrew Rist * specific language governing permissions and limitations 18*f7c60c9cSAndrew Rist * under the License. 19*f7c60c9cSAndrew Rist * 20*f7c60c9cSAndrew Rist *************************************************************/ 21*f7c60c9cSAndrew Rist 22*f7c60c9cSAndrew Rist 23cdf0e10cSrcweir #ifndef _RSCTOP_HXX 24cdf0e10cSrcweir #define _RSCTOP_HXX 25cdf0e10cSrcweir 26cdf0e10cSrcweir #include <rscerror.h> 27cdf0e10cSrcweir #include <rsctools.hxx> 28cdf0e10cSrcweir #include <rschash.hxx> 29cdf0e10cSrcweir #include <rscclobj.hxx> 30cdf0e10cSrcweir 31cdf0e10cSrcweir /****************** T Y P E S ********************************************/ 32cdf0e10cSrcweir typedef sal_uInt32 RSCVAR; 33cdf0e10cSrcweir #define VAR_POINTER 0x0001 34cdf0e10cSrcweir #define VAR_HIDDEN 0x0002 35cdf0e10cSrcweir #define VAR_NODATAINST 0x0004 36cdf0e10cSrcweir #define VAR_NORC 0x0008 37cdf0e10cSrcweir #define VAR_SVDYNAMIC 0x0010 38cdf0e10cSrcweir #define VAR_NOENUM 0x0020 39cdf0e10cSrcweir #define VAR_EXTENDABLE 0x0040 /* Auch die Ableitung einer Klasse kann angegeben werden */ 40cdf0e10cSrcweir 41cdf0e10cSrcweir /****************** C L A S S E S ****************************************/ 42cdf0e10cSrcweir /******************* R s c C l a s s *************************************/ 43cdf0e10cSrcweir class RscTop : public RefNode 44cdf0e10cSrcweir { 45cdf0e10cSrcweir RscTop * pSuperClass; 46cdf0e10cSrcweir RSCINST aDfltInst; 47cdf0e10cSrcweir sal_uInt32 nTypId; 48cdf0e10cSrcweir RscTop * pRefClass; 49cdf0e10cSrcweir 50cdf0e10cSrcweir protected: 51cdf0e10cSrcweir RscTop( Atom nId, sal_uInt32 nTypIdent, 52cdf0e10cSrcweir RscTop * pSuperCl = NULL ); 53cdf0e10cSrcweir 54cdf0e10cSrcweir public: 55cdf0e10cSrcweir ByteString aCallPar1; // Klassenaufruf ohne Typen bis ResId 56cdf0e10cSrcweir ByteString aCallPar2; // Klassenaufruf ohne Typen ab ResId 57cdf0e10cSrcweir ByteString aCallParType; // Klassenaufruf mit Typen 58cdf0e10cSrcweir SetSuperClass(RscTop * pClass)59cdf0e10cSrcweir void SetSuperClass( RscTop * pClass ) 60cdf0e10cSrcweir { 61cdf0e10cSrcweir pSuperClass = pClass; 62cdf0e10cSrcweir } GetSuperClass() const63cdf0e10cSrcweir RscTop* GetSuperClass() const 64cdf0e10cSrcweir { return pSuperClass; } 65cdf0e10cSrcweir // Gibt den Typidentifier zurueck GetTypId() const66cdf0e10cSrcweir sal_uInt32 GetTypId() const 67cdf0e10cSrcweir { return nTypId; }; 68cdf0e10cSrcweir // Gibt die Oberklasse zurueck 69cdf0e10cSrcweir sal_Bool InHierarchy( RscTop * pClass ); IsCodeWriteable() const70cdf0e10cSrcweir sal_Bool IsCodeWriteable() const 71cdf0e10cSrcweir { 72cdf0e10cSrcweir return( 0 != aCallParType.Len() ); 73cdf0e10cSrcweir } 74cdf0e10cSrcweir void SetCallPar( const ByteString & rPar1, const ByteString & rPar2, 75cdf0e10cSrcweir const ByteString & rParType ); SetRefClass(RscTop * pRef)76cdf0e10cSrcweir void SetRefClass( RscTop * pRef ) { pRefClass = pRef; } GetRefClass() const77cdf0e10cSrcweir RscTop* GetRefClass() const { return pRefClass; } 78cdf0e10cSrcweir virtual RSCCLASS_TYPE GetClassType() const = 0; 79cdf0e10cSrcweir RSCINST GetDefault(); 80cdf0e10cSrcweir 81cdf0e10cSrcweir // Vorbereitung auf den dtor aufruf 82cdf0e10cSrcweir // Da die Klassen gegenseitige Abhaengigkeiten 83cdf0e10cSrcweir // aufweisen koennen, kann man im dtor nicht davon 84cdf0e10cSrcweir // ausgehen, dass alle Klassenzeiger noch gueltig sind 85cdf0e10cSrcweir virtual void Pre_dtor(); 86cdf0e10cSrcweir 87cdf0e10cSrcweir virtual Atom GetConstant( sal_uInt32 ); 88cdf0e10cSrcweir 89cdf0e10cSrcweir virtual RscTop * GetTypeClass() const; 90cdf0e10cSrcweir 91cdf0e10cSrcweir // Gibt die Groesse der Klasse in Bytes 92cdf0e10cSrcweir virtual sal_uInt32 Size(); 93cdf0e10cSrcweir 94cdf0e10cSrcweir // Gibt die Referenz zurueck 95cdf0e10cSrcweir virtual ERRTYPE GetRef( const RSCINST & rInst, RscId * ); 96cdf0e10cSrcweir 97cdf0e10cSrcweir // Gibt die Referenz zurueck 98cdf0e10cSrcweir virtual ERRTYPE SetRef( const RSCINST & rInst, const RscId & rRefId ); 99cdf0e10cSrcweir 100cdf0e10cSrcweir // Variable anlegen 101cdf0e10cSrcweir virtual ERRTYPE SetVariable( Atom nVarName, RscTop * pClass, 102cdf0e10cSrcweir RSCINST * pDflt = NULL, 103cdf0e10cSrcweir RSCVAR nVarType = 0, sal_uInt32 nMask = 0, 104cdf0e10cSrcweir Atom nDataBaseName = InvalidAtom ); 105cdf0e10cSrcweir 106cdf0e10cSrcweir // Zaehlt alle Variablen auf 107cdf0e10cSrcweir virtual void EnumVariables( void * pData, VarEnumCallbackProc ); 108cdf0e10cSrcweir 109cdf0e10cSrcweir // Liefert Instanz der Variablen zurueck 110cdf0e10cSrcweir // pData, pClass im return koennen NULL sein 111cdf0e10cSrcweir virtual RSCINST GetVariable( const RSCINST & rInst, Atom nVarName, 112cdf0e10cSrcweir const RSCINST & rInitInst, 113cdf0e10cSrcweir sal_Bool nInitDflt = sal_False, 114cdf0e10cSrcweir RscTop * pCreateClass = NULL ); 115cdf0e10cSrcweir virtual RSCINST GetCopyVar( const RSCINST & rInst, Atom nVarName ); 116cdf0e10cSrcweir 117cdf0e10cSrcweir virtual RSCINST GetTupelVar( const RSCINST & rInst, sal_uInt32 nPos, 118cdf0e10cSrcweir const RSCINST & rInitInst ); 119cdf0e10cSrcweir 120cdf0e10cSrcweir // Liefert Instanz aus einem Feld zurueck 121cdf0e10cSrcweir // pGetInst im return kann NULL sein 122cdf0e10cSrcweir virtual ERRTYPE GetElement( const RSCINST & rInst, const RscId & rEleName, 123cdf0e10cSrcweir RscTop *pCreateClass, const RSCINST & rCreateInst, 124cdf0e10cSrcweir RSCINST * pGetInst ); 125cdf0e10cSrcweir 126cdf0e10cSrcweir // Liefert Instanz aus einem Feld zurueck 127cdf0e10cSrcweir // pGetInst im return kann NULL sein 128cdf0e10cSrcweir virtual ERRTYPE GetValueEle( const RSCINST & rInst, sal_Int32 lValue, 129cdf0e10cSrcweir RscTop * pCreateClass, 130cdf0e10cSrcweir RSCINST * pGetInst ); 131cdf0e10cSrcweir 132cdf0e10cSrcweir // Liefert Instanz aus einem Feld zurueck 133cdf0e10cSrcweir // pGetInst im return kann NULL sein 134cdf0e10cSrcweir virtual ERRTYPE GetArrayEle( const RSCINST & rInst, Atom nId, 135cdf0e10cSrcweir RscTop * pCreateClass, 136cdf0e10cSrcweir RSCINST * pGetInst ); 137cdf0e10cSrcweir 138cdf0e10cSrcweir virtual RSCINST SearchEle( const RSCINST & rInst, const RscId & rEleName, 139cdf0e10cSrcweir RscTop * pClass ); 140cdf0e10cSrcweir 141cdf0e10cSrcweir // Liefert Instanz an der Position zurueck 142cdf0e10cSrcweir virtual RSCINST GetPosEle( const RSCINST & rInst, sal_uInt32 nPos ); 143cdf0e10cSrcweir 144cdf0e10cSrcweir // verschiebt eine Instanz 145cdf0e10cSrcweir virtual ERRTYPE MovePosEle( const RSCINST & rInst, sal_uInt32 nDestPos, 146cdf0e10cSrcweir sal_uInt32 nSourcePos ); 147cdf0e10cSrcweir 148cdf0e10cSrcweir // aendert RscId an Position 149cdf0e10cSrcweir virtual ERRTYPE SetPosRscId( const RSCINST & rInst, sal_uInt32 nPos, 150cdf0e10cSrcweir const RscId & rRscId); 151cdf0e10cSrcweir 152cdf0e10cSrcweir // Liefert Information ueber Instanz 153cdf0e10cSrcweir // an der Position zurueck 154cdf0e10cSrcweir virtual SUBINFO_STRUCT GetInfoEle( const RSCINST & rInst, sal_uInt32 nPos ); 155cdf0e10cSrcweir 156cdf0e10cSrcweir // Anzahl der Eintraege 157cdf0e10cSrcweir virtual sal_uInt32 GetCount( const RSCINST & rInst ); 158cdf0e10cSrcweir 159cdf0e10cSrcweir // Eine Zuweisung an eine Variable 160cdf0e10cSrcweir virtual ERRTYPE SetNumber( const RSCINST & rInst, sal_Int32 lValue ); 161cdf0e10cSrcweir 162cdf0e10cSrcweir // Eine Zuweisung an eine Variable 163cdf0e10cSrcweir virtual ERRTYPE SetBool( const RSCINST & rInst, sal_Bool bValue ); 164cdf0e10cSrcweir 165cdf0e10cSrcweir // Eine Zuweisung an eine Variable 166cdf0e10cSrcweir virtual ERRTYPE SetConst( const RSCINST & rInst, Atom nValueId, 167cdf0e10cSrcweir sal_Int32 nValue ); 168cdf0e10cSrcweir 169cdf0e10cSrcweir // Eine Zuweisung an eine Variable 170cdf0e10cSrcweir virtual ERRTYPE SetNotConst( const RSCINST & rInst, Atom nId ); 171cdf0e10cSrcweir 172cdf0e10cSrcweir virtual ERRTYPE SetString( const RSCINST & rInst, const char * pStr ); 173cdf0e10cSrcweir 174cdf0e10cSrcweir virtual ERRTYPE GetNumber( const RSCINST & rInst, sal_Int32 * pN ); 175cdf0e10cSrcweir 176cdf0e10cSrcweir virtual ERRTYPE GetBool( const RSCINST & rInst, sal_Bool * pB ); 177cdf0e10cSrcweir 178cdf0e10cSrcweir virtual ERRTYPE GetConst( const RSCINST & rInst, Atom * pH ); 179cdf0e10cSrcweir 180cdf0e10cSrcweir virtual ERRTYPE GetString( const RSCINST & rInst, char ** ppStr ); 181cdf0e10cSrcweir 182cdf0e10cSrcweir virtual RSCINST Create( RSCINST * pInst, 183cdf0e10cSrcweir const RSCINST & rDefInst, sal_Bool bOwnClass = sal_False ); 184cdf0e10cSrcweir 185cdf0e10cSrcweir // Instanz zerstoeren 186cdf0e10cSrcweir virtual void Destroy( const RSCINST & rInst ); 187cdf0e10cSrcweir 188cdf0e10cSrcweir // prueft auf konsistenz 189cdf0e10cSrcweir virtual sal_Bool IsConsistent( const RSCINST & rInst, 190cdf0e10cSrcweir RscInconsList * pList = NULL ); 191cdf0e10cSrcweir 192cdf0e10cSrcweir // Alles auf Default setzen 193cdf0e10cSrcweir virtual void SetToDefault( const RSCINST & rInst ); 194cdf0e10cSrcweir 195cdf0e10cSrcweir // Ist Eingabe = Default 196cdf0e10cSrcweir virtual sal_Bool IsDefault( const RSCINST & rInst ); 197cdf0e10cSrcweir 198cdf0e10cSrcweir // Gleiche Werte auf Default setzen 199cdf0e10cSrcweir virtual sal_Bool IsValueDefault( const RSCINST & rInst, CLASS_DATA pDef ); 200cdf0e10cSrcweir 201cdf0e10cSrcweir // Instanz auf Default setzen 202cdf0e10cSrcweir virtual void SetDefault( const RSCINST & rInst, Atom nVarId ); 203cdf0e10cSrcweir 204cdf0e10cSrcweir // Default zu einer Variablen holen 205cdf0e10cSrcweir virtual RSCINST GetDefault( Atom nVarId ); 206cdf0e10cSrcweir 207cdf0e10cSrcweir virtual void Delete( const RSCINST & rInst, RscTop * pClass, 208cdf0e10cSrcweir const RscId & rId ); 209cdf0e10cSrcweir 210cdf0e10cSrcweir virtual void DeletePos( const RSCINST & rInst, sal_uInt32 nPos ); 211cdf0e10cSrcweir 212cdf0e10cSrcweir // Schreibt den Kopf und das Ende einer Resource 213cdf0e10cSrcweir // Script Datei 214cdf0e10cSrcweir virtual void WriteSrcHeader( const RSCINST & rInst, FILE * fOutput, 215cdf0e10cSrcweir RscTypCont * pTC, sal_uInt32 nTab, 216cdf0e10cSrcweir const RscId & aId, const char * ); 217cdf0e10cSrcweir virtual void WriteSrc( const RSCINST & rInst, FILE * fOutput, 218cdf0e10cSrcweir RscTypCont * pTC, sal_uInt32 nTab,const char * ); 219cdf0e10cSrcweir virtual ERRTYPE WriteRcHeader( const RSCINST & rInst, RscWriteRc & aMem, 220cdf0e10cSrcweir RscTypCont * pTC, const RscId & aId, 221cdf0e10cSrcweir sal_uInt32 nDeep, sal_Bool bExtra ); 222cdf0e10cSrcweir virtual ERRTYPE WriteRc( const RSCINST & rInst, RscWriteRc & aMem, 223cdf0e10cSrcweir RscTypCont * pTC, sal_uInt32 nDeep, sal_Bool bExtra ); 224cdf0e10cSrcweir 225cdf0e10cSrcweir // Weiterleitung an Superklassen wird unterbunden 226cdf0e10cSrcweir virtual ERRTYPE WriteHxxHeader( const RSCINST & rInst, FILE * fOutput, 227cdf0e10cSrcweir RscTypCont * pTC, const RscId & rId ); 228cdf0e10cSrcweir virtual ERRTYPE WriteHxx( const RSCINST & rInst, FILE * fOutput, 229cdf0e10cSrcweir RscTypCont * pTC, const RscId &rId ); 230cdf0e10cSrcweir virtual ERRTYPE WriteCxxHeader( const RSCINST & rInst, FILE * fOutput, 231cdf0e10cSrcweir RscTypCont * pTC, const RscId &rId ); 232cdf0e10cSrcweir virtual ERRTYPE WriteCxx( const RSCINST & rInst, FILE * fOutput, 233cdf0e10cSrcweir RscTypCont * pTC, const RscId &rId ); 234cdf0e10cSrcweir 235cdf0e10cSrcweir void WriteSyntaxHeader( FILE * fOutput, RscTypCont * pTC ); 236cdf0e10cSrcweir virtual void WriteSyntax( FILE * fOutput, RscTypCont * pTC ); 237cdf0e10cSrcweir 238cdf0e10cSrcweir virtual void WriteRcAccess( FILE * fOutput, RscTypCont * pTC, 239cdf0e10cSrcweir const char * ); 240cdf0e10cSrcweir virtual void WriteRcCtor( FILE * fOutput, RscTypCont * pTC ); 241cdf0e10cSrcweir }; 242cdf0e10cSrcweir 243cdf0e10cSrcweir #endif //_RSCTOP_HXX 244