| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| #ifndef SW_FLDBAS_HXX |
| #define SW_FLDBAS_HXX |
| |
| #include <i18npool/lang.h> |
| #include <tools/debug.hxx> |
| #include <tools/string.hxx> |
| #include "swdllapi.h" |
| #include <calbck.hxx> |
| #include <com/sun/star/uno/Any.hxx> |
| |
| class SwDoc; |
| class SvStringsDtor; |
| class SvNumberFormatter; |
| |
| |
| /*-------------------------------------------------------------------- |
| Beschreibung: die ID's fuer die Feldtypen |
| --------------------------------------------------------------------*/ |
| |
| enum RES_FIELDS |
| { |
| // Fuer die alten Dokumente muessen die Field-Which IDS erhalten bleiben !!!! |
| RES_FIELDS_BEGIN, |
| RES_DBFLD = RES_FIELDS_BEGIN, |
| RES_USERFLD, |
| RES_FILENAMEFLD, |
| RES_DBNAMEFLD, |
| RES_DATEFLD, |
| RES_TIMEFLD, |
| RES_PAGENUMBERFLD, |
| RES_AUTHORFLD, |
| RES_CHAPTERFLD, |
| RES_DOCSTATFLD, |
| RES_GETEXPFLD, |
| RES_SETEXPFLD, |
| RES_GETREFFLD, |
| RES_HIDDENTXTFLD, |
| RES_POSTITFLD, |
| RES_FIXDATEFLD, |
| RES_FIXTIMEFLD, |
| RES_REGFLD, |
| RES_VARREGFLD, |
| RES_SETREFFLD, |
| RES_INPUTFLD, |
| RES_MACROFLD, |
| RES_DDEFLD, |
| RES_TABLEFLD, |
| RES_HIDDENPARAFLD, |
| RES_DOCINFOFLD, |
| RES_TEMPLNAMEFLD, |
| RES_DBNEXTSETFLD, |
| RES_DBNUMSETFLD, |
| RES_DBSETNUMBERFLD, |
| RES_EXTUSERFLD, |
| RES_REFPAGESETFLD, |
| RES_REFPAGEGETFLD, |
| RES_INTERNETFLD, |
| RES_JUMPEDITFLD, |
| RES_SCRIPTFLD, |
| RES_DATETIMEFLD, |
| RES_AUTHORITY, //Table of authorities |
| RES_COMBINED_CHARS, |
| RES_DROPDOWN, |
| RES_FIELDS_END |
| }; |
| |
| /*-------------------------------------------------------------------- |
| Beschreibung: Liste der FieldTypes am UI |
| --------------------------------------------------------------------*/ |
| |
| enum SwFldTypesEnum |
| { |
| TYP_BEGIN, |
| TYP_DATEFLD = TYP_BEGIN, // 0 |
| TYP_TIMEFLD, |
| TYP_FILENAMEFLD, |
| TYP_DBNAMEFLD, |
| TYP_CHAPTERFLD, |
| TYP_PAGENUMBERFLD, |
| TYP_DOCSTATFLD, |
| TYP_AUTHORFLD, |
| TYP_SETFLD, |
| TYP_GETFLD, |
| TYP_FORMELFLD, // 10 |
| TYP_HIDDENTXTFLD, |
| TYP_SETREFFLD, |
| TYP_GETREFFLD, |
| TYP_DDEFLD, |
| TYP_MACROFLD, |
| TYP_INPUTFLD, |
| TYP_HIDDENPARAFLD, |
| TYP_DOCINFOFLD, |
| TYP_DBFLD, |
| TYP_USERFLD, // 20 |
| TYP_POSTITFLD, |
| TYP_TEMPLNAMEFLD, |
| TYP_SEQFLD, |
| TYP_DBNEXTSETFLD, |
| TYP_DBNUMSETFLD, |
| TYP_DBSETNUMBERFLD, |
| TYP_CONDTXTFLD, |
| TYP_NEXTPAGEFLD, |
| TYP_PREVPAGEFLD, |
| TYP_EXTUSERFLD, // 30 |
| TYP_FIXDATEFLD, |
| TYP_FIXTIMEFLD, |
| TYP_SETINPFLD, |
| TYP_USRINPFLD, |
| TYP_SETREFPAGEFLD, |
| TYP_GETREFPAGEFLD, |
| TYP_INTERNETFLD, |
| TYP_JUMPEDITFLD, |
| TYP_SCRIPTFLD, // 40 |
| TYP_AUTHORITY, |
| TYP_COMBINED_CHARS, |
| TYP_DROPDOWN, |
| TYP_END |
| }; |
| enum SwAttrFieldTYpe |
| { |
| ATTR_NONE, |
| ATTR_DATEFLD, |
| ATTR_TIMEFLD, |
| ATTR_PAGENUMBERFLD, |
| ATTR_PAGECOOUNTFLD, |
| ATTR_BOOKMARKFLD, |
| ATTR_SETREFATTRFLD |
| }; |
| enum SwFileNameFormat |
| { |
| FF_BEGIN, |
| FF_NAME = FF_BEGIN, |
| FF_PATHNAME, |
| FF_PATH, |
| FF_NAME_NOEXT, |
| FF_UI_NAME, |
| FF_UI_RANGE, |
| FF_END, |
| FF_FIXED = 0x8000 |
| }; |
| |
| enum SwVarFormat |
| { |
| VVF_CMD = 0x0010, // Kommando anzeigen |
| VVF_INVISIBLE = 0x0040, // unsichtbar |
| VVF_XXP = 0x0400, // 1234% |
| VVF_XX_XXP = 0x0800, // 1.234,56% |
| VVF_CLEAR = 0x000f, |
| |
| // ab hier neue Formate |
| VVF_SYS = 0x2000, //Zahlenformat aus der Systemeinstellung |
| VVF_X = 0x2100, // 1234 |
| VVF_X_X = 0x2200, // 1234,5 |
| VVF_X_XX = 0x2300, // 1245,56 |
| VVF_XX_X = 0x2400, // 1.234,5 |
| VVF_XX_XX = 0x2500, // 1.234,56 |
| VVF_XX_XXX = 0x2600, // 1.234,567 |
| VVF_SYS_CUR = 0x2700, // W???hrungsformat aus der Systemeinstellung |
| VVF_CUR_X = 0x2800, // DM 1234 |
| VVF_CUR_XX_XX = 0x2900, // DM 1234,56 DM 1234,00 |
| VVF_CUR_XX_X0 = 0x2a00, // DM 1234,56 DM 1234,-- |
| VVF_X_CUR = 0x2b00, // 1234 DM |
| VVF_XX_XX_CUR = 0x2c00, // 1234,56 DM 1234,00 DM |
| VVF_XX_X0_CUR = 0x2d00, // 1234,56 DM 1234,-- DM |
| // Kompatibilitaet: |
| VF_CMD = VVF_CMD, |
| VF_INVISIBLE = VVF_INVISIBLE, |
| VF_XXP = VVF_XXP, |
| VF_XX_XXP = VVF_XX_XXP, |
| VF_VISIBLE = VVF_SYS, |
| VF_XX = VVF_X, |
| VF_XX_XX = VVF_XX_XX, |
| VF_XX_XX_CUR = VVF_SYS_CUR, |
| VF_CLEAR = VVF_CLEAR |
| |
| }; |
| |
| typedef sal_uInt16 SwGetSetExpType; |
| namespace nsSwGetSetExpType |
| { |
| const SwGetSetExpType GSE_STRING = 0x0001; // String |
| const SwGetSetExpType GSE_EXPR = 0x0002; // Expression |
| const SwGetSetExpType GSE_INP = 0x0004; // InputField |
| const SwGetSetExpType GSE_SEQ = 0x0008; // Sequence |
| const SwGetSetExpType GSE_FORMULA = 0x0010; // Formel |
| } |
| |
| typedef sal_uInt16 SwExtendedSubType; |
| namespace nsSwExtendedSubType |
| { |
| const SwExtendedSubType SUB_CMD = 0x0100; // Kommando anzeigen |
| const SwExtendedSubType SUB_INVISIBLE = 0x0200; // unsichtbar |
| const SwExtendedSubType SUB_OWN_FMT = 0x0400; // SwDBField: Uebernimmt Formatierung nicht |
| // aus Datenbank |
| } |
| |
| enum SwInputFieldSubType |
| { |
| INP_TXT = 0x01, |
| INP_USR = 0x02, |
| INP_VAR = 0x03 |
| }; |
| |
| |
| enum SwUserType |
| { |
| UF_STRING = 0x01, |
| UF_EXPR = 0x02 |
| }; |
| |
| enum SwDateTimeSubType |
| { |
| FIXEDFLD = 1, |
| DATEFLD = 2, |
| TIMEFLD = 4 |
| }; |
| |
| |
| extern sal_uInt16 __FAR_DATA aTypeTab[]; |
| |
| /*-------------------------------------------------------------------- |
| Beschreibung: Allgemeine Tools |
| --------------------------------------------------------------------*/ |
| |
| String GetResult(double nVal, sal_uInt32 nNumFmt, sal_uInt16 nLang = LANGUAGE_SYSTEM); |
| void SetErrorStr(const String& rStr); |
| //String ExpandDate(const Date& rDate, sal_uLong nFmt, sal_uInt16 nLang); |
| //String ExpandTime(const Time& rTime, sal_uLong nFmt, sal_uInt16 nLang); |
| String FormatNumber(sal_uInt16 nNum, sal_uInt32 nFormat); |
| |
| /*-------------------------------------------------------------------- |
| Beschreibung: Instanzen von SwFields und Abgeleiteten kommen 0-n mal vor. |
| Zu jeder Klasse SwFields existiert |
| 1 Instanz der zugehoerigen Typenklasse |
| Basisklasse aller Feldtypen ist SwFieldType |
| --------------------------------------------------------------------*/ |
| |
| DBG_NAMEEX(SwFieldType) |
| |
| class SW_DLLPUBLIC SwFieldType : public SwModify |
| { |
| sal_uInt16 nWhich; |
| |
| friend void _FinitUI(); // um den Pointer zu loeschen! |
| static SvStringsDtor* pFldNames; |
| |
| static void _GetFldName(); // legt die FldNames an, fldmgr.cxx! |
| |
| protected: |
| // single argument ctors shall be explicit. |
| explicit SwFieldType( sal_uInt16 nWhichId ); |
| |
| public: |
| |
| #ifdef DBG_UTIL |
| virtual ~SwFieldType(); |
| #endif |
| static const String& GetTypeStr( sal_uInt16 nTypeId ); |
| |
| // nur in abgeleiteten Klassen |
| virtual const String& GetName() const; |
| virtual SwFieldType* Copy() const = 0; |
| virtual sal_Bool QueryValue( com::sun::star::uno::Any& rVal, sal_uInt16 nWhich ) const; |
| virtual sal_Bool PutValue( const com::sun::star::uno::Any& rVal, sal_uInt16 nWhich ); |
| |
| sal_uInt16 Which() const { return nWhich; } |
| |
| inline void UpdateFlds() const; |
| }; |
| |
| inline void SwFieldType::UpdateFlds() const |
| { |
| ((SwFieldType*)this)->ModifyNotification( 0, 0 ); |
| } |
| |
| /*-------------------------------------------------------------------- |
| Beschreibung: Basisklasse aller Felder. |
| Ueber Which wird der Typ des Feldes abgefragt. |
| Ueber Expand() wird der expandierte Inhalt |
| des Feldes in Erfahrung gebracht. |
| --------------------------------------------------------------------*/ |
| |
| class SW_DLLPUBLIC SwField |
| { |
| private: |
| mutable String m_Cache; /// #i85766# cached expansion (for clipboard) |
| bool m_bUseFieldValueCache; /// control the usage of the cached field value |
| |
| sal_uInt16 nLang; // Immer ueber SetLanguage aendern! |
| sal_Bool bIsAutomaticLanguage; |
| sal_uInt32 nFormat; |
| |
| SwFieldType* pType; |
| |
| virtual String Expand() const = 0; |
| virtual SwField* Copy() const = 0; |
| |
| protected: |
| void SetFormat(sal_uInt32 nSet) {nFormat = nSet;} |
| |
| SwField( SwFieldType* pTyp, |
| sal_uInt32 nFmt = 0, |
| sal_uInt16 nLang = LANGUAGE_SYSTEM, |
| bool m_bUseFieldValueCache = true ); |
| |
| public: |
| virtual ~SwField(); |
| |
| // Typ feststellen |
| inline SwFieldType* GetTyp() const; |
| |
| // neuen Typ setzen (wird fuer das Kopieren zwischen Dokumenten benutzt) |
| virtual SwFieldType* ChgTyp( SwFieldType* ); |
| |
| /** expand the field. |
| @param bCached return cached field value. |
| @remark most callers should use the cached field value. |
| this is because various fields need special handing |
| (ChangeExpansion()) to return correct values, and only |
| SwTxtFormatter::NewFldPortion() sets things up properly. |
| @return the generated text (suitable for display) |
| */ |
| String ExpandField(bool const bCached) const; |
| |
| virtual String GetFieldName() const; |
| |
| SwField * CopyField() const; |
| |
| // ResId |
| sal_uInt16 Which() const |
| #ifndef DBG_UTIL |
| { return pType->Which(); } |
| #else |
| ; // in fldbas.cxx implementiert |
| #endif |
| |
| // TYP_ID |
| sal_uInt16 GetTypeId() const; |
| virtual sal_uInt16 GetSubType() const; |
| virtual void SetSubType(sal_uInt16); |
| |
| // Sprache an der Feldposition |
| inline sal_uInt16 GetLanguage() const; |
| virtual void SetLanguage(sal_uInt16 nLng); |
| |
| // Parameter fuer Dialog und BASIC erfragen |
| inline sal_uInt32 GetFormat() const; |
| virtual const String& GetPar1() const; |
| virtual String GetPar2() const; |
| |
| virtual String GetFormula() const; |
| |
| virtual void ChangeFormat(sal_uInt32 n); |
| virtual void SetPar1(const String& rStr); |
| virtual void SetPar2(const String& rStr); |
| |
| virtual sal_Bool QueryValue( com::sun::star::uno::Any& rVal, sal_uInt16 nWhichId ) const; |
| virtual sal_Bool PutValue( const com::sun::star::uno::Any& rVal, sal_uInt16 nWhichId ); |
| // hat das Feld eine Action auf dem ClickHandler ? (z.B. INetFelder,..) |
| sal_Bool HasClickHdl() const; |
| // ist es ein Fix-Feld? |
| sal_Bool IsFixed() const; |
| |
| sal_Bool IsAutomaticLanguage() const { return bIsAutomaticLanguage;} |
| void SetAutomaticLanguage(sal_Bool bSet){bIsAutomaticLanguage = bSet;} |
| |
| virtual String GetDescription() const; |
| }; |
| |
| inline SwFieldType* SwField::GetTyp() const |
| { return pType; } |
| |
| inline sal_uInt32 SwField::GetFormat() const |
| { return nFormat; } |
| |
| inline sal_uInt16 SwField::GetLanguage() const |
| { return nLang; } |
| |
| /*-------------------------------------------------------------------- |
| Beschreibung: Felder mit Values, die ueber der Numberformatter |
| formatiert werden muessen |
| --------------------------------------------------------------------*/ |
| |
| class SwValueFieldType : public SwFieldType |
| { |
| SwDoc* pDoc; |
| sal_Bool bUseFormat; // Numberformatter verwenden |
| |
| protected: |
| SwValueFieldType( SwDoc* pDocPtr, sal_uInt16 nWhichId ); |
| SwValueFieldType( const SwValueFieldType& rTyp ); |
| |
| public: |
| inline SwDoc* GetDoc() const { return pDoc; } |
| inline void SetDoc(SwDoc* pNewDoc) { pDoc = pNewDoc; } |
| |
| inline sal_Bool UseFormat() const { return bUseFormat; } |
| inline void EnableFormat(sal_Bool bFormat = sal_True) { bUseFormat = bFormat; } |
| |
| String ExpandValue(const double& rVal, sal_uInt32 nFmt, sal_uInt16 nLng=0) const; |
| void DoubleToString(String &rValue, const double &rVal, LanguageType eLng) const; |
| void DoubleToString(String &rValue, const double &rVal, sal_uInt32 nFmt) const; |
| }; |
| |
| class SW_DLLPUBLIC SwValueField : public SwField |
| { |
| double fValue; |
| // String sExpand; |
| |
| protected: |
| SwValueField( SwValueFieldType* pFldType, sal_uInt32 nFmt = 0, sal_uInt16 nLang = LANGUAGE_SYSTEM, const double fVal = 0.0 ); |
| SwValueField( const SwValueField& rFld ); |
| |
| public: |
| virtual ~SwValueField(); |
| |
| virtual SwFieldType* ChgTyp( SwFieldType* ); |
| virtual void SetLanguage(sal_uInt16 nLng); |
| // os: wozu war das denn da? |
| // virtual void ChangeFormat(sal_uLong n); |
| |
| inline SwDoc* GetDoc() const { return ((SwValueFieldType*)GetTyp())->GetDoc(); } |
| |
| virtual double GetValue() const; |
| virtual void SetValue( const double& rVal ); |
| |
| inline String ExpandValue(const double& rVal, sal_uInt32 nFmt, sal_uInt16 nLng=0) const |
| { return ((SwValueFieldType*)GetTyp())->ExpandValue(rVal, nFmt, nLng); } |
| |
| static sal_uInt32 GetSystemFormat(SvNumberFormatter* pFormatter, sal_uInt32 nFmt); |
| }; |
| |
| class SW_DLLPUBLIC SwFormulaField : public SwValueField |
| { |
| String sFormula; |
| |
| protected: |
| SwFormulaField( SwValueFieldType* pFldType, sal_uInt32 nFmt = 0, const double fVal = 0.0 ); |
| SwFormulaField( const SwFormulaField& rFld ); |
| |
| public: |
| virtual String GetFormula() const; |
| void SetFormula(const String& rStr); |
| |
| void SetExpandedFormula(const String& rStr); |
| String GetExpandedFormula() const; |
| }; |
| |
| #endif // SW_FLDBAS_HXX |