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