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