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 185879 : 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 65785 : RscTop* GetSuperClass() const
60 65785 : { return pSuperClass; }
61 : // Gibt den Typidentifier zurueck
62 39759 : sal_uInt32 GetTypId() const
63 39759 : { 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 10 : 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: */
|