blob: fb1c4c0138dc71e1961947c95d517a877bb64d11 [file] [log] [blame]
/**************************************************************
*
* 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