summaryrefslogtreecommitdiff
path: root/sw/source/core/fields/flddat.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sw/source/core/fields/flddat.cxx')
-rw-r--r--sw/source/core/fields/flddat.cxx321
1 files changed, 321 insertions, 0 deletions
diff --git a/sw/source/core/fields/flddat.cxx b/sw/source/core/fields/flddat.cxx
new file mode 100644
index 000000000000..f932a1110820
--- /dev/null
+++ b/sw/source/core/fields/flddat.cxx
@@ -0,0 +1,321 @@
+/*************************************************************************
+ *
+ * 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.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_sw.hxx"
+
+// #include <math.h>
+#include <tools/datetime.hxx>
+#include <svl/zforlist.hxx>
+#include <com/sun/star/util/DateTime.hpp>
+#include <doc.hxx>
+#include <fldbas.hxx>
+#include <flddat.hxx>
+#include <unofldmid.h>
+
+using namespace ::com::sun::star;
+/*--------------------------------------------------
+ Beschreibung: Datum/Zeit-Typ
+ ---------------------------------------------------*/
+
+SwDateTimeFieldType::SwDateTimeFieldType(SwDoc* pInitDoc)
+ : SwValueFieldType( pInitDoc, RES_DATETIMEFLD )
+{}
+
+/*--------------------------------------------------------------------
+ Beschreibung:
+ --------------------------------------------------------------------*/
+
+SwFieldType* SwDateTimeFieldType::Copy() const
+{
+ SwDateTimeFieldType *pTmp = new SwDateTimeFieldType(GetDoc());
+ return pTmp;
+}
+
+/*--------------------------------------------------------------------
+ Beschreibung: Datum/Zeit-Feld
+ --------------------------------------------------------------------*/
+
+SwDateTimeField::SwDateTimeField(SwDateTimeFieldType* pInitType, USHORT nSub, ULONG nFmt, USHORT nLng)
+ : SwValueField(pInitType, nFmt, nLng, 0.0),
+ nSubType(nSub),
+ nOffset(0)
+{
+ if (!nFmt)
+ {
+ SvNumberFormatter* pFormatter = GetDoc()->GetNumberFormatter();
+ if (nSubType & DATEFLD)
+ ChangeFormat(pFormatter->GetFormatIndex(NF_DATE_SYSTEM_SHORT, GetLanguage()));
+ else
+ ChangeFormat(pFormatter->GetFormatIndex(NF_TIME_HHMMSS, GetLanguage()));
+ }
+ if (IsFixed())
+ {
+ DateTime aDateTime;
+ SetDateTime(aDateTime);
+ }
+}
+
+/*--------------------------------------------------------------------
+ Beschreibung:
+ --------------------------------------------------------------------*/
+
+String SwDateTimeField::Expand() const
+{
+ double fVal;
+
+ if (!(IsFixed()))
+ {
+ DateTime aDateTime;
+ fVal = GetDateTime(GetDoc(), aDateTime);
+ }
+ else
+ fVal = GetValue();
+
+ if (nOffset)
+ fVal += (double)(nOffset * 60L) / 86400.0;
+
+ return ExpandValue(fVal, GetFormat(), GetLanguage());
+}
+
+/*--------------------------------------------------------------------
+ Beschreibung:
+ --------------------------------------------------------------------*/
+
+SwField* SwDateTimeField::Copy() const
+{
+ SwDateTimeField *pTmp =
+ new SwDateTimeField((SwDateTimeFieldType*)GetTyp(), nSubType,
+ GetFormat(), GetLanguage());
+
+ pTmp->SetValue(GetValue());
+ pTmp->SetOffset(nOffset);
+ pTmp->SetAutomaticLanguage(IsAutomaticLanguage());
+
+ return pTmp;
+}
+
+/*--------------------------------------------------------------------
+ Beschreibung:
+ --------------------------------------------------------------------*/
+
+USHORT SwDateTimeField::GetSubType() const
+{
+ return nSubType;
+}
+
+/*--------------------------------------------------------------------
+ Beschreibung:
+ --------------------------------------------------------------------*/
+
+void SwDateTimeField::SetSubType(USHORT nType)
+{
+ nSubType = nType;
+}
+/*--------------------------------------------------------------------
+ Beschreibung:
+ --------------------------------------------------------------------*/
+
+void SwDateTimeField::SetPar2(const String& rStr)
+{
+ nOffset = rStr.ToInt32();
+}
+
+/*--------------------------------------------------------------------
+ Beschreibung:
+ --------------------------------------------------------------------*/
+
+String SwDateTimeField::GetPar2() const
+{
+ if (nOffset)
+ return String::CreateFromInt32(nOffset);
+ else
+ return aEmptyStr;
+}
+
+/*--------------------------------------------------------------------
+ Beschreibung:
+ --------------------------------------------------------------------*/
+
+void SwDateTimeField::SetDateTime(const DateTime& rDT)
+{
+ SetValue(GetDateTime(GetDoc(), rDT));
+}
+
+/*--------------------------------------------------------------------
+ Beschreibung:
+ --------------------------------------------------------------------*/
+
+double SwDateTimeField::GetDateTime(SwDoc* pDoc, const DateTime& rDT)
+{
+ SvNumberFormatter* pFormatter = pDoc->GetNumberFormatter();
+ Date* pNullDate = pFormatter->GetNullDate();
+
+ double fResult = rDT - DateTime(*pNullDate);
+
+ return fResult;
+}
+
+/*--------------------------------------------------------------------
+ Beschreibung:
+ --------------------------------------------------------------------*/
+
+double SwDateTimeField::GetValue() const
+{
+ if (IsFixed())
+ return SwValueField::GetValue();
+ else
+ return GetDateTime(GetDoc(), DateTime());
+}
+
+/*--------------------------------------------------------------------
+ Beschreibung:
+ --------------------------------------------------------------------*/
+
+Date SwDateTimeField::GetDate(BOOL bUseOffset) const
+{
+ SvNumberFormatter* pFormatter = GetDoc()->GetNumberFormatter();
+ Date* pNullDate = pFormatter->GetNullDate();
+
+ long nVal = static_cast<long>( GetValue() );
+
+ if (bUseOffset && nOffset)
+ nVal += nOffset / 60 / 24;
+
+ Date aDate = *pNullDate + nVal;
+
+ return aDate;
+}
+
+/*--------------------------------------------------------------------
+ Beschreibung:
+ --------------------------------------------------------------------*/
+
+Time SwDateTimeField::GetTime(BOOL bUseOffset) const
+{
+ double fDummy;
+ double fFract = modf(GetValue(), &fDummy);
+ DateTime aDT((long)fDummy, 0);
+ aDT += fFract;
+ if (bUseOffset)
+ aDT += Time(0, nOffset);
+ return (Time)aDT;
+}
+
+/*-----------------04.03.98 11:05-------------------
+
+--------------------------------------------------*/
+BOOL SwDateTimeField::QueryValue( uno::Any& rVal, USHORT nWhichId ) const
+{
+ switch( nWhichId )
+ {
+ case FIELD_PROP_BOOL1:
+ {
+ BOOL bTmp = IsFixed();
+ rVal.setValue(&bTmp, ::getCppuBooleanType());
+ }
+ break;
+ case FIELD_PROP_BOOL2:
+ {
+ BOOL bTmp = IsDate();
+ rVal.setValue(&bTmp, ::getCppuBooleanType());
+ }
+ break;
+ case FIELD_PROP_FORMAT:
+ rVal <<= (sal_Int32)GetFormat();
+ break;
+ case FIELD_PROP_SUBTYPE:
+ rVal <<= (sal_Int32)nOffset;
+ break;
+ case FIELD_PROP_DATE_TIME:
+ {
+ DateTime aDateTime(GetDate(), GetTime());
+
+ util::DateTime DateTimeValue;
+ DateTimeValue.HundredthSeconds = aDateTime.Get100Sec();
+ DateTimeValue.Seconds = aDateTime.GetSec();
+ DateTimeValue.Minutes = aDateTime.GetMin();
+ DateTimeValue.Hours = aDateTime.GetHour();
+ DateTimeValue.Day = aDateTime.GetDay();
+ DateTimeValue.Month = aDateTime.GetMonth();
+ DateTimeValue.Year = aDateTime.GetYear();
+ rVal <<= DateTimeValue;
+ }
+ break;
+ default:
+ return SwField::QueryValue(rVal, nWhichId);
+ }
+ return TRUE;
+}
+/*-----------------04.03.98 11:05-------------------
+
+--------------------------------------------------*/
+BOOL SwDateTimeField::PutValue( const uno::Any& rVal, USHORT nWhichId )
+{
+ sal_Int32 nTmp = 0;
+ switch( nWhichId )
+ {
+ case FIELD_PROP_BOOL1:
+ if(*(sal_Bool*)rVal.getValue())
+ nSubType |= FIXEDFLD;
+ else
+ nSubType &= ~FIXEDFLD;
+ break;
+ case FIELD_PROP_BOOL2:
+ nSubType &= ~(DATEFLD|TIMEFLD);
+ nSubType |= *(sal_Bool*)rVal.getValue() ? DATEFLD : TIMEFLD;
+ break;
+ case FIELD_PROP_FORMAT:
+ rVal >>= nTmp;
+ ChangeFormat(nTmp);
+ break;
+ case FIELD_PROP_SUBTYPE:
+ rVal >>= nTmp;
+ nOffset = nTmp;
+ break;
+ case FIELD_PROP_DATE_TIME:
+ {
+ util::DateTime aDateTimeValue;
+ if(!(rVal >>= aDateTimeValue))
+ return FALSE;
+ DateTime aDateTime;
+ aDateTime.Set100Sec(aDateTimeValue.HundredthSeconds);
+ aDateTime.SetSec(aDateTimeValue.Seconds);
+ aDateTime.SetMin(aDateTimeValue.Minutes);
+ aDateTime.SetHour(aDateTimeValue.Hours);
+ aDateTime.SetDay(aDateTimeValue.Day);
+ aDateTime.SetMonth(aDateTimeValue.Month);
+ aDateTime.SetYear(aDateTimeValue.Year);
+ SetDateTime(aDateTime);
+ }
+ break;
+ default:
+ return SwField::PutValue(rVal, nWhichId);
+ }
+ return TRUE;
+}
+