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