diff options
author | Noel Power <noel.power@novell.com> | 2012-03-16 12:28:31 +0000 |
---|---|---|
committer | Noel Power <noel.power@novell.com> | 2012-03-16 12:31:01 +0000 |
commit | 8ada1cd2846e5e60ad63250c68ddea3a9356546f (patch) | |
tree | 574efba318e00e132f56b7b800ce04f547d2fa92 /oox/source/xls/workbooksettings.cxx | |
parent | 8f29699cd1723bd8b8acc25033708f9777576d6d (diff) |
move excel related oox bits to sc
Diffstat (limited to 'oox/source/xls/workbooksettings.cxx')
-rw-r--r-- | oox/source/xls/workbooksettings.cxx | 384 |
1 files changed, 0 insertions, 384 deletions
diff --git a/oox/source/xls/workbooksettings.cxx b/oox/source/xls/workbooksettings.cxx deleted file mode 100644 index f9eb011e01df..000000000000 --- a/oox/source/xls/workbooksettings.cxx +++ /dev/null @@ -1,384 +0,0 @@ -/* -*- 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 "oox/xls/workbooksettings.hxx" - -#include <com/sun/star/sheet/XCalculatable.hpp> -#include <com/sun/star/util/Date.hpp> -#include <com/sun/star/util/XNumberFormatsSupplier.hpp> -#include <comphelper/mediadescriptor.hxx> -#include "oox/core/filterbase.hxx" -#include "oox/helper/attributelist.hxx" -#include "oox/helper/propertyset.hxx" -#include "oox/core/xmlfilterbase.hxx" -#include "oox/xls/biffinputstream.hxx" -#include "oox/xls/unitconverter.hxx" - -namespace oox { -namespace xls { - -// ============================================================================ - -using namespace ::com::sun::star::beans; -using namespace ::com::sun::star::sheet; -using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::util; - -using ::comphelper::MediaDescriptor; -using ::oox::core::CodecHelper; -using ::rtl::OUString; - -// ============================================================================ - -namespace { - -const sal_uInt32 BIFF12_WORKBOOKPR_DATE1904 = 0x00000001; -const sal_uInt32 BIFF12_WORKBOOKPR_STRIPEXT = 0x00000080; - -const sal_uInt16 BIFF12_CALCPR_A1 = 0x0002; -const sal_uInt16 BIFF12_CALCPR_ITERATE = 0x0004; -const sal_uInt16 BIFF12_CALCPR_FULLPRECISION = 0x0008; -const sal_uInt16 BIFF12_CALCPR_CALCCOMPLETED = 0x0010; -const sal_uInt16 BIFF12_CALCPR_CALCONSAVE = 0x0020; -const sal_uInt16 BIFF12_CALCPR_CONCURRENT = 0x0040; -const sal_uInt16 BIFF12_CALCPR_MANUALPROC = 0x0080; - -// no predefined constants for show objects mode -const sal_Int16 API_SHOWMODE_SHOW = 0; /// Show drawing objects. -const sal_Int16 API_SHOWMODE_HIDE = 1; /// Hide drawing objects. -const sal_Int16 API_SHOWMODE_PLACEHOLDER = 2; /// Show placeholders for drawing objects. - -} // namespace - -// ============================================================================ - -FileSharingModel::FileSharingModel() : - mnPasswordHash( 0 ), - mbRecommendReadOnly( false ) -{ -} - -// ============================================================================ - -WorkbookSettingsModel::WorkbookSettingsModel() : - mnShowObjectMode( XML_all ), - mnUpdateLinksMode( XML_userSet ), - mnDefaultThemeVer( -1 ), - mbDateMode1904( false ), - mbSaveExtLinkValues( true ) -{ -} - -void WorkbookSettingsModel::setBiffObjectMode( sal_uInt16 nObjMode ) -{ - static const sal_Int32 spnObjModes[] = { XML_all, XML_placeholders, XML_none }; - mnShowObjectMode = STATIC_ARRAY_SELECT( spnObjModes, nObjMode, XML_all ); -} - -// ============================================================================ - -CalcSettingsModel::CalcSettingsModel() : - mfIterateDelta( 0.001 ), - mnCalcId( -1 ), - mnRefMode( XML_A1 ), - mnCalcMode( XML_auto ), - mnIterateCount( 100 ), - mnProcCount( -1 ), - mbCalcOnSave( true ), - mbCalcCompleted( true ), - mbFullPrecision( true ), - mbIterate( false ), - mbConcurrent( true ), - mbUseNlr( false ) -{ -} - -// ============================================================================ - -WorkbookSettings::WorkbookSettings( const WorkbookHelper& rHelper ) : - WorkbookHelper( rHelper ) -{ -} - -void WorkbookSettings::importFileSharing( const AttributeList& rAttribs ) -{ - maFileSharing.maUserName = rAttribs.getXString( XML_userName, OUString() ); - maFileSharing.mnPasswordHash = CodecHelper::getPasswordHash( rAttribs, XML_reservationPassword ); - maFileSharing.mbRecommendReadOnly = rAttribs.getBool( XML_readOnlyRecommended, false ); -} - -void WorkbookSettings::importWorkbookPr( const AttributeList& rAttribs ) -{ - maBookSettings.maCodeName = rAttribs.getString( XML_codeName, OUString() ); - maBookSettings.mnShowObjectMode = rAttribs.getToken( XML_showObjects, XML_all ); - maBookSettings.mnUpdateLinksMode = rAttribs.getToken( XML_updateLinks, XML_userSet ); - maBookSettings.mnDefaultThemeVer = rAttribs.getInteger( XML_defaultThemeVersion, -1 ); - maBookSettings.mbSaveExtLinkValues = rAttribs.getBool( XML_saveExternalLinkValues, true ); - setDateMode( rAttribs.getBool( XML_date1904, false ), rAttribs.getBool( XML_dateCompatibility, true ) ); -} - -void WorkbookSettings::importCalcPr( const AttributeList& rAttribs ) -{ - maCalcSettings.mfIterateDelta = rAttribs.getDouble( XML_iterateDelta, 0.0001 ); - maCalcSettings.mnCalcId = rAttribs.getInteger( XML_calcId, -1 ); - maCalcSettings.mnRefMode = rAttribs.getToken( XML_refMode, XML_A1 ); - maCalcSettings.mnCalcMode = rAttribs.getToken( XML_calcMode, XML_auto ); - maCalcSettings.mnIterateCount = rAttribs.getInteger( XML_iterateCount, 100 ); - maCalcSettings.mnProcCount = rAttribs.getInteger( XML_concurrentManualCount, -1 ); - maCalcSettings.mbCalcOnSave = rAttribs.getBool( XML_calcOnSave, true ); - maCalcSettings.mbCalcCompleted = rAttribs.getBool( XML_calcCompleted, true ); - maCalcSettings.mbFullPrecision = rAttribs.getBool( XML_fullPrecision, true ); - maCalcSettings.mbIterate = rAttribs.getBool( XML_iterate, false ); - maCalcSettings.mbConcurrent = rAttribs.getBool( XML_concurrentCalc, true ); -} - -void WorkbookSettings::importFileSharing( SequenceInputStream& rStrm ) -{ - maFileSharing.mbRecommendReadOnly = rStrm.readuInt16() != 0; - rStrm >> maFileSharing.mnPasswordHash >> maFileSharing.maUserName; -} - -void WorkbookSettings::importWorkbookPr( SequenceInputStream& rStrm ) -{ - sal_uInt32 nFlags; - rStrm >> nFlags >> maBookSettings.mnDefaultThemeVer >> maBookSettings.maCodeName; - maBookSettings.setBiffObjectMode( extractValue< sal_uInt16 >( nFlags, 13, 2 ) ); - // set flag means: strip external link values - maBookSettings.mbSaveExtLinkValues = !getFlag( nFlags, BIFF12_WORKBOOKPR_STRIPEXT ); - setDateMode( getFlag( nFlags, BIFF12_WORKBOOKPR_DATE1904 ) ); -} - -void WorkbookSettings::importCalcPr( SequenceInputStream& rStrm ) -{ - sal_Int32 nCalcMode, nProcCount; - sal_uInt16 nFlags; - rStrm >> maCalcSettings.mnCalcId >> nCalcMode >> maCalcSettings.mnIterateCount >> maCalcSettings.mfIterateDelta >> nProcCount >> nFlags; - - static const sal_Int32 spnCalcModes[] = { XML_manual, XML_auto, XML_autoNoTable }; - maCalcSettings.mnRefMode = getFlagValue( nFlags, BIFF12_CALCPR_A1, XML_A1, XML_R1C1 ); - maCalcSettings.mnCalcMode = STATIC_ARRAY_SELECT( spnCalcModes, nCalcMode, XML_auto ); - maCalcSettings.mnProcCount = getFlagValue< sal_Int32 >( nFlags, BIFF12_CALCPR_MANUALPROC, nProcCount, -1 ); - maCalcSettings.mbCalcOnSave = getFlag( nFlags, BIFF12_CALCPR_CALCONSAVE ); - maCalcSettings.mbCalcCompleted = getFlag( nFlags, BIFF12_CALCPR_CALCCOMPLETED ); - maCalcSettings.mbFullPrecision = getFlag( nFlags, BIFF12_CALCPR_FULLPRECISION ); - maCalcSettings.mbIterate = getFlag( nFlags, BIFF12_CALCPR_ITERATE ); - maCalcSettings.mbConcurrent = getFlag( nFlags, BIFF12_CALCPR_CONCURRENT ); -} - -void WorkbookSettings::setSaveExtLinkValues( bool bSaveExtLinks ) -{ - maBookSettings.mbSaveExtLinkValues = bSaveExtLinks; -} - -void WorkbookSettings::importBookBool( BiffInputStream& rStrm ) -{ - // value of 0 means save external values, value of 1 means strip external values - maBookSettings.mbSaveExtLinkValues = rStrm.readuInt16() == 0; -} - -void WorkbookSettings::importCalcCount( BiffInputStream& rStrm ) -{ - maCalcSettings.mnIterateCount = rStrm.readuInt16(); -} - -void WorkbookSettings::importCalcMode( BiffInputStream& rStrm ) -{ - sal_Int16 nCalcMode = rStrm.readInt16() + 1; - static const sal_Int32 spnCalcModes[] = { XML_autoNoTable, XML_manual, XML_auto }; - maCalcSettings.mnCalcMode = STATIC_ARRAY_SELECT( spnCalcModes, nCalcMode, XML_auto ); -} - -void WorkbookSettings::importCodeName( BiffInputStream& rStrm ) -{ - maBookSettings.maCodeName = rStrm.readUniString(); -} - -void WorkbookSettings::importDateMode( BiffInputStream& rStrm ) -{ - setDateMode( rStrm.readuInt16() != 0 ); -} - -void WorkbookSettings::importDelta( BiffInputStream& rStrm ) -{ - rStrm >> maCalcSettings.mfIterateDelta; -} - -void WorkbookSettings::importFileSharing( BiffInputStream& rStrm ) -{ - maFileSharing.mbRecommendReadOnly = rStrm.readuInt16() != 0; - rStrm >> maFileSharing.mnPasswordHash; - if( getBiff() == BIFF8 ) - { - sal_uInt16 nStrLen = rStrm.readuInt16(); - // there is no string flags field if string is empty - if( nStrLen > 0 ) - maFileSharing.maUserName = rStrm.readUniStringBody( nStrLen ); - } - else - { - maFileSharing.maUserName = rStrm.readByteStringUC( false, getTextEncoding() ); - } -} - -void WorkbookSettings::importHideObj( BiffInputStream& rStrm ) -{ - maBookSettings.setBiffObjectMode( rStrm.readuInt16() ); -} - -void WorkbookSettings::importIteration( BiffInputStream& rStrm ) -{ - maCalcSettings.mbIterate = rStrm.readuInt16() != 0; -} - -void WorkbookSettings::importPrecision( BiffInputStream& rStrm ) -{ - maCalcSettings.mbFullPrecision = rStrm.readuInt16() != 0; -} - -void WorkbookSettings::importRefMode( BiffInputStream& rStrm ) -{ - maCalcSettings.mnRefMode = (rStrm.readuInt16() == 0) ? XML_R1C1 : XML_A1; -} - -void WorkbookSettings::importSaveRecalc( BiffInputStream& rStrm ) -{ - maCalcSettings.mbCalcOnSave = rStrm.readuInt16() != 0; -} - -void WorkbookSettings::importUncalced( BiffInputStream& ) -{ - // existence of this record indicates incomplete recalc - maCalcSettings.mbCalcCompleted = false; -} - -void WorkbookSettings::importUsesElfs( BiffInputStream& rStrm ) -{ - maCalcSettings.mbUseNlr = rStrm.readuInt16() != 0; -} - -void WorkbookSettings::finalizeImport() -{ - // default settings - PropertySet aPropSet( getDocument() ); - switch( getFilterType() ) - { - case FILTER_OOXML: - case FILTER_BIFF: - aPropSet.setProperty( PROP_IgnoreCase, true ); // always in Excel - aPropSet.setProperty( PROP_RegularExpressions, false ); // not supported in Excel - break; - case FILTER_UNKNOWN: - break; - } - - // write protection - if( maFileSharing.mbRecommendReadOnly || (maFileSharing.mnPasswordHash != 0) ) try - { - getBaseFilter().getMediaDescriptor()[ CREATE_OUSTRING( "ReadOnly" ) ] <<= true; - - Reference< XPropertySet > xDocumentSettings( getBaseFilter().getModelFactory()->createInstance( - CREATE_OUSTRING( "com.sun.star.document.Settings" ) ), UNO_QUERY_THROW ); - PropertySet aSettingsProp( xDocumentSettings ); - if( maFileSharing.mbRecommendReadOnly ) - aSettingsProp.setProperty( PROP_LoadReadonly, true ); -// if( maFileSharing.mnPasswordHash != 0 ) -// aSettingsProp.setProperty( PROP_ModifyPasswordHash, static_cast< sal_Int32 >( maFileSharing.mnPasswordHash ) ); - } - catch( Exception& ) - { - } - - // calculation settings - Date aNullDate = getNullDate(); - - aPropSet.setProperty( PROP_NullDate, aNullDate ); - aPropSet.setProperty( PROP_IsIterationEnabled, maCalcSettings.mbIterate ); - aPropSet.setProperty( PROP_IterationCount, maCalcSettings.mnIterateCount ); - aPropSet.setProperty( PROP_IterationEpsilon, maCalcSettings.mfIterateDelta ); - aPropSet.setProperty( PROP_CalcAsShown, !maCalcSettings.mbFullPrecision ); - aPropSet.setProperty( PROP_LookUpLabels, maCalcSettings.mbUseNlr ); - - Reference< XNumberFormatsSupplier > xNumFmtsSupp( getDocument(), UNO_QUERY ); - if( xNumFmtsSupp.is() ) - { - PropertySet aNumFmtProp( xNumFmtsSupp->getNumberFormatSettings() ); - aNumFmtProp.setProperty( PROP_NullDate, aNullDate ); - } - - Reference< XCalculatable > xCalculatable( getDocument(), UNO_QUERY ); - if( xCalculatable.is() ) - xCalculatable->enableAutomaticCalculation( (maCalcSettings.mnCalcMode == XML_auto) || (maCalcSettings.mnCalcMode == XML_autoNoTable) ); - - // VBA code name - aPropSet.setProperty( PROP_CodeName, maBookSettings.maCodeName ); -} - -sal_Int16 WorkbookSettings::getApiShowObjectMode() const -{ - switch( maBookSettings.mnShowObjectMode ) - { - case XML_all: return API_SHOWMODE_SHOW; - case XML_none: return API_SHOWMODE_HIDE; - // #i80528# placeholders not supported anymore, but this is handled internally in Calc - case XML_placeholders: return API_SHOWMODE_PLACEHOLDER; - } - return API_SHOWMODE_SHOW; -} - -Date WorkbookSettings::getNullDate() const -{ - static const Date saDate1900 ( 30, 12, 1899 ); - static const Date saDate1904 ( 1, 1, 1904 ); - static const Date saDateBackCompatibility1900( 31, 12, 1899 ); - - if( getOoxFilter().getVersion() == oox::core::ISOIEC_29500_2008 ) - { - if( !maBookSettings.mbDateCompatibility ) - return saDate1900; - - return maBookSettings.mbDateMode1904 ? saDate1904 : - saDateBackCompatibility1900; - } - - return maBookSettings.mbDateMode1904 ? saDate1904 : saDate1900; -} - -void WorkbookSettings::setDateMode( bool bDateMode1904, bool bDateCompatibility ) -{ - maBookSettings.mbDateMode1904 = bDateMode1904; - maBookSettings.mbDateCompatibility = bDateCompatibility; - - getUnitConverter().finalizeNullDate( getNullDate() ); -} - -// ============================================================================ - -} // namespace xls -} // namespace oox - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |