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

Generated by: LCOV version 1.10