LCOV - code coverage report
Current view: top level - libreoffice/editeng/source/items - flditem.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 168 567 29.6 %
Date: 2012-12-27 Functions: 96 224 42.9 %
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 <comphelper/string.hxx>
      21             : #include <vcl/metaact.hxx>
      22             : #include <svl/zforlist.hxx>
      23             : #include <tools/urlobj.hxx>
      24             : 
      25             : #define _SVX_FLDITEM_CXX
      26             : #include <unotools/localfilehelper.hxx>
      27             : 
      28             : #include <editeng/flditem.hxx>
      29             : #include <editeng/measfld.hxx>
      30             : #include "editeng/unonames.hxx"
      31             : 
      32             : #include <tools/tenccvt.hxx>
      33             : 
      34             : #include <com/sun/star/beans/XPropertySet.hpp>
      35             : #include <com/sun/star/text/XTextContent.hpp>
      36             : #include <com/sun/star/text/FilenameDisplayFormat.hpp>
      37             : #include <com/sun/star/util/DateTime.hpp>
      38             : 
      39             : using namespace com::sun::star;
      40             : 
      41          16 : SvxFieldData* SvxFieldData::Create(const uno::Reference<text::XTextContent>& xTextContent)
      42             : {
      43          16 :     uno::Reference<beans::XPropertySet> xPropSet(xTextContent, uno::UNO_QUERY);
      44          16 :     if (!xPropSet.is())
      45           0 :         return NULL;
      46             : 
      47          16 :     uno::Any aAny = xPropSet->getPropertyValue(UNO_TC_PROP_TEXTFIELD_TYPE);
      48          16 :     sal_Int32 nFieldType = aAny.get<sal_Int32>();
      49             : 
      50          16 :     switch (nFieldType)
      51             :     {
      52             :         case text::textfield::Type::TIME:
      53             :         case text::textfield::Type::EXTENDED_TIME:
      54             :         case text::textfield::Type::DATE:
      55             :         {
      56           1 :             sal_Bool bIsDate = false;
      57           1 :             xPropSet->getPropertyValue(UNO_TC_PROP_IS_DATE) >>= bIsDate;
      58             : 
      59           1 :             if (bIsDate)
      60             :             {
      61           1 :                 util::DateTime aDateTime = xPropSet->getPropertyValue(UNO_TC_PROP_DATE_TIME).get<util::DateTime>();
      62           1 :                 Date aDate(aDateTime.Day, aDateTime.Month, aDateTime.Year);
      63           1 :                 sal_Bool bIsFixed = false;
      64           1 :                 xPropSet->getPropertyValue(UNO_TC_PROP_IS_FIXED) >>= bIsFixed;
      65             : 
      66           1 :                 SvxDateField* pData = new SvxDateField(aDate, bIsFixed ? SVXDATETYPE_FIX : SVXDATETYPE_VAR);
      67           1 :                 sal_Int32 nNumFmt = -1;
      68           1 :                 xPropSet->getPropertyValue(UNO_TC_PROP_NUMFORMAT) >>= nNumFmt;
      69           1 :                 if (nNumFmt >= SVXDATEFORMAT_APPDEFAULT && nNumFmt <= SVXDATEFORMAT_F)
      70           1 :                     pData->SetFormat(static_cast<SvxDateFormat>(nNumFmt));
      71             : 
      72           1 :                 return pData;
      73             :             }
      74             : 
      75           0 :             if (nFieldType != text::textfield::Type::TIME && nFieldType != text::textfield::Type::DATE)
      76             :             {
      77           0 :                 util::DateTime aDateTime = xPropSet->getPropertyValue(UNO_TC_PROP_DATE_TIME).get<util::DateTime>();
      78           0 :                 Time aTime(aDateTime.Hours, aDateTime.Minutes, aDateTime.Seconds, aDateTime.HundredthSeconds);
      79             : 
      80           0 :                 sal_Bool bIsFixed = false;
      81           0 :                 xPropSet->getPropertyValue(UNO_TC_PROP_IS_FIXED) >>= bIsFixed;
      82             : 
      83           0 :                 SvxExtTimeField* pData = new SvxExtTimeField(aTime, bIsFixed ? SVXTIMETYPE_FIX : SVXTIMETYPE_VAR);
      84             : 
      85           0 :                 sal_Int32 nNumFmt = -1;
      86           0 :                 xPropSet->getPropertyValue(UNO_TC_PROP_NUMFORMAT) >>= nNumFmt;
      87           0 :                 if (nNumFmt >= SVXTIMEFORMAT_APPDEFAULT && nNumFmt <= SVXTIMEFORMAT_AM_HMSH)
      88           0 :                     pData->SetFormat(static_cast<SvxTimeFormat>(nNumFmt));
      89             : 
      90           0 :                 return pData;
      91             :             }
      92             : 
      93           0 :             return new SvxTimeField();
      94             :         }
      95             :         case text::textfield::Type::URL:
      96             :         {
      97           0 :             rtl::OUString aRep, aTarget, aURL;
      98           0 :             sal_Int16 nFmt = -1;
      99           0 :             xPropSet->getPropertyValue(UNO_TC_PROP_URL_REPRESENTATION) >>= aRep;
     100           0 :             xPropSet->getPropertyValue(UNO_TC_PROP_URL_TARGET) >>= aTarget;
     101           0 :             xPropSet->getPropertyValue(UNO_TC_PROP_URL) >>= aURL;
     102           0 :             xPropSet->getPropertyValue(UNO_TC_PROP_URL_FORMAT) >>= nFmt;
     103           0 :             SvxURLField* pData = new SvxURLField(aURL, aRep, aRep.isEmpty() ? SVXURLFORMAT_URL : SVXURLFORMAT_REPR);
     104           0 :             pData->SetTargetFrame(aTarget);
     105           0 :             if (nFmt >= SVXURLFORMAT_APPDEFAULT && nFmt <= SVXURLFORMAT_REPR)
     106           0 :                 pData->SetFormat(static_cast<SvxURLFormat>(nFmt));
     107             : 
     108           0 :             return pData;
     109             :         }
     110             :         case text::textfield::Type::PAGE:
     111           7 :             return new SvxPageField();
     112             :         case text::textfield::Type::PAGES:
     113           0 :             return new SvxPagesField();
     114             :         case text::textfield::Type::DOCINFO_TITLE:
     115           0 :             return new SvxFileField();
     116             :         case text::textfield::Type::TABLE:
     117             :         {
     118           0 :             sal_Int32 nTab = 0;
     119           0 :             xPropSet->getPropertyValue(UNO_TC_PROP_TABLE_POSITION) >>= nTab;
     120           0 :             return new SvxTableField(nTab);
     121             :         }
     122             :         case text::textfield::Type::EXTENDED_FILE:
     123             :         {
     124           0 :             rtl::OUString aPresentation;
     125           0 :             sal_Bool bIsFixed = false;
     126           0 :             sal_Int16 nFmt = text::FilenameDisplayFormat::FULL;
     127           0 :             xPropSet->getPropertyValue(UNO_TC_PROP_IS_FIXED) >>= bIsFixed;
     128           0 :             xPropSet->getPropertyValue(UNO_TC_PROP_CURRENT_PRESENTATION) >>= aPresentation;
     129           0 :             xPropSet->getPropertyValue(UNO_TC_PROP_FILE_FORMAT) >>= nFmt;
     130             : 
     131           0 :             SvxFileFormat eFmt = SVXFILEFORMAT_NAME_EXT;
     132           0 :             switch (nFmt)
     133             :             {
     134           0 :                 case text::FilenameDisplayFormat::FULL: eFmt = SVXFILEFORMAT_FULLPATH; break;
     135           0 :                 case text::FilenameDisplayFormat::PATH: eFmt = SVXFILEFORMAT_PATH;     break;
     136           0 :                 case text::FilenameDisplayFormat::NAME: eFmt = SVXFILEFORMAT_NAME;     break;
     137             :                 default:;
     138             :             }
     139             : 
     140             :             // pass fixed attribute to constructor
     141             :             return new SvxExtFileField(
     142           0 :                 aPresentation, bIsFixed ? SVXFILETYPE_FIX : SVXFILETYPE_VAR, eFmt);
     143             :         }
     144             :         case text::textfield::Type::AUTHOR:
     145             :         {
     146           0 :             sal_Bool bIsFixed = false;
     147           0 :             sal_Bool bFullName = false;
     148           0 :             sal_Int16 nFmt = -1;
     149           0 :             rtl::OUString aPresentation, aContent, aFirstName, aLastName;
     150           0 :             xPropSet->getPropertyValue(UNO_TC_PROP_IS_FIXED) >>= bIsFixed;
     151           0 :             xPropSet->getPropertyValue(UNO_TC_PROP_AUTHOR_FULLNAME) >>= bFullName;
     152           0 :             xPropSet->getPropertyValue(UNO_TC_PROP_CURRENT_PRESENTATION) >>= aPresentation;
     153           0 :             xPropSet->getPropertyValue(UNO_TC_PROP_AUTHOR_CONTENT) >>= aContent;
     154           0 :             xPropSet->getPropertyValue(UNO_TC_PROP_AUTHOR_FORMAT) >>= nFmt;
     155             : 
     156             :             // do we have CurrentPresentation given?  Mimic behaviour of
     157             :             // writer, which means: prefer CurrentPresentation over Content
     158             :             // if both are given.
     159           0 :             if (!aPresentation.isEmpty())
     160           0 :                 aContent = aPresentation;
     161             : 
     162           0 :             sal_Int32 nPos = aContent.lastIndexOf(sal_Unicode(' '), 0);
     163           0 :             if (nPos > 0)
     164             :             {
     165           0 :                 aFirstName = aContent.copy(0, nPos);
     166           0 :                 aLastName = aContent.copy(nPos + 1);
     167             :             }
     168             :             else
     169             :             {
     170           0 :                 aLastName = aContent;
     171             :             }
     172             : 
     173             :             // #92009# pass fixed attribute to constructor
     174             :             SvxAuthorField* pData = new SvxAuthorField(
     175           0 :                 aFirstName, aLastName, rtl::OUString(), bIsFixed ? SVXAUTHORTYPE_FIX : SVXAUTHORTYPE_VAR);
     176             : 
     177           0 :             if (!bFullName)
     178             :             {
     179           0 :                 pData->SetFormat(SVXAUTHORFORMAT_SHORTNAME);
     180             :             }
     181           0 :             else if (nFmt >= SVXAUTHORFORMAT_FULLNAME || nFmt <= SVXAUTHORFORMAT_SHORTNAME)
     182             :             {
     183           0 :                 pData->SetFormat(static_cast<SvxAuthorFormat>(nFmt));
     184             :             }
     185             : 
     186           0 :             return pData;
     187             :         }
     188             :         case text::textfield::Type::MEASURE:
     189             :         {
     190           0 :             SdrMeasureFieldKind eKind = SDRMEASUREFIELD_VALUE;
     191           0 :             sal_Int16 nTmp = -1;
     192           0 :             xPropSet->getPropertyValue(UNO_TC_PROP_MEASURE_KIND) >>= nTmp;
     193           0 :             if (nTmp == static_cast<sal_Int16>(SDRMEASUREFIELD_UNIT) ||
     194             :                 nTmp == static_cast<sal_Int16>(SDRMEASUREFIELD_ROTA90BLANCS))
     195           0 :                 eKind = static_cast<SdrMeasureFieldKind>(nTmp);
     196             : 
     197           0 :             return new SdrMeasureField(eKind);
     198             :         }
     199             :         case text::textfield::Type::PRESENTATION_HEADER:
     200           2 :             return new SvxHeaderField();
     201             :         case text::textfield::Type::PRESENTATION_FOOTER:
     202           3 :             return new SvxFooterField();
     203             :         case text::textfield::Type::PRESENTATION_DATE_TIME:
     204           3 :             return new SvxDateTimeField();
     205             :         default:
     206             :             ;
     207             :     };
     208             : 
     209           0 :     return NULL;
     210             : }
     211             : 
     212       17145 : TYPEINIT1( SvxFieldItem, SfxPoolItem );
     213             : 
     214        1715 : SV_IMPL_PERSIST1( SvxFieldData, SvPersistBase );
     215             : 
     216             : // -----------------------------------------------------------------------
     217             : 
     218        5943 : SvxFieldData::SvxFieldData()
     219             : {
     220        5943 : }
     221             : 
     222             : // -----------------------------------------------------------------------
     223             : 
     224        6499 : SvxFieldData::~SvxFieldData()
     225             : {
     226        6499 : }
     227             : 
     228             : // -----------------------------------------------------------------------
     229             : 
     230          18 : SvxFieldData* SvxFieldData::Clone() const
     231             : {
     232          18 :     return new SvxFieldData;
     233             : }
     234             : 
     235             : // -----------------------------------------------------------------------
     236             : 
     237           0 : int SvxFieldData::operator==( const SvxFieldData& rFld ) const
     238             : {
     239             :     DBG_ASSERT( Type() == rFld.Type(), "==: Different Types" );
     240             :     (void)rFld;
     241           0 :     return sal_True;    // Basic class is always the same.
     242             : }
     243             : 
     244             : // -----------------------------------------------------------------------
     245             : 
     246           0 : void SvxFieldData::Load( SvPersistStream & /*rStm*/ )
     247             : {
     248           0 : }
     249             : 
     250             : // -----------------------------------------------------------------------
     251             : 
     252           0 : void SvxFieldData::Save( SvPersistStream & /*rStm*/ )
     253             : {
     254           0 : }
     255             : 
     256             : 
     257           0 : MetaAction* SvxFieldData::createBeginComment() const
     258             : {
     259           0 :     return new MetaCommentAction( "FIELD_SEQ_BEGIN" );
     260             : }
     261             : 
     262           0 : MetaAction* SvxFieldData::createEndComment() const
     263             : {
     264           0 :     return new MetaCommentAction( "FIELD_SEQ_END" );
     265             : }
     266             : 
     267             : // -----------------------------------------------------------------------
     268             : 
     269           0 : SvxFieldItem::SvxFieldItem( SvxFieldData* pFld, const sal_uInt16 nId ) :
     270           0 :     SfxPoolItem( nId )
     271             : {
     272           0 :     pField = pFld;  // belongs directly to the item
     273           0 : }
     274             : 
     275             : // -----------------------------------------------------------------------
     276             : 
     277        1025 : SvxFieldItem::SvxFieldItem( const SvxFieldData& rField, const sal_uInt16 nId ) :
     278        1025 :     SfxPoolItem( nId )
     279             : {
     280        1025 :     pField = rField.Clone();
     281        1025 : }
     282             : 
     283             : // -----------------------------------------------------------------------
     284             : 
     285        4805 : SvxFieldItem::SvxFieldItem( const SvxFieldItem& rItem ) :
     286        4805 :     SfxPoolItem ( rItem )
     287             : {
     288        4805 :     pField = rItem.GetField() ? rItem.GetField()->Clone() : 0;
     289        4805 : }
     290             : 
     291             : // -----------------------------------------------------------------------
     292             : 
     293       15491 : SvxFieldItem::~SvxFieldItem()
     294             : {
     295        5488 :     delete pField;
     296       10003 : }
     297             : 
     298             : // -----------------------------------------------------------------------
     299             : 
     300        4737 : SfxPoolItem* SvxFieldItem::Clone( SfxItemPool* ) const
     301             : {
     302        4737 :     return new SvxFieldItem(*this);
     303             : }
     304             : 
     305             : // -----------------------------------------------------------------------
     306             : 
     307           0 : SfxPoolItem* SvxFieldItem::Create( SvStream& rStrm, sal_uInt16 ) const
     308             : {
     309           0 :     SvxFieldData* pData = 0;
     310           0 :     SvPersistStream aPStrm( GetClassManager(), &rStrm );
     311           0 :     aPStrm >> pData;
     312             : 
     313           0 :     if( aPStrm.IsEof() )
     314           0 :         aPStrm.SetError( SVSTREAM_GENERALERROR );
     315             : 
     316           0 :     if ( aPStrm.GetError() == ERRCODE_IO_NOFACTORY )
     317           0 :         aPStrm.ResetError();    // Actually a code for that not all were read Attr ...
     318             : 
     319           0 :     return new SvxFieldItem( pData, Which() );
     320             : }
     321             : 
     322             : // -----------------------------------------------------------------------
     323             : 
     324         188 : SvStream& SvxFieldItem::Store( SvStream& rStrm, sal_uInt16 /*nItemVersion*/ ) const
     325             : {
     326             :     DBG_ASSERT( pField, "SvxFieldItem::Store: Field?!" );
     327         188 :     SvPersistStream aPStrm( GetClassManager(), &rStrm );
     328             :     // The reset error in the above Create method did not exist in 3.1,
     329             :     // therefore newer items can not be saved for 3.x-exports!
     330         376 :     if ( ( rStrm.GetVersion() <= SOFFICE_FILEFORMAT_31 ) && pField &&
     331         188 :             pField->GetClassId() == 50 /* SdrMeasureField */ )
     332             :     {
     333             :         // SvxFieldData not enough, because not registered on ClassMgr.
     334           0 :         SvxURLField aDummyData;
     335           0 :         aPStrm << &aDummyData;
     336             :     }
     337             :     else
     338         188 :         aPStrm << pField;
     339             : 
     340         188 :     return rStrm;
     341             : }
     342             : 
     343             : // -----------------------------------------------------------------------
     344             : 
     345        3295 : int SvxFieldItem::operator==( const SfxPoolItem& rItem ) const
     346             : {
     347             :     DBG_ASSERT( SfxPoolItem::operator==( rItem ), "unequal which or type" );
     348             : 
     349        3295 :     const SvxFieldData* pOtherFld = ((const SvxFieldItem&)rItem).GetField();
     350        3295 :     if ( !pField && !pOtherFld )
     351           0 :         return sal_True;
     352             : 
     353        3295 :     if ( ( !pField && pOtherFld ) || ( pField && !pOtherFld ) )
     354           0 :         return sal_False;
     355             : 
     356        3295 :     return ( ( pField->Type() == pOtherFld->Type() )
     357        3295 :                 && ( *pField == *pOtherFld ) );
     358             : }
     359             : 
     360             : // =================================================================
     361             : // The following are the derivatives of SvxFieldData ...
     362             : // =================================================================
     363             : 
     364         848 : SV_IMPL_PERSIST1( SvxDateField, SvxFieldData );
     365             : 
     366             : // -----------------------------------------------------------------------
     367             : 
     368          23 : SvxDateField::SvxDateField()
     369             : {
     370          23 :     nFixDate = Date( Date::SYSTEM ).GetDate();
     371          23 :     eType = SVXDATETYPE_VAR;
     372          23 :     eFormat = SVXDATEFORMAT_STDSMALL;
     373          23 : }
     374             : 
     375             : // -----------------------------------------------------------------------
     376             : 
     377          72 : SvxDateField::SvxDateField( const Date& rDate, SvxDateType eT, SvxDateFormat eF )
     378             : {
     379          72 :     nFixDate = rDate.GetDate();
     380          72 :     eType = eT;
     381          72 :     eFormat = eF;
     382          72 : }
     383             : 
     384             : // -----------------------------------------------------------------------
     385             : 
     386         673 : SvxFieldData* SvxDateField::Clone() const
     387             : {
     388         673 :     return new SvxDateField( *this );
     389             : }
     390             : 
     391             : // -----------------------------------------------------------------------
     392             : 
     393           4 : int SvxDateField::operator==( const SvxFieldData& rOther ) const
     394             : {
     395           4 :     if ( rOther.Type() != Type() )
     396           0 :         return sal_False;
     397             : 
     398           4 :     const SvxDateField& rOtherFld = (const SvxDateField&) rOther;
     399             :     return ( ( nFixDate == rOtherFld.nFixDate ) &&
     400             :                 ( eType == rOtherFld.eType ) &&
     401           4 :                 ( eFormat == rOtherFld.eFormat ) );
     402             : }
     403             : 
     404             : // -----------------------------------------------------------------------
     405             : 
     406           0 : void SvxDateField::Load( SvPersistStream & rStm )
     407             : {
     408             :     sal_uInt16 nType, nFormat;
     409             : 
     410           0 :     rStm >> nFixDate;
     411           0 :     rStm >> nType;
     412           0 :     rStm >> nFormat;
     413             : 
     414           0 :     eType = (SvxDateType)nType;
     415           0 :     eFormat= (SvxDateFormat)nFormat;
     416           0 : }
     417             : 
     418             : // -----------------------------------------------------------------------
     419             : 
     420           0 : void SvxDateField::Save( SvPersistStream & rStm )
     421             : {
     422           0 :     rStm << nFixDate;
     423           0 :     rStm << (sal_uInt16)eType;
     424           0 :     rStm << (sal_uInt16)eFormat;
     425           0 : }
     426             : 
     427             : // -----------------------------------------------------------------------
     428             : 
     429           0 : rtl::OUString SvxDateField::GetFormatted( SvNumberFormatter& rFormatter, LanguageType eLang ) const
     430             : {
     431           0 :     Date aDate( Date::EMPTY );
     432           0 :     if ( eType == SVXDATETYPE_FIX )
     433           0 :         aDate.SetDate( nFixDate );
     434             :     else
     435           0 :         aDate = Date( Date::SYSTEM ); // current date
     436             : 
     437           0 :     return GetFormatted( aDate, eFormat, rFormatter, eLang );
     438             : }
     439             : 
     440           0 : rtl::OUString SvxDateField::GetFormatted( Date& aDate, SvxDateFormat eFormat, SvNumberFormatter& rFormatter, LanguageType eLang )
     441             : {
     442           0 :     if ( eFormat == SVXDATEFORMAT_SYSTEM )
     443             :     {
     444             :         OSL_FAIL( "SVXDATEFORMAT_SYSTEM not implemented!" );
     445           0 :         eFormat = SVXDATEFORMAT_STDSMALL;
     446             :     }
     447           0 :     else if ( eFormat == SVXDATEFORMAT_APPDEFAULT )
     448             :     {
     449             :         OSL_FAIL( "SVXDATEFORMAT_APPDEFAULT: take them from where? ");
     450           0 :         eFormat = SVXDATEFORMAT_STDSMALL;
     451             :     }
     452             : 
     453             :     sal_uLong nFormatKey;
     454             : 
     455           0 :     switch( eFormat )
     456             :     {
     457             :         case SVXDATEFORMAT_STDSMALL:
     458             :             // short
     459           0 :             nFormatKey = rFormatter.GetFormatIndex( NF_DATE_SYSTEM_SHORT, eLang );
     460           0 :         break;
     461             :         case SVXDATEFORMAT_STDBIG:
     462             :             // long
     463           0 :             nFormatKey = rFormatter.GetFormatIndex( NF_DATE_SYSTEM_LONG, eLang );
     464           0 :         break;
     465             :         case SVXDATEFORMAT_A:
     466             :             // 13.02.96
     467           0 :             nFormatKey = rFormatter.GetFormatIndex( NF_DATE_SYS_DDMMYY, eLang );
     468           0 :         break;
     469             :         case SVXDATEFORMAT_B:
     470             :             // 13.02.1996
     471           0 :             nFormatKey = rFormatter.GetFormatIndex( NF_DATE_SYS_DDMMYYYY, eLang );
     472           0 :         break;
     473             :         case SVXDATEFORMAT_C:
     474             :             // 13. Feb 1996
     475           0 :             nFormatKey = rFormatter.GetFormatIndex( NF_DATE_SYS_DMMMYYYY, eLang );
     476           0 :         break;
     477             :         case SVXDATEFORMAT_D:
     478             :             // 13. February 1996
     479           0 :             nFormatKey = rFormatter.GetFormatIndex( NF_DATE_SYS_DMMMMYYYY, eLang );
     480           0 :         break;
     481             :         case SVXDATEFORMAT_E:
     482             :             // The, 13. February 1996
     483           0 :             nFormatKey = rFormatter.GetFormatIndex( NF_DATE_SYS_NNDMMMMYYYY, eLang );
     484           0 :         break;
     485             :         case SVXDATEFORMAT_F:
     486             :             // Tuesday, 13. February 1996
     487           0 :             nFormatKey = rFormatter.GetFormatIndex( NF_DATE_SYS_NNNNDMMMMYYYY, eLang );
     488           0 :         break;
     489             :         default:
     490           0 :             nFormatKey = rFormatter.GetStandardFormat( NUMBERFORMAT_DATE, eLang );
     491             :     }
     492             : 
     493           0 :     double fDiffDate = aDate - *(rFormatter.GetNullDate());
     494           0 :     rtl::OUString aStr;
     495           0 :        Color* pColor = NULL;
     496           0 :     rFormatter.GetOutputString( fDiffDate, nFormatKey, aStr, &pColor );
     497           0 :     return aStr;
     498             : }
     499             : 
     500           0 : MetaAction* SvxDateField::createBeginComment() const
     501             : {
     502           0 :     return new MetaCommentAction( "FIELD_SEQ_BEGIN" );
     503             : }
     504             : 
     505         168 : SV_IMPL_PERSIST1( SvxURLField, SvxFieldData );
     506             : 
     507             : // -----------------------------------------------------------------------
     508             : 
     509           0 : SvxURLField::SvxURLField()
     510             : {
     511           0 :     eFormat = SVXURLFORMAT_URL;
     512           0 : }
     513             : 
     514             : // -----------------------------------------------------------------------
     515             : 
     516           8 : SvxURLField::SvxURLField( const rtl::OUString& rURL, const rtl::OUString& rRepres, SvxURLFormat eFmt )
     517           8 :     : aURL( rURL ), aRepresentation( rRepres )
     518             : {
     519           8 :     eFormat = eFmt;
     520           8 : }
     521             : 
     522             : // -----------------------------------------------------------------------
     523             : 
     524          24 : SvxFieldData* SvxURLField::Clone() const
     525             : {
     526          24 :     return new SvxURLField( *this );
     527             : }
     528             : 
     529             : // -----------------------------------------------------------------------
     530             : 
     531          42 : int SvxURLField::operator==( const SvxFieldData& rOther ) const
     532             : {
     533          42 :     if ( rOther.Type() != Type() )
     534           0 :         return sal_False;
     535             : 
     536          42 :     const SvxURLField& rOtherFld = (const SvxURLField&) rOther;
     537             :     return ( ( eFormat == rOtherFld.eFormat ) &&
     538          42 :                 ( aURL == rOtherFld.aURL ) &&
     539           0 :                 ( aRepresentation == rOtherFld.aRepresentation ) &&
     540          84 :                 ( aTargetFrame == rOtherFld.aTargetFrame ) );
     541             : }
     542             : 
     543             : // -----------------------------------------------------------------------
     544             : 
     545           0 : static void write_unicode( SvPersistStream & rStm, const rtl::OUString& rString )
     546             : {
     547           0 :     sal_uInt16 nL =  sal::static_int_cast<sal_uInt16>(rString.getLength());
     548           0 :     rStm << nL;
     549             :     //endian specific?, yipes!
     550           0 :     rStm.Write( rString.getStr(), nL*sizeof(sal_Unicode) );
     551           0 : }
     552             : 
     553           0 : static rtl::OUString read_unicode( SvPersistStream & rStm )
     554             : {
     555           0 :     rtl_uString *pStr = NULL;
     556           0 :     sal_uInt16 nL = 0;
     557           0 :     rStm >> nL;
     558           0 :     if ( nL )
     559             :     {
     560           0 :         pStr = rtl_uString_alloc(nL);
     561             :         //endian specific?, yipes!
     562           0 :         rStm.Read(pStr->buffer, nL*sizeof(sal_Unicode));
     563             :     }
     564             :     //take ownership of buffer and return, otherwise return empty string
     565           0 :     return pStr ? rtl::OUString(pStr, SAL_NO_ACQUIRE) : rtl::OUString();
     566             : }
     567             : 
     568           0 : void SvxURLField::Load( SvPersistStream & rStm )
     569             : {
     570           0 :     sal_uInt16 nFormat = 0;
     571             : 
     572           0 :     rStm >> nFormat;
     573           0 :     eFormat= (SvxURLFormat)nFormat;
     574             : 
     575           0 :     aURL = read_unicode( rStm );
     576           0 :     aRepresentation = read_unicode( rStm );
     577           0 :     aTargetFrame = read_unicode( rStm );
     578           0 : }
     579             : 
     580             : // -----------------------------------------------------------------------
     581             : 
     582           0 : void SvxURLField::Save( SvPersistStream & rStm )
     583             : {
     584           0 :     rStm << (sal_uInt16)eFormat;
     585             : 
     586           0 :     write_unicode( rStm, aURL );
     587           0 :     write_unicode( rStm, aRepresentation );
     588           0 :     write_unicode( rStm, aTargetFrame );
     589           0 : }
     590             : 
     591           0 : MetaAction* SvxURLField::createBeginComment() const
     592             : {
     593             :     // #i46618# Adding target URL to metafile comment
     594             :     return new MetaCommentAction( "FIELD_SEQ_BEGIN",
     595             :                                   0,
     596           0 :                                   reinterpret_cast<const sal_uInt8*>(aURL.getStr()),
     597           0 :                                   2*aURL.getLength() );
     598             : }
     599             : 
     600             : // =================================================================
     601             : // The fields that were removed from Calc:
     602             : // =================================================================
     603             : 
     604        5922 : SV_IMPL_PERSIST1( SvxPageField, SvxFieldData );
     605             : 
     606        1806 : SvxPageField::SvxPageField() {}
     607             : 
     608        1540 : SvxFieldData* SvxPageField::Clone() const
     609             : {
     610        1540 :     return new SvxPageField;        // empty
     611             : }
     612             : 
     613         139 : int SvxPageField::operator==( const SvxFieldData& rCmp ) const
     614             : {
     615         139 :     return ( rCmp.Type() == TYPE(SvxPageField) );
     616             : }
     617             : 
     618           0 : void SvxPageField::Load( SvPersistStream & /*rStm*/ )
     619             : {
     620           0 : }
     621             : 
     622          94 : void SvxPageField::Save( SvPersistStream & /*rStm*/ )
     623             : {
     624          94 : }
     625             : 
     626           0 : MetaAction* SvxPageField::createBeginComment() const
     627             : {
     628           0 :     return new MetaCommentAction( "FIELD_SEQ_BEGIN;PageField" );
     629             : }
     630             : 
     631             : 
     632         933 : SV_IMPL_PERSIST1( SvxPagesField, SvxFieldData );
     633             : 
     634         713 : SvxPagesField::SvxPagesField() {}
     635             : 
     636         620 : SvxFieldData* SvxPagesField::Clone() const
     637             : {
     638         620 :     return new SvxPagesField;   // empty
     639             : }
     640             : 
     641           4 : int SvxPagesField::operator==( const SvxFieldData& rCmp ) const
     642             : {
     643           4 :     return ( rCmp.Type() == TYPE(SvxPagesField) );
     644             : }
     645             : 
     646           0 : void SvxPagesField::Load( SvPersistStream & /*rStm*/ )
     647             : {
     648           0 : }
     649             : 
     650           0 : void SvxPagesField::Save( SvPersistStream & /*rStm*/ )
     651             : {
     652           0 : }
     653             : 
     654         656 : SV_IMPL_PERSIST1( SvxTimeField, SvxFieldData );
     655             : 
     656         515 : SvxTimeField::SvxTimeField() {}
     657             : 
     658         444 : SvxFieldData* SvxTimeField::Clone() const
     659             : {
     660         444 :     return new SvxTimeField;    // empty
     661             : }
     662             : 
     663           4 : int SvxTimeField::operator==( const SvxFieldData& rCmp ) const
     664             : {
     665           4 :     return ( rCmp.Type() == TYPE(SvxTimeField) );
     666             : }
     667             : 
     668           0 : void SvxTimeField::Load( SvPersistStream & /*rStm*/ )
     669             : {
     670           0 : }
     671             : 
     672           0 : void SvxTimeField::Save( SvPersistStream & /*rStm*/ )
     673             : {
     674           0 : }
     675             : 
     676           0 : MetaAction* SvxTimeField::createBeginComment() const
     677             : {
     678           0 :     return new MetaCommentAction( "FIELD_SEQ_BEGIN" );
     679             : }
     680             : 
     681         854 : SV_IMPL_PERSIST1( SvxFileField, SvxFieldData );
     682             : 
     683         735 : SvxFileField::SvxFileField() {}
     684             : 
     685         642 : SvxFieldData* SvxFileField::Clone() const
     686             : {
     687         642 :     return new SvxFileField;    // empty
     688             : }
     689             : 
     690           4 : int SvxFileField::operator==( const SvxFieldData& rCmp ) const
     691             : {
     692           4 :     return ( rCmp.Type() == TYPE(SvxFileField) );
     693             : }
     694             : 
     695           0 : void SvxFileField::Load( SvPersistStream & /*rStm*/ )
     696             : {
     697           0 : }
     698             : 
     699           0 : void SvxFileField::Save( SvPersistStream & /*rStm*/ )
     700             : {
     701           0 : }
     702             : 
     703        1693 : SV_IMPL_PERSIST1( SvxTableField, SvxFieldData );
     704             : 
     705         219 : SvxTableField::SvxTableField() : mnTab(0) {}
     706             : 
     707        1471 : SvxTableField::SvxTableField(int nTab) : mnTab(nTab) {}
     708             : 
     709           0 : void SvxTableField::SetTab(int nTab)
     710             : {
     711           0 :     mnTab = nTab;
     712           0 : }
     713             : 
     714           0 : int SvxTableField::GetTab() const
     715             : {
     716           0 :     return mnTab;
     717             : }
     718             : 
     719        1471 : SvxFieldData* SvxTableField::Clone() const
     720             : {
     721        1471 :     return new SvxTableField(mnTab);
     722             : }
     723             : 
     724         104 : int SvxTableField::operator==( const SvxFieldData& rCmp ) const
     725             : {
     726         104 :     if (rCmp.Type() != TYPE(SvxTableField))
     727           0 :         return false;
     728             : 
     729         104 :     return mnTab == static_cast<const SvxTableField&>(rCmp).mnTab;
     730             : }
     731             : 
     732           0 : void SvxTableField::Load( SvPersistStream & /*rStm*/ )
     733             : {
     734           0 : }
     735             : 
     736          94 : void SvxTableField::Save( SvPersistStream & /*rStm*/ )
     737             : {
     738          94 : }
     739             : 
     740             : //----------------------------------------------------------------------------
     741             : //      SvxExtTimeField
     742             : //----------------------------------------------------------------------------
     743             : 
     744         176 : SV_IMPL_PERSIST1( SvxExtTimeField, SvxFieldData );
     745             : 
     746             : //----------------------------------------------------------------------------
     747             : 
     748          22 : SvxExtTimeField::SvxExtTimeField()
     749             : {
     750          22 :     nFixTime = Time( Time::SYSTEM ).GetTime();
     751          22 :     eType = SVXTIMETYPE_VAR;
     752          22 :     eFormat = SVXTIMEFORMAT_STANDARD;
     753          22 : }
     754             : 
     755             : //----------------------------------------------------------------------------
     756             : 
     757           0 : SvxExtTimeField::SvxExtTimeField( const Time& rTime, SvxTimeType eT, SvxTimeFormat eF )
     758             : {
     759           0 :     nFixTime = rTime.GetTime();
     760           0 :     eType = eT;
     761           0 :     eFormat = eF;
     762           0 : }
     763             : 
     764             : //----------------------------------------------------------------------------
     765             : 
     766         176 : SvxFieldData* SvxExtTimeField::Clone() const
     767             : {
     768         176 :     return new SvxExtTimeField( *this );
     769             : }
     770             : 
     771             : //----------------------------------------------------------------------------
     772             : 
     773           0 : int SvxExtTimeField::operator==( const SvxFieldData& rOther ) const
     774             : {
     775           0 :     if ( rOther.Type() != Type() )
     776           0 :         return sal_False;
     777             : 
     778           0 :     const SvxExtTimeField& rOtherFld = (const SvxExtTimeField&) rOther;
     779             :     return ( ( nFixTime == rOtherFld.nFixTime ) &&
     780             :                 ( eType == rOtherFld.eType ) &&
     781           0 :                 ( eFormat == rOtherFld.eFormat ) );
     782             : }
     783             : 
     784             : //----------------------------------------------------------------------------
     785             : 
     786           0 : void SvxExtTimeField::Load( SvPersistStream & rStm )
     787             : {
     788             :     sal_uInt16 nType, nFormat;
     789             : 
     790           0 :     rStm >> nFixTime;
     791           0 :     rStm >> nType;
     792           0 :     rStm >> nFormat;
     793             : 
     794           0 :     eType = (SvxTimeType) nType;
     795           0 :     eFormat= (SvxTimeFormat) nFormat;
     796           0 : }
     797             : 
     798             : //----------------------------------------------------------------------------
     799             : 
     800           0 : void SvxExtTimeField::Save( SvPersistStream & rStm )
     801             : {
     802           0 :     rStm << nFixTime;
     803           0 :     rStm << (sal_uInt16) eType;
     804           0 :     rStm << (sal_uInt16) eFormat;
     805           0 : }
     806             : 
     807             : //----------------------------------------------------------------------------
     808             : 
     809           0 : rtl::OUString SvxExtTimeField::GetFormatted( SvNumberFormatter& rFormatter, LanguageType eLang ) const
     810             : {
     811           0 :     Time aTime( Time::EMPTY );
     812           0 :     if ( eType == SVXTIMETYPE_FIX )
     813           0 :         aTime.SetTime( nFixTime );
     814             :     else
     815           0 :         aTime = Time( Time::SYSTEM ); // current time
     816           0 :     return GetFormatted( aTime, eFormat, rFormatter, eLang );
     817             : }
     818             : 
     819           0 : rtl::OUString SvxExtTimeField::GetFormatted( Time& aTime, SvxTimeFormat eFormat, SvNumberFormatter& rFormatter, LanguageType eLang )
     820             : {
     821           0 :     switch( eFormat )
     822             :     {
     823             :         case SVXTIMEFORMAT_SYSTEM :
     824             :             OSL_FAIL( "SVXTIMEFORMAT_SYSTEM: not implemented" );
     825           0 :             eFormat = SVXTIMEFORMAT_STANDARD;
     826           0 :         break;
     827             :         case SVXTIMEFORMAT_APPDEFAULT :
     828             :             OSL_FAIL( "SVXTIMEFORMAT_APPDEFAULT: not implemented" );
     829           0 :             eFormat = SVXTIMEFORMAT_STANDARD;
     830           0 :         break;
     831             :         default: ;//prevent warning
     832             :     }
     833             : 
     834             :     sal_uInt32 nFormatKey;
     835             : 
     836           0 :     switch( eFormat )
     837             :     {
     838             :         case SVXTIMEFORMAT_12_HM:
     839           0 :             nFormatKey = rFormatter.GetFormatIndex( NF_TIME_HHMMAMPM, eLang );
     840           0 :             break;
     841             :         case SVXTIMEFORMAT_12_HMSH:
     842             :         {
     843             :             // no builtin format available, try to insert or reuse
     844           0 :             OUString aFormatCode( RTL_CONSTASCII_USTRINGPARAM( "HH:MM:SS.00 AM/PM" ) );
     845             :             sal_Int32 nCheckPos;
     846             :             short nType;
     847             :             rFormatter.PutandConvertEntry( aFormatCode, nCheckPos, nType,
     848           0 :                                            nFormatKey, LANGUAGE_ENGLISH_US, eLang );
     849             :             DBG_ASSERT( nCheckPos == 0, "SVXTIMEFORMAT_12_HMSH: could not insert format code" );
     850           0 :             if ( nCheckPos )
     851             :             {
     852           0 :                 nFormatKey = rFormatter.GetFormatIndex( NF_TIME_HH_MMSS00, eLang );
     853             :             }
     854           0 :             break;
     855             :         }
     856             :         case SVXTIMEFORMAT_24_HM:
     857           0 :             nFormatKey = rFormatter.GetFormatIndex( NF_TIME_HHMM, eLang );
     858           0 :             break;
     859             :         case SVXTIMEFORMAT_24_HMSH:
     860           0 :             nFormatKey = rFormatter.GetFormatIndex( NF_TIME_HH_MMSS00, eLang );
     861           0 :             break;
     862             :         case SVXTIMEFORMAT_12_HMS:
     863           0 :             nFormatKey = rFormatter.GetFormatIndex( NF_TIME_HHMMSSAMPM, eLang );
     864           0 :             break;
     865             :         case SVXTIMEFORMAT_24_HMS:
     866           0 :             nFormatKey = rFormatter.GetFormatIndex( NF_TIME_HHMMSS, eLang );
     867           0 :             break;
     868             :         case SVXTIMEFORMAT_STANDARD:
     869             :         default:
     870           0 :             nFormatKey = rFormatter.GetStandardFormat( NUMBERFORMAT_TIME, eLang );
     871             :     }
     872             : 
     873           0 :     double fFracTime = aTime.GetTimeInDays();
     874           0 :     OUString aStr;
     875           0 :     Color* pColor = NULL;
     876           0 :     rFormatter.GetOutputString( fFracTime, nFormatKey, aStr, &pColor );
     877           0 :     return aStr;
     878             : }
     879             : 
     880           0 : MetaAction* SvxExtTimeField::createBeginComment() const
     881             : {
     882           0 :     return new MetaCommentAction( "FIELD_SEQ_BEGIN" );
     883             : }
     884             : 
     885             : //----------------------------------------------------------------------------
     886             : //      SvxExtFileField
     887             : //----------------------------------------------------------------------------
     888             : 
     889           1 : SV_IMPL_PERSIST1( SvxExtFileField, SvxFieldData );
     890             : 
     891             : //----------------------------------------------------------------------------
     892             : 
     893           0 : SvxExtFileField::SvxExtFileField()
     894             : {
     895           0 :     eType = SVXFILETYPE_VAR;
     896           0 :     eFormat = SVXFILEFORMAT_FULLPATH;
     897           0 : }
     898             : 
     899             : //----------------------------------------------------------------------------
     900             : 
     901           1 : SvxExtFileField::SvxExtFileField( const rtl::OUString& rStr, SvxFileType eT, SvxFileFormat eF )
     902             : {
     903           1 :     aFile = rStr;
     904           1 :     eType = eT;
     905           1 :     eFormat = eF;
     906           1 : }
     907             : 
     908             : //----------------------------------------------------------------------------
     909             : 
     910           7 : SvxFieldData* SvxExtFileField::Clone() const
     911             : {
     912           7 :     return new SvxExtFileField( *this );
     913             : }
     914             : 
     915             : //----------------------------------------------------------------------------
     916             : 
     917           0 : int SvxExtFileField::operator==( const SvxFieldData& rOther ) const
     918             : {
     919           0 :     if ( rOther.Type() != Type() )
     920           0 :         return sal_False;
     921             : 
     922           0 :     const SvxExtFileField& rOtherFld = (const SvxExtFileField&) rOther;
     923           0 :     return ( ( aFile == rOtherFld.aFile ) &&
     924             :                 ( eType == rOtherFld.eType ) &&
     925           0 :                 ( eFormat == rOtherFld.eFormat ) );
     926             : }
     927             : 
     928             : //----------------------------------------------------------------------------
     929             : 
     930           0 : void SvxExtFileField::Load( SvPersistStream & rStm )
     931             : {
     932             :     sal_uInt16 nType, nFormat;
     933             : 
     934             :     // UNICODE: rStm >> aFile;
     935           0 :     aFile = rStm.ReadUniOrByteString(rStm.GetStreamCharSet());
     936             : 
     937           0 :     rStm >> nType;
     938           0 :     rStm >> nFormat;
     939             : 
     940           0 :     eType = (SvxFileType) nType;
     941           0 :     eFormat= (SvxFileFormat) nFormat;
     942           0 : }
     943             : 
     944             : //----------------------------------------------------------------------------
     945             : 
     946           0 : void SvxExtFileField::Save( SvPersistStream & rStm )
     947             : {
     948             :     // UNICODE: rStm << aFile;
     949           0 :     rStm.WriteUniOrByteString(aFile, rStm.GetStreamCharSet());
     950             : 
     951           0 :     rStm << (sal_uInt16) eType;
     952           0 :     rStm << (sal_uInt16) eFormat;
     953           0 : }
     954             : 
     955             : //----------------------------------------------------------------------------
     956             : 
     957           0 : rtl::OUString SvxExtFileField::GetFormatted() const
     958             : {
     959           0 :     rtl::OUString aString;
     960             : 
     961           0 :     INetURLObject aURLObj( aFile );
     962             : 
     963           0 :     if( INET_PROT_NOT_VALID == aURLObj.GetProtocol() )
     964             :     {
     965             :         // invalid? try to interpret string as system file name
     966           0 :         rtl::OUString aURLStr;
     967             : 
     968           0 :         ::utl::LocalFileHelper::ConvertPhysicalNameToURL( aFile, aURLStr );
     969             : 
     970           0 :         aURLObj.SetURL( aURLStr );
     971             :     }
     972             : 
     973             :     // #92009# Be somewhat liberate when trying to
     974             :     // get formatted content out of the FileField
     975           0 :     if( INET_PROT_NOT_VALID == aURLObj.GetProtocol() )
     976             :     {
     977             :         // still not valid? Then output as is
     978           0 :         aString = aFile;
     979             :     }
     980           0 :     else if( INET_PROT_FILE == aURLObj.GetProtocol() )
     981             :     {
     982           0 :         switch( eFormat )
     983             :         {
     984             :             case SVXFILEFORMAT_FULLPATH:
     985           0 :                 aString = aURLObj.getFSysPath(INetURLObject::FSYS_DETECT);
     986           0 :             break;
     987             : 
     988             :             case SVXFILEFORMAT_PATH:
     989           0 :                 aURLObj.removeSegment(INetURLObject::LAST_SEGMENT, false);
     990             :                 // #101742# Leave trailing slash at the pathname
     991           0 :                 aURLObj.setFinalSlash();
     992           0 :                 aString = aURLObj.getFSysPath(INetURLObject::FSYS_DETECT);
     993           0 :             break;
     994             : 
     995             :             case SVXFILEFORMAT_NAME:
     996           0 :                 aString = aURLObj.getBase(INetURLObject::LAST_SEGMENT,true,INetURLObject::DECODE_UNAMBIGUOUS);
     997           0 :             break;
     998             : 
     999             :             case SVXFILEFORMAT_NAME_EXT:
    1000           0 :                 aString = aURLObj.getName(INetURLObject::LAST_SEGMENT,true,INetURLObject::DECODE_UNAMBIGUOUS);
    1001           0 :             break;
    1002             :         }
    1003             :     }
    1004             :     else
    1005             :     {
    1006           0 :         switch( eFormat )
    1007             :         {
    1008             :             case SVXFILEFORMAT_FULLPATH:
    1009           0 :                 aString = aURLObj.GetMainURL( INetURLObject::DECODE_TO_IURI );
    1010           0 :             break;
    1011             : 
    1012             :             case SVXFILEFORMAT_PATH:
    1013           0 :                 aURLObj.removeSegment(INetURLObject::LAST_SEGMENT, false);
    1014             :                 // #101742# Leave trailing slash at the pathname
    1015           0 :                 aURLObj.setFinalSlash();
    1016           0 :                 aString = aURLObj.GetMainURL( INetURLObject::DECODE_TO_IURI );
    1017           0 :             break;
    1018             : 
    1019             :             case SVXFILEFORMAT_NAME:
    1020           0 :                 aString = aURLObj.getBase();
    1021           0 :             break;
    1022             : 
    1023             :             case SVXFILEFORMAT_NAME_EXT:
    1024           0 :                 aString = aURLObj.getName();
    1025           0 :             break;
    1026             :         }
    1027             :     }
    1028             : 
    1029           0 :     return aString;
    1030             : }
    1031             : 
    1032             : //----------------------------------------------------------------------------
    1033             : //      SvxAuthorField
    1034             : //----------------------------------------------------------------------------
    1035             : 
    1036          77 : SV_IMPL_PERSIST1( SvxAuthorField, SvxFieldData );
    1037             : 
    1038             : //----------------------------------------------------------------------------
    1039             : 
    1040           0 : SvxAuthorField::SvxAuthorField()
    1041             : {
    1042           0 :     eType = SVXAUTHORTYPE_VAR;
    1043           0 :     eFormat = SVXAUTHORFORMAT_FULLNAME;
    1044           0 : }
    1045             : 
    1046             : //----------------------------------------------------------------------------
    1047             : 
    1048           0 : SvxAuthorField::SvxAuthorField( const rtl::OUString& rFirstName,
    1049             :                                 const rtl::OUString& rLastName,
    1050             :                                 const rtl::OUString& rShortName,
    1051           0 :                                     SvxAuthorType eT, SvxAuthorFormat eF )
    1052             : {
    1053           0 :     aName      = rLastName;
    1054           0 :     aFirstName = rFirstName;
    1055           0 :     aShortName = rShortName;
    1056           0 :     eType   = eT;
    1057           0 :     eFormat = eF;
    1058           0 : }
    1059             : 
    1060             : //----------------------------------------------------------------------------
    1061             : 
    1062           0 : SvxFieldData* SvxAuthorField::Clone() const
    1063             : {
    1064           0 :     return new SvxAuthorField( *this );
    1065             : }
    1066             : 
    1067             : //----------------------------------------------------------------------------
    1068             : 
    1069           0 : int SvxAuthorField::operator==( const SvxFieldData& rOther ) const
    1070             : {
    1071           0 :     if ( rOther.Type() != Type() )
    1072           0 :         return sal_False;
    1073             : 
    1074           0 :     const SvxAuthorField& rOtherFld = (const SvxAuthorField&) rOther;
    1075           0 :     return ( ( aName == rOtherFld.aName ) &&
    1076           0 :                 ( aFirstName == rOtherFld.aFirstName ) &&
    1077           0 :                 ( aShortName == rOtherFld.aShortName ) &&
    1078             :                 ( eType == rOtherFld.eType ) &&
    1079           0 :                 ( eFormat == rOtherFld.eFormat ) );
    1080             : }
    1081             : 
    1082             : //----------------------------------------------------------------------------
    1083             : 
    1084           0 : void SvxAuthorField::Load( SvPersistStream & rStm )
    1085             : {
    1086           0 :     sal_uInt16 nType = 0, nFormat = 0;
    1087             : 
    1088           0 :     aName = read_unicode( rStm );
    1089           0 :     aFirstName = read_unicode( rStm );
    1090           0 :     aShortName = read_unicode( rStm );
    1091             : 
    1092           0 :     rStm >> nType;
    1093           0 :     rStm >> nFormat;
    1094             : 
    1095           0 :     eType = (SvxAuthorType) nType;
    1096           0 :     eFormat= (SvxAuthorFormat) nFormat;
    1097           0 : }
    1098             : 
    1099             : //----------------------------------------------------------------------------
    1100             : 
    1101           0 : void SvxAuthorField::Save( SvPersistStream & rStm )
    1102             : {
    1103           0 :     write_unicode( rStm, aName );
    1104           0 :     write_unicode( rStm, aFirstName );
    1105           0 :     write_unicode( rStm, aShortName );
    1106             : 
    1107           0 :     rStm << (sal_uInt16) eType;
    1108           0 :     rStm << (sal_uInt16) eFormat;
    1109           0 : }
    1110             : 
    1111             : //----------------------------------------------------------------------------
    1112             : 
    1113           0 : rtl::OUString SvxAuthorField::GetFormatted() const
    1114             : {
    1115           0 :     rtl::OUString aString;
    1116             : 
    1117           0 :     switch( eFormat )
    1118             :     {
    1119             :         case SVXAUTHORFORMAT_FULLNAME:
    1120             :         {
    1121           0 :             rtl::OUStringBuffer aBuf(aFirstName);
    1122           0 :             aBuf.append(sal_Unicode(' '));
    1123           0 :             aBuf.append(aName);
    1124           0 :             aString = aBuf.makeStringAndClear();
    1125             :         }
    1126           0 :         break;
    1127             :         case SVXAUTHORFORMAT_NAME:
    1128           0 :             aString = aName;
    1129           0 :         break;
    1130             : 
    1131             :         case SVXAUTHORFORMAT_FIRSTNAME:
    1132           0 :             aString = aFirstName;
    1133           0 :         break;
    1134             : 
    1135             :         case SVXAUTHORFORMAT_SHORTNAME:
    1136           0 :             aString = aShortName;
    1137           0 :         break;
    1138             :     }
    1139             : 
    1140           0 :     return aString;
    1141             : }
    1142             : 
    1143             : static SvClassManager* pClassMgr=0;
    1144             : 
    1145         265 : SvClassManager& SvxFieldItem::GetClassManager()
    1146             : {
    1147         265 :     if ( !pClassMgr )
    1148             :     {
    1149          18 :         pClassMgr = new SvClassManager;
    1150          18 :         pClassMgr->Register(SvxFieldData::StaticClassId(),    SvxFieldData::CreateInstance);
    1151          18 :         pClassMgr->Register(SvxURLField::StaticClassId(),     SvxURLField::CreateInstance);
    1152          18 :         pClassMgr->Register(SvxDateField::StaticClassId(),    SvxDateField::CreateInstance);
    1153          18 :         pClassMgr->Register(SvxPageField::StaticClassId(),    SvxPageField::CreateInstance);
    1154          18 :         pClassMgr->Register(SvxTimeField::StaticClassId(),    SvxTimeField::CreateInstance);
    1155          18 :         pClassMgr->Register(SvxExtTimeField::StaticClassId(), SvxExtTimeField::CreateInstance);
    1156          18 :         pClassMgr->Register(SvxExtFileField::StaticClassId(), SvxExtFileField::CreateInstance);
    1157          18 :         pClassMgr->Register(SvxAuthorField::StaticClassId(),  SvxAuthorField::CreateInstance);
    1158             :     }
    1159             : 
    1160         265 :     return *pClassMgr;
    1161             : }
    1162             : 
    1163             : ///////////////////////////////////////////////////////////////////////
    1164             : 
    1165        3797 : SV_IMPL_PERSIST1( SvxHeaderField, SvxFieldData );
    1166             : 
    1167          78 : SvxHeaderField::SvxHeaderField() {}
    1168             : 
    1169          52 : SvxFieldData* SvxHeaderField::Clone() const
    1170             : {
    1171          52 :     return new SvxHeaderField;      // empty
    1172             : }
    1173             : 
    1174          15 : int SvxHeaderField::operator==( const SvxFieldData& rCmp ) const
    1175             : {
    1176          15 :     return ( rCmp.Type() == TYPE(SvxHeaderField) );
    1177             : }
    1178             : 
    1179           0 : void SvxHeaderField::Load( SvPersistStream & /*rStm*/ )
    1180             : {
    1181           0 : }
    1182             : 
    1183           0 : void SvxHeaderField::Save( SvPersistStream & /*rStm*/ )
    1184             : {
    1185           0 : }
    1186             : 
    1187             : ///////////////////////////////////////////////////////////////////////
    1188             : 
    1189        4530 : SV_IMPL_PERSIST1( SvxFooterField, SvxFieldData );
    1190         123 : SvxFooterField::SvxFooterField() {}
    1191             : 
    1192          82 : SvxFieldData* SvxFooterField::Clone() const
    1193             : {
    1194          82 :     return new SvxFooterField;      // empty
    1195             : }
    1196             : 
    1197          30 : int SvxFooterField::operator==( const SvxFieldData& rCmp ) const
    1198             : {
    1199          30 :     return ( rCmp.Type() == TYPE(SvxFooterField) );
    1200             : }
    1201             : 
    1202           0 : void SvxFooterField::Load( SvPersistStream & /*rStm*/ )
    1203             : {
    1204           0 : }
    1205             : 
    1206           0 : void SvxFooterField::Save( SvPersistStream & /*rStm*/ )
    1207             : {
    1208           0 : }
    1209             : 
    1210             : ///////////////////////////////////////////////////////////////////////
    1211             : 
    1212        4714 : SV_IMPL_PERSIST1( SvxDateTimeField, SvxFieldData );
    1213             : 
    1214          81 : SvxFieldData* SvxDateTimeField::Clone() const
    1215             : {
    1216          81 :     return new SvxDateTimeField;        // empty
    1217             : }
    1218             : 
    1219          29 : int SvxDateTimeField::operator==( const SvxFieldData& rCmp ) const
    1220             : {
    1221          29 :     return ( rCmp.Type() == TYPE(SvxDateTimeField) );
    1222             : }
    1223             : 
    1224           0 : void SvxDateTimeField::Load( SvPersistStream & /*rStm*/ )
    1225             : {
    1226           0 : }
    1227             : 
    1228           0 : void SvxDateTimeField::Save( SvPersistStream & /*rStm*/ )
    1229             : {
    1230           0 : }
    1231             : 
    1232         121 : SvxDateTimeField::SvxDateTimeField() {}
    1233             : 
    1234           0 : rtl::OUString SvxDateTimeField::GetFormatted(
    1235             :     Date& rDate, Time& rTime, int eFormat, SvNumberFormatter& rFormatter, LanguageType eLanguage )
    1236             : {
    1237           0 :     rtl::OUString aRet;
    1238             : 
    1239           0 :     SvxDateFormat eDateFormat = (SvxDateFormat)(eFormat & 0x0f);
    1240             : 
    1241           0 :     if(eDateFormat)
    1242             :     {
    1243           0 :         aRet = SvxDateField::GetFormatted( rDate, eDateFormat, rFormatter, eLanguage );
    1244             :     }
    1245             : 
    1246           0 :     SvxTimeFormat eTimeFormat = (SvxTimeFormat)((eFormat >> 4) & 0x0f);
    1247             : 
    1248           0 :     if(eTimeFormat)
    1249             :     {
    1250           0 :         rtl::OUStringBuffer aBuf(aRet);
    1251             : 
    1252           0 :         if (!aRet.isEmpty())
    1253           0 :             aBuf.append(sal_Unicode(' '));
    1254             : 
    1255             :         aBuf.append(
    1256           0 :             SvxExtTimeField::GetFormatted(rTime, eTimeFormat, rFormatter, eLanguage));
    1257             : 
    1258           0 :         aRet = aBuf.makeStringAndClear();
    1259             :     }
    1260             : 
    1261           0 :     return aRet;
    1262             : }
    1263             : 
    1264             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10