LCOV - code coverage report
Current view: top level - sw/source/core/fields - dbfld.cxx (source / functions) Hit Total Coverage
Test: commit c8344322a7af75b84dd3ca8f78b05543a976dfd5 Lines: 156 438 35.6 %
Date: 2015-06-13 12:38:46 Functions: 29 74 39.2 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*
       3             :  * This file is part of the LibreOffice project.
       4             :  *
       5             :  * This Source Code Form is subject to the terms of the Mozilla Public
       6             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       7             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       8             :  *
       9             :  * This file incorporates work covered by the following license notice:
      10             :  *
      11             :  *   Licensed to the Apache Software Foundation (ASF) under one or more
      12             :  *   contributor license agreements. See the NOTICE file distributed
      13             :  *   with this work for additional information regarding copyright
      14             :  *   ownership. The ASF licenses this file to you under the Apache
      15             :  *   License, Version 2.0 (the "License"); you may not use this file
      16             :  *   except in compliance with the License. You may obtain a copy of
      17             :  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
      18             :  */
      19             : 
      20             : #include <float.h>
      21             : #include <sfx2/app.hxx>
      22             : #include <svl/zforlist.hxx>
      23             : #include <svx/pageitem.hxx>
      24             : #include <svx/dataaccessdescriptor.hxx>
      25             : #include <com/sun/star/sdbc/DataType.hpp>
      26             : #include <fmtfld.hxx>
      27             : #include <txtfld.hxx>
      28             : #include <doc.hxx>
      29             : #include <IDocumentFieldsAccess.hxx>
      30             : #include <docary.hxx>
      31             : #include <frame.hxx>
      32             : #include <fldbas.hxx>
      33             : #include <pam.hxx>
      34             : #include <ndtxt.hxx>
      35             : #include <dbfld.hxx>
      36             : #include <dbmgr.hxx>
      37             : #include <docfld.hxx>
      38             : #include <expfld.hxx>
      39             : #include <txtatr.hxx>
      40             : #include <unofldmid.h>
      41             : #include <calbck.hxx>
      42             : 
      43             : using namespace ::com::sun::star::sdbc;
      44             : using namespace ::com::sun::star;
      45             : 
      46             : /// replace database separator by dots for display
      47         663 : static OUString lcl_DBTrennConv(const OUString& aContent)
      48             : {
      49         663 :     return aContent.replaceAll(OUString(DB_DELIM), OUString('.'));
      50             : }
      51             : 
      52             : // database field type
      53             : 
      54         211 : SwDBFieldType::SwDBFieldType(SwDoc* pDocPtr, const OUString& rNam, const SwDBData& rDBData ) :
      55             :     SwValueFieldType( pDocPtr, RES_DBFLD ),
      56             :     aDBData(rDBData),
      57             :     sName(rNam),
      58             :     sColumn(rNam),
      59         211 :     nRefCnt(0)
      60             : {
      61         211 :     if(!aDBData.sDataSource.isEmpty() || !aDBData.sCommand.isEmpty())
      62             :     {
      63         418 :         sName = aDBData.sDataSource
      64         418 :             + OUString(DB_DELIM)
      65         627 :             + aDBData.sCommand
      66         836 :             + OUString(DB_DELIM)
      67         836 :             + sName;
      68             :     }
      69         211 : }
      70             : 
      71         350 : SwDBFieldType::~SwDBFieldType()
      72             : {
      73         350 : }
      74             : 
      75         139 : SwFieldType* SwDBFieldType::Copy() const
      76             : {
      77         139 :     SwDBFieldType* pTmp = new SwDBFieldType(GetDoc(), sColumn, aDBData);
      78         139 :     return pTmp;
      79             : }
      80             : 
      81         771 : OUString SwDBFieldType::GetName() const
      82             : {
      83         771 :     return sName;
      84             : }
      85             : 
      86         562 : void SwDBFieldType::ReleaseRef()
      87             : {
      88             :     OSL_ENSURE(nRefCnt > 0, "RefCount < 0!");
      89             : 
      90         562 :     if (--nRefCnt <= 0)
      91             :     {
      92         138 :         size_t nPos = GetDoc()->getIDocumentFieldsAccess().GetFieldTypes()->GetPos(this);
      93             : 
      94         138 :         if (nPos != SIZE_MAX)
      95             :         {
      96         108 :             GetDoc()->getIDocumentFieldsAccess().RemoveFieldType(nPos);
      97         108 :             delete this;
      98             :         }
      99             :     }
     100         562 : }
     101             : 
     102         253 : bool SwDBFieldType::QueryValue( uno::Any& rAny, sal_uInt16 nWhichId ) const
     103             : {
     104         253 :     switch( nWhichId )
     105             :     {
     106             :     case FIELD_PROP_PAR1:
     107          64 :         rAny <<= aDBData.sDataSource;
     108          64 :         break;
     109             :     case FIELD_PROP_PAR2:
     110          63 :         rAny <<= aDBData.sCommand;
     111          63 :         break;
     112             :     case FIELD_PROP_PAR3:
     113          63 :         rAny <<= sColumn;
     114          63 :         break;
     115             :     case FIELD_PROP_SHORT1:
     116          63 :         rAny <<= aDBData.nCommandType;
     117          63 :         break;
     118             :     default:
     119             :         OSL_FAIL("illegal property");
     120             :     }
     121         253 :     return true;
     122             : }
     123             : 
     124          73 : bool SwDBFieldType::PutValue( const uno::Any& rAny, sal_uInt16 nWhichId )
     125             : {
     126          73 :     switch( nWhichId )
     127             :     {
     128             :     case FIELD_PROP_PAR1:
     129           1 :         rAny >>= aDBData.sDataSource;
     130           1 :         break;
     131             :     case FIELD_PROP_PAR2:
     132           1 :         rAny >>= aDBData.sCommand;
     133           1 :         break;
     134             :     case FIELD_PROP_PAR3:
     135             :         {
     136           1 :             OUString sTmp;
     137           1 :             rAny >>= sTmp;
     138           1 :             if( sTmp != sColumn )
     139             :             {
     140           1 :                 sColumn = sTmp;
     141           1 :                 SwIterator<SwFormatField,SwFieldType> aIter( *this );
     142           1 :                 SwFormatField* pFormatField = aIter.First();
     143           2 :                 while(pFormatField)
     144             :                 {
     145             :                     // field in Undo?
     146           0 :                     SwTextField *pTextField = pFormatField->GetTextField();
     147           0 :                     if(pTextField && pTextField->GetTextNode().GetNodes().IsDocNodes() )
     148             :                     {
     149           0 :                         SwDBField* pDBField = static_cast<SwDBField*>(pFormatField->GetField());
     150           0 :                         pDBField->ClearInitialized();
     151           0 :                         pDBField->InitContent();
     152             :                     }
     153           0 :                     pFormatField = aIter.Next();
     154           1 :                 }
     155           1 :             }
     156             :         }
     157           1 :         break;
     158             :     case FIELD_PROP_SHORT1:
     159          70 :         rAny >>= aDBData.nCommandType;
     160          70 :         break;
     161             :     default:
     162             :         OSL_FAIL("illegal property");
     163             :     }
     164          73 :     return true;
     165             : }
     166             : 
     167             : // database field
     168             : 
     169         491 : SwDBField::SwDBField(SwDBFieldType* pTyp, sal_uLong nFormat)
     170             :     :   SwValueField(pTyp, nFormat),
     171             :         nSubType(0),
     172             :         bIsInBodyText(true),
     173             :         bValidValue(false),
     174         491 :         bInitialized(false)
     175             : {
     176         491 :     if (GetTyp())
     177         491 :         static_cast<SwDBFieldType*>(GetTyp())->AddRef();
     178         491 :     InitContent();
     179         491 : }
     180             : 
     181        1473 : SwDBField::~SwDBField()
     182             : {
     183         491 :     if (GetTyp())
     184         491 :         static_cast<SwDBFieldType*>(GetTyp())->ReleaseRef();
     185         982 : }
     186             : 
     187         491 : void SwDBField::InitContent()
     188             : {
     189         491 :     if (!IsInitialized())
     190             :     {
     191         491 :         aContent = "<" + static_cast<const SwDBFieldType*>(GetTyp())->GetColumnName() + ">";
     192             :     }
     193         491 : }
     194             : 
     195          72 : void SwDBField::InitContent(const OUString& rExpansion)
     196             : {
     197          72 :     if (rExpansion.startsWith("<") && rExpansion.endsWith(">"))
     198             :     {
     199           0 :         const OUString sColumn( rExpansion.copy( 1, rExpansion.getLength() - 2 ) );
     200           0 :         if( ::GetAppCmpStrIgnore().isEqual( sColumn,
     201           0 :                         static_cast<SwDBFieldType *>(GetTyp())->GetColumnName() ))
     202             :         {
     203           0 :             InitContent();
     204          72 :             return;
     205           0 :         }
     206             :     }
     207          72 :     SetExpansion( rExpansion );
     208             : }
     209             : 
     210         663 : OUString SwDBField::Expand() const
     211             : {
     212         663 :     if(0 ==(GetSubType() & nsSwExtendedSubType::SUB_INVISIBLE))
     213         663 :         return lcl_DBTrennConv(aContent);
     214           0 :     return OUString();
     215             : }
     216             : 
     217         419 : SwField* SwDBField::Copy() const
     218             : {
     219         419 :     SwDBField *pTmp = new SwDBField(static_cast<SwDBFieldType*>(GetTyp()), GetFormat());
     220         419 :     pTmp->aContent      = aContent;
     221         419 :     pTmp->bIsInBodyText  = bIsInBodyText;
     222         419 :     pTmp->bValidValue   = bValidValue;
     223         419 :     pTmp->bInitialized  = bInitialized;
     224         419 :     pTmp->nSubType      = nSubType;
     225         419 :     pTmp->SetValue(GetValue());
     226         419 :     pTmp->sFieldCode = sFieldCode;
     227             : 
     228         419 :     return pTmp;
     229             : }
     230             : 
     231           0 : OUString SwDBField::GetFieldName() const
     232             : {
     233           0 :     const OUString rDBName = static_cast<SwDBFieldType*>(GetTyp())->GetName();
     234             : 
     235           0 :     OUString sContent( rDBName.getToken(0, DB_DELIM) );
     236             : 
     237           0 :     if (sContent.getLength() > 1)
     238             :     {
     239             :         sContent += OUString(DB_DELIM)
     240           0 :             + rDBName.getToken(1, DB_DELIM)
     241           0 :             + OUString(DB_DELIM)
     242           0 :             + rDBName.getToken(2, DB_DELIM);
     243             :     }
     244           0 :     return lcl_DBTrennConv(sContent);
     245             : }
     246             : 
     247           0 : void SwDBField::ChgValue( double d, bool bVal )
     248             : {
     249           0 :     bValidValue = bVal;
     250           0 :     SetValue(d);
     251             : 
     252           0 :     if( bValidValue )
     253           0 :         aContent = static_cast<SwValueFieldType*>(GetTyp())->ExpandValue(d, GetFormat(), GetLanguage());
     254           0 : }
     255             : 
     256          71 : SwFieldType* SwDBField::ChgTyp( SwFieldType* pNewType )
     257             : {
     258          71 :     SwFieldType* pOld = SwValueField::ChgTyp( pNewType );
     259             : 
     260          71 :     static_cast<SwDBFieldType*>(pNewType)->AddRef();
     261          71 :     static_cast<SwDBFieldType*>(pOld)->ReleaseRef();
     262             : 
     263          71 :     return pOld;
     264             : }
     265             : 
     266         620 : bool SwDBField::FormatValue( SvNumberFormatter* pDocFormatter, OUString &aString, sal_uInt32 nFormat,
     267             :                              double &aNumber, sal_Int32 nColumnType, SwDBField *pField )
     268             : {
     269         620 :     bool bValidValue = false;
     270             : 
     271         620 :     if( DBL_MAX != aNumber )
     272             :     {
     273           0 :         if( DataType::DATE == nColumnType || DataType::TIME == nColumnType ||
     274             :             DataType::TIMESTAMP  == nColumnType )
     275             :         {
     276           0 :             Date aStandard( 1, 1, 1900 );
     277           0 :             if( *pDocFormatter->GetNullDate() != aStandard )
     278           0 :                 aNumber += (aStandard - *pDocFormatter->GetNullDate());
     279             :         }
     280           0 :         bValidValue = true;
     281           0 :         if( pField )
     282           0 :             pField->SetValue( aNumber );
     283             :     }
     284             :     else
     285             :     {
     286         620 :         SwSbxValue aVal;
     287         620 :         aVal.PutString( aString );
     288             : 
     289         620 :         if (aVal.IsNumeric())
     290             :         {
     291           0 :             if( pField )
     292           0 :                 pField->SetValue(aVal.GetDouble());
     293             :             else
     294           0 :                 aNumber = aVal.GetDouble();
     295             : 
     296           0 :             if (nFormat && nFormat != SAL_MAX_UINT32 && !pDocFormatter->IsTextFormat(nFormat))
     297           0 :                 bValidValue = true; // because of bug #60339 not for all strings
     298             :         }
     299             :         else
     300             :         {
     301             :             // if string length > 0 then true, else false
     302         620 :             if( pField )
     303          60 :                 pField->SetValue(aString.isEmpty() ? 0 : 1);
     304             :             else
     305         560 :                 aNumber = aString.isEmpty() ? 0 : 1;
     306         620 :         }
     307             :     }
     308             : 
     309         620 :     return bValidValue;
     310             : }
     311             : 
     312             : /// get current field value and cache it
     313         118 : void SwDBField::Evaluate()
     314             : {
     315         118 :     SwDBManager* pMgr = GetDoc()->GetDBManager();
     316             : 
     317             :     // first delete
     318         118 :     bValidValue = false;
     319         118 :     double nValue = DBL_MAX;
     320         118 :     const SwDBData& aTmpData = GetDBData();
     321             : 
     322         118 :     if(!pMgr || !pMgr->IsDataSourceOpen(aTmpData.sDataSource, aTmpData.sCommand, true))
     323         176 :         return ;
     324             : 
     325          60 :     sal_uInt32 nFormat = 0;
     326             : 
     327             :     // search corresponding column name
     328          60 :     OUString aColNm( static_cast<SwDBFieldType*>(GetTyp())->GetColumnName() );
     329             : 
     330          60 :     SvNumberFormatter* pDocFormatter = GetDoc()->GetNumberFormatter();
     331          60 :     pMgr->GetMergeColumnCnt(aColNm, GetLanguage(), aContent, &nValue);
     332          60 :     if( !( nSubType & nsSwExtendedSubType::SUB_OWN_FMT ) )
     333             :         SetFormat( nFormat = pMgr->GetColumnFormat( aTmpData.sDataSource, aTmpData.sCommand,
     334          60 :                                         aColNm, pDocFormatter, GetLanguage() ));
     335             : 
     336          60 :     sal_Int32 nColumnType = nValue == DBL_MAX
     337             :         ? 0
     338          60 :         : pMgr->GetColumnType(aTmpData.sDataSource, aTmpData.sCommand, aColNm);
     339             : 
     340          60 :     bValidValue = FormatValue( pDocFormatter, aContent, nFormat, nValue, nColumnType, this );
     341             : 
     342          60 :     if( DBL_MAX != nValue )
     343           0 :         aContent = static_cast<SwValueFieldType*>(GetTyp())->ExpandValue(nValue, GetFormat(), GetLanguage());
     344             : 
     345          60 :     bInitialized = true;
     346             : }
     347             : 
     348             : /// get name
     349           0 : OUString SwDBField::GetPar1() const
     350             : {
     351           0 :     return static_cast<const SwDBFieldType*>(GetTyp())->GetName();
     352             : }
     353             : 
     354         984 : sal_uInt16 SwDBField::GetSubType() const
     355             : {
     356         984 :     return nSubType;
     357             : }
     358             : 
     359         141 : void SwDBField::SetSubType(sal_uInt16 nType)
     360             : {
     361         141 :     nSubType = nType;
     362         141 : }
     363             : 
     364         240 : bool SwDBField::QueryValue( uno::Any& rAny, sal_uInt16 nWhichId ) const
     365             : {
     366         240 :     switch( nWhichId )
     367             :     {
     368             :     case FIELD_PROP_BOOL1:
     369         120 :         rAny <<= 0 == (GetSubType()&nsSwExtendedSubType::SUB_OWN_FMT);
     370         120 :         break;
     371             :     case FIELD_PROP_BOOL2:
     372          60 :         rAny <<= 0 == (GetSubType() & nsSwExtendedSubType::SUB_INVISIBLE);
     373          60 :         break;
     374             :     case FIELD_PROP_FORMAT:
     375          60 :         rAny <<= (sal_Int32)GetFormat();
     376          60 :         break;
     377             :     case FIELD_PROP_PAR1:
     378           0 :         rAny <<= aContent;
     379           0 :         break;
     380             :     case FIELD_PROP_PAR2:
     381           0 :         rAny <<= sFieldCode;
     382           0 :         break;
     383             :     default:
     384             :         OSL_FAIL("illegal property");
     385             :     }
     386         240 :     return true;
     387             : }
     388             : 
     389         138 : bool SwDBField::PutValue( const uno::Any& rAny, sal_uInt16 nWhichId )
     390             : {
     391         138 :     switch( nWhichId )
     392             :     {
     393             :     case FIELD_PROP_BOOL1:
     394          69 :         if( *static_cast<sal_Bool const *>(rAny.getValue()) )
     395          69 :             SetSubType(GetSubType()&~nsSwExtendedSubType::SUB_OWN_FMT);
     396             :         else
     397           0 :             SetSubType(GetSubType()|nsSwExtendedSubType::SUB_OWN_FMT);
     398          69 :         break;
     399             :     case FIELD_PROP_BOOL2:
     400             :     {
     401           0 :         sal_uInt16 nSubTyp = GetSubType();
     402           0 :         bool bVisible = false;
     403           0 :         if(!(rAny >>= bVisible))
     404           0 :             return false;
     405           0 :         if(bVisible)
     406           0 :             nSubTyp &= ~nsSwExtendedSubType::SUB_INVISIBLE;
     407             :         else
     408           0 :             nSubTyp |= nsSwExtendedSubType::SUB_INVISIBLE;
     409           0 :         SetSubType(nSubTyp);
     410             :         //invalidate text node
     411           0 :         if(GetTyp())
     412             :         {
     413           0 :             SwIterator<SwFormatField,SwFieldType> aIter( *GetTyp() );
     414           0 :             SwFormatField* pFormatField = aIter.First();
     415           0 :             while(pFormatField)
     416             :             {
     417           0 :                 SwTextField *pTextField = pFormatField->GetTextField();
     418           0 :                 if(pTextField && static_cast<SwDBField*>(pFormatField->GetField()) == this )
     419             :                 {
     420             :                     //notify the change
     421           0 :                     pTextField->NotifyContentChange(*pFormatField);
     422           0 :                     break;
     423             :                 }
     424           0 :                 pFormatField = aIter.Next();
     425           0 :             }
     426             :         }
     427             :     }
     428           0 :     break;
     429             :     case FIELD_PROP_FORMAT:
     430             :         {
     431           0 :             sal_Int32 nTemp = 0;
     432           0 :             rAny >>= nTemp;
     433           0 :             SetFormat(nTemp);
     434             :         }
     435           0 :         break;
     436             :     case FIELD_PROP_PAR1:
     437          69 :         rAny >>= aContent;
     438          69 :         break;
     439             :     case FIELD_PROP_PAR2:
     440           0 :         rAny >>= sFieldCode;
     441           0 :     break;
     442             :     default:
     443             :         OSL_FAIL("illegal property");
     444             :     }
     445         138 :     return true;
     446             : }
     447             : 
     448             : // base class for all further database fields
     449             : 
     450           0 : SwDBNameInfField::SwDBNameInfField(SwFieldType* pTyp, const SwDBData& rDBData, sal_uLong nFormat) :
     451             :     SwField(pTyp, nFormat),
     452             :     aDBData(rDBData),
     453           0 :     nSubType(0)
     454             : {
     455           0 : }
     456             : 
     457           0 : SwDBData SwDBNameInfField::GetDBData(SwDoc* pDoc)
     458             : {
     459           0 :     SwDBData aRet;
     460           0 :     if(!aDBData.sDataSource.isEmpty())
     461           0 :         aRet = aDBData;
     462             :     else
     463           0 :         aRet = pDoc->GetDBData();
     464           0 :     return aRet;
     465             : }
     466             : 
     467           0 : void SwDBNameInfField::SetDBData(const SwDBData & rDBData)
     468             : {
     469           0 :     aDBData = rDBData;
     470           0 : }
     471             : 
     472           0 : OUString SwDBNameInfField::GetFieldName() const
     473             : {
     474           0 :     OUString sStr( SwField::GetFieldName() );
     475           0 :     if (!aDBData.sDataSource.isEmpty())
     476             :     {
     477             :         sStr += ":"
     478           0 :             + aDBData.sDataSource
     479           0 :             + OUString(DB_DELIM)
     480           0 :             + aDBData.sCommand;
     481             :     }
     482           0 :     return lcl_DBTrennConv(sStr);
     483             : }
     484             : 
     485           0 : bool SwDBNameInfField::QueryValue( uno::Any& rAny, sal_uInt16 nWhichId ) const
     486             : {
     487           0 :     switch( nWhichId )
     488             :     {
     489             :     case FIELD_PROP_PAR1:
     490           0 :         rAny <<= aDBData.sDataSource;
     491           0 :         break;
     492             :     case FIELD_PROP_PAR2:
     493           0 :         rAny <<= aDBData.sCommand;
     494           0 :         break;
     495             :     case FIELD_PROP_SHORT1:
     496           0 :         rAny <<= aDBData.nCommandType;
     497           0 :         break;
     498             :     case FIELD_PROP_BOOL2:
     499           0 :         rAny <<= 0 == (GetSubType() & nsSwExtendedSubType::SUB_INVISIBLE);
     500           0 :         break;
     501             :     default:
     502             :         OSL_FAIL("illegal property");
     503             :     }
     504           0 :     return true;
     505             : }
     506             : 
     507           0 : bool SwDBNameInfField::PutValue( const uno::Any& rAny, sal_uInt16 nWhichId )
     508             : {
     509           0 :     switch( nWhichId )
     510             :     {
     511             :     case FIELD_PROP_PAR1:
     512           0 :         rAny >>= aDBData.sDataSource;
     513           0 :         break;
     514             :     case FIELD_PROP_PAR2:
     515           0 :         rAny >>= aDBData.sCommand;
     516           0 :         break;
     517             :     case FIELD_PROP_SHORT1:
     518           0 :         rAny >>= aDBData.nCommandType;
     519           0 :         break;
     520             :     case FIELD_PROP_BOOL2:
     521             :     {
     522           0 :         sal_uInt16 nSubTyp = GetSubType();
     523           0 :         bool bVisible = false;
     524           0 :         if(!(rAny >>= bVisible))
     525           0 :             return false;
     526           0 :         if(bVisible)
     527           0 :             nSubTyp &= ~nsSwExtendedSubType::SUB_INVISIBLE;
     528             :         else
     529           0 :             nSubTyp |= nsSwExtendedSubType::SUB_INVISIBLE;
     530           0 :         SetSubType(nSubTyp);
     531             :     }
     532           0 :     break;
     533             :     default:
     534             :         OSL_FAIL("illegal property");
     535             :     }
     536           0 :     return true;
     537             : }
     538             : 
     539           0 : sal_uInt16 SwDBNameInfField::GetSubType() const
     540             : {
     541           0 :     return nSubType;
     542             : }
     543             : 
     544           0 : void SwDBNameInfField::SetSubType(sal_uInt16 nType)
     545             : {
     546           0 :     nSubType = nType;
     547           0 : }
     548             : 
     549             : // next dataset
     550             : 
     551        2958 : SwDBNextSetFieldType::SwDBNextSetFieldType()
     552        2958 :     : SwFieldType( RES_DBNEXTSETFLD )
     553             : {
     554        2958 : }
     555             : 
     556           0 : SwFieldType* SwDBNextSetFieldType::Copy() const
     557             : {
     558           0 :     SwDBNextSetFieldType* pTmp = new SwDBNextSetFieldType();
     559           0 :     return pTmp;
     560             : }
     561             : 
     562             : // SwDBSetField
     563             : 
     564           0 : SwDBNextSetField::SwDBNextSetField(SwDBNextSetFieldType* pTyp,
     565             :                                    const OUString& rCond,
     566             :                                    const OUString& ,
     567             :                                    const SwDBData& rDBData) :
     568           0 :     SwDBNameInfField(pTyp, rDBData), aCond(rCond), bCondValid(true)
     569           0 : {}
     570             : 
     571           0 : OUString SwDBNextSetField::Expand() const
     572             : {
     573           0 :     return OUString();
     574             : }
     575             : 
     576           0 : SwField* SwDBNextSetField::Copy() const
     577             : {
     578           0 :     SwDBNextSetField *pTmp = new SwDBNextSetField(static_cast<SwDBNextSetFieldType*>(GetTyp()),
     579           0 :                                          aCond, OUString(), GetDBData());
     580           0 :     pTmp->SetSubType(GetSubType());
     581           0 :     pTmp->bCondValid = bCondValid;
     582           0 :     return pTmp;
     583             : }
     584             : 
     585           0 : void SwDBNextSetField::Evaluate(SwDoc* pDoc)
     586             : {
     587           0 :     SwDBManager* pMgr = pDoc->GetDBManager();
     588           0 :     const SwDBData& rData = GetDBData();
     589           0 :     if( !bCondValid ||
     590           0 :             !pMgr || !pMgr->IsDataSourceOpen(rData.sDataSource, rData.sCommand, false))
     591           0 :         return ;
     592           0 :     pMgr->ToNextRecord(rData.sDataSource, rData.sCommand);
     593             : }
     594             : 
     595             : /// get condition
     596           0 : OUString SwDBNextSetField::GetPar1() const
     597             : {
     598           0 :     return aCond;
     599             : }
     600             : 
     601             : /// set condition
     602           0 : void SwDBNextSetField::SetPar1(const OUString& rStr)
     603             : {
     604           0 :     aCond = rStr;
     605           0 : }
     606             : 
     607           0 : bool SwDBNextSetField::QueryValue( uno::Any& rAny, sal_uInt16 nWhichId ) const
     608             : {
     609           0 :     bool bRet = true;
     610           0 :     switch( nWhichId )
     611             :     {
     612             :     case FIELD_PROP_PAR3:
     613           0 :         rAny <<= aCond;
     614           0 :         break;
     615             :     default:
     616           0 :         bRet = SwDBNameInfField::QueryValue( rAny, nWhichId );
     617             :     }
     618           0 :     return bRet;
     619             : }
     620             : 
     621           0 : bool SwDBNextSetField::PutValue( const uno::Any& rAny, sal_uInt16 nWhichId )
     622             : {
     623           0 :     bool bRet = true;
     624           0 :     switch( nWhichId )
     625             :     {
     626             :     case FIELD_PROP_PAR3:
     627           0 :         rAny >>= aCond;
     628           0 :         break;
     629             :     default:
     630           0 :         bRet = SwDBNameInfField::PutValue( rAny, nWhichId );
     631             :     }
     632           0 :     return bRet;
     633             : }
     634             : 
     635             : // dataset with certain ID
     636             : 
     637        2958 : SwDBNumSetFieldType::SwDBNumSetFieldType() :
     638        2958 :     SwFieldType( RES_DBNUMSETFLD )
     639             : {
     640        2958 : }
     641             : 
     642           0 : SwFieldType* SwDBNumSetFieldType::Copy() const
     643             : {
     644           0 :     SwDBNumSetFieldType* pTmp = new SwDBNumSetFieldType();
     645           0 :     return pTmp;
     646             : }
     647             : 
     648           0 : SwDBNumSetField::SwDBNumSetField(SwDBNumSetFieldType* pTyp,
     649             :                                  const OUString& rCond,
     650             :                                  const OUString& rDBNum,
     651             :                                  const SwDBData& rDBData) :
     652             :     SwDBNameInfField(pTyp, rDBData),
     653             :     aCond(rCond),
     654             :     aPar2(rDBNum),
     655           0 :     bCondValid(true)
     656           0 : {}
     657             : 
     658           0 : OUString SwDBNumSetField::Expand() const
     659             : {
     660           0 :     return OUString();
     661             : }
     662             : 
     663           0 : SwField* SwDBNumSetField::Copy() const
     664             : {
     665           0 :     SwDBNumSetField *pTmp = new SwDBNumSetField(static_cast<SwDBNumSetFieldType*>(GetTyp()),
     666           0 :                                          aCond, aPar2, GetDBData());
     667           0 :     pTmp->bCondValid = bCondValid;
     668           0 :     pTmp->SetSubType(GetSubType());
     669           0 :     return pTmp;
     670             : }
     671             : 
     672           0 : void SwDBNumSetField::Evaluate(SwDoc* pDoc)
     673             : {
     674           0 :     SwDBManager* pMgr = pDoc->GetDBManager();
     675           0 :     const SwDBData& aTmpData = GetDBData();
     676             : 
     677           0 :     if( bCondValid && pMgr && pMgr->IsInMerge() &&
     678           0 :                         pMgr->IsDataSourceOpen(aTmpData.sDataSource, aTmpData.sCommand, true))
     679             :     {   // condition OK -> adjust current Set
     680           0 :         pMgr->ToRecordId(std::max((sal_uInt16)aPar2.toInt32(), sal_uInt16(1))-1);
     681             :     }
     682           0 : }
     683             : 
     684             : /// get LogDBName
     685           0 : OUString SwDBNumSetField::GetPar1() const
     686             : {
     687           0 :     return aCond;
     688             : }
     689             : 
     690             : /// set LogDBName
     691           0 : void SwDBNumSetField::SetPar1(const OUString& rStr)
     692             : {
     693           0 :     aCond = rStr;
     694           0 : }
     695             : 
     696             : /// get condition
     697           0 : OUString SwDBNumSetField::GetPar2() const
     698             : {
     699           0 :     return aPar2;
     700             : }
     701             : 
     702             : /// set condition
     703           0 : void SwDBNumSetField::SetPar2(const OUString& rStr)
     704             : {
     705           0 :     aPar2 = rStr;
     706           0 : }
     707             : 
     708           0 : bool SwDBNumSetField::QueryValue( uno::Any& rAny, sal_uInt16 nWhichId ) const
     709             : {
     710           0 :     bool bRet = true;
     711           0 :     switch( nWhichId )
     712             :     {
     713             :     case FIELD_PROP_PAR3:
     714           0 :         rAny <<= aCond;
     715           0 :         break;
     716             :     case FIELD_PROP_FORMAT:
     717           0 :         rAny <<= aPar2.toInt32();
     718           0 :         break;
     719             :     default:
     720           0 :         bRet = SwDBNameInfField::QueryValue(rAny, nWhichId );
     721             :     }
     722           0 :     return bRet;
     723             : }
     724             : 
     725           0 : bool    SwDBNumSetField::PutValue( const uno::Any& rAny, sal_uInt16 nWhichId )
     726             : {
     727           0 :     bool bRet = true;
     728           0 :     switch( nWhichId )
     729             :     {
     730             :     case FIELD_PROP_PAR3:
     731           0 :         rAny >>= aCond;
     732           0 :         break;
     733             :     case FIELD_PROP_FORMAT:
     734             :         {
     735           0 :             sal_Int32 nVal = 0;
     736           0 :             rAny >>= nVal;
     737           0 :             aPar2 = OUString::number(nVal);
     738             :         }
     739           0 :         break;
     740             :     default:
     741           0 :         bRet = SwDBNameInfField::PutValue(rAny, nWhichId );
     742             :     }
     743           0 :     return bRet;
     744             : }
     745             : 
     746        2958 : SwDBNameFieldType::SwDBNameFieldType(SwDoc* pDocument)
     747        2958 :     : SwFieldType( RES_DBNAMEFLD )
     748             : {
     749        2958 :     pDoc = pDocument;
     750        2958 : }
     751             : 
     752           0 : OUString SwDBNameFieldType::Expand(sal_uLong ) const
     753             : {
     754           0 :     const SwDBData aData = pDoc->GetDBData();
     755           0 :     return aData.sDataSource + "." + aData.sCommand;
     756             : }
     757             : 
     758           0 : SwFieldType* SwDBNameFieldType::Copy() const
     759             : {
     760           0 :     SwDBNameFieldType *pTmp = new SwDBNameFieldType(pDoc);
     761           0 :     return pTmp;
     762             : }
     763             : 
     764             : // name of the connected database
     765             : 
     766           0 : SwDBNameField::SwDBNameField(SwDBNameFieldType* pTyp, const SwDBData& rDBData, sal_uLong nFormat)
     767           0 :     : SwDBNameInfField(pTyp, rDBData, nFormat)
     768           0 : {}
     769             : 
     770           0 : OUString SwDBNameField::Expand() const
     771             : {
     772           0 :     if(0 ==(GetSubType() & nsSwExtendedSubType::SUB_INVISIBLE))
     773           0 :         return static_cast<SwDBNameFieldType*>(GetTyp())->Expand(GetFormat());
     774           0 :     return OUString();
     775             : }
     776             : 
     777           0 : SwField* SwDBNameField::Copy() const
     778             : {
     779           0 :     SwDBNameField *pTmp = new SwDBNameField(static_cast<SwDBNameFieldType*>(GetTyp()), GetDBData());
     780           0 :     pTmp->ChangeFormat(GetFormat());
     781           0 :     pTmp->SetLanguage(GetLanguage());
     782           0 :     pTmp->SetSubType(GetSubType());
     783           0 :     return pTmp;
     784             : }
     785             : 
     786           0 : bool SwDBNameField::QueryValue( uno::Any& rAny, sal_uInt16 nWhichId ) const
     787             : {
     788           0 :     return SwDBNameInfField::QueryValue(rAny, nWhichId );
     789             : }
     790             : 
     791           0 : bool SwDBNameField::PutValue( const uno::Any& rAny, sal_uInt16 nWhichId )
     792             : {
     793           0 :     return SwDBNameInfField::PutValue(rAny, nWhichId );
     794             : }
     795             : 
     796        2958 : SwDBSetNumberFieldType::SwDBSetNumberFieldType()
     797        2958 :     : SwFieldType( RES_DBSETNUMBERFLD )
     798             : {
     799        2958 : }
     800             : 
     801           0 : SwFieldType* SwDBSetNumberFieldType::Copy() const
     802             : {
     803           0 :     SwDBSetNumberFieldType *pTmp = new SwDBSetNumberFieldType;
     804           0 :     return pTmp;
     805             : }
     806             : 
     807             : // set-number of the connected database
     808             : 
     809           0 : SwDBSetNumberField::SwDBSetNumberField(SwDBSetNumberFieldType* pTyp,
     810             :                                        const SwDBData& rDBData,
     811             :                                        sal_uLong nFormat)
     812           0 :     : SwDBNameInfField(pTyp, rDBData, nFormat), nNumber(0)
     813           0 : {}
     814             : 
     815           0 : OUString SwDBSetNumberField::Expand() const
     816             : {
     817           0 :     if(0 !=(GetSubType() & nsSwExtendedSubType::SUB_INVISIBLE) || nNumber == 0)
     818           0 :         return OUString();
     819           0 :     return FormatNumber(nNumber, GetFormat());
     820             : }
     821             : 
     822           0 : void SwDBSetNumberField::Evaluate(SwDoc* pDoc)
     823             : {
     824           0 :     SwDBManager* pMgr = pDoc->GetDBManager();
     825             : 
     826           0 :     const SwDBData& aTmpData = GetDBData();
     827           0 :     if (!pMgr || !pMgr->IsInMerge() ||
     828           0 :         !pMgr->IsDataSourceOpen(aTmpData.sDataSource, aTmpData.sCommand, false))
     829           0 :         return;
     830           0 :     nNumber = pMgr->GetSelectedRecordId();
     831             : }
     832             : 
     833           0 : SwField* SwDBSetNumberField::Copy() const
     834             : {
     835             :     SwDBSetNumberField *pTmp =
     836           0 :         new SwDBSetNumberField(static_cast<SwDBSetNumberFieldType*>(GetTyp()), GetDBData(), GetFormat());
     837           0 :     pTmp->SetLanguage(GetLanguage());
     838           0 :     pTmp->SetSetNumber(nNumber);
     839           0 :     pTmp->SetSubType(GetSubType());
     840           0 :     return pTmp;
     841             : }
     842             : 
     843           0 : bool SwDBSetNumberField::QueryValue( uno::Any& rAny, sal_uInt16 nWhichId ) const
     844             : {
     845           0 :     bool bRet = true;
     846           0 :     switch( nWhichId )
     847             :     {
     848             :     case FIELD_PROP_USHORT1:
     849           0 :         rAny <<= (sal_Int16)GetFormat();
     850           0 :         break;
     851             :     case FIELD_PROP_FORMAT:
     852           0 :         rAny <<= nNumber;
     853           0 :         break;
     854             :     default:
     855           0 :         bRet = SwDBNameInfField::QueryValue( rAny, nWhichId );
     856             :     }
     857           0 :     return bRet;
     858             : }
     859             : 
     860           0 : bool SwDBSetNumberField::PutValue( const uno::Any& rAny, sal_uInt16 nWhichId )
     861             : {
     862           0 :     bool bRet = true;
     863           0 :     switch( nWhichId )
     864             :     {
     865             :     case FIELD_PROP_USHORT1:
     866             :         {
     867           0 :             sal_Int16 nSet = 0;
     868           0 :             rAny >>= nSet;
     869           0 :             if(nSet < (sal_Int16) SVX_NUMBER_NONE )
     870           0 :                 SetFormat(nSet);
     871             :             else {
     872             :             }
     873             :         }
     874           0 :         break;
     875             :     case FIELD_PROP_FORMAT:
     876           0 :         rAny >>= nNumber;
     877           0 :         break;
     878             :     default:
     879           0 :         bRet = SwDBNameInfField::PutValue( rAny, nWhichId );
     880             :     }
     881           0 :     return bRet;
     882         177 : }
     883             : 
     884             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.11