xref: /AOO41X/main/sw/inc/fldbas.hxx (revision 4d7c9de063a797b8b4f3d45e3561e82ad1f8ef1f)
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_FLDBAS_HXX
24 #define SW_FLDBAS_HXX
25 
26 #include <i18npool/lang.h>
27 #include <tools/debug.hxx>
28 #include <tools/string.hxx>
29 #include "swdllapi.h"
30 #include <calbck.hxx>
31 #include <com/sun/star/uno/Any.hxx>
32 
33 class SwDoc;
34 class SvStringsDtor;
35 class SvNumberFormatter;
36 
37 
38 /*--------------------------------------------------------------------
39     Beschreibung:   die ID's fuer die Feldtypen
40  --------------------------------------------------------------------*/
41 
42 enum RES_FIELDS
43 {
44 // Fuer die alten Dokumente muessen die Field-Which IDS erhalten bleiben !!!!
45     RES_FIELDS_BEGIN,
46     RES_DBFLD = RES_FIELDS_BEGIN,
47     RES_USERFLD,
48     RES_FILENAMEFLD,
49     RES_DBNAMEFLD,
50     RES_DATEFLD,
51     RES_TIMEFLD,
52     RES_PAGENUMBERFLD,
53     RES_AUTHORFLD,
54     RES_CHAPTERFLD,
55     RES_DOCSTATFLD,
56     RES_GETEXPFLD,
57     RES_SETEXPFLD,
58     RES_GETREFFLD,
59     RES_HIDDENTXTFLD,
60     RES_POSTITFLD,
61     RES_FIXDATEFLD,
62     RES_FIXTIMEFLD,
63     RES_REGFLD,
64     RES_VARREGFLD,
65     RES_SETREFFLD,
66     RES_INPUTFLD,
67     RES_MACROFLD,
68     RES_DDEFLD,
69     RES_TABLEFLD,
70     RES_HIDDENPARAFLD,
71     RES_DOCINFOFLD,
72     RES_TEMPLNAMEFLD,
73     RES_DBNEXTSETFLD,
74     RES_DBNUMSETFLD,
75     RES_DBSETNUMBERFLD,
76     RES_EXTUSERFLD,
77     RES_REFPAGESETFLD,
78     RES_REFPAGEGETFLD,
79     RES_INTERNETFLD,
80     RES_JUMPEDITFLD,
81     RES_SCRIPTFLD,
82     RES_DATETIMEFLD,
83     RES_AUTHORITY,  //Table of authorities
84     RES_COMBINED_CHARS,
85     RES_DROPDOWN,
86     RES_FIELDS_END
87 };
88 
89 /*--------------------------------------------------------------------
90     Beschreibung: Liste der FieldTypes am UI
91  --------------------------------------------------------------------*/
92 
93 enum SwFldTypesEnum
94 {
95     TYP_BEGIN,
96     TYP_DATEFLD = TYP_BEGIN,    // 0
97     TYP_TIMEFLD,
98     TYP_FILENAMEFLD,
99     TYP_DBNAMEFLD,
100     TYP_CHAPTERFLD,
101     TYP_PAGENUMBERFLD,
102     TYP_DOCSTATFLD,
103     TYP_AUTHORFLD,
104     TYP_SETFLD,
105     TYP_GETFLD,
106     TYP_FORMELFLD,              // 10
107     TYP_HIDDENTXTFLD,
108     TYP_SETREFFLD,
109     TYP_GETREFFLD,
110     TYP_DDEFLD,
111     TYP_MACROFLD,
112     TYP_INPUTFLD,
113     TYP_HIDDENPARAFLD,
114     TYP_DOCINFOFLD,
115     TYP_DBFLD,
116     TYP_USERFLD,                // 20
117     TYP_POSTITFLD,
118     TYP_TEMPLNAMEFLD,
119     TYP_SEQFLD,
120     TYP_DBNEXTSETFLD,
121     TYP_DBNUMSETFLD,
122     TYP_DBSETNUMBERFLD,
123     TYP_CONDTXTFLD,
124     TYP_NEXTPAGEFLD,
125     TYP_PREVPAGEFLD,
126     TYP_EXTUSERFLD,             // 30
127     TYP_FIXDATEFLD,
128     TYP_FIXTIMEFLD,
129     TYP_SETINPFLD,
130     TYP_USRINPFLD,
131     TYP_SETREFPAGEFLD,
132     TYP_GETREFPAGEFLD,
133     TYP_INTERNETFLD,
134     TYP_JUMPEDITFLD,
135     TYP_SCRIPTFLD,              // 40
136     TYP_AUTHORITY,
137     TYP_COMBINED_CHARS,
138     TYP_DROPDOWN,
139     TYP_END
140 };
141 enum SwAttrFieldTYpe
142 {
143     ATTR_NONE,
144     ATTR_DATEFLD,
145     ATTR_TIMEFLD,
146     ATTR_PAGENUMBERFLD,
147     ATTR_PAGECOOUNTFLD,
148     ATTR_BOOKMARKFLD,
149     ATTR_SETREFATTRFLD
150 };
151 enum SwFileNameFormat
152 {
153     FF_BEGIN,
154     FF_NAME = FF_BEGIN,
155     FF_PATHNAME,
156     FF_PATH,
157     FF_NAME_NOEXT,
158     FF_UI_NAME,
159     FF_UI_RANGE,
160     FF_END,
161     FF_FIXED = 0x8000
162 };
163 
164 enum SwVarFormat
165 {
166     VVF_CMD         = 0x0010,   // Kommando anzeigen
167     VVF_INVISIBLE   = 0x0040,   // unsichtbar
168     VVF_XXP         = 0x0400,   // 1234%
169     VVF_XX_XXP      = 0x0800,   // 1.234,56%
170     VVF_CLEAR       = 0x000f,
171 
172 // ab hier neue Formate
173     VVF_SYS         = 0x2000,   //Zahlenformat aus der Systemeinstellung
174     VVF_X           = 0x2100,   // 1234
175     VVF_X_X         = 0x2200,   // 1234,5
176     VVF_X_XX        = 0x2300,   // 1245,56
177     VVF_XX_X        = 0x2400,   // 1.234,5
178     VVF_XX_XX       = 0x2500,   // 1.234,56
179     VVF_XX_XXX      = 0x2600,   // 1.234,567
180     VVF_SYS_CUR     = 0x2700,   // W???hrungsformat aus der Systemeinstellung
181     VVF_CUR_X       = 0x2800,   // DM 1234
182     VVF_CUR_XX_XX   = 0x2900,   // DM 1234,56 DM 1234,00
183     VVF_CUR_XX_X0   = 0x2a00,   // DM 1234,56 DM 1234,--
184     VVF_X_CUR       = 0x2b00,   // 1234 DM
185     VVF_XX_XX_CUR   = 0x2c00,   // 1234,56 DM 1234,00 DM
186     VVF_XX_X0_CUR   = 0x2d00,    // 1234,56 DM 1234,-- DM
187 // Kompatibilitaet:
188     VF_CMD          = VVF_CMD,
189     VF_INVISIBLE    = VVF_INVISIBLE,
190     VF_XXP          = VVF_XXP,
191     VF_XX_XXP       = VVF_XX_XXP,
192     VF_VISIBLE      = VVF_SYS,
193     VF_XX           = VVF_X,
194     VF_XX_XX        = VVF_XX_XX,
195     VF_XX_XX_CUR    = VVF_SYS_CUR,
196     VF_CLEAR        = VVF_CLEAR
197 
198 };
199 
200 typedef sal_uInt16 SwGetSetExpType;
201 namespace nsSwGetSetExpType
202 {
203     const SwGetSetExpType GSE_STRING  = 0x0001; // String
204     const SwGetSetExpType GSE_EXPR    = 0x0002; // Expression
205     const SwGetSetExpType GSE_INP     = 0x0004; // InputField
206     const SwGetSetExpType GSE_SEQ     = 0x0008; // Sequence
207     const SwGetSetExpType GSE_FORMULA = 0x0010; // Formel
208 }
209 
210 typedef sal_uInt16 SwExtendedSubType;
211 namespace nsSwExtendedSubType
212 {
213     const SwExtendedSubType SUB_CMD         = 0x0100;   // Kommando anzeigen
214     const SwExtendedSubType SUB_INVISIBLE   = 0x0200;   // unsichtbar
215     const SwExtendedSubType SUB_OWN_FMT     = 0x0400;   // SwDBField: Uebernimmt Formatierung nicht
216                                                         // aus Datenbank
217 }
218 
219 enum SwInputFieldSubType
220 {
221     INP_TXT     = 0x01,
222     INP_USR     = 0x02,
223     INP_VAR     = 0x03
224 };
225 
226 
227 enum SwUserType
228 {
229     UF_STRING   = 0x01,
230     UF_EXPR     = 0x02
231 };
232 
233 enum SwDateTimeSubType
234 {
235     FIXEDFLD = 1,
236     DATEFLD  = 2,
237     TIMEFLD  = 4
238 };
239 
240 
241 extern sal_uInt16 __FAR_DATA aTypeTab[];
242 
243 /*--------------------------------------------------------------------
244     Beschreibung: Allgemeine Tools
245  --------------------------------------------------------------------*/
246 
247 String  GetResult(double nVal, sal_uInt32 nNumFmt, sal_uInt16 nLang = LANGUAGE_SYSTEM);
248 void    SetErrorStr(const String& rStr);
249 //String    ExpandDate(const Date& rDate, sal_uLong nFmt, sal_uInt16 nLang);
250 //String    ExpandTime(const Time& rTime, sal_uLong nFmt, sal_uInt16 nLang);
251 String  FormatNumber(sal_uInt16 nNum, sal_uInt32 nFormat);
252 
253 /*--------------------------------------------------------------------
254     Beschreibung:   Instanzen von SwFields und Abgeleiteten kommen 0-n mal vor.
255                     Zu jeder Klasse SwFields existiert
256                     1 Instanz der zugehoerigen Typenklasse
257                     Basisklasse aller Feldtypen ist SwFieldType
258  --------------------------------------------------------------------*/
259 
260 DBG_NAMEEX(SwFieldType)
261 
262 class SW_DLLPUBLIC SwFieldType : public SwModify
263 {
264     sal_uInt16 nWhich;
265 
266     friend void _FinitUI();     // um den Pointer zu loeschen!
267     static  SvStringsDtor*  pFldNames;
268 
269     static void _GetFldName();          // legt die FldNames an, fldmgr.cxx!
270 
271 protected:
272     // single argument ctors shall be explicit.
273     explicit SwFieldType( sal_uInt16 nWhichId );
274 
275 public:
276 
277 #ifdef DBG_UTIL
278     virtual ~SwFieldType();
279 #endif
280     static  const String&   GetTypeStr( sal_uInt16 nTypeId );
281 
282     // nur in abgeleiteten Klassen
283     virtual const String&   GetName() const;
284     virtual SwFieldType*    Copy()    const = 0;
285     virtual sal_Bool QueryValue( com::sun::star::uno::Any& rVal, sal_uInt16 nWhich ) const;
286     virtual sal_Bool PutValue( const com::sun::star::uno::Any& rVal, sal_uInt16 nWhich );
287 
Which() const288             sal_uInt16          Which() const { return nWhich; }
289 
290     inline  void            UpdateFlds() const;
291 };
292 
UpdateFlds() const293 inline void SwFieldType::UpdateFlds() const
294 {
295     ((SwFieldType*)this)->ModifyNotification( 0, 0 );
296 }
297 
298 /*--------------------------------------------------------------------
299     Beschreibung:  Basisklasse aller Felder.
300                    Ueber Which wird der Typ des Feldes abgefragt.
301                    Ueber Expand() wird der expandierte Inhalt
302                    des Feldes in Erfahrung gebracht.
303  --------------------------------------------------------------------*/
304 
305 class SW_DLLPUBLIC SwField
306 {
307 private:
308     mutable String      m_Cache; /// #i85766# cached expansion (for clipboard)
309     bool m_bUseFieldValueCache; /// control the usage of the cached field value
310 
311     sal_uInt16              nLang;  // Immer ueber SetLanguage aendern!
312     sal_Bool                bIsAutomaticLanguage;
313     sal_uInt32          nFormat;
314 
315     SwFieldType*        pType;
316 
317     virtual String      Expand() const = 0;
318     virtual SwField*    Copy() const = 0;
319 
320 protected:
SetFormat(sal_uInt32 nSet)321     void                SetFormat(sal_uInt32 nSet) {nFormat = nSet;}
322 
323     SwField( SwFieldType* pTyp,
324              sal_uInt32 nFmt = 0,
325              sal_uInt16 nLang = LANGUAGE_SYSTEM,
326              bool m_bUseFieldValueCache = true );
327 
328 public:
329     virtual             ~SwField();
330 
331     // Typ feststellen
332     inline SwFieldType* GetTyp() const;
333 
334     // neuen Typ setzen (wird fuer das Kopieren zwischen Dokumenten benutzt)
335     virtual SwFieldType* ChgTyp( SwFieldType* );
336 
337     /** expand the field.
338         @param  bCached     return cached field value.
339         @remark     most callers should use the cached field value.
340                     this is because various fields need special handing
341                     (ChangeExpansion()) to return correct values, and only
342                     SwTxtFormatter::NewFldPortion() sets things up properly.
343         @return     the generated text (suitable for display)
344       */
345     String              ExpandField(bool const bCached) const;
346 
347     virtual String      GetFieldName() const;
348 
349     SwField *           CopyField() const;
350 
351     // ResId
Which() const352     sal_uInt16              Which() const
353 #ifndef DBG_UTIL
354         { return pType->Which(); }
355 #else
356         ;       // in fldbas.cxx implementiert
357 #endif
358 
359     // TYP_ID
360             sal_uInt16      GetTypeId() const;
361     virtual sal_uInt16      GetSubType() const;
362     virtual void        SetSubType(sal_uInt16);
363 
364     // Sprache an der Feldposition
365     inline sal_uInt16       GetLanguage() const;
366     virtual void        SetLanguage(sal_uInt16 nLng);
367 
368     // Parameter fuer Dialog und BASIC erfragen
369     inline sal_uInt32   GetFormat() const;
370     virtual const String& GetPar1() const;
371     virtual String      GetPar2()   const;
372 
373     virtual String      GetFormula() const;
374 
375     virtual void        ChangeFormat(sal_uInt32 n);
376     virtual void        SetPar1(const String& rStr);
377     virtual void        SetPar2(const String& rStr);
378 
379     virtual sal_Bool        QueryValue( com::sun::star::uno::Any& rVal, sal_uInt16 nWhichId ) const;
380     virtual sal_Bool        PutValue( const com::sun::star::uno::Any& rVal, sal_uInt16 nWhichId );
381     // hat das Feld eine Action auf dem ClickHandler ? (z.B. INetFelder,..)
382     sal_Bool            HasClickHdl() const;
383     // ist es ein Fix-Feld?
384     sal_Bool            IsFixed() const;
385 
IsAutomaticLanguage() const386     sal_Bool                IsAutomaticLanguage() const { return bIsAutomaticLanguage;}
SetAutomaticLanguage(sal_Bool bSet)387     void                SetAutomaticLanguage(sal_Bool bSet){bIsAutomaticLanguage = bSet;}
388 
389     virtual String      GetDescription() const;
390 };
391 
GetTyp() const392 inline SwFieldType* SwField::GetTyp() const
393     { return pType;     }
394 
GetFormat() const395 inline sal_uInt32 SwField::GetFormat() const
396     { return nFormat;   }
397 
GetLanguage() const398 inline sal_uInt16 SwField::GetLanguage() const
399     { return nLang;     }
400 
401 /*--------------------------------------------------------------------
402     Beschreibung:   Felder mit Values, die ueber der Numberformatter
403                     formatiert werden muessen
404  --------------------------------------------------------------------*/
405 
406 class SwValueFieldType : public SwFieldType
407 {
408     SwDoc*  pDoc;
409     sal_Bool    bUseFormat; // Numberformatter verwenden
410 
411 protected:
412     SwValueFieldType( SwDoc* pDocPtr, sal_uInt16 nWhichId );
413     SwValueFieldType( const SwValueFieldType& rTyp );
414 
415 public:
GetDoc() const416     inline SwDoc*   GetDoc() const                      { return pDoc; }
SetDoc(SwDoc * pNewDoc)417     inline void     SetDoc(SwDoc* pNewDoc)              { pDoc = pNewDoc; }
418 
UseFormat() const419     inline sal_Bool     UseFormat() const                   { return bUseFormat; }
EnableFormat(sal_Bool bFormat=sal_True)420     inline void     EnableFormat(sal_Bool bFormat = sal_True)   { bUseFormat = bFormat; }
421 
422     String          ExpandValue(const double& rVal, sal_uInt32 nFmt, sal_uInt16 nLng=0) const;
423     void            DoubleToString(String &rValue, const double &rVal, LanguageType eLng) const;
424     void            DoubleToString(String &rValue, const double &rVal, sal_uInt32 nFmt) const;
425 };
426 
427 class SW_DLLPUBLIC SwValueField : public SwField
428 {
429     double fValue;
430 //  String sExpand;
431 
432 protected:
433     SwValueField( SwValueFieldType* pFldType, sal_uInt32 nFmt = 0, sal_uInt16 nLang = LANGUAGE_SYSTEM, const double fVal = 0.0 );
434     SwValueField( const SwValueField& rFld );
435 
436 public:
437     virtual                 ~SwValueField();
438 
439     virtual SwFieldType*    ChgTyp( SwFieldType* );
440     virtual void            SetLanguage(sal_uInt16 nLng);
441 //  os: wozu war das denn da?
442 //  virtual void            ChangeFormat(sal_uLong n);
443 
GetDoc() const444     inline SwDoc*           GetDoc() const          { return ((SwValueFieldType*)GetTyp())->GetDoc(); }
445 
446     virtual double          GetValue() const;
447     virtual void            SetValue( const double& rVal );
448 
ExpandValue(const double & rVal,sal_uInt32 nFmt,sal_uInt16 nLng=0) const449     inline String   ExpandValue(const double& rVal, sal_uInt32 nFmt, sal_uInt16 nLng=0) const
450         { return ((SwValueFieldType*)GetTyp())->ExpandValue(rVal, nFmt, nLng); }
451 
452     static sal_uInt32       GetSystemFormat(SvNumberFormatter* pFormatter, sal_uInt32 nFmt);
453 };
454 
455 class SW_DLLPUBLIC SwFormulaField : public SwValueField
456 {
457     String sFormula;
458 
459 protected:
460     SwFormulaField( SwValueFieldType* pFldType, sal_uInt32 nFmt = 0, const double fVal = 0.0 );
461     SwFormulaField( const SwFormulaField& rFld );
462 
463 public:
464     virtual String          GetFormula() const;
465     void                    SetFormula(const String& rStr);
466 
467     void                    SetExpandedFormula(const String& rStr);
468     String                  GetExpandedFormula() const;
469 };
470 
471 #endif // SW_FLDBAS_HXX
472