summaryrefslogtreecommitdiff
path: root/binfilter/bf_sc/source/core/tool/sc_unitconv.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'binfilter/bf_sc/source/core/tool/sc_unitconv.cxx')
-rw-r--r--binfilter/bf_sc/source/core/tool/sc_unitconv.cxx179
1 files changed, 179 insertions, 0 deletions
diff --git a/binfilter/bf_sc/source/core/tool/sc_unitconv.cxx b/binfilter/bf_sc/source/core/tool/sc_unitconv.cxx
new file mode 100644
index 000000000000..f06952cf4ded
--- /dev/null
+++ b/binfilter/bf_sc/source/core/tool/sc_unitconv.cxx
@@ -0,0 +1,179 @@
+/* -*- 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.
+ *
+ ************************************************************************/
+
+#ifdef _MSC_VER
+#pragma hdrstop
+#endif
+
+
+#include "unitconv.hxx"
+#include "viewopti.hxx" //! move ScLinkConfigItem to separate header!
+namespace binfilter {
+
+using namespace utl;
+using namespace rtl;
+using namespace ::com::sun::star::uno;
+
+// --------------------------------------------------------------------
+
+/*N*/ const sal_Unicode cDelim = 0x01; // Delimiter zwischen From und To
+
+
+// --- ScUnitConverterData --------------------------------------------
+
+/*N*/ ScUnitConverterData::ScUnitConverterData( const String& rFromUnit,
+/*N*/ const String& rToUnit, double fVal )
+/*N*/ :
+/*N*/ StrData( rFromUnit ),
+/*N*/ fValue( fVal )
+/*N*/ {
+/*N*/ String aTmp;
+/*N*/ ScUnitConverterData::BuildIndexString( aTmp, rFromUnit, rToUnit );
+/*N*/ SetString( aTmp );
+/*N*/ }
+
+
+/*N*/ ScUnitConverterData::ScUnitConverterData( const ScUnitConverterData& r )
+/*N*/ :
+/*N*/ StrData( r ),
+/*N*/ fValue( r.fValue )
+/*N*/ {
+/*N*/ }
+
+
+/*N*/ DataObject* ScUnitConverterData::Clone() const
+/*N*/ {
+/*N*/ return new ScUnitConverterData( *this );
+/*N*/ }
+
+
+// static
+/*N*/ void ScUnitConverterData::BuildIndexString( String& rStr,
+/*N*/ const String& rFromUnit, const String& rToUnit )
+/*N*/ {
+/*N*/ #if 1
+/*N*/ // case sensitive
+/*N*/ rStr = rFromUnit;
+/*N*/ rStr += cDelim;
+/*N*/ rStr += rToUnit;
+/*N*/ #else
+/*N*/ // not case sensitive
+/*N*/ rStr = rFromUnit;
+/*N*/ String aTo( rToUnit );
+/*N*/ ScGlobal::pCharClass->toUpper( rStr );
+/*N*/ ScGlobal::pCharClass->toUpper( aTo );
+/*N*/ rStr += cDelim;
+/*N*/ rStr += aTo;
+/*N*/ #endif
+/*N*/ }
+
+
+// --- ScUnitConverter ------------------------------------------------
+
+/*N*/ #define CFGPATH_UNIT "Office.Calc/UnitConversion"
+/*N*/ #define CFGSTR_UNIT_FROM "FromUnit"
+/*N*/ #define CFGSTR_UNIT_TO "ToUnit"
+/*N*/ #define CFGSTR_UNIT_FACTOR "Factor"
+
+/*N*/ ScUnitConverter::ScUnitConverter( USHORT nInit, USHORT nDelta ) :
+/*N*/ StrCollection( nInit, nDelta, FALSE )
+/*N*/ {
+/*N*/ // read from configuration - "convert.ini" is no longer used
+/*N*/ //! config item as member to allow change of values
+/*N*/
+/*N*/ ScLinkConfigItem aConfigItem( OUString::createFromAscii( CFGPATH_UNIT ) );
+/*N*/
+/*N*/ // empty node name -> use the config item's path itself
+/*N*/ OUString aEmptyString;
+/*N*/ Sequence<OUString> aNodeNames = aConfigItem.GetNodeNames( aEmptyString );
+/*N*/
+/*N*/ long nNodeCount = aNodeNames.getLength();
+/*N*/ if ( nNodeCount )
+/*N*/ {
+/*N*/ const OUString* pNodeArray = aNodeNames.getConstArray();
+/*N*/ Sequence<OUString> aValNames( nNodeCount * 3 );
+/*N*/ OUString* pValNameArray = aValNames.getArray();
+/*N*/ const OUString sSlash('/');
+/*N*/
+/*N*/ long nIndex = 0;
+/*N*/ for (long i=0; i<nNodeCount; i++)
+/*N*/ {
+/*N*/ OUString sPrefix = pNodeArray[i];
+/*N*/ sPrefix += sSlash;
+/*N*/
+/*N*/ pValNameArray[nIndex] = sPrefix;
+/*N*/ pValNameArray[nIndex++] += OUString::createFromAscii( CFGSTR_UNIT_FROM );
+/*N*/ pValNameArray[nIndex] = sPrefix;
+/*N*/ pValNameArray[nIndex++] += OUString::createFromAscii( CFGSTR_UNIT_TO );
+/*N*/ pValNameArray[nIndex] = sPrefix;
+/*N*/ pValNameArray[nIndex++] += OUString::createFromAscii( CFGSTR_UNIT_FACTOR );
+/*N*/ }
+/*N*/
+/*N*/ Sequence<Any> aProperties = aConfigItem.GetProperties(aValNames);
+/*N*/
+/*N*/ if (aProperties.getLength() == aValNames.getLength())
+/*N*/ {
+/*N*/ const Any* pProperties = aProperties.getConstArray();
+/*N*/
+/*N*/ OUString sFromUnit;
+/*N*/ OUString sToUnit;
+/*N*/ double fFactor;
+/*N*/
+/*N*/ nIndex = 0;
+/*N*/ for (long i=0; i<nNodeCount; i++)
+/*N*/ {
+/*N*/ pProperties[nIndex++] >>= sFromUnit;
+/*N*/ pProperties[nIndex++] >>= sToUnit;
+/*N*/ pProperties[nIndex++] >>= fFactor;
+/*N*/
+/*N*/ ScUnitConverterData* pNew = new ScUnitConverterData( sFromUnit, sToUnit, fFactor );
+/*N*/ if ( !Insert( pNew ) )
+/*N*/ delete pNew;
+/*N*/ }
+/*N*/ }
+/*N*/ }
+/*N*/ }
+
+/*N*/ BOOL ScUnitConverter::GetValue( double& fValue, const String& rFromUnit,
+/*N*/ const String& rToUnit ) const
+/*N*/ {
+/*N*/ ScUnitConverterData aSearch( rFromUnit, rToUnit );
+/*N*/ USHORT nIndex;
+/*N*/ if ( Search( &aSearch, nIndex ) )
+/*N*/ {
+/*N*/ fValue = ((const ScUnitConverterData*)(At( nIndex )))->GetValue();
+/*N*/ return TRUE;
+/*N*/ }
+/*N*/ fValue = 1.0;
+/*N*/ return FALSE;
+/*N*/ }
+
+
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */