Kaydet (Commit) f333ee45 authored tarafından Vladimir Glazounov's avatar Vladimir Glazounov

INTEGRATION: CWS hedaburemove01 (1.1.2); FILE ADDED

2006/12/12 16:41:52 vg 1.1.2.1: #i72503# gathered global includes in one place
üst 4c3f701c
/*************************************************************************
*
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile: sbxcore.hxx,v $
*
* $Revision: 1.2 $
*
* last change: $Author: vg $ $Date: 2007-04-11 12:53:57 $
*
* 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 _SBXCORE_HXX
#define _SBXCORE_HXX
#ifndef _RTTI_HXX //autogen
#include <tools/rtti.hxx>
#endif
#ifndef _REF_HXX
#include <tools/ref.hxx>
#endif
#ifndef _DEBUG_HXX
#include <tools/debug.hxx>
#endif
#include <basic/sbxdef.hxx>
class SvStream;
class String;
class UniString;
// Das nachfolgende Makro definiert die vier (fuenf) notwendigen Methoden
// innerhalb eines SBX-Objekts. LoadPrivateData() und StorePrivateData()
// muessen selbst implementiert werden. Sie sind fuer das Laden/Speichern
// der Daten der abgeleiteten Klasse notwendig. Load() und Store() duerfen
// nicht ueberlagert werden.
// Diese Version des Makros definiert keine Load/StorePrivateData()-Methoden
#define SBX_DECL_PERSIST_NODATA( nCre, nSbxId, nVer ) \
virtual UINT32 GetCreator() const { return nCre; } \
virtual UINT16 GetVersion() const { return nVer; } \
virtual UINT16 GetSbxId() const { return nSbxId; }
#define SBX_DECL_PERSIST_NODATA_() \
virtual UINT32 GetCreator() const; \
virtual UINT16 GetVersion() const; \
virtual UINT16 GetSbxId() const;
// Diese Version des Makros definiert Load/StorePrivateData()-Methoden
#define SBX_DECL_PERSIST( nCre, nSbxId, nVer ) \
virtual BOOL LoadPrivateData( SvStream&, USHORT ); \
virtual BOOL StorePrivateData( SvStream& ) const; \
SBX_DECL_PERSIST_NODATA( nCre, nSbxId, nVer )
#define SBX_DECL_PERSIST_() \
virtual BOOL LoadPrivateData( SvStream&, USHORT ); \
virtual BOOL StorePrivateData( SvStream& ) const; \
SBX_DECL_PERSIST_NODATA_()
#define SBX_IMPL_PERSIST( C, nCre, nSbxId, nVer ) \
UINT32 C::GetCreator() const { return nCre; } \
UINT16 C::GetVersion() const { return nVer; } \
UINT16 C::GetSbxId() const { return nSbxId; }
class SbxBase;
class SbxFactory;
class SbxObject;
DBG_NAMEEX(SbxBase)
class SbxBaseImpl;
class SbxBase : virtual public SvRefBase
{
SbxBaseImpl* mpSbxBaseImpl; // Impl data
virtual BOOL LoadData( SvStream&, USHORT );
virtual BOOL StoreData( SvStream& ) const;
protected:
USHORT nFlags; // Flag-Bits
SbxBase();
SbxBase( const SbxBase& );
SbxBase& operator=( const SbxBase& );
virtual ~SbxBase();
SBX_DECL_PERSIST(0,0,0);
public:
TYPEINFO();
inline void SetFlags( USHORT n );
inline USHORT GetFlags() const;
inline void SetFlag( USHORT n );
inline void ResetFlag( USHORT n );
inline BOOL IsSet( USHORT n ) const;
inline BOOL IsReset( USHORT n ) const;
inline BOOL CanRead() const;
inline BOOL CanWrite() const;
inline BOOL IsModified() const;
inline BOOL IsConst() const;
inline BOOL IsHidden() const;
inline BOOL IsVisible() const;
virtual BOOL IsFixed() const;
virtual void SetModified( BOOL );
virtual SbxDataType GetType() const;
virtual SbxClassType GetClass() const;
virtual void Clear();
static SbxBase* Load( SvStream& );
static void Skip( SvStream& );
BOOL Store( SvStream& );
virtual BOOL LoadCompleted();
virtual BOOL StoreCompleted();
static SbxError GetError();
static void SetError( SbxError );
static BOOL IsError();
static void ResetError();
// Setzen der Factory fuer Load/Store/Create
static void AddFactory( SbxFactory* );
static void RemoveFactory( SbxFactory* );
static SbxBase* Create( UINT16, UINT32=SBXCR_SBX );
static SbxObject* CreateObject( const String& );
#if SUPD >= 507
// Sbx-Loesung als Ersatz fuer SfxBroadcaster::Enable()
static void StaticEnableBroadcasting( BOOL bEnable );
static BOOL StaticIsEnabledBroadcasting( void );
#endif
};
#ifndef SBX_BASE_DECL_DEFINED
#define SBX_BASE_DECL_DEFINED
SV_DECL_REF(SbxBase)
#endif
inline void SbxBase::SetFlags( USHORT n )
{ DBG_CHKTHIS( SbxBase, 0 ); nFlags = n; }
inline USHORT SbxBase::GetFlags() const
{ DBG_CHKTHIS( SbxBase, 0 ); return nFlags; }
inline void SbxBase::SetFlag( USHORT n )
{ DBG_CHKTHIS( SbxBase, 0 ); nFlags |= n; }
inline void SbxBase::ResetFlag( USHORT n )
{ DBG_CHKTHIS( SbxBase, 0 ); nFlags &= ~n; }
inline BOOL SbxBase::IsSet( USHORT n ) const
{ DBG_CHKTHIS( SbxBase, 0 ); return BOOL( ( nFlags & n ) != 0 ); }
inline BOOL SbxBase::IsReset( USHORT n ) const
{ DBG_CHKTHIS( SbxBase, 0 ); return BOOL( ( nFlags & n ) == 0 ); }
inline BOOL SbxBase::CanRead() const
{ DBG_CHKTHIS( SbxBase, 0 ); return IsSet( SBX_READ ); }
inline BOOL SbxBase::CanWrite() const
{ DBG_CHKTHIS( SbxBase, 0 ); return IsSet( SBX_WRITE ); }
inline BOOL SbxBase::IsModified() const
{ DBG_CHKTHIS( SbxBase, 0 ); return IsSet( SBX_MODIFIED ); }
inline BOOL SbxBase::IsConst() const
{ DBG_CHKTHIS( SbxBase, 0 ); return IsSet( SBX_CONST ); }
inline BOOL SbxBase::IsHidden() const
{ DBG_CHKTHIS( SbxBase, 0 ); return IsSet( SBX_HIDDEN ); }
inline BOOL SbxBase::IsVisible() const
{ DBG_CHKTHIS( SbxBase, 0 ); return IsReset( SBX_INVISIBLE ); }
#endif
/*************************************************************************
*
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile: sbxfac.hxx,v $
*
* $Revision: 1.2 $
*
* last change: $Author: vg $ $Date: 2007-04-11 12:54:18 $
*
* 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 __SBX_SBX_FACTORY_HXX
#define __SBX_SBX_FACTORY_HXX
#ifndef _SBXDEF_HXX
#include <basic/sbxdef.hxx>
#endif
class SbxBase;
class SbxObject;
class String;
class UniString;
class SbxFactory
{
BOOL bHandleLast; // TRUE: Factory soll zuletzt gefragt werden, da teuer
public:
SbxFactory( BOOL bLast=FALSE ) { bHandleLast = bLast; }
BOOL IsHandleLast( void ) { return bHandleLast; }
virtual SbxBase* Create( UINT16 nSbxId, UINT32 = SBXCR_SBX );
virtual SbxObject* CreateObject( const String& );
};
#endif
/*************************************************************************
*
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile: sbxform.hxx,v $
*
* $Revision: 1.2 $
*
* last change: $Author: vg $ $Date: 2007-04-11 12:54:30 $
*
* 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 _SBXFORM_HXX
#define _SBXFORM_HXX
//====================================================================
// Klasse zur Implementation des Basic-Befehls: Format$( d,formatStr )
//====================================================================
/*
Die Grammatik des Format-Strings (ein Versuch):
-----------------------------------------------
format_string := {\special_char} general_format | scientific_format {\special_char} {;format_string}
general_format := {#[,]}{0[,]}[.{0}{#}]
scientific_format := {0}[.{0}{#}](e | E)(+ | -){#}{0}
percent_char := '%'
special_char := \char | + | - | ( | ) | $ | space_char
char := all_ascii_chars
space_char := ' '
{} mehrfach wiederholt, auch null-mal
[] genau einmal oder null-mal
() Klammer, z.B. (e | E) heisst e oder E, genau einmal
Weitere vordefinierte Formate f"ur den Format-String im Format$()-Befehl:
"General Number"
"Currency"
"Fixed"
"Standard"
"Percent"
"Scientific"
"Yes/No"
"True/False"
"On/Off"
Bemerkung: fehlerhafte Format-Strings werden wie bei Visual-Basic ignoriert,
die Ausgabe ist dann ggf. 'undefiniert'.
Ascii-Buchstaben werden direkt ausgegeben.
Einschr"ankungen in Visual-Basic:
- der Exponent (wiss. Schreibweise) kann maximal 3 Stellen haben !
Einschr"ankungen der neuen Implementation:
- das '+' Zeichen als Platzhalter bei der Mantisse ist nicht erlaubt
TODO:
- Datums-Formatierung
Platzhalter sind: 'h', 'm', 's', 'y'
vordefinierte String-Konstanten/Befehle:
"AMPM", "Long Date", "Long Time"
*/
/*
es gibt zwei M"oglichkeiten eine Zahl auf einzelne
Ziffern zu untersuchen:
a) verwende sprintf()
b) verwende log10() und pow() um Ziffer
'selbst' zu pr"aparieren (hab Probleme mit Rundungsfehlern!)
*/
#define _with_sprintf // verwende M"oglichkeit a)
#ifndef _STRING_HXX
#include <tools/string.hxx>
#endif
class SbxBasicFormater {
public:
// der Konstruktor, nimmt die Zeichen f"ur den Dezimal-Punkt,
// das Tausender-Trenn-Zeichen sowie die notwendigen Resource
// Strings als Parameter.
SbxBasicFormater( sal_Unicode _cDecPoint, sal_Unicode _cThousandSep,
String _sOnStrg,
String _sOffStrg,
String _sYesStrg,
String _sNoStrg,
String _sTrueStrg,
String _sFalseStrg,
String _sCurrencyStrg,
String _sCurrencyFormatStrg );
/* der Basic-Befehl: Format$( number,format-string )
Parameter:
dNumber : die Zahl, die formatiert ausgegeben werden soll
sFormatStrg : der Format-String, z.B. ###0.0###
Return-Wert:
String mit der gew"unschten, formatierten Ausgabe
*/
String BasicFormat( double dNumber, String sFormatStrg );
String BasicFormatNull( String sFormatStrg );
private:
//*** einige Hilfsmethoden ***
//void ShowError( char *sErrMsg );
inline void ShiftString( String& sStrg, USHORT nStartPos );
inline void StrAppendChar( String& sStrg, sal_Unicode ch );
void AppendDigit( String& sStrg, short nDigit );
void LeftShiftDecimalPoint( String& sStrg );
void StrRoundDigit( String& sStrg, short nPos, BOOL& bOverflow );
void StrRoundDigit( String& sStrg, short nPos );
void ParseBack( String& sStrg, const String& sFormatStrg,
short nFormatPos );
#ifdef _with_sprintf
// Methoden "uber String-Konvertierung mit sprintf():
void InitScan( double _dNum );
void InitExp( double _dNewExp );
short GetDigitAtPosScan( short nPos, BOOL& bFoundFirstDigit );
short GetDigitAtPosExpScan( double dNewExponent, short nPos,
BOOL& bFoundFirstDigit );
short GetDigitAtPosExpScan( short nPos, BOOL& bFoundFirstDigit );
#else
// Methoden "uber direktes 'ausrechen' mit log10() und pow():
short GetDigitAtPos( double dNumber, short nPos, double& dNextNumber,
BOOL& bFoundFirstDigit );
short RoundDigit( double dNumber );
#endif
String GetPosFormatString( const String& sFormatStrg, BOOL & bFound );
String GetNegFormatString( const String& sFormatStrg, BOOL & bFound );
String Get0FormatString( const String& sFormatStrg, BOOL & bFound );
String GetNullFormatString( const String& sFormatStrg, BOOL & bFound );
short AnalyseFormatString( const String& sFormatStrg,
short& nNoOfDigitsLeft, short& nNoOfDigitsRight,
short& nNoOfOptionalDigitsLeft,
short& nNoOfExponentDigits,
short& nNoOfOptionalExponentDigits,
BOOL& bPercent, BOOL& bCurrency, BOOL& bScientific,
BOOL& bGenerateThousandSeparator,
short& nMultipleThousandSeparators );
void ScanFormatString( double dNumber, const String& sFormatStrg,
String& sReturnStrg, BOOL bCreateSign );
//*** Daten ***
sal_Unicode cDecPoint; // das Zeichen f"ur den Dezimal-Punkt
sal_Unicode cThousandSep; // das Zeichen f"ur das Tausender-Trennzeichen
// Texte zur Ausgabe:
String sOnStrg;
String sOffStrg;
String sYesStrg;
String sNoStrg;
String sTrueStrg;
String sFalseStrg;
String sCurrencyStrg;
String sCurrencyFormatStrg;
//*** tempor"are Daten f"ur die Scan-Schleife ***
//-----------------------------------------------
// Zeichenkette, in dem die Zahl als Scientific-Format abgelegt wird
String sSciNumStrg;
// Zeichenkette, in der der Exponent der Zahl abgelegt wird
String sNumExpStrg;
double dNum; // die zu scannede Zahl
short nNumExp; // der Exponent der zu scannenden Zahl
short nExpExp; // die Anzahl der Stellen im Exponenten
};
#endif
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment