LCOV - code coverage report
Current view: top level - libreoffice/sw/source/core/fields - dbfld.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 13 443 2.9 %
Date: 2012-12-27 Functions: 4 71 5.6 %
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             : 
      21             : #include <float.h>
      22             : #include <sfx2/app.hxx>
      23             : #include <svl/zforlist.hxx>
      24             : #include <svx/pageitem.hxx>
      25             : #include <svx/dataaccessdescriptor.hxx>
      26             : #include <com/sun/star/sdbc/DataType.hpp>
      27             : #include <fmtfld.hxx>
      28             : #include <txtfld.hxx>
      29             : #include <doc.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 <switerator.hxx>
      42             : 
      43             : using namespace ::com::sun::star::sdbc;
      44             : using namespace ::com::sun::star;
      45             : using ::rtl::OUString;
      46             : 
      47             : /*--------------------------------------------------------------------
      48             :     Beschreibung: Datenbanktrenner durch Punkte fuer Anzeige ersetzen
      49             :  --------------------------------------------------------------------*/
      50             : 
      51           0 : static String lcl_DBTrennConv(const String& aContent)
      52             : {
      53           0 :     String sTmp(aContent);
      54           0 :     sal_Unicode* pStr = sTmp.GetBufferAccess();
      55           0 :     for( sal_uInt16 i = sTmp.Len(); i; --i, ++pStr )
      56           0 :         if( DB_DELIM == *pStr )
      57           0 :             *pStr = '.';
      58           0 :     return sTmp;
      59             : }
      60             : 
      61             : /*--------------------------------------------------------------------
      62             :     Beschreibung: DatenbankFeldTyp
      63             :  --------------------------------------------------------------------*/
      64             : 
      65           0 : SwDBFieldType::SwDBFieldType(SwDoc* pDocPtr, const String& rNam, const SwDBData& rDBData ) :
      66             :     SwValueFieldType( pDocPtr, RES_DBFLD ),
      67             :     aDBData(rDBData),
      68             :     sColumn(rNam),
      69           0 :     nRefCnt(0)
      70             : {
      71           0 :     if(!aDBData.sDataSource.isEmpty() || !aDBData.sCommand.isEmpty())
      72             :     {
      73           0 :         sName = rtl::OUStringBuffer(aDBData.sDataSource).append(DB_DELIM).
      74           0 :             append(aDBData.sCommand).append(DB_DELIM).makeStringAndClear();
      75             :     }
      76           0 :     sName += GetColumnName();
      77           0 : }
      78             : //------------------------------------------------------------------------------
      79           0 : SwDBFieldType::~SwDBFieldType()
      80             : {
      81           0 : }
      82             : //------------------------------------------------------------------------------
      83             : 
      84           0 : SwFieldType* SwDBFieldType::Copy() const
      85             : {
      86           0 :     SwDBFieldType* pTmp = new SwDBFieldType(GetDoc(), sColumn, aDBData);
      87           0 :     return pTmp;
      88             : }
      89             : 
      90             : //------------------------------------------------------------------------------
      91           0 : const rtl::OUString& SwDBFieldType::GetName() const
      92             : {
      93           0 :     return sName;
      94             : }
      95             : 
      96             : //------------------------------------------------------------------------------
      97             : 
      98           0 : void SwDBFieldType::ReleaseRef()
      99             : {
     100             :     OSL_ENSURE(nRefCnt > 0, "RefCount kleiner 0!");
     101             : 
     102           0 :     if (--nRefCnt <= 0)
     103             :     {
     104           0 :         sal_uInt16 nPos = GetDoc()->GetFldTypes()->GetPos(this);
     105             : 
     106           0 :         if (nPos != USHRT_MAX)
     107             :         {
     108           0 :             GetDoc()->RemoveFldType(nPos);
     109           0 :             delete this;
     110             :         }
     111             :     }
     112           0 : }
     113             : 
     114           0 : bool SwDBFieldType::QueryValue( uno::Any& rAny, sal_uInt16 nWhichId ) const
     115             : {
     116           0 :     switch( nWhichId )
     117             :     {
     118             :     case FIELD_PROP_PAR1:
     119           0 :         rAny <<= aDBData.sDataSource;
     120           0 :         break;
     121             :     case FIELD_PROP_PAR2:
     122           0 :         rAny <<= aDBData.sCommand;
     123           0 :         break;
     124             :     case FIELD_PROP_PAR3:
     125           0 :         rAny <<= OUString(sColumn);
     126           0 :         break;
     127             :     case FIELD_PROP_SHORT1:
     128           0 :         rAny <<= aDBData.nCommandType;
     129           0 :         break;
     130             :     default:
     131             :         OSL_FAIL("illegal property");
     132             :     }
     133           0 :     return true;
     134             : }
     135             : 
     136           0 : bool SwDBFieldType::PutValue( const uno::Any& rAny, sal_uInt16 nWhichId )
     137             : {
     138           0 :     switch( nWhichId )
     139             :     {
     140             :     case FIELD_PROP_PAR1:
     141           0 :         rAny >>= aDBData.sDataSource;
     142           0 :         break;
     143             :     case FIELD_PROP_PAR2:
     144           0 :         rAny >>= aDBData.sCommand;
     145           0 :         break;
     146             :     case FIELD_PROP_PAR3:
     147             :         {
     148           0 :             String sTmp;
     149           0 :             ::GetString( rAny, sTmp );
     150           0 :             if( sTmp != sColumn )
     151             :             {
     152           0 :                 sColumn = sTmp;
     153           0 :                 SwIterator<SwFmtFld,SwFieldType> aIter( *this );
     154           0 :                 SwFmtFld* pFld = aIter.First();
     155           0 :                 while(pFld)
     156             :                 {
     157             :                     // Feld im Undo?
     158           0 :                     SwTxtFld *pTxtFld = pFld->GetTxtFld();
     159           0 :                     if(pTxtFld && pTxtFld->GetTxtNode().GetNodes().IsDocNodes() )
     160             :                     {
     161           0 :                         SwDBField* pDBField = (SwDBField*)pFld->GetFld();
     162           0 :                         pDBField->ClearInitialized();
     163           0 :                         pDBField->InitContent();
     164             :                      }
     165           0 :                     pFld = aIter.Next();
     166           0 :                 }
     167           0 :             }
     168             :         }
     169           0 :         break;
     170             :     case FIELD_PROP_SHORT1:
     171           0 :         rAny >>= aDBData.nCommandType;
     172           0 :         break;
     173             :     default:
     174             :         OSL_FAIL("illegal property");
     175             :     }
     176           0 :     return true;
     177             : }
     178             : /*--------------------------------------------------------------------
     179             :     Beschreibung: SwDBField
     180             :  --------------------------------------------------------------------*/
     181             : 
     182           0 : SwDBField::SwDBField(SwDBFieldType* pTyp, sal_uLong nFmt)
     183             :     :   SwValueField(pTyp, nFmt),
     184             :         nSubType(0),
     185             :         bIsInBodyTxt(true),
     186             :         bValidValue(false),
     187           0 :         bInitialized(false)
     188             : {
     189           0 :     if (GetTyp())
     190           0 :         ((SwDBFieldType*)GetTyp())->AddRef();
     191           0 :     InitContent();
     192           0 : }
     193             : 
     194             : //------------------------------------------------------------------------------
     195             : 
     196           0 : SwDBField::~SwDBField()
     197             : {
     198           0 :     if (GetTyp())
     199           0 :         ((SwDBFieldType*)GetTyp())->ReleaseRef();
     200           0 : }
     201             : 
     202             : //------------------------------------------------------------------------------
     203             : 
     204           0 : void SwDBField::InitContent()
     205             : {
     206           0 :     if (!IsInitialized())
     207             :     {
     208           0 :         aContent = rtl::OUStringBuffer().append('<')
     209           0 :             .append(((const SwDBFieldType*)GetTyp())->GetColumnName())
     210           0 :             .append('>').makeStringAndClear();
     211             :     }
     212           0 : }
     213             : 
     214             : //------------------------------------------------------------------------------
     215             : 
     216           0 : void SwDBField::InitContent(const String& rExpansion)
     217             : {
     218           0 :     if (rExpansion.Len() > 2)
     219             :     {
     220           0 :         if (rExpansion.GetChar(0) == '<' &&
     221           0 :             rExpansion.GetChar(rExpansion.Len() - 1) == '>')
     222             :         {
     223           0 :             String sColumn( rExpansion.Copy( 1, rExpansion.Len() - 2 ) );
     224           0 :             if( ::GetAppCmpStrIgnore().isEqual( sColumn,
     225           0 :                             ((SwDBFieldType *)GetTyp())->GetColumnName() ))
     226             :             {
     227           0 :                 InitContent();
     228           0 :                 return;
     229           0 :             }
     230             :         }
     231             :     }
     232           0 :     SetExpansion( rExpansion );
     233             : }
     234             : 
     235             : //------------------------------------------------------------------------------
     236             : 
     237           0 : String SwDBField::Expand() const
     238             : {
     239           0 :     String sRet;
     240             : 
     241           0 :     if(0 ==(GetSubType() & nsSwExtendedSubType::SUB_INVISIBLE))
     242           0 :         sRet = lcl_DBTrennConv(aContent);
     243           0 :     return sRet;
     244             : }
     245             : 
     246             : //------------------------------------------------------------------------------
     247             : 
     248           0 : SwField* SwDBField::Copy() const
     249             : {
     250           0 :     SwDBField *pTmp = new SwDBField((SwDBFieldType*)GetTyp(), GetFormat());
     251           0 :     pTmp->aContent      = aContent;
     252           0 :     pTmp->bIsInBodyTxt  = bIsInBodyTxt;
     253           0 :     pTmp->bValidValue   = bValidValue;
     254           0 :     pTmp->bInitialized  = bInitialized;
     255           0 :     pTmp->nSubType      = nSubType;
     256           0 :     pTmp->SetValue(GetValue());
     257           0 :     pTmp->sFieldCode = sFieldCode;
     258             : 
     259           0 :     return pTmp;
     260             : }
     261             : 
     262           0 : String SwDBField::GetFieldName() const
     263             : {
     264           0 :     const String& rDBName = static_cast<SwDBFieldType*>(GetTyp())->GetName();
     265             : 
     266           0 :     String sContent( rDBName.GetToken(0, DB_DELIM) );
     267             : 
     268           0 :     if (sContent.Len() > 1)
     269             :     {
     270           0 :         sContent += DB_DELIM;
     271           0 :         sContent += rDBName.GetToken(1, DB_DELIM);
     272           0 :         sContent += DB_DELIM;
     273           0 :         sContent += rDBName.GetToken(2, DB_DELIM);
     274             :     }
     275           0 :     return lcl_DBTrennConv(sContent);
     276             : }
     277             : 
     278             : //------------------------------------------------------------------------------
     279             : 
     280           0 : void SwDBField::ChgValue( double d, bool bVal )
     281             : {
     282           0 :     bValidValue = bVal;
     283           0 :     SetValue(d);
     284             : 
     285           0 :     if( bValidValue )
     286           0 :         aContent = ((SwValueFieldType*)GetTyp())->ExpandValue(d, GetFormat(), GetLanguage());
     287           0 : }
     288             : 
     289           0 : SwFieldType* SwDBField::ChgTyp( SwFieldType* pNewType )
     290             : {
     291           0 :     SwFieldType* pOld = SwValueField::ChgTyp( pNewType );
     292             : 
     293           0 :     ((SwDBFieldType*)pNewType)->AddRef();
     294           0 :     ((SwDBFieldType*)pOld)->ReleaseRef();
     295             : 
     296           0 :     return pOld;
     297             : }
     298             : 
     299             : /*--------------------------------------------------------------------
     300             :     Beschreibung: Aktuellen Field-Value holen und chachen
     301             :  --------------------------------------------------------------------*/
     302             : 
     303           0 : void SwDBField::Evaluate()
     304             : {
     305           0 :     SwNewDBMgr* pMgr = GetDoc()->GetNewDBMgr();
     306             : 
     307             :     // erstmal loeschen
     308           0 :     bValidValue = false;
     309           0 :     double nValue = DBL_MAX;
     310           0 :     const SwDBData& aTmpData = GetDBData();
     311             : 
     312           0 :     if(!pMgr || !pMgr->IsDataSourceOpen(aTmpData.sDataSource, aTmpData.sCommand, sal_True))
     313           0 :         return ;
     314             : 
     315             :     sal_uInt32 nFmt;
     316             : 
     317             :     // Passenden Spaltennamen suchen
     318           0 :     String aColNm( ((SwDBFieldType*)GetTyp())->GetColumnName() );
     319             : 
     320           0 :     SvNumberFormatter* pDocFormatter = GetDoc()->GetNumberFormatter();
     321           0 :     pMgr->GetMergeColumnCnt(aColNm, GetLanguage(), aContent, &nValue, &nFmt);
     322           0 :     if( !( nSubType & nsSwExtendedSubType::SUB_OWN_FMT ) )
     323             :         SetFormat( nFmt = pMgr->GetColumnFmt( aTmpData.sDataSource, aTmpData.sCommand,
     324           0 :                                         aColNm, pDocFormatter, GetLanguage() ));
     325             : 
     326           0 :     if( DBL_MAX != nValue )
     327             :     {
     328           0 :         sal_Int32 nColumnType = pMgr->GetColumnType(aTmpData.sDataSource, aTmpData.sCommand, aColNm);
     329           0 :         if( DataType::DATE == nColumnType  || DataType::TIME == nColumnType  ||
     330             :                  DataType::TIMESTAMP  == nColumnType)
     331             : 
     332             :         {
     333           0 :             Date aStandard(1,1,1900);
     334           0 :             if (*pDocFormatter->GetNullDate() != aStandard)
     335           0 :                 nValue += (aStandard - *pDocFormatter->GetNullDate());
     336             :         }
     337           0 :         bValidValue = true;
     338           0 :         SetValue(nValue);
     339           0 :         aContent = ((SwValueFieldType*)GetTyp())->ExpandValue(nValue, GetFormat(), GetLanguage());
     340             :     }
     341             :     else
     342             :     {
     343           0 :         SwSbxValue aVal;
     344           0 :         aVal.PutString( aContent );
     345             : 
     346           0 :         if (aVal.IsNumeric())
     347             :         {
     348           0 :             SetValue(aVal.GetDouble());
     349             : 
     350           0 :             SvNumberFormatter* pFormatter = GetDoc()->GetNumberFormatter();
     351           0 :             if (nFmt && nFmt != SAL_MAX_UINT32 && !pFormatter->IsTextFormat(nFmt))
     352           0 :                 bValidValue = true; // Wegen Bug #60339 nicht mehr bei allen Strings
     353             :         }
     354             :         else
     355             :         {
     356             :             // Bei Strings sal_True wenn Laenge > 0 sonst sal_False
     357           0 :             SetValue(aContent.isEmpty() ? 0 : 1);
     358           0 :         }
     359             :     }
     360           0 :     bInitialized = true;
     361             : }
     362             : 
     363             : /*--------------------------------------------------------------------
     364             :     Beschreibung: Namen erfragen
     365             :  --------------------------------------------------------------------*/
     366             : 
     367           0 : const rtl::OUString& SwDBField::GetPar1() const
     368             : {
     369           0 :     return ((const SwDBFieldType*)GetTyp())->GetName();
     370             : }
     371             : 
     372           0 : sal_uInt16 SwDBField::GetSubType() const
     373             : {
     374           0 :     return nSubType;
     375             : }
     376             : 
     377           0 : void SwDBField::SetSubType(sal_uInt16 nType)
     378             : {
     379           0 :     nSubType = nType;
     380           0 : }
     381             : 
     382           0 : bool SwDBField::QueryValue( uno::Any& rAny, sal_uInt16 nWhichId ) const
     383             : {
     384           0 :     switch( nWhichId )
     385             :     {
     386             :     case FIELD_PROP_BOOL1:
     387             :         {
     388           0 :             sal_Bool bTemp = 0 == (GetSubType()&nsSwExtendedSubType::SUB_OWN_FMT);
     389           0 :             rAny.setValue(&bTemp, ::getBooleanCppuType());
     390             :         }
     391           0 :         break;
     392             :     case FIELD_PROP_BOOL2:
     393             :     {
     394           0 :         sal_Bool bVal = 0 == (GetSubType() & nsSwExtendedSubType::SUB_INVISIBLE);
     395           0 :         rAny.setValue(&bVal, ::getBooleanCppuType());
     396             :     }
     397           0 :     break;
     398             :     case FIELD_PROP_FORMAT:
     399           0 :         rAny <<= (sal_Int32)GetFormat();
     400           0 :         break;
     401             :     case FIELD_PROP_PAR1:
     402           0 :         rAny <<= OUString(aContent);
     403           0 :         break;
     404             :     case FIELD_PROP_PAR2:
     405           0 :         rAny <<= OUString(sFieldCode);
     406           0 :         break;
     407             :     default:
     408             :         OSL_FAIL("illegal property");
     409             :     }
     410           0 :     return true;
     411             : 
     412             : }
     413             : 
     414           0 : bool SwDBField::PutValue( const uno::Any& rAny, sal_uInt16 nWhichId )
     415             : {
     416           0 :     switch( nWhichId )
     417             :     {
     418             :     case FIELD_PROP_BOOL1:
     419           0 :         if( *(sal_Bool*)rAny.getValue() )
     420           0 :             SetSubType(GetSubType()&~nsSwExtendedSubType::SUB_OWN_FMT);
     421             :         else
     422           0 :             SetSubType(GetSubType()|nsSwExtendedSubType::SUB_OWN_FMT);
     423           0 :         break;
     424             :     case FIELD_PROP_BOOL2:
     425             :     {
     426           0 :         sal_uInt16 nSubTyp = GetSubType();
     427           0 :         sal_Bool bVisible = sal_False;
     428           0 :         if(!(rAny >>= bVisible))
     429           0 :             return false;
     430           0 :         if(bVisible)
     431           0 :             nSubTyp &= ~nsSwExtendedSubType::SUB_INVISIBLE;
     432             :         else
     433           0 :             nSubTyp |= nsSwExtendedSubType::SUB_INVISIBLE;
     434           0 :         SetSubType(nSubTyp);
     435             :         //invalidate text node
     436           0 :         if(GetTyp())
     437             :         {
     438           0 :             SwIterator<SwFmtFld,SwFieldType> aIter( *GetTyp() );
     439           0 :             SwFmtFld* pFld = aIter.First();
     440           0 :             while(pFld)
     441             :             {
     442           0 :                 SwTxtFld *pTxtFld = pFld->GetTxtFld();
     443           0 :                 if(pTxtFld && (SwDBField*)pFld->GetFld() == this )
     444             :                 {
     445             :                     //notify the change
     446           0 :                     pTxtFld->NotifyContentChange(*pFld);
     447           0 :                     break;
     448             :                 }
     449           0 :                 pFld = aIter.Next();
     450           0 :             }
     451             :         }
     452             :     }
     453           0 :     break;
     454             :     case FIELD_PROP_FORMAT:
     455             :         {
     456           0 :             sal_Int32 nTemp = 0;
     457           0 :             rAny >>= nTemp;
     458           0 :             SetFormat(nTemp);
     459             :         }
     460           0 :         break;
     461             :     case FIELD_PROP_PAR1:
     462           0 :         rAny >>= aContent;
     463           0 :         break;
     464             :     case FIELD_PROP_PAR2:
     465           0 :         rAny >>= sFieldCode;
     466           0 :     break;
     467             :     default:
     468             :         OSL_FAIL("illegal property");
     469             :     }
     470           0 :     return true;
     471             : }
     472             : 
     473             : /*--------------------------------------------------------------------
     474             :     Beschreibung: Basisklasse fuer alle weiteren Datenbankfelder
     475             :  --------------------------------------------------------------------*/
     476             : 
     477           0 : SwDBNameInfField::SwDBNameInfField(SwFieldType* pTyp, const SwDBData& rDBData, sal_uLong nFmt) :
     478             :     SwField(pTyp, nFmt),
     479             :     aDBData(rDBData),
     480           0 :     nSubType(0)
     481             : {
     482           0 : }
     483             : 
     484             : //------------------------------------------------------------------------------
     485             : 
     486           0 : SwDBData SwDBNameInfField::GetDBData(SwDoc* pDoc)
     487             : {
     488           0 :     SwDBData aRet;
     489           0 :     if(!aDBData.sDataSource.isEmpty())
     490           0 :         aRet = aDBData;
     491             :     else
     492           0 :         aRet = pDoc->GetDBData();
     493           0 :     return aRet;
     494             : }
     495             : 
     496           0 : void SwDBNameInfField::SetDBData(const SwDBData & rDBData)
     497             : {
     498           0 :     aDBData = rDBData;
     499           0 : }
     500             : 
     501             : //------------------------------------------------------------------------------
     502             : 
     503           0 : String SwDBNameInfField::GetFieldName() const
     504             : {
     505           0 :     String sStr( SwField::GetFieldName() );
     506           0 :     if (!aDBData.sDataSource.isEmpty())
     507             :     {
     508           0 :         sStr += ':';
     509           0 :         sStr += String(aDBData.sDataSource);
     510           0 :         sStr += DB_DELIM;
     511           0 :         sStr += String(aDBData.sCommand);
     512             :     }
     513           0 :     return lcl_DBTrennConv(sStr);
     514             : }
     515             : 
     516           0 : bool SwDBNameInfField::QueryValue( uno::Any& rAny, sal_uInt16 nWhichId ) const
     517             : {
     518           0 :     switch( nWhichId )
     519             :     {
     520             :     case FIELD_PROP_PAR1:
     521           0 :         rAny <<= aDBData.sDataSource;
     522           0 :         break;
     523             :     case FIELD_PROP_PAR2:
     524           0 :         rAny <<= aDBData.sCommand;
     525           0 :         break;
     526             :     case FIELD_PROP_SHORT1:
     527           0 :         rAny <<= aDBData.nCommandType;
     528           0 :         break;
     529             :     case FIELD_PROP_BOOL2:
     530             :     {
     531           0 :         sal_Bool bVal = 0 == (GetSubType() & nsSwExtendedSubType::SUB_INVISIBLE);
     532           0 :         rAny.setValue(&bVal, ::getBooleanCppuType());
     533             :     }
     534           0 :     break;
     535             :     default:
     536             :         OSL_FAIL("illegal property");
     537             :     }
     538           0 :     return true;
     539             : }
     540             : 
     541           0 : bool SwDBNameInfField::PutValue( const uno::Any& rAny, sal_uInt16 nWhichId )
     542             : {
     543           0 :     switch( nWhichId )
     544             :     {
     545             :     case FIELD_PROP_PAR1:
     546           0 :         rAny >>= aDBData.sDataSource;
     547           0 :         break;
     548             :     case FIELD_PROP_PAR2:
     549           0 :         rAny >>= aDBData.sCommand;
     550           0 :         break;
     551             :     case FIELD_PROP_SHORT1:
     552           0 :         rAny >>= aDBData.nCommandType;
     553           0 :         break;
     554             :     case FIELD_PROP_BOOL2:
     555             :     {
     556           0 :         sal_uInt16 nSubTyp = GetSubType();
     557           0 :         sal_Bool bVisible = sal_False;
     558           0 :         if(!(rAny >>= bVisible))
     559           0 :             return false;
     560           0 :         if(bVisible)
     561           0 :             nSubTyp &= ~nsSwExtendedSubType::SUB_INVISIBLE;
     562             :         else
     563           0 :             nSubTyp |= nsSwExtendedSubType::SUB_INVISIBLE;
     564           0 :         SetSubType(nSubTyp);
     565             :     }
     566           0 :     break;
     567             :     default:
     568             :         OSL_FAIL("illegal property");
     569             :     }
     570           0 :     return true;
     571             : }
     572             : 
     573           0 : sal_uInt16 SwDBNameInfField::GetSubType() const
     574             : {
     575           0 :     return nSubType;
     576             : }
     577             : 
     578           0 : void SwDBNameInfField::SetSubType(sal_uInt16 nType)
     579             : {
     580           0 :     nSubType = nType;
     581           0 : }
     582             : 
     583             : /*--------------------------------------------------------------------
     584             :     Beschreibung: NaechsterDatensatz
     585             :  --------------------------------------------------------------------*/
     586             : 
     587         276 : SwDBNextSetFieldType::SwDBNextSetFieldType()
     588         276 :     : SwFieldType( RES_DBNEXTSETFLD )
     589             : {
     590         276 : }
     591             : 
     592             : //------------------------------------------------------------------------------
     593             : 
     594           0 : SwFieldType* SwDBNextSetFieldType::Copy() const
     595             : {
     596           0 :     SwDBNextSetFieldType* pTmp = new SwDBNextSetFieldType();
     597           0 :     return pTmp;
     598             : }
     599             : /*--------------------------------------------------------------------
     600             :     Beschreibung: SwDBSetField
     601             :  --------------------------------------------------------------------*/
     602             : 
     603           0 : SwDBNextSetField::SwDBNextSetField(SwDBNextSetFieldType* pTyp,
     604             :                                    const String& rCond,
     605             :                                    const String& ,
     606             :                                    const SwDBData& rDBData) :
     607           0 :     SwDBNameInfField(pTyp, rDBData), aCond(rCond), bCondValid(true)
     608           0 : {}
     609             : 
     610             : //------------------------------------------------------------------------------
     611             : 
     612           0 : String SwDBNextSetField::Expand() const
     613             : {
     614           0 :     return aEmptyStr;
     615             : }
     616             : 
     617             : //------------------------------------------------------------------------------
     618             : 
     619           0 : SwField* SwDBNextSetField::Copy() const
     620             : {
     621           0 :     SwDBNextSetField *pTmp = new SwDBNextSetField((SwDBNextSetFieldType*)GetTyp(),
     622           0 :                                          aCond, aEmptyStr, GetDBData());
     623           0 :     pTmp->SetSubType(GetSubType());
     624           0 :     pTmp->bCondValid = bCondValid;
     625           0 :     return pTmp;
     626             : }
     627             : //------------------------------------------------------------------------------
     628             : 
     629           0 : void SwDBNextSetField::Evaluate(SwDoc* pDoc)
     630             : {
     631           0 :     SwNewDBMgr* pMgr = pDoc->GetNewDBMgr();
     632           0 :     const SwDBData& rData = GetDBData();
     633           0 :     if( !bCondValid ||
     634           0 :             !pMgr || !pMgr->IsDataSourceOpen(rData.sDataSource, rData.sCommand, sal_False))
     635           0 :         return ;
     636           0 :     pMgr->ToNextRecord(rData.sDataSource, rData.sCommand);
     637             : }
     638             : 
     639             : /*--------------------------------------------------------------------
     640             :     Beschreibung: Bedingung
     641             :  --------------------------------------------------------------------*/
     642             : 
     643           0 : const rtl::OUString& SwDBNextSetField::GetPar1() const
     644             : {
     645           0 :     return aCond;
     646             : }
     647             : 
     648           0 : void SwDBNextSetField::SetPar1(const rtl::OUString& rStr)
     649             : {
     650           0 :     aCond = rStr;
     651           0 : }
     652             : 
     653           0 : bool SwDBNextSetField::QueryValue( uno::Any& rAny, sal_uInt16 nWhichId ) const
     654             : {
     655           0 :     bool bRet = true;
     656           0 :     switch( nWhichId )
     657             :     {
     658             :     case FIELD_PROP_PAR3:
     659           0 :         rAny <<= OUString(aCond);
     660           0 :         break;
     661             :     default:
     662           0 :         bRet = SwDBNameInfField::QueryValue( rAny, nWhichId );
     663             :     }
     664           0 :     return bRet;
     665             : }
     666             : 
     667           0 : bool SwDBNextSetField::PutValue( const uno::Any& rAny, sal_uInt16 nWhichId )
     668             : {
     669           0 :     bool bRet = true;
     670           0 :     switch( nWhichId )
     671             :     {
     672             :     case FIELD_PROP_PAR3:
     673           0 :         rAny >>= aCond;
     674           0 :         break;
     675             :     default:
     676           0 :         bRet = SwDBNameInfField::PutValue( rAny, nWhichId );
     677             :     }
     678           0 :     return bRet;
     679             : }
     680             : 
     681             : /*--------------------------------------------------------------------
     682             :     Beschreibung: Datensatz mit bestimmter ID
     683             :  --------------------------------------------------------------------*/
     684             : 
     685         276 : SwDBNumSetFieldType::SwDBNumSetFieldType() :
     686         276 :     SwFieldType( RES_DBNUMSETFLD )
     687             : {
     688         276 : }
     689             : 
     690             : //------------------------------------------------------------------------------
     691             : 
     692           0 : SwFieldType* SwDBNumSetFieldType::Copy() const
     693             : {
     694           0 :     SwDBNumSetFieldType* pTmp = new SwDBNumSetFieldType();
     695           0 :     return pTmp;
     696             : }
     697             : 
     698             : /*--------------------------------------------------------------------
     699             :     Beschreibung: SwDBSetField
     700             :  --------------------------------------------------------------------*/
     701             : 
     702           0 : SwDBNumSetField::SwDBNumSetField(SwDBNumSetFieldType* pTyp,
     703             :                                  const String& rCond,
     704             :                                  const String& rDBNum,
     705             :                                  const SwDBData& rDBData) :
     706             :     SwDBNameInfField(pTyp, rDBData),
     707             :     aCond(rCond),
     708             :     aPar2(rDBNum),
     709           0 :     bCondValid(true)
     710           0 : {}
     711             : 
     712             : //------------------------------------------------------------------------------
     713             : 
     714           0 : String SwDBNumSetField::Expand() const
     715             : {
     716           0 :     return aEmptyStr;
     717             : }
     718             : 
     719             : //------------------------------------------------------------------------------
     720             : 
     721           0 : SwField* SwDBNumSetField::Copy() const
     722             : {
     723           0 :     SwDBNumSetField *pTmp = new SwDBNumSetField((SwDBNumSetFieldType*)GetTyp(),
     724           0 :                                          aCond, aPar2, GetDBData());
     725           0 :     pTmp->bCondValid = bCondValid;
     726           0 :     pTmp->SetSubType(GetSubType());
     727           0 :     return pTmp;
     728             : }
     729             : 
     730           0 : void SwDBNumSetField::Evaluate(SwDoc* pDoc)
     731             : {
     732           0 :     SwNewDBMgr* pMgr = pDoc->GetNewDBMgr();
     733           0 :     const SwDBData& aTmpData = GetDBData();
     734             : 
     735           0 :     if( bCondValid && pMgr && pMgr->IsInMerge() &&
     736           0 :                         pMgr->IsDataSourceOpen(aTmpData.sDataSource, aTmpData.sCommand, sal_True))
     737             :     {   // Bedingug OK -> aktuellen Set einstellen
     738           0 :         pMgr->ToRecordId(Max((sal_uInt16)aPar2.ToInt32(), sal_uInt16(1))-1);
     739             :     }
     740           0 : }
     741             : 
     742             : /*--------------------------------------------------------------------
     743             :     Beschreibung: LogDBName
     744             :  --------------------------------------------------------------------*/
     745             : 
     746           0 : const rtl::OUString& SwDBNumSetField::GetPar1() const
     747             : {
     748           0 :     return aCond;
     749             : }
     750             : 
     751           0 : void SwDBNumSetField::SetPar1(const rtl::OUString& rStr)
     752             : {
     753           0 :     aCond = rStr;
     754           0 : }
     755             : 
     756             : /*--------------------------------------------------------------------
     757             :     Beschreibung: Bedingung
     758             :  --------------------------------------------------------------------*/
     759             : 
     760           0 : rtl::OUString SwDBNumSetField::GetPar2() const
     761             : {
     762           0 :     return aPar2;
     763             : }
     764             : 
     765           0 : void SwDBNumSetField::SetPar2(const rtl::OUString& rStr)
     766             : {
     767           0 :     aPar2 = rStr;
     768           0 : }
     769             : 
     770           0 : bool SwDBNumSetField::QueryValue( uno::Any& rAny, sal_uInt16 nWhichId ) const
     771             : {
     772           0 :     bool bRet = true;
     773           0 :     switch( nWhichId )
     774             :     {
     775             :     case FIELD_PROP_PAR3:
     776           0 :         rAny <<= OUString(aCond);
     777           0 :         break;
     778             :     case FIELD_PROP_FORMAT:
     779           0 :         rAny <<= (sal_Int32)aPar2.ToInt32();
     780           0 :         break;
     781             :     default:
     782           0 :         bRet = SwDBNameInfField::QueryValue(rAny, nWhichId );
     783             :     }
     784           0 :     return bRet;
     785             : }
     786             : 
     787           0 : bool    SwDBNumSetField::PutValue( const uno::Any& rAny, sal_uInt16 nWhichId )
     788             : {
     789           0 :     bool bRet = true;
     790           0 :     switch( nWhichId )
     791             :     {
     792             :     case FIELD_PROP_PAR3:
     793           0 :         rAny >>= aCond;
     794           0 :         break;
     795             :     case FIELD_PROP_FORMAT:
     796             :         {
     797           0 :             sal_Int32 nVal = 0;
     798           0 :             rAny >>= nVal;
     799           0 :             aPar2 = String::CreateFromInt32(nVal);
     800             :         }
     801           0 :         break;
     802             :     default:
     803           0 :         bRet = SwDBNameInfField::PutValue(rAny, nWhichId );
     804             :     }
     805           0 :     return bRet;
     806             : }
     807             : 
     808             : /*--------------------------------------------------------------------
     809             :     Beschreibung: SwDBNameFieldType
     810             :  --------------------------------------------------------------------*/
     811             : 
     812         276 : SwDBNameFieldType::SwDBNameFieldType(SwDoc* pDocument)
     813         276 :     : SwFieldType( RES_DBNAMEFLD )
     814             : {
     815         276 :     pDoc = pDocument;
     816         276 : }
     817             : //------------------------------------------------------------------------------
     818             : 
     819           0 : String SwDBNameFieldType::Expand(sal_uLong ) const
     820             : {
     821           0 :     const SwDBData aData = pDoc->GetDBData();
     822           0 :     String sRet(aData.sDataSource);
     823           0 :     sRet += '.';
     824           0 :     sRet += (String)aData.sCommand;
     825           0 :     return sRet;
     826             : }
     827             : //------------------------------------------------------------------------------
     828             : 
     829           0 : SwFieldType* SwDBNameFieldType::Copy() const
     830             : {
     831           0 :     SwDBNameFieldType *pTmp = new SwDBNameFieldType(pDoc);
     832           0 :     return pTmp;
     833             : }
     834             : 
     835             : //------------------------------------------------------------------------------
     836             : 
     837             : /*--------------------------------------------------------------------
     838             :     Beschreibung: Name der angedockten DB
     839             :  --------------------------------------------------------------------*/
     840             : 
     841           0 : SwDBNameField::SwDBNameField(SwDBNameFieldType* pTyp, const SwDBData& rDBData, sal_uLong nFmt)
     842           0 :     : SwDBNameInfField(pTyp, rDBData, nFmt)
     843           0 : {}
     844             : 
     845             : //------------------------------------------------------------------------------
     846             : 
     847           0 : String SwDBNameField::Expand() const
     848             : {
     849           0 :     String sRet;
     850           0 :     if(0 ==(GetSubType() & nsSwExtendedSubType::SUB_INVISIBLE))
     851           0 :         sRet = ((SwDBNameFieldType*)GetTyp())->Expand(GetFormat());
     852           0 :     return sRet;
     853             : }
     854             : 
     855             : //------------------------------------------------------------------------------
     856             : 
     857           0 : SwField* SwDBNameField::Copy() const
     858             : {
     859           0 :     SwDBNameField *pTmp = new SwDBNameField((SwDBNameFieldType*)GetTyp(), GetDBData());
     860           0 :     pTmp->ChangeFormat(GetFormat());
     861           0 :     pTmp->SetLanguage(GetLanguage());
     862           0 :     pTmp->SetSubType(GetSubType());
     863           0 :     return pTmp;
     864             : }
     865             : 
     866           0 : bool SwDBNameField::QueryValue( uno::Any& rAny, sal_uInt16 nWhichId ) const
     867             : {
     868           0 :     return SwDBNameInfField::QueryValue(rAny, nWhichId );
     869             : }
     870             : 
     871           0 : bool SwDBNameField::PutValue( const uno::Any& rAny, sal_uInt16 nWhichId )
     872             : {
     873           0 :     return SwDBNameInfField::PutValue(rAny, nWhichId );
     874             : }
     875             : /*--------------------------------------------------------------------
     876             :     Beschreibung: SwDBNameFieldType
     877             :  --------------------------------------------------------------------*/
     878             : 
     879         276 : SwDBSetNumberFieldType::SwDBSetNumberFieldType()
     880         276 :     : SwFieldType( RES_DBSETNUMBERFLD )
     881             : {
     882         276 : }
     883             : 
     884             : //------------------------------------------------------------------------------
     885             : 
     886           0 : SwFieldType* SwDBSetNumberFieldType::Copy() const
     887             : {
     888           0 :     SwDBSetNumberFieldType *pTmp = new SwDBSetNumberFieldType;
     889           0 :     return pTmp;
     890             : }
     891             : 
     892             : //------------------------------------------------------------------------------
     893             : 
     894             : /*--------------------------------------------------------------------
     895             :     Beschreibung: SetNumber der angedockten DB
     896             :  --------------------------------------------------------------------*/
     897             : 
     898           0 : SwDBSetNumberField::SwDBSetNumberField(SwDBSetNumberFieldType* pTyp,
     899             :                                        const SwDBData& rDBData,
     900             :                                        sal_uLong nFmt)
     901           0 :     : SwDBNameInfField(pTyp, rDBData, nFmt), nNumber(0)
     902           0 : {}
     903             : 
     904             : //------------------------------------------------------------------------------
     905             : 
     906           0 : String SwDBSetNumberField::Expand() const
     907             : {
     908           0 :     if(0 !=(GetSubType() & nsSwExtendedSubType::SUB_INVISIBLE) || nNumber == 0)
     909           0 :         return aEmptyStr;
     910             :     else
     911           0 :         return FormatNumber((sal_uInt16)nNumber, GetFormat());
     912             : }
     913             : 
     914             : //------------------------------------------------------------------------------
     915             : 
     916           0 : void SwDBSetNumberField::Evaluate(SwDoc* pDoc)
     917             : {
     918           0 :     SwNewDBMgr* pMgr = pDoc->GetNewDBMgr();
     919             : 
     920           0 :     const SwDBData& aTmpData = GetDBData();
     921           0 :     if (!pMgr || !pMgr->IsInMerge() ||
     922           0 :         !pMgr->IsDataSourceOpen(aTmpData.sDataSource, aTmpData.sCommand, sal_False))
     923           0 :         return;
     924           0 :     nNumber = pMgr->GetSelectedRecordId();
     925             : }
     926             : 
     927             : 
     928             : //------------------------------------------------------------------------------
     929             : 
     930           0 : SwField* SwDBSetNumberField::Copy() const
     931             : {
     932             :     SwDBSetNumberField *pTmp =
     933           0 :         new SwDBSetNumberField((SwDBSetNumberFieldType*)GetTyp(), GetDBData(), GetFormat());
     934           0 :     pTmp->SetLanguage(GetLanguage());
     935           0 :     pTmp->SetSetNumber(nNumber);
     936           0 :     pTmp->SetSubType(GetSubType());
     937           0 :     return pTmp;
     938             : }
     939             : 
     940           0 : bool SwDBSetNumberField::QueryValue( uno::Any& rAny, sal_uInt16 nWhichId ) const
     941             : {
     942           0 :     bool bRet = true;
     943           0 :     switch( nWhichId )
     944             :     {
     945             :     case FIELD_PROP_USHORT1:
     946           0 :         rAny <<= (sal_Int16)GetFormat();
     947           0 :         break;
     948             :     case FIELD_PROP_FORMAT:
     949           0 :         rAny <<= nNumber;
     950           0 :         break;
     951             :     default:
     952           0 :         bRet = SwDBNameInfField::QueryValue( rAny, nWhichId );
     953             :     }
     954           0 :     return bRet;
     955             : }
     956             : 
     957           0 : bool SwDBSetNumberField::PutValue( const uno::Any& rAny, sal_uInt16 nWhichId )
     958             : {
     959           0 :     bool bRet = true;
     960           0 :     switch( nWhichId )
     961             :     {
     962             :     case FIELD_PROP_USHORT1:
     963             :         {
     964           0 :             sal_Int16 nSet = 0;
     965           0 :             rAny >>= nSet;
     966           0 :             if(nSet < (sal_Int16) SVX_NUMBER_NONE )
     967           0 :                 SetFormat(nSet);
     968             :             else {
     969             :             }
     970             :         }
     971           0 :         break;
     972             :     case FIELD_PROP_FORMAT:
     973           0 :         rAny >>= nNumber;
     974           0 :         break;
     975             :     default:
     976           0 :         bRet = SwDBNameInfField::PutValue( rAny, nWhichId );
     977             :     }
     978           0 :     return bRet;
     979             : }
     980             : 
     981             : 
     982             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10