xref: /AOO41X/main/sw/inc/dbfld.hxx (revision 1d2dbeb0b7301723c6d13094e87a8714ef81a328)
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 SW_DBFLD_HXX
24 #define SW_DBFLD_HXX
25 
26 #include "swdllapi.h"
27 #include "fldbas.hxx"
28 #include "swdbdata.hxx"
29 
30 class SwDoc;
31 class SwTxtFld;
32 class SwFrm;
33 
34 /*--------------------------------------------------------------------
35     Beschreibung: Datenbankfeld
36  --------------------------------------------------------------------*/
37 
38 class SW_DLLPUBLIC SwDBFieldType : public SwValueFieldType
39 {
40     SwDBData    aDBData;        //
41     String      sName;          // only used in ::GetName() !
42     String      sColumn;
43     long        nRefCnt;
44 
45 public:
46 
47     SwDBFieldType(SwDoc* pDocPtr, const String& rColumnName, const SwDBData& rDBData);
48     ~SwDBFieldType();
49 
50     virtual const String& GetName() const;
51     virtual SwFieldType*  Copy() const;
52 
AddRef()53     inline void     AddRef() { nRefCnt++; }
54     void            ReleaseRef();
55 
GetColumnName() const56     const String&   GetColumnName() const {return sColumn;}
GetDBData() const57     const SwDBData& GetDBData() const {return aDBData;}
58 
59     virtual sal_Bool        QueryValue( com::sun::star::uno::Any& rVal, sal_uInt16 nWhich ) const;
60     virtual sal_Bool        PutValue( const com::sun::star::uno::Any& rVal, sal_uInt16 nWhich );
61 };
62 
63 /*--------------------------------------------------------------------
64     Beschreibung:
65     von SwFields abgeleitete Klassen. Sie ueberlagern die Expand-Funktion.
66     Der Inhalt wird entsprechend dem Format, soweit vorhanden, formatiert.
67  --------------------------------------------------------------------*/
68 
69 class SW_DLLPUBLIC SwDBField : public SwValueField
70 {
71     String  aContent;
72     String  sFieldCode; // contains Word's field code
73     sal_uInt16  nSubType;
74     sal_Bool    bIsInBodyTxt    : 1;
75     sal_Bool    bValidValue     : 1;
76     sal_Bool    bInitialized    : 1;
77 
78     virtual String      Expand() const;
79     virtual SwField*    Copy() const;
80 
81 public:
82     SwDBField(SwDBFieldType*, sal_uLong nFmt = 0);
83     virtual ~SwDBField();
84 
85     virtual SwFieldType*    ChgTyp( SwFieldType* );
86 
87     // Der aktuelle Text
88     inline  void        SetExpansion(const String& rStr);
89 
90     virtual sal_uInt16      GetSubType() const;
91     virtual void        SetSubType(sal_uInt16 nType);
92 
93     virtual String      GetFieldName() const;
94 
95     // fuer Berechnungen in Ausdruecken
96     void                ChgValue( double d, sal_Bool bVal );
97 
98     // Evaluierung ueber den DBMgr String rauspulen
99     void                Evaluate();
100 
101     // Evaluierung fuer Kopf und Fusszeilen
102     void                ChangeExpansion( const SwFrm*, const SwTxtFld* );
103     void                InitContent();
104     void                InitContent(const String& rExpansion);
105 
106     inline void         ChgBodyTxtFlag( sal_Bool bIsInBody );
107 
IsInitialized() const108     inline sal_Bool         IsInitialized() const   { return bInitialized; }
ClearInitialized()109     inline void         ClearInitialized()      { bInitialized = sal_False; }
SetInitialized()110     inline void         SetInitialized()        { bInitialized = sal_True; }
111 
112     // Name erfragen
113     virtual const String& GetPar1() const;
114 
115     // access to the command string
GetFieldCode() const116     const String&       GetFieldCode()   const
117                         { return sFieldCode;}
SetFieldCode(const String & rStr)118     void                SetFieldCode(const String& rStr)
119                         { sFieldCode = rStr; }
120 
121     // DBName
GetDBData() const122     inline const SwDBData&  GetDBData() const { return ((SwDBFieldType*)GetTyp())->GetDBData(); }
123     virtual sal_Bool        QueryValue( com::sun::star::uno::Any& rVal, sal_uInt16 nWhich ) const;
124     virtual sal_Bool        PutValue( const com::sun::star::uno::Any& rVal, sal_uInt16 nWhich );
125 };
126 
SetExpansion(const String & rStr)127 inline  void SwDBField::SetExpansion(const String& rStr)
128     { aContent = rStr; }
129 
130 // wird von UpdateExpFlds gesetzt (dort ist die Node-Position bekannt)
ChgBodyTxtFlag(sal_Bool bIsInBody)131 inline void SwDBField::ChgBodyTxtFlag( sal_Bool bIsInBody )
132     { bIsInBodyTxt = bIsInBody; }
133 
134 /*--------------------------------------------------------------------
135     Beschreibung: Basisklasse fuer alle weiteren Datenbankfelder
136  --------------------------------------------------------------------*/
137 
138 class SW_DLLPUBLIC SwDBNameInfField : public SwField
139 {
140     SwDBData    aDBData;
141     sal_uInt16      nSubType;
142 
143 protected:
GetDBData() const144     const SwDBData& GetDBData() const {return aDBData;}
GetDBData()145     SwDBData&       GetDBData() {return aDBData;}
146 
147     SwDBNameInfField(SwFieldType* pTyp, const SwDBData& rDBData, sal_uLong nFmt = 0);
148 
149 public:
150     // DBName
GetRealDBData()151     inline const SwDBData&  GetRealDBData() { return aDBData; }
152 
153     SwDBData                GetDBData(SwDoc* pDoc);
154     void                    SetDBData(const SwDBData& rDBData); // #111840#
155 
156     virtual String          GetFieldName() const;
157 
158     virtual sal_Bool            QueryValue( com::sun::star::uno::Any& rVal, sal_uInt16 nWhich ) const;
159     virtual sal_Bool            PutValue( const com::sun::star::uno::Any& rVal, sal_uInt16 nWhich );
160     virtual sal_uInt16          GetSubType() const;
161     virtual void            SetSubType(sal_uInt16 nType);
162 };
163 
164 
165 /*--------------------------------------------------------------------
166     Beschreibung: Datenbankfeld Naechster Satz
167  --------------------------------------------------------------------*/
168 
169 class SW_DLLPUBLIC SwDBNextSetFieldType : public SwFieldType
170 {
171 public:
172     SwDBNextSetFieldType();
173 
174     virtual SwFieldType*    Copy() const;
175 };
176 
177 
178 /*--------------------------------------------------------------------
179     Beschreibung: Naechsten Datensatz mit Bedingung
180  --------------------------------------------------------------------*/
181 
182 class SW_DLLPUBLIC SwDBNextSetField : public SwDBNameInfField
183 {
184     String  aCond;
185     sal_Bool    bCondValid;
186 
187 public:
188     SwDBNextSetField( SwDBNextSetFieldType*,
189                       const String& rCond, const String& rDummy, const SwDBData& rDBData);
190 
191     virtual String          Expand() const;
192     virtual SwField*        Copy() const;
193 
194     void                    Evaluate(SwDoc*);
195     inline void             SetCondValid(sal_Bool bCond);
196     inline sal_Bool             IsCondValid() const;
197 
198     // Condition
199     virtual const String&   GetPar1() const;
200     virtual void            SetPar1(const String& rStr);
201     virtual sal_Bool        QueryValue( com::sun::star::uno::Any& rVal, sal_uInt16 nWhich ) const;
202     virtual sal_Bool        PutValue( const com::sun::star::uno::Any& rVal, sal_uInt16 nWhich );
203 };
204 
IsCondValid() const205 inline sal_Bool SwDBNextSetField::IsCondValid() const
206     { return bCondValid; }
207 
SetCondValid(sal_Bool bCond)208 inline void SwDBNextSetField::SetCondValid(sal_Bool bCond)
209     { bCondValid = bCond; }
210 
211 /*--------------------------------------------------------------------
212     Beschreibung: Datenbankfeld Naechster Satz
213  --------------------------------------------------------------------*/
214 
215 class SwDBNumSetFieldType : public SwFieldType
216 {
217 public:
218     SwDBNumSetFieldType();
219 
220     virtual SwFieldType*    Copy() const;
221 };
222 
223 
224 /*--------------------------------------------------------------------
225     Beschreibung: Datensatz mit Nummer xxx
226                   Die Nummer steht in nFormat
227                   ! kleiner Missbrauch
228  --------------------------------------------------------------------*/
229 
230 class SwDBNumSetField : public SwDBNameInfField
231 {
232     String  aCond;
233     String  aPar2;
234     sal_Bool    bCondValid;
235 
236 public:
237     SwDBNumSetField(SwDBNumSetFieldType*, const String& rCond, const String& rDBNum, const SwDBData& rDBData);
238 
239     virtual String          Expand() const;
240     virtual SwField*        Copy() const;
241 
242     inline sal_Bool             IsCondValid() const;
243     inline void             SetCondValid(sal_Bool bCond);
244     void                    Evaluate(SwDoc*);
245 
246     // Condition
247     virtual const String&   GetPar1() const;
248     virtual void            SetPar1(const String& rStr);
249 
250     // Datensatznummer
251     virtual String          GetPar2()   const;
252     virtual void            SetPar2(const String& rStr);
253 
254     // Die Datensatznummer steht in nFormat !!
255     virtual sal_Bool        QueryValue( com::sun::star::uno::Any& rVal, sal_uInt16 nWhich ) const;
256     virtual sal_Bool        PutValue( const com::sun::star::uno::Any& rVal, sal_uInt16 nWhich );
257 };
258 
IsCondValid() const259 inline sal_Bool SwDBNumSetField::IsCondValid() const
260     { return bCondValid; }
261 
SetCondValid(sal_Bool bCond)262 inline void SwDBNumSetField::SetCondValid(sal_Bool bCond)
263     { bCondValid = bCond; }
264 
265 /*--------------------------------------------------------------------
266     Beschreibung: Datenbankname
267  --------------------------------------------------------------------*/
268 
269 class SwDBNameFieldType : public SwFieldType
270 {
271         SwDoc *pDoc;
272 public:
273     SwDBNameFieldType(SwDoc*);
274 
275     String                  Expand(sal_uLong) const;
276     virtual SwFieldType*    Copy() const;
277 };
278 
279 /*--------------------------------------------------------------------
280     Beschreibung: Datenbankfeld
281  --------------------------------------------------------------------*/
282 
283 class SW_DLLPUBLIC SwDBNameField : public SwDBNameInfField
284 {
285 public:
286     SwDBNameField(SwDBNameFieldType*, const SwDBData& rDBData, sal_uLong nFmt = 0);
287 
288     virtual String   Expand() const;
289     virtual SwField* Copy() const;
290     virtual sal_Bool        QueryValue( com::sun::star::uno::Any& rVal, sal_uInt16 nWhich ) const;
291     virtual sal_Bool        PutValue( const com::sun::star::uno::Any& rVal, sal_uInt16 nWhich );
292 };
293 
294 /*--------------------------------------------------------------------
295     Beschreibung: Datensatznummer
296  --------------------------------------------------------------------*/
297 
298 class SW_DLLPUBLIC SwDBSetNumberFieldType : public SwFieldType
299 {
300 public:
301     SwDBSetNumberFieldType();
302 
303     virtual SwFieldType*    Copy() const;
304 };
305 
306 /*--------------------------------------------------------------------
307     Beschreibung: Datenbankfeld
308  --------------------------------------------------------------------*/
309 
310 class SW_DLLPUBLIC SwDBSetNumberField : public SwDBNameInfField
311 {
312     long    nNumber;
313 
314 public:
315     SwDBSetNumberField(SwDBSetNumberFieldType*, const SwDBData& rDBData, sal_uLong nFmt = 0);
316 
317     virtual String  Expand() const;
318     virtual         SwField* Copy() const;
319     void            Evaluate(SwDoc*);
320 
321     inline long     GetSetNumber() const;
322     inline void     SetSetNumber(long nNum);
323     virtual sal_Bool        QueryValue( com::sun::star::uno::Any& rVal, sal_uInt16 nWhich ) const;
324     virtual sal_Bool        PutValue( const com::sun::star::uno::Any& rVal, sal_uInt16 nWhich );
325 };
326 
GetSetNumber() const327 inline long SwDBSetNumberField::GetSetNumber() const
328     { return nNumber; }
329 
SetSetNumber(long nNum)330 inline void SwDBSetNumberField::SetSetNumber(long nNum)
331     { nNumber = nNum; }
332 
333 
334 #endif // SW_DBFLD_HXX
335