xref: /trunk/main/rsc/inc/rsctop.hxx (revision f7c60c9c)
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