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 : typedef sal_uInt32 RSCVAR;
28 : #define VAR_POINTER 0x0001
29 : #define VAR_HIDDEN 0x0002
30 : #define VAR_NODATAINST 0x0004
31 : #define VAR_NORC 0x0008
32 : #define VAR_SVDYNAMIC 0x0010
33 : #define VAR_NOENUM 0x0020
34 : #define VAR_EXTENDABLE 0x0040 /* Auch die Ableitung einer Klasse kann angegeben werden */
35 :
36 0 : class RscTop : public RefNode
37 : {
38 : RscTop * pSuperClass;
39 : RSCINST aDfltInst;
40 : sal_uInt32 nTypId;
41 : RscTop * pRefClass;
42 :
43 : protected:
44 : RscTop( Atom nId, sal_uInt32 nTypIdent,
45 : RscTop * pSuperCl = NULL );
46 :
47 : public:
48 : OString aCallPar1; // Klassenaufruf ohne Typen bis ResId
49 : OString aCallPar2; // Klassenaufruf ohne Typen ab ResId
50 : OString aCallParType; // Klassenaufruf mit Typen
51 :
52 : void SetSuperClass( RscTop * pClass )
53 : {
54 : pSuperClass = pClass;
55 : }
56 0 : RscTop* GetSuperClass() const
57 0 : { return pSuperClass; }
58 : // Gibt den Typidentifier zurueck
59 0 : sal_uInt32 GetTypId() const
60 0 : { return nTypId; };
61 : // Gibt die Oberklasse zurueck
62 : bool InHierarchy( RscTop * pClass );
63 : bool IsCodeWriteable() const
64 : {
65 : return( 0 != aCallParType.getLength() );
66 : }
67 : void SetCallPar( const OString& rPar1, const OString& rPar2,
68 : const OString& rParType );
69 : void SetRefClass( RscTop * pRef ) { pRefClass = pRef; }
70 0 : RscTop* GetRefClass() const { return pRefClass; }
71 : virtual RSCCLASS_TYPE GetClassType() const = 0;
72 : RSCINST GetDefault();
73 :
74 : // Vorbereitung auf den dtor aufruf
75 : // Da die Klassen gegenseitige Abhaengigkeiten
76 : // aufweisen koennen, kann man im dtor nicht davon
77 : // ausgehen, dass alle Klassenzeiger noch gueltig sind
78 : virtual void Pre_dtor();
79 :
80 : virtual Atom GetConstant( sal_uInt32 );
81 :
82 : virtual RscTop* GetTypeClass() const;
83 :
84 : // Gibt die Groesse der Klasse in Bytes
85 : virtual sal_uInt32 Size();
86 :
87 : // Gibt die Referenz zurueck
88 : virtual ERRTYPE GetRef( const RSCINST & rInst, RscId * );
89 :
90 : // Gibt die Referenz zurueck
91 : virtual ERRTYPE SetRef( const RSCINST & rInst, const RscId & rRefId );
92 :
93 : // Variable anlegen
94 : virtual ERRTYPE SetVariable( Atom nVarName, RscTop * pClass,
95 : RSCINST * pDflt = NULL,
96 : RSCVAR nVarType = 0, sal_uInt32 nMask = 0,
97 : Atom nDataBaseName = InvalidAtom );
98 :
99 : // Zaehlt alle Variablen auf
100 : virtual void EnumVariables( void * pData, VarEnumCallbackProc );
101 :
102 : // Liefert Instanz der Variablen zurueck
103 : // pData, pClass im return koennen NULL sein
104 : virtual RSCINST GetVariable( const RSCINST & rInst, Atom nVarName,
105 : const RSCINST & rInitInst,
106 : bool nInitDflt = false,
107 : RscTop * pCreateClass = NULL );
108 : virtual RSCINST GetCopyVar( const RSCINST & rInst, Atom nVarName );
109 :
110 : virtual RSCINST GetTupelVar( const RSCINST & rInst, sal_uInt32 nPos,
111 : const RSCINST & rInitInst );
112 :
113 : // Liefert Instanz aus einem Feld zurueck
114 : // pGetInst im return kann NULL sein
115 : virtual ERRTYPE GetElement( const RSCINST & rInst, const RscId & rEleName,
116 : RscTop *pCreateClass, const RSCINST & rCreateInst,
117 : RSCINST * pGetInst );
118 :
119 : // Liefert Instanz aus einem Feld zurueck
120 : // pGetInst im return kann NULL sein
121 : virtual ERRTYPE GetValueEle( const RSCINST & rInst, sal_Int32 lValue,
122 : RscTop * pCreateClass,
123 : RSCINST * pGetInst );
124 :
125 : // Liefert Instanz aus einem Feld zurueck
126 : // pGetInst im return kann NULL sein
127 : virtual ERRTYPE GetArrayEle( const RSCINST & rInst, Atom nId,
128 : RscTop * pCreateClass,
129 : RSCINST * pGetInst );
130 :
131 : virtual RSCINST SearchEle( const RSCINST & rInst, const RscId & rEleName,
132 : RscTop * pClass );
133 :
134 : // Liefert Instanz an der Position zurueck
135 : virtual RSCINST GetPosEle( const RSCINST & rInst, sal_uInt32 nPos );
136 :
137 : // verschiebt eine Instanz
138 : virtual ERRTYPE MovePosEle( const RSCINST & rInst, sal_uInt32 nDestPos,
139 : sal_uInt32 nSourcePos );
140 :
141 : // aendert RscId an Position
142 : virtual ERRTYPE SetPosRscId( const RSCINST & rInst, sal_uInt32 nPos,
143 : const RscId & rRscId);
144 :
145 : // Liefert Information ueber Instanz
146 : // an der Position zurueck
147 : virtual SUBINFO_STRUCT GetInfoEle( const RSCINST & rInst, sal_uInt32 nPos );
148 :
149 : // Anzahl der Eintraege
150 : virtual sal_uInt32 GetCount( const RSCINST & rInst );
151 :
152 : // Eine Zuweisung an eine Variable
153 : virtual ERRTYPE SetNumber( const RSCINST & rInst, sal_Int32 lValue );
154 :
155 : // Eine Zuweisung an eine Variable
156 : virtual ERRTYPE SetBool( const RSCINST & rInst, bool bValue );
157 :
158 : // Eine Zuweisung an eine Variable
159 : virtual ERRTYPE SetConst( const RSCINST & rInst, Atom nValueId,
160 : sal_Int32 nValue );
161 :
162 : // Eine Zuweisung an eine Variable
163 : virtual ERRTYPE SetNotConst( const RSCINST & rInst, Atom nId );
164 :
165 : virtual ERRTYPE SetString( const RSCINST & rInst, const char * pStr );
166 :
167 : virtual ERRTYPE GetNumber( const RSCINST & rInst, sal_Int32 * pN );
168 :
169 : virtual ERRTYPE GetBool( const RSCINST & rInst, bool * pB );
170 :
171 : virtual ERRTYPE GetConst( const RSCINST & rInst, Atom * pH );
172 :
173 : virtual ERRTYPE GetString( const RSCINST & rInst, char ** ppStr );
174 :
175 : virtual RSCINST Create( RSCINST * pInst,
176 : const RSCINST & rDefInst, bool bOwnClass = false );
177 :
178 : // Instanz zerstoeren
179 : virtual void Destroy( const RSCINST & rInst );
180 :
181 : // prueft auf konsistenz
182 : virtual bool IsConsistent( const RSCINST & rInst );
183 :
184 : // Alles auf Default setzen
185 : virtual void SetToDefault( const RSCINST & rInst );
186 :
187 : // Ist Eingabe = Default
188 : virtual bool IsDefault( const RSCINST & rInst );
189 :
190 : // Gleiche Werte auf Default setzen
191 : virtual bool IsValueDefault( const RSCINST & rInst, CLASS_DATA pDef );
192 :
193 : // Instanz auf Default setzen
194 : virtual void SetDefault( const RSCINST & rInst, Atom nVarId );
195 :
196 : // Default zu einer Variablen holen
197 : virtual RSCINST GetDefault( Atom nVarId );
198 :
199 : virtual void Delete( const RSCINST & rInst, RscTop * pClass,
200 : const RscId & rId );
201 :
202 : virtual void DeletePos( const RSCINST & rInst, sal_uInt32 nPos );
203 :
204 : // Schreibt den Kopf und das Ende einer Resource
205 : // Script Datei
206 : virtual void WriteSrcHeader( const RSCINST & rInst, FILE * fOutput,
207 : RscTypCont * pTC, sal_uInt32 nTab,
208 : const RscId & aId, const char * );
209 : virtual void WriteSrc( const RSCINST & rInst, FILE * fOutput,
210 : RscTypCont * pTC, sal_uInt32 nTab,const char * );
211 : virtual ERRTYPE WriteRcHeader( const RSCINST & rInst, RscWriteRc & aMem,
212 : RscTypCont * pTC, const RscId & aId,
213 : sal_uInt32 nDeep, bool bExtra );
214 : virtual ERRTYPE WriteRc( const RSCINST & rInst, RscWriteRc & aMem,
215 : RscTypCont * pTC, sal_uInt32 nDeep, bool bExtra );
216 : };
217 :
218 : #endif //_RSCTOP_HXX
219 :
220 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|