1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
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/.
9 * This file incorporates work covered by the following license notice:
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 .
19 #ifndef INCLUDED_RSC_INC_RSCTOP_HXX
20 #define INCLUDED_RSC_INC_RSCTOP_HXX
23 #include <rsctools.hxx>
24 #include <rschash.hxx>
25 #include <rscclobj.hxx>
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 */
36 class RscTop
: public RefNode
44 RscTop( Atom nId
, sal_uInt32 nTypIdent
,
45 RscTop
* pSuperCl
= NULL
);
48 OString aCallPar1
; // Klassenaufruf ohne Typen bis ResId
49 OString aCallPar2
; // Klassenaufruf ohne Typen ab ResId
50 OString aCallParType
; // Klassenaufruf mit Typen
52 void SetSuperClass( RscTop
* pClass
)
56 RscTop
* GetSuperClass() const
57 { return pSuperClass
; }
58 // Gibt den Typidentifier zurueck
59 sal_uInt32
GetTypId() const
61 // Gibt die Oberklasse zurueck
62 bool InHierarchy( RscTop
* pClass
);
63 bool IsCodeWriteable() const
65 return( 0 != aCallParType
.getLength() );
67 void SetCallPar( const OString
& rPar1
, const OString
& rPar2
,
68 const OString
& rParType
);
69 void SetRefClass( RscTop
* pRef
) { pRefClass
= pRef
; }
70 RscTop
* GetRefClass() const { return pRefClass
; }
71 virtual RSCCLASS_TYPE
GetClassType() const = 0;
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();
80 virtual Atom
GetConstant( sal_uInt32
);
82 virtual RscTop
* GetTypeClass() const;
84 // Gibt die Groesse der Klasse in Bytes
85 virtual sal_uInt32
Size();
87 // Gibt die Referenz zurueck
88 virtual ERRTYPE
GetRef( const RSCINST
& rInst
, RscId
* );
90 // Gibt die Referenz zurueck
91 virtual ERRTYPE
SetRef( const RSCINST
& rInst
, const RscId
& rRefId
);
94 virtual ERRTYPE
SetVariable( Atom nVarName
, RscTop
* pClass
,
95 RSCINST
* pDflt
= NULL
,
96 RSCVAR nVarType
= 0, sal_uInt32 nMask
= 0,
97 Atom nDataBaseName
= InvalidAtom
);
99 // Zaehlt alle Variablen auf
100 virtual void EnumVariables( void * pData
, VarEnumCallbackProc
);
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
);
110 virtual RSCINST
GetTupelVar( const RSCINST
& rInst
, sal_uInt32 nPos
,
111 const RSCINST
& rInitInst
);
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
);
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
);
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
);
131 virtual RSCINST
SearchEle( const RSCINST
& rInst
, const RscId
& rEleName
,
134 // Liefert Instanz an der Position zurueck
135 virtual RSCINST
GetPosEle( const RSCINST
& rInst
, sal_uInt32 nPos
);
137 // verschiebt eine Instanz
138 virtual ERRTYPE
MovePosEle( const RSCINST
& rInst
, sal_uInt32 nDestPos
,
139 sal_uInt32 nSourcePos
);
141 // aendert RscId an Position
142 virtual ERRTYPE
SetPosRscId( const RSCINST
& rInst
, sal_uInt32 nPos
,
143 const RscId
& rRscId
);
145 // Liefert Information ueber Instanz
146 // an der Position zurueck
147 virtual SUBINFO_STRUCT
GetInfoEle( const RSCINST
& rInst
, sal_uInt32 nPos
);
149 // Anzahl der Eintraege
150 virtual sal_uInt32
GetCount( const RSCINST
& rInst
);
152 // Eine Zuweisung an eine Variable
153 virtual ERRTYPE
SetNumber( const RSCINST
& rInst
, sal_Int32 lValue
);
155 // Eine Zuweisung an eine Variable
156 virtual ERRTYPE
SetBool( const RSCINST
& rInst
, bool bValue
);
158 // Eine Zuweisung an eine Variable
159 virtual ERRTYPE
SetConst( const RSCINST
& rInst
, Atom nValueId
,
162 // Eine Zuweisung an eine Variable
163 virtual ERRTYPE
SetNotConst( const RSCINST
& rInst
, Atom nId
);
165 virtual ERRTYPE
SetString( const RSCINST
& rInst
, const char * pStr
);
167 virtual ERRTYPE
GetNumber( const RSCINST
& rInst
, sal_Int32
* pN
);
169 virtual ERRTYPE
GetBool( const RSCINST
& rInst
, bool * pB
);
171 virtual ERRTYPE
GetConst( const RSCINST
& rInst
, Atom
* pH
);
173 virtual ERRTYPE
GetString( const RSCINST
& rInst
, char ** ppStr
);
175 virtual RSCINST
Create( RSCINST
* pInst
,
176 const RSCINST
& rDefInst
, bool bOwnClass
= false );
178 // Instanz zerstoeren
179 virtual void Destroy( const RSCINST
& rInst
);
181 // prueft auf konsistenz
182 virtual bool IsConsistent( const RSCINST
& rInst
);
184 // Alles auf Default setzen
185 virtual void SetToDefault( const RSCINST
& rInst
);
187 // Ist Eingabe = Default
188 virtual bool IsDefault( const RSCINST
& rInst
);
190 // Gleiche Werte auf Default setzen
191 virtual bool IsValueDefault( const RSCINST
& rInst
, CLASS_DATA pDef
);
193 // Instanz auf Default setzen
194 virtual void SetDefault( const RSCINST
& rInst
, Atom nVarId
);
196 // Default zu einer Variablen holen
197 virtual RSCINST
GetDefault( Atom nVarId
);
199 virtual void Delete( const RSCINST
& rInst
, RscTop
* pClass
,
202 virtual void DeletePos( const RSCINST
& rInst
, sal_uInt32 nPos
);
204 // Schreibt den Kopf und das Ende einer Resource
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
);
218 #endif // INCLUDED_RSC_INC_RSCTOP_HXX
220 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */