diff options
Diffstat (limited to 'binfilter/bf_sw/source/core/fields/sw_dbfld.cxx')
-rw-r--r-- | binfilter/bf_sw/source/core/fields/sw_dbfld.cxx | 996 |
1 files changed, 996 insertions, 0 deletions
diff --git a/binfilter/bf_sw/source/core/fields/sw_dbfld.cxx b/binfilter/bf_sw/source/core/fields/sw_dbfld.cxx new file mode 100644 index 000000000000..435500cfddf2 --- /dev/null +++ b/binfilter/bf_sw/source/core/fields/sw_dbfld.cxx @@ -0,0 +1,996 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org 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 version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + + +#ifdef _MSC_VER +#pragma hdrstop +#endif + +#include <float.h> + +#include <bf_svx/pageitem.hxx> +#include <unotools/transliterationwrapper.hxx> + +#include <fmtfld.hxx> +#include <txtfld.hxx> + +#include <horiornt.hxx> + +#include <docary.hxx> +#include <ndtxt.hxx> +#include <dbfld.hxx> +#include <dbmgr.hxx> +#include <docfld.hxx> +#include <unofldmid.h> +namespace binfilter { +extern String& GetString( const ::com::sun::star::uno::Any& rAny, String& rStr ); //STRIP008 + +using namespace ::com::sun::star::sdbc; +using namespace ::com::sun::star; +using namespace ::rtl; + +/*-------------------------------------------------------------------- + Beschreibung: Datenbanktrenner durch Punkte fuer Anzeige ersetzen + --------------------------------------------------------------------*/ + +/*N*/ String lcl_DBTrennConv(const String& aContent) +/*N*/ { +/*N*/ String sTmp(aContent); +/*N*/ sal_Unicode* pStr = sTmp.GetBufferAccess(); +/*N*/ for( USHORT i = sTmp.Len(); i; --i, ++pStr ) +/*N*/ if( DB_DELIM == *pStr ) +/*N*/ *pStr = '.'; +/*N*/ return sTmp; +/*N*/ } + +/*-------------------------------------------------------------------- + Beschreibung: DatenbankFeldTyp + --------------------------------------------------------------------*/ + +/*N*/ SwDBFieldType::SwDBFieldType(SwDoc* pDocPtr, const String& rNam, const SwDBData& rDBData ) : +/*N*/ SwValueFieldType( pDocPtr, RES_DBFLD ), +/*N*/ aDBData(rDBData), +/*N*/ nRefCnt(0), +/*N*/ sColumn(rNam) +/*N*/ { +/*N*/ if(aDBData.sDataSource.getLength() || aDBData.sCommand.getLength()) +/*N*/ { +/*N*/ sName = aDBData.sDataSource; +/*N*/ sName += DB_DELIM; +/*N*/ sName += (String)aDBData.sCommand; +/*N*/ sName += DB_DELIM; +/*N*/ } +/*N*/ sName += GetColumnName(); +/*N*/ } +//------------------------------------------------------------------------------ + +/*N*/ SwFieldType* SwDBFieldType::Copy() const +/*N*/ { +/*N*/ SwDBFieldType* pTmp = new SwDBFieldType(GetDoc(), sColumn, aDBData); +/*N*/ return pTmp; +/*N*/ } + +//------------------------------------------------------------------------------ +/*N*/ const String& SwDBFieldType::GetName() const +/*N*/ { +/*N*/ return sName; +/*N*/ } + +//------------------------------------------------------------------------------ + +/*N*/ void SwDBFieldType::ReleaseRef() +/*N*/ { +/*N*/ ASSERT(nRefCnt > 0, "RefCount kleiner 0!"); +/*N*/ +/*N*/ if (--nRefCnt <= 0) +/*N*/ { +/*N*/ USHORT nPos = GetDoc()->GetFldTypes()->GetPos(this); +/*N*/ +/*N*/ if (nPos != USHRT_MAX) +/*N*/ { +/*N*/ GetDoc()->RemoveFldType(nPos); +/*N*/ delete this; +/*N*/ } +/*N*/ } +/*N*/ } + +/* -----------------24.02.99 14:51------------------- + * + * --------------------------------------------------*/ +/*N*/ BOOL SwDBFieldType::QueryValue( ::com::sun::star::uno::Any& rAny, BYTE nMId ) const +/*N*/ { +/*N*/ nMId &= ~CONVERT_TWIPS; +/*N*/ switch( nMId ) +/*N*/ { +/*N*/ case FIELD_PROP_PAR2: +/*N*/ rAny <<= aDBData.sDataSource; +/*N*/ break; +/*N*/ case FIELD_PROP_PAR4: +/*N*/ rAny <<= aDBData.sCommand; +/*N*/ break; +/*N*/ case FIELD_PROP_PAR1: +/*N*/ rAny <<= OUString(sColumn); +/*N*/ break; +/*N*/ case FIELD_PROP_SHORT1: +/*N*/ rAny <<= aDBData.nCommandType; +/*N*/ break; +/*N*/ default: +/*?*/ DBG_ERROR("illegal property"); +/*N*/ } +/*N*/ return TRUE; +/*N*/ } +/* -----------------24.02.99 14:51------------------- + * + * --------------------------------------------------*/ +/*N*/ BOOL SwDBFieldType::PutValue( const ::com::sun::star::uno::Any& rAny, BYTE nMId ) +/*N*/ { +/*N*/ nMId &= ~CONVERT_TWIPS; +/*N*/ switch( nMId ) +/*N*/ { +/*N*/ case FIELD_PROP_PAR2: +/*?*/ rAny >>= aDBData.sDataSource; +/*?*/ break; +/*?*/ case FIELD_PROP_PAR4: +/*?*/ rAny >>= aDBData.sCommand; +/*?*/ break; +/*?*/ case FIELD_PROP_PAR1: +/*?*/ { +/*?*/ String sTmp; +/*?*/ ::binfilter::GetString( rAny, sTmp ); +/*?*/ if( sTmp != sColumn ) +/*?*/ { +/*?*/ sColumn = sTmp; +/*?*/ SwClientIter aIter( *this ); +/*?*/ SwFmtFld* pFld = (SwFmtFld*)aIter.First( TYPE( SwFmtFld )); +/*?*/ while(pFld) +/*?*/ { +/*?*/ // Feld im Undo? +/*?*/ SwTxtFld *pTxtFld = pFld->GetTxtFld(); +/*?*/ if(pTxtFld && pTxtFld->GetTxtNode().GetNodes().IsDocNodes() ) +/*?*/ { +/*?*/ SwDBField* pDBField = (SwDBField*)pFld->GetFld(); +/*?*/ pDBField->ClearInitialized(); +/*?*/ pDBField->InitContent(); +/*?*/ } +/*?*/ pFld = (SwFmtFld*)aIter.Next(); +/*?*/ } +/*?*/ } +/*?*/ } +/*?*/ break; +/*N*/ case FIELD_PROP_SHORT1: +/*N*/ rAny >>= aDBData.nCommandType; +/*N*/ break; +/*N*/ default: +/*?*/ DBG_ERROR("illegal property"); +/*N*/ } +/*N*/ return TRUE; +/*N*/ } +/*-------------------------------------------------------------------- + Beschreibung: SwDBField + --------------------------------------------------------------------*/ + +/*N*/ SwDBField::SwDBField(SwDBFieldType* pTyp, ULONG nFmt) +/*N*/ : SwValueField(pTyp, nFmt), +/*N*/ bValidValue(FALSE), +/*N*/ bIsInBodyTxt(TRUE), +/*N*/ bInitialized(FALSE), +/*N*/ nSubType(0) +/*N*/ { +/*N*/ if (GetTyp()) +/*N*/ ((SwDBFieldType*)GetTyp())->AddRef(); +/*N*/ InitContent(); +/*N*/ } + +//------------------------------------------------------------------------------ + +/*N*/ SwDBField::~SwDBField() +/*N*/ { +/*N*/ if (GetTyp()) +/*N*/ ((SwDBFieldType*)GetTyp())->ReleaseRef(); +/*N*/ } + +//------------------------------------------------------------------------------ + +/*N*/ void SwDBField::InitContent() +/*N*/ { +/*N*/ if (!IsInitialized()) +/*N*/ { +/*N*/ aContent = '<'; +/*N*/ aContent += ((SwDBFieldType*)GetTyp())->GetColumnName(); +/*N*/ aContent += '>'; +/*N*/ } +/*N*/ } + +//------------------------------------------------------------------------------ + +/*N*/ void SwDBField::InitContent(const String& rExpansion) +/*N*/ { +/*N*/ if (rExpansion.Len() > 2) +/*N*/ { +/*N*/ if (rExpansion.GetChar(0) == '<' && +/*N*/ rExpansion.GetChar(rExpansion.Len() - 1) == '>') +/*N*/ { +/*N*/ String sColumn( rExpansion.Copy( 1, rExpansion.Len() - 2 ) ); +/*N*/ if( ::binfilter::GetAppCmpStrIgnore().isEqual( sColumn, +/*N*/ ((SwDBFieldType *)GetTyp())->GetColumnName() )) +/*N*/ { +/*N*/ InitContent(); +/*N*/ return; +/*N*/ } +/*N*/ } +/*N*/ } +/*N*/ SetExpansion( rExpansion ); +/*N*/ } + +//------------------------------------------------------------------------------ + +/*N*/ String SwDBField::GetOldContent() +/*N*/ { +/*N*/ String sOldExpand = Expand(); +/*N*/ String sNewExpand = sOldExpand; +/*N*/ BOOL bOldInit = bInitialized; +/*N*/ +/*N*/ bInitialized = FALSE; +/*N*/ InitContent(); +/*N*/ bInitialized = bOldInit; +/*N*/ +/*N*/ if( ::binfilter::GetAppCmpStrIgnore().isEqual( sNewExpand, Expand() ) ) +/*N*/ { +/*N*/ sNewExpand = '<'; +/*N*/ sNewExpand += ((SwDBFieldType *)GetTyp())->GetColumnName(); +/*N*/ sNewExpand += '>'; +/*N*/ } +/*N*/ SetExpansion( sOldExpand ); +/*N*/ +/*N*/ return sNewExpand; +/*N*/ } + +//------------------------------------------------------------------------------ + +/*N*/ String SwDBField::Expand() const +/*N*/ { +/*N*/ String sRet; +/*N*/ if(0 ==(GetSubType() & SUB_INVISIBLE)) +/*N*/ sRet = lcl_DBTrennConv(aContent); +/*N*/ return sRet; +/*N*/ } + +//------------------------------------------------------------------------------ + +/*N*/ SwField* SwDBField::Copy() const +/*N*/ { +/*N*/ SwDBField *pTmp = new SwDBField((SwDBFieldType*)GetTyp(), GetFormat()); +/*N*/ pTmp->aContent = aContent; +/*N*/ pTmp->bIsInBodyTxt = bIsInBodyTxt; +/*N*/ pTmp->bValidValue = bValidValue; +/*N*/ pTmp->bInitialized = bInitialized; +/*N*/ pTmp->nSubType = nSubType; +/*N*/ pTmp->SetValue(GetValue()); +/*N*/ +/*N*/ return pTmp; +/*N*/ } + + +//------------------------------------------------------------------------------ + +void SwDBField::ChgValue( double d, BOOL bVal ) +{ + bValidValue = bVal; + SetValue(d); + + if( bValidValue ) + aContent = ((SwValueFieldType*)GetTyp())->ExpandValue(d, GetFormat(), GetLanguage()); +} + +/*-------------------------------------------------------------------- + Beschreibung: + --------------------------------------------------------------------*/ + +SwFieldType* SwDBField::ChgTyp( SwFieldType* pNewType ) +{ + SwFieldType* pOld = SwValueField::ChgTyp( pNewType ); + + ((SwDBFieldType*)pNewType)->AddRef(); + ((SwDBFieldType*)pOld)->ReleaseRef(); + + return pOld; +} + +/*-------------------------------------------------------------------- + Beschreibung: Aktuellen Field-Value holen und chachen + --------------------------------------------------------------------*/ + +/*N*/ void SwDBField::Evaluate() + /*N*/ { DBG_ERROR("STRIP"); +/*N*/ } + +/*-------------------------------------------------------------------- + Beschreibung: Namen erfragen + --------------------------------------------------------------------*/ + +const String& SwDBField::GetPar1() const +{ + return ((SwDBFieldType*)GetTyp())->GetName(); +} + +/*-------------------------------------------------------------------- + Beschreibung: + --------------------------------------------------------------------*/ + +/*N*/ USHORT SwDBField::GetSubType() const +/*N*/ { +/*N*/ return nSubType; +/*N*/ } + +/*-------------------------------------------------------------------- + Beschreibung: + --------------------------------------------------------------------*/ + +/*N*/ void SwDBField::SetSubType(USHORT nType) +/*N*/ { +/*N*/ nSubType = nType; +/*N*/ } + +/*-----------------06.03.98 16:15------------------- + +--------------------------------------------------*/ +/*N*/ BOOL SwDBField::QueryValue( ::com::sun::star::uno::Any& rAny, BYTE nMId ) const +/*N*/ { +/*N*/ nMId &= ~CONVERT_TWIPS; +/*N*/ switch( nMId ) +/*N*/ { +/*N*/ case FIELD_PROP_BOOL1: +/*N*/ { +/*N*/ BOOL bTemp = 0 == (GetSubType()&SUB_OWN_FMT); +/*N*/ rAny.setValue(&bTemp, ::getBooleanCppuType()); +/*N*/ } +/*N*/ break; +/*N*/ case FIELD_PROP_BOOL2: +/*N*/ { +/*N*/ sal_Bool bVal = 0 == (GetSubType() & SUB_INVISIBLE); +/*N*/ rAny.setValue(&bVal, ::getBooleanCppuType()); +/*N*/ } +/*N*/ break; +/*N*/ case FIELD_PROP_FORMAT: +/*N*/ rAny <<= (sal_Int32)GetFormat(); +/*N*/ break; +/*N*/ case FIELD_PROP_PAR1: +/*?*/ rAny <<= OUString(aContent); +/*?*/ break; +/*?*/ default: +/*?*/ DBG_ERROR("illegal property"); +/*N*/ } +/*N*/ return TRUE; +/*N*/ +/*N*/ } +/*-----------------06.03.98 16:15------------------- + +--------------------------------------------------*/ +/*N*/ BOOL SwDBField::PutValue( const ::com::sun::star::uno::Any& rAny, BYTE nMId ) +/*N*/ { +/*N*/ nMId &= ~CONVERT_TWIPS; +/*N*/ switch( nMId ) +/*N*/ { +/*N*/ case FIELD_PROP_BOOL1: +/*N*/ if( *(sal_Bool*)rAny.getValue() ) +/*N*/ SetSubType(GetSubType()&~SUB_OWN_FMT); +/*N*/ else +/*N*/ SetSubType(GetSubType()|SUB_OWN_FMT); +/*N*/ break; +/*N*/ case FIELD_PROP_BOOL2: +/*N*/ { +/*N*/ USHORT nSubType = GetSubType(); +/*N*/ sal_Bool bVisible; +/*N*/ if(!(rAny >>= bVisible)) +/*N*/ return FALSE; +/*N*/ if(bVisible) +/*N*/ nSubType &= ~SUB_INVISIBLE; +/*N*/ else +/*N*/ nSubType |= SUB_INVISIBLE; +/*N*/ SetSubType(nSubType); +/*N*/ //invalidate text node +/*N*/ if(GetTyp()) +/*N*/ { +/*N*/ SwClientIter aIter( *GetTyp() ); +/*N*/ SwFmtFld* pFld = (SwFmtFld*)aIter.First( TYPE( SwFmtFld )); +/*N*/ while(pFld) +/*N*/ { +/*N*/ SwTxtFld *pTxtFld = pFld->GetTxtFld(); +/*N*/ if(pTxtFld && (SwDBField*)pFld->GetFld() == this ) +/*N*/ { +/*N*/ //notify the change +/*N*/ pTxtFld->NotifyContentChange(*pFld); +/*N*/ break; +/*N*/ } +/*N*/ pFld = (SwFmtFld*)aIter.Next(); +/*N*/ } +/*N*/ } +/*N*/ } +/*N*/ break; +/*N*/ case FIELD_PROP_FORMAT: +/*N*/ { +/*N*/ sal_Int32 nTemp; +/*N*/ rAny >>= nTemp; +/*N*/ SetFormat(nTemp); +/*N*/ } +/*N*/ break; +/*N*/ case FIELD_PROP_PAR1: +/*N*/ ::binfilter::GetString( rAny, aContent ); +/*N*/ break; +/*N*/ default: +/*?*/ DBG_ERROR("illegal property"); +/*N*/ } +/*N*/ return TRUE; +/*N*/ } + +/*-------------------------------------------------------------------- + Beschreibung: Basisklasse fuer alle weiteren Datenbankfelder + --------------------------------------------------------------------*/ + +/*N*/ SwDBNameInfField::SwDBNameInfField(SwFieldType* pTyp, const SwDBData& rDBData, ULONG nFmt) : +/*N*/ SwField(pTyp, nFmt), +/*N*/ aDBData(rDBData), +/*N*/ nSubType(0) +/*N*/ { +/*N*/ } + +//------------------------------------------------------------------------------ + +/*N*/ SwDBData SwDBNameInfField::GetDBData(SwDoc* pDoc) +/*N*/ { +/*N*/ SwDBData aRet; +/*N*/ if(aDBData.sDataSource.getLength()) +/*N*/ aRet = aDBData; +/*N*/ else +/*N*/ aRet = pDoc->GetDBData(); +/*N*/ return aRet; +/*N*/ } + +//------------------------------------------------------------------------------ + +/*-----------------06.03.98 16:55------------------- + +--------------------------------------------------*/ +/*N*/ BOOL SwDBNameInfField::QueryValue( ::com::sun::star::uno::Any& rAny, BYTE nMId ) const +/*N*/ { +/*N*/ nMId &= ~CONVERT_TWIPS; +/*N*/ switch( nMId ) +/*N*/ { +/*N*/ case FIELD_PROP_PAR1: +/*N*/ rAny <<= aDBData.sDataSource; +/*N*/ break; +/*N*/ case FIELD_PROP_PAR2: +/*N*/ rAny <<= aDBData.sCommand; +/*N*/ break; +/*N*/ case FIELD_PROP_SHORT1: +/*N*/ rAny <<= aDBData.nCommandType; +/*N*/ break; +/*N*/ case FIELD_PROP_BOOL2: +/*N*/ { +/*N*/ sal_Bool bVal = 0 == (GetSubType() & SUB_INVISIBLE); +/*N*/ rAny.setValue(&bVal, ::getBooleanCppuType()); +/*N*/ } +/*N*/ break; +/*N*/ default: +/*?*/ DBG_ERROR("illegal property"); +/*N*/ } +/*N*/ return TRUE; +/*N*/ } +/*-----------------06.03.98 16:55------------------- + +--------------------------------------------------*/ +BOOL SwDBNameInfField::PutValue( const ::com::sun::star::uno::Any& rAny, BYTE nMId ) +{ + nMId &= ~CONVERT_TWIPS; + switch( nMId ) + { + case FIELD_PROP_PAR1: + rAny >>= aDBData.sDataSource; + break; + case FIELD_PROP_PAR2: + rAny >>= aDBData.sCommand; + break; + case FIELD_PROP_SHORT1: + rAny >>= aDBData.nCommandType; + break; + case FIELD_PROP_BOOL2: + { + USHORT nSubType = GetSubType(); + sal_Bool bVisible; + if(!(rAny >>= bVisible)) + return FALSE; + if(bVisible) + nSubType &= ~SUB_INVISIBLE; + else + nSubType |= SUB_INVISIBLE; + SetSubType(nSubType); + } + break; + default: + DBG_ERROR("illegal property"); + } + return TRUE; +} +/* -----------------4/10/2003 15:03------------------ + + --------------------------------------------------*/ +/*N*/ USHORT SwDBNameInfField::GetSubType() const +/*N*/ { +/*N*/ return nSubType; +/*N*/ } +/* -----------------4/10/2003 15:03------------------ + + --------------------------------------------------*/ +/*N*/ void SwDBNameInfField::SetSubType(USHORT nType) +/*N*/ { +/*N*/ nSubType = nType; +/*N*/ } + +/*-------------------------------------------------------------------- + Beschreibung: NaechsterDatensatz + --------------------------------------------------------------------*/ + +/*N*/ SwDBNextSetFieldType::SwDBNextSetFieldType() +/*N*/ : SwFieldType( RES_DBNEXTSETFLD ) +/*N*/ { +/*N*/ } + +//------------------------------------------------------------------------------ + +/*N*/ SwFieldType* SwDBNextSetFieldType::Copy() const +/*N*/ { + SwDBNextSetFieldType* pTmp = new SwDBNextSetFieldType(); + return pTmp; +/*N*/ } +/*-------------------------------------------------------------------- + Beschreibung: SwDBSetField + --------------------------------------------------------------------*/ + +/*N*/ SwDBNextSetField::SwDBNextSetField(SwDBNextSetFieldType* pTyp, +/*N*/ const String& rCond, +/*N*/ const String& rDummy, +/*N*/ const SwDBData& rDBData) : +/*N*/ SwDBNameInfField(pTyp, rDBData), aCond(rCond), bCondValid(TRUE) +/*N*/ {} + +//------------------------------------------------------------------------------ + +/*N*/ String SwDBNextSetField::Expand() const +/*N*/ { +/*N*/ return aEmptyStr; +/*N*/ } + +//------------------------------------------------------------------------------ + +/*N*/ SwField* SwDBNextSetField::Copy() const +/*N*/ { +/*N*/ SwDBNextSetField *pTmp = new SwDBNextSetField((SwDBNextSetFieldType*)GetTyp(), +/*N*/ aCond, aEmptyStr, GetDBData()); +/*N*/ pTmp->SetSubType(GetSubType()); +/*N*/ pTmp->bCondValid = bCondValid; +/*N*/ return pTmp; +/*N*/ } +//------------------------------------------------------------------------------ + +/*N*/ void SwDBNextSetField::Evaluate(SwDoc* pDoc) +/*N*/ { +/*N*/ SwNewDBMgr* pMgr = pDoc->GetNewDBMgr(); +/*N*/ const SwDBData& rData = GetDBData(); +/*N*/ if( !bCondValid || +/*N*/ !pMgr || !pMgr->IsDataSourceOpen(rData.sDataSource, rData.sCommand, sal_False)) +/*N*/ return ; +/*N*/ pMgr->ToNextRecord(rData.sDataSource, rData.sCommand); +/*N*/ } + +/*-------------------------------------------------------------------- + Beschreibung: Bedingung + --------------------------------------------------------------------*/ + +/*N*/ const String& SwDBNextSetField::GetPar1() const +/*N*/ { +/*N*/ return aCond; +/*N*/ } + +void SwDBNextSetField::SetPar1(const String& rStr) +{ + aCond = rStr; +} +/*-----------------06.03.98 16:16------------------- + +--------------------------------------------------*/ +/*N*/ BOOL SwDBNextSetField::QueryValue( uno::Any& rAny, BYTE nMId ) const +/*N*/ { +/*N*/ nMId &= ~CONVERT_TWIPS; +/*N*/ BOOL bRet = TRUE; +/*N*/ switch( nMId ) +/*N*/ { +/*N*/ case FIELD_PROP_PAR3: +/*N*/ rAny <<= OUString(aCond); +/*N*/ break; +/*N*/ default: +/*N*/ bRet = SwDBNameInfField::QueryValue( rAny, nMId ); +/*N*/ } +/*N*/ return bRet; +/*N*/ } +/*-----------------06.03.98 16:16------------------- + +--------------------------------------------------*/ +BOOL SwDBNextSetField::PutValue( const ::com::sun::star::uno::Any& rAny, BYTE nMId ) +{ + nMId &= ~CONVERT_TWIPS; + BOOL bRet = TRUE; + switch( nMId ) + { + case FIELD_PROP_PAR3: + ::binfilter::GetString( rAny, aCond ); + break; + default: + bRet = SwDBNameInfField::PutValue( rAny, nMId ); + } + return bRet; +} + +/*-------------------------------------------------------------------- + Beschreibung: + --------------------------------------------------------------------*/ +/* +String SwDBNextSetField::GetPar2() const +{ + return GetDBName(); +} + +void SwDBNextSetField::SetPar2(const String& rStr) +{ + GetDBName() = rStr; +} +*/ + +/*-------------------------------------------------------------------- + Beschreibung: Datensatz mit bestimmter ID + --------------------------------------------------------------------*/ + +/*N*/ SwDBNumSetFieldType::SwDBNumSetFieldType() : +/*N*/ SwFieldType( RES_DBNUMSETFLD ) +/*N*/ { +/*N*/ } + +//------------------------------------------------------------------------------ + +/*N*/ SwFieldType* SwDBNumSetFieldType::Copy() const +/*N*/ { + SwDBNumSetFieldType* pTmp = new SwDBNumSetFieldType(); + return pTmp; +/*N*/ } + +/*-------------------------------------------------------------------- + Beschreibung: SwDBSetField + --------------------------------------------------------------------*/ + +/*N*/ SwDBNumSetField::SwDBNumSetField(SwDBNumSetFieldType* pTyp, +/*N*/ const String& rCond, +/*N*/ const String& rDBNum, +/*N*/ const SwDBData& rDBData) : +/*N*/ SwDBNameInfField(pTyp, rDBData), +/*N*/ aCond(rCond), +/*N*/ aPar2(rDBNum), +/*N*/ bCondValid(TRUE) +/*N*/ {} + +//------------------------------------------------------------------------------ + +/*N*/ String SwDBNumSetField::Expand() const +/*N*/ { +/*N*/ return aEmptyStr; +/*N*/ } + +//------------------------------------------------------------------------------ + +/*N*/ SwField* SwDBNumSetField::Copy() const +/*N*/ { +/*N*/ SwDBNumSetField *pTmp = new SwDBNumSetField((SwDBNumSetFieldType*)GetTyp(), +/*N*/ aCond, aPar2, GetDBData()); +/*N*/ pTmp->bCondValid = bCondValid; +/*N*/ pTmp->SetSubType(GetSubType()); +/*N*/ return pTmp; +/*N*/ } + +/*N*/ void SwDBNumSetField::Evaluate(SwDoc* pDoc) +/*N*/ { +/*N*/ SwNewDBMgr* pMgr = pDoc->GetNewDBMgr(); +/*N*/ const SwDBData& aTmpData = GetDBData(); +/*N*/ +/*N*/ if( bCondValid && pMgr && pMgr->IsInMerge() && +/*N*/ pMgr->IsDataSourceOpen(aTmpData.sDataSource, aTmpData.sCommand, sal_True)) +/*N*/ { // Bedingug OK -> aktuellen Set einstellen +/*N*/ pMgr->ToRecordId(Max((USHORT)aPar2.ToInt32(), USHORT(1))-1); +/*N*/ } +/*N*/ } + +/*-------------------------------------------------------------------- + Beschreibung: LogDBName + --------------------------------------------------------------------*/ + +/*N*/ const String& SwDBNumSetField::GetPar1() const +/*N*/ { +/*N*/ return aCond; +/*N*/ } + +void SwDBNumSetField::SetPar1(const String& rStr) +{ + aCond = rStr; +} + +/*-------------------------------------------------------------------- + Beschreibung: Bedingung + --------------------------------------------------------------------*/ + +/*N*/ String SwDBNumSetField::GetPar2() const +/*N*/ { +/*N*/ return aPar2; +/*N*/ } + +void SwDBNumSetField::SetPar2(const String& rStr) +{ + aPar2 = rStr; +} +/*-----------------06.03.98 16:16------------------- + +--------------------------------------------------*/ +/*N*/ BOOL SwDBNumSetField::QueryValue( ::com::sun::star::uno::Any& rAny, BYTE nMId ) const +/*N*/ { +/*N*/ nMId &= ~CONVERT_TWIPS; +/*N*/ BOOL bRet = TRUE; +/*N*/ switch( nMId ) +/*N*/ { +/*N*/ case FIELD_PROP_PAR3: +/*N*/ rAny <<= OUString(aCond); +/*N*/ break; +/*N*/ case FIELD_PROP_FORMAT: +/*N*/ rAny <<= (sal_Int32)aPar2.ToInt32(); +/*N*/ break; +/*N*/ default: +/*N*/ bRet = SwDBNameInfField::QueryValue(rAny, nMId ); +/*N*/ } +/*N*/ return bRet; +/*N*/ } +/*-----------------06.03.98 16:16------------------- + +--------------------------------------------------*/ +BOOL SwDBNumSetField::PutValue( const ::com::sun::star::uno::Any& rAny, BYTE nMId ) +{ + nMId &= ~CONVERT_TWIPS; + BOOL bRet = TRUE; + switch( nMId ) + { + case FIELD_PROP_PAR3: + ::binfilter::GetString( rAny, aCond ); + break; + case FIELD_PROP_FORMAT: + { + sal_Int32 nVal; + rAny >>= nVal; + aPar2 = String::CreateFromInt32(nVal); + } + break; + default: + bRet = SwDBNameInfField::PutValue(rAny, nMId ); + } + return bRet; +} + +/*-------------------------------------------------------------------- + Beschreibung: SwDBNameFieldType + --------------------------------------------------------------------*/ + +/*N*/ SwDBNameFieldType::SwDBNameFieldType(SwDoc* pDocument) +/*N*/ : SwFieldType( RES_DBNAMEFLD ) +/*N*/ { +/*N*/ pDoc = pDocument; +/*N*/ } +//------------------------------------------------------------------------------ + +/*N*/ String SwDBNameFieldType::Expand(ULONG nFmt) const +/*N*/ { +/*N*/ ASSERT( nFmt >= FF_BEGIN && nFmt < FF_END, "Expand: kein guelt. Fmt!" ); +/*N*/ const SwDBData aData = pDoc->GetDBData(); +/*N*/ String sRet(aData.sDataSource); +/*N*/ sRet += '.'; +/*N*/ sRet += (String)aData.sCommand; +/*N*/ return sRet; +/*N*/ } +//------------------------------------------------------------------------------ + +/*N*/ SwFieldType* SwDBNameFieldType::Copy() const +/*N*/ { + SwDBNameFieldType *pTmp = new SwDBNameFieldType(pDoc); + return pTmp; +/*N*/ } + +//------------------------------------------------------------------------------ + +/*-------------------------------------------------------------------- + Beschreibung: Name der angedockten DB + --------------------------------------------------------------------*/ + +/*N*/ SwDBNameField::SwDBNameField(SwDBNameFieldType* pTyp, const SwDBData& rDBData, ULONG nFmt) +/*N*/ : SwDBNameInfField(pTyp, rDBData, nFmt) +/*N*/ {} + +//------------------------------------------------------------------------------ + +/*N*/ String SwDBNameField::Expand() const +/*N*/ { +/*N*/ String sRet; +/*N*/ if(0 ==(GetSubType() & SUB_INVISIBLE)) +/*N*/ sRet = ((SwDBNameFieldType*)GetTyp())->Expand(GetFormat()); +/*N*/ return sRet; +/*N*/ } + +//------------------------------------------------------------------------------ + +/*N*/ SwField* SwDBNameField::Copy() const +/*N*/ { +/*N*/ SwDBNameField *pTmp = new SwDBNameField((SwDBNameFieldType*)GetTyp(), GetDBData()); +/*N*/ pTmp->ChangeFormat(GetFormat()); +/*N*/ pTmp->SetLanguage(GetLanguage()); +/*N*/ pTmp->SetSubType(GetSubType()); +/*N*/ return pTmp; +/*N*/ } + +/*-----------------06.03.98 16:16------------------- + +--------------------------------------------------*/ +/*N*/ BOOL SwDBNameField::QueryValue( ::com::sun::star::uno::Any& rAny, BYTE nMId ) const +/*N*/ { +/*N*/ return SwDBNameInfField::QueryValue(rAny, nMId ); +/*N*/ } +/*-----------------06.03.98 16:16------------------- + +--------------------------------------------------*/ +BOOL SwDBNameField::PutValue( const ::com::sun::star::uno::Any& rAny, BYTE nMId ) +{ + return SwDBNameInfField::PutValue(rAny, nMId ); +} +/*-------------------------------------------------------------------- + Beschreibung: SwDBNameFieldType + --------------------------------------------------------------------*/ + +/*N*/ SwDBSetNumberFieldType::SwDBSetNumberFieldType() +/*N*/ : SwFieldType( RES_DBSETNUMBERFLD ) +/*N*/ { +/*N*/ } + +//------------------------------------------------------------------------------ + +/*N*/ SwFieldType* SwDBSetNumberFieldType::Copy() const +/*N*/ { + SwDBSetNumberFieldType *pTmp = new SwDBSetNumberFieldType; + return pTmp; +/*N*/ } + +//------------------------------------------------------------------------------ + +/*-------------------------------------------------------------------- + Beschreibung: SetNumber der angedockten DB + --------------------------------------------------------------------*/ + +/*N*/ SwDBSetNumberField::SwDBSetNumberField(SwDBSetNumberFieldType* pTyp, +/*N*/ const SwDBData& rDBData, +/*N*/ ULONG nFmt) +/*N*/ : SwDBNameInfField(pTyp, rDBData, nFmt), nNumber(0) +/*N*/ {} + +//------------------------------------------------------------------------------ + +/*N*/ String SwDBSetNumberField::Expand() const +/*N*/ { +/*N*/ if(0 !=(GetSubType() & SUB_INVISIBLE) || nNumber == 0) +/*?*/ return aEmptyStr; +/*N*/ else +/*N*/ return FormatNumber((USHORT)nNumber, GetFormat()); +/*N*/ //return(nNumber == 0 ? aEmptyStr : FormatNumber(nNumber, GetFormat())); +/*N*/ } + +//------------------------------------------------------------------------------ + +/*N*/ void SwDBSetNumberField::Evaluate(SwDoc* pDoc) +/*N*/ { +/*N*/ SwNewDBMgr* pMgr = pDoc->GetNewDBMgr(); +/*N*/ +/*N*/ const SwDBData& aTmpData = GetDBData(); +/*N*/ if (!pMgr || !pMgr->IsInMerge() || +/*N*/ !pMgr->IsDataSourceOpen(aTmpData.sDataSource, aTmpData.sCommand, sal_False)) +/*N*/ return; +/*N*/ nNumber = pMgr->GetSelectedRecordId(); +/*N*/ } + + +//------------------------------------------------------------------------------ + +/*N*/ SwField* SwDBSetNumberField::Copy() const +/*N*/ { +/*N*/ SwDBSetNumberField *pTmp = +/*N*/ new SwDBSetNumberField((SwDBSetNumberFieldType*)GetTyp(), GetDBData(), GetFormat()); +/*N*/ pTmp->SetLanguage(GetLanguage()); +/*N*/ pTmp->SetSetNumber(nNumber); +/*N*/ pTmp->SetSubType(GetSubType()); +/*N*/ return pTmp; +/*N*/ } +/*-----------------06.03.98 16:15------------------- + +--------------------------------------------------*/ +/*N*/ BOOL SwDBSetNumberField::QueryValue( ::com::sun::star::uno::Any& rAny, BYTE nMId ) const +/*N*/ { +/*N*/ BOOL bRet = TRUE; +/*N*/ nMId &= ~CONVERT_TWIPS; +/*N*/ switch( nMId ) +/*N*/ { +/*N*/ case FIELD_PROP_USHORT1: +/*N*/ rAny <<= (sal_Int16)GetFormat(); +/*N*/ break; +/*N*/ case FIELD_PROP_FORMAT: +/*N*/ rAny <<= nNumber; +/*N*/ break; +/*N*/ default: +/*N*/ bRet = SwDBNameInfField::QueryValue( rAny, nMId ); +/*N*/ } +/*N*/ return bRet; +/*N*/ } +/*-----------------06.03.98 16:15------------------- + +--------------------------------------------------*/ +BOOL SwDBSetNumberField::PutValue( const ::com::sun::star::uno::Any& rAny, BYTE nMId ) +{ + BOOL bRet = TRUE; + nMId &= ~CONVERT_TWIPS; + switch( nMId ) + { + case FIELD_PROP_USHORT1: + { + sal_Int16 nSet; + rAny >>= nSet; + if(nSet < (INT16) SVX_NUMBER_NONE ) + SetFormat(nSet); + else + //exception(wrong_value) + ; + } + break; + case FIELD_PROP_FORMAT: + rAny >>= nNumber; + break; + default: + bRet = SwDBNameInfField::PutValue( rAny, nMId ); + } + return bRet; +} + + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |