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