office-gobmx/svl/source/items/dateitem.cxx
2012-02-05 21:40:30 +04:00

206 lines
6.8 KiB
C++

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* Copyright 2000, 2010 Oracle and/or its affiliates.
*
* OpenOffice.org - a multi-platform office productivity suite
*
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License version 3
* only, as published by the Free Software Foundation.
*
* OpenOffice.org is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License version 3 for more details
* (a copy is included in the LICENSE file that accompanied this code).
*
* You should have received a copy of the GNU Lesser General Public License
* version 3 along with OpenOffice.org. If not, see
* <http://www.openoffice.org/license.html>
* for a copy of the LGPLv3 License.
*
************************************************************************/
// include ---------------------------------------------------------------
#define _DATETIMEITEM_CXX
#include <svl/dateitem.hxx>
#include <svl/svl.hrc>
#include <unotools/intlwrapper.hxx>
#include <comphelper/processfactory.hxx>
#include <tools/stream.hxx>
#include <tools/debug.hxx>
#include <tools/datetime.hxx>
#include <com/sun/star/uno/Any.hxx>
#include <com/sun/star/util/DateTime.hpp>
#include <com/sun/star/lang/Locale.hpp>
// STATIC DATA -----------------------------------------------------------
DBG_NAME(SfxDateTimeItem)
// -----------------------------------------------------------------------
TYPEINIT1(SfxDateTimeItem, SfxPoolItem);
// -----------------------------------------------------------------------
SfxDateTimeItem::SfxDateTimeItem( sal_uInt16 which, const DateTime& rDT ) :
SfxPoolItem( which ),
aDateTime( rDT )
{
DBG_CTOR(SfxDateTimeItem, 0);
}
// -----------------------------------------------------------------------
SfxDateTimeItem::SfxDateTimeItem( const SfxDateTimeItem& rItem ) :
SfxPoolItem( rItem ),
aDateTime( rItem.aDateTime )
{
DBG_CTOR(SfxDateTimeItem, 0);
}
// -----------------------------------------------------------------------
int SfxDateTimeItem::operator==( const SfxPoolItem& rItem ) const
{
DBG_CHKTHIS(SfxDateTimeItem, 0);
DBG_ASSERT( SfxPoolItem::operator==( rItem ), "unequal type" );
return ( ( (SfxDateTimeItem&)rItem ).aDateTime == aDateTime );
}
// -----------------------------------------------------------------------
int SfxDateTimeItem::Compare( const SfxPoolItem& rItem ) const
{
DBG_CHKTHIS(SfxDateTimeItem, 0);
DBG_ASSERT( SfxPoolItem::operator==( rItem ), "unequal type" );
// da X.Compare( Y ) am String einem Compare( Y, X ) entspricht,
// vergleichen wir hier Y mit X
if ( ( (const SfxDateTimeItem&)rItem ).aDateTime < aDateTime )
return -1;
else if ( ( (const SfxDateTimeItem&)rItem ).aDateTime == aDateTime )
return 0;
else
return 1;
}
// -----------------------------------------------------------------------
SfxPoolItem* SfxDateTimeItem::Create( SvStream& rStream, sal_uInt16 ) const
{
DBG_CHKTHIS(SfxDateTimeItem, 0);
sal_uInt32 nDate = 0;
sal_Int32 nTime = 0;
rStream >> nDate;
rStream >> nTime;
DateTime aDT(nDate, nTime);
return new SfxDateTimeItem( Which(), aDT );
}
// -----------------------------------------------------------------------
SvStream& SfxDateTimeItem::Store( SvStream& rStream, sal_uInt16 ) const
{
DBG_CHKTHIS(SfxDateTimeItem, 0);
rStream << aDateTime.GetDate();
rStream << aDateTime.GetTime();
return rStream;
}
// -----------------------------------------------------------------------
SfxPoolItem* SfxDateTimeItem::Clone( SfxItemPool* ) const
{
DBG_CHKTHIS(SfxDateTimeItem, 0);
return new SfxDateTimeItem( *this );
}
// -----------------------------------------------------------------------
SfxItemPresentation SfxDateTimeItem::GetPresentation
(
SfxItemPresentation /*ePresentation*/,
SfxMapUnit /*eCoreMetric*/,
SfxMapUnit /*ePresentationMetric*/,
XubString& rText,
const IntlWrapper * pIntlWrapper
) const
{
DBG_CHKTHIS(SfxDateTimeItem, 0);
if (aDateTime.IsValidDate())
if (pIntlWrapper)
{
rText = pIntlWrapper->getLocaleData()->getDate(aDateTime);
rText.AppendAscii(RTL_CONSTASCII_STRINGPARAM(", "));
rText += pIntlWrapper->getLocaleData()->getTime(aDateTime);
}
else
{
DBG_WARNING("SfxDateTimeItem::GetPresentation():"
" Using default en_US IntlWrapper");
const IntlWrapper aIntlWrapper(
::comphelper::getProcessServiceFactory(), LANGUAGE_ENGLISH_US );
rText = aIntlWrapper.getLocaleData()->getDate(aDateTime);
rText.AppendAscii(RTL_CONSTASCII_STRINGPARAM(", "));
rText += aIntlWrapper.getLocaleData()->getTime(aDateTime);
}
else
rText.Erase();
return SFX_ITEM_PRESENTATION_NAMELESS;
}
//----------------------------------------------------------------------------
// virtual
bool SfxDateTimeItem::PutValue( const com::sun::star::uno::Any& rVal,
sal_uInt8 nMemberId )
{
nMemberId &= ~CONVERT_TWIPS;
com::sun::star::util::DateTime aValue;
if ( rVal >>= aValue )
{
aDateTime = DateTime( Date( aValue.Day,
aValue.Month,
aValue.Year ),
Time( aValue.Hours,
aValue.Minutes,
aValue.Seconds,
aValue.HundredthSeconds ) );
return true;
}
OSL_FAIL( "SfxDateTimeItem::PutValue - Wrong type!" );
return false;
}
//----------------------------------------------------------------------------
// virtual
bool SfxDateTimeItem::QueryValue( com::sun::star::uno::Any& rVal,
sal_uInt8 nMemberId ) const
{
nMemberId &= ~CONVERT_TWIPS;
com::sun::star::util::DateTime aValue( aDateTime.Get100Sec(),
aDateTime.GetSec(),
aDateTime.GetMin(),
aDateTime.GetHour(),
aDateTime.GetDay(),
aDateTime.GetMonth(),
aDateTime.GetYear() );
rVal <<= aValue;
return true;
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */