8aff4a7518
2005/10/26 17:50:31 kendy 1.11.72.1: #i55546# The ULONG -> sal_uInt32 patches related to NumberFormat extracted from ooo64bit02 CWS.
509 lines
14 KiB
C++
509 lines
14 KiB
C++
/*************************************************************************
|
||
*
|
||
* OpenOffice.org - a multi-platform office productivity suite
|
||
*
|
||
* $RCSfile: fldbas.hxx,v $
|
||
*
|
||
* $Revision: 1.12 $
|
||
*
|
||
* last change: $Author: rt $ $Date: 2005-12-14 14:46:35 $
|
||
*
|
||
* The Contents of this file are made available subject to
|
||
* the terms of GNU Lesser General Public License Version 2.1.
|
||
*
|
||
*
|
||
* GNU Lesser General Public License Version 2.1
|
||
* =============================================
|
||
* Copyright 2005 by Sun Microsystems, Inc.
|
||
* 901 San Antonio Road, Palo Alto, CA 94303, USA
|
||
*
|
||
* This library is free software; you can redistribute it and/or
|
||
* modify it under the terms of the GNU Lesser General Public
|
||
* License version 2.1, as published by the Free Software Foundation.
|
||
*
|
||
* This library is distributed in the hope that it will be useful,
|
||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||
* Lesser General Public License for more details.
|
||
*
|
||
* You should have received a copy of the GNU Lesser General Public
|
||
* License along with this library; if not, write to the Free Software
|
||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||
* MA 02111-1307 USA
|
||
*
|
||
************************************************************************/
|
||
#ifndef _FLDBAS_HXX
|
||
#define _FLDBAS_HXX
|
||
|
||
#ifndef FIELDIDS_ONLY // SWG-Testreader!!
|
||
|
||
#ifndef _LANG_HXX //autogen
|
||
#include <tools/lang.hxx>
|
||
#endif
|
||
#ifndef _DEBUG_HXX //autogen
|
||
#include <tools/debug.hxx>
|
||
#endif
|
||
#ifndef _STRING_HXX //autogen
|
||
#include <tools/string.hxx>
|
||
#endif
|
||
|
||
#ifndef INCLUDED_SWDLLAPI_H
|
||
#include "swdllapi.h"
|
||
#endif
|
||
#ifndef _CALBCK_HXX
|
||
#include <calbck.hxx>
|
||
#endif
|
||
|
||
#ifndef _COM_SUN_STAR_UNO_ANY_HXX_
|
||
#include <com/sun/star/uno/Any.hxx>
|
||
#endif
|
||
|
||
class SwDoc;
|
||
class Date;
|
||
class Time;
|
||
class _SetGetExpFlds;
|
||
class SwEditShell;
|
||
class SvStringsDtor;
|
||
class SvNumberFormatter;
|
||
|
||
#endif // FIELDIDS_ONLY
|
||
|
||
/*--------------------------------------------------------------------
|
||
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 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
|
||
|
||
};
|
||
|
||
enum SwGetSetExpType
|
||
{
|
||
GSE_STRING = 0x0001, // String
|
||
GSE_EXPR = 0x0002, // Expression
|
||
GSE_INP = 0x0004, // InputField
|
||
GSE_SEQ = 0x0008, // Sequence
|
||
GSE_FORMULA = 0x0010 // Formel
|
||
};
|
||
|
||
enum SwExtendedSubType
|
||
{
|
||
SUB_CMD = 0x0100, // Kommando anzeigen
|
||
SUB_INVISIBLE = 0x0200, // unsichtbar
|
||
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
|
||
};
|
||
|
||
#ifndef FIELDIDS_ONLY // SWG-Testreader!!
|
||
|
||
|
||
extern USHORT __FAR_DATA aTypeTab[];
|
||
|
||
/*--------------------------------------------------------------------
|
||
Beschreibung: Allgemeine Tools
|
||
--------------------------------------------------------------------*/
|
||
|
||
String GetResult(double nVal, sal_uInt32 nNumFmt, USHORT nLang = LANGUAGE_SYSTEM);
|
||
void SetErrorStr(const String& rStr);
|
||
//String ExpandDate(const Date& rDate, ULONG nFmt, USHORT nLang);
|
||
//String ExpandTime(const Time& rTime, ULONG nFmt, USHORT nLang);
|
||
String FormatNumber(USHORT 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
|
||
--------------------------------------------------------------------*/
|
||
class SwFldNames;
|
||
|
||
DBG_NAMEEX(SwFieldType);
|
||
|
||
class SW_DLLPUBLIC SwFieldType : public SwModify
|
||
{
|
||
USHORT 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( USHORT nWhichId );
|
||
|
||
public:
|
||
|
||
#ifndef PRODUCT
|
||
virtual ~SwFieldType();
|
||
#endif
|
||
static const String& GetTypeStr( USHORT nTypeId );
|
||
|
||
// nur in abgeleiteten Klassen
|
||
virtual const String& GetName() const;
|
||
virtual SwFieldType* Copy() const = 0;
|
||
virtual BOOL QueryValue( com::sun::star::uno::Any& rVal, BYTE nMId ) const;
|
||
virtual BOOL PutValue( const com::sun::star::uno::Any& rVal, BYTE nMId );
|
||
|
||
USHORT Which() const { return nWhich; }
|
||
|
||
inline void UpdateFlds() const;
|
||
|
||
static SvStringsDtor* GetFldNames();
|
||
};
|
||
|
||
inline void SwFieldType::UpdateFlds() const
|
||
{
|
||
((SwFieldType*)this)->Modify( 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
|
||
{
|
||
USHORT nLang; // Immer ueber SetLanguage aendern!
|
||
BOOL bIsAutomaticLanguage;
|
||
sal_uInt32 nFormat;
|
||
|
||
SwFieldType* pType;
|
||
|
||
protected:
|
||
void SetFormat(sal_uInt32 nSet) {nFormat = nSet;}
|
||
|
||
SwField(SwFieldType* pTyp, sal_uInt32 nFmt = 0, USHORT nLang = LANGUAGE_SYSTEM);
|
||
|
||
public:
|
||
virtual ~SwField();
|
||
|
||
// Typ feststellen
|
||
inline SwFieldType* GetTyp() const;
|
||
|
||
// neuen Typ setzen (wird fuer das Kopieren zwischen Dokumenten benutzt)
|
||
virtual SwFieldType* ChgTyp( SwFieldType* );
|
||
|
||
// Expandierung fuer die Anzeige
|
||
virtual String Expand() const = 0;
|
||
|
||
// liefert den Namen oder den Inhalt
|
||
virtual String GetCntnt(BOOL bName = FALSE) const;
|
||
virtual SwField* Copy() const = 0;
|
||
|
||
// ResId
|
||
USHORT Which() const
|
||
#ifdef PRODUCT
|
||
{ return pType->Which(); }
|
||
#else
|
||
; // in fldbas.cxx implementiert
|
||
#endif
|
||
|
||
// TYP_ID
|
||
USHORT GetTypeId() const;
|
||
virtual USHORT GetSubType() const;
|
||
virtual void SetSubType(USHORT);
|
||
|
||
// Sprache an der Feldposition
|
||
inline USHORT GetLanguage() const;
|
||
virtual void SetLanguage(USHORT 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 BOOL QueryValue( com::sun::star::uno::Any& rVal, BYTE nMId ) const;
|
||
virtual BOOL PutValue( const com::sun::star::uno::Any& rVal, BYTE nMId );
|
||
// hat das Feld eine Action auf dem ClickHandler ? (z.B. INetFelder,..)
|
||
FASTBOOL HasClickHdl() const;
|
||
// ist es ein Fix-Feld?
|
||
FASTBOOL IsFixed() const;
|
||
|
||
BOOL IsAutomaticLanguage() const { return bIsAutomaticLanguage;}
|
||
void SetAutomaticLanguage(BOOL bSet){bIsAutomaticLanguage = bSet;}
|
||
|
||
virtual String GetDescription() const;
|
||
};
|
||
|
||
inline SwFieldType* SwField::GetTyp() const
|
||
{ return pType; }
|
||
|
||
inline sal_uInt32 SwField::GetFormat() const
|
||
{ return nFormat; }
|
||
|
||
inline USHORT SwField::GetLanguage() const
|
||
{ return nLang; }
|
||
|
||
/*--------------------------------------------------------------------
|
||
Beschreibung: Felder mit Values, die ueber der Numberformatter
|
||
formatiert werden muessen
|
||
--------------------------------------------------------------------*/
|
||
|
||
class SwValueFieldType : public SwFieldType
|
||
{
|
||
SwDoc* pDoc;
|
||
BOOL bUseFormat; // Numberformatter verwenden
|
||
|
||
protected:
|
||
SwValueFieldType( SwDoc* pDocPtr, USHORT nWhichId );
|
||
SwValueFieldType( const SwValueFieldType& rTyp );
|
||
|
||
public:
|
||
inline SwDoc* GetDoc() const { return pDoc; }
|
||
inline void SetDoc(SwDoc* pNewDoc) { pDoc = pNewDoc; }
|
||
|
||
inline BOOL UseFormat() const { return bUseFormat; }
|
||
inline void EnableFormat(BOOL bFormat = TRUE) { bUseFormat = bFormat; }
|
||
|
||
String ExpandValue(const double& rVal, sal_uInt32 nFmt, USHORT 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, USHORT nLang = LANGUAGE_SYSTEM, const double fVal = 0.0 );
|
||
SwValueField( const SwValueField& rFld );
|
||
|
||
public:
|
||
virtual ~SwValueField();
|
||
|
||
virtual SwFieldType* ChgTyp( SwFieldType* );
|
||
virtual void SetLanguage(USHORT nLng);
|
||
// os: wozu war das denn da?
|
||
// virtual void ChangeFormat(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, USHORT nLng=0) const
|
||
{ return ((SwValueFieldType*)GetTyp())->ExpandValue(rVal, nFmt, nLng); }
|
||
|
||
static sal_uInt32 GetSystemFormat(SvNumberFormatter* pFormatter, sal_uInt32 nFmt);
|
||
};
|
||
|
||
class 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;
|
||
|
||
};
|
||
|
||
/*--------------------------------------------------------------------
|
||
Beschreibung: Sortierung von Felder nach der Position
|
||
--------------------------------------------------------------------*/
|
||
class SwFieldList
|
||
{
|
||
public:
|
||
SwFieldList(SwEditShell* pShell);
|
||
~SwFieldList();
|
||
|
||
// Felder eines bestimmten Typen aufnehmen
|
||
void InsertFields(USHORT nTypeId, const String* pName=0);
|
||
|
||
USHORT Count() const;
|
||
|
||
SwField* GetLastField() const;
|
||
SwField* GetNextField() const;
|
||
|
||
private:
|
||
SwEditShell* pSh;
|
||
_SetGetExpFlds* pSrtLst;
|
||
};
|
||
|
||
|
||
#endif // FIELDIDS_ONLY
|
||
|
||
|
||
#endif // _FLDBAS_HXX
|