summaryrefslogtreecommitdiffstats
path: root/bf_sw/source/core/fields/sw_dbfld.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'bf_sw/source/core/fields/sw_dbfld.cxx')
-rw-r--r--bf_sw/source/core/fields/sw_dbfld.cxx904
1 files changed, 904 insertions, 0 deletions
diff --git a/bf_sw/source/core/fields/sw_dbfld.cxx b/bf_sw/source/core/fields/sw_dbfld.cxx
new file mode 100644
index 000000000..f7f895051
--- /dev/null
+++ b/bf_sw/source/core/fields/sw_dbfld.cxx
@@ -0,0 +1,904 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * 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 .
+ */
+
+
+#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 );
+
+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
+ --------------------------------------------------------------------*/
+
+SwDBFieldType::SwDBFieldType(SwDoc* pDocPtr, const String& rNam, const SwDBData& rDBData )
+ : SwValueFieldType( pDocPtr, RES_DBFLD )
+ , aDBData(rDBData)
+ , sColumn(rNam)
+ , nRefCnt(0)
+{
+ if(aDBData.sDataSource.getLength() || aDBData.sCommand.getLength())
+ {
+ sName = aDBData.sDataSource;
+ sName += DB_DELIM;
+ sName += (String)aDBData.sCommand;
+ sName += DB_DELIM;
+ }
+ sName += GetColumnName();
+}
+
+//------------------------------------------------------------------------------
+
+/*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*/ OSL_ENSURE(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*/ }
+
+
+/*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:
+/*?*/ OSL_FAIL("illegal property");
+/*N*/ }
+/*N*/ return TRUE;
+/*N*/ }
+
+/*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:
+/*?*/ OSL_FAIL("illegal property");
+/*N*/ }
+/*N*/ return TRUE;
+/*N*/ }
+/*--------------------------------------------------------------------
+ Beschreibung: SwDBField
+ --------------------------------------------------------------------*/
+
+/*N*/ SwDBField::SwDBField(SwDBFieldType* pTyp, ULONG nFmt)
+/*N*/ : SwValueField(pTyp, nFmt)
+/*N*/ , nSubType(0)
+/*N*/ , bIsInBodyTxt(TRUE)
+/*N*/ , bValidValue(FALSE)
+/*N*/ , bInitialized(FALSE)
+/*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::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: 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*/ }
+
+
+/*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:
+/*?*/ OSL_FAIL("illegal property");
+/*N*/ }
+/*N*/ return TRUE;
+/*N*/
+/*N*/ }
+
+/*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 nSubType1 = GetSubType();
+/*N*/ sal_Bool bVisible(false);
+/*N*/ if(!(rAny >>= bVisible))
+/*N*/ return FALSE;
+/*N*/ if(bVisible)
+/*N*/ nSubType1 &= ~SUB_INVISIBLE;
+/*N*/ else
+/*N*/ nSubType1 |= SUB_INVISIBLE;
+/*N*/ SetSubType(nSubType1);
+/*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(0);
+/*N*/ rAny >>= nTemp;
+/*N*/ SetFormat(nTemp);
+/*N*/ }
+/*N*/ break;
+/*N*/ case FIELD_PROP_PAR1:
+/*N*/ ::binfilter::GetString( rAny, aContent );
+/*N*/ break;
+/*N*/ default:
+/*?*/ OSL_FAIL("illegal property");
+/*N*/ }
+/*N*/ return TRUE;
+/*N*/ }
+
+/*--------------------------------------------------------------------
+ Beschreibung: Basisklasse fuer alle weiteren Datenbankfelder
+ --------------------------------------------------------------------*/
+
+SwDBNameInfField::SwDBNameInfField(SwFieldType* pTyp, const SwDBData& rDBData, ULONG nFmt)
+ : SwField(pTyp, nFmt)
+ , aDBData(rDBData)
+ , nSubType(0)
+{
+}
+
+//------------------------------------------------------------------------------
+
+/*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*/ }
+
+//------------------------------------------------------------------------------
+
+
+/*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:
+/*?*/ OSL_FAIL("illegal property");
+/*N*/ }
+/*N*/ return TRUE;
+/*N*/ }
+
+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 nSubType2 = GetSubType();
+ sal_Bool bVisible(sal_False);
+ if(!(rAny >>= bVisible))
+ return FALSE;
+ if(bVisible)
+ nSubType2 &= ~SUB_INVISIBLE;
+ else
+ nSubType2 |= SUB_INVISIBLE;
+ SetSubType(nSubType2);
+ }
+ break;
+ default:
+ OSL_FAIL("illegal property");
+ }
+ return TRUE;
+}
+
+/*N*/ USHORT SwDBNameInfField::GetSubType() const
+/*N*/ {
+/*N*/ return nSubType;
+/*N*/ }
+
+/*N*/ void SwDBNameInfField::SetSubType(USHORT nType)
+/*N*/ {
+/*N*/ nSubType = nType;
+/*N*/ }
+
+SwDBNextSetFieldType::SwDBNextSetFieldType()
+ : SwFieldType( RES_DBNEXTSETFLD )
+{
+}
+
+//------------------------------------------------------------------------------
+
+/*N*/ SwFieldType* SwDBNextSetFieldType::Copy() const
+/*N*/ {
+ SwDBNextSetFieldType* pTmp = new SwDBNextSetFieldType();
+ return pTmp;
+/*N*/ }
+
+SwDBNextSetField::SwDBNextSetField(
+ SwDBNextSetFieldType* pTyp,
+ const String& rCond,
+ const String& /*rDummy*/ ,
+ const SwDBData& rDBData
+) : SwDBNameInfField( pTyp, rDBData )
+ , aCond( rCond )
+ , bCondValid( TRUE )
+{}
+
+//------------------------------------------------------------------------------
+
+/*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;
+}
+
+/*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*/ }
+
+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: Datensatz mit bestimmter ID
+ --------------------------------------------------------------------*/
+
+SwDBNumSetFieldType::SwDBNumSetFieldType()
+ : SwFieldType( RES_DBNUMSETFLD )
+{
+}
+
+//------------------------------------------------------------------------------
+
+/*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*/ }
+
+void SwDBNumSetField::Evaluate(SwDoc* pDoc)
+{
+ SwNewDBMgr* pMgr = pDoc->GetNewDBMgr();
+ const SwDBData& aTmpData = GetDBData();
+
+ bCondValid
+ && pMgr
+ && pMgr->IsInMerge()
+ && pMgr->IsDataSourceOpen(
+ aTmpData.sDataSource, aTmpData.sCommand, sal_True);
+ // IsDataSourceOpen() may have a side effect
+}
+
+/*--------------------------------------------------------------------
+ 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;
+}
+
+/*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*/ }
+
+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(0);
+ 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*/ OSL_ENSURE( nFmt < FF_END, "Expand: kein guelt. Fmt!" );
+ (void) nFmt; // avoid warnings
+/*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*/ }
+
+
+/*N*/ BOOL SwDBNameField::QueryValue( ::com::sun::star::uno::Any& rAny, BYTE nMId ) const
+/*N*/ {
+/*N*/ return SwDBNameInfField::QueryValue(rAny, nMId );
+/*N*/ }
+
+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*/ }
+
+//------------------------------------------------------------------------------
+
+/*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*/ }
+
+/*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*/ }
+
+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(0);
+ 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: */