summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKurt Zenker <kz@openoffice.org>2010-05-21 16:13:20 +0200
committerKurt Zenker <kz@openoffice.org>2010-05-21 16:13:20 +0200
commitf98601b66a4bdfea70771cac44eb8f45faf70e33 (patch)
tree0bcef7751aea4e47f3106a0981cee6b2cc421540
parente12896d4e2571451e2453d3b14a7e24f7371a4a4 (diff)
parent83354fbd6ef66db25643b1fe9ab30c45550a5a58 (diff)
CWS-TOOLING: integrate CWS npower13_objectmodules
Notes
Notes: split repo tag: filters_ooo/DEV300_m79
-rw-r--r--filter/inc/filter/msfilter/msvbahelper.hxx55
-rw-r--r--filter/inc/filter/msfilter/svxmsbas.hxx4
-rw-r--r--filter/prj/build.lst2
-rw-r--r--filter/source/msfilter/makefile.mk4
-rw-r--r--filter/source/msfilter/msvbahelper.cxx382
-rw-r--r--filter/source/msfilter/msvbasic.cxx18
-rw-r--r--filter/source/msfilter/msvbasic.hxx14
-rw-r--r--filter/source/msfilter/svxmsbas.cxx130
-rw-r--r--oox/inc/oox/core/filterbase.hxx27
-rw-r--r--oox/inc/oox/drawingml/chart/chartdrawingfragment.hxx6
-rw-r--r--oox/inc/oox/drawingml/color.hxx4
-rw-r--r--oox/inc/oox/drawingml/customshapeproperties.hxx5
-rw-r--r--oox/inc/oox/drawingml/fillproperties.hxx9
-rw-r--r--oox/inc/oox/drawingml/lineproperties.hxx4
-rw-r--r--oox/inc/oox/dump/biffdumper.hxx8
-rw-r--r--oox/inc/oox/dump/dumperbase.hxx109
-rw-r--r--oox/inc/oox/dump/oledumper.hxx418
-rw-r--r--oox/inc/oox/dump/xlsbdumper.hxx2
-rw-r--r--oox/inc/oox/helper/binaryinputstream.hxx69
-rw-r--r--oox/inc/oox/helper/binaryoutputstream.hxx5
-rw-r--r--oox/inc/oox/helper/binarystreambase.hxx15
-rw-r--r--oox/inc/oox/helper/containerhelper.hxx131
-rw-r--r--oox/inc/oox/helper/graphichelper.hxx76
-rw-r--r--oox/inc/oox/helper/helper.hxx24
-rw-r--r--oox/inc/oox/helper/modelobjecthelper.hxx2
-rw-r--r--oox/inc/oox/helper/propertyset.hxx4
-rw-r--r--oox/inc/oox/helper/storagebase.hxx65
-rwxr-xr-xoox/inc/oox/helper/textinputstream.hxx58
-rw-r--r--oox/inc/oox/helper/zipstorage.hxx6
-rwxr-xr-x[-rw-r--r--]oox/inc/oox/ole/axbinaryreader.hxx109
-rw-r--r--oox/inc/oox/ole/axcontrol.hxx568
-rw-r--r--oox/inc/oox/ole/axcontrolfragment.hxx14
-rw-r--r--oox/inc/oox/ole/axcontrolhelper.hxx118
-rw-r--r--oox/inc/oox/ole/olehelper.hxx79
-rwxr-xr-x[-rw-r--r--]oox/inc/oox/ole/olestorage.hxx (renamed from oox/inc/oox/helper/olestorage.hxx)37
-rwxr-xr-xoox/inc/oox/ole/vbacontrol.hxx205
-rwxr-xr-xoox/inc/oox/ole/vbahelper.hxx233
-rwxr-xr-xoox/inc/oox/ole/vbamodule.hxx96
-rwxr-xr-xoox/inc/oox/ole/vbaproject.hxx289
-rw-r--r--oox/inc/oox/ppt/pptimport.hxx5
-rw-r--r--oox/inc/oox/vml/vmldrawing.hxx14
-rw-r--r--oox/inc/oox/vml/vmlformatting.hxx21
-rw-r--r--oox/inc/oox/xls/biffhelper.hxx2
-rw-r--r--oox/inc/oox/xls/excelfilter.hxx22
-rwxr-xr-xoox/inc/oox/xls/excelvbaproject.hxx73
-rw-r--r--oox/inc/oox/xls/stylesbuffer.hxx19
-rw-r--r--oox/inc/oox/xls/workbookhelper.hxx106
-rw-r--r--oox/inc/oox/xls/worksheetsettings.hxx2
-rw-r--r--oox/prj/build.lst2
-rw-r--r--oox/prj/d.lst5
-rw-r--r--oox/source/core/binaryfilterbase.cxx6
-rwxr-xr-xoox/source/core/filterbase.cxx111
-rw-r--r--oox/source/core/filterdetect.cxx4
-rw-r--r--oox/source/core/recordparser.cxx7
-rw-r--r--oox/source/docprop/docprophandler.cxx2
-rw-r--r--oox/source/drawingml/chart/chartdrawingfragment.cxx6
-rw-r--r--oox/source/drawingml/chart/objectformatter.cxx8
-rw-r--r--oox/source/drawingml/clrschemecontext.cxx2
-rw-r--r--oox/source/drawingml/color.cxx12
-rw-r--r--oox/source/drawingml/customshapeproperties.cxx5
-rw-r--r--oox/source/drawingml/fillproperties.cxx54
-rw-r--r--oox/source/drawingml/fillpropertiesgroupcontext.cxx12
-rw-r--r--oox/source/drawingml/lineproperties.cxx15
-rw-r--r--oox/source/drawingml/linepropertiescontext.cxx2
-rw-r--r--oox/source/drawingml/shape.cxx17
-rw-r--r--oox/source/drawingml/table/tablecell.cxx4
-rw-r--r--oox/source/drawingml/textcharacterproperties.cxx4
-rw-r--r--oox/source/drawingml/textfont.cxx4
-rw-r--r--oox/source/drawingml/textparagraphproperties.cxx2
-rw-r--r--oox/source/dump/biffdumper.cxx333
-rw-r--r--oox/source/dump/biffdumper.ini4
-rw-r--r--oox/source/dump/dffdumper.cxx32
-rw-r--r--oox/source/dump/dumperbase.cxx371
-rw-r--r--oox/source/dump/oledumper.cxx1257
-rw-r--r--oox/source/dump/oledumper.ini439
-rw-r--r--oox/source/dump/pptxdumper.cxx9
-rw-r--r--oox/source/dump/xlsbdumper.cxx241
-rw-r--r--oox/source/helper/binaryinputstream.cxx98
-rw-r--r--oox/source/helper/binaryoutputstream.cxx20
-rw-r--r--oox/source/helper/binarystreambase.cxx21
-rw-r--r--oox/source/helper/graphichelper.cxx236
-rw-r--r--oox/source/helper/makefile.mk2
-rw-r--r--oox/source/helper/modelobjecthelper.cxx10
-rw-r--r--oox/source/helper/olestorage.cxx180
-rw-r--r--oox/source/helper/propertyset.cxx44
-rw-r--r--oox/source/helper/storagebase.cxx145
-rwxr-xr-xoox/source/helper/textinputstream.cxx128
-rw-r--r--oox/source/helper/zipstorage.cxx56
-rwxr-xr-x[-rw-r--r--]oox/source/ole/axbinaryreader.cxx100
-rw-r--r--oox/source/ole/axcontrol.cxx1122
-rw-r--r--oox/source/ole/axcontrolfragment.cxx35
-rw-r--r--oox/source/ole/axcontrolhelper.cxx175
-rw-r--r--oox/source/ole/makefile.mk8
-rw-r--r--oox/source/ole/olehelper.cxx112
-rwxr-xr-xoox/source/ole/olestorage.cxx423
-rwxr-xr-xoox/source/ole/vbacontrol.cxx811
-rwxr-xr-xoox/source/ole/vbahelper.cxx248
-rwxr-xr-xoox/source/ole/vbamodule.cxx241
-rwxr-xr-xoox/source/ole/vbaproject.cxx519
-rw-r--r--oox/source/ppt/animvariantcontext.cxx2
-rw-r--r--oox/source/ppt/pptimport.cxx30
-rw-r--r--oox/source/ppt/slidepersist.cxx2
-rw-r--r--oox/source/ppt/timenodelistcontext.cxx12
-rw-r--r--oox/source/token/properties.txt18
-rw-r--r--oox/source/vml/vmldrawing.cxx20
-rw-r--r--oox/source/vml/vmlformatting.cxx41
-rw-r--r--oox/source/vml/vmlshape.cxx22
-rw-r--r--oox/source/vml/vmlshapecontainer.cxx1
-rw-r--r--oox/source/xls/biffdetector.cxx6
-rw-r--r--oox/source/xls/biffhelper.cxx97
-rw-r--r--oox/source/xls/excelfilter.cxx56
-rwxr-xr-xoox/source/xls/excelvbaproject.cxx214
-rw-r--r--oox/source/xls/formulaparser.cxx3
-rw-r--r--oox/source/xls/makefile.mk1
-rw-r--r--oox/source/xls/sheetdatacontext.cxx4
-rw-r--r--oox/source/xls/stylesbuffer.cxx77
-rw-r--r--oox/source/xls/unitconverter.cxx2
-rw-r--r--oox/source/xls/viewsettings.cxx2
-rw-r--r--oox/source/xls/workbookfragment.cxx60
-rw-r--r--oox/source/xls/workbookhelper.cxx210
-rw-r--r--oox/source/xls/workbooksettings.cxx5
-rw-r--r--oox/source/xls/worksheetfragment.cxx3
-rw-r--r--oox/source/xls/worksheethelper.cxx63
-rw-r--r--oox/source/xls/worksheetsettings.cxx11
-rw-r--r--oox/util/makefile.mk3
125 files changed, 9137 insertions, 3200 deletions
diff --git a/filter/inc/filter/msfilter/msvbahelper.hxx b/filter/inc/filter/msfilter/msvbahelper.hxx
new file mode 100644
index 000000000000..540097c054dc
--- /dev/null
+++ b/filter/inc/filter/msfilter/msvbahelper.hxx
@@ -0,0 +1,55 @@
+/*************************************************************************
+ *
+ * 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.
+ *
+ ************************************************************************/
+#ifndef _MSVBAHELPER_HXX
+#define _MSVBAHELPER_HXX
+
+#include <sfx2/objsh.hxx>
+#include "filter/msfilter/msfilterdllapi.h"
+
+namespace ooo { namespace vba
+{
+ class MSFILTER_DLLPUBLIC VBAMacroResolvedInfo
+ {
+ SfxObjectShell* mpDocContext;
+ bool mbFound;
+ String msResolvedMacro;
+ public:
+ VBAMacroResolvedInfo() : mpDocContext(NULL), mbFound( false ){}
+ void SetResolved( bool bRes ) { mbFound = bRes; }
+ bool IsResolved() { return mbFound; }
+ void SetMacroDocContext(SfxObjectShell* pShell ) { mpDocContext = pShell; }
+ SfxObjectShell* MacroDocContext() { return mpDocContext; }
+ String ResolvedMacro() { return msResolvedMacro; }
+ void SetResolvedMacro(const String& sMacro ) { msResolvedMacro = sMacro; }
+ };
+
+ MSFILTER_DLLPUBLIC String makeMacroURL( const String& sMacroName );
+ MSFILTER_DLLPUBLIC VBAMacroResolvedInfo resolveVBAMacro( SfxObjectShell* pShell, const rtl::OUString& sMod, bool bSearchGlobalTemplates = false );
+ MSFILTER_DLLPUBLIC sal_Bool executeMacro( SfxObjectShell* pShell, const String& sMacroName, com::sun::star::uno::Sequence< com::sun::star::uno::Any >& aArgs, com::sun::star::uno::Any& aRet, const com::sun::star::uno::Any& aCaller );
+} }
+
+#endif
diff --git a/filter/inc/filter/msfilter/svxmsbas.hxx b/filter/inc/filter/msfilter/svxmsbas.hxx
index f488017e4804..716c6788989c 100644
--- a/filter/inc/filter/msfilter/svxmsbas.hxx
+++ b/filter/inc/filter/msfilter/svxmsbas.hxx
@@ -64,6 +64,9 @@ public:
// bit 1 = 1 -> the VBA - storage is copy to the ObjectShell storage
int Import( const String& rStorageName, const String &rSubStorageName,
BOOL bAsComment=TRUE, BOOL bStripped=TRUE );
+ int Import( const String& rStorageName, const String &rSubStorageName,
+ const std::vector< String >& codeNames,
+ BOOL bAsComment=TRUE, BOOL bStripped=TRUE );
// only for the export - copy or delete the saved VBA-macro-storage
// form the ObjectShell
@@ -84,6 +87,7 @@ private:
MSFILTER_DLLPRIVATE BOOL ImportCode_Impl( const String& rStorageName,
const String &rSubStorageName,
+ const std::vector< String >& codeNames,
BOOL bAsComment, BOOL bStripped);
MSFILTER_DLLPRIVATE bool ImportForms_Impl(const String& rStorageName,
const String &rSubStorageName);
diff --git a/filter/prj/build.lst b/filter/prj/build.lst
index b4be1c83e63e..bed99e401b7f 100644
--- a/filter/prj/build.lst
+++ b/filter/prj/build.lst
@@ -1,4 +1,4 @@
-fl filter : vbahelper l10n svtools unotools xmloff cppu tools cppuhelper sal svx javaunohelper XPDF:xpdf jvmaccess canvas SAXON:saxon LIBXSLT:libxslt NULL
+fl filter : l10n svtools unotools xmloff cppu tools cppuhelper sal svx javaunohelper XPDF:xpdf jvmaccess canvas SAXON:saxon LIBXSLT:libxslt NULL
fl filter usr1 - all fl_mkout NULL
fl filter\prj get - all fl_prj NULL
fl filter\inc nmake - all fl_inc NULL
diff --git a/filter/source/msfilter/makefile.mk b/filter/source/msfilter/makefile.mk
index 6056213ddecf..7780529b5580 100644
--- a/filter/source/msfilter/makefile.mk
+++ b/filter/source/msfilter/makefile.mk
@@ -51,7 +51,8 @@ SLOFILES= \
$(SLO)$/mscodec.obj \
$(SLO)$/msfiltertracer.obj \
$(SLO)$/svdfppt.obj \
- $(SLO)$/svxmsbas2.obj
+ $(SLO)$/svxmsbas2.obj \
+ $(SLO)$/msvbahelper.obj \
SHL1TARGET= msfilter$(DLLPOSTFIX)
SHL1IMPLIB= i$(TARGET)
@@ -59,7 +60,6 @@ SHL1OBJS= $(SLOFILES)
SHL1USE_EXPORTS=name
SHL1STDLIBS= \
$(EDITENGLIB) \
- $(VBAHELPERLIB) \
$(SVXCORELIB) \
$(SFX2LIB) \
$(XMLOFFLIB) \
diff --git a/filter/source/msfilter/msvbahelper.cxx b/filter/source/msfilter/msvbahelper.cxx
new file mode 100644
index 000000000000..97529c22eae6
--- /dev/null
+++ b/filter/source/msfilter/msvbahelper.cxx
@@ -0,0 +1,382 @@
+/*************************************************************************
+ *
+ * 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_filter.hxx"
+
+#include <filter/msfilter/msvbahelper.hxx>
+#include <basic/sbx.hxx>
+#include <basic/sbstar.hxx>
+#include <basic/basmgr.hxx>
+#include <basic/sbmod.hxx>
+#include <basic/sbmeth.hxx>
+#include <com/sun/star/document/XDocumentPropertiesSupplier.hpp>
+#include <com/sun/star/document/XDocumentProperties.hpp>
+#include <com/sun/star/document/XDocumentInfoSupplier.hpp>
+#include <tools/urlobj.hxx>
+#include <osl/file.hxx>
+
+using namespace ::com::sun::star;
+
+const static rtl::OUString sUrlPart0 = rtl::OUString::createFromAscii( "vnd.sun.star.script:");
+const static rtl::OUString sUrlPart1 = rtl::OUString::createFromAscii( "?language=Basic&location=document");
+
+namespace ooo { namespace vba {
+
+String makeMacroURL( const String& sMacroName )
+{
+ return sUrlPart0.concat( sMacroName ).concat( sUrlPart1 ) ;
+}
+
+SfxObjectShell* findShellForUrl( const rtl::OUString& sMacroURLOrPath )
+{
+ SfxObjectShell* pFoundShell=NULL;
+ SfxObjectShell* pShell = SfxObjectShell::GetFirst();
+ INetURLObject aObj;
+ aObj.SetURL( sMacroURLOrPath );
+ bool bIsURL = aObj.GetProtocol() != INET_PROT_NOT_VALID;
+ rtl::OUString aURL;
+ if ( bIsURL )
+ aURL = sMacroURLOrPath;
+ else
+ {
+ osl::FileBase::getFileURLFromSystemPath( sMacroURLOrPath, aURL );
+ aObj.SetURL( aURL );
+ }
+ OSL_TRACE("Trying to find shell for url %s", rtl::OUStringToOString( aURL, RTL_TEXTENCODING_UTF8 ).getStr() );
+ while ( pShell )
+ {
+
+ uno::Reference< frame::XModel > xModel = pShell->GetModel();
+ // are we searching for a template? if so we have to cater for the
+ // fact that in openoffice a document opened from a template is always
+ // a new document :/
+ if ( xModel.is() )
+ {
+ OSL_TRACE("shell 0x%x has model with url %s and we look for %s", pShell
+ , rtl::OUStringToOString( xModel->getURL(), RTL_TEXTENCODING_UTF8 ).getStr()
+ , rtl::OUStringToOString( aURL, RTL_TEXTENCODING_UTF8 ).getStr()
+ );
+ if ( sMacroURLOrPath.endsWithIgnoreAsciiCaseAsciiL( ".dot", 4 ) )
+ {
+ uno::Reference< document::XDocumentInfoSupplier > xDocInfoSupp( xModel, uno::UNO_QUERY );
+ if( xDocInfoSupp.is() )
+ {
+ uno::Reference< document::XDocumentPropertiesSupplier > xDocPropSupp( xDocInfoSupp->getDocumentInfo(), uno::UNO_QUERY_THROW );
+ uno::Reference< document::XDocumentProperties > xDocProps( xDocPropSupp->getDocumentProperties(), uno::UNO_QUERY_THROW );
+ rtl::OUString sCurrName = xDocProps->getTemplateName();
+ if( sMacroURLOrPath.lastIndexOf( sCurrName ) >= 0 )
+ {
+ pFoundShell = pShell;
+ break;
+ }
+ }
+ }
+ else
+ {
+ if ( aURL.equals( xModel->getURL() ) )
+ {
+ pFoundShell = pShell;
+ break;
+ }
+ }
+ }
+ pShell = SfxObjectShell::GetNext( *pShell );
+ }
+ return pFoundShell;
+}
+
+// sMod can be empty ( but we really need the library to search in )
+// if sMod is empty and a macro is found then sMod is updated
+bool hasMacro( SfxObjectShell* pShell, const String& sLibrary, String& sMod, const String& sMacro )
+{
+ bool bFound = false;
+ if ( sLibrary.Len() && sMacro.Len() )
+ {
+ OSL_TRACE("** Searching for %s.%s in library %s"
+ ,rtl::OUStringToOString( sMod, RTL_TEXTENCODING_UTF8 ).getStr()
+ ,rtl::OUStringToOString( sMacro, RTL_TEXTENCODING_UTF8 ).getStr()
+ ,rtl::OUStringToOString( sLibrary, RTL_TEXTENCODING_UTF8 ).getStr() );
+ BasicManager* pBasicMgr = pShell-> GetBasicManager();
+ if ( pBasicMgr )
+ {
+ StarBASIC* pBasic = pBasicMgr->GetLib( sLibrary );
+ if ( !pBasic )
+ {
+ USHORT nId = pBasicMgr->GetLibId( sLibrary );
+ pBasicMgr->LoadLib( nId );
+ pBasic = pBasicMgr->GetLib( sLibrary );
+ }
+ if ( pBasic )
+ {
+ if ( sMod.Len() ) // we wish to find the macro is a specific module
+ {
+ SbModule* pModule = pBasic->FindModule( sMod );
+ if ( pModule )
+ {
+ SbxArray* pMethods = pModule->GetMethods();
+ if ( pMethods )
+ {
+ SbMethod* pMethod = static_cast< SbMethod* >( pMethods->Find( sMacro, SbxCLASS_METHOD ) );
+ if ( pMethod )
+ bFound = true;
+ }
+ }
+ }
+ else if( SbMethod* pMethod = dynamic_cast< SbMethod* >( pBasic->Find( sMacro, SbxCLASS_METHOD ) ) )
+ {
+ if( SbModule* pModule = pMethod->GetModule() )
+ {
+ sMod = pModule->GetName();
+ bFound = true;
+ }
+ }
+ }
+ }
+ }
+ return bFound;
+}
+void parseMacro( const rtl::OUString& sMacro, String& sContainer, String& sModule, String& sProcedure )
+{
+ sal_Int32 nMacroDot = sMacro.lastIndexOf( '.' );
+
+ if ( nMacroDot != -1 )
+ {
+ sProcedure = sMacro.copy( nMacroDot + 1 );
+
+ sal_Int32 nContainerDot = sMacro.lastIndexOf( '.', nMacroDot - 1 );
+ if ( nContainerDot != -1 )
+ {
+ sModule = sMacro.copy( nContainerDot + 1, nMacroDot - nContainerDot - 1 );
+ sContainer = sMacro.copy( 0, nContainerDot );
+ }
+ else
+ sModule = sMacro.copy( 0, nMacroDot );
+ }
+ else
+ sProcedure = sMacro;
+}
+
+VBAMacroResolvedInfo resolveVBAMacro( SfxObjectShell* pShell, const rtl::OUString& MacroName, bool bSearchGlobalTemplates )
+{
+ VBAMacroResolvedInfo aRes;
+ if ( !pShell )
+ return aRes;
+ aRes.SetMacroDocContext( pShell );
+ // parse the macro name
+ sal_Int32 nDocSepIndex = MacroName.indexOfAsciiL( "!", 1 );
+ String sMacroUrl = MacroName;
+
+ String sContainer;
+ String sModule;
+ String sProcedure;
+
+ if( nDocSepIndex > 0 )
+ {
+ // macro specified by document name
+ // find document shell for document name and call ourselves
+ // recursively
+
+ // assume for now that the document name is *this* document
+ String sDocUrlOrPath = MacroName.copy( 0, nDocSepIndex );
+ sMacroUrl = MacroName.copy( nDocSepIndex + 1 );
+ OSL_TRACE("doc search, current shell is 0x%x", pShell );
+ SfxObjectShell* pFoundShell = findShellForUrl( sDocUrlOrPath );
+ OSL_TRACE("doc search, after find, found shell is 0x%x", pFoundShell );
+ aRes = resolveVBAMacro( pFoundShell, sMacroUrl );
+ }
+ else
+ {
+ // macro is contained in 'this' document ( or code imported from a template
+ // where that template is a global template or perhaps the template this
+ // document is created from )
+
+ // macro format = Container.Module.Procedure
+ parseMacro( MacroName, sContainer, sModule, sProcedure );
+ uno::Reference< lang::XMultiServiceFactory> xSF( pShell->GetModel(), uno::UNO_QUERY);
+ uno::Reference< container::XNameContainer > xPrjNameCache;
+ if ( xSF.is() )
+ xPrjNameCache.set( xSF->createInstance( rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "ooo.vba.VBAProjectNameProvider" ) ) ), uno::UNO_QUERY );
+
+ std::vector< rtl::OUString > sSearchList;
+
+ if ( sContainer.Len() > 0 )
+ {
+ // get the Project associated with the Container
+ if ( xPrjNameCache.is() )
+ {
+ if ( xPrjNameCache->hasByName( sContainer ) )
+ {
+ rtl::OUString sProject;
+ xPrjNameCache->getByName( sContainer ) >>= sProject;
+ sContainer = sProject;
+ }
+ }
+ sSearchList.push_back( sContainer ); // First Lib to search
+ }
+ else
+ {
+ // Ok, if we have no Container specified then we need to search them in order, this document, template this document created from, global templates,
+ // get the name of Project/Library for 'this' document
+ rtl::OUString sThisProject;
+ BasicManager* pBasicMgr = pShell-> GetBasicManager();
+ if ( pBasicMgr )
+ {
+ if ( pBasicMgr->GetName().Len() )
+ sThisProject = pBasicMgr->GetName();
+ else // cater for the case where VBA is not enabled
+ sThisProject = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Standard") );
+ }
+ sSearchList.push_back( sThisProject ); // First Lib to search
+ if ( xPrjNameCache.is() )
+ {
+ // is this document created from a template?
+ uno::Reference< document::XDocumentInfoSupplier > xDocInfoSupp( pShell->GetModel(), uno::UNO_QUERY_THROW );
+ uno::Reference< document::XDocumentPropertiesSupplier > xDocPropSupp( xDocInfoSupp->getDocumentInfo(), uno::UNO_QUERY_THROW );
+ uno::Reference< document::XDocumentProperties > xDocProps( xDocPropSupp->getDocumentProperties(), uno::UNO_QUERY_THROW );
+
+ rtl::OUString sCreatedFrom = xDocProps->getTemplateURL();
+ if ( sCreatedFrom.getLength() )
+ {
+ INetURLObject aObj;
+ aObj.SetURL( sCreatedFrom );
+ bool bIsURL = aObj.GetProtocol() != INET_PROT_NOT_VALID;
+ rtl::OUString aURL;
+ if ( bIsURL )
+ aURL = sCreatedFrom;
+ else
+ {
+ osl::FileBase::getFileURLFromSystemPath( sCreatedFrom, aURL );
+ aObj.SetURL( aURL );
+ }
+ sCreatedFrom = aObj.GetLastName();
+ }
+
+ sal_Int32 nIndex = sCreatedFrom.lastIndexOf( '.' );
+ if ( nIndex != -1 )
+ sCreatedFrom = sCreatedFrom.copy( 0, nIndex );
+
+ rtl::OUString sPrj;
+ if ( sCreatedFrom.getLength() && xPrjNameCache->hasByName( sCreatedFrom ) )
+ {
+ xPrjNameCache->getByName( sCreatedFrom ) >>= sPrj;
+ // Make sure we don't double up with this project
+ if ( !sPrj.equals( sThisProject ) )
+ sSearchList.push_back( sPrj );
+ }
+
+ // get list of global template Names
+ uno::Sequence< rtl::OUString > sTemplateNames = xPrjNameCache->getElementNames();
+ sal_Int32 nLen = sTemplateNames.getLength();
+ for ( sal_Int32 index = 0; ( bSearchGlobalTemplates && index < nLen ); ++index )
+ {
+
+ if ( !sCreatedFrom.equals( sTemplateNames[ index ] ) )
+ {
+ if ( xPrjNameCache->hasByName( sTemplateNames[ index ] ) )
+ {
+ xPrjNameCache->getByName( sTemplateNames[ index ] ) >>= sPrj;
+ // Make sure we don't double up with this project
+ if ( !sPrj.equals( sThisProject ) )
+ sSearchList.push_back( sPrj );
+ }
+ }
+
+ }
+ }
+ }
+ std::vector< rtl::OUString >::iterator it_end = sSearchList.end();
+ for ( std::vector< rtl::OUString >::iterator it = sSearchList.begin(); it != it_end; ++it )
+ {
+ bool bRes = hasMacro( pShell, *it, sModule, sProcedure );
+ if ( bRes )
+ {
+ aRes.SetResolved( true );
+ aRes.SetMacroDocContext( pShell );
+ sContainer = *it;
+ break;
+ }
+ }
+ }
+ aRes.SetResolvedMacro( sProcedure.Insert( '.', 0 ).Insert( sModule, 0).Insert( '.', 0 ).Insert( sContainer, 0 ) );
+
+ return aRes;
+}
+
+// Treat the args as possible inouts ( convertion at bottom of method )
+sal_Bool executeMacro( SfxObjectShell* pShell, const String& sMacroName, uno::Sequence< uno::Any >& aArgs, uno::Any& /*aRet*/, const uno::Any& aCaller )
+{
+ sal_Bool bRes = sal_False;
+ if ( !pShell )
+ return bRes;
+ rtl::OUString sUrl = makeMacroURL( sMacroName );
+
+ uno::Sequence< sal_Int16 > aOutArgsIndex;
+ uno::Sequence< uno::Any > aOutArgs;
+
+ try
+ {
+ uno::Reference< script::provider::XScriptProvider > xScriptProvider;
+ uno::Reference< script::provider::XScriptProviderSupplier > xSPS( pShell->GetModel(), uno::UNO_QUERY_THROW );
+
+ xScriptProvider.set( xSPS->getScriptProvider(), uno::UNO_QUERY_THROW );
+
+ uno::Reference< script::provider::XScript > xScript( xScriptProvider->getScript( sUrl ), uno::UNO_QUERY_THROW );
+
+ if ( aCaller.hasValue() )
+ {
+ uno::Reference< beans::XPropertySet > xProps( xScript, uno::UNO_QUERY );
+ if ( xProps.is() )
+ {
+ uno::Sequence< uno::Any > aCallerHack(1);
+ aCallerHack[ 0 ] = aCaller;
+ xProps->setPropertyValue( rtl::OUString::createFromAscii( "Caller" ), uno::makeAny( aCallerHack ) );
+ }
+ }
+
+
+ xScript->invoke( aArgs, aOutArgsIndex, aOutArgs );
+
+ sal_Int32 nLen = aOutArgs.getLength();
+ // convert any out params to seem like they were inouts
+ if ( nLen )
+ {
+ for ( sal_Int32 index=0; index < nLen; ++index )
+ {
+ sal_Int32 nOutIndex = aOutArgsIndex[ index ];
+ aArgs[ nOutIndex ] = aOutArgs[ index ];
+ }
+ }
+
+ bRes = sal_True;
+ }
+ catch ( uno::Exception& e )
+ {
+ bRes = sal_False;
+ }
+ return bRes;
+}
+} } // vba // ooo
diff --git a/filter/source/msfilter/msvbasic.cxx b/filter/source/msfilter/msvbasic.cxx
index 91348043b75f..be8ee6bd30e5 100644
--- a/filter/source/msfilter/msvbasic.cxx
+++ b/filter/source/msfilter/msvbasic.cxx
@@ -38,6 +38,10 @@
#include <rtl/tencinfo.h> //rtl_getTextEncodingFromWindowsCodePage
#include "msvbasic.hxx"
+#include <com/sun/star/script/ModuleType.hpp>
+
+using namespace ::com::sun::star::script;
+
/*
A few urls which may in the future be of some use
http://www.virusbtn.com/vb2000/Programme/papers/bontchev.pdf
@@ -429,7 +433,7 @@ int VBA_Impl::ReadVBAProject(const SvStorageRef &rxVBAStorage)
*
*/
-ModuleType VBA_Impl::GetModuleType( const UniString& rModuleName )
+ModType VBA_Impl::GetModuleType( const UniString& rModuleName )
{
ModuleTypeHash::iterator iter = mhModHash.find( rModuleName );
ModuleTypeHash::iterator iterEnd = mhModHash.end();
@@ -437,7 +441,7 @@ ModuleType VBA_Impl::GetModuleType( const UniString& rModuleName )
{
return iter->second;
}
- return Unknown;
+ return ModuleType::UNKNOWN;
}
bool VBA_Impl::Open( const String &rToplevel, const String &rSublevel )
@@ -480,7 +484,7 @@ bool VBA_Impl::Open( const String &rToplevel, const String &rSublevel )
static const String sClass( RTL_CONSTASCII_USTRINGPARAM( "Class" ) );
static const String sBaseClass( RTL_CONSTASCII_USTRINGPARAM( "BaseClass" ) );
static const String sDocument( RTL_CONSTASCII_USTRINGPARAM( "Document" ) );
- mhModHash[ sThisDoc ] = Class;
+ mhModHash[ sThisDoc ] = ModuleType::CLASS;
while ( pStp->ReadByteStringLine( tmp, meCharSet ) )
{
xub_StrLen index = tmp.Search( '=' );
@@ -490,14 +494,14 @@ bool VBA_Impl::Open( const String &rToplevel, const String &rSublevel )
String value = tmp.Copy( index + 1 );
if ( key == sClass )
{
- mhModHash[ value ] = Class;
+ mhModHash[ value ] = ModuleType::CLASS;
OSL_TRACE("Module %s is of type Class",
::rtl::OUStringToOString( value ,
RTL_TEXTENCODING_ASCII_US ).pData->buffer );
}
else if ( key == sBaseClass )
{
- mhModHash[ value ] = Form;
+ mhModHash[ value ] = ModuleType::FORM;
OSL_TRACE("Module %s is of type Form",
::rtl::OUStringToOString( value ,
RTL_TEXTENCODING_ASCII_US ).pData->buffer );
@@ -510,14 +514,14 @@ bool VBA_Impl::Open( const String &rToplevel, const String &rSublevel )
// value is of form <name>/&H<identifier>, strip the identifier
value.Erase( value.Search( '/' ) );
- mhModHash[ value ] = Document;
+ mhModHash[ value ] = ModuleType::DOCUMENT;
OSL_TRACE("Module %s is of type Document VBA",
::rtl::OUStringToOString( value ,
RTL_TEXTENCODING_ASCII_US ).pData->buffer );
}
else if ( key == sModule )
{
- mhModHash[ value ] = Normal;
+ mhModHash[ value ] = ModuleType::NORMAL;
OSL_TRACE("Module %s is of type Normal VBA",
::rtl::OUStringToOString( value ,
RTL_TEXTENCODING_ASCII_US ).pData->buffer );
diff --git a/filter/source/msfilter/msvbasic.hxx b/filter/source/msfilter/msvbasic.hxx
index 5b361518c0f5..171671e8cd5c 100644
--- a/filter/source/msfilter/msvbasic.hxx
+++ b/filter/source/msfilter/msvbasic.hxx
@@ -30,16 +30,12 @@
#ifndef _MSVBASIC_HXX
#define _MSVBASIC_HXX
-#ifdef _SOLAR_H
#include <tools/solar.h>
-#endif
#include <tools/debug.hxx>
#include <sot/storage.hxx>
#include <tools/dynary.hxx>
-#ifndef __SGI_STL_VECTOR
#include <vector>
-#endif
-#include<map>
+#include <map>
/* class VBA:
* The VBA class provides a set of methods to handle Visual Basic For
@@ -63,13 +59,12 @@ DECLARE_DYNARRAY(StringArray,String *)
// #117718# define internal types to distinguish between
// module types, form, class & normal
// #i37965# DR 2004-12-03: add "Document", used in Excel for macros attached to sheet
-enum ModuleType { Unknown = 0, Normal, Class, Form, Document };
// #117718# define map to hold types of module
//
-
+typedef sal_Int32 ModType;
typedef ::std::map< UniString,
- ModuleType > ModuleTypeHash;
+ ModType > ModuleTypeHash;
class VBA_Impl
{
@@ -90,8 +85,7 @@ public:
void Output(int len, const sal_uInt8 *data);
//
// #117718# member map of module names to types of module
- ModuleType GetModuleType( const UniString& rModuleName );
-
+ ModType GetModuleType( const UniString& rModuleName );
std::vector<String> maReferences;
private:
struct VBAOffset_Impl
diff --git a/filter/source/msfilter/svxmsbas.cxx b/filter/source/msfilter/svxmsbas.cxx
index e4305c2e4e65..55465850d8c8 100644
--- a/filter/source/msfilter/svxmsbas.cxx
+++ b/filter/source/msfilter/svxmsbas.cxx
@@ -50,6 +50,11 @@ using namespace com::sun::star::awt;
#include <com/sun/star/container/XNameContainer.hpp>
#include <com/sun/star/script/XLibraryContainer.hpp>
+#include <com/sun/star/script/ModuleInfo.hpp>
+#include <com/sun/star/script/ModuleType.hpp>
+#include <com/sun/star/script/XVBAModuleInfo.hpp>
+#include <com/sun/star/script/XVBACompat.hpp>
+
using namespace com::sun::star::container;
using namespace com::sun::star::script;
using namespace com::sun::star::uno;
@@ -58,12 +63,23 @@ using namespace com::sun::star;
using rtl::OUString;
+static ::rtl::OUString sVBAOption( RTL_CONSTASCII_USTRINGPARAM( "Option VBASupport 1\n" ) );
+
+int SvxImportMSVBasic::Import( const String& rStorageName,
+ const String &rSubStorageName,
+ BOOL bAsComment, BOOL bStripped )
+{
+ std::vector< String > codeNames;
+ return Import( rStorageName, rSubStorageName, codeNames, bAsComment, bStripped );
+}
+
int SvxImportMSVBasic::Import( const String& rStorageName,
const String &rSubStorageName,
+ const std::vector< String >& codeNames,
BOOL bAsComment, BOOL bStripped )
{
int nRet = 0;
- if( bImport && ImportCode_Impl( rStorageName, rSubStorageName,
+ if( bImport && ImportCode_Impl( rStorageName, rSubStorageName, codeNames,
bAsComment, bStripped ))
nRet |= 1;
@@ -225,6 +241,7 @@ BOOL SvxImportMSVBasic::CopyStorage_Impl( const String& rStorageName,
BOOL SvxImportMSVBasic::ImportCode_Impl( const String& rStorageName,
const String &rSubStorageName,
+ const std::vector< String >& codeNames,
BOOL bAsComment, BOOL bStripped )
{
BOOL bRet = FALSE;
@@ -233,13 +250,18 @@ BOOL SvxImportMSVBasic::ImportCode_Impl( const String& rStorageName,
{
SFX_APP()->EnterBasicCall();
Reference<XLibraryContainer> xLibContainer = rDocSh.GetBasicContainer();
+ Reference<XVBACompat> xVBACompat( xLibContainer, UNO_QUERY );
+
+ if ( xVBACompat.is() && !bAsComment )
+ xVBACompat->setVBACompatModeOn( sal_True );
+
DBG_ASSERT( xLibContainer.is(), "No BasicContainer!" );
UINT16 nStreamCount = aVBA.GetNoStreams();
Reference<XNameContainer> xLib;
+ String aLibName( RTL_CONSTASCII_USTRINGPARAM( "Standard" ) );
if( xLibContainer.is() && nStreamCount )
{
- String aLibName( RTL_CONSTASCII_USTRINGPARAM( "Standard" ) );
if( !xLibContainer->hasByName( aLibName ) )
xLibContainer->createLibrary( aLibName );
@@ -248,6 +270,28 @@ BOOL SvxImportMSVBasic::ImportCode_Impl( const String& rStorageName,
}
if( xLib.is() )
{
+ Reference< script::XVBAModuleInfo > xVBAModuleInfo( xLib, UNO_QUERY );
+ Reference< container::XNameAccess > xVBACodeNamedObjectAccess;
+ if ( !bAsComment )
+ {
+ Reference< XMultiServiceFactory> xSF(rDocSh.GetModel(), UNO_QUERY);
+ if ( xSF.is() )
+ {
+ try
+ {
+ xVBACodeNamedObjectAccess.set( xSF->createInstance( rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "ooo.vba.VBAObjectModuleObjectProvider"))), UNO_QUERY );
+ }
+ catch( Exception& ) { }
+ }
+ }
+ typedef std::hash_map< rtl::OUString, uno::Any, ::rtl::OUStringHash,
+::std::equal_to< ::rtl::OUString > > NameModuleDataHash;
+ typedef std::hash_map< rtl::OUString, script::ModuleInfo, ::rtl::OUStringHash,
+::std::equal_to< ::rtl::OUString > > NameModuleInfoHash;
+
+ NameModuleDataHash moduleData;
+ NameModuleInfoHash moduleInfos;
+
for( UINT16 i=0; i<nStreamCount;i++)
{
StringArray aDecompressed = aVBA.Decompress(i);
@@ -281,7 +325,7 @@ BOOL SvxImportMSVBasic::ImportCode_Impl( const String& rStorageName,
// is the same as the encoding for the names
// that are keys in the map used by GetModuleType method
const String &sOrigVBAModName = aVBA.GetStreamName( i );
- ModuleType mType = aVBA.GetModuleType( sOrigVBAModName );
+ ModType mType = aVBA.GetModuleType( sOrigVBAModName );
rtl::OUString sClassRem( RTL_CONSTASCII_USTRINGPARAM( "Rem Attribute VBA_ModuleType=" ) );
@@ -289,23 +333,23 @@ BOOL SvxImportMSVBasic::ImportCode_Impl( const String& rStorageName,
switch( mType )
{
- case Class:
+ case ModuleType::CLASS:
modeTypeComment = sClassRem +
::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "VBAClassModule\n" ) );
break;
- case Form:
+ case ModuleType::FORM:
modeTypeComment = sClassRem +
::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "VBAFormModule\n" ) );
break;
- case Document:
+ case ModuleType::DOCUMENT:
modeTypeComment = sClassRem +
::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "VBADocumentModule\n" ) );
break;
- case Normal:
+ case ModuleType::NORMAL:
modeTypeComment = sClassRem +
::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "VBAModule\n" ) );
break;
- case Unknown:
+ case ModuleType::UNKNOWN:
modeTypeComment = sClassRem +
::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "VBAUnknown\n" ) );
break;
@@ -313,12 +357,11 @@ BOOL SvxImportMSVBasic::ImportCode_Impl( const String& rStorageName,
DBG_ERRORFILE( "SvxImportMSVBasic::ImportCode_Impl - unknown module type" );
break;
}
- static ::rtl::OUString sVBAOption( RTL_CONSTASCII_USTRINGPARAM( "Option VBASupport 1\n" ) );
static ::rtl::OUString sClassOption( RTL_CONSTASCII_USTRINGPARAM( "Option ClassModule\n" ) );
if ( !bAsComment )
{
modeTypeComment = modeTypeComment + sVBAOption;
- if ( mType == Class )
+ if ( mType == ModuleType::CLASS )
modeTypeComment = modeTypeComment + sClassOption;
}
@@ -380,20 +423,69 @@ BOOL SvxImportMSVBasic::ImportCode_Impl( const String& rStorageName,
aSource += rtl::OUString::createFromAscii("\nEnd Sub");
}
::rtl::OUString aModName( sModule );
- if ( aSource.getLength() )
- {
- aSource = modeTypeComment + aSource;
+ aSource = modeTypeComment + aSource;
- Any aSourceAny;
+ Any aSourceAny;
+ OSL_TRACE("erm %d", mType );
aSourceAny <<= aSource;
- if( xLib->hasByName( aModName ) )
- xLib->replaceByName( aModName, aSourceAny );
- else
- xLib->insertByName( aModName, aSourceAny );
+ if ( !bAsComment )
+ {
+ OSL_TRACE("vba processing %d", mType );
+ script::ModuleInfo sModuleInfo;
+ sModuleInfo.ModuleType = mType;
+ moduleInfos[ aModName ] = sModuleInfo;
+ }
+ moduleData[ aModName ] = aSourceAny;
+ }
+ // Hack for missing codenames ( only know to happen in excel but... )
+ // only makes sense to do this if we are importing non-commented basic
+ if ( !bAsComment )
+ {
+ for ( std::vector< String >::const_iterator it = codeNames.begin(); it != codeNames.end(); ++it )
+ {
+ script::ModuleInfo sModuleInfo;
+ sModuleInfo.ModuleType = ModuleType::DOCUMENT;
+ moduleInfos[ *it ] = sModuleInfo;
+ moduleData[ *it ] = uno::makeAny( sVBAOption );
+ }
+ }
+ NameModuleDataHash::iterator it_end = moduleData.end();
+ for ( NameModuleDataHash::iterator it = moduleData.begin(); it != it_end; ++it )
+ {
+ NameModuleInfoHash::iterator it_info = moduleInfos.find( it->first );
+ if ( it_info != moduleInfos.end() )
+ {
+ ModuleInfo& sModuleInfo = it_info->second;
+ if ( sModuleInfo.ModuleType == ModuleType::FORM )
+ // hack, the module ( imo document basic should...
+ // know the XModel... ) but it doesn't
+ sModuleInfo.ModuleObject.set( rDocSh.GetModel(), UNO_QUERY );
+ // document modules, we should be able to access
+ // the api objects at this time
+ else if ( sModuleInfo.ModuleType == ModuleType::DOCUMENT )
+ {
+ if ( xVBACodeNamedObjectAccess.is() )
+ {
+ try
+ {
+ sModuleInfo.ModuleObject.set( xVBACodeNamedObjectAccess->getByName( it->first ), uno::UNO_QUERY );
+ OSL_TRACE("** Straight up creation of Module");
+ }
+ catch(uno::Exception& e)
+ {
+ OSL_TRACE("Failed to get documument object for %s", rtl::OUStringToOString( it->first, RTL_TEXTENCODING_UTF8 ).getStr() );
+ }
+ }
+ }
+ xVBAModuleInfo->insertModuleInfo( it->first, sModuleInfo );
}
- bRet = true;
+ if( xLib->hasByName( it->first ) )
+ xLib->replaceByName( it->first, it->second );
+ else
+ xLib->insertByName( it->first, it->second );
}
+ bRet = true;
}
SFX_APP()->LeaveBasicCall();
}
diff --git a/oox/inc/oox/core/filterbase.hxx b/oox/inc/oox/core/filterbase.hxx
index b086538db73e..31e26d38f590 100644
--- a/oox/inc/oox/core/filterbase.hxx
+++ b/oox/inc/oox/core/filterbase.hxx
@@ -49,6 +49,7 @@ namespace com { namespace sun { namespace star {
namespace frame { class XModel; }
namespace task { class XStatusIndicator; }
namespace task { class XInteractionHandler; }
+ namespace frame { class XFrame; }
namespace io { class XInputStream; }
namespace io { class XOutputStream; }
namespace io { class XStream; }
@@ -123,6 +124,10 @@ public:
const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >&
getModelFactory() const;
+ /** Returns the frame that will contain the document model. */
+ const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >&
+ getTargetFrame() const;
+
/** Returns the status indicator (may be null). */
const ::com::sun::star::uno::Reference< ::com::sun::star::task::XStatusIndicator >&
getStatusIndicator() const;
@@ -145,12 +150,12 @@ public:
@param rStorageName
The name of the embedded storage. The name may contain slashes to
open storages from embedded substorages.
- @param bCreate
+ @param bCreateMissing
True = create missing sub storages (for export filters).
*/
StorageRef openSubStorage(
const ::rtl::OUString& rStorageName,
- bool bCreate ) const;
+ bool bCreateMissing ) const;
/** Opens and returns the specified input stream from the base storage.
@@ -189,20 +194,6 @@ public:
/** Returns a helper for the handling of OLE obejcts. */
::oox::ole::OleObjectHelper& getOleObjectHelper() const;
- /** Returns information about the output device. */
- const ::com::sun::star::awt::DeviceInfo& getDeviceInfo() const;
- /** Converts the passed value from horizontal screen pixels to 1/100 mm. */
- sal_Int32 convertScreenPixelX( double fPixelX ) const;
- /** Converts the passed value from vertical screen pixels to 1/100 mm. */
- sal_Int32 convertScreenPixelY( double fPixelY ) const;
-
- /** Returns a system color specified by the passed XML token identifier. */
- sal_Int32 getSystemColor( sal_Int32 nToken, sal_Int32 nDefaultRgb = API_RGB_TRANSPARENT ) const;
- /** Derived classes may implement to resolve a scheme color from the passed XML token identifier. */
- virtual sal_Int32 getSchemeColor( sal_Int32 nToken ) const;
- /** Derived classes may implement to resolve a palette index to an RGB color. */
- virtual sal_Int32 getPaletteColor( sal_Int32 nPaletteIdx ) const;
-
/** Requests a password from the media descriptor or from the user. On
success, the password will be inserted into the media descriptor. */
::rtl::OUString requestPassword( ::comphelper::IDocPasswordVerifier& rVerifier ) const;
@@ -282,6 +273,10 @@ private:
void setMediaDescriptor(
const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& rMediaDescSeq );
+ /** Derived classes may create a specialized graphic helper, e.g. for
+ resolving palette colors. */
+ virtual GraphicHelper* implCreateGraphicHelper() const;
+
virtual ::rtl::OUString implGetImplementationName() const = 0;
virtual StorageRef implCreateStorage(
diff --git a/oox/inc/oox/drawingml/chart/chartdrawingfragment.hxx b/oox/inc/oox/drawingml/chart/chartdrawingfragment.hxx
index e38311394046..0b5a7f6374a4 100644
--- a/oox/inc/oox/drawingml/chart/chartdrawingfragment.hxx
+++ b/oox/inc/oox/drawingml/chart/chartdrawingfragment.hxx
@@ -2,14 +2,10 @@
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
- * Copyright 2008 by Sun Microsystems, Inc.
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: chartdrawingfragment.hxx,v $
- *
- * $Revision: 1.1 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
diff --git a/oox/inc/oox/drawingml/color.hxx b/oox/inc/oox/drawingml/color.hxx
index 830959b77db9..51e9501205cf 100644
--- a/oox/inc/oox/drawingml/color.hxx
+++ b/oox/inc/oox/drawingml/color.hxx
@@ -35,7 +35,7 @@
#include <rtl/ustring.hxx>
#include "oox/helper/helper.hxx"
-namespace oox { namespace core { class FilterBase; } }
+namespace oox { class GraphicHelper; }
namespace oox {
namespace drawingml {
@@ -90,7 +90,7 @@ public:
bool isPlaceHolder() const { return meMode == COLOR_PH; }
/** Returns the final RGB color value.
@param nPhClr Actual color for the phClr placeholder color used in theme style lists. */
- sal_Int32 getColor( const ::oox::core::FilterBase& rFilter, sal_Int32 nPhClr = API_RGB_TRANSPARENT ) const;
+ sal_Int32 getColor( const GraphicHelper& rGraphicHelper, sal_Int32 nPhClr = API_RGB_TRANSPARENT ) const;
/** Returns true, if the color has a transparence set. */
bool hasTransparence() const;
diff --git a/oox/inc/oox/drawingml/customshapeproperties.hxx b/oox/inc/oox/drawingml/customshapeproperties.hxx
index 4e4b82cd5acd..44e91d6e797b 100644
--- a/oox/inc/oox/drawingml/customshapeproperties.hxx
+++ b/oox/inc/oox/drawingml/customshapeproperties.hxx
@@ -43,9 +43,7 @@
#include <com/sun/star/drawing/EnhancedCustomShapeTextFrame.hpp>
#include <com/sun/star/drawing/EnhancedCustomShapeAdjustmentValue.hpp>
#include <com/sun/star/drawing/EnhancedCustomShapeTextPathMode.hpp>
-#ifndef __com_sun_star_beans_PropertyValues_hpp__
#include <com/sun/star/beans/PropertyValues.hpp>
-#endif
#include <com/sun/star/drawing/ProjectionMode.hpp>
#include <com/sun/star/drawing/XShape.hpp>
@@ -69,8 +67,7 @@ public:
virtual ~CustomShapeProperties();
void apply( const CustomShapePropertiesPtr& );
- void pushToPropSet( const ::oox::core::FilterBase& rFilterBase,
- const ::com::sun::star::uno::Reference < ::com::sun::star::beans::XPropertySet > & xPropSet,
+ void pushToPropSet( const ::com::sun::star::uno::Reference < ::com::sun::star::beans::XPropertySet > & xPropSet,
const ::com::sun::star::uno::Reference < ::com::sun::star::drawing::XShape > & xShape) const;
void setShapePresetType( const rtl::OUString& rShapePresetType ){ maShapePresetType = rShapePresetType; };
diff --git a/oox/inc/oox/drawingml/fillproperties.hxx b/oox/inc/oox/drawingml/fillproperties.hxx
index be6561c970d3..42457e6f4dde 100644
--- a/oox/inc/oox/drawingml/fillproperties.hxx
+++ b/oox/inc/oox/drawingml/fillproperties.hxx
@@ -35,6 +35,7 @@
#include "oox/helper/helper.hxx"
namespace oox {
+ class GraphicHelper;
class ModelObjectHelper;
class PropertyMap;
class PropertySet;
@@ -156,8 +157,8 @@ struct FillProperties
/** Writes the properties to the passed property map. */
void pushToPropMap(
PropertyMap& rPropMap,
- const ::oox::core::FilterBase& rFilter,
ModelObjectHelper& rModelObjHelper,
+ const GraphicHelper& rGraphicHelper,
const FillPropertyIds& rPropIds = DEFAULT_IDS,
sal_Int32 nShapeRotation = 0,
sal_Int32 nPhClr = API_RGB_TRANSPARENT ) const;
@@ -165,8 +166,8 @@ struct FillProperties
/** Writes the properties to the passed property set. */
void pushToPropSet(
PropertySet& rPropSet,
- const ::oox::core::FilterBase& rFilter,
ModelObjectHelper& rModelObjHelper,
+ const GraphicHelper& rGraphicHelper,
const FillPropertyIds& rPropIds = DEFAULT_IDS,
sal_Int32 nShapeRotation = 0,
sal_Int32 nPhClr = API_RGB_TRANSPARENT ) const;
@@ -184,13 +185,13 @@ struct GraphicProperties
/** Writes the properties to the passed property map. */
void pushToPropMap(
PropertyMap& rPropMap,
- const ::oox::core::FilterBase& rFilter,
+ const GraphicHelper& rGraphicHelper,
sal_Int32 nPhClr = API_RGB_TRANSPARENT ) const;
/** Writes the properties to the passed property set. */
void pushToPropSet(
PropertySet& rPropSet,
- const ::oox::core::FilterBase& rFilter,
+ const GraphicHelper& rGraphicHelper,
sal_Int32 nPhClr = API_RGB_TRANSPARENT ) const;
};
diff --git a/oox/inc/oox/drawingml/lineproperties.hxx b/oox/inc/oox/drawingml/lineproperties.hxx
index 9a538db30156..0f034a89f65b 100644
--- a/oox/inc/oox/drawingml/lineproperties.hxx
+++ b/oox/inc/oox/drawingml/lineproperties.hxx
@@ -104,16 +104,16 @@ struct LineProperties
/** Writes the properties to the passed property map. */
void pushToPropMap(
PropertyMap& rPropMap,
- const ::oox::core::FilterBase& rFilter,
ModelObjectHelper& rModelObjHelper,
+ const GraphicHelper& rGraphicHelper,
const LinePropertyIds& rPropIds = DEFAULT_IDS,
sal_Int32 nPhClr = API_RGB_TRANSPARENT ) const;
/** Writes the properties to the passed property map. */
void pushToPropSet(
PropertySet& rPropSet,
- const ::oox::core::FilterBase& rFilter,
ModelObjectHelper& rModelObjHelper,
+ const GraphicHelper& rGraphicHelper,
const LinePropertyIds& rPropIds = DEFAULT_IDS,
sal_Int32 nPhClr = API_RGB_TRANSPARENT ) const;
};
diff --git a/oox/inc/oox/dump/biffdumper.hxx b/oox/inc/oox/dump/biffdumper.hxx
index 5a7e390d19a4..e9016fdf0b2b 100644
--- a/oox/inc/oox/dump/biffdumper.hxx
+++ b/oox/inc/oox/dump/biffdumper.hxx
@@ -217,7 +217,7 @@ protected:
void dumpDffClientRect();
void dumpEmbeddedDff();
- void dumpOcxControl();
+ void dumpControl();
private:
typedef ::boost::shared_ptr< BiffSharedData > BiffSharedDataRef;
@@ -242,7 +242,7 @@ void BiffObjectBase::writeRectItem( const String& rName,
Type nLeft, Type nTop, Type nWidth, Type nHeight,
const NameListWrapper& rListWrp, FormatType eFmtType )
{
- MultiItemsGuard aMultiGuard( out() );
+ MultiItemsGuard aMultiGuard( mxOut );
writeEmptyItem( rName );
writeValueItem( "x-pos", nLeft, eFmtType, rListWrp );
writeValueItem( "y-pos", nTop, eFmtType, rListWrp );
@@ -508,6 +508,10 @@ protected:
const StorageRef& rxStrg,
const ::rtl::OUString& rStrgPath,
const ::rtl::OUString& rSysPath );
+
+ virtual void implDumpBaseStream(
+ const BinaryInputStreamRef& rxStrm,
+ const ::rtl::OUString& rSysFileName );
};
// ============================================================================
diff --git a/oox/inc/oox/dump/dumperbase.hxx b/oox/inc/oox/dump/dumperbase.hxx
index ecca5751c16c..f65eeceebf27 100644
--- a/oox/inc/oox/dump/dumperbase.hxx
+++ b/oox/inc/oox/dump/dumperbase.hxx
@@ -61,6 +61,7 @@ namespace comphelper {
namespace oox {
class BinaryOutputStream;
+ class TextInputStream;
}
namespace oox { namespace core {
@@ -576,43 +577,41 @@ protected:
// ============================================================================
// ============================================================================
-typedef ::com::sun::star::uno::Reference< ::com::sun::star::io::XTextInputStream > ConfigInputStreamRef;
-
class ConfigItemBase
{
public:
virtual ~ConfigItemBase();
- void readConfigBlock( const ConfigInputStreamRef& rxStrm );
+ void readConfigBlock( TextInputStream& rStrm );
protected:
inline explicit ConfigItemBase() {}
virtual void implProcessConfigItemStr(
- const ConfigInputStreamRef& rxStrm,
+ TextInputStream& rStrm,
const ::rtl::OUString& rKey,
const ::rtl::OUString& rData );
virtual void implProcessConfigItemInt(
- const ConfigInputStreamRef& rxStrm,
+ TextInputStream& rStrm,
sal_Int64 nKey,
const ::rtl::OUString& rData );
void readConfigBlockContents(
- const ConfigInputStreamRef& rxStrm );
+ TextInputStream& rStrm );
private:
enum LineType { LINETYPE_DATA, LINETYPE_END };
LineType readConfigLine(
- const ConfigInputStreamRef& rxStrm,
+ TextInputStream& rStrm,
::rtl::OUString& orKey,
::rtl::OUString& orData ) const;
LineType readConfigLine(
- const ConfigInputStreamRef& rxStrm ) const;
+ TextInputStream& rStrm ) const;
void processConfigItem(
- const ConfigInputStreamRef& rxStrm,
+ TextInputStream& rStrm,
const ::rtl::OUString& rKey,
const ::rtl::OUString& rData );
};
@@ -673,12 +672,12 @@ protected:
virtual bool implIsValid() const;
virtual void implProcessConfigItemStr(
- const ConfigInputStreamRef& rxStrm,
+ TextInputStream& rStrm,
const ::rtl::OUString& rKey,
const ::rtl::OUString& rData );
virtual void implProcessConfigItemInt(
- const ConfigInputStreamRef& rxStrm,
+ TextInputStream& rStrm,
sal_Int64 nKey,
const ::rtl::OUString& rData );
@@ -721,7 +720,7 @@ public:
protected:
virtual void implProcessConfigItemStr(
- const ConfigInputStreamRef& rxStrm,
+ TextInputStream& rStrm,
const ::rtl::OUString& rKey,
const ::rtl::OUString& rData );
@@ -750,7 +749,7 @@ public:
protected:
virtual void implProcessConfigItemStr(
- const ConfigInputStreamRef& rxStrm,
+ TextInputStream& rStrm,
const ::rtl::OUString& rKey,
const ::rtl::OUString& rData );
@@ -777,7 +776,7 @@ public:
protected:
virtual void implProcessConfigItemStr(
- const ConfigInputStreamRef& rxStrm,
+ TextInputStream& rStrm,
const ::rtl::OUString& rKey,
const ::rtl::OUString& rData );
@@ -917,14 +916,14 @@ public:
protected:
virtual bool implIsValid() const;
virtual void implProcessConfigItemStr(
- const ConfigInputStreamRef& rxStrm,
+ TextInputStream& rStrm,
const ::rtl::OUString& rKey,
const ::rtl::OUString& rData );
private:
bool readConfigFile( const ::rtl::OUString& rFileUrl );
template< typename ListType >
- void readNameList( const ConfigInputStreamRef& rxStrm, const ::rtl::OUString& rListName );
+ void readNameList( TextInputStream& rStrm, const ::rtl::OUString& rListName );
void createShortList( const ::rtl::OUString& rData );
void createUnitConverter( const ::rtl::OUString& rData );
@@ -960,11 +959,11 @@ template< typename ListType >
}
template< typename ListType >
-void SharedConfigData::readNameList( const ConfigInputStreamRef& rxStrm, const ::rtl::OUString& rListName )
+void SharedConfigData::readNameList( TextInputStream& rStrm, const ::rtl::OUString& rListName )
{
NameListRef xList = createNameList< ListType >( rListName );
if( xList.get() )
- xList->readConfigBlock( rxStrm );
+ xList->readConfigBlock( rStrm );
}
// ============================================================================
@@ -1182,7 +1181,7 @@ typedef ::boost::shared_ptr< Output > OutputRef;
class IndentGuard
{
public:
- inline explicit IndentGuard( Output& rOut ) : mrOut( rOut ) { mrOut.incIndent(); }
+ inline explicit IndentGuard( const OutputRef& rxOut ) : mrOut( *rxOut ) { mrOut.incIndent(); }
inline ~IndentGuard() { mrOut.decIndent(); }
private:
IndentGuard( const IndentGuard& );
@@ -1196,17 +1195,17 @@ private:
class TableGuard
{
public:
- inline explicit TableGuard( Output& rOut, sal_Int32 nW1 ) :
- mrOut( rOut ) { mrOut.startTable( nW1 ); }
- inline explicit TableGuard( Output& rOut, sal_Int32 nW1, sal_Int32 nW2 ) :
- mrOut( rOut ) { mrOut.startTable( nW1, nW2 ); }
- inline explicit TableGuard( Output& rOut, sal_Int32 nW1, sal_Int32 nW2, sal_Int32 nW3 ) :
- mrOut( rOut ) { mrOut.startTable( nW1, nW2, nW3 ); }
- inline explicit TableGuard( Output& rOut, sal_Int32 nW1, sal_Int32 nW2, sal_Int32 nW3, sal_Int32 nW4 ) :
- mrOut( rOut ) { mrOut.startTable( nW1, nW2, nW3, nW4 ); }
- inline explicit TableGuard( Output& rOut, size_t nColCount,
+ inline explicit TableGuard( const OutputRef& rxOut, sal_Int32 nW1 ) :
+ mrOut( *rxOut ) { mrOut.startTable( nW1 ); }
+ inline explicit TableGuard( const OutputRef& rxOut, sal_Int32 nW1, sal_Int32 nW2 ) :
+ mrOut( *rxOut ) { mrOut.startTable( nW1, nW2 ); }
+ inline explicit TableGuard( const OutputRef& rxOut, sal_Int32 nW1, sal_Int32 nW2, sal_Int32 nW3 ) :
+ mrOut( *rxOut ) { mrOut.startTable( nW1, nW2, nW3 ); }
+ inline explicit TableGuard( const OutputRef& rxOut, sal_Int32 nW1, sal_Int32 nW2, sal_Int32 nW3, sal_Int32 nW4 ) :
+ mrOut( *rxOut ) { mrOut.startTable( nW1, nW2, nW3, nW4 ); }
+ inline explicit TableGuard( const OutputRef& rxOut, size_t nColCount,
const sal_Int32* pnColWidths ) :
- mrOut( rOut ) { mrOut.startTable( nColCount, pnColWidths ); }
+ mrOut( *rxOut ) { mrOut.startTable( nColCount, pnColWidths ); }
inline ~TableGuard() { mrOut.endTable(); }
inline void tab() { mrOut.tab(); }
inline void tab( size_t nCol ) { mrOut.tab( nCol ); }
@@ -1222,8 +1221,8 @@ private:
class ItemGuard
{
public:
- inline explicit ItemGuard( Output& rOut, const String& rName = EMPTY_STRING ) :
- mrOut( rOut ) { mrOut.startItem( rName ); }
+ inline explicit ItemGuard( const OutputRef& rxOut, const String& rName = EMPTY_STRING ) :
+ mrOut( *rxOut ) { mrOut.startItem( rName ); }
inline ~ItemGuard() { mrOut.endItem(); }
inline void cont() { mrOut.contItem(); }
private:
@@ -1238,7 +1237,7 @@ private:
class MultiItemsGuard
{
public:
- inline explicit MultiItemsGuard( Output& rOut ) : mrOut( rOut ) { mrOut.startMultiItems(); }
+ inline explicit MultiItemsGuard( const OutputRef& rxOut ) : mrOut( *rxOut ) { mrOut.startMultiItems(); }
inline ~MultiItemsGuard() { mrOut.endMultiItems(); }
private:
MultiItemsGuard( const MultiItemsGuard& );
@@ -1280,7 +1279,8 @@ class ObjectBase : public Base
public:
virtual ~ObjectBase();
- inline const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& getFactory() const { return mxConfig->getFactory(); }
+ inline const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >&
+ getFactory() const { return mxConfig->getFactory(); }
void dump();
@@ -1333,6 +1333,10 @@ protected:
const ::rtl::OUString& rStrgPath,
const ::rtl::OUString& rSysPath );
+ virtual void implDumpBaseStream(
+ const BinaryInputStreamRef& rxStrm,
+ const ::rtl::OUString& rSysFileName );
+
void addPreferredStream( const String& rStrmName );
void addPreferredStorage( const String& rStrgPath );
@@ -1355,7 +1359,7 @@ private:
const StorageRef& rxStrg,
const ::rtl::OUString& rStrgPath,
const ::rtl::OUString& rItemName,
- const ::rtl::OUString& rSysOutPath,
+ const ::rtl::OUString& rSysPath,
bool bIsStrg, bool bIsStrm );
private:
@@ -1397,10 +1401,6 @@ protected:
// ------------------------------------------------------------------------
- inline Output& out() const { return *mxOut; }
-
- // ------------------------------------------------------------------------
-
void writeEmptyItem( const String& rName );
void writeInfoItem( const String& rName, const String& rData );
void writeCharItem( const String& rName, sal_Unicode cData );
@@ -1451,7 +1451,7 @@ protected:
template< typename Type >
void writeHexPairItem( const String& rName, Type nData1, Type nData2, sal_Unicode cSep = ',' );
-private:
+protected:
OutputRef mxOut;
};
@@ -1472,14 +1472,14 @@ void OutputObjectBase::addNameToItem( Type nData, const NameListWrapper& rListWr
template< typename Type >
void OutputObjectBase::writeNameItem( const String& rName, Type nData, const NameListWrapper& rListWrp )
{
- ItemGuard aItem( *mxOut, rName );
+ ItemGuard aItem( mxOut, rName );
mxOut->writeName( cfg(), nData, rListWrp );
}
template< typename Type >
void OutputObjectBase::writeDecItem( const String& rName, Type nData, const NameListWrapper& rListWrp )
{
- ItemGuard aItem( *mxOut, rName );
+ ItemGuard aItem( mxOut, rName );
mxOut->writeDec( nData );
addNameToItem( nData, rListWrp );
}
@@ -1487,7 +1487,7 @@ void OutputObjectBase::writeDecItem( const String& rName, Type nData, const Name
template< typename Type >
void OutputObjectBase::writeHexItem( const String& rName, Type nData, const NameListWrapper& rListWrp )
{
- ItemGuard aItem( *mxOut, rName );
+ ItemGuard aItem( mxOut, rName );
mxOut->writeHex( nData );
addNameToItem( nData, rListWrp );
}
@@ -1495,7 +1495,7 @@ void OutputObjectBase::writeHexItem( const String& rName, Type nData, const Name
template< typename Type >
void OutputObjectBase::writeShortHexItem( const String& rName, Type nData, const NameListWrapper& rListWrp )
{
- ItemGuard aItem( *mxOut, rName );
+ ItemGuard aItem( mxOut, rName );
mxOut->writeShortHex( nData );
addNameToItem( nData, rListWrp );
}
@@ -1503,7 +1503,7 @@ void OutputObjectBase::writeShortHexItem( const String& rName, Type nData, const
template< typename Type >
void OutputObjectBase::writeBinItem( const String& rName, Type nData, const NameListWrapper& rListWrp )
{
- ItemGuard aItem( *mxOut, rName );
+ ItemGuard aItem( mxOut, rName );
mxOut->writeBin( nData );
addNameToItem( nData, rListWrp );
}
@@ -1511,7 +1511,7 @@ void OutputObjectBase::writeBinItem( const String& rName, Type nData, const Name
template< typename Type >
void OutputObjectBase::writeFixItem( const String& rName, Type nData, const NameListWrapper& rListWrp )
{
- ItemGuard aItem( *mxOut, rName );
+ ItemGuard aItem( mxOut, rName );
mxOut->writeFix( nData );
addNameToItem( nData, rListWrp );
}
@@ -1519,7 +1519,7 @@ void OutputObjectBase::writeFixItem( const String& rName, Type nData, const Name
template< typename Type >
void OutputObjectBase::writeDecBoolItem( const String& rName, Type nData, const NameListWrapper& rListWrp )
{
- ItemGuard aItem( *mxOut, rName );
+ ItemGuard aItem( mxOut, rName );
mxOut->writeDec( nData );
aItem.cont();
mxOut->writeBool( nData != 0 );
@@ -1533,7 +1533,7 @@ void OutputObjectBase::writeValueItem( const String& rName, Type nData, FormatTy
writeDecBoolItem( rName, nData, rListWrp );
else
{
- ItemGuard aItem( *mxOut, rName );
+ ItemGuard aItem( mxOut, rName );
mxOut->writeValue( nData, eFmtType );
addNameToItem( nData, rListWrp );
}
@@ -1549,7 +1549,7 @@ void OutputObjectBase::writeValueItem( const ItemFormat& rItemFmt, Type nData )
template< typename Type >
void OutputObjectBase::writeDecPairItem( const String& rName, Type nData1, Type nData2, sal_Unicode cSep )
{
- ItemGuard aItem( *mxOut, rName );
+ ItemGuard aItem( mxOut, rName );
mxOut->writeDec( nData1 );
mxOut->writeChar( cSep );
mxOut->writeDec( nData2 );
@@ -1558,7 +1558,7 @@ void OutputObjectBase::writeDecPairItem( const String& rName, Type nData1, Type
template< typename Type >
void OutputObjectBase::writeHexPairItem( const String& rName, Type nData1, Type nData2, sal_Unicode cSep )
{
- ItemGuard aItem( *mxOut, rName );
+ ItemGuard aItem( mxOut, rName );
mxOut->writeHex( nData1 );
mxOut->writeChar( cSep );
mxOut->writeHex( nData2 );
@@ -1586,7 +1586,6 @@ protected:
// ------------------------------------------------------------------------
- inline BinaryInputStream& in() const { return *mxStrm; }
::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >
getXInputStream() const;
@@ -1655,7 +1654,7 @@ protected:
template< typename Type >
void dumpHexPair( const String& rName, sal_Unicode cSep = ',' );
-private:
+protected:
BinaryInputStreamRef mxStrm;
};
@@ -1822,16 +1821,12 @@ public:
rtl_TextEncoding eTextEnc );
protected:
+ virtual bool implIsValid() const;
virtual void implDump();
virtual void implDumpLine( const ::rtl::OUString& rLine, sal_uInt32 nLine );
private:
- bool readCharLine( ::rtl::OUString& orLine, sal_Unicode& orcNextLineChar );
- bool readUcs2Line( ::rtl::OUString& orLine, sal_Unicode& orcNextLineChar );
- bool readLine( ::rtl::OUString& orLine, sal_Unicode& orcNextLineChar );
-
-private:
- rtl_TextEncoding meTextEnc;
+ ::boost::shared_ptr< TextInputStream > mxTextStrm;
};
// ============================================================================
diff --git a/oox/inc/oox/dump/oledumper.hxx b/oox/inc/oox/dump/oledumper.hxx
index 539ca2a412d1..a0e9cd55e337 100644
--- a/oox/inc/oox/dump/oledumper.hxx
+++ b/oox/inc/oox/dump/oledumper.hxx
@@ -43,7 +43,26 @@ namespace dump {
// ============================================================================
// ============================================================================
-class StdFontObject : public InputObjectBase
+class OleInputObjectBase : public InputObjectBase
+{
+protected:
+ inline explicit OleInputObjectBase() {}
+
+ ::rtl::OUString dumpAnsiString32( const String& rName );
+ ::rtl::OUString dumpUniString32( const String& rName );
+
+ sal_Int32 dumpStdClipboardFormat( const String& rName = EMPTY_STRING );
+ ::rtl::OUString dumpAnsiString32OrStdClip( const String& rName );
+ ::rtl::OUString dumpUniString32OrStdClip( const String& rName );
+
+ void writeOleColorItem( const String& rName, sal_uInt32 nColor );
+ sal_uInt32 dumpOleColor( const String& rName );
+};
+
+// ============================================================================
+// ============================================================================
+
+class StdFontObject : public OleInputObjectBase
{
public:
explicit StdFontObject( const InputObjectBase& rParent );
@@ -54,7 +73,7 @@ protected:
// ============================================================================
-class StdPicObject : public InputObjectBase
+class StdPicObject : public OleInputObjectBase
{
public:
explicit StdPicObject( const InputObjectBase& rParent );
@@ -65,7 +84,7 @@ protected:
// ============================================================================
-class StdHlinkObject : public InputObjectBase
+class StdHlinkObject : public OleInputObjectBase
{
public:
explicit StdHlinkObject( const InputObjectBase& rParent );
@@ -87,7 +106,27 @@ private:
// ============================================================================
// ============================================================================
-class OlePropertyStreamObject : public BinaryStreamObject
+class OleStreamObject : public OleInputObjectBase
+{
+public:
+ explicit OleStreamObject( const ObjectBase& rParent, const BinaryInputStreamRef& rxStrm, const ::rtl::OUString& rSysFileName );
+};
+
+// ============================================================================
+
+class OleCompObjObject : public OleStreamObject
+{
+public:
+ explicit OleCompObjObject( const ObjectBase& rParent, const BinaryInputStreamRef& rxStrm, const ::rtl::OUString& rSysFileName );
+
+protected:
+ virtual void implDump();
+};
+
+// ============================================================================
+// ============================================================================
+
+class OlePropertyStreamObject : public InputObjectBase
{
public:
explicit OlePropertyStreamObject( const ObjectBase& rParent, const BinaryInputStreamRef& rxStrm, const ::rtl::OUString& rSysFileName );
@@ -146,35 +185,140 @@ protected:
// ============================================================================
// ============================================================================
-struct OcxFormSiteInfo
+class ComCtlObjectBase : public OleInputObjectBase
{
- ::rtl::OUString maProgId;
- sal_Int32 mnId;
- sal_uInt32 mnLength;
- bool mbInStream;
+protected:
+ explicit ComCtlObjectBase(
+ const InputObjectBase& rParent,
+ sal_uInt32 nDataId5, sal_uInt32 nDataId6, sal_uInt16 nVersion,
+ bool bCommonPart, bool bComplexPart );
+
+ virtual void implDump();
+ virtual void implDumpProperties() = 0;
+ virtual void implDumpCommonExtra( sal_Int64 nEndPos );
+ virtual void implDumpCommonTrailing();
+
+private:
+ bool dumpComCtlHeader( sal_uInt32 nExpId, sal_uInt16 nExpMajor = SAL_MAX_UINT16, sal_uInt16 nExpMinor = SAL_MAX_UINT16 );
+ bool dumpComCtlSize();
+ bool dumpComCtlData( sal_uInt32& ornCommonPartSize );
+ bool dumpComCtlCommon( sal_uInt32 nPartSize );
+ bool dumpComCtlComplex();
- inline explicit OcxFormSiteInfo() : mnId( 0 ), mnLength( 0 ), mbInStream( false ) {}
+protected:
+ sal_uInt32 mnDataId5;
+ sal_uInt32 mnDataId6;
+ sal_uInt16 mnVersion;
+ bool mbCommonPart;
+ bool mbComplexPart;
};
-typedef ::std::vector< OcxFormSiteInfo > OcxFormSiteInfoVector;
+// ============================================================================
-// ----------------------------------------------------------------------------
+class ComCtlScrollBarObject : public ComCtlObjectBase
+{
+public:
+ explicit ComCtlScrollBarObject( const InputObjectBase& rParent, sal_uInt16 nVersion );
-struct OcxFormSharedData
+protected:
+ virtual void implDumpProperties();
+};
+
+// ============================================================================
+
+class ComCtlProgressBarObject : public ComCtlObjectBase
{
- OUStringVector maClassInfoProgIds;
- OcxFormSiteInfoVector maSiteInfos;
+public:
+ explicit ComCtlProgressBarObject( const InputObjectBase& rParent, sal_uInt16 nVersion );
+
+protected:
+ virtual void implDumpProperties();
+};
+
+// ============================================================================
+
+class ComCtlSliderObject : public ComCtlObjectBase
+{
+public:
+ explicit ComCtlSliderObject( const InputObjectBase& rParent, sal_uInt16 nVersion );
+
+protected:
+ virtual void implDumpProperties();
};
// ============================================================================
+
+class ComCtlUpDownObject : public ComCtlObjectBase
+{
+public:
+ explicit ComCtlUpDownObject( const InputObjectBase& rParent, sal_uInt16 nVersion );
+
+protected:
+ virtual void implDumpProperties();
+};
+
// ============================================================================
-class OcxPropertyObjectBase : public InputObjectBase
+class ComCtlImageListObject : public ComCtlObjectBase
{
+public:
+ explicit ComCtlImageListObject( const InputObjectBase& rParent, sal_uInt16 nVersion );
+
protected:
- inline explicit OcxPropertyObjectBase() {}
+ virtual void implDumpProperties();
+ virtual void implDumpCommonExtra( sal_Int64 nEndPos );
+ virtual void implDumpCommonTrailing();
+};
+
+// ============================================================================
+
+class ComCtlTabStripObject : public ComCtlObjectBase
+{
+public:
+ explicit ComCtlTabStripObject( const InputObjectBase& rParent, sal_uInt16 nVersion );
+
+protected:
+ virtual void implDumpProperties();
+ virtual void implDumpCommonExtra( sal_Int64 nEndPos );
+};
+
+// ============================================================================
+
+class ComCtlTreeViewObject : public ComCtlObjectBase
+{
+public:
+ explicit ComCtlTreeViewObject( const InputObjectBase& rParent, sal_uInt16 nVersion );
+
+protected:
+ virtual void implDumpProperties();
+ virtual void implDumpCommonExtra( sal_Int64 nEndPos );
+
+private:
+ sal_uInt32 mnStringFlags;
+};
+
+// ============================================================================
+
+class ComCtlStatusBarObject : public ComCtlObjectBase
+{
+public:
+ explicit ComCtlStatusBarObject( const InputObjectBase& rParent, sal_uInt16 nVersion );
+
+protected:
+ virtual void implDumpProperties();
+ virtual void implDumpCommonExtra( sal_Int64 nEndPos );
+ virtual void implDumpCommonTrailing();
+};
- using InputObjectBase::construct;
+// ============================================================================
+// ============================================================================
+
+class AxPropertyObjectBase : public OleInputObjectBase
+{
+protected:
+ inline explicit AxPropertyObjectBase() {}
+
+ using OleInputObjectBase::construct;
void construct(
const ObjectBase& rParent,
const BinaryInputStreamRef& rxStrm,
@@ -213,19 +357,19 @@ protected:
inline bool dumpBoolProperty() { return startNextProperty(); }
inline sal_Int32 dumpHmmProperty() { return dumpDecProperty< sal_Int32 >( 0, "CONV-HMM-TO-CM" ); }
- inline sal_uInt8 dumpMousePtrProperty() { return dumpDecProperty< sal_uInt8 >( 0, "OCX-MOUSEPTR" ); }
+ inline sal_uInt8 dumpMousePtrProperty() { return dumpDecProperty< sal_uInt8 >( 0, "OLE-MOUSEPTR" ); }
template< typename Type >
- inline Type dumpBorderStyleProperty( Type nDefault ) { return dumpDecProperty< Type >( nDefault, "OCX-BORDERSTYLE" ); }
+ inline Type dumpBorderStyleProperty( Type nDefault ) { return dumpDecProperty< Type >( nDefault, "AX-BORDERSTYLE" ); }
template< typename Type >
- inline Type dumpSpecialEffectProperty( Type nDefault ) { return dumpDecProperty< Type >( nDefault, "OCX-SPECIALEFFECT" ); }
- inline sal_uInt32 dumpEnabledProperty() { return dumpDecProperty< sal_uInt32 >( 1, "OCX-ENABLED" ); }
- inline sal_Int32 dumpOrientationProperty() { return dumpDecProperty< sal_Int32 >( -1, "OCX-ORIENTATION" ); }
- inline sal_Int32 dumpDelayProperty() { return dumpDecProperty< sal_Int32 >( 50, "OCX-CONV-MS" ); }
- inline sal_uInt32 dumpImagePosProperty() { return dumpHexProperty< sal_uInt32 >( 0x00070001, "OCX-IMAGEPOS" ); }
- inline sal_uInt8 dumpImageSizeModeProperty() { return dumpDecProperty< sal_uInt8 >( 0, "OCX-IMAGESIZEMODE" ); }
- inline sal_uInt8 dumpImageAlignProperty() { return dumpDecProperty< sal_uInt8 >( 2, "OCX-IMAGEALIGN" ); }
-
- sal_uInt32 dumpFlagsProperty( sal_uInt32 nDefault, const sal_Char* pcNameList = "OCX-FLAGS" );
+ inline Type dumpSpecialEffectProperty( Type nDefault ) { return dumpDecProperty< Type >( nDefault, "AX-SPECIALEFFECT" ); }
+ inline sal_uInt32 dumpEnabledProperty() { return dumpDecProperty< sal_uInt32 >( 1, "AX-ENABLED" ); }
+ inline sal_Int32 dumpOrientationProperty() { return dumpDecProperty< sal_Int32 >( -1, "AX-ORIENTATION" ); }
+ inline sal_Int32 dumpDelayProperty() { return dumpDecProperty< sal_Int32 >( 50, "AX-CONV-MS" ); }
+ inline sal_uInt32 dumpImagePosProperty() { return dumpHexProperty< sal_uInt32 >( 0x00070001, "AX-IMAGEPOS" ); }
+ inline sal_uInt8 dumpImageSizeModeProperty() { return dumpDecProperty< sal_uInt8 >( 0, "AX-IMAGESIZEMODE" ); }
+ inline sal_uInt8 dumpImageAlignProperty() { return dumpDecProperty< sal_uInt8 >( 2, "AX-IMAGEALIGN" ); }
+
+ sal_uInt32 dumpFlagsProperty( sal_uInt32 nDefault, const sal_Char* pcNameList = "AX-FLAGS" );
sal_uInt32 dumpColorProperty( sal_uInt32 nDefault );
sal_Unicode dumpUnicodeProperty();
void dumpUnknownProperty();
@@ -241,7 +385,7 @@ protected:
void dumpToPosition( sal_Int64 nPos );
private:
- void constructOcxPropObj( const String& rPropNameList, bool b64BitPropFlags );
+ void constructAxPropObj( const String& rPropNameList, bool b64BitPropFlags );
void dumpVersion();
::rtl::OUString dumpString( const String& rName, sal_uInt32 nSize, bool bArray );
@@ -285,13 +429,13 @@ private:
// ----------------------------------------------------------------------------
template< typename Type >
-void OcxPropertyObjectBase::alignInput()
+void AxPropertyObjectBase::alignInput()
{
- in().skip( (sizeof( Type ) - ((in().tell() - mnPropertiesStart) % sizeof( Type ))) % sizeof( Type ) );
+ mxStrm->skip( (sizeof( Type ) - ((mxStrm->tell() - mnPropertiesStart) % sizeof( Type ))) % sizeof( Type ) );
}
template< typename Type >
-Type OcxPropertyObjectBase::dumpDecProperty( Type nDefault, const NameListWrapper& rListWrp )
+Type AxPropertyObjectBase::dumpDecProperty( Type nDefault, const NameListWrapper& rListWrp )
{
if( startNextProperty() )
{
@@ -302,7 +446,7 @@ Type OcxPropertyObjectBase::dumpDecProperty( Type nDefault, const NameListWrappe
}
template< typename Type >
-Type OcxPropertyObjectBase::dumpHexProperty( Type nDefault, const NameListWrapper& rListWrp )
+Type AxPropertyObjectBase::dumpHexProperty( Type nDefault, const NameListWrapper& rListWrp )
{
if( startNextProperty() )
{
@@ -314,10 +458,10 @@ Type OcxPropertyObjectBase::dumpHexProperty( Type nDefault, const NameListWrappe
// ============================================================================
-class OcxCFontNewObject : public OcxPropertyObjectBase
+class AxCFontNewObject : public AxPropertyObjectBase
{
public:
- explicit OcxCFontNewObject( const InputObjectBase& rParent );
+ explicit AxCFontNewObject( const InputObjectBase& rParent );
protected:
virtual void implDumpShortProperties();
@@ -325,10 +469,10 @@ protected:
// ============================================================================
-class OcxColumnInfoObject : public OcxPropertyObjectBase
+class AxColumnInfoObject : public AxPropertyObjectBase
{
public:
- explicit OcxColumnInfoObject( const InputObjectBase& rParent );
+ explicit AxColumnInfoObject( const InputObjectBase& rParent );
protected:
virtual void implDumpShortProperties();
@@ -336,10 +480,10 @@ protected:
// ============================================================================
-class OcxCommandButtonObject : public OcxPropertyObjectBase
+class AxCommandButtonObject : public AxPropertyObjectBase
{
public:
- explicit OcxCommandButtonObject( const InputObjectBase& rParent );
+ explicit AxCommandButtonObject( const InputObjectBase& rParent );
protected:
virtual void implDumpShortProperties();
@@ -348,10 +492,10 @@ protected:
// ============================================================================
-class OcxMorphControlObject : public OcxPropertyObjectBase
+class AxMorphControlObject : public AxPropertyObjectBase
{
public:
- explicit OcxMorphControlObject( const InputObjectBase& rParent );
+ explicit AxMorphControlObject( const InputObjectBase& rParent );
protected:
virtual void implDumpShortProperties();
@@ -367,10 +511,10 @@ private:
// ============================================================================
-class OcxLabelObject : public OcxPropertyObjectBase
+class AxLabelObject : public AxPropertyObjectBase
{
public:
- explicit OcxLabelObject( const InputObjectBase& rParent );
+ explicit AxLabelObject( const InputObjectBase& rParent );
protected:
virtual void implDumpShortProperties();
@@ -379,10 +523,10 @@ protected:
// ============================================================================
-class OcxImageObject : public OcxPropertyObjectBase
+class AxImageObject : public AxPropertyObjectBase
{
public:
- explicit OcxImageObject( const InputObjectBase& rParent );
+ explicit AxImageObject( const InputObjectBase& rParent );
protected:
virtual void implDumpShortProperties();
@@ -390,10 +534,10 @@ protected:
// ============================================================================
-class OcxScrollBarObject : public OcxPropertyObjectBase
+class AxScrollBarObject : public AxPropertyObjectBase
{
public:
- explicit OcxScrollBarObject( const InputObjectBase& rParent );
+ explicit AxScrollBarObject( const InputObjectBase& rParent );
protected:
virtual void implDumpShortProperties();
@@ -401,10 +545,10 @@ protected:
// ============================================================================
-class OcxSpinButtonObject : public OcxPropertyObjectBase
+class AxSpinButtonObject : public AxPropertyObjectBase
{
public:
- explicit OcxSpinButtonObject( const InputObjectBase& rParent );
+ explicit AxSpinButtonObject( const InputObjectBase& rParent );
protected:
virtual void implDumpShortProperties();
@@ -412,10 +556,10 @@ protected:
// ============================================================================
-class OcxTabStripObject : public OcxPropertyObjectBase
+class AxTabStripObject : public AxPropertyObjectBase
{
public:
- explicit OcxTabStripObject( const InputObjectBase& rParent );
+ explicit AxTabStripObject( const InputObjectBase& rParent );
protected:
virtual void implDumpShortProperties();
@@ -426,181 +570,188 @@ private:
};
// ============================================================================
+// ============================================================================
-class OcxControlObject : public InputObjectBase
+class FormControlStreamObject : public OleInputObjectBase
{
public:
- explicit OcxControlObject(
- const InputObjectBase& rParent,
- const ::rtl::OUString& rProgId,
- sal_Int64 nLength );
+ explicit FormControlStreamObject(
+ const ObjectBase& rParent,
+ const BinaryInputStreamRef& rxStrm,
+ const ::rtl::OUString& rSysFileName,
+ const ::rtl::OUString* pProgId = 0 );
+ explicit FormControlStreamObject(
+ const OutputObjectBase& rParent,
+ const BinaryInputStreamRef& rxStrm,
+ const ::rtl::OUString* pProgId = 0 );
protected:
virtual void implDump();
private:
+ void constructFormCtrlStrmObj( const ::rtl::OUString* pProgId );
+
+private:
::rtl::OUString maProgId;
- sal_Int64 mnLength;
+ bool mbReadGuid;
};
// ============================================================================
+// ============================================================================
-class OcxGuidControlObject : public InputObjectBase
+struct VbaFormSiteInfo
{
-public:
- explicit OcxGuidControlObject(
- const InputObjectBase& rParent,
- sal_Int64 nLength );
- explicit OcxGuidControlObject(
- const OutputObjectBase& rParent,
- const BinaryInputStreamRef& rxStrm );
- explicit OcxGuidControlObject(
- const ObjectBase& rParent,
- const BinaryInputStreamRef& rxStrm,
- const ::rtl::OUString& rSysFileName );
+ ::rtl::OUString maProgId;
+ sal_Int32 mnId;
+ sal_uInt32 mnLength;
+ bool mbInStream;
-protected:
- virtual void implDump();
+ inline explicit VbaFormSiteInfo() : mnId( 0 ), mnLength( 0 ), mbInStream( false ) {}
+};
-private:
- sal_Int64 mnLength;
+typedef ::std::vector< VbaFormSiteInfo > VbaFormSiteInfoVector;
+
+// ============================================================================
+
+struct VbaFormSharedData
+{
+ OUStringVector maClassInfoProgIds;
+ VbaFormSiteInfoVector maSiteInfos;
};
// ============================================================================
-class OcxControlsStreamObject : public InputObjectBase
+class VbaFormClassInfoObject : public AxPropertyObjectBase
{
public:
- explicit OcxControlsStreamObject(
- const ObjectBase& rParent,
- const BinaryInputStreamRef& rxStrm,
- const ::rtl::OUString& rSysFileName,
- OcxFormSharedData& rFormData );
+ explicit VbaFormClassInfoObject( const InputObjectBase& rParent, VbaFormSharedData& rFormData );
protected:
- virtual void implDump();
+ virtual void implDumpShortProperties();
private:
- OcxFormSharedData& mrFormData;
+ VbaFormSharedData& mrFormData;
};
// ============================================================================
-// ============================================================================
-class OcxPageObject : public OcxPropertyObjectBase
+class VbaFormSiteObject : public AxPropertyObjectBase
{
public:
- explicit OcxPageObject( const InputObjectBase& rParent );
+ explicit VbaFormSiteObject( const InputObjectBase& rParent, VbaFormSharedData& rFormData );
protected:
virtual void implDumpShortProperties();
+
+private:
+ VbaFormSharedData& mrFormData;
};
// ============================================================================
-class OcxMultiPageObject : public OcxPropertyObjectBase
+class VbaFormDesignExtObject : public AxPropertyObjectBase
{
public:
- explicit OcxMultiPageObject( const InputObjectBase& rParent );
+ explicit VbaFormDesignExtObject( const InputObjectBase& rParent );
protected:
virtual void implDumpShortProperties();
- virtual void implDumpExtended();
-
-private:
- sal_Int32 mnPageCount;
};
// ============================================================================
-class OcxMultiPageStreamObject : public InputObjectBase
+class VbaFStreamObject : public AxPropertyObjectBase
{
public:
- explicit OcxMultiPageStreamObject(
+ explicit VbaFStreamObject(
const ObjectBase& rParent,
const BinaryInputStreamRef& rxStrm,
const ::rtl::OUString& rSysFileName,
- OcxFormSharedData& rFormData );
+ VbaFormSharedData& rFormData );
protected:
- virtual void implDump();
+ virtual void implDumpShortProperties();
+ virtual void implDumpExtended();
+
+private:
+ void dumpClassInfos();
+ void dumpFormSites( sal_uInt32 nCount );
+ void dumpSiteData();
+ void dumpDesignExtender();
private:
- OcxFormSharedData& mrFormData;
+ VbaFormSharedData& mrFormData;
+ sal_uInt32 mnFlags;
};
// ============================================================================
-// ============================================================================
-class OcxFormClassInfoObject : public OcxPropertyObjectBase
+class VbaOStreamObject : public OleInputObjectBase
{
public:
- explicit OcxFormClassInfoObject( const InputObjectBase& rParent, OcxFormSharedData& rFormData );
+ explicit VbaOStreamObject(
+ const ObjectBase& rParent,
+ const BinaryInputStreamRef& rxStrm,
+ const ::rtl::OUString& rSysFileName,
+ VbaFormSharedData& rFormData );
protected:
- virtual void implDumpShortProperties();
+ virtual void implDump();
private:
- OcxFormSharedData& mrFormData;
+ VbaFormSharedData& mrFormData;
};
// ============================================================================
-class OcxFormSiteObject : public OcxPropertyObjectBase
+class VbaPageObject : public AxPropertyObjectBase
{
public:
- explicit OcxFormSiteObject( const InputObjectBase& rParent, OcxFormSharedData& rFormData );
+ explicit VbaPageObject( const InputObjectBase& rParent );
protected:
virtual void implDumpShortProperties();
-
-private:
- OcxFormSharedData& mrFormData;
};
// ============================================================================
-class OcxFormDesignExtObject : public OcxPropertyObjectBase
+class VbaMultiPageObject : public AxPropertyObjectBase
{
public:
- explicit OcxFormDesignExtObject( const InputObjectBase& rParent );
+ explicit VbaMultiPageObject( const InputObjectBase& rParent );
protected:
virtual void implDumpShortProperties();
+ virtual void implDumpExtended();
+
+private:
+ sal_Int32 mnPageCount;
};
// ============================================================================
-class OcxFormObject : public OcxPropertyObjectBase
+class VbaXStreamObject : public InputObjectBase
{
public:
- explicit OcxFormObject(
+ explicit VbaXStreamObject(
const ObjectBase& rParent,
const BinaryInputStreamRef& rxStrm,
const ::rtl::OUString& rSysFileName,
- OcxFormSharedData& rFormData );
+ VbaFormSharedData& rFormData );
protected:
- virtual void implDumpShortProperties();
- virtual void implDumpExtended();
-
-private:
- void dumpClassInfos();
- void dumpFormSites( sal_uInt32 nCount );
- void dumpSiteData();
- void dumpDesignExtender();
+ virtual void implDump();
private:
- OcxFormSharedData& mrFormData;
- sal_uInt32 mnFlags;
+ VbaFormSharedData& mrFormData;
};
// ============================================================================
-class OcxFormStorageObject : public OleStorageObject
+class VbaContainerStorageObject : public OleStorageObject
{
public:
- explicit OcxFormStorageObject(
+ explicit VbaContainerStorageObject(
const ObjectBase& rParent,
const StorageRef& rxStrg,
const ::rtl::OUString& rSysPath );
@@ -621,7 +772,7 @@ private:
bool isFormStorage( const ::rtl::OUString& rStrgPath ) const;
private:
- OcxFormSharedData maFormData;
+ VbaFormSharedData maFormData;
};
// ============================================================================
@@ -713,7 +864,7 @@ private:
// ============================================================================
-class VbaFormStorageObject : public OcxFormStorageObject
+class VbaFormStorageObject : public VbaContainerStorageObject
{
public:
explicit VbaFormStorageObject(
@@ -759,6 +910,23 @@ private:
// ============================================================================
// ============================================================================
+class ActiveXStorageObject : public VbaContainerStorageObject
+{
+public:
+ explicit ActiveXStorageObject(
+ const ObjectBase& rParent,
+ const StorageRef& rxStrg,
+ const ::rtl::OUString& rSysPath );
+
+protected:
+ virtual void implDumpBaseStream(
+ const BinaryInputStreamRef& rxStrm,
+ const ::rtl::OUString& rSysFileName );
+};
+
+// ============================================================================
+// ============================================================================
+
} // namespace dump
} // namespace oox
diff --git a/oox/inc/oox/dump/xlsbdumper.hxx b/oox/inc/oox/dump/xlsbdumper.hxx
index 95723f6b8d4e..345202f67a4a 100644
--- a/oox/inc/oox/dump/xlsbdumper.hxx
+++ b/oox/inc/oox/dump/xlsbdumper.hxx
@@ -98,7 +98,7 @@ private:
private:
typedef ::boost::shared_ptr< RecordInputStream > RecordInputStreamRef;
- RecordInputStreamRef mxStrm;
+ RecordInputStreamRef mxBiffStrm;
NameListRef mxErrCodes;
};
diff --git a/oox/inc/oox/helper/binaryinputstream.hxx b/oox/inc/oox/helper/binaryinputstream.hxx
index 19933ca03c04..8f58e2de4d9e 100644
--- a/oox/inc/oox/helper/binaryinputstream.hxx
+++ b/oox/inc/oox/helper/binaryinputstream.hxx
@@ -34,6 +34,8 @@
namespace oox {
+class BinaryOutputStream;
+
// ============================================================================
/** Interface for binary input stream classes.
@@ -108,6 +110,8 @@ public:
False = NUL characters are replaced by question marks (default). */
::rtl::OUString readUnicodeArray( sal_Int32 nChars, bool bAllowNulChars = false );
+ /** Copies nBytes bytes from the current position to the passed output stream. */
+ void copyToStream( BinaryOutputStream& rOutStrm, sal_Int64 nBytes = SAL_MAX_INT64 );
private:
/** Used by the readValue() template functions to read built-in types.
@@ -216,6 +220,71 @@ typedef ::boost::shared_ptr< SequenceInputStream > SequenceInputStreamRef;
// ============================================================================
+/** Wraps a BinaryInputStream and provides access to a specific part of the
+ stream data.
+
+ @descr
+ Provides access to the stream data block starting at the current
+ position of the stream, and with a specific length. If the wrapped
+ stream is seekable, this wrapper will treat the position the wrapped
+ has at construction time as position "0" (therefore the class name).
+ */
+class RelativeInputStream : public BinaryInputStream
+{
+public:
+ /** Constructs the wrapper object for the passed stream.
+
+ @attention
+ The passed input stream MUST live at least as long as this stream
+ wrapper. The stream MUST NOT be changed from outside as long as
+ this stream wrapper is used to read from it.
+
+ @param nLength
+ If specified, restricts the amount of data that can be read from
+ the passed input stream.
+ */
+ explicit RelativeInputStream(
+ BinaryInputStream& rInStrm,
+ sal_Int64 nLength = SAL_MAX_INT64 );
+
+ /** Returns whether the wrapped stream is seekable. */
+ virtual bool isSeekable() const;
+ /** Returns the size of the data block in the wrapped stream offered by
+ this wrapper. */
+ virtual sal_Int64 getLength() const;
+ /** Returns the current relative stream position. */
+ virtual sal_Int64 tell() const;
+ /** Seeks the stream to the passed relative position, if the wrapped stream
+ is seekable. */
+ virtual void seek( sal_Int64 nPos );
+
+ /** Reads nBytes bytes to the passed sequence. Does not read out of the
+ data block whose size has been specified on construction.
+ @return Number of bytes really read. */
+ virtual sal_Int32 readData( StreamDataSequence& orData, sal_Int32 nBytes );
+ /** Reads nBytes bytes to the (existing) buffer opMem. Does not read out of
+ the data block whose size has been specified on construction.
+ @return Number of bytes really read. */
+ virtual sal_Int32 readMemory( void* opMem, sal_Int32 nBytes );
+ /** Seeks the stream forward by the passed number of bytes. This works for
+ non-seekable streams too. Does not seek out of the data block. */
+ virtual void skip( sal_Int32 nBytes );
+
+ /** Stream operator for integral and floating-point types. */
+ template< typename Type >
+ inline RelativeInputStream& operator>>( Type& ornValue ) { readValue( ornValue ); return *this; }
+
+private:
+ BinaryInputStream& mrInStrm;
+ sal_Int64 mnStartPos;
+ sal_Int64 mnRelPos;
+ sal_Int64 mnLength;
+};
+
+typedef ::boost::shared_ptr< RelativeInputStream > RelativeInputStreamRef;
+
+// ============================================================================
+
} // namespace oox
#endif
diff --git a/oox/inc/oox/helper/binaryoutputstream.hxx b/oox/inc/oox/helper/binaryoutputstream.hxx
index b229dbd18901..d2f0f8b36ffa 100644
--- a/oox/inc/oox/helper/binaryoutputstream.hxx
+++ b/oox/inc/oox/helper/binaryoutputstream.hxx
@@ -34,8 +34,6 @@
namespace oox {
-class BinaryInputStream;
-
// ============================================================================
/** Interface for binary output stream classes.
@@ -50,9 +48,6 @@ public:
/** Derived classes implement writing from the (existing) buffer pMem. */
virtual void writeMemory( const void* pMem, sal_Int32 nBytes ) = 0;
- /** Copies nBytes bytes from the current position of the passed input stream. */
- void copyStream( BinaryInputStream& rInStrm, sal_Int64 nBytes = SAL_MAX_INT64 );
-
/** Writes a value to the stream and converts it to platform byte order.
Supported types: SAL integers (8 to 64 bit), float, double. */
template< typename Type >
diff --git a/oox/inc/oox/helper/binarystreambase.hxx b/oox/inc/oox/helper/binarystreambase.hxx
index 18d868660faa..abe4c5f1c274 100644
--- a/oox/inc/oox/helper/binarystreambase.hxx
+++ b/oox/inc/oox/helper/binarystreambase.hxx
@@ -38,7 +38,8 @@ typedef ::com::sun::star::uno::Sequence< sal_Int8 > StreamDataSequence;
// ============================================================================
-/** Base interface for seekable binary stream classes. */
+/** Base interface for binary stream classes. Implemenetations may or may not
+ support seeking the stream. */
class BinaryStreamBase
{
public:
@@ -46,11 +47,14 @@ public:
/** Derived classes return whether the stream is seekable. Default: false. */
virtual bool isSeekable() const;
- /** Derived classes returns the size of the stream, if seekable, otherwise/default: -1. */
+ /** Derived classes return the size of the stream, if possible,
+ otherwise/default: -1. May return something for unseekable streams. */
virtual sal_Int64 getLength() const;
- /** Derived classes return the current stream position, if seekable, otherwise/default: -1. */
+ /** Derived classes return the current stream position, if possible,
+ otherwise/default: -1. May return something for unseekable streams. */
virtual sal_Int64 tell() const;
- /** Derived classes implement seeking the stream to the passed position, if seekable. */
+ /** Derived classes implement seeking the stream to the passed position, if
+ the stream is seekable. */
virtual void seek( sal_Int64 nPos );
/** Returns true, if the stream position is invalid (EOF). This flag turns
@@ -63,6 +67,9 @@ public:
inline void seekToStart() { seek( 0 ); }
/** Seeks the stream to the end, if stream is seekable. */
inline void seekToEnd() { seek( getLength() ); }
+ /** Seeks the stream forward to a position that is a multiple of the passed
+ block size, relative to the passed stream position, if stream is seekable. */
+ void alignToBlock( sal_Int32 nBlockSize, sal_Int64 nAnchorPos = 0 );
protected:
inline explicit BinaryStreamBase() : mbEof( false ) {}
diff --git a/oox/inc/oox/helper/containerhelper.hxx b/oox/inc/oox/helper/containerhelper.hxx
index a077c667ae4c..f4f3717eac3f 100644
--- a/oox/inc/oox/helper/containerhelper.hxx
+++ b/oox/inc/oox/helper/containerhelper.hxx
@@ -84,34 +84,86 @@ public:
Does *not* check whether the last element is an empty reference. */
inline sal_Int32 getLastIndex() const { return static_cast< sal_Int32 >( this->size() ) - 1; }
- /** Calls the passed member function of ObjType on every contained object. */
+ /** Calls the passed functor for every contained object, automatically
+ skips all elements that are empty references. */
template< typename FunctorType >
- inline void forEach( const FunctorType& rFunctor ) const
+ inline void forEach( FunctorType aFunctor ) const
{
- ::std::for_each( this->begin(), this->end(), ForEachFunctor< FunctorType >( rFunctor ) );
+ ::std::for_each( this->begin(), this->end(), ForEachFunctor< FunctorType >( aFunctor ) );
}
- /** Calls the passed member function of ObjType on every contained object. */
+ /** Calls the passed member function of ObjType on every contained object,
+ automatically skips all elements that are empty references. */
template< typename FuncType >
inline void forEachMem( FuncType pFunc ) const
{
forEach( ::boost::bind( pFunc, _1 ) );
}
- /** Calls the passed member function of ObjType on every contained object. */
+ /** Calls the passed member function of ObjType on every contained object,
+ automatically skips all elements that are empty references. */
template< typename FuncType, typename ParamType >
inline void forEachMem( FuncType pFunc, ParamType aParam ) const
{
forEach( ::boost::bind( pFunc, _1, aParam ) );
}
- /** Calls the passed member function of ObjType on every contained object. */
+ /** Calls the passed member function of ObjType on every contained object,
+ automatically skips all elements that are empty references. */
template< typename FuncType, typename ParamType1, typename ParamType2 >
inline void forEachMem( FuncType pFunc, ParamType1 aParam1, ParamType2 aParam2 ) const
{
forEach( ::boost::bind( pFunc, _1, aParam1, aParam2 ) );
}
+ /** Calls the passed member function of ObjType on every contained object,
+ automatically skips all elements that are empty references. */
+ template< typename FuncType, typename ParamType1, typename ParamType2, typename ParamType3 >
+ inline void forEachMem( FuncType pFunc, ParamType1 aParam1, ParamType2 aParam2, ParamType3 aParam3 ) const
+ {
+ forEach( ::boost::bind( pFunc, _1, aParam1, aParam2, aParam3 ) );
+ }
+
+ /** Calls the passed functor for every contained object. Passes the index as
+ first argument and the object reference as second argument to rFunctor. */
+ template< typename FunctorType >
+ inline void forEachWithIndex( const FunctorType& rFunctor ) const
+ {
+ ::std::for_each( this->begin(), this->end(), ForEachFunctorWithIndex< FunctorType >( rFunctor ) );
+ }
+
+ /** Calls the passed member function of ObjType on every contained object.
+ Passes the vector index to the member function. */
+ template< typename FuncType >
+ inline void forEachMemWithIndex( FuncType pFunc ) const
+ {
+ forEachWithIndex( ::boost::bind( pFunc, _2, _1 ) );
+ }
+
+ /** Calls the passed member function of ObjType on every contained object.
+ Passes the vector index as first argument to the member function. */
+ template< typename FuncType, typename ParamType >
+ inline void forEachMemWithIndex( FuncType pFunc, ParamType aParam ) const
+ {
+ forEachWithIndex( ::boost::bind( pFunc, _2, _1, aParam ) );
+ }
+
+ /** Calls the passed member function of ObjType on every contained object.
+ Passes the vector index as first argument to the member function. */
+ template< typename FuncType, typename ParamType1, typename ParamType2 >
+ inline void forEachMemWithIndex( FuncType pFunc, ParamType1 aParam1, ParamType2 aParam2 ) const
+ {
+ forEachWithIndex( ::boost::bind( pFunc, _2, _1, aParam1, aParam2 ) );
+ }
+
+ /** Calls the passed member function of ObjType on every contained object.
+ Passes the vector index as first argument to the member function. */
+ template< typename FuncType, typename ParamType1, typename ParamType2, typename ParamType3 >
+ inline void forEachMemWithIndex( FuncType pFunc, ParamType1 aParam1, ParamType2 aParam2, ParamType3 aParam3 ) const
+ {
+ forEachWithIndex( ::boost::bind( pFunc, _2, _1, aParam1, aParam2, aParam3 ) );
+ }
+
/** Searches for an element by using the passed functor that takes a
constant reference of the object type (const ObjType&). */
template< typename FunctorType >
@@ -125,17 +177,26 @@ private:
template< typename FunctorType >
struct ForEachFunctor
{
- const FunctorType& mrFunctor;
- inline explicit ForEachFunctor( const FunctorType& rFunctor ) : mrFunctor( rFunctor ) {}
- inline void operator()( const value_type& rxValue ) const { if( rxValue.get() ) mrFunctor( *rxValue ); }
+ FunctorType maFunctor;
+ inline explicit ForEachFunctor( const FunctorType& rFunctor ) : maFunctor( rFunctor ) {}
+ inline void operator()( const value_type& rxValue ) { if( rxValue.get() ) maFunctor( *rxValue ); }
+ };
+
+ template< typename FunctorType >
+ struct ForEachFunctorWithIndex
+ {
+ FunctorType maFunctor;
+ sal_Int32 mnIndex;
+ inline explicit ForEachFunctorWithIndex( const FunctorType& rFunctor ) : maFunctor( rFunctor ), mnIndex( 0 ) {}
+ inline void operator()( const value_type& rxValue ) { if( rxValue.get() ) maFunctor( mnIndex, *rxValue ); ++mnIndex; }
};
template< typename FunctorType >
struct FindFunctor
{
- const FunctorType& mrFunctor;
- inline explicit FindFunctor( const FunctorType& rFunctor ) : mrFunctor( rFunctor ) {}
- inline bool operator()( const value_type& rxValue ) const { return rxValue.get() && mrFunctor( *rxValue ); }
+ FunctorType maFunctor;
+ inline explicit FindFunctor( const FunctorType& rFunctor ) : maFunctor( rFunctor ) {}
+ inline bool operator()( const value_type& rxValue ) { return rxValue.get() && maFunctor( *rxValue ); }
};
inline const value_type* getRef( sal_Int32 nIndex ) const
@@ -173,41 +234,53 @@ public:
return pxRef && pxRef->get();
}
- /** Returns a reference to the object accossiated to the passed key, or 0 on error. */
+ /** Returns a reference to the object accossiated to the passed key, or an
+ empty reference on error. */
inline mapped_type get( key_type nKey ) const
{
if( const mapped_type* pxRef = getRef( nKey ) ) return *pxRef;
return mapped_type();
}
- /** Calls the passed functor for every contained object. */
+ /** Calls the passed functor for every contained object, automatically
+ skips all elements that are empty references. */
template< typename FunctorType >
inline void forEach( const FunctorType& rFunctor ) const
{
::std::for_each( this->begin(), this->end(), ForEachFunctor< FunctorType >( rFunctor ) );
}
- /** Calls the passed member function of ObjType on every contained object. */
+ /** Calls the passed member function of ObjType on every contained object,
+ automatically skips all elements that are empty references. */
template< typename FuncType >
inline void forEachMem( FuncType pFunc ) const
{
forEach( ::boost::bind( pFunc, _1 ) );
}
- /** Calls the passed member function of ObjType on every contained object. */
+ /** Calls the passed member function of ObjType on every contained object,
+ automatically skips all elements that are empty references. */
template< typename FuncType, typename ParamType >
inline void forEachMem( FuncType pFunc, ParamType aParam ) const
{
forEach( ::boost::bind( pFunc, _1, aParam ) );
}
- /** Calls the passed member function of ObjType on every contained object. */
+ /** Calls the passed member function of ObjType on every contained object,
+ automatically skips all elements that are empty references. */
template< typename FuncType, typename ParamType1, typename ParamType2 >
inline void forEachMem( FuncType pFunc, ParamType1 aParam1, ParamType2 aParam2 ) const
{
forEach( ::boost::bind( pFunc, _1, aParam1, aParam2 ) );
}
+ /** Calls the passed member function of ObjType on every contained object,
+ automatically skips all elements that are empty references. */
+ template< typename FuncType, typename ParamType1, typename ParamType2, typename ParamType3 >
+ inline void forEachMem( FuncType pFunc, ParamType1 aParam1, ParamType2 aParam2, ParamType3 aParam3 ) const
+ {
+ forEach( ::boost::bind( pFunc, _1, aParam1, aParam2, aParam3 ) );
+ }
/** Calls the passed functor for every contained object. Passes the key as
first argument and the object reference as second argument to rFunctor. */
template< typename FunctorType >
@@ -240,21 +313,29 @@ public:
forEachWithKey( ::boost::bind( pFunc, _2, _1, aParam1, aParam2 ) );
}
+ /** Calls the passed member function of ObjType on every contained object.
+ Passes the object key as first argument to the member function. */
+ template< typename FuncType, typename ParamType1, typename ParamType2, typename ParamType3 >
+ inline void forEachMemWithKey( FuncType pFunc, ParamType1 aParam1, ParamType2 aParam2, ParamType3 aParam3 ) const
+ {
+ forEachWithKey( ::boost::bind( pFunc, _2, _1, aParam1, aParam2, aParam3 ) );
+ }
+
private:
template< typename FunctorType >
struct ForEachFunctor
{
- const FunctorType& mrFunctor;
- inline explicit ForEachFunctor( const FunctorType& rFunctor ) : mrFunctor( rFunctor ) {}
- inline void operator()( const value_type& rValue ) const { if( rValue.second.get() ) mrFunctor( *rValue.second ); }
+ FunctorType maFunctor;
+ inline explicit ForEachFunctor( const FunctorType& rFunctor ) : maFunctor( rFunctor ) {}
+ inline void operator()( const value_type& rValue ) { if( rValue.second.get() ) maFunctor( *rValue.second ); }
};
template< typename FunctorType >
struct ForEachFunctorWithKey
{
- const FunctorType& mrFunctor;
- inline explicit ForEachFunctorWithKey( const FunctorType& rFunctor ) : mrFunctor( rFunctor ) {}
- inline void operator()( const value_type& rValue ) const { if( rValue.second.get() ) mrFunctor( rValue.first, *rValue.second ); }
+ FunctorType maFunctor;
+ inline explicit ForEachFunctorWithKey( const FunctorType& rFunctor ) : maFunctor( rFunctor ) {}
+ inline void operator()( const value_type& rValue ) { if( rValue.second.get() ) maFunctor( rValue.first, *rValue.second ); }
};
inline const mapped_type* getRef( key_type nKey ) const
@@ -453,7 +534,7 @@ public:
/** Returns the reference to an existing element of the passed vector, or
the passed default value, if the passed index is out of bounds. */
template< typename Type >
- static Type& getVectorElement( const ::std::vector< Type >& rVector, sal_Int32 nIndex, Type& rDefault );
+ static Type& getVectorElement( ::std::vector< Type >& rVector, sal_Int32 nIndex, Type& rDefault );
/** Returns the pointer to an existing element of the passed map, or a null
pointer, if an element with the passed key does not exist. */
@@ -522,7 +603,7 @@ const Type& ContainerHelper::getVectorElement( const ::std::vector< Type >& rVec
}
template< typename Type >
-Type& ContainerHelper::getVectorElement( const ::std::vector< Type >& rVector, sal_Int32 nIndex, Type& rDefault )
+Type& ContainerHelper::getVectorElement( ::std::vector< Type >& rVector, sal_Int32 nIndex, Type& rDefault )
{
return ((0 <= nIndex) && (static_cast< size_t >( nIndex ) < rVector.size())) ? rVector[ static_cast< size_t >( nIndex ) ] : rDefault;
}
diff --git a/oox/inc/oox/helper/graphichelper.hxx b/oox/inc/oox/helper/graphichelper.hxx
index d6e01d0fff6b..2d0964b37715 100644
--- a/oox/inc/oox/helper/graphichelper.hxx
+++ b/oox/inc/oox/helper/graphichelper.hxx
@@ -29,24 +29,31 @@
#define OOX_HELPER_GRAPHICHELPER_HXX
#include <deque>
+#include <map>
#include <rtl/ustring.hxx>
+#include <com/sun/star/awt/DeviceInfo.hpp>
#include <com/sun/star/uno/Reference.hxx>
#include "oox/helper/binarystreambase.hxx"
namespace com { namespace sun { namespace star {
- namespace uno { class XComponentContext; }
- namespace lang { class XMultiServiceFactory; }
+ namespace awt { struct Point; }
+ namespace awt { struct Size; }
+ namespace awt { class XUnitConversion; }
namespace io { class XInputStream; }
+ namespace frame { class XFrame; }
namespace graphic { class XGraphic; }
namespace graphic { class XGraphicObject; }
namespace graphic { class XGraphicProvider; }
+ namespace lang { class XMultiServiceFactory; }
+ namespace uno { class XComponentContext; }
} } }
namespace oox {
// ============================================================================
-/** Provides helper functions for graphics and graphic objects handling.
+/** Provides helper functions for colors, device measurement conversion,
+ graphics, and graphic objects handling.
All createGraphicObject() and importGraphicObject() functions create
persistent graphic objects internally and store them in an internal
@@ -60,39 +67,84 @@ class GraphicHelper
{
public:
explicit GraphicHelper(
- const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& rxFactory );
- ~GraphicHelper();
+ const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& rxGlobalFactory,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& rxTargetFrame );
+ virtual ~GraphicHelper();
+
+ /** Returns a system color specified by the passed XML token identifier. */
+ sal_Int32 getSystemColor( sal_Int32 nToken, sal_Int32 nDefaultRgb = API_RGB_TRANSPARENT ) const;
+ /** Derived classes may implement to resolve a scheme color from the passed XML token identifier. */
+ virtual sal_Int32 getSchemeColor( sal_Int32 nToken ) const;
+ /** Derived classes may implement to resolve a palette index to an RGB color. */
+ virtual sal_Int32 getPaletteColor( sal_Int32 nPaletteIdx ) const;
+
+ /** Returns information about the output device. */
+ const ::com::sun::star::awt::DeviceInfo& getDeviceInfo() const;
+
+ /** Converts the passed value from horizontal screen pixels to 1/100 mm. */
+ sal_Int32 convertScreenPixelXToHmm( double fPixelX ) const;
+ /** Converts the passed value from vertical screen pixels to 1/100 mm. */
+ sal_Int32 convertScreenPixelYToHmm( double fPixelY ) const;
+ /** Converts the passed point from screen pixels to 1/100 mm. */
+ ::com::sun::star::awt::Point convertScreenPixelToHmm( const ::com::sun::star::awt::Point& rPixel ) const;
+ /** Converts the passed size from screen pixels to 1/100 mm. */
+ ::com::sun::star::awt::Size convertScreenPixelToHmm( const ::com::sun::star::awt::Size& rPixel ) const;
+
+ /** Converts the passed value from 1/100 mm to horizontal screen pixels. */
+ double convertHmmToScreenPixelX( sal_Int32 nHmmX ) const;
+ /** Converts the passed value from 1/100 mm to vertical screen pixels. */
+ double convertHmmToScreenPixelY( sal_Int32 nHmmY ) const;
+ /** Converts the passed point from 1/100 mm to screen pixels. */
+ ::com::sun::star::awt::Point convertHmmToScreenPixel( const ::com::sun::star::awt::Point& rHmm ) const;
+ /** Converts the passed size from 1/100 mm to screen pixels. */
+ ::com::sun::star::awt::Size convertHmmToScreenPixel( const ::com::sun::star::awt::Size& rHmm ) const;
+
+ /** Converts the passed point from AppFont units to 1/100 mm. */
+ ::com::sun::star::awt::Point convertAppFontToHmm( const ::com::sun::star::awt::Point& rAppFont ) const;
+ /** Converts the passed point from AppFont units to 1/100 mm. */
+ ::com::sun::star::awt::Size convertAppFontToHmm( const ::com::sun::star::awt::Size& rAppFont ) const;
+
+ /** Converts the passed point from 1/100 mm to AppFont units. */
+ ::com::sun::star::awt::Point convertHmmToAppFont( const ::com::sun::star::awt::Point& rHmm ) const;
+ /** Converts the passed size from 1/100 mm to AppFont units. */
+ ::com::sun::star::awt::Size convertHmmToAppFont( const ::com::sun::star::awt::Size& rHmm ) const;
/** Imports a graphic from the passed input stream. */
::com::sun::star::uno::Reference< ::com::sun::star::graphic::XGraphic >
importGraphic(
- const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >& rxInStrm );
+ const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >& rxInStrm ) const;
/** Imports a graphic from the passed binary memory block. */
::com::sun::star::uno::Reference< ::com::sun::star::graphic::XGraphic >
- importGraphic( const StreamDataSequence& rGraphicData );
+ importGraphic( const StreamDataSequence& rGraphicData ) const;
/** Creates a persistent graphic object from the passed graphic.
@return The URL of the created and internally cached graphic object. */
::rtl::OUString createGraphicObject(
- const ::com::sun::star::uno::Reference< ::com::sun::star::graphic::XGraphic >& rxGraphic );
+ const ::com::sun::star::uno::Reference< ::com::sun::star::graphic::XGraphic >& rxGraphic ) const;
/** Creates a persistent graphic object from the passed input stream.
@return The URL of the created and internally cached graphic object. */
::rtl::OUString importGraphicObject(
- const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >& rxInStrm );
+ const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >& rxInStrm ) const;
/** Creates a persistent graphic object from the passed binary memory block.
@return The URL of the created and internally cached graphic object. */
- ::rtl::OUString importGraphicObject( const StreamDataSequence& rGraphicData );
+ ::rtl::OUString importGraphicObject( const StreamDataSequence& rGraphicData ) const;
private:
+ typedef ::std::map< sal_Int32, sal_Int32 > SystemPalette;
typedef ::std::deque< ::com::sun::star::uno::Reference< ::com::sun::star::graphic::XGraphicObject > > GraphicObjectDeque;
::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > mxCompContext;
::com::sun::star::uno::Reference< ::com::sun::star::graphic::XGraphicProvider > mxGraphicProvider;
- GraphicObjectDeque maGraphicObjects;
- const ::rtl::OUString maGraphicObjScheme;
+ ::com::sun::star::uno::Reference< ::com::sun::star::awt::XUnitConversion > mxUnitConversion;
+ ::com::sun::star::awt::DeviceInfo maDeviceInfo; /// Current output device info.
+ SystemPalette maSystemPalette; /// Maps system colors (XML tokens) to RGB color values.
+ mutable GraphicObjectDeque maGraphicObjects; /// Caches all created graphic objects to keep them alive.
+ const ::rtl::OUString maGraphicObjScheme; /// The URL scheme name for graphic objects.
+ double mfPixelPerHmmX; /// Number of screen pixels per 1/100 mm in X direction.
+ double mfPixelPerHmmY; /// Number of screen pixels per 1/100 mm in Y direction.
};
// ============================================================================
diff --git a/oox/inc/oox/helper/helper.hxx b/oox/inc/oox/helper/helper.hxx
index 5884855bc50d..c68fe9ce83f8 100644
--- a/oox/inc/oox/helper/helper.hxx
+++ b/oox/inc/oox/helper/helper.hxx
@@ -69,7 +69,29 @@ namespace oox {
#define OUSTRING_TO_CSTR( str ) \
::rtl::OUStringToOString( str, RTL_TEXTENCODING_ASCII_US ).getStr()
-// ============================================================================
+// Common constants ===========================================================
+
+const sal_uInt8 WINDOWS_CHARSET_ANSI = 0;
+const sal_uInt8 WINDOWS_CHARSET_DEFAULT = 1;
+const sal_uInt8 WINDOWS_CHARSET_SYMBOL = 2;
+const sal_uInt8 WINDOWS_CHARSET_APPLE_ROMAN = 77;
+const sal_uInt8 WINDOWS_CHARSET_SHIFTJIS = 128;
+const sal_uInt8 WINDOWS_CHARSET_HANGEUL = 129;
+const sal_uInt8 WINDOWS_CHARSET_JOHAB = 130;
+const sal_uInt8 WINDOWS_CHARSET_GB2312 = 134;
+const sal_uInt8 WINDOWS_CHARSET_BIG5 = 136;
+const sal_uInt8 WINDOWS_CHARSET_GREEK = 161;
+const sal_uInt8 WINDOWS_CHARSET_TURKISH = 162;
+const sal_uInt8 WINDOWS_CHARSET_VIETNAMESE = 163;
+const sal_uInt8 WINDOWS_CHARSET_HEBREW = 177;
+const sal_uInt8 WINDOWS_CHARSET_ARABIC = 178;
+const sal_uInt8 WINDOWS_CHARSET_BALTIC = 186;
+const sal_uInt8 WINDOWS_CHARSET_RUSSIAN = 204;
+const sal_uInt8 WINDOWS_CHARSET_THAI = 222;
+const sal_uInt8 WINDOWS_CHARSET_EASTERN = 238;
+const sal_uInt8 WINDOWS_CHARSET_OEM = 255;
+
+// ----------------------------------------------------------------------------
const sal_Int32 API_RGB_TRANSPARENT = -1; /// Transparent color for API calls.
const sal_Int32 API_RGB_BLACK = 0x00000; /// Black color for API calls.
diff --git a/oox/inc/oox/helper/modelobjecthelper.hxx b/oox/inc/oox/helper/modelobjecthelper.hxx
index cead2ad74fb1..a9ef27e8cb98 100644
--- a/oox/inc/oox/helper/modelobjecthelper.hxx
+++ b/oox/inc/oox/helper/modelobjecthelper.hxx
@@ -53,7 +53,7 @@ class ModelObjectHelper
{
public:
explicit ModelObjectHelper(
- const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& rxFactory );
+ const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& rxModelFactory );
/** Returns true, if the model contains a line marker with the passed name. */
bool hasLineMarker( const ::rtl::OUString& rMarkerName ) const;
diff --git a/oox/inc/oox/helper/propertyset.hxx b/oox/inc/oox/helper/propertyset.hxx
index bdb81c6c3e83..a1769374d959 100644
--- a/oox/inc/oox/helper/propertyset.hxx
+++ b/oox/inc/oox/helper/propertyset.hxx
@@ -92,6 +92,10 @@ public:
template< typename Type >
inline bool getProperty( Type& orValue, sal_Int32 nPropId ) const;
+ /** Gets the specified property from the property set.
+ @return the property value, or an empty Any, if the property is missing. */
+ ::com::sun::star::uno::Any getAnyProperty( sal_Int32 nPropId ) const;
+
/** Gets the specified boolean property from the property set.
@return true = property contains true; false = property contains false or error occured. */
bool getBoolProperty( sal_Int32 nPropId ) const;
diff --git a/oox/inc/oox/helper/storagebase.hxx b/oox/inc/oox/helper/storagebase.hxx
index b23032fe2ac0..5a179e73cf75 100644
--- a/oox/inc/oox/helper/storagebase.hxx
+++ b/oox/inc/oox/helper/storagebase.hxx
@@ -28,12 +28,8 @@
#ifndef OOX_HELPER_STORAGEBASE_HXX
#define OOX_HELPER_STORAGEBASE_HXX
-#include <vector>
-#include <map>
-#include <boost/shared_ptr.hpp>
-#include <rtl/ustring.hxx>
-#include <com/sun/star/uno/Reference.hxx>
-#include <oox/dllapi.h>
+#include "oox/dllapi.h"
+#include "oox/helper/containerhelper.hxx"
namespace com { namespace sun { namespace star {
namespace embed { class XStorage; }
@@ -71,6 +67,13 @@ public:
/** Returns true, if the object represents a valid storage. */
bool isStorage() const;
+ /** Returns true, if the object represents the root storage. */
+ bool isRootStorage() const;
+
+ /** Returns true, if the storage operates in read-only mode (based on an
+ input stream). */
+ bool isReadOnly() const;
+
/** Returns the com.sun.star.embed.XStorage interface of the current storage. */
::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >
getXStorage() const;
@@ -81,7 +84,8 @@ public:
/** Returns the full path of this storage. */
::rtl::OUString getPath() const;
- /** Fills the passed vector with the names of all elements of this storage. */
+ /** Fills the passed vector with the names of all direct elements of this
+ storage. */
void getElementNames( ::std::vector< ::rtl::OUString >& orElementNames ) const;
/** Opens and returns the specified sub storage from the storage.
@@ -89,10 +93,11 @@ public:
@param rStorageName
The name of the embedded storage. The name may contain slashes to
open storages from embedded substorages.
- @param bCreate
- True = create missing sub storages (for export filters).
+ @param bCreateMissing
+ True = create missing sub storages (for export filters). Must be
+ false for storages based on input streams.
*/
- StorageRef openSubStorage( const ::rtl::OUString& rStorageName, bool bCreate );
+ StorageRef openSubStorage( const ::rtl::OUString& rStorageName, bool bCreateMissing );
/** Opens and returns the specified input stream from the storage.
@@ -116,13 +121,27 @@ public:
::com::sun::star::uno::Reference< ::com::sun::star::io::XOutputStream >
openOutputStream( const ::rtl::OUString& rStreamName );
- /** Commits the changes to the storage and all the substorages. (in case it is transacted object)
+ /** Copies the specified element from this storage to the passed
+ destination storage.
+
+ @param rElementName
+ The name of the embedded storage or stream. The name may contain
+ slashes to specify an element in an embedded substorage. In this
+ case, the element will be copied to the same substorage in the
+ destination storage.
*/
- void commit();
+ void copyToStorage( StorageBase& rDestStrg, const ::rtl::OUString& rElementName );
+
+ /** Copies all streams of this storage and of all substorages to the passed
+ destination. */
+ void copyStorageToStorage( StorageBase& rDestStrg );
+
+ /** Commits the changes to the storage and all substorages. */
+ void commit();
protected:
/** Special constructor for sub storage objects. */
- explicit StorageBase( const StorageBase& rParentStorage, const ::rtl::OUString& rStorageName );
+ explicit StorageBase( const StorageBase& rParentStorage, const ::rtl::OUString& rStorageName, bool bReadOnly );
private:
StorageBase( const StorageBase& );
@@ -149,19 +168,24 @@ private:
virtual ::com::sun::star::uno::Reference< ::com::sun::star::io::XOutputStream >
implOpenOutputStream( const ::rtl::OUString& rElementName ) = 0;
- StorageRef getSubStorage( const ::rtl::OUString& rElementName, bool bCreate );
+ /** Commits the current storage. */
+ virtual void implCommit() const = 0;
+
+ /** Helper that opens and caches the specified direct substorage. */
+ StorageRef getSubStorage( const ::rtl::OUString& rElementName, bool bCreateMissing );
private:
- typedef ::std::map< ::rtl::OUString, StorageRef > SubStorageMap;
- typedef ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > XInputStreamRef;
- typedef ::com::sun::star::uno::Reference< ::com::sun::star::io::XStream > XStreamRef;
+ typedef RefMap< ::rtl::OUString, StorageBase > SubStorageMap;
SubStorageMap maSubStorages; /// Map of direct sub storages.
- XInputStreamRef mxInStream; /// Cached base input stream (to keep it alive).
- XStreamRef mxOutStream; /// Cached base output stream (to keep it alive).
+ ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >
+ mxInStream; /// Cached base input stream (to keep it alive).
+ ::com::sun::star::uno::Reference< ::com::sun::star::io::XStream >
+ mxOutStream; /// Cached base output stream (to keep it alive).
+ ::rtl::OUString maParentPath; /// Full path of parent storage.
::rtl::OUString maStorageName; /// Name of this storage, if it is a substorage.
- const StorageBase* mpParentStorage; /// Parent storage if this is a sub storage.
bool mbBaseStreamAccess; /// True = access base streams with empty stream name.
+ bool mbReadOnly; /// True = storage opened read-only (based on input stream).
};
// ============================================================================
@@ -169,4 +193,3 @@ private:
} // namespace oox
#endif
-
diff --git a/oox/inc/oox/helper/textinputstream.hxx b/oox/inc/oox/helper/textinputstream.hxx
new file mode 100755
index 000000000000..1e74825ee713
--- /dev/null
+++ b/oox/inc/oox/helper/textinputstream.hxx
@@ -0,0 +1,58 @@
+/*************************************************************************
+ *
+ * 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.
+ *
+ ************************************************************************/
+
+#ifndef OOX_HELPER_RECORDINPUTSTREAM_HXX
+#define OOX_HELPER_RECORDINPUTSTREAM_HXX
+
+#include "oox/helper/binaryinputstream.hxx"
+
+namespace oox {
+
+// ============================================================================
+
+class TextInputStream
+{
+public:
+ explicit TextInputStream( BinaryInputStream& rInStrm, rtl_TextEncoding eTextEnc );
+
+ /** Returns true, if the wrapped input stream is in EOF state. */
+ bool isEof() const;
+ /** Reads a text line from the stream. */
+ ::rtl::OUString readLine();
+
+private:
+ BinaryInputStream& mrInStrm;
+ rtl_TextEncoding meTextEnc;
+ sal_Unicode mcLastEolChar;
+};
+
+// ============================================================================
+
+} // namespace oox
+
+#endif
+
diff --git a/oox/inc/oox/helper/zipstorage.hxx b/oox/inc/oox/helper/zipstorage.hxx
index b6eef63b47de..0c9a15c10077 100644
--- a/oox/inc/oox/helper/zipstorage.hxx
+++ b/oox/inc/oox/helper/zipstorage.hxx
@@ -69,7 +69,7 @@ private:
virtual void implGetElementNames( ::std::vector< ::rtl::OUString >& orElementNames ) const;
/** Opens and returns the specified sub storage from the storage. */
- virtual StorageRef implOpenSubStorage( const ::rtl::OUString& rElementName, bool bCreate );
+ virtual StorageRef implOpenSubStorage( const ::rtl::OUString& rElementName, bool bCreateMissing );
/** Opens and returns the specified input stream from the storage. */
virtual ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >
@@ -79,6 +79,9 @@ private:
virtual ::com::sun::star::uno::Reference< ::com::sun::star::io::XOutputStream >
implOpenOutputStream( const ::rtl::OUString& rElementName );
+ /** Commits the current storage. */
+ virtual void implCommit() const;
+
private:
typedef ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage > XStorageRef;
@@ -90,4 +93,3 @@ private:
} // namespace oox
#endif
-
diff --git a/oox/inc/oox/ole/axbinaryreader.hxx b/oox/inc/oox/ole/axbinaryreader.hxx
index 3db0bae7cee4..d036e958a446 100644..100755
--- a/oox/inc/oox/ole/axbinaryreader.hxx
+++ b/oox/inc/oox/ole/axbinaryreader.hxx
@@ -28,6 +28,7 @@
#ifndef OOX_OLE_AXBINARYREADER_HXX
#define OOX_OLE_AXBINARYREADER_HXX
+#include <utility>
#include "oox/helper/binaryinputstream.hxx"
#include "oox/helper/containerhelper.hxx"
@@ -36,15 +37,24 @@ namespace ole {
// ============================================================================
-/** A wrapper for an unseekable binary input stream. */
+/** A wrapper for a binary input stream that supports aligned read operations.
+
+ The implementation does not support seeking back the wrapped stream. All
+ seeking operations (tell, seek, align) are performed relative to the
+ position of the wrapped stream at construction time of this wrapper. It is
+ possible to construct this wrapper with an unseekable input stream without
+ loosing any functionality.
+ */
class AxAlignedInputStream : public BinaryInputStream
{
public:
explicit AxAlignedInputStream( BinaryInputStream& rInStrm );
- /** Return the current stream position (relative to position at construction time). */
+ /** Return the current relative stream position (relative to position of
+ the wrapped stream at construction time). */
virtual sal_Int64 tell() const;
- /** Seeks the stream to the passed position, if it is behind the current position. */
+ /** Seeks the stream to the passed relative position, if it is behind the
+ current position. */
virtual void seek( sal_Int64 nPos );
/** Reads nBytes bytes to the passed sequence.
@@ -56,7 +66,8 @@ public:
/** Seeks the stream forward by the passed number of bytes. */
virtual void skip( sal_Int32 nBytes );
- /** Aligns the stream to a multiple of the passed size. */
+ /** Aligns the stream to a multiple of the passed size (relative to the
+ position of the wrapped stream at construction time). */
void align( size_t nSize );
/** Aligns the stream according to the passed type and reads an atomar value. */
@@ -73,6 +84,50 @@ private:
// ============================================================================
+/** A pair of integer values as a property. */
+typedef ::std::pair< sal_Int32, sal_Int32 > AxPairData;
+
+// ============================================================================
+
+const sal_uInt32 AX_FONTDATA_BOLD = 0x00000001;
+const sal_uInt32 AX_FONTDATA_ITALIC = 0x00000002;
+const sal_uInt32 AX_FONTDATA_UNDERLINE = 0x00000004;
+const sal_uInt32 AX_FONTDATA_STRIKEOUT = 0x00000008;
+const sal_uInt32 AX_FONTDATA_DISABLED = 0x00002000;
+const sal_uInt32 AX_FONTDATA_AUTOCOLOR = 0x40000000;
+
+const sal_Int32 AX_FONTDATA_LEFT = 1;
+const sal_Int32 AX_FONTDATA_RIGHT = 2;
+const sal_Int32 AX_FONTDATA_CENTER = 3;
+
+/** All entries of a font property. */
+struct AxFontData
+{
+ ::rtl::OUString maFontName; /// Name of the used font.
+ sal_uInt32 mnFontEffects; /// Font effect flags.
+ sal_Int32 mnFontHeight; /// Height of the font (not really twips, see code).
+ sal_Int32 mnFontCharSet; /// Windows character set of the font.
+ sal_Int32 mnHorAlign; /// Horizontal text alignment.
+
+ explicit AxFontData();
+
+ /** Converts the internal representation of the font height to points. */
+ sal_Int16 getHeightPoints() const;
+ /** Converts the passed font height from points to the internal representation. */
+ void setHeightPoints( sal_Int16 nPoints );
+
+ /** Reads the font data settings from the passed input stream. */
+ bool importBinaryModel( BinaryInputStream& rInStrm );
+ /** Reads the font data settings from the passed input stream that contains
+ an OLE StdFont structure. */
+ bool importStdFont( BinaryInputStream& rInStrm );
+ /** Reads the font data settings from the passed input stream depending on
+ the GUID preceding the actual font data. */
+ bool importGuidAndFont( BinaryInputStream& rInStrm );
+};
+
+// ============================================================================
+
/** Import helper to read simple and complex ActiveX form control properties
from a binary input stream. */
class AxBinaryPropertyReader
@@ -90,10 +145,16 @@ public:
void readBoolProperty( bool& orbValue, bool bReverse = false );
/** Reads the next pair property from the stream, if the respective flag in
the property mask is set. */
- void readPairProperty( sal_Int32& ornValue1, sal_Int32& ornValue2 );
+ void readPairProperty( AxPairData& orPairData );
/** Reads the next string property from the stream, if the respective flag
in the property mask is set. */
void readStringProperty( ::rtl::OUString& orValue );
+ /** Reads the next GUID property from the stream, if the respective flag
+ in the property mask is set. The GUID will be enclosed in braces. */
+ void readGuidProperty( ::rtl::OUString& orGuid );
+ /** Reads the next font property from the stream, if the respective flag in
+ the property mask is set. */
+ void readFontProperty( AxFontData& orFontData );
/** Reads the next picture property from the stream, if the respective flag
in the property mask is set. */
void readPictureProperty( StreamDataSequence& orPicData );
@@ -105,9 +166,18 @@ public:
/** Skips the next boolean property value in the stream, if the respective
flag in the property mask is set. */
inline void skipBoolProperty() { startNextProperty(); }
+ /** Skips the next pair property in the stream, if the respective flag in
+ the property mask is set. */
+ void skipPairProperty() { readPairProperty( maDummyPairData ); }
/** Skips the next string property in the stream, if the respective flag in
the property mask is set. */
inline void skipStringProperty() { readStringProperty( maDummyString ); }
+ /** Skips the next GUID property in the stream, if the respective flag in
+ the property mask is set. */
+ inline void skipGuidProperty() { readGuidProperty( maDummyString ); }
+ /** Skips the next font property in the stream, if the respective flag in
+ the property mask is set. */
+ inline void skipFontProperty() { readFontProperty( maDummyFontData ); }
/** Skips the next picture property in the stream, if the respective flag
in the property mask is set. */
inline void skipPictureProperty() { readPictureProperty( maDummyPicData ); }
@@ -133,11 +203,10 @@ private:
/** Complex property for a 32-bit value pair, e.g. point or size. */
struct PairProperty : public ComplexProperty
{
- sal_Int32& mrnValue1;
- sal_Int32& mrnValue2;
+ AxPairData& mrPairData;
- inline explicit PairProperty( sal_Int32& rnValue1, sal_Int32& rnValue2 ) :
- mrnValue1( rnValue1 ), mrnValue2( rnValue2 ) {}
+ inline explicit PairProperty( AxPairData& rPairData ) :
+ mrPairData( rPairData ) {}
virtual bool readProperty( AxAlignedInputStream& rInStrm );
};
@@ -152,6 +221,26 @@ private:
virtual bool readProperty( AxAlignedInputStream& rInStrm );
};
+ /** Complex property for a GUID value. */
+ struct GuidProperty : public ComplexProperty
+ {
+ ::rtl::OUString& mrGuid;
+
+ inline explicit GuidProperty( ::rtl::OUString& rGuid ) :
+ mrGuid( rGuid ) {}
+ virtual bool readProperty( AxAlignedInputStream& rInStrm );
+ };
+
+ /** Stream property for a font structure. */
+ struct FontProperty : public ComplexProperty
+ {
+ AxFontData& mrFontData;
+
+ inline explicit FontProperty( AxFontData& rFontData ) :
+ mrFontData( rFontData ) {}
+ virtual bool readProperty( AxAlignedInputStream& rInStrm );
+ };
+
/** Stream property for a picture or mouse icon. */
struct PictureProperty : public ComplexProperty
{
@@ -168,6 +257,8 @@ private:
AxAlignedInputStream maInStrm; /// The input stream to read from.
ComplexPropVector maLargeProps; /// Stores info for all used large properties.
ComplexPropVector maStreamProps; /// Stores info for all used stream data properties.
+ AxPairData maDummyPairData; /// Dummy pair for unsupported properties.
+ AxFontData maDummyFontData; /// Dummy font for unsupported properties.
StreamDataSequence maDummyPicData; /// Dummy picture for unsupported properties.
::rtl::OUString maDummyString; /// Dummy string for unsupported properties.
sal_Int64 mnPropFlags; /// Flags specifying existing properties.
diff --git a/oox/inc/oox/ole/axcontrol.hxx b/oox/inc/oox/ole/axcontrol.hxx
index b5a5741d134d..7c533334cc49 100644
--- a/oox/inc/oox/ole/axcontrol.hxx
+++ b/oox/inc/oox/ole/axcontrol.hxx
@@ -28,82 +28,389 @@
#ifndef OOX_OLE_AXCONTROL_HXX
#define OOX_OLE_AXCONTROL_HXX
-#include <memory>
+#include <boost/shared_ptr.hpp>
#include "oox/helper/binarystreambase.hxx"
+#include "oox/ole/axbinaryreader.hxx"
+#include "oox/ole/olehelper.hxx"
namespace com { namespace sun { namespace star {
namespace awt { class XControlModel; }
+ namespace container { class XIndexContainer; }
+ namespace drawing { class XDrawPage; }
+ namespace form { class XFormsSupplier; }
+ namespace lang { class XMultiServiceFactory; }
} } }
namespace oox {
class BinaryInputStream;
+ class GraphicHelper;
class PropertyMap;
}
namespace oox {
namespace ole {
-class AxControlHelper;
+// ============================================================================
+
+const sal_Char* const COMCTL_GUID_SCROLLBAR_60 = "{FE38753A-44A3-11D1-B5B7-0000C09000C4}";
+const sal_Char* const COMCTL_GUID_PROGRESSBAR_50 = "{0713E8D2-850A-101B-AFC0-4210102A8DA7}";
+const sal_Char* const COMCTL_GUID_PROGRESSBAR_60 = "{35053A22-8589-11D1-B16A-00C0F0283628}";
+
+// ----------------------------------------------------------------------------
+
+const sal_Char* const AX_GUID_COMMANDBUTTON = "{D7053240-CE69-11CD-A777-00DD01143C57}";
+const sal_Char* const AX_GUID_LABEL = "{978C9E23-D4B0-11CE-BF2D-00AA003F40D0}";
+const sal_Char* const AX_GUID_IMAGE = "{4C599241-6926-101B-9992-00000B65C6F9}";
+const sal_Char* const AX_GUID_TOGGLEBUTTON = "{8BD21D60-EC42-11CE-9E0D-00AA006002F3}";
+const sal_Char* const AX_GUID_CHECKBOX = "{8BD21D40-EC42-11CE-9E0D-00AA006002F3}";
+const sal_Char* const AX_GUID_OPTIONBUTTON = "{8BD21D50-EC42-11CE-9E0D-00AA006002F3}";
+const sal_Char* const AX_GUID_TEXTBOX = "{8BD21D10-EC42-11CE-9E0D-00AA006002F3}";
+const sal_Char* const AX_GUID_LISTBOX = "{8BD21D20-EC42-11CE-9E0D-00AA006002F3}";
+const sal_Char* const AX_GUID_COMBOBOX = "{8BD21D30-EC42-11CE-9E0D-00AA006002F3}";
+const sal_Char* const AX_GUID_SPINBUTTON = "{79176FB0-B7F2-11CE-97EF-00AA006D2776}";
+const sal_Char* const AX_GUID_SCROLLBAR = "{DFD181E0-5E2F-11CE-A449-00AA004A803D}";
+const sal_Char* const AX_GUID_FRAME = "{6E182020-F460-11CE-9BCD-00AA00608E01}";
+
+const sal_uInt32 AX_SYSCOLOR_WINDOWBACK = 0x80000005;
+const sal_uInt32 AX_SYSCOLOR_WINDOWFRAME = 0x80000006;
+const sal_uInt32 AX_SYSCOLOR_WINDOWTEXT = 0x80000008;
+const sal_uInt32 AX_SYSCOLOR_BUTTONFACE = 0x8000000F;
+const sal_uInt32 AX_SYSCOLOR_BUTTONTEXT = 0x80000012;
+
+const sal_Int32 AX_BORDERSTYLE_NONE = 0;
+const sal_Int32 AX_BORDERSTYLE_SINGLE = 1;
+
+const sal_Int32 AX_SPECIALEFFECT_FLAT = 0;
+const sal_Int32 AX_SPECIALEFFECT_RAISED = 1;
+const sal_Int32 AX_SPECIALEFFECT_SUNKEN = 2;
+const sal_Int32 AX_SPECIALEFFECT_ETCHED = 3;
+const sal_Int32 AX_SPECIALEFFECT_BUMPED = 6;
+
+const sal_Int32 AX_PICSIZE_CLIP = 0;
+const sal_Int32 AX_PICSIZE_STRETCH = 1;
+const sal_Int32 AX_PICSIZE_ZOOM = 3;
+
+const sal_Int32 AX_PICALIGN_TOPLEFT = 0;
+const sal_Int32 AX_PICALIGN_TOPRIGHT = 1;
+const sal_Int32 AX_PICALIGN_CENTER = 2;
+const sal_Int32 AX_PICALIGN_BOTTOMLEFT = 3;
+const sal_Int32 AX_PICALIGN_BOTTOMRIGHT = 4;
+
+// ----------------------------------------------------------------------------
+
+/** Enumerates all UNO API control types supported by these filters. */
+enum ApiControlType
+{
+ API_CONTROL_BUTTON,
+ API_CONTROL_FIXEDTEXT,
+ API_CONTROL_IMAGE,
+ API_CONTROL_CHECKBOX,
+ API_CONTROL_RADIOBUTTON,
+ API_CONTROL_EDIT,
+ API_CONTROL_LISTBOX,
+ API_CONTROL_COMBOBOX,
+ API_CONTROL_SPINBUTTON,
+ API_CONTROL_SCROLLBAR,
+ API_CONTROL_PROGRESSBAR,
+ API_CONTROL_GROUPBOX,
+ API_CONTROL_DIALOG
+};
+
+// ============================================================================
+
+/** Specifies how a form control supports transparent background. */
+enum ApiTransparencyMode
+{
+ API_TRANSPARENCY_NOTSUPPORTED, /// Control does not support transparency.
+ API_TRANSPARENCY_VOID, /// Transparency is enabled by missing fill color.
+ API_TRANSPARENCY_PAINTTRANSPARENT /// Transparency is enabled by the 'PaintTransparent' property.
+};
+
+/** Specifies how a form control supports the DefaultState property. */
+enum ApiDefaultStateMode
+{
+ API_DEFAULTSTATE_BOOLEAN, /// Control does not support tri-state, state is given as boolean.
+ API_DEFAULTSTATE_SHORT, /// Control does not support tri-state, state is given as short.
+ API_DEFAULTSTATE_TRISTATE /// Control supports tri-state, state is given as short.
+};
+
+// ----------------------------------------------------------------------------
+
+/** A base class with useful helper functions for something that is able to
+ convert ActiveX and ComCtl form controls.
+ */
+class ControlConverter
+{
+public:
+ explicit ControlConverter(
+ const GraphicHelper& rGraphicHelper,
+ bool bDefaultColorBgr = true );
+ virtual ~ControlConverter();
+
+ // Generic conversion -----------------------------------------------------
+
+ /** Converts the passed position in 1/100 mm to UNO properties. */
+ void convertPosition(
+ PropertyMap& rPropMap,
+ const AxPairData& rPos ) const;
+
+ /** Converts the passed size in 1/100 mm to UNO properties. */
+ void convertSize(
+ PropertyMap& rPropMap,
+ const AxPairData& rSize ) const;
+
+ /** Converts the passed encoded OLE color to UNO properties. */
+ void convertColor(
+ PropertyMap& rPropMap,
+ sal_Int32 nPropId,
+ sal_uInt32 nOleColor ) const;
+
+ /** Converts the passed StdPic picture stream to UNO properties. */
+ void convertPicture(
+ PropertyMap& rPropMap,
+ const StreamDataSequence& rPicData ) const;
+
+ /** Converts the control orientation to UNO properties. */
+ void convertOrientation(
+ PropertyMap& rPropMap,
+ bool bHorizontal ) const;
+
+ /** Converts common scrollbar settings to UNO properties. */
+ void convertScrollBar(
+ PropertyMap& rPropMap,
+ sal_Int32 nMin, sal_Int32 nMax, sal_Int32 nPosition,
+ sal_Int32 nSmallChange, sal_Int32 nLargeChange, bool bAwtModel ) const;
+
+ // ActiveX (Forms 2.0) specific conversion --------------------------------
+
+ /** Converts the Forms 2.0 background formatting to UNO properties. */
+ void convertAxBackground(
+ PropertyMap& rPropMap,
+ sal_uInt32 nBackColor,
+ sal_uInt32 nFlags,
+ ApiTransparencyMode eTranspMode ) const;
+
+ /** Converts the Forms 2.0 border formatting to UNO properties. */
+ void convertAxBorder(
+ PropertyMap& rPropMap,
+ sal_uInt32 nBorderColor,
+ sal_Int32 nBorderStyle,
+ sal_Int32 nSpecialEffect ) const;
+
+ /** Converts the Forms 2.0 special effect to UNO properties. */
+ void convertAxVisualEffect(
+ PropertyMap& rPropMap,
+ sal_Int32 nSpecialEffect ) const;
+
+ /** Converts the passed picture stream and Forms 2.0 position to UNO
+ properties. */
+ void convertAxPicture(
+ PropertyMap& rPropMap,
+ const StreamDataSequence& rPicData,
+ sal_uInt32 nPicPos ) const;
+
+ /** Converts the passed picture stream and Forms 2.0 position to UNO
+ properties. */
+ void convertAxPicture(
+ PropertyMap& rPropMap,
+ const StreamDataSequence& rPicData,
+ sal_Int32 nPicSizeMode,
+ sal_Int32 nPicAlign,
+ bool bPicTiling ) const;
+
+ /** Converts the Forms 2.0 value for checked/unchecked/dontknow to UNO
+ properties. */
+ void convertAxState(
+ PropertyMap& rPropMap,
+ const ::rtl::OUString& rValue,
+ sal_Int32 nMultiSelect,
+ ApiDefaultStateMode eDefStateMode,
+ bool bAwtModel ) const;
+
+ /** Converts the Forms 2.0 control orientation to UNO properties. */
+ void convertAxOrientation(
+ PropertyMap& rPropMap,
+ const AxPairData& rSize,
+ sal_Int32 nOrientation ) const;
+
+private:
+ const GraphicHelper& mrGraphicHelper;
+ bool mbDefaultColorBgr;
+};
// ============================================================================
-/** Base class for all models of ActiveX form controls. */
-class AxControlModelBase
+/** Base class for all models of form controls. */
+class ControlModelBase
{
public:
- virtual ~AxControlModelBase();
+ explicit ControlModelBase();
+ virtual ~ControlModelBase();
+
+ /** Sets this control model to AWT model mode. */
+ inline void setAwtModelMode() { mbAwtModel = true; }
+ /** Sets this control model to form component mode. */
+ inline void setFormComponentMode() { mbAwtModel = false; }
+
+ /** Returns the UNO service name used to construct the AWT control model,
+ or the control form component. */
+ ::rtl::OUString getServiceName() const;
/** Derived classes set specific OOXML properties at the model structure. */
virtual void importProperty( sal_Int32 nPropId, const ::rtl::OUString& rValue );
/** Derived classes set binary data (picture, mouse icon) at the model structure. */
virtual void importPictureData( sal_Int32 nPropId, BinaryInputStream& rInStrm );
/** Derived classes import a form control model from the passed input stream. */
- virtual void importBinaryModel( BinaryInputStream& rInStrm );
+ virtual bool importBinaryModel( BinaryInputStream& rInStrm ) = 0;
- /** Derived classes return the UNO service name used to construct the control component. */
- virtual ::rtl::OUString getServiceName() const = 0;
+ /** Derived classes return the UNO control type enum value. */
+ virtual ApiControlType getControlType() const = 0;
/** Derived classes convert all control properties. */
- virtual void convertProperties( AxControlHelper& rHelper, PropertyMap& rPropMap ) const;
+ virtual void convertProperties( PropertyMap& rPropMap, const ControlConverter& rConv ) const;
+
+ /** Converts the control size to UNO properties. */
+ void convertSize( PropertyMap& rPropMap, const ControlConverter& rConv ) const;
protected:
- explicit AxControlModelBase();
+ AxPairData maSize; /// Size of the control in 1/100 mm.
+ bool mbAwtModel; /// True = AWT control model, false = form component.
+};
+
+typedef ::boost::shared_ptr< ControlModelBase > ControlModelRef;
+
+// ============================================================================
+
+/** Base class for all models of ComCtl form controls. */
+class ComCtlModelBase : public ControlModelBase
+{
+public:
+ explicit ComCtlModelBase(
+ sal_uInt32 nDataPartId5, sal_uInt32 nDataPartId6, sal_uInt16 nVersion,
+ bool bCommonPart, bool bComplexPart );
+
+ virtual bool importBinaryModel( BinaryInputStream& rInStrm );
+ virtual void convertProperties( PropertyMap& rPropMap, const ControlConverter& rConv ) const;
+
+protected:
+ virtual void importControlData( BinaryInputStream& rInStrm ) = 0;
+ virtual void importCommonExtraData( BinaryInputStream& rInStrm );
+ virtual void importCommonTrailingData( BinaryInputStream& rInStrm );
+
+private:
+ /** Returns the data part identifier according to the model version. */
+ sal_uInt32 getDataPartId() const;
+
+ bool readPartHeader( BinaryInputStream& rInStrm,
+ sal_uInt32 nExpPartId,
+ sal_uInt16 nExpMajor = SAL_MAX_UINT16,
+ sal_uInt16 nExpMinor = SAL_MAX_UINT16 );
+
+ bool importSizePart( BinaryInputStream& rInStrm );
+ bool importCommonPart( BinaryInputStream& rInStrm, sal_uInt32 nPartSize );
+ bool importComplexPart( BinaryInputStream& rInStrm );
+
+protected:
+ StdFontInfo maFontData; /// Font formatting.
+ StreamDataSequence maMouseIcon; /// Binary picture stream for mouse icon.
+ sal_uInt32 mnFlags; /// Common flags for ComCtl controls.
+ const sal_uInt16 mnVersion; /// Current version of the ComCtl control model.
+
+private:
+ sal_uInt32 mnDataPartId5; /// Identifier for version 5.0 control data.
+ sal_uInt32 mnDataPartId6; /// Identifier for version 6.0 control data.
+ bool mbCommonPart; /// True = the COMCTL_COMMONDATA part exists.
+ bool mbComplexPart; /// True = the COMCTL_COMPLEXDATA part exists.
+};
+
+// ============================================================================
+
+/** Model for a ComCtl scroll bar. */
+class ComCtlScrollBarModel : public ComCtlModelBase
+{
+public:
+ explicit ComCtlScrollBarModel( sal_uInt16 nVersion );
+
+ virtual ApiControlType getControlType() const;
+ virtual void convertProperties( PropertyMap& rPropMap, const ControlConverter& rConv ) const;
+
+protected:
+ virtual void importControlData( BinaryInputStream& rInStrm );
+
+private:
+ sal_uInt32 mnScrollBarFlags; /// Special flags for scroll bar model.
+ sal_Int32 mnLargeChange; /// Increment step size (thumb).
+ sal_Int32 mnSmallChange; /// Increment step size (buttons).
+ sal_Int32 mnMin; /// Minimum of the value range.
+ sal_Int32 mnMax; /// Maximum of the value range.
+ sal_Int32 mnPosition; /// Value of the spin button.
+};
+
+// ============================================================================
+
+/** Model for a ComCtl progress bar. */
+class ComCtlProgressBarModel : public ComCtlModelBase
+{
+public:
+ explicit ComCtlProgressBarModel( sal_uInt16 nVersion );
+
+ virtual ApiControlType getControlType() const;
+ virtual void convertProperties( PropertyMap& rPropMap, const ControlConverter& rConv ) const;
protected:
- sal_Int32 mnWidth;
- sal_Int32 mnHeight;
+ virtual void importControlData( BinaryInputStream& rInStrm );
+
+private:
+ float mfMin; /// Minimum of the value range.
+ float mfMax; /// Maximum of the value range.
+ sal_uInt16 mnVertical; /// 0 = horizontal, 1 = vertical.
+ sal_uInt16 mnSmooth; /// 0 = progress blocks, 1 = pixel resolution.
};
// ============================================================================
+/** Base class for all models of Form 2.0 form controls. */
+class AxControlModelBase : public ControlModelBase
+{
+public:
+ explicit AxControlModelBase();
+
+ virtual void importProperty( sal_Int32 nPropId, const ::rtl::OUString& rValue );
+};
+
+// ============================================================================
+
+/** Base class for Forms 2.0 controls supporting text formatting. */
class AxFontDataModel : public AxControlModelBase
{
public:
- explicit AxFontDataModel();
+ explicit AxFontDataModel( bool bSupportsAlign = true );
virtual void importProperty( sal_Int32 nPropId, const ::rtl::OUString& rValue );
- virtual void importBinaryModel( BinaryInputStream& rInStrm );
- virtual void convertProperties( AxControlHelper& rHelper, PropertyMap& rPropMap ) const;
+ virtual bool importBinaryModel( BinaryInputStream& rInStrm );
+ virtual void convertProperties( PropertyMap& rPropMap, const ControlConverter& rConv ) const;
-private:
- ::rtl::OUString maFontName; /// Name of the used font.
- sal_uInt32 mnFontEffects; /// Font effect flags.
- sal_Int32 mnFontHeight; /// Height of the font (not really twips, see code).
- sal_Int32 mnFontCharSet; /// Windows character set of the font.
- sal_Int32 mnHorAlign; /// Horizontal text alignment.
+ /** Returns the font height in points. */
+ inline sal_Int16 getFontHeight() const { return maFontData.getHeightPoints(); }
+
+protected:
+ AxFontData maFontData; /// The font settings.
+ bool mbSupportsAlign; /// True = UNO model supports Align property.
};
// ============================================================================
+/** Model for a Forms 2.0 command button. */
class AxCommandButtonModel : public AxFontDataModel
{
public:
explicit AxCommandButtonModel();
- virtual ::rtl::OUString getServiceName() const;
virtual void importProperty( sal_Int32 nPropId, const ::rtl::OUString& rValue );
virtual void importPictureData( sal_Int32 nPropId, BinaryInputStream& rInStrm );
- virtual void importBinaryModel( BinaryInputStream& rInStrm );
- virtual void convertProperties( AxControlHelper& rHelper, PropertyMap& rPropMap ) const;
+ virtual bool importBinaryModel( BinaryInputStream& rInStrm );
+
+ virtual ApiControlType getControlType() const;
+ virtual void convertProperties( PropertyMap& rPropMap, const ControlConverter& rConv ) const;
private:
StreamDataSequence maPictureData; /// Binary picture stream.
@@ -117,15 +424,17 @@ private:
// ============================================================================
+/** Model for a Forms 2.0 label. */
class AxLabelModel : public AxFontDataModel
{
public:
explicit AxLabelModel();
- virtual ::rtl::OUString getServiceName() const;
virtual void importProperty( sal_Int32 nPropId, const ::rtl::OUString& rValue );
- virtual void importBinaryModel( BinaryInputStream& rInStrm );
- virtual void convertProperties( AxControlHelper& rHelper, PropertyMap& rPropMap ) const;
+ virtual bool importBinaryModel( BinaryInputStream& rInStrm );
+
+ virtual ApiControlType getControlType() const;
+ virtual void convertProperties( PropertyMap& rPropMap, const ControlConverter& rConv ) const;
private:
::rtl::OUString maCaption; /// Visible caption of the button.
@@ -139,16 +448,18 @@ private:
// ============================================================================
+/** Model for a Forms 2.0 image. */
class AxImageModel : public AxControlModelBase
{
public:
explicit AxImageModel();
- virtual ::rtl::OUString getServiceName() const;
virtual void importProperty( sal_Int32 nPropId, const ::rtl::OUString& rValue );
virtual void importPictureData( sal_Int32 nPropId, BinaryInputStream& rInStrm );
- virtual void importBinaryModel( BinaryInputStream& rInStrm );
- virtual void convertProperties( AxControlHelper& rHelper, PropertyMap& rPropMap ) const;
+ virtual bool importBinaryModel( BinaryInputStream& rInStrm );
+
+ virtual ApiControlType getControlType() const;
+ virtual void convertProperties( PropertyMap& rPropMap, const ControlConverter& rConv ) const;
private:
StreamDataSequence maPictureData; /// Binary picture stream.
@@ -164,15 +475,16 @@ private:
// ============================================================================
-class AxMorphDataModel : public AxFontDataModel
+/** Base class for a Forms 2.0 morph data control. */
+class AxMorphDataModelBase : public AxFontDataModel
{
public:
- explicit AxMorphDataModel();
+ explicit AxMorphDataModelBase();
virtual void importProperty( sal_Int32 nPropId, const ::rtl::OUString& rValue );
virtual void importPictureData( sal_Int32 nPropId, BinaryInputStream& rInStrm );
- virtual void importBinaryModel( BinaryInputStream& rInStrm );
- virtual void convertProperties( AxControlHelper& rHelper, PropertyMap& rPropMap ) const;
+ virtual bool importBinaryModel( BinaryInputStream& rInStrm );
+ virtual void convertProperties( PropertyMap& rPropMap, const ControlConverter& rConv ) const;
protected:
StreamDataSequence maPictureData; /// Binary picture stream.
@@ -198,81 +510,92 @@ protected:
// ============================================================================
-class AxToggleButtonModel : public AxMorphDataModel
+/** Model for a Forms 2.0 toggle button. */
+class AxToggleButtonModel : public AxMorphDataModelBase
{
public:
explicit AxToggleButtonModel();
- virtual ::rtl::OUString getServiceName() const;
- virtual void convertProperties( AxControlHelper& rHelper, PropertyMap& rPropMap ) const;
+ virtual ApiControlType getControlType() const;
+ virtual void convertProperties( PropertyMap& rPropMap, const ControlConverter& rConv ) const;
};
// ============================================================================
-class AxCheckBoxModel : public AxMorphDataModel
+/** Model for a Forms 2.0 check box. */
+class AxCheckBoxModel : public AxMorphDataModelBase
{
public:
explicit AxCheckBoxModel();
- virtual ::rtl::OUString getServiceName() const;
- virtual void convertProperties( AxControlHelper& rHelper, PropertyMap& rPropMap ) const;
+ virtual ApiControlType getControlType() const;
+ virtual void convertProperties( PropertyMap& rPropMap, const ControlConverter& rConv ) const;
};
// ============================================================================
-class AxOptionButtonModel : public AxMorphDataModel
+/** Model for a Forms 2.0 option button. */
+class AxOptionButtonModel : public AxMorphDataModelBase
{
public:
explicit AxOptionButtonModel();
- virtual ::rtl::OUString getServiceName() const;
- virtual void convertProperties( AxControlHelper& rHelper, PropertyMap& rPropMap ) const;
+ /** Returns the group name used to goup several option buttons gogether. */
+ inline const ::rtl::OUString& getGroupName() const { return maGroupName; }
+
+ virtual ApiControlType getControlType() const;
+ virtual void convertProperties( PropertyMap& rPropMap, const ControlConverter& rConv ) const;
};
// ============================================================================
-class AxTextBoxModel : public AxMorphDataModel
+/** Model for a Forms 2.0 text box. */
+class AxTextBoxModel : public AxMorphDataModelBase
{
public:
explicit AxTextBoxModel();
- virtual ::rtl::OUString getServiceName() const;
- virtual void convertProperties( AxControlHelper& rHelper, PropertyMap& rPropMap ) const;
+ virtual ApiControlType getControlType() const;
+ virtual void convertProperties( PropertyMap& rPropMap, const ControlConverter& rConv ) const;
};
// ============================================================================
-class AxListBoxModel : public AxMorphDataModel
+/** Model for a Forms 2.0 list box. */
+class AxListBoxModel : public AxMorphDataModelBase
{
public:
explicit AxListBoxModel();
- virtual ::rtl::OUString getServiceName() const;
- virtual void convertProperties( AxControlHelper& rHelper, PropertyMap& rPropMap ) const;
+ virtual ApiControlType getControlType() const;
+ virtual void convertProperties( PropertyMap& rPropMap, const ControlConverter& rConv ) const;
};
// ============================================================================
-class AxComboBoxModel : public AxMorphDataModel
+/** Model for a Forms 2.0 combo box. */
+class AxComboBoxModel : public AxMorphDataModelBase
{
public:
explicit AxComboBoxModel();
- virtual ::rtl::OUString getServiceName() const;
- virtual void convertProperties( AxControlHelper& rHelper, PropertyMap& rPropMap ) const;
+ virtual ApiControlType getControlType() const;
+ virtual void convertProperties( PropertyMap& rPropMap, const ControlConverter& rConv ) const;
};
// ============================================================================
+/** Model for a Forms 2.0 spin button. */
class AxSpinButtonModel : public AxControlModelBase
{
public:
explicit AxSpinButtonModel();
- virtual ::rtl::OUString getServiceName() const;
virtual void importProperty( sal_Int32 nPropId, const ::rtl::OUString& rValue );
- virtual void importBinaryModel( BinaryInputStream& rInStrm );
- virtual void convertProperties( AxControlHelper& rHelper, PropertyMap& rPropMap ) const;
+ virtual bool importBinaryModel( BinaryInputStream& rInStrm );
+
+ virtual ApiControlType getControlType() const;
+ virtual void convertProperties( PropertyMap& rPropMap, const ControlConverter& rConv ) const;
private:
sal_uInt32 mnArrowColor; /// Button arrow color.
@@ -288,15 +611,17 @@ private:
// ============================================================================
+/** Model for a Forms 2.0 scroll bar. */
class AxScrollBarModel : public AxControlModelBase
{
public:
explicit AxScrollBarModel();
- virtual ::rtl::OUString getServiceName() const;
virtual void importProperty( sal_Int32 nPropId, const ::rtl::OUString& rValue );
- virtual void importBinaryModel( BinaryInputStream& rInStrm );
- virtual void convertProperties( AxControlHelper& rHelper, PropertyMap& rPropMap ) const;
+ virtual bool importBinaryModel( BinaryInputStream& rInStrm );
+
+ virtual ApiControlType getControlType() const;
+ virtual void convertProperties( PropertyMap& rPropMap, const ControlConverter& rConv ) const;
private:
sal_uInt32 mnArrowColor; /// Button arrow color.
@@ -314,39 +639,130 @@ private:
// ============================================================================
-/** Container for all ActiveX form control model implementations. */
-class AxControl
+typedef ::std::vector< ::rtl::OUString > AxClassTable;
+
+/** Base class for ActiveX container controls. */
+class AxContainerModelBase : public AxFontDataModel
{
public:
- explicit AxControl( const ::rtl::OUString& rName );
- ~AxControl();
+ explicit AxContainerModelBase();
+
+ /** Allows to set single properties specified by XML token identifier. */
+ virtual void importProperty( sal_Int32 nPropId, const ::rtl::OUString& rValue );
+ /** Reads the leading structure in the 'f' stream containing the model for
+ this control. */
+ virtual bool importBinaryModel( BinaryInputStream& rInStrm );
+ /** Reads the class table structure for embedded controls following the own
+ model from the 'f' stream. */
+ bool importClassTable( BinaryInputStream& rInStrm, AxClassTable& orClassTable );
+
+protected:
+ StreamDataSequence maPictureData; /// Binary picture stream.
+ ::rtl::OUString maCaption; /// Visible caption of the form.
+ AxPairData maLogicalSize; /// Logical form size (scroll area).
+ AxPairData maScrollPos; /// Scroll position.
+ sal_uInt32 mnBackColor; /// Fill color.
+ sal_uInt32 mnTextColor; /// Text color.
+ sal_uInt32 mnFlags; /// Various flags.
+ sal_uInt32 mnBorderColor; /// Flat border color.
+ sal_Int32 mnBorderStyle; /// Flat border style.
+ sal_Int32 mnScrollBars; /// Horizontal/vertical scroll bar.
+ sal_Int32 mnCycleType; /// Cycle in all forms or in this form.
+ sal_Int32 mnSpecialEffect; /// 3D border effect.
+ sal_Int32 mnPicAlign; /// Anchor position of the picture.
+ sal_Int32 mnPicSizeMode; /// Clip, stretch, zoom.
+ bool mbPicTiling; /// True = picture is repeated.
+};
+
+typedef ::boost::shared_ptr< AxContainerModelBase > AxContainerModelRef;
+
+// ============================================================================
+
+/** Model for a Forms 2.0 frame (group box). */
+class AxFrameModel : public AxContainerModelBase
+{
+public:
+ explicit AxFrameModel();
+
+ virtual ApiControlType getControlType() const;
+ virtual void convertProperties( PropertyMap& rPropMap, const ControlConverter& rConv ) const;
+};
+
+// ============================================================================
+
+/** Model for a Forms 2.0 user form. */
+class AxUserFormModel : public AxContainerModelBase
+{
+public:
+ explicit AxUserFormModel();
+
+ virtual ApiControlType getControlType() const;
+ virtual void convertProperties( PropertyMap& rPropMap, const ControlConverter& rConv ) const;
+};
+
+// ============================================================================
+
+/** A form control embedded in a document draw page. Contains a specific model
+ structure according to the type of the control. */
+class EmbeddedControl
+{
+public:
+ explicit EmbeddedControl( const ::rtl::OUString& rName );
+ ~EmbeddedControl();
/** Creates and returns the internal control model according to the passed
MS class identifier. */
- AxControlModelBase* createModel( const ::rtl::OUString& rClassId );
- /** Imports a form control model from the passed input stream. */
- void importBinaryModel( BinaryInputStream& rInStrm );
+ ControlModelRef createModel( const ::rtl::OUString& rClassId );
- /** Returns the internal control model. */
- inline const AxControlModelBase* getModel() const { return mxModel.get(); }
- /** Returns the MS class identifier used to create the internal control model. */
- inline const ::rtl::OUString& getClassId() const { return maClassId; }
+ /** Returns true, if the internal control model exists. */
+ inline bool hasModel() const { return mxModel.get() != 0; }
+ /** Returns the UNO service name needed to construct the control model. */
+ ::rtl::OUString getServiceName() const;
- /** Creates and returns the UNO form component object for this control and
- inserts it into the form wrapped by the passed helper. */
- ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel >
- convertAndInsert( AxControlHelper& rHelper ) const;
+ /** Converts all control properties and inserts them into the passed model. */
+ bool convertProperties(
+ const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel >& rxCtrlModel,
+ const ControlConverter& rConv ) const;
private:
- ::std::auto_ptr< AxControlModelBase > mxModel;
- ::rtl::OUString maClassId; /// Class identifier of the control model.
+ ControlModelRef mxModel; /// Control model containing the properties.
::rtl::OUString maName; /// Name of the control.
};
// ============================================================================
+/** A wrapper for a control form embedded directly in a draw page. */
+class EmbeddedForm : public ControlConverter
+{
+public:
+ explicit EmbeddedForm(
+ const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& rxModelFactory,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XDrawPage >& rxDrawPage,
+ const GraphicHelper& rGraphicHelper,
+ bool bDefaultColorBgr = true );
+
+ /** Converts the passed ActiveX control and inserts it into the form.
+ @return The API control model, if conversion was successful. */
+ ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel >
+ convertAndInsert( const EmbeddedControl& rControl );
+
+private:
+ /** Tries to insert the passed control model into the form. */
+ bool insertControl( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel >& rxCtrlModel );
+
+ /** Creates the form that will hold the form controls. */
+ ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexContainer >
+ createForm();
+
+private:
+ ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > mxModelFactory;
+ ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormsSupplier > mxFormsSupp;
+ ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexContainer > mxFormIC;
+};
+
+// ============================================================================
+
} // namespace ole
} // namespace oox
#endif
-
diff --git a/oox/inc/oox/ole/axcontrolfragment.hxx b/oox/inc/oox/ole/axcontrolfragment.hxx
index 9bccbd11a0de..3c9aed61bd3e 100644
--- a/oox/inc/oox/ole/axcontrolfragment.hxx
+++ b/oox/inc/oox/ole/axcontrolfragment.hxx
@@ -33,8 +33,8 @@
namespace oox {
namespace ole {
-class AxControl;
-class AxControlModelBase;
+class ControlModelBase;
+class EmbeddedControl;
// ============================================================================
@@ -44,32 +44,32 @@ class AxControlPropertyContext : public ::oox::core::ContextHandler2
public:
explicit AxControlPropertyContext(
::oox::core::FragmentHandler2& rFragment,
- AxControlModelBase& rModel );
+ ControlModelBase& rModel );
virtual ::oox::core::ContextHandlerRef
onCreateContext( sal_Int32 nElement, const AttributeList& rAttribs );
private:
- AxControlModelBase& mrModel;
+ ControlModelBase& mrModel;
sal_Int32 mnPropId; /// Identifier of currently processed property.
};
// ============================================================================
-/** Fragment handler for an ActiveX form control fragment. */
+/** Fragment handler for an embedded ActiveX form control fragment. */
class AxControlFragment : public ::oox::core::FragmentHandler2
{
public:
explicit AxControlFragment(
::oox::core::XmlFilterBase& rFilter,
const ::rtl::OUString& rFragmentPath,
- AxControl& rControl );
+ EmbeddedControl& rControl );
virtual ::oox::core::ContextHandlerRef
onCreateContext( sal_Int32 nElement, const AttributeList& rAttribs );
private:
- AxControl& mrControl;
+ EmbeddedControl& mrControl;
};
// ============================================================================
diff --git a/oox/inc/oox/ole/axcontrolhelper.hxx b/oox/inc/oox/ole/axcontrolhelper.hxx
deleted file mode 100644
index d34cf45f3654..000000000000
--- a/oox/inc/oox/ole/axcontrolhelper.hxx
+++ /dev/null
@@ -1,118 +0,0 @@
-/*************************************************************************
- *
- * 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.
- *
- ************************************************************************/
-
-#ifndef OOX_OLE_AXCONTROLHELPER_HXX
-#define OOX_OLE_AXCONTROLHELPER_HXX
-
-#include <com/sun/star/uno/Reference.hxx>
-
-namespace com { namespace sun { namespace star {
- namespace graphic { class XGraphic; }
- namespace drawing { class XDrawPage; }
- namespace form { class XForm; }
-} } }
-
-namespace oox { namespace core { class FilterBase; } }
-
-namespace oox {
-namespace ole {
-
-// ============================================================================
-
-const sal_uInt32 AX_SYSCOLOR_WINDOWBACK = 0x80000005;
-const sal_uInt32 AX_SYSCOLOR_WINDOWFRAME = 0x80000006;
-const sal_uInt32 AX_SYSCOLOR_WINDOWTEXT = 0x80000008;
-const sal_uInt32 AX_SYSCOLOR_BUTTONFACE = 0x8000000F;
-const sal_uInt32 AX_SYSCOLOR_BUTTONTEXT = 0x80000012;
-
-// ============================================================================
-
-enum AxDefaultColorMode
-{
- AX_DEFAULTCOLORMODE_BGR, /// OLE default color type is interpreted as BGR color.
- AX_DEFAULTCOLORMODE_PALETTE /// OLE default color type is interpreted as palette color.
-};
-
-// ============================================================================
-
-/** Helper functions and callbacks for ActiveX form control filters. */
-class AxControlHelper
-{
-public:
- explicit AxControlHelper(
- const ::oox::core::FilterBase& rFilter,
- AxDefaultColorMode eColorMode = AX_DEFAULTCOLORMODE_BGR );
- virtual ~AxControlHelper();
-
- /** Returns the filter object that imports/exports the form controls. */
- inline const ::oox::core::FilterBase& getFilter() const { return mrFilter; }
- /** Returns the UNO form used to insert the control models. */
- ::com::sun::star::uno::Reference< ::com::sun::star::form::XForm >
- getControlForm() const;
- /** Returns the UNO RGB color from the passed encoded OLE color. */
- sal_Int32 convertColor( sal_uInt32 nAxColor ) const;
-
-protected:
- /** Derived classes returns the UNO form of the current context. Called exactly once. */
- virtual ::com::sun::star::uno::Reference< ::com::sun::star::form::XForm >
- createControlForm() const = 0;
-
-private:
- const ::oox::core::FilterBase& mrFilter;
- const AxDefaultColorMode meColorMode;
- mutable ::com::sun::star::uno::Reference< ::com::sun::star::form::XForm > mxForm;
- mutable bool mbHasFormQuerried;
-};
-
-// ============================================================================
-
-/** Helper functions and callbacks for ActiveX form controls embedded in a
- document. */
-class AxEmbeddedControlHelper : public AxControlHelper
-{
-public:
- explicit AxEmbeddedControlHelper(
- const ::oox::core::FilterBase& rFilter,
- const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XDrawPage >& rxDrawPage,
- AxDefaultColorMode eColorMode = AX_DEFAULTCOLORMODE_BGR );
-
-protected:
- /** Creates and returns the standard UNO form in the wrapped draw page. */
- virtual ::com::sun::star::uno::Reference< ::com::sun::star::form::XForm >
- createControlForm() const;
-
-private:
- ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XDrawPage > mxDrawPage;
-};
-
-// ============================================================================
-
-} // namespace ole
-} // namespace oox
-
-#endif
-
diff --git a/oox/inc/oox/ole/olehelper.hxx b/oox/inc/oox/ole/olehelper.hxx
index 91ca73a38a67..ba46d3baf6df 100644
--- a/oox/inc/oox/ole/olehelper.hxx
+++ b/oox/inc/oox/ole/olehelper.hxx
@@ -31,13 +31,49 @@
#include <rtl/ustring.hxx>
#include "oox/helper/binarystreambase.hxx"
-namespace oox { class BinaryInputStream; }
+namespace oox {
+ class BinaryInputStream;
+ class GraphicHelper;
+}
namespace oox {
namespace ole {
// ============================================================================
+const sal_Char* const OLE_GUID_STDFONT = "{0BE35203-8F91-11CE-9DE3-00AA004BB851}";
+const sal_Char* const OLE_GUID_STDPIC = "{0BE35204-8F91-11CE-9DE3-00AA004BB851}";
+const sal_Char* const OLE_GUID_STDHLINK = "{79EAC9D0-BAF9-11CE-8C82-00AA004BA90B}";
+
+// ============================================================================
+
+const sal_uInt16 OLE_STDFONT_NORMAL = 400;
+const sal_uInt16 OLE_STDFONT_BOLD = 700;
+
+const sal_uInt8 OLE_STDFONT_ITALIC = 0x02;
+const sal_uInt8 OLE_STDFONT_UNDERLINE = 0x04;
+const sal_uInt8 OLE_STDFONT_STRIKE = 0x08;
+
+/** Stores data about a StdFont font structure. */
+struct StdFontInfo
+{
+ ::rtl::OUString maName; /// Font name.
+ sal_uInt32 mnHeight; /// Font height (1/10,000 points).
+ sal_uInt16 mnWeight; /// Font weight (normal/bold).
+ sal_uInt16 mnCharSet; /// Font charset.
+ sal_uInt8 mnFlags; /// Font flags.
+
+ explicit StdFontInfo();
+ explicit StdFontInfo(
+ const ::rtl::OUString& rName,
+ sal_uInt32 nHeight,
+ sal_uInt16 nWeight = OLE_STDFONT_NORMAL,
+ sal_uInt16 nCharSet = WINDOWS_CHARSET_ANSI,
+ sal_uInt8 nFlags = 0 );
+};
+
+// ============================================================================
+
/** Stores data about a StdHlink hyperlink. */
struct StdHlinkInfo
{
@@ -53,14 +89,45 @@ struct StdHlinkInfo
class OleHelper
{
public:
- /** Imports a GUID from the passed binary stream and returns its string representation. */
+ /** Returns the UNO RGB color from the passed encoded OLE color.
+
+ @param bDefaultColorBgr
+ True = OLE default color type is treated as BGR color.
+ False = OLE default color type is treated as palette color.
+ */
+ static sal_Int32 decodeOleColor(
+ const GraphicHelper& rGraphicHelper,
+ sal_uInt32 nOleColor,
+ bool bDefaultColorBgr = true );
+
+ /** Imports a GUID from the passed binary stream and returns its string
+ representation (in uppercase characters).
+ */
static ::rtl::OUString importGuid( BinaryInputStream& rInStrm );
- /** Imports an OLE StdPic picture from the current position of the passed binary stream. */
- static bool importStdPic( StreamDataSequence& orGraphicData, BinaryInputStream& rInStrm, bool bWithGuid );
+ /** Imports an OLE StdFont font structure from the current position of the
+ passed binary stream.
+ */
+ static bool importStdFont(
+ StdFontInfo& orFontInfo,
+ BinaryInputStream& rInStrm,
+ bool bWithGuid );
+
+ /** Imports an OLE StdPic picture from the current position of the passed
+ binary stream.
+ */
+ static bool importStdPic(
+ StreamDataSequence& orGraphicData,
+ BinaryInputStream& rInStrm,
+ bool bWithGuid );
- /** Imports an OLE StdHlink from the current position of the passed binary stream. */
- static bool importStdHlink( StdHlinkInfo& orHlinkInfo, BinaryInputStream& rInStrm, rtl_TextEncoding eTextEnc, bool bWithGuid );
+ /** Imports an OLE StdHlink from the current position of the passed binary
+ stream.
+ */
+ static bool importStdHlink(
+ StdHlinkInfo& orHlinkInfo,
+ BinaryInputStream& rInStrm,
+ bool bWithGuid );
private:
OleHelper(); // not implemented
diff --git a/oox/inc/oox/helper/olestorage.hxx b/oox/inc/oox/ole/olestorage.hxx
index a8174a167729..a84fadfadc92 100644..100755
--- a/oox/inc/oox/helper/olestorage.hxx
+++ b/oox/inc/oox/ole/olestorage.hxx
@@ -25,18 +25,18 @@
*
************************************************************************/
-#ifndef OOX_HELPER_OLESTORAGE_HXX
-#define OOX_HELPER_OLESTORAGE_HXX
+#ifndef OOX_OLE_OLESTORAGE_HXX
+#define OOX_OLE_OLESTORAGE_HXX
#include "oox/helper/storagebase.hxx"
namespace com { namespace sun { namespace star {
namespace lang { class XMultiServiceFactory; }
namespace container { class XNameContainer; }
- namespace container { class XNameAccess; }
} } }
namespace oox {
+namespace ole {
// ============================================================================
@@ -51,7 +51,7 @@ public:
explicit OleStorage(
const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& rxFactory,
- const ::com::sun::star::uno::Reference< ::com::sun::star::io::XStream >& rxStream,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::io::XStream >& rxOutStream,
bool bBaseStreamAccess );
virtual ~OleStorage();
@@ -59,9 +59,19 @@ public:
private:
explicit OleStorage(
const OleStorage& rParentStorage,
- const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess >& rxElementsAccess,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer >& rxStorage,
+ const ::rtl::OUString& rElementName,
+ bool bReadOnly );
+ explicit OleStorage(
+ const OleStorage& rParentStorage,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::io::XStream >& rxOutStream,
const ::rtl::OUString& rElementName );
+ /** Initializes the API storage object for input. */
+ void initStorage( const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >& rxInStream );
+ /** Initializes the API storage object for input/output. */
+ void initStorage( const ::com::sun::star::uno::Reference< ::com::sun::star::io::XStream >& rxOutStream );
+
/** Returns true, if the object represents a valid storage. */
virtual bool implIsStorage() const;
@@ -77,7 +87,7 @@ private:
virtual void implGetElementNames( ::std::vector< ::rtl::OUString >& orElementNames ) const;
/** Opens and returns the specified sub storage from the storage. */
- virtual StorageRef implOpenSubStorage( const ::rtl::OUString& rElementName, bool bCreate );
+ virtual StorageRef implOpenSubStorage( const ::rtl::OUString& rElementName, bool bCreateMissing );
/** Opens and returns the specified input stream from the storage. */
virtual ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >
@@ -87,17 +97,20 @@ private:
virtual ::com::sun::star::uno::Reference< ::com::sun::star::io::XOutputStream >
implOpenOutputStream( const ::rtl::OUString& rElementName );
-private:
- typedef ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer > XNameContainerRef;
- typedef ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess > XNameAccessRef;
+ /** Commits the current storage. */
+ virtual void implCommit() const;
- XNameContainerRef mxStorage; /// Complete storage based on input or output stream.
- XNameAccessRef mxElements; /// Access to elements of current sub storage.
+private:
+ ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >
+ mxFactory; /// Factory for storage/stream creation.
+ ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer >
+ mxStorage; /// Access to elements of this sub storage.
+ const OleStorage* mpParentStorage; /// Parent OLE storage that contains this storage.
};
// ============================================================================
+} // namespace ole
} // namespace oox
#endif
-
diff --git a/oox/inc/oox/ole/vbacontrol.hxx b/oox/inc/oox/ole/vbacontrol.hxx
new file mode 100755
index 000000000000..ec1c25be6952
--- /dev/null
+++ b/oox/inc/oox/ole/vbacontrol.hxx
@@ -0,0 +1,205 @@
+/*************************************************************************
+ *
+ * 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.
+ *
+ ************************************************************************/
+
+#ifndef OOX_OLE_VBACONTROL_HXX
+#define OOX_OLE_VBACONTROL_HXX
+
+#include "oox/ole/axcontrol.hxx"
+
+namespace com { namespace sun { namespace star {
+ namespace container { class XNameContainer; }
+} } }
+
+namespace oox { class StorageBase; }
+
+namespace oox {
+namespace ole {
+
+class VbaFormControl;
+
+// ============================================================================
+
+/** Common properties for all controls that are part of a VBA user form or of
+ another container control in a VBA user form. */
+class VbaSiteModel
+{
+public:
+ explicit VbaSiteModel();
+ virtual ~VbaSiteModel();
+
+ /** Allows to set single properties specified by XML token identifier. */
+ void importProperty( sal_Int32 nPropId, const ::rtl::OUString& rValue );
+ /** Imports the site model data from the passed input stream. */
+ bool importBinaryModel( BinaryInputStream& rInStrm );
+ /** Moves the control relative to its current position by the passed distance. */
+ void moveRelative( const AxPairData& rDistance );
+
+ /** Returns the programmatical name of the control. */
+ inline const ::rtl::OUString& getName() const { return maName; }
+ /** Returns the position of the control in its parent. */
+ inline const AxPairData& getPosition() const { return maPos; }
+ /** Returns true, if this control is a container control. */
+ bool isContainer() const;
+ /** Returns the length of the stream data for stream based controls. */
+ sal_uInt32 getStreamLength() const;
+ /** Returns the name of the substorage for the container control data. */
+ ::rtl::OUString getSubStorageName() const;
+ /** Returns the tab index of the control. */
+ inline sal_Int16 getTabIndex() const { return mnTabIndex; }
+
+ /** Tries to create the control model according to the site model. */
+ ControlModelRef createControlModel( const AxClassTable& rClassTable ) const;
+ /** Converts all form site properties. */
+ void convertProperties(
+ PropertyMap& rPropMap,
+ const ControlConverter& rConv,
+ ApiControlType eCtrlType,
+ sal_Int32 nCtrlIndex ) const;
+
+protected:
+ ::rtl::OUString maName; /// Name of the control.
+ ::rtl::OUString maTag; /// User defined tag.
+ ::rtl::OUString maToolTip; /// Tool tip for the control.
+ ::rtl::OUString maLinkedCell; /// Linked cell for the control value in a spreadsheet.
+ ::rtl::OUString maSourceRange; /// Source data for the control in a spreadsheet.
+ AxPairData maPos; /// Position in parent container.
+ sal_Int32 mnId; /// Control identifier.
+ sal_Int32 mnHelpContextId; /// Help context identifier.
+ sal_uInt32 mnFlags; /// Various flags.
+ sal_uInt32 mnStreamLen; /// Size of control stream data.
+ sal_Int16 mnTabIndex; /// Tab order index.
+ sal_uInt16 mnClassIdOrCache; /// Class name identifier or GUID cache index.
+ sal_uInt16 mnGroupId; /// Group identifier for grouped controls.
+};
+
+typedef ::boost::shared_ptr< VbaSiteModel > VbaSiteModelRef;
+
+// ============================================================================
+
+/** A control that is embedded in a VBA user form or in another container
+ control in a VBA user form.
+
+ The control may be a 'simple' control with its data stored in the 'o'
+ stream, or it may be a container control with its data stored in an own
+ substorage.
+ */
+class VbaFormControl
+{
+public:
+ explicit VbaFormControl();
+ virtual ~VbaFormControl();
+
+ /** Imports the model from the passed stream or storage, depending on the
+ control's type. Imports all embedded controls, if this is a container. */
+ void importModelOrStorage(
+ BinaryInputStream& rInStrm,
+ StorageBase& rStrg,
+ const AxClassTable& rClassTable );
+
+ /** Returns the programmatical name of the control. */
+ ::rtl::OUString getControlName() const;
+
+ /** Creates the UNO control model, inserts it into the passed container,
+ and converts all control properties. */
+ void createAndConvert(
+ sal_Int32 nCtrlIndex,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer >& rxParentNC,
+ const ControlConverter& rConv ) const;
+
+protected:
+ /** Creates and imports the control model containing properties of the control. */
+ void importControlModel( BinaryInputStream& rInStrm, const AxClassTable& rClassTable );
+ /** Creates and imports the control model, and imports all embedded
+ controls from the passed substorage. */
+ void importStorage( StorageBase& rStrg, const AxClassTable& rClassTable );
+
+ /** Converts all control properties, and inserts and converts embedded controls. */
+ bool convertProperties(
+ const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel >& rxCtrlModel,
+ const ControlConverter& rConv,
+ sal_Int32 nCtrlIndex ) const;
+
+private:
+ typedef RefVector< VbaFormControl > VbaFormControlVector;
+ typedef VbaFormControlVector::value_type VbaFormControlRef;
+
+ /** Creates the control model according to the current site model. */
+ void createControlModel( const AxClassTable& rClassTable );
+ /** Imports the site model data containing common properties of the control. */
+ bool importSiteModel( BinaryInputStream& rInStrm );
+
+ /** Imports the site models of all embedded controls from the 'f' stream. */
+ bool importEmbeddedSiteModels( BinaryInputStream& rInStrm );
+ /* Final processing of all embedded controls after import. */
+ void finalizeEmbeddedControls();
+
+ /** Moves the control relative to its current position by the passed distance. */
+ void moveRelative( const AxPairData& rDistance );
+ /** Moves all embedded controls from their relative position in this
+ control to an absolute position in the parent of this control. */
+ void moveEmbeddedToAbsoluteParent();
+
+ /** Functor for comparing controls by their tab index. */
+ static bool compareByTabIndex( const VbaFormControlRef& rxLeft, const VbaFormControlRef& rxRight );
+
+protected:
+ VbaSiteModelRef mxSiteModel; /// Common control properties.
+ ControlModelRef mxCtrlModel; /// Specific control properties.
+
+private:
+ VbaFormControlVector maControls; /// All embedded form controls.
+ AxClassTable maClassTable; /// Class identifiers for exotic embedded controls.
+};
+
+// ============================================================================
+
+class VbaUserForm : public VbaFormControl, public ControlConverter
+{
+public:
+ explicit VbaUserForm(
+ const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& rxGlobalFactory,
+ const GraphicHelper& rGraphicHelper,
+ bool bDefaultColorBgr = true );
+
+ /** Imports the form and its embedded controls, and inserts the form with
+ all its controls into the passed dialog library. */
+ void importForm(
+ const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer >& rxDialogLib,
+ StorageBase& rVbaFormStrg,
+ const ::rtl::OUString& rModuleName,
+ rtl_TextEncoding eTextEnc );
+
+private:
+ ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > mxGlobalFactory;
+};
+
+// ============================================================================
+
+} // namespace ole
+} // namespace oox
+
+#endif
diff --git a/oox/inc/oox/ole/vbahelper.hxx b/oox/inc/oox/ole/vbahelper.hxx
new file mode 100755
index 000000000000..76dc1c736025
--- /dev/null
+++ b/oox/inc/oox/ole/vbahelper.hxx
@@ -0,0 +1,233 @@
+/*************************************************************************
+ *
+ * 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.
+ *
+ ************************************************************************/
+
+#ifndef OOX_OLE_VBAHELPER_HXX
+#define OOX_OLE_VBAHELPER_HXX
+
+#include "oox/helper/binarystreambase.hxx"
+
+namespace com { namespace sun { namespace star {
+ namespace container { class XNameContainer; }
+ namespace document { class XEventsSupplier; }
+} } }
+
+namespace oox { class BinaryInputStream; }
+
+namespace oox {
+namespace ole {
+
+// Directory stream record identifiers ========================================
+
+const sal_uInt16 VBA_ID_MODULECOOKIE = 0x002C;
+const sal_uInt16 VBA_ID_MODULEDOCSTRING = 0x001C;
+const sal_uInt16 VBA_ID_MODULEDOCSTRINGUNICODE = 0x0048;
+const sal_uInt16 VBA_ID_MODULEEND = 0x002B;
+const sal_uInt16 VBA_ID_MODULEHELPCONTEXT = 0x001E;
+const sal_uInt16 VBA_ID_MODULENAME = 0x0019;
+const sal_uInt16 VBA_ID_MODULENAMEUNICODE = 0x0047;
+const sal_uInt16 VBA_ID_MODULEOFFSET = 0x0031;
+const sal_uInt16 VBA_ID_MODULEPRIVATE = 0x0028;
+const sal_uInt16 VBA_ID_MODULEREADONLY = 0x0025;
+const sal_uInt16 VBA_ID_MODULESTREAMNAME = 0x001A;
+const sal_uInt16 VBA_ID_MODULESTREAMNAMEUNICODE = 0x0032;
+const sal_uInt16 VBA_ID_MODULETYPEDOCUMENT = 0x0022;
+const sal_uInt16 VBA_ID_MODULETYPEPROCEDURAL = 0x0021;
+const sal_uInt16 VBA_ID_PROJECTCODEPAGE = 0x0003;
+const sal_uInt16 VBA_ID_PROJECTEND = 0x0010;
+const sal_uInt16 VBA_ID_PROJECTMODULES = 0x000F;
+const sal_uInt16 VBA_ID_PROJECTVERSION = 0x0009;
+
+// ============================================================================
+
+/** Static helper functions for the VBA filters. */
+class VbaHelper
+{
+public:
+ /** Returns the full Basic script URL from a VBA module and macro name.
+ The script is assumed to be in a document library. */
+ static ::rtl::OUString getBasicScriptUrl(
+ const ::rtl::OUString& rLibraryName,
+ const ::rtl::OUString& rModuleName,
+ const ::rtl::OUString& rMacroName );
+
+ /** Reads the next record from the VBA directory stream 'dir'.
+
+ @param rnRecId (out parameter) The record identifier of the new record.
+ @param rRecData (out parameter) The contents of the new record.
+ @param rInStrm The 'dir' stream.
+
+ @return True = next record successfully read. False on any error, or
+ if the stream is EOF.
+ */
+ static bool readDirRecord(
+ sal_uInt16& rnRecId,
+ StreamDataSequence& rRecData,
+ BinaryInputStream& rInStrm );
+
+ /** Extracts a key/value pair from a string separated by an equality sign.
+
+ @param rKey (out parameter) The key before the separator.
+ @param rValue (out parameter) The value following the separator.
+ @param rCodeLine The source key/value pair.
+
+ @return True = Equality sign separator found, and the returned key and
+ value are not empty. False otherwise.
+ */
+ static bool extractKeyValue(
+ ::rtl::OUString& rKey,
+ ::rtl::OUString& rValue,
+ const ::rtl::OUString& rKeyValue );
+
+ /** Removes whitespace characters from the beginning of the passed string.
+
+ @param rCodeLine (in/out parameter) The string to be modified.
+
+ @return True = at least one whitespace character found and removed
+ from rCodeLine. False = rCodeLine is empty or does not start with
+ a whitespace character.
+ */
+ static bool eatWhitespace( ::rtl::OUString& rCodeLine );
+
+ /** Removes the passed keyword from the beginning of the passed string.
+
+ @param rCodeLine (in/out parameter) The string to be modified.
+
+ @param rKeyword The keyword to be removed from the beginning of the
+ rCodeLine string.
+
+ @return True = rCodeLine starts with the passed keyword (case
+ insensitive), and is followed by whitespace characters, or it ends
+ right after the keyword. The keyword and the following whitespace
+ characters have been removed from rCodeLine. False = rCodeLine is
+ empty or does not start with the specified keyword, or the keyword
+ is not followed by whitespace characters.
+ */
+ static bool eatKeyword( ::rtl::OUString& rCodeLine, const ::rtl::OUString& rKeyword );
+
+ /** Returns the VBA source code of the specified module, or an empty
+ string, if the module does not exist.
+
+ @param rxBasicLib The container for all VBA code modules.
+ @param rModuleName The name of the VBA code module.
+ */
+ static ::rtl::OUString getSourceCode(
+ const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer >& rxBasicLib,
+ const ::rtl::OUString& rModuleName );
+
+ /** Checks, if a macro with the specified name exists in the passed VBA
+ source code.
+
+ @param rSourceCode The VBA source code.
+ @param rMacroName The name of the macro.
+ */
+ static bool hasMacro(
+ const ::rtl::OUString& rSourceCode,
+ const ::rtl::OUString& rMacroName );
+
+ /** Checks, if a macro with the specified name exists in the specified
+ module.
+
+ @param rxBasicLib The container for all VBA code modules.
+ @param rModuleName The name of the VBA module to check for the macro.
+ @param rMacroName The name of the macro.
+ */
+ static bool hasMacro(
+ const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer >& rxBasicLib,
+ const ::rtl::OUString& rModuleName,
+ const ::rtl::OUString& rMacroName );
+
+ /** Tries to insert a VBA macro into the specified code module.
+
+ @descr If the specified macro does not exist, it will be generated as
+ following, using the passed parameters. If the parameter rMacroType
+ is left empty, a sub procedure macro will be generated:
+
+ Private Sub <rMacroName> ( <rMacroArgs> )
+ <rMacroCode>
+ End Sub
+
+ If the parameter rMacroType is not empty, a function macro
+ will be generated. Note that the parameter rMacroCode has to
+ provide the code that returns the function value.
+
+ Private Function <rMacroName> ( <rMacroArgs> ) As <rMacroType>
+ <rMacroCode>
+ End Function
+
+ The source code in rMacroCode may contain a special placeholder
+ $MACRO that will be replaced by the macro name passed in rMacroName
+ before the macro will be inserted into the module.
+
+ @param rModuleName The name of the VBA module to be used.
+ @param rMacroName The name of the VBA macro to be inserted.
+ @param rMacroArgs The argument list of the VBA macro.
+ @param rMacroType Macro return type (empty for sub procedure).
+ @param rMacroCode The VBA source code for the macro.
+
+ @return True, if the specified VBA macro has been inserted. False, if
+ there already exists a macro with the specified name, or if any
+ error has occurred, for example, Office configuration forbids to
+ generate executable VBA code or the specified module does not
+ exist.
+ */
+ static bool insertMacro(
+ const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer >& rxBasicLib,
+ const ::rtl::OUString& rModuleName,
+ const ::rtl::OUString& rMacroName,
+ const ::rtl::OUString& rMacroArgs,
+ const ::rtl::OUString& rMacroType,
+ const ::rtl::OUString& rMacroCode );
+
+ /** Tries to attach a VBA macro to an event of the passed events supplier.
+
+ @descr The function checks if the specified macro exists and attaches
+ it to the event of the passed events supplier.
+
+ @param rxEventsSupp The events supplier for the event to be attached.
+ @param rEventName The event name used in the office API.
+ @param rLibraryName The name of the Basic library containing the macro.
+ @param rModuleName The name of the VBA module containing the macro.
+ @param rMacroName The name of the VBA macro to attach to the event.
+ */
+ static bool attachMacroToEvent(
+ const ::com::sun::star::uno::Reference< ::com::sun::star::document::XEventsSupplier >& rxEventsSupp,
+ const ::rtl::OUString& rEventName,
+ const ::rtl::OUString& rLibraryName,
+ const ::rtl::OUString& rModuleName,
+ const ::rtl::OUString& rMacroName );
+
+private:
+ VbaHelper();
+ ~VbaHelper();
+};
+
+// ============================================================================
+
+} // namespace ole
+} // namespace oox
+
+#endif
diff --git a/oox/inc/oox/ole/vbamodule.hxx b/oox/inc/oox/ole/vbamodule.hxx
new file mode 100755
index 000000000000..3b529ceee129
--- /dev/null
+++ b/oox/inc/oox/ole/vbamodule.hxx
@@ -0,0 +1,96 @@
+/*************************************************************************
+ *
+ * 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.
+ *
+ ************************************************************************/
+
+#ifndef OOX_OLE_VBAMODULE_HXX
+#define OOX_OLE_VBAMODULE_HXX
+
+#include <rtl/ustring.hxx>
+#include <com/sun/star/uno/Reference.hxx>
+
+namespace com { namespace sun { namespace star {
+ namespace container { class XNameAccess; }
+ namespace container { class XNameContainer; }
+ namespace frame { class XModel; }
+} } }
+
+namespace oox {
+ class BinaryInputStream;
+ class StorageBase;
+}
+
+namespace oox {
+namespace ole {
+
+// ============================================================================
+
+class VbaModule
+{
+public:
+ explicit VbaModule(
+ const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel >& rxDocModel,
+ const ::rtl::OUString& rName,
+ rtl_TextEncoding eTextEnc,
+ bool bExecutable );
+
+ /** Returns the module type (com.sun.star.script.ModuleType constant). */
+ inline sal_Int32 getType() const { return mnType; }
+ /** Sets the passed module type. */
+ inline void setType( sal_Int32 nType ) { mnType = nType; }
+
+ /** Returns the name of the module. */
+ inline const ::rtl::OUString& getName() const { return maName; }
+ /** Returns the stream name of the module. */
+ inline const ::rtl::OUString& getStreamName() const { return maStreamName; }
+
+ /** Imports all records for this module until the MODULEEND record. */
+ void importDirRecords( BinaryInputStream& rDirStrm );
+ /** Imports the Basic source code into the passed Basic library. */
+ void importSourceCode(
+ StorageBase& rVbaStrg,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer >& rxBasicLib,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess >& rxDocObjectNA ) const;
+
+private:
+ ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel >
+ mxDocModel; /// Document model used to import/export the VBA project.
+ ::rtl::OUString maName;
+ ::rtl::OUString maStreamName;
+ ::rtl::OUString maDocString;
+ rtl_TextEncoding meTextEnc;
+ sal_Int32 mnType;
+ sal_uInt32 mnOffset;
+ bool mbReadOnly;
+ bool mbPrivate;
+ bool mbExecutable;
+};
+
+// ============================================================================
+
+} // namespace ole
+} // namespace oox
+
+#endif
diff --git a/oox/inc/oox/ole/vbaproject.hxx b/oox/inc/oox/ole/vbaproject.hxx
new file mode 100755
index 000000000000..0422ccbd0cf8
--- /dev/null
+++ b/oox/inc/oox/ole/vbaproject.hxx
@@ -0,0 +1,289 @@
+/*************************************************************************
+ *
+ * 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.
+ *
+ ************************************************************************/
+
+#ifndef OOX_OLE_VBAPROJECT_HXX
+#define OOX_OLE_VBAPROJECT_HXX
+
+#include "oox/helper/storagebase.hxx"
+#include <com/sun/star/uno/XInterface.hpp>
+#include "oox/dllapi.h"
+
+namespace com { namespace sun { namespace star {
+ namespace container { class XNameContainer; }
+ namespace document { class XEventsSupplier; }
+ namespace frame { class XModel; }
+ namespace script { class XLibraryContainer; }
+ namespace lang { class XMultiServiceFactory; }
+} } }
+
+namespace oox { class GraphicHelper; }
+
+namespace oox {
+namespace ole {
+
+// ============================================================================
+
+class OOX_DLLPUBLIC VbaFilterConfig
+{
+public:
+ explicit VbaFilterConfig(
+ const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& rxGlobalFactory,
+ const ::rtl::OUString& rConfigCompName );
+ ~VbaFilterConfig();
+
+ /** Returns true, if the VBA source code and forms should be imported. */
+ bool isImportVba() const;
+ /** Returns true, if the VBA source code should be imported executable. */
+ bool isImportVbaExecutable() const;
+ /** Returns true, if the VBA source code and forms should be exported. */
+ bool isExportVba() const;
+
+private:
+ ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >
+ mxConfigAccess;
+};
+
+// ============================================================================
+
+class OOX_DLLPUBLIC VbaProject : public VbaFilterConfig
+{
+public:
+ explicit VbaProject(
+ const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& rxGlobalFactory,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel >& rxDocModel,
+ const ::rtl::OUString& rConfigCompName );
+ virtual ~VbaProject();
+
+ /** Imports the entire VBA project from the passed storage.
+
+ @param rVbaPrjStrg The root storage of the entire VBA project.
+ */
+ void importVbaProject(
+ StorageBase& rVbaPrjStrg,
+ const GraphicHelper& rGraphicHelper,
+ bool bDefaultColorBgr = true );
+
+ /** Returns true, if the document contains at least one code module. */
+ bool hasModules() const;
+ /** Returns true, if the document contains the specified code module. */
+ bool hasModule( const ::rtl::OUString& rModuleName ) const;
+
+ /** Returns true, if the document contains at least one dialog. */
+ bool hasDialogs() const;
+ /** Returns true, if the document contains the specified dialog. */
+ bool hasDialog( const ::rtl::OUString& rDialogName ) const;
+
+ // Insert VBA code modules and VBA macros into modules --------------------
+
+ /** Tries to insert a VBA macro into the specified code module.
+
+ @descr If the specified macro does not exist, it will be generated as
+ following, using the passed parameters. If the parameter rMacroType
+ is left empty, a sub procedure macro will be generated:
+
+ Private Sub <rMacroName> ( <rMacroArgs> )
+ <rMacroCode>
+ End Sub
+
+ If the parameter rMacroType is not empty, a function macro
+ will be generated. Note that the parameter rMacroCode has to
+ provide the code that returns the function value.
+
+ Private Function <rMacroName> ( <rMacroArgs> ) As <rMacroType>
+ <rMacroCode>
+ End Function
+
+ The source code in rMacroCode may contain a special placeholder
+ $MACRO that will be replaced by the macro name passed in rMacroName
+ before the macro will be inserted into the module.
+
+ @param rModuleName The name of the VBA module to be used.
+ @param rMacroName The name of the VBA macro to be inserted.
+ @param rMacroArgs The argument list of the VBA macro.
+ @param rMacroType Macro return type (empty for sub procedure).
+ @param rMacroCode The VBA source code for the macro.
+
+ @return True, if the specified VBA macro has been inserted. False, if
+ there already exists a macro with the specified name, or if any
+ error has occurred, for example, Office configuration forbids to
+ generate executable VBA code or the specified module does not
+ exist.
+ */
+ bool insertMacro(
+ const ::rtl::OUString& rModuleName,
+ const ::rtl::OUString& rMacroName,
+ const ::rtl::OUString& rMacroArgs,
+ const ::rtl::OUString& rMacroType,
+ const ::rtl::OUString& rMacroCode );
+
+ // Attach VBA macros to generic or document events ------------------------
+
+ /** Tries to attach the specified VBA macro to an event directly.
+
+ @descr The function checks if the specified macro exists and attaches
+ it to the event of the passed events supplier.
+
+ @param rxEventsSupp The events supplier for the event to be attached.
+ @param rEventName The event name used in the office API.
+ @param rModuleName The name of the VBA module containing the macro.
+ @param rMacroName The name of the VBA macro to attach to the event.
+
+ @return True, if the specified VBA macro exists and could be attached
+ to the specified event.
+ */
+ bool attachMacroToEvent(
+ const ::com::sun::star::uno::Reference< ::com::sun::star::document::XEventsSupplier >& rxEventsSupp,
+ const ::rtl::OUString& rEventName,
+ const ::rtl::OUString& rModuleName,
+ const ::rtl::OUString& rMacroName );
+
+ /** Tries to attach the specified VBA macro to a document event directly.
+
+ @descr The function checks if the specified macro exists and attaches
+ it to the document event.
+
+ @param rEventName The document event name used in the office API.
+ @param rModuleName The name of the VBA module containing the macro.
+ @param rMacroName The name of the VBA macro to attach to the event.
+
+ @return True, if the specified VBA macro exists and could be attached
+ to the specified document event.
+ */
+ bool attachMacroToDocumentEvent(
+ const ::rtl::OUString& rEventName,
+ const ::rtl::OUString& rModuleName,
+ const ::rtl::OUString& rMacroName );
+
+ /** Tries to attach the specified VBA macro to an event via a generated
+ proxy macro that implements necessary conversion between VBA and UNO.
+
+ @descr The function checks if the specified VBA macro exists, then it
+ tries to generate a proxy macro using the parameters passed to this
+ function, appends it to the code module, and attaches it to the
+ event.
+
+ The proxy macro will execute the code specified in the rProxyCode
+ parameter. This code may contain special placeholders that will be
+ replaced before the proxy macro will be inserted into the module:
+ - $MACRO will be replaced by the original VBA macro name passed
+ in the rMacroName parameter.
+ - $PROXY will be replaced by the name of the proxy macro
+ generated by this function.
+
+ @param rxEventsSupp The events supplier for the event to be attached.
+ @param rEventName The event name used in the office API.
+ @param rModuleName The name of the VBA module containing the macro.
+ @param rMacroName The name of the VBA macro to attach to the event.
+ @param rProxyArgs The argument list of the generated proxy macro.
+ @param rProxyType Proxy macro return type (empty for procedure).
+ @param rProxyCode Proxy macro source code.
+
+ @return True, if the specified VBA macro exists and could be attached
+ to the specified event.
+ */
+ bool attachMacroToEvent(
+ const ::com::sun::star::uno::Reference< ::com::sun::star::document::XEventsSupplier >& rxEventsSupp,
+ const ::rtl::OUString& rEventName,
+ const ::rtl::OUString& rModuleName,
+ const ::rtl::OUString& rMacroName,
+ const ::rtl::OUString& rProxyArgs,
+ const ::rtl::OUString& rProxyType,
+ const ::rtl::OUString& rProxyCode );
+
+ /** Tries to attach the specified VBA macro to a document event via a
+ proxy macro that implements necessary conversion between VBA and UNO.
+
+ @descr The function checks if the specified VBA macro exists, then it
+ tries to generate a proxy macro using the parameters passed to this
+ function, appends it to the code module, and attaches it to the
+ document event.
+
+ The proxy macro will execute the code specified in the rProxyCode
+ parameter. This code may contain special placeholders that will be
+ replaced before the proxy macro will be inserted into the module:
+ - $MACRO will be replaced by the original VBA macro name passed
+ in the rMacroName parameter.
+ - $PROXY will be replaced by the name of the proxy macro
+ generated by this function.
+
+ @param rEventName The document event name used in the office API.
+ @param rModuleName The name of the VBA module containing the macro.
+ @param rMacroName The name of the VBA macro to attach to the event.
+ @param rProxyArgs The argument list of the generated proxy macro.
+ @param rProxyType Proxy macro return type (empty for procedure).
+ @param rProxyCode Proxy macro source code.
+
+ @return True, if the specified VBA macro exists and could be attached
+ to the specified event.
+ */
+ bool attachMacroToDocumentEvent(
+ const ::rtl::OUString& rEventName,
+ const ::rtl::OUString& rModuleName,
+ const ::rtl::OUString& rMacroName,
+ const ::rtl::OUString& rProxyArgs,
+ const ::rtl::OUString& rProxyType,
+ const ::rtl::OUString& rProxyCode );
+
+private:
+ VbaProject( const VbaProject& );
+ VbaProject& operator=( const VbaProject& );
+
+ /** Returns the Basic or dialog library container. */
+ ::com::sun::star::uno::Reference< ::com::sun::star::script::XLibraryContainer >
+ getLibraryContainer( sal_Int32 nPropId );
+ /** Opens a Basic or dialog library (creates missing if specified). */
+ ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer >
+ openLibrary( sal_Int32 nPropId, bool bCreateMissing );
+ /** Creates and returns the Basic library of the document used for import. */
+ ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer >
+ createBasicLibrary();
+ /** Creates and returns the dialog library of the document used for import. */
+ ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer >
+ createDialogLibrary();
+ /** Imports the VBA code modules and forms. */
+ void importVba( StorageBase& rVbaPrjStrg, const GraphicHelper& rGraphicHelper, bool bDefaultColorBgr );
+ /** Copies the entire VBA project storage to the passed document model. */
+ void copyStorage( StorageBase& rVbaPrjStrg );
+
+private:
+ ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >
+ mxGlobalFactory; /// Global service factory.
+ ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel >
+ mxDocModel; /// Document model used to import/export the VBA project.
+ ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer >
+ mxBasicLib; /// The Basic library of the document used for import.
+ ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer >
+ mxDialogLib; /// The dialog library of the document used for import.
+ const ::rtl::OUString maLibName; /// Name for Basic and dialog library used for import.
+};
+
+// ============================================================================
+
+} // namespace ole
+} // namespace oox
+
+#endif
diff --git a/oox/inc/oox/ppt/pptimport.hxx b/oox/inc/oox/ppt/pptimport.hxx
index 7d04e1c492fa..c4ee29447c64 100644
--- a/oox/inc/oox/ppt/pptimport.hxx
+++ b/oox/inc/oox/ppt/pptimport.hxx
@@ -53,8 +53,6 @@ public:
virtual bool importDocument() throw();
virtual bool exportDocument() throw();
- virtual sal_Int32 getSchemeColor( sal_Int32 nToken ) const;
-
virtual const ::oox::drawingml::Theme* getCurrentTheme() const;
virtual ::oox::vml::Drawing* getVmlDrawing();
virtual const oox::drawingml::table::TableStyleListPtr getTableStyles();
@@ -66,7 +64,10 @@ public:
std::vector< SlidePersistPtr >& getMasterPages(){ return maMasterPages; };
std::vector< SlidePersistPtr >& getNotesPages(){ return maNotesPages; };
+ sal_Int32 getSchemeColor( sal_Int32 nToken ) const;
+
private:
+ virtual GraphicHelper* implCreateGraphicHelper() const;
virtual ::rtl::OUString implGetImplementationName() const;
private:
diff --git a/oox/inc/oox/vml/vmldrawing.hxx b/oox/inc/oox/vml/vmldrawing.hxx
index 1af14903793b..2312514d7117 100644
--- a/oox/inc/oox/vml/vmldrawing.hxx
+++ b/oox/inc/oox/vml/vmldrawing.hxx
@@ -39,7 +39,7 @@ namespace com { namespace sun { namespace star {
} } }
namespace oox { namespace core { class XmlFilterBase; } }
-namespace oox { namespace ole { class AxControlHelper; } }
+namespace oox { namespace ole { class EmbeddedForm; } }
namespace oox {
namespace vml {
@@ -110,8 +110,8 @@ public:
inline ShapeContainer& getShapes() { return *mxShapes; }
/** Returns read access to the container of shapes and templates. */
inline const ShapeContainer& getShapes() const { return *mxShapes; }
- /** Returns the helper object used to process ActiveX form controls. */
- ::oox::ole::AxControlHelper& getControlHelper() const;
+ /** Returns the form object used to process ActiveX form controls. */
+ ::oox::ole::EmbeddedForm& getControlForm() const;
/** Registers the passed embedded OLE object. The related shape will then
load the OLE object data from the specified fragment. */
@@ -146,12 +146,8 @@ public:
const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel >& rxCtrlModel,
const ShapeClientData& rClientData ) const;
-protected:
- /** Derived classes may create a specialized form control helper object. */
- virtual ::oox::ole::AxControlHelper* createControlHelper() const;
-
private:
- typedef ::std::auto_ptr< ::oox::ole::AxControlHelper > AxControlHelperPtr;
+ typedef ::std::auto_ptr< ::oox::ole::EmbeddedForm > EmbeddedFormPtr;
typedef ::std::auto_ptr< ShapeContainer > ShapeContainerPtr;
typedef ::std::map< ::rtl::OUString, OleObjectInfo > OleObjectInfoMap;
typedef ::std::map< ::rtl::OUString, ControlInfo > ControlInfoMap;
@@ -159,7 +155,7 @@ private:
::oox::core::XmlFilterBase& mrFilter; /// Filter object that imports/exports the VML drawing.
::com::sun::star::uno::Reference< ::com::sun::star::drawing::XDrawPage >
mxDrawPage; /// UNO draw page used to insert the shapes.
- mutable AxControlHelperPtr mxCtrlHelper;/// Form control helper.
+ mutable EmbeddedFormPtr mxCtrlForm; /// The control form used to process ActiveX controls.
ShapeContainerPtr mxShapes; /// All shapes and shape templates.
OleObjectInfoMap maOleObjects; /// Info about all embedded OLE objects, mapped by shape id.
ControlInfoMap maControls; /// Info about all embedded form controls, mapped by control name.
diff --git a/oox/inc/oox/vml/vmlformatting.hxx b/oox/inc/oox/vml/vmlformatting.hxx
index b997c7451fe4..1a9c1811cf6b 100644
--- a/oox/inc/oox/vml/vmlformatting.hxx
+++ b/oox/inc/oox/vml/vmlformatting.hxx
@@ -30,8 +30,11 @@
#include "oox/helper/helper.hxx"
-namespace oox { class PropertyMap; }
-namespace oox { namespace core { class FilterBase; } }
+namespace oox {
+ class GraphicHelper;
+ class ModelObjectHelper;
+ class PropertyMap;
+}
namespace oox {
namespace vml {
@@ -71,7 +74,7 @@ public:
/** Converts the passed VML measure string to EMU (English Metric Units).
- @param rFilter The core filter object needed to perform pixel
+ @param rGraphicHelper The graphic helper needed to perform pixel
conversion according to the current output device.
@param rValue The VML measure value. This is a floating-point value
@@ -88,7 +91,7 @@ public:
pixel. Set to false if omitted measure unit means EMU.
*/
static sal_Int32 decodeMeasureToEmu(
- const ::oox::core::FilterBase& rFilter,
+ const GraphicHelper& rGraphicHelper,
const ::rtl::OUString& rValue,
sal_Int32 nRefValue,
bool bPixelX,
@@ -96,14 +99,14 @@ public:
/** Converts the passed VML measure string to 1/100 mm.
- @param rFilter See above.
+ @param rGraphicHelper See above.
@param rValue See above.
@param nRefValue See above.
@param bPixelX See above.
@param bDefaultAsPixel See above.
*/
static sal_Int32 decodeMeasureToHmm(
- const ::oox::core::FilterBase& rFilter,
+ const GraphicHelper& rGraphicHelper,
const ::rtl::OUString& rValue,
sal_Int32 nRefValue,
bool bPixelX,
@@ -147,7 +150,8 @@ struct StrokeModel
/** Writes the properties to the passed property map. */
void pushToPropMap(
PropertyMap& rPropMap,
- const ::oox::core::FilterBase& rFilter ) const;
+ ModelObjectHelper& rModelObjectHelper,
+ const GraphicHelper& rGraphicHelper ) const;
};
// ============================================================================
@@ -172,7 +176,8 @@ struct FillModel
/** Writes the properties to the passed property map. */
void pushToPropMap(
PropertyMap& rPropMap,
- const ::oox::core::FilterBase& rFilter ) const;
+ ModelObjectHelper& rModelObjectHelper,
+ const GraphicHelper& rGraphicHelper ) const;
};
// ============================================================================
diff --git a/oox/inc/oox/xls/biffhelper.hxx b/oox/inc/oox/xls/biffhelper.hxx
index f425b983ada2..b4f36c113c3d 100644
--- a/oox/inc/oox/xls/biffhelper.hxx
+++ b/oox/inc/oox/xls/biffhelper.hxx
@@ -493,6 +493,8 @@ const sal_uInt16 BIFF_ID_TOPMARGIN = 0x0028;
const sal_uInt16 BIFF_ID_TXO = 0x01B6;
const sal_uInt16 BIFF_ID_UNCALCED = 0x005E;
const sal_uInt16 BIFF_ID_USESELFS = 0x0160;
+const sal_uInt16 BIFF_ID_VBAPROJECT = 0x00D3;
+const sal_uInt16 BIFF_ID_VBAPROJECTEMPTY = 0x01BD;
const sal_uInt16 BIFF_ID_VCENTER = 0x0084;
const sal_uInt16 BIFF_ID_VERPAGEBREAKS = 0x001A;
const sal_uInt16 BIFF_ID_WINDOW1 = 0x003D;
diff --git a/oox/inc/oox/xls/excelfilter.hxx b/oox/inc/oox/xls/excelfilter.hxx
index 5da8b50d7f92..b5d7a97f33b5 100644
--- a/oox/inc/oox/xls/excelfilter.hxx
+++ b/oox/inc/oox/xls/excelfilter.hxx
@@ -34,22 +34,23 @@
namespace oox {
namespace xls {
-// ============================================================================
+class WorkbookData;
-class WorkbookHelper;
+// ============================================================================
class ExcelFilterBase
{
+public:
+ void registerWorkbookData( WorkbookData& rData );
+ WorkbookData& getWorkbookData() const;
+ void unregisterWorkbookData();
+
protected:
explicit ExcelFilterBase();
virtual ~ExcelFilterBase();
- void setWorkbookHelper( WorkbookHelper& rHelper );
- WorkbookHelper& getWorkbookHelper() const;
- void clearWorkbookHelper();
-
private:
- WorkbookHelper* mpHelper; /// Nonowning pointer to helper base.
+ WorkbookData* mpData;
};
// ============================================================================
@@ -64,15 +65,13 @@ public:
virtual bool importDocument() throw();
virtual bool exportDocument() throw();
- virtual sal_Int32 getSchemeColor( sal_Int32 nToken ) const;
- virtual sal_Int32 getPaletteColor( sal_Int32 nPaletteIdx ) const;
-
virtual const ::oox::drawingml::Theme* getCurrentTheme() const;
virtual ::oox::vml::Drawing* getVmlDrawing();
virtual const ::oox::drawingml::table::TableStyleListPtr getTableStyles();
virtual ::oox::drawingml::chart::ChartConverter& getChartConverter();
private:
+ virtual GraphicHelper* implCreateGraphicHelper() const;
virtual ::rtl::OUString implGetImplementationName() const;
};
@@ -88,9 +87,8 @@ public:
virtual bool importDocument() throw();
virtual bool exportDocument() throw();
- virtual sal_Int32 getPaletteColor( sal_Int32 nPaletteIdx ) const;
-
private:
+ virtual GraphicHelper* implCreateGraphicHelper() const;
virtual ::rtl::OUString implGetImplementationName() const;
};
diff --git a/oox/inc/oox/xls/excelvbaproject.hxx b/oox/inc/oox/xls/excelvbaproject.hxx
new file mode 100755
index 000000000000..6a517d13cd88
--- /dev/null
+++ b/oox/inc/oox/xls/excelvbaproject.hxx
@@ -0,0 +1,73 @@
+/*************************************************************************
+ *
+ * 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.
+ *
+ ************************************************************************/
+
+#ifndef OOX_XLS_EXCELVBAPROJECT_HXX
+#define OOX_XLS_EXCELVBAPROJECT_HXX
+
+#include "oox/ole/vbaproject.hxx"
+#include "oox/dllapi.h"
+
+namespace com { namespace sun { namespace star {
+ namespace sheet { class XSpreadsheetDocument; }
+} } }
+
+namespace oox {
+namespace xls {
+
+// ============================================================================
+
+/** Special implementation of the VBA project for the Excel filters. */
+class OOX_DLLPUBLIC VbaProject : public ::oox::ole::VbaProject
+{
+public:
+ explicit VbaProject(
+ const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& rxGlobalFactory,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XSpreadsheetDocument >& rxDocument );
+
+ /** Attaches all document and sheet events to existing VBA macros. */
+ void attachToEvents();
+
+private:
+ /** Attaches VBA macros to all supported document events. */
+ void attachToDocumentEvents( const ::rtl::OUString& rCodeName );
+
+ /** Attaches VBA macros to all supported sheet events. */
+ void attachToSheetEvents(
+ const ::com::sun::star::uno::Reference< ::com::sun::star::document::XEventsSupplier >& rxEventsSupp,
+ const ::rtl::OUString& rCodeName );
+
+private:
+ ::com::sun::star::uno::Reference< ::com::sun::star::sheet::XSpreadsheetDocument >
+ mxDocument;
+};
+
+// ============================================================================
+
+} // namespace xls
+} // namespace oox
+
+#endif
diff --git a/oox/inc/oox/xls/stylesbuffer.hxx b/oox/inc/oox/xls/stylesbuffer.hxx
index 7eb00d4bd57d..4fa9c964108e 100644
--- a/oox/inc/oox/xls/stylesbuffer.hxx
+++ b/oox/inc/oox/xls/stylesbuffer.hxx
@@ -35,6 +35,7 @@
#include <com/sun/star/table/CellVertJustify.hpp>
#include <com/sun/star/table/TableBorder.hpp>
#include "oox/helper/containerhelper.hxx"
+#include "oox/helper/graphichelper.hxx"
#include "oox/drawingml/color.hxx"
#include "oox/xls/numberformatsbuffer.hxx"
@@ -78,6 +79,22 @@ const sal_Int8 API_ESCAPEHEIGHT_DEFAULT = 58; /// Relative character h
// ============================================================================
+/** Special implementation of the GraphicHelper for Excel palette and scheme
+ colors.
+ */
+class ExcelGraphicHelper : public GraphicHelper, public WorkbookHelper
+{
+public:
+ explicit ExcelGraphicHelper( const WorkbookHelper& rHelper );
+
+ /** Derived classes may implement to resolve a scheme color from the passed XML token identifier. */
+ virtual sal_Int32 getSchemeColor( sal_Int32 nToken ) const;
+ /** Derived classes may implement to resolve a palette index to an RGB color. */
+ virtual sal_Int32 getPaletteColor( sal_Int32 nPaletteIdx ) const;
+};
+
+// ============================================================================
+
class Color : public ::oox::drawingml::Color
{
public:
@@ -205,7 +222,7 @@ struct ApiScriptFontName
{
::rtl::OUString maName; /// Font name.
sal_Int16 mnFamily; /// Font family.
- sal_Int16 mnCharSet; /// Font character set.
+ sal_Int16 mnTextEnc; /// Font text encoding.
explicit ApiScriptFontName();
};
diff --git a/oox/inc/oox/xls/workbookhelper.hxx b/oox/inc/oox/xls/workbookhelper.hxx
index 90c0f33c3c50..0ff8c0f9d3e5 100644
--- a/oox/inc/oox/xls/workbookhelper.hxx
+++ b/oox/inc/oox/xls/workbookhelper.hxx
@@ -29,9 +29,8 @@
#define OOX_XLS_WORKBOOKHELPER_HXX
#include <boost/shared_ptr.hpp>
-#include <osl/time.h>
#include <rtl/ref.hxx>
-#include <com/sun/star/uno/Reference.hxx>
+#include "oox/helper/storagebase.hxx"
#include "oox/xls/biffhelper.hxx"
namespace com { namespace sun { namespace star {
@@ -72,87 +71,8 @@ namespace oox { namespace drawingml {
namespace oox {
namespace xls {
-// DEBUG ======================================================================
-
-// Set this define to 1 to show the load/save time of a document in an assertion (nonpro only).
-#define OOX_SHOW_LOADSAVE_TIME 0
-
-// ----------------------------------------------------------------------------
-
-#define OOX_LOADSAVE_TIMER( eTimerType ) (void)0
-
-#if OSL_DEBUG_LEVEL > 0
-namespace dbg {
-
-// ----------------------------------------------------------------------------
-
-#if OOX_SHOW_LOADSAVE_TIME > 0
-
-enum TimerType
-{
- TIMER_IMPORTFORMULA,
- TIMER_IMPORTSHEETFRAGMENT,
- TIMER_ONCREATESHEETCONTEXT,
- TIMER_IMPORTROW,
- TIMER_CONVERTROWFORMAT,
- TIMER_CONVERTCOLUMNFORMAT,
- TIMER_IMPORTCELL,
- TIMER_ONENDSHEETELEMENT,
- TIMER_SETCELL,
- TIMER_SETCELLFORMAT,
- TIMER_MERGECELLFORMAT,
- TIMER_WRITECELLPROPERTIES,
- TIMER_FINALIZESHEETDATA,
- TIMER_FINALIZEDRAWING,
- TIMER_FINALIZEBOOKDATA,
-
- // TIMER_TOTAL must be the last entry!
- TIMER_TOTAL
-};
-
-// ----------------------------------------------------------------------------
-
-struct TimeCount;
-
-class Timer
-{
-public:
- explicit Timer( TimeCount& rTimeCount );
- ~Timer();
-private:
- TimeCount& mrTimeCount;
- TimeValue maStartTime;
-};
-
-// ----------------------------------------------------------------------------
-
-#undef OOX_LOADSAVE_TIMER
-#define OOX_LOADSAVE_TIMER( TimerType ) ::oox::xls::dbg::Timer aDbgTimer##TimerType( getTimeCount( ::oox::xls::dbg::TIMER_##TimerType ) )
-
-#endif
-
-// ----------------------------------------------------------------------------
-
-struct WorkbookData;
-
-class WorkbookHelper
-{
-protected:
- explicit WorkbookHelper( WorkbookData& rBookData );
- explicit WorkbookHelper( const WorkbookHelper& rCopy );
- virtual ~WorkbookHelper();
-#if OOX_SHOW_LOADSAVE_TIME > 0
-public:
- TimeCount& getTimeCount( TimerType eType ) const;
-#endif
-private:
- WorkbookData& mrDbgBookData;
-};
-
-// ----------------------------------------------------------------------------
-
-} // namespace dbg
-#endif
+class ExcelFilter;
+class ExcelBiffFilter;
// ============================================================================
@@ -201,14 +121,15 @@ class BiffCodecHelper;
object of type WorkbookData containing global workbook settings, buffers,
converters, etc. Nearly all classes in this filter implementation are
derived directly or indirectly from this class.
+
+ This class contains just a simple reference to the WorkbookData object to
+ prevent circular references, as the WorkbookData object contains a lot of
+ objects derived from this class.
*/
class WorkbookHelper
-#if OSL_DEBUG_LEVEL > 0
- : public dbg::WorkbookHelper
-#endif
{
public:
- /*implicit*/ WorkbookHelper( WorkbookData& rBookData );
+ inline /*implicit*/ WorkbookHelper( WorkbookData& rBookData ) : mrBookData( rBookData ) {}
virtual ~WorkbookHelper();
// filter -----------------------------------------------------------------
@@ -229,6 +150,8 @@ public:
/** Sets the index of the current sheet in the Calc document. */
void setCurrentSheetIndex( sal_Int16 nSheet );
+ /** Sets the VBA project storage. */
+ void setVbaProjectStorage( const StorageRef& rxVbaPrjStrg );
/** Final conversion after importing the workbook. */
void finalizeWorkbookImport();
@@ -334,7 +257,7 @@ public:
/** Returns the page and print settings converter. */
PageSettingsConverter& getPageSettingsConverter() const;
- // OOX specific -----------------------------------------------------------
+ // OOX specific (MUST NOT be called in BIFF filter) -----------------------
/** Returns the base OOX filter object.
Must not be called, if current filter is not the OOX filter. */
@@ -344,7 +267,7 @@ public:
the full path to the fragment stream. */
bool importOoxFragment( const ::rtl::Reference< ::oox::core::FragmentHandler >& rxHandler );
- // BIFF specific ----------------------------------------------------------
+ // BIFF specific (MUST NOT be called in OOX filter) -----------------------
/** Returns the base BIFF filter object. */
::oox::core::BinaryFilterBase& getBiffFilter() const;
@@ -392,8 +315,8 @@ struct WorkbookDataOwner
class WorkbookHelperRoot : private prv::WorkbookDataOwner, public WorkbookHelper
{
public:
- explicit WorkbookHelperRoot( ::oox::core::XmlFilterBase& rFilter );
- explicit WorkbookHelperRoot( ::oox::core::BinaryFilterBase& rFilter, BiffType eBiff );
+ explicit WorkbookHelperRoot( ExcelFilter& rFilter );
+ explicit WorkbookHelperRoot( ExcelBiffFilter& rFilter, BiffType eBiff );
/** Returns true, if this helper refers to a valid document. */
bool isValid() const;
@@ -409,4 +332,3 @@ private:
} // namespace oox
#endif
-
diff --git a/oox/inc/oox/xls/worksheetsettings.hxx b/oox/inc/oox/xls/worksheetsettings.hxx
index c96f12605911..17e22dc5342c 100644
--- a/oox/inc/oox/xls/worksheetsettings.hxx
+++ b/oox/inc/oox/xls/worksheetsettings.hxx
@@ -120,6 +120,8 @@ public:
void importPassword( BiffInputStream& rStrm );
/** Imports protection settings from the SHEETPROTECTION record. */
void importSheetProtection( BiffInputStream& rStrm );
+ /** Imports the VBA code module name from the CODENAME record. */
+ void importCodeName( BiffInputStream& rStrm );
/** Imports phonetic settings from the PHONETICPR record. */
void importPhoneticPr( BiffInputStream& rStrm );
diff --git a/oox/prj/build.lst b/oox/prj/build.lst
index a1dfa584543c..345c72e00558 100644
--- a/oox/prj/build.lst
+++ b/oox/prj/build.lst
@@ -1,4 +1,4 @@
-oox oox : vos cppu cppuhelper comphelper sal offapi sax basegfx tools vcl BOOST:boost OPENSSL:openssl NULL
+oox oox : vos cppu cppuhelper comphelper sal offapi sax basegfx xmlscript tools vcl BOOST:boost OPENSSL:openssl NULL
oox oox usr1 - all oox_mkout NULL
oox oox\prj get - all oox_prj NULL
oox oox\source\token nmake - all oox_token NULL
diff --git a/oox/prj/d.lst b/oox/prj/d.lst
index 2c9d8d5bae74..482a270926a3 100644
--- a/oox/prj/d.lst
+++ b/oox/prj/d.lst
@@ -4,7 +4,9 @@ mkdir: %_DEST%\inc%_EXT%\oox\core
mkdir: %_DEST%\inc%_EXT%\oox\drawingml
mkdir: %_DEST%\inc%_EXT%\oox\drawingml\chart
mkdir: %_DEST%\inc%_EXT%\oox\drawingml\table
+mkdir: %_DEST%\inc%_EXT%\oox\ole
mkdir: %_DEST%\inc%_EXT%\oox\vml
+mkdir: %_DEST%\inc%_EXT%\oox\xls
..\%__SRC%\misc\*.map %_DEST%\bin%_EXT%\*.map
..\%__SRC%\lib\ixo.lib %_DEST%\lib%_EXT%\ixo.lib
@@ -22,6 +24,7 @@ mkdir: %_DEST%\inc%_EXT%\oox\vml
..\inc\oox\dllapi.h %_DEST%\inc%_EXT%\oox\dllapi.h
..\inc\oox\helper\binarystreambase.hxx %_DEST%\inc%_EXT%\oox\helper\binarystreambase.hxx
..\inc\oox\helper\helper.hxx %_DEST%\inc%_EXT%\oox\helper\helper.hxx
+..\inc\oox\helper\containerhelper.hxx %_DEST%\inc%_EXT%\oox\helper\containerhelper.hxx
..\inc\oox\helper\storagebase.hxx %_DEST%\inc%_EXT%\oox\helper\storagebase.hxx
..\inc\oox\helper\zipstorage.hxx %_DEST%\inc%_EXT%\oox\helper\zipstorage.hxx
..\inc\oox\core\filterbase.hxx %_DEST%\inc%_EXT%\oox\core\filterbase.hxx
@@ -30,8 +33,10 @@ mkdir: %_DEST%\inc%_EXT%\oox\vml
..\inc\oox\core\xmlfilterbase.hxx %_DEST%\inc%_EXT%\oox\core\xmlfilterbase.hxx
..\inc\oox\drawingml\chart\chartconverter.hxx %_DEST%\inc%_EXT%\oox\drawingml\chart\chartconverter.hxx
..\inc\oox\drawingml\table\tablestylelist.hxx %_DEST%\inc%_EXT%\oox\drawingml\table\tablestylelist.hxx
+..\inc\oox\ole\vbaproject.hxx %_DEST%\inc%_EXT%\oox\ole\vbaproject.hxx
..\inc\oox\vml\vmldrawing.hxx %_DEST%\inc%_EXT%\oox\vml\vmldrawing.hxx
..\inc\oox\vml\vmlshape.hxx %_DEST%\inc%_EXT%\oox\vml\vmlshape.hxx
+..\inc\oox\xls\excelvbaproject.hxx %_DEST%\inc%_EXT%\oox\xls\excelvbaproject.hxx
dos: sh -c "if test %OS% = MACOSX; then create-bundle %_DEST%\lib%_EXT%\*.dylib; fi"
diff --git a/oox/source/core/binaryfilterbase.cxx b/oox/source/core/binaryfilterbase.cxx
index 1dd2e0e9086c..f308f02ac9dc 100644
--- a/oox/source/core/binaryfilterbase.cxx
+++ b/oox/source/core/binaryfilterbase.cxx
@@ -26,7 +26,7 @@
************************************************************************/
#include "oox/core/binaryfilterbase.hxx"
-#include "oox/helper/olestorage.hxx"
+#include "oox/ole/olestorage.hxx"
using ::rtl::OUString;
using ::com::sun::star::uno::Reference;
@@ -52,12 +52,12 @@ BinaryFilterBase::~BinaryFilterBase()
StorageRef BinaryFilterBase::implCreateStorage( const Reference< XInputStream >& rxInStream ) const
{
- return StorageRef( new OleStorage( getGlobalFactory(), rxInStream, true ) );
+ return StorageRef( new ::oox::ole::OleStorage( getGlobalFactory(), rxInStream, true ) );
}
StorageRef BinaryFilterBase::implCreateStorage( const Reference< XStream >& rxOutStream ) const
{
- return StorageRef( new OleStorage( getGlobalFactory(), rxOutStream, true ) );
+ return StorageRef( new ::oox::ole::OleStorage( getGlobalFactory(), rxOutStream, true ) );
}
// ============================================================================
diff --git a/oox/source/core/filterbase.cxx b/oox/source/core/filterbase.cxx
index 07c31736e9e7..902784cafe80 100755
--- a/oox/source/core/filterbase.cxx
+++ b/oox/source/core/filterbase.cxx
@@ -27,8 +27,6 @@
#include "oox/core/filterbase.hxx"
#include <set>
-#include <com/sun/star/awt/XDevice.hpp>
-#include <com/sun/star/frame/XFramesSupplier.hpp>
#include <com/sun/star/frame/XModel.hpp>
#include <com/sun/star/task/XStatusIndicator.hpp>
#include <com/sun/star/task/XInteractionHandler.hpp>
@@ -57,10 +55,7 @@ using ::com::sun::star::lang::IllegalArgumentException;
using ::com::sun::star::lang::XMultiServiceFactory;
using ::com::sun::star::lang::XComponent;
using ::com::sun::star::beans::PropertyValue;
-using ::com::sun::star::awt::DeviceInfo;
-using ::com::sun::star::awt::XDevice;
using ::com::sun::star::frame::XFrame;
-using ::com::sun::star::frame::XFramesSupplier;
using ::com::sun::star::frame::XModel;
using ::com::sun::star::io::XInputStream;
using ::com::sun::star::io::XOutputStream;
@@ -139,12 +134,10 @@ struct FilterBaseImpl
typedef ::boost::shared_ptr< ModelObjectHelper > ModelObjHelperRef;
typedef ::boost::shared_ptr< OleObjectHelper > OleObjHelperRef;
typedef ::std::map< OUString, Reference< XGraphic > > EmbeddedGraphicMap;
- typedef ::std::map< sal_Int32, sal_Int32 > SystemPalette;
FilterDirection meDirection;
SequenceAsHashMap maArguments;
MediaDescriptor maMediaDesc;
- DeviceInfo maDeviceInfo;
OUString maFileUrl;
StorageRef mxStorage;
@@ -152,11 +145,11 @@ struct FilterBaseImpl
ModelObjHelperRef mxModelObjHelper; /// Tables to create new named drawing objects.
OleObjHelperRef mxOleObjHelper; /// OLE object handling.
EmbeddedGraphicMap maEmbeddedGraphics; /// Maps all imported embedded graphics by their path.
- SystemPalette maSystemPalette; /// Maps system colors (XML tokens) to RGB color values.
Reference< XMultiServiceFactory > mxGlobalFactory;
Reference< XModel > mxModel;
Reference< XMultiServiceFactory > mxModelFactory;
+ Reference< XFrame > mxTargetFrame;
Reference< XInputStream > mxInStream;
Reference< XStream > mxOutStream;
Reference< XStatusIndicator > mxStatusIndicator;
@@ -178,53 +171,6 @@ FilterBaseImpl::FilterBaseImpl( const Reference< XMultiServiceFactory >& rxGloba
mxGlobalFactory( rxGlobalFactory )
{
OSL_ENSURE( mxGlobalFactory.is(), "FilterBaseImpl::FilterBaseImpl - missing service factory" );
- if( mxGlobalFactory.is() )
- {
- // get the metric of the output device
- try
- {
- Reference< XFramesSupplier > xFramesSupp( mxGlobalFactory->createInstance( CREATE_OUSTRING( "com.sun.star.frame.Desktop" ) ), UNO_QUERY_THROW );
- Reference< XFrame > xFrame( xFramesSupp->getActiveFrame(), UNO_SET_THROW );
- Reference< XDevice > xDevice( xFrame->getContainerWindow(), UNO_QUERY_THROW );
- maDeviceInfo = xDevice->getInfo();
- }
- catch( Exception& )
- {
- OSL_ENSURE( false, "FilterBaseImpl::FilterBaseImpl - cannot get output device info" );
- }
- }
-
- //! TODO: get colors from system
- maSystemPalette[ XML_3dDkShadow ] = 0x716F64;
- maSystemPalette[ XML_3dLight ] = 0xF1EFE2;
- maSystemPalette[ XML_activeBorder ] = 0xD4D0C8;
- maSystemPalette[ XML_activeCaption ] = 0x0054E3;
- maSystemPalette[ XML_appWorkspace ] = 0x808080;
- maSystemPalette[ XML_background ] = 0x004E98;
- maSystemPalette[ XML_btnFace ] = 0xECE9D8;
- maSystemPalette[ XML_btnHighlight ] = 0xFFFFFF;
- maSystemPalette[ XML_btnShadow ] = 0xACA899;
- maSystemPalette[ XML_btnText ] = 0x000000;
- maSystemPalette[ XML_captionText ] = 0xFFFFFF;
- maSystemPalette[ XML_gradientActiveCaption ] = 0x3D95FF;
- maSystemPalette[ XML_gradientInactiveCaption ] = 0xD8E4F8;
- maSystemPalette[ XML_grayText ] = 0xACA899;
- maSystemPalette[ XML_highlight ] = 0x316AC5;
- maSystemPalette[ XML_highlightText ] = 0xFFFFFF;
- maSystemPalette[ XML_hotLight ] = 0x000080;
- maSystemPalette[ XML_inactiveBorder ] = 0xD4D0C8;
- maSystemPalette[ XML_inactiveCaption ] = 0x7A96DF;
- maSystemPalette[ XML_inactiveCaptionText ] = 0xD8E4F8;
- maSystemPalette[ XML_infoBk ] = 0xFFFFE1;
- maSystemPalette[ XML_infoText ] = 0x000000;
- maSystemPalette[ XML_menu ] = 0xFFFFFF;
- maSystemPalette[ XML_menuBar ] = 0xECE9D8;
- maSystemPalette[ XML_menuHighlight ] = 0x316AC5;
- maSystemPalette[ XML_menuText ] = 0x000000;
- maSystemPalette[ XML_scrollBar ] = 0xD4D0C8;
- maSystemPalette[ XML_window ] = 0xFFFFFF;
- maSystemPalette[ XML_windowFrame ] = 0x000000;
- maSystemPalette[ XML_windowText ] = 0x000000;
}
void FilterBaseImpl::setDocumentModel( const Reference< XComponent >& rxComponent )
@@ -317,6 +263,11 @@ const Reference< XMultiServiceFactory >& FilterBase::getModelFactory() const
return mxImpl->mxModelFactory;
}
+const Reference< XFrame >& FilterBase::getTargetFrame() const
+{
+ return mxImpl->mxTargetFrame;
+}
+
const Reference< XStatusIndicator >& FilterBase::getStatusIndicator() const
{
return mxImpl->mxStatusIndicator;
@@ -404,9 +355,9 @@ StorageRef FilterBase::getStorage() const
return mxImpl->mxStorage;
}
-StorageRef FilterBase::openSubStorage( const OUString& rStorageName, bool bCreate ) const
+StorageRef FilterBase::openSubStorage( const OUString& rStorageName, bool bCreateMissing ) const
{
- return mxImpl->mxStorage->openSubStorage( rStorageName, bCreate );
+ return mxImpl->mxStorage->openSubStorage( rStorageName, bCreateMissing );
}
Reference< XInputStream > FilterBase::openInputStream( const OUString& rStreamName ) const
@@ -429,7 +380,7 @@ void FilterBase::commitStorage() const
GraphicHelper& FilterBase::getGraphicHelper() const
{
if( !mxImpl->mxGraphicHelper )
- mxImpl->mxGraphicHelper.reset( new GraphicHelper( mxImpl->mxGlobalFactory ) );
+ mxImpl->mxGraphicHelper.reset( implCreateGraphicHelper() );
return *mxImpl->mxGraphicHelper;
}
@@ -447,42 +398,6 @@ OleObjectHelper& FilterBase::getOleObjectHelper() const
return *mxImpl->mxOleObjHelper;
}
-const DeviceInfo& FilterBase::getDeviceInfo() const
-{
- return mxImpl->maDeviceInfo;
-}
-
-sal_Int32 FilterBase::convertScreenPixelX( double fPixelX ) const
-{
- return (mxImpl->maDeviceInfo.PixelPerMeterX > 0) ?
- static_cast< sal_Int32 >( (fPixelX * 100000.0) / mxImpl->maDeviceInfo.PixelPerMeterX ) : 0;
-}
-
-sal_Int32 FilterBase::convertScreenPixelY( double fPixelY ) const
-{
- return (mxImpl->maDeviceInfo.PixelPerMeterY > 0) ?
- static_cast< sal_Int32 >( (fPixelY * 100000.0) / mxImpl->maDeviceInfo.PixelPerMeterY ) : 0;
-}
-
-sal_Int32 FilterBase::getSystemColor( sal_Int32 nToken, sal_Int32 nDefaultRgb ) const
-{
- FilterBaseImpl::SystemPalette::const_iterator aIt = mxImpl->maSystemPalette.find( nToken );
- OSL_ENSURE( aIt != mxImpl->maSystemPalette.end(), "FilterBase::getSystemColor - invalid token identifier" );
- return (aIt == mxImpl->maSystemPalette.end()) ? nDefaultRgb : aIt->second;
-}
-
-sal_Int32 FilterBase::getSchemeColor( sal_Int32 /*nToken*/ ) const
-{
- OSL_ENSURE( false, "FilterBase::getSchemeColor - scheme colors not implemented" );
- return API_RGB_TRANSPARENT;
-}
-
-sal_Int32 FilterBase::getPaletteColor( sal_Int32 /*nPaletteIdx*/ ) const
-{
- OSL_ENSURE( false, "FilterBase::getPaletteColor - palette colors not implemented" );
- return API_RGB_TRANSPARENT;
-}
-
OUString FilterBase::requestPassword( ::comphelper::IDocPasswordVerifier& rVerifier ) const
{
::std::vector< OUString > aDefaultPasswords;
@@ -504,7 +419,7 @@ bool FilterBase::importBinaryData( StreamDataSequence& orDataSeq, const OUString
// copy the entire stream to the passed sequence
SequenceOutputStream aOutStrm( orDataSeq );
- aOutStrm.copyStream( aInStrm );
+ aInStrm.copyToStream( aOutStrm );
return true;
}
@@ -664,10 +579,16 @@ void FilterBase::setMediaDescriptor( const Sequence< PropertyValue >& rMediaDesc
}
mxImpl->maFileUrl = mxImpl->maMediaDesc.getUnpackedValueOrDefault( MediaDescriptor::PROP_URL(), OUString() );
+ mxImpl->mxTargetFrame = mxImpl->maMediaDesc.getUnpackedValueOrDefault( MediaDescriptor::PROP_FRAME(), Reference< XFrame >() );
mxImpl->mxStatusIndicator = mxImpl->maMediaDesc.getUnpackedValueOrDefault( MediaDescriptor::PROP_STATUSINDICATOR(), Reference< XStatusIndicator >() );
mxImpl->mxInteractionHandler = mxImpl->maMediaDesc.getUnpackedValueOrDefault( MediaDescriptor::PROP_INTERACTIONHANDLER(), Reference< XInteractionHandler >() );
}
+GraphicHelper* FilterBase::implCreateGraphicHelper() const
+{
+ // default: return base implementation without any special behaviour
+ return new GraphicHelper( mxImpl->mxGlobalFactory, mxImpl->mxTargetFrame );
+}
// ============================================================================
diff --git a/oox/source/core/filterdetect.cxx b/oox/source/core/filterdetect.cxx
index 3997d0b9af6d..12cafc48305a 100644
--- a/oox/source/core/filterdetect.cxx
+++ b/oox/source/core/filterdetect.cxx
@@ -35,10 +35,10 @@
#include "oox/helper/attributelist.hxx"
#include "oox/helper/binaryinputstream.hxx"
#include "oox/helper/binaryoutputstream.hxx"
-#include "oox/helper/olestorage.hxx"
#include "oox/helper/zipstorage.hxx"
#include "oox/core/fasttokenhandler.hxx"
#include "oox/core/namespaces.hxx"
+#include "oox/ole/olestorage.hxx"
using ::rtl::OUString;
using ::com::sun::star::uno::Exception;
@@ -485,7 +485,7 @@ Reference< XInputStream > FilterDetect::extractUnencryptedPackage( MediaDescript
}
// try to decrypt an encrypted OLE package
- OleStorage aOleStorage( mxFactory, xInStrm, false );
+ ::oox::ole::OleStorage aOleStorage( mxFactory, xInStrm, false );
if( aOleStorage.isStorage() ) try
{
// open the required input streams in the encrypted package
diff --git a/oox/source/core/recordparser.cxx b/oox/source/core/recordparser.cxx
index b1749ae7be07..8f0de9c2894a 100644
--- a/oox/source/core/recordparser.cxx
+++ b/oox/source/core/recordparser.cxx
@@ -277,7 +277,6 @@ void RecordParser::parseStream( const RecordInputSource& rInputSource ) throw( S
// try to leave a context, there may be other incomplete contexts on the stack
if( const RecordInfo* pEndRecInfo = getEndRecordInfo( nRecId ) )
{
- (void)pEndRecInfo; // shut warning up in non-debug
// finalize contexts without record identifier for context end
while( !mxStack->empty() && !mxStack->hasCurrentEndRecId() )
mxStack->popContext();
@@ -288,7 +287,7 @@ void RecordParser::parseStream( const RecordInputSource& rInputSource ) throw( S
if( xCurrContext.is() )
{
// context end record may contain some data, handle it as simple record
- aRecStrm.seek( 0 );
+ aRecStrm.seekToStart();
xCurrContext->startRecord( nRecId, aRecStrm );
xCurrContext->endRecord( nRecId );
}
@@ -303,7 +302,7 @@ void RecordParser::parseStream( const RecordInputSource& rInputSource ) throw( S
ContextHandlerRef xCurrContext = mxStack->getCurrentContext();
if( xCurrContext.is() )
{
- aRecStrm.seek( 0 );
+ aRecStrm.seekToStart();
xCurrContext = xCurrContext->createRecordContext( nRecId, aRecStrm );
}
// track all context identifiers on the stack (do not push simple records)
@@ -314,7 +313,7 @@ void RecordParser::parseStream( const RecordInputSource& rInputSource ) throw( S
if( xCurrContext.is() )
{
// import the record
- aRecStrm.seek( 0 );
+ aRecStrm.seekToStart();
xCurrContext->startRecord( nRecId, aRecStrm );
// end simple records (context records are finished in ContextStack::popContext)
if( !pStartRecInfo )
diff --git a/oox/source/docprop/docprophandler.cxx b/oox/source/docprop/docprophandler.cxx
index da7daa9a058e..97453d5bddb0 100644
--- a/oox/source/docprop/docprophandler.cxx
+++ b/oox/source/docprop/docprophandler.cxx
@@ -179,7 +179,7 @@ uno::Sequence< ::rtl::OUString > OOXMLDocPropHandler::GetKeywordsSet( const ::rt
case (sal_Unicode)',':
case (sal_Unicode)';':
case (sal_Unicode)':':
- case (sal_Unicode)' ':
+ case (sal_Unicode)'\t':
// this is a delimiter
// unfortunately I did not find any specification for the possible delimiters
if ( aResult[nCounter].getLength() )
diff --git a/oox/source/drawingml/chart/chartdrawingfragment.cxx b/oox/source/drawingml/chart/chartdrawingfragment.cxx
index 9df064125457..fcc350b583c3 100644
--- a/oox/source/drawingml/chart/chartdrawingfragment.cxx
+++ b/oox/source/drawingml/chart/chartdrawingfragment.cxx
@@ -2,14 +2,10 @@
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
- * Copyright 2008 by Sun Microsystems, Inc.
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
*
* OpenOffice.org - a multi-platform office productivity suite
*
- * $RCSfile: chartdrawingfragment.cxx,v $
- *
- * $Revision: 1.1 $
- *
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
diff --git a/oox/source/drawingml/chart/objectformatter.cxx b/oox/source/drawingml/chart/objectformatter.cxx
index 08ca5f44bec3..5b898d4da6ed 100644
--- a/oox/source/drawingml/chart/objectformatter.cxx
+++ b/oox/source/drawingml/chart/objectformatter.cxx
@@ -847,7 +847,7 @@ sal_Int32 DetailFormatterBase::getPhColor( sal_Int32 nSeriesIdx ) const
Color aColor;
aColor.setSrgbClr( nPhClr );
aColor.addChartTintTransformation( fShadeTint );
- nPhClr = aColor.getColor( mrData.mrFilter );
+ nPhClr = aColor.getColor( mrData.mrFilter.getGraphicHelper() );
}
return nPhClr;
@@ -859,7 +859,7 @@ sal_Int32 DetailFormatterBase::getSchemeColor( sal_Int32 nColorToken, sal_Int32
aColor.setSchemeClr( nColorToken );
if( nModToken != XML_TOKEN_INVALID )
aColor.addTransformation( nModToken, nModValue );
- return aColor.getColor( mrData.mrFilter );
+ return aColor.getColor( mrData.mrFilter.getGraphicHelper() );
}
// ============================================================================
@@ -888,7 +888,7 @@ void LineFormatter::convertFormatting( PropertySet& rPropSet, const ModelRef< Sh
aLineProps.assignUsed( *mxAutoLine );
if( rxShapeProp.is() )
aLineProps.assignUsed( rxShapeProp->getLineProperties() );
- aLineProps.pushToPropSet( rPropSet, mrData.mrFilter, mrData.maModelObjHelper, mrLinePropIds, getPhColor( nSeriesIdx ) );
+ aLineProps.pushToPropSet( rPropSet, mrData.maModelObjHelper, mrData.mrFilter.getGraphicHelper(), mrLinePropIds, getPhColor( nSeriesIdx ) );
}
// ============================================================================
@@ -916,7 +916,7 @@ void FillFormatter::convertFormatting( PropertySet& rPropSet, const ModelRef< Sh
aFillProps.assignUsed( rxShapeProp->getFillProperties() );
if( pPicOptions )
lclConvertPictureOptions( aFillProps, *pPicOptions );
- aFillProps.pushToPropSet( rPropSet, mrData.mrFilter, mrData.maModelObjHelper, mrFillPropIds, 0, getPhColor( nSeriesIdx ) );
+ aFillProps.pushToPropSet( rPropSet, mrData.maModelObjHelper, mrData.mrFilter.getGraphicHelper(), mrFillPropIds, 0, getPhColor( nSeriesIdx ) );
}
// ============================================================================
diff --git a/oox/source/drawingml/clrschemecontext.cxx b/oox/source/drawingml/clrschemecontext.cxx
index d91f15c56e18..996ddef2ab0f 100644
--- a/oox/source/drawingml/clrschemecontext.cxx
+++ b/oox/source/drawingml/clrschemecontext.cxx
@@ -73,7 +73,7 @@ clrSchemeColorContext::clrSchemeColorContext( ContextHandler& rParent, ClrScheme
clrSchemeColorContext::~clrSchemeColorContext()
{
- mrClrScheme.setColor( mnColorToken, getColor( getFilter() ) );
+ mrClrScheme.setColor( mnColorToken, getColor( getFilter().getGraphicHelper() ) );
}
clrSchemeContext::clrSchemeContext( ContextHandler& rParent, ClrScheme& rClrScheme ) :
diff --git a/oox/source/drawingml/color.cxx b/oox/source/drawingml/color.cxx
index ebf62f17a01e..8653d787517d 100644
--- a/oox/source/drawingml/color.cxx
+++ b/oox/source/drawingml/color.cxx
@@ -30,8 +30,8 @@
#include <math.h>
#include "tokens.hxx"
#include "oox/helper/containerhelper.hxx"
+#include "oox/helper/graphichelper.hxx"
#include "oox/core/namespaces.hxx"
-#include "oox/core/filterbase.hxx"
#include "oox/drawingml/drawingmltypes.hxx"
using ::rtl::OUString;
@@ -350,7 +350,7 @@ void Color::clearTransparence()
mnAlpha = MAX_PERCENT;
}
-sal_Int32 Color::getColor( const ::oox::core::FilterBase& rFilter, sal_Int32 nPhClr ) const
+sal_Int32 Color::getColor( const GraphicHelper& rGraphicHelper, sal_Int32 nPhClr ) const
{
/* Special handling for theme style list placeholder colors (state
COLOR_PH), Color::getColor() may be called with different placeholder
@@ -368,10 +368,10 @@ sal_Int32 Color::getColor( const ::oox::core::FilterBase& rFilter, sal_Int32 nPh
case COLOR_CRGB: break; // nothing to do
case COLOR_HSL: break; // nothing to do
- case COLOR_SCHEME: setResolvedRgb( rFilter.getSchemeColor( mnC1 ) ); break;
- case COLOR_PALETTE: setResolvedRgb( rFilter.getPaletteColor( mnC1 ) ); break;
- case COLOR_SYSTEM: setResolvedRgb( rFilter.getSystemColor( mnC1, mnC2 ) ); break;
- case COLOR_PH: setResolvedRgb( nPhClr ); bIsPh = true; break;
+ case COLOR_SCHEME: setResolvedRgb( rGraphicHelper.getSchemeColor( mnC1 ) ); break;
+ case COLOR_PALETTE: setResolvedRgb( rGraphicHelper.getPaletteColor( mnC1 ) ); break;
+ case COLOR_SYSTEM: setResolvedRgb( rGraphicHelper.getSystemColor( mnC1, mnC2 ) ); break;
+ case COLOR_PH: setResolvedRgb( nPhClr ); bIsPh = true; break;
case COLOR_FINAL: return mnC1;
}
diff --git a/oox/source/drawingml/customshapeproperties.cxx b/oox/source/drawingml/customshapeproperties.cxx
index 28e84e72e2cc..4459c5936cfa 100644
--- a/oox/source/drawingml/customshapeproperties.cxx
+++ b/oox/source/drawingml/customshapeproperties.cxx
@@ -39,7 +39,6 @@
#include <com/sun/star/drawing/XEnhancedCustomShapeDefaulter.hpp>
using rtl::OUString;
-using namespace ::oox::core;
using namespace ::com::sun::star;
using namespace ::com::sun::star::uno;
using namespace ::com::sun::star::beans;
@@ -60,8 +59,8 @@ void CustomShapeProperties::apply( const CustomShapePropertiesPtr& /* rSourceCus
// not sure if this needs to be implemented
}
-void CustomShapeProperties::pushToPropSet( const ::oox::core::FilterBase& /* rFilterBase */,
- const Reference < XPropertySet >& xPropSet, const Reference < XShape > & xShape ) const
+void CustomShapeProperties::pushToPropSet(
+ const Reference < XPropertySet >& xPropSet, const Reference < XShape > & xShape ) const
{
if ( maShapePresetType.getLength() )
{
diff --git a/oox/source/drawingml/fillproperties.cxx b/oox/source/drawingml/fillproperties.cxx
index 0e4d56a6634b..168055935104 100644
--- a/oox/source/drawingml/fillproperties.cxx
+++ b/oox/source/drawingml/fillproperties.cxx
@@ -41,7 +41,6 @@
#include "oox/helper/modelobjecthelper.hxx"
#include "oox/helper/propertymap.hxx"
#include "oox/helper/propertyset.hxx"
-#include "oox/core/filterbase.hxx"
#include "oox/drawingml/drawingmltypes.hxx"
using namespace ::com::sun::star;
@@ -54,7 +53,6 @@ using ::com::sun::star::uno::Exception;
using ::com::sun::star::uno::UNO_QUERY;
using ::com::sun::star::uno::UNO_QUERY_THROW;
using ::com::sun::star::geometry::IntegerRectangle2D;
-using ::oox::core::FilterBase;
namespace oox {
namespace drawingml {
@@ -105,30 +103,26 @@ RectanglePoint lclGetRectanglePoint( sal_Int32 nToken )
return RectanglePoint_LEFT_TOP;
}
-const awt::Size lclGetOriginalSize( const FilterBase& rFilter, const Reference< XGraphic >& rxGraphic )
+const awt::Size lclGetOriginalSize( const GraphicHelper& rGraphicHelper, const Reference< XGraphic >& rxGraphic )
{
- awt::Size aSize100thMM( 0, 0 );
+ awt::Size aSizeHmm( 0, 0 );
try
{
Reference< beans::XPropertySet > xGraphicPropertySet( rxGraphic, UNO_QUERY_THROW );
- if( xGraphicPropertySet->getPropertyValue( CREATE_OUSTRING( "Size100thMM" ) ) >>= aSize100thMM )
+ if( xGraphicPropertySet->getPropertyValue( CREATE_OUSTRING( "Size100thMM" ) ) >>= aSizeHmm )
{
- if( !aSize100thMM.Width && !aSize100thMM.Height )
+ if( !aSizeHmm.Width && !aSizeHmm.Height )
{ // MAPMODE_PIXEL USED :-(
awt::Size aSourceSizePixel( 0, 0 );
if( xGraphicPropertySet->getPropertyValue( CREATE_OUSTRING( "SizePixel" ) ) >>= aSourceSizePixel )
- {
- aSize100thMM = awt::Size(
- rFilter.convertScreenPixelX( aSourceSizePixel.Width ),
- rFilter.convertScreenPixelY( aSourceSizePixel.Height ) );
- }
+ aSizeHmm = rGraphicHelper.convertScreenPixelToHmm( aSourceSizePixel );
}
}
}
catch( Exception& )
{
}
- return aSize100thMM;
+ return aSizeHmm;
}
} // namespace
@@ -221,8 +215,8 @@ Color FillProperties::getBestSolidColor() const
return aSolidColor;
}
-void FillProperties::pushToPropMap( PropertyMap& rPropMap, const FilterBase& rFilter,
- ModelObjectHelper& rModelObjHelper, const FillPropertyIds& rPropIds,
+void FillProperties::pushToPropMap( PropertyMap& rPropMap, ModelObjectHelper& rModelObjHelper,
+ const GraphicHelper& rGraphicHelper, const FillPropertyIds& rPropIds,
sal_Int32 nShapeRotation, sal_Int32 nPhClr ) const
{
if( moFillType.has() )
@@ -237,7 +231,7 @@ void FillProperties::pushToPropMap( PropertyMap& rPropMap, const FilterBase& rFi
case XML_solidFill:
if( maFillColor.isUsed() )
{
- rPropMap.setProperty( rPropIds[ FillColorId ], maFillColor.getColor( rFilter, nPhClr ) );
+ rPropMap.setProperty( rPropIds[ FillColorId ], maFillColor.getColor( rGraphicHelper, nPhClr ) );
if( maFillColor.hasTransparence() )
rPropMap.setProperty( rPropIds[ FillTransparenceId ], maFillColor.getTransparence() );
eFillStyle = FillStyle_SOLID;
@@ -256,8 +250,8 @@ void FillProperties::pushToPropMap( PropertyMap& rPropMap, const FilterBase& rFi
size_t nColorCount = maGradientProps.maGradientStops.size();
if( nColorCount > 1 )
{
- aGradient.StartColor = maGradientProps.maGradientStops.begin()->second.getColor( rFilter, nPhClr );
- aGradient.EndColor = maGradientProps.maGradientStops.rbegin()->second.getColor( rFilter, nPhClr );
+ aGradient.StartColor = maGradientProps.maGradientStops.begin()->second.getColor( rGraphicHelper, nPhClr );
+ aGradient.EndColor = maGradientProps.maGradientStops.rbegin()->second.getColor( rGraphicHelper, nPhClr );
}
// "rotate with shape" not set, or set to false -> do not rotate
@@ -288,7 +282,7 @@ void FillProperties::pushToPropMap( PropertyMap& rPropMap, const FilterBase& rFi
{
GradientFillProperties::GradientStopMap::const_iterator aIt = maGradientProps.maGradientStops.begin();
// API StartColor is inner color in axial gradient
- aGradient.StartColor = (++aIt)->second.getColor( rFilter, nPhClr );
+ aGradient.StartColor = (++aIt)->second.getColor( rGraphicHelper, nPhClr );
}
nDmlAngle = maGradientProps.moShadeAngle.get( 0 ) - nShapeRotation;
}
@@ -319,7 +313,7 @@ void FillProperties::pushToPropMap( PropertyMap& rPropMap, const FilterBase& rFi
{
// TODO: "rotate with shape" is not possible with our current core
- OUString aGraphicUrl = rFilter.getGraphicHelper().createGraphicObject( maBlipProps.mxGraphic );
+ OUString aGraphicUrl = rGraphicHelper.createGraphicObject( maBlipProps.mxGraphic );
if( aGraphicUrl.getLength() > 0 )
{
// push bitmap or named bitmap to property map
@@ -353,7 +347,7 @@ void FillProperties::pushToPropMap( PropertyMap& rPropMap, const FilterBase& rFi
RectanglePoint eRectPoint = lclGetRectanglePoint( maBlipProps.moTileAlign.get( XML_tl ) );
rPropMap.setProperty( rPropIds[ FillBitmapRectanglePointId ], eRectPoint );
- awt::Size aOriginalSize = lclGetOriginalSize( rFilter, maBlipProps.mxGraphic );
+ awt::Size aOriginalSize = lclGetOriginalSize( rGraphicHelper, maBlipProps.mxGraphic );
if( (aOriginalSize.Width > 0) && (aOriginalSize.Height > 0) )
{
// size of one bitmap tile (given as 1/1000 percent of bitmap size), convert to 1/100 mm
@@ -381,7 +375,7 @@ void FillProperties::pushToPropMap( PropertyMap& rPropMap, const FilterBase& rFi
Color aColor = getBestSolidColor();
if( aColor.isUsed() )
{
- rPropMap.setProperty( rPropIds[ FillColorId ], aColor.getColor( rFilter, nPhClr ) );
+ rPropMap.setProperty( rPropIds[ FillColorId ], aColor.getColor( rGraphicHelper, nPhClr ) );
if( aColor.hasTransparence() )
rPropMap.setProperty( rPropIds[ FillTransparenceId ], aColor.getTransparence() );
eFillStyle = FillStyle_SOLID;
@@ -400,12 +394,12 @@ void FillProperties::pushToPropMap( PropertyMap& rPropMap, const FilterBase& rFi
}
}
-void FillProperties::pushToPropSet( PropertySet& rPropSet, const FilterBase& rFilter,
- ModelObjectHelper& rModelObjHelper, const FillPropertyIds& rPropIds,
+void FillProperties::pushToPropSet( PropertySet& rPropSet, ModelObjectHelper& rModelObjHelper,
+ const GraphicHelper& rGraphicHelper, const FillPropertyIds& rPropIds,
sal_Int32 nShapeRotation, sal_Int32 nPhClr ) const
{
PropertyMap aPropMap;
- pushToPropMap( aPropMap, rFilter, rModelObjHelper, rPropIds, nShapeRotation, nPhClr );
+ pushToPropMap( aPropMap, rModelObjHelper, rGraphicHelper, rPropIds, nShapeRotation, nPhClr );
rPropSet.setProperties( aPropMap );
}
@@ -416,7 +410,7 @@ void GraphicProperties::assignUsed( const GraphicProperties& rSourceProps )
maBlipProps.assignUsed( rSourceProps.maBlipProps );
}
-void GraphicProperties::pushToPropMap( PropertyMap& rPropMap, const FilterBase& rFilter, sal_Int32 nPhClr ) const
+void GraphicProperties::pushToPropMap( PropertyMap& rPropMap, const GraphicHelper& rGraphicHelper, sal_Int32 nPhClr ) const
{
if( maBlipProps.mxGraphic.is() )
{
@@ -424,8 +418,8 @@ void GraphicProperties::pushToPropMap( PropertyMap& rPropMap, const FilterBase&
Reference< XGraphic > xGraphic = maBlipProps.mxGraphic;
if( maBlipProps.maColorChangeFrom.isUsed() && maBlipProps.maColorChangeTo.isUsed() )
{
- sal_Int32 nFromColor = maBlipProps.maColorChangeFrom.getColor( rFilter, nPhClr );
- sal_Int32 nToColor = maBlipProps.maColorChangeTo.getColor( rFilter, nPhClr );
+ sal_Int32 nFromColor = maBlipProps.maColorChangeFrom.getColor( rGraphicHelper, nPhClr );
+ sal_Int32 nToColor = maBlipProps.maColorChangeTo.getColor( rGraphicHelper, nPhClr );
if ( (nFromColor != nToColor) || maBlipProps.maColorChangeTo.hasTransparence() ) try
{
sal_Int16 nToTransparence = maBlipProps.maColorChangeTo.getTransparence();
@@ -438,7 +432,7 @@ void GraphicProperties::pushToPropMap( PropertyMap& rPropMap, const FilterBase&
}
}
- OUString aGraphicUrl = rFilter.getGraphicHelper().createGraphicObject( xGraphic );
+ OUString aGraphicUrl = rGraphicHelper.createGraphicObject( xGraphic );
if( aGraphicUrl.getLength() > 0 )
rPropMap[ PROP_GraphicURL ] <<= aGraphicUrl;
}
@@ -461,10 +455,10 @@ void GraphicProperties::pushToPropMap( PropertyMap& rPropMap, const FilterBase&
rPropMap[ PROP_AdjustContrast ] <<= nContrast;
}
-void GraphicProperties::pushToPropSet( PropertySet& rPropSet, const FilterBase& rFilter, sal_Int32 nPhClr ) const
+void GraphicProperties::pushToPropSet( PropertySet& rPropSet, const GraphicHelper& rGraphicHelper, sal_Int32 nPhClr ) const
{
PropertyMap aPropMap;
- pushToPropMap( aPropMap, rFilter, nPhClr );
+ pushToPropMap( aPropMap, rGraphicHelper, nPhClr );
rPropSet.setProperties( aPropMap );
}
diff --git a/oox/source/drawingml/fillpropertiesgroupcontext.cxx b/oox/source/drawingml/fillpropertiesgroupcontext.cxx
index 454222bc52e6..8adffb265240 100644
--- a/oox/source/drawingml/fillpropertiesgroupcontext.cxx
+++ b/oox/source/drawingml/fillpropertiesgroupcontext.cxx
@@ -270,12 +270,12 @@ Reference< XFastContextHandler > FillPropertiesContext::createFastChildContext(
{
switch( nElement )
{
- case A_TOKEN( noFill ): { rFillProps.moFillType = getToken( nElement ); return 0; };
- case A_TOKEN( solidFill ): { rFillProps.moFillType = getToken( nElement ); return new SolidFillContext( rParent, rxAttribs, rFillProps ); };
- case A_TOKEN( gradFill ): { rFillProps.moFillType = getToken( nElement ); return new GradientFillContext( rParent, rxAttribs, rFillProps.maGradientProps ); };
- case A_TOKEN( pattFill ): { rFillProps.moFillType = getToken( nElement ); return new PatternFillContext( rParent, rxAttribs, rFillProps.maPatternProps ); };
- case A_TOKEN( blipFill ): { rFillProps.moFillType = getToken( nElement ); return new BlipFillContext( rParent, rxAttribs, rFillProps.maBlipProps ); };
- case A_TOKEN( grpFill ): { rFillProps.moFillType = getToken( nElement ); return 0; }; // TODO
+ case A_TOKEN( noFill ): { rFillProps.moFillType = getToken( nElement ); return 0; };
+ case A_TOKEN( solidFill ): { rFillProps.moFillType = getToken( nElement ); return new SolidFillContext( rParent, rxAttribs, rFillProps ); };
+ case A_TOKEN( gradFill ): { rFillProps.moFillType = getToken( nElement ); return new GradientFillContext( rParent, rxAttribs, rFillProps.maGradientProps ); };
+ case A_TOKEN( pattFill ): { rFillProps.moFillType = getToken( nElement ); return new PatternFillContext( rParent, rxAttribs, rFillProps.maPatternProps ); };
+ case A_TOKEN( blipFill ): { rFillProps.moFillType = getToken( nElement ); return new BlipFillContext( rParent, rxAttribs, rFillProps.maBlipProps ); };
+ case A_TOKEN( grpFill ): { rFillProps.moFillType = getToken( nElement ); return 0; }; // TODO
}
return 0;
}
diff --git a/oox/source/drawingml/lineproperties.cxx b/oox/source/drawingml/lineproperties.cxx
index 4a9a0d04e1e5..9f23cf466d30 100644
--- a/oox/source/drawingml/lineproperties.cxx
+++ b/oox/source/drawingml/lineproperties.cxx
@@ -37,10 +37,10 @@
#include <com/sun/star/drawing/PolyPolygonBezierCoords.hpp>
#include "properties.hxx"
#include "tokens.hxx"
+#include "oox/helper/graphichelper.hxx"
#include "oox/helper/modelobjecthelper.hxx"
#include "oox/helper/propertymap.hxx"
#include "oox/helper/propertyset.hxx"
-#include "oox/core/filterbase.hxx"
#include "oox/core/namespaces.hxx"
#include "oox/drawingml/drawingmltypes.hxx"
@@ -52,7 +52,6 @@ using ::com::sun::star::uno::Any;
using ::com::sun::star::uno::Reference;
using ::com::sun::star::awt::Point;
using ::com::sun::star::container::XNameContainer;
-using ::oox::core::FilterBase;
namespace oox {
namespace drawingml {
@@ -395,8 +394,8 @@ void LineProperties::assignUsed( const LineProperties& rSourceProps )
moLineJoint.assignIfUsed( rSourceProps.moLineJoint );
}
-void LineProperties::pushToPropMap( PropertyMap& rPropMap, const FilterBase& rFilter,
- ModelObjectHelper& rModelObjHelper, const LinePropertyIds& rPropIds, sal_Int32 nPhClr ) const
+void LineProperties::pushToPropMap( PropertyMap& rPropMap, ModelObjectHelper& rModelObjHelper,
+ const GraphicHelper& rGraphicHelper, const LinePropertyIds& rPropIds, sal_Int32 nPhClr ) const
{
// line fill type must exist, otherwise ignore other properties
if( maLineFill.moFillType.has() )
@@ -453,7 +452,7 @@ void LineProperties::pushToPropMap( PropertyMap& rPropMap, const FilterBase& rFi
Color aLineColor = maLineFill.getBestSolidColor();
if( aLineColor.isUsed() )
{
- rPropMap.setProperty( rPropIds[ LineColorId ], aLineColor.getColor( rFilter, nPhClr ) );
+ rPropMap.setProperty( rPropIds[ LineColorId ], aLineColor.getColor( rGraphicHelper, nPhClr ) );
if( aLineColor.hasTransparence() )
rPropMap.setProperty( rPropIds[ LineTransparenceId ], aLineColor.getTransparence() );
}
@@ -464,11 +463,11 @@ void LineProperties::pushToPropMap( PropertyMap& rPropMap, const FilterBase& rFi
}
}
-void LineProperties::pushToPropSet( PropertySet& rPropSet, const FilterBase& rFilter,
- ModelObjectHelper& rModelObjHelper, const LinePropertyIds& rPropIds, sal_Int32 nPhClr ) const
+void LineProperties::pushToPropSet( PropertySet& rPropSet, ModelObjectHelper& rModelObjHelper,
+ const GraphicHelper& rGraphicHelper, const LinePropertyIds& rPropIds, sal_Int32 nPhClr ) const
{
PropertyMap aPropMap;
- pushToPropMap( aPropMap, rFilter, rModelObjHelper, rPropIds, nPhClr );
+ pushToPropMap( aPropMap, rModelObjHelper, rGraphicHelper, rPropIds, nPhClr );
rPropSet.setProperties( aPropMap );
}
diff --git a/oox/source/drawingml/linepropertiescontext.cxx b/oox/source/drawingml/linepropertiescontext.cxx
index 200af2eb6fb5..a2cf4111a524 100644
--- a/oox/source/drawingml/linepropertiescontext.cxx
+++ b/oox/source/drawingml/linepropertiescontext.cxx
@@ -93,7 +93,7 @@ Reference< XFastContextHandler > LinePropertiesContext::createFastChildContext(
case A_TOKEN( headEnd ): // CT_LineEndProperties
case A_TOKEN( tailEnd ): // CT_LineEndProperties
- { // ST_LineEndType
+ { // ST_LineEndType
bool bTailEnd = nElement == A_TOKEN( tailEnd );
LineArrowProperties& rArrowProps = bTailEnd ? mrLineProperties.maEndArrow : mrLineProperties.maStartArrow;
rArrowProps.moArrowType = aAttribs.getToken( XML_type );
diff --git a/oox/source/drawingml/shape.cxx b/oox/source/drawingml/shape.cxx
index 15c390a8162e..59b3f35dc8cc 100644
--- a/oox/source/drawingml/shape.cxx
+++ b/oox/source/drawingml/shape.cxx
@@ -384,6 +384,9 @@ Reference< XShape > Shape::createAndInsert(
}
}
+ ModelObjectHelper& rModelObjectHelper = rFilterBase.getModelObjectHelper();
+ const GraphicHelper& rGraphicHelper = rFilterBase.getGraphicHelper();
+
LineProperties aLineProperties;
aLineProperties.maLineFill.moFillType = XML_noFill;
sal_Int32 nLinePhClr = -1;
@@ -397,19 +400,19 @@ Reference< XShape > Shape::createAndInsert(
{
if( const LineProperties* pLineProps = pTheme->getLineStyle( pLineRef->mnThemedIdx ) )
aLineProperties.assignUsed( *pLineProps );
- nLinePhClr = pLineRef->maPhClr.getColor( rFilterBase );
+ nLinePhClr = pLineRef->maPhClr.getColor( rGraphicHelper );
}
if( const ShapeStyleRef* pFillRef = getShapeStyleRef( XML_fillRef ) )
{
if( const FillProperties* pFillProps = pTheme->getFillStyle( pFillRef->mnThemedIdx ) )
aFillProperties.assignUsed( *pFillProps );
- nFillPhClr = pFillRef->maPhClr.getColor( rFilterBase );
+ nFillPhClr = pFillRef->maPhClr.getColor( rGraphicHelper );
}
// if( const ShapeStyleRef* pEffectRef = getShapeStyleRef( XML_fillRef ) )
// {
// if( const EffectProperties* pEffectProps = pTheme->getEffectStyle( pEffectRef->mnThemedIdx ) )
// aEffectProperties.assignUsed( *pEffectProps );
-// nEffectPhClr = pEffectRef->maPhClr.getColor( rFilterBase );
+// nEffectPhClr = pEffectRef->maPhClr.getColor( rGraphicHelper );
// }
}
@@ -438,11 +441,11 @@ Reference< XShape > Shape::createAndInsert(
// applying properties
PropertySet aPropSet( xSet );
if ( aServiceName == OUString::createFromAscii( "com.sun.star.drawing.GraphicObjectShape" ) )
- mpGraphicPropertiesPtr->pushToPropSet( aPropSet, rFilterBase );
+ mpGraphicPropertiesPtr->pushToPropSet( aPropSet, rGraphicHelper );
if ( mpTablePropertiesPtr.get() && ( aServiceName == OUString::createFromAscii( "com.sun.star.drawing.TableShape" ) ) )
mpTablePropertiesPtr->pushToPropSet( rFilterBase, xSet, mpMasterTextListStyle );
- aFillProperties.pushToPropSet( aPropSet, rFilterBase, rFilterBase.getModelObjectHelper(), FillProperties::DEFAULT_IDS, mnRotation, nFillPhClr );
- aLineProperties.pushToPropSet( aPropSet, rFilterBase, rFilterBase.getModelObjectHelper(), LineProperties::DEFAULT_IDS, nLinePhClr );
+ aFillProperties.pushToPropSet( aPropSet, rModelObjectHelper, rGraphicHelper, FillProperties::DEFAULT_IDS, mnRotation, nFillPhClr );
+ aLineProperties.pushToPropSet( aPropSet, rModelObjectHelper, rGraphicHelper, LineProperties::DEFAULT_IDS, nLinePhClr );
// applying autogrowheight property before setting shape size, because
// the shape size might be changed if currently autogrowheight is true
@@ -458,7 +461,7 @@ Reference< XShape > Shape::createAndInsert(
aPropSet.setProperties( aShapeProperties );
if( aServiceName == OUString::createFromAscii( "com.sun.star.drawing.CustomShape" ) )
- mpCustomShapePropertiesPtr->pushToPropSet( rFilterBase, xSet, mxShape );
+ mpCustomShapePropertiesPtr->pushToPropSet( xSet, mxShape );
// in some cases, we don't have any text body.
if( getTextBody() )
diff --git a/oox/source/drawingml/table/tablecell.cxx b/oox/source/drawingml/table/tablecell.cxx
index 1684414eea2b..ee3ac495f4d6 100644
--- a/oox/source/drawingml/table/tablecell.cxx
+++ b/oox/source/drawingml/table/tablecell.cxx
@@ -80,7 +80,7 @@ void applyLineAttributes( const ::oox::core::XmlFilterBase& rFilterBase,
if( rLineProperties.maLineFill.moFillType.differsFrom( XML_noFill ) )
{
Color aColor = rLineProperties.maLineFill.getBestSolidColor();
- aBorderLine.Color = aColor.getColor( rFilterBase );
+ aBorderLine.Color = aColor.getColor( rFilterBase.getGraphicHelper() );
aBorderLine.OuterLineWidth = static_cast< sal_Int16 >( GetCoordinate( rLineProperties.moLineWidth.get( 0 ) ) / 4 );
aBorderLine.InnerLineWidth = static_cast< sal_Int16 >( GetCoordinate( rLineProperties.moLineWidth.get( 0 ) ) / 4 );
aBorderLine.LineDistance = 0;
@@ -360,7 +360,7 @@ void TableCell::pushToXCell( const ::oox::core::XmlFilterBase& rFilterBase, ::oo
aFillProperties.assignUsed( maFillProperties );
PropertySet aPropSet( xPropSet );
// TODO: phClr?
- aFillProperties.pushToPropSet( aPropSet, rFilterBase, rFilterBase.getModelObjectHelper() );
+ aFillProperties.pushToPropSet( aPropSet, rFilterBase.getModelObjectHelper(), rFilterBase.getGraphicHelper() );
}
} } }
diff --git a/oox/source/drawingml/textcharacterproperties.cxx b/oox/source/drawingml/textcharacterproperties.cxx
index aa08218053ac..4dbd632b2191 100644
--- a/oox/source/drawingml/textcharacterproperties.cxx
+++ b/oox/source/drawingml/textcharacterproperties.cxx
@@ -98,7 +98,7 @@ void TextCharacterProperties::pushToPropMap( PropertyMap& rPropMap, const XmlFil
// symbol font not supported
if( maCharColor.isUsed() )
- rPropMap[ PROP_CharColor ] <<= maCharColor.getColor( rFilter );
+ rPropMap[ PROP_CharColor ] <<= maCharColor.getColor( rFilter.getGraphicHelper() );
if( moLang.has() && (moLang.get().getLength() > 0) )
{
@@ -144,7 +144,7 @@ void TextCharacterProperties::pushToPropMap( PropertyMap& rPropMap, const XmlFil
if( moUnderline.has() && maUnderlineColor.isUsed() && !bUnderlineFillFollowText )
{
rPropMap[ PROP_CharUnderlineHasColor ] <<= true;
- rPropMap[ PROP_CharUnderlineColor ] <<= maUnderlineColor.getColor( rFilter );
+ rPropMap[ PROP_CharUnderlineColor ] <<= maUnderlineColor.getColor( rFilter.getGraphicHelper() );
}
}
diff --git a/oox/source/drawingml/textfont.cxx b/oox/source/drawingml/textfont.cxx
index f20c9b53511b..8d58787e544a 100644
--- a/oox/source/drawingml/textfont.cxx
+++ b/oox/source/drawingml/textfont.cxx
@@ -63,7 +63,7 @@ sal_Int16 lclGetFontFamily( sal_Int32 nOoxValue )
TextFont::TextFont() :
mnPitch( 0 ),
- mnCharset( 0 )
+ mnCharset( WINDOWS_CHARSET_ANSI )
{
}
@@ -72,7 +72,7 @@ void TextFont::setAttributes( const AttributeList& rAttribs )
maTypeface = rAttribs.getString( XML_typeface, OUString() );
maPanose = rAttribs.getString( XML_panose, OUString() );
mnPitch = rAttribs.getInteger( XML_pitchFamily, 0 );
- mnCharset = rAttribs.getInteger( XML_charset, 1 );
+ mnCharset = rAttribs.getInteger( XML_charset, WINDOWS_CHARSET_DEFAULT );
}
void TextFont::assignIfUsed( const TextFont& rTextFont )
diff --git a/oox/source/drawingml/textparagraphproperties.cxx b/oox/source/drawingml/textparagraphproperties.cxx
index 3416d4918e7b..2f5954168d37 100644
--- a/oox/source/drawingml/textparagraphproperties.cxx
+++ b/oox/source/drawingml/textparagraphproperties.cxx
@@ -322,7 +322,7 @@ void BulletList::pushToPropMap( const ::oox::core::XmlFilterBase& rFilterBase, P
if ( maStyleName.hasValue() )
rPropMap[ PROP_CharStyleName ] <<= maStyleName;
if ( maBulletColorPtr->isUsed() )
- rPropMap[ PROP_BulletColor ] <<= maBulletColorPtr->getColor( rFilterBase );
+ rPropMap[ PROP_BulletColor ] <<= maBulletColorPtr->getColor( rFilterBase.getGraphicHelper() );
}
TextParagraphProperties::TextParagraphProperties()
diff --git a/oox/source/dump/biffdumper.cxx b/oox/source/dump/biffdumper.cxx
index 21aa341107fa..ea1944d935a4 100644
--- a/oox/source/dump/biffdumper.cxx
+++ b/oox/source/dump/biffdumper.cxx
@@ -30,8 +30,8 @@
#include <osl/thread.h>
#include <rtl/tencinfo.h>
#include "oox/dump/oledumper.hxx"
-#include "oox/helper/olestorage.hxx"
#include "oox/core/filterbase.hxx"
+#include "oox/ole/olestorage.hxx"
#include "oox/xls/biffdetector.hxx"
#include "oox/xls/biffinputstream.hxx"
#include "oox/xls/formulabase.hxx"
@@ -100,30 +100,30 @@ const sal_uInt16 BIFF_PT_NOSTRING = 0xFFFF;
namespace {
-void lclDumpDffClientPos( Output& rOut, BinaryInputStream& rStrm, const String& rName, sal_uInt16 nSubScale )
+void lclDumpDffClientPos( const OutputRef& rxOut, const BinaryInputStreamRef& rxStrm, const String& rName, sal_uInt16 nSubScale )
{
- MultiItemsGuard aMultiGuard( rOut );
- TableGuard aTabGuard( rOut, 17 );
+ MultiItemsGuard aMultiGuard( rxOut );
+ TableGuard aTabGuard( rxOut, 17 );
{
- sal_uInt16 nPos = rStrm.readuInt16();
- ItemGuard aItem( rOut, rName );
- rOut.writeDec( nPos );
+ sal_uInt16 nPos = rxStrm->readuInt16();
+ ItemGuard aItem( rxOut, rName );
+ rxOut->writeDec( nPos );
}
{
- sal_uInt16 nSubUnits = rStrm.readuInt16();
- ItemGuard aItem( rOut, "sub-units" );
- rOut.writeDec( nSubUnits );
- rOut.writeChar( '/' );
- rOut.writeDec( nSubScale );
+ sal_uInt16 nSubUnits = rxStrm->readuInt16();
+ ItemGuard aItem( rxOut, "sub-units" );
+ rxOut->writeDec( nSubUnits );
+ rxOut->writeChar( '/' );
+ rxOut->writeDec( nSubScale );
}
}
-void lclDumpDffClientRect( Output& rOut, BinaryInputStream& rStrm )
+void lclDumpDffClientRect( const OutputRef& rxOut, const BinaryInputStreamRef& rxStrm )
{
- lclDumpDffClientPos( rOut, rStrm, "start-col", 1024 );
- lclDumpDffClientPos( rOut, rStrm, "start-row", 256 );
- lclDumpDffClientPos( rOut, rStrm, "end-col", 1024 );
- lclDumpDffClientPos( rOut, rStrm, "end-row", 256 );
+ lclDumpDffClientPos( rxOut, rxStrm, "start-col", 1024 );
+ lclDumpDffClientPos( rxOut, rxStrm, "start-row", 256 );
+ lclDumpDffClientPos( rxOut, rxStrm, "end-col", 1024 );
+ lclDumpDffClientPos( rxOut, rxStrm, "end-row", 256 );
}
} // namespace
@@ -138,7 +138,7 @@ BiffDffStreamObject::BiffDffStreamObject( const OutputObjectBase& rParent, const
void BiffDffStreamObject::implDumpClientAnchor()
{
dumpHex< sal_uInt16 >( "flags", "DFF-CLIENTANCHOR-FLAGS" );
- lclDumpDffClientRect( out(), in() );
+ lclDumpDffClientRect( mxOut, mxStrm );
}
// ============================================================================
@@ -161,15 +161,16 @@ void BiffCtlsStreamObject::implDump()
{
if( mnLength > 0 )
{
- out().emptyLine();
+ mxOut->emptyLine();
writeEmptyItem( "CTLS-START" );
{
- IndentGuard aIndGuard( out() );
- in().seek( mnStartPos );
- OcxGuidControlObject( *this, mnLength ).dump();
+ IndentGuard aIndGuard( mxOut );
+ mxStrm->seek( mnStartPos );
+ RelativeInputStreamRef xRelStrm( new RelativeInputStream( *mxStrm, mnLength ) );
+ FormControlStreamObject( *this, xRelStrm ).dump();
}
writeEmptyItem( "CTLS-END" );
- out().emptyLine();
+ mxOut->emptyLine();
}
}
@@ -315,7 +316,7 @@ bool BiffObjectBase::implStartRecord( BinaryInputStream&, sal_Int64& ornRecPos,
switch( mnLastRecId )
{
case BIFF_ID_CHBEGIN:
- out().incIndent();
+ mxOut->incIndent();
break;
}
@@ -351,7 +352,7 @@ bool BiffObjectBase::implStartRecord( BinaryInputStream&, sal_Int64& ornRecPos,
mxBiffStrm->enableDecoder( false );
break;
case BIFF_ID_CHEND:
- out().decIndent();
+ mxOut->decIndent();
break;
}
@@ -416,10 +417,10 @@ void BiffObjectBase::writeFontPortions( const FontPortionModelList& rPortions )
if( !rPortions.empty() )
{
writeDecItem( "font-count", static_cast< sal_uInt32 >( rPortions.size() ) );
- TableGuard aTabGuard( out(), 14 );
+ TableGuard aTabGuard( mxOut, 14 );
for( FontPortionModelList::const_iterator aIt = rPortions.begin(), aEnd = rPortions.end(); aIt != aEnd; ++aIt )
{
- MultiItemsGuard aMultiGuard( out() );
+ MultiItemsGuard aMultiGuard( mxOut );
writeDecItem( "char-pos", aIt->mnPos );
writeDecItem( "font-idx", aIt->mnFontId, "FONTNAMES" );
}
@@ -497,7 +498,7 @@ OUString BiffObjectBase::dumpUniString( const String& rName, BiffStringFlags nFl
// #122185# bRich flag may be set, but format runs may be missing
if( nFontCount > 0 )
{
- IndentGuard aIndGuard( out() );
+ IndentGuard aIndGuard( mxOut );
FontPortionModelList aPortions;
aPortions.importPortions( *mxBiffStrm, nFontCount, BIFF_FONTPORTION_16BIT );
writeFontPortions( aPortions );
@@ -508,7 +509,7 @@ OUString BiffObjectBase::dumpUniString( const String& rName, BiffStringFlags nFl
if( nPhoneticSize > 0 )
{
sal_Int64 nStrmPos = mxBiffStrm->tell();
- IndentGuard aIndGuard( out() );
+ IndentGuard aIndGuard( mxOut );
writeEmptyItem( "phonetic-data" );
dumpUnused( 2 );
dumpDec< sal_uInt16 >( "size" );
@@ -520,7 +521,7 @@ OUString BiffObjectBase::dumpUniString( const String& rName, BiffStringFlags nFl
if( nLen == 0 ) dumpUnused( 2 );
for( sal_uInt16 nPortion = 0; !mxBiffStrm->isEof() && (nPortion < nCount); ++nPortion )
{
- MultiItemsGuard aMultiGuard( out() );
+ MultiItemsGuard aMultiGuard( mxOut );
dumpDec< sal_uInt16 >( "first-portion-char" );
dumpDec< sal_uInt16 >( "first-main-char" );
dumpDec< sal_uInt16 >( "main-char-count" );
@@ -560,7 +561,7 @@ rtl_TextEncoding BiffObjectBase::dumpCodePage( const String& rName )
void BiffObjectBase::dumpFormulaResult( const String& rName )
{
- MultiItemsGuard aMultiGuard( out() );
+ MultiItemsGuard aMultiGuard( mxOut );
sal_uInt8 pnResult[ 8 ];
mxBiffStrm->readMemory( pnResult, 8 );
writeArrayItem( rName( "result" ), pnResult, 8 );
@@ -638,8 +639,7 @@ void BiffObjectBase::dumpRangeList( const String& rName, bool bCol16Bit, bool bR
void BiffObjectBase::dumpConstArrayHeader( sal_uInt32& rnCols, sal_uInt32& rnRows )
{
- Output& rOut = out();
- MultiItemsGuard aMultiGuard( rOut );
+ MultiItemsGuard aMultiGuard( mxOut );
rnCols = dumpDec< sal_uInt8 >( "width" );
rnRows = dumpDec< sal_uInt16 >( "height" );
switch( getBiff() )
@@ -651,18 +651,17 @@ void BiffObjectBase::dumpConstArrayHeader( sal_uInt32& rnCols, sal_uInt32& rnRow
case BIFF8: ++rnCols; ++rnRows; break;
case BIFF_UNKNOWN: break;
}
- ItemGuard aItem( rOut, "size" );
- rOut.writeDec( rnCols );
- rOut.writeChar( 'x' );
- rOut.writeDec( rnRows );
+ ItemGuard aItem( mxOut, "size" );
+ mxOut->writeDec( rnCols );
+ mxOut->writeChar( 'x' );
+ mxOut->writeDec( rnRows );
aItem.cont();
- rOut.writeDec( rnCols * rnRows );
+ mxOut->writeDec( rnCols * rnRows );
}
OUString BiffObjectBase::dumpConstValue( sal_Unicode cStrQuote )
{
- Output& rOut = out();
- MultiItemsGuard aMultiGuard( rOut );
+ MultiItemsGuard aMultiGuard( mxOut );
OUStringBuffer aValue;
switch( dumpDec< sal_uInt8 >( "type", mxConstType ) )
{
@@ -672,7 +671,7 @@ OUString BiffObjectBase::dumpConstValue( sal_Unicode cStrQuote )
break;
case BIFF_DATATYPE_DOUBLE:
dumpDec< double >( "value" );
- aValue.append( rOut.getLastItemValue() );
+ aValue.append( mxOut->getLastItemValue() );
break;
case BIFF_DATATYPE_STRING:
aValue.append( dumpString( "value", BIFF_STR_8BITLENGTH ) );
@@ -680,12 +679,12 @@ OUString BiffObjectBase::dumpConstValue( sal_Unicode cStrQuote )
break;
case BIFF_DATATYPE_BOOL:
dumpBoolean( "value" );
- aValue.append( rOut.getLastItemValue() );
+ aValue.append( mxOut->getLastItemValue() );
dumpUnused( 7 );
break;
case BIFF_DATATYPE_ERROR:
dumpErrorCode( "value" );
- aValue.append( rOut.getLastItemValue() );
+ aValue.append( mxOut->getLastItemValue() );
dumpUnused( 7 );
break;
}
@@ -712,22 +711,22 @@ void BiffObjectBase::dumpFrHeader( bool bWithFlags, bool bWithRange )
void BiffObjectBase::dumpDffClientRect()
{
- lclDumpDffClientRect( out(), in() );
+ lclDumpDffClientRect( mxOut, mxStrm );
}
void BiffObjectBase::dumpEmbeddedDff()
{
- out().decIndent();
+ mxOut->decIndent();
writeEmptyItem( "EMBEDDED-DFF-START" );
- out().incIndent();
+ mxOut->incIndent();
mxDffObj->dump();
- out().emptyLine();
- out().decIndent();
+ mxOut->emptyLine();
+ mxOut->decIndent();
writeEmptyItem( "EMBEDDED-DFF-END" );
- out().incIndent();
+ mxOut->incIndent();
}
-void BiffObjectBase::dumpOcxControl()
+void BiffObjectBase::dumpControl()
{
sal_uInt32 nStartPos = dumpHex< sal_uInt32 >( "ctls-stream-pos", "CONV-DEC" );
sal_uInt32 nLength = dumpHex< sal_uInt32 >( "ctls-stream-length", "CONV-DEC" );
@@ -784,26 +783,25 @@ void FormulaObject::dumpNameFormula( const String& rName )
void FormulaObject::implDump()
{
{
- MultiItemsGuard aMultiGuard( out() );
+ MultiItemsGuard aMultiGuard( mxOut );
writeEmptyItem( maName );
writeDecItem( "formula-size", mnSize );
}
if( mnSize == 0 ) return;
- BinaryInputStream& rStrm = in();
- sal_Int64 nStartPos = rStrm.tell();
- sal_Int64 nEndPos = ::std::min< sal_Int64 >( nStartPos + mnSize, rStrm.getLength() );
+ sal_Int64 nStartPos = mxStrm->tell();
+ sal_Int64 nEndPos = ::std::min< sal_Int64 >( nStartPos + mnSize, mxStrm->getLength() );
bool bValid = mxTokens.get();
mxStack.reset( new FormulaStack );
maAddData.clear();
- IndentGuard aIndGuard( out() );
+ IndentGuard aIndGuard( mxOut );
{
- TableGuard aTabGuard( out(), 8, 18 );
- while( bValid && !rStrm.isEof() && (rStrm.tell() < nEndPos) )
+ TableGuard aTabGuard( mxOut, 8, 18 );
+ while( bValid && !mxStrm->isEof() && (mxStrm->tell() < nEndPos) )
{
- MultiItemsGuard aMultiGuard( out() );
- writeHexItem( EMPTY_STRING, static_cast< sal_uInt16 >( rStrm.tell() - nStartPos ) );
+ MultiItemsGuard aMultiGuard( mxOut );
+ writeHexItem( EMPTY_STRING, static_cast< sal_uInt16 >( mxStrm->tell() - nStartPos ) );
sal_uInt8 nTokenId = dumpHex< sal_uInt8 >( EMPTY_STRING, mxTokens );
bValid = mxTokens->hasName( nTokenId );
if( bValid )
@@ -881,7 +879,7 @@ void FormulaObject::implDump()
}
}
}
- bValid = nEndPos == rStrm.tell();
+ bValid = nEndPos == mxStrm->tell();
if( bValid )
{
dumpAddTokenData();
@@ -889,7 +887,7 @@ void FormulaObject::implDump()
writeInfoItem( "classes", mxStack->getClassesString() );
}
else
- dumpBinary( OOX_DUMP_ERRASCII( "formula-error" ), nEndPos - rStrm.tell(), false );
+ dumpBinary( OOX_DUMP_ERRASCII( "formula-error" ), nEndPos - mxStrm->tell(), false );
mnSize = 0;
}
@@ -1006,12 +1004,12 @@ OUString FormulaObject::createPlaceHolder() const
sal_uInt16 FormulaObject::readFuncId()
{
- return (getBiff() >= BIFF4) ? in().readuInt16() : in().readuInt8();
+ return (getBiff() >= BIFF4) ? mxStrm->readuInt16() : mxStrm->readuInt8();
}
OUString FormulaObject::writeFuncIdItem( sal_uInt16 nFuncId, const FunctionInfo** oppFuncInfo )
{
- ItemGuard aItemGuard( out(), "func-id" );
+ ItemGuard aItemGuard( mxOut, "func-id" );
writeHexItem( EMPTY_STRING, nFuncId, "FUNCID" );
OUStringBuffer aBuffer;
const FunctionInfo* pFuncInfo = mxFuncProv->getFuncInfoFromBiffFuncId( nFuncId );
@@ -1025,9 +1023,9 @@ OUString FormulaObject::writeFuncIdItem( sal_uInt16 nFuncId, const FunctionInfo*
}
OUString aFuncName = aBuffer.makeStringAndClear();
aItemGuard.cont();
- out().writeChar( OOX_DUMP_STRQUOTE );
- out().writeString( aFuncName );
- out().writeChar( OOX_DUMP_STRQUOTE );
+ mxOut->writeChar( OOX_DUMP_STRQUOTE );
+ mxOut->writeString( aFuncName );
+ mxOut->writeChar( OOX_DUMP_STRQUOTE );
if( oppFuncInfo ) *oppFuncInfo = pFuncInfo;
return aFuncName;
}
@@ -1133,13 +1131,13 @@ OUString FormulaObject::dumpTokenRefTabIdxs()
void FormulaObject::dumpIntToken()
{
dumpDec< sal_uInt16 >( "value" );
- mxStack->pushOperand( out().getLastItemValue() );
+ mxStack->pushOperand( mxOut->getLastItemValue() );
}
void FormulaObject::dumpDoubleToken()
{
dumpDec< double >( "value" );
- mxStack->pushOperand( out().getLastItemValue() );
+ mxStack->pushOperand( mxOut->getLastItemValue() );
}
void FormulaObject::dumpStringToken()
@@ -1153,13 +1151,13 @@ void FormulaObject::dumpStringToken()
void FormulaObject::dumpBoolToken()
{
dumpBoolean( "value" );
- mxStack->pushOperand( out().getLastItemValue() );
+ mxStack->pushOperand( mxOut->getLastItemValue() );
}
void FormulaObject::dumpErrorToken()
{
dumpErrorCode( "value" );
- mxStack->pushOperand( out().getLastItemValue() );
+ mxStack->pushOperand( mxOut->getLastItemValue() );
}
void FormulaObject::dumpMissArgToken()
@@ -1201,14 +1199,14 @@ void FormulaObject::dumpRefToken( const OUString& rTokClass, bool bNameMode )
{
TokenAddress aPos = dumpTokenAddress( bNameMode );
writeTokenAddressItem( "addr", aPos, bNameMode );
- mxStack->pushOperand( createRef( out().getLastItemValue() ), rTokClass );
+ mxStack->pushOperand( createRef( mxOut->getLastItemValue() ), rTokClass );
}
void FormulaObject::dumpAreaToken( const OUString& rTokClass, bool bNameMode )
{
TokenRange aRange = dumpTokenRange( bNameMode );
writeTokenRangeItem( "range", aRange, bNameMode );
- mxStack->pushOperand( createRef( out().getLastItemValue() ), rTokClass );
+ mxStack->pushOperand( createRef( mxOut->getLastItemValue() ), rTokClass );
}
void FormulaObject::dumpRefErrToken( const OUString& rTokClass, bool bArea )
@@ -1222,7 +1220,7 @@ void FormulaObject::dumpRef3dToken( const OUString& rTokClass, bool bNameMode )
OUString aRef = dumpTokenRefTabIdxs();
TokenAddress aPos = dumpTokenAddress( bNameMode );
writeTokenAddress3dItem( "addr", aRef, aPos, bNameMode );
- mxStack->pushOperand( out().getLastItemValue(), rTokClass );
+ mxStack->pushOperand( mxOut->getLastItemValue(), rTokClass );
}
void FormulaObject::dumpArea3dToken( const OUString& rTokClass, bool bNameMode )
@@ -1230,7 +1228,7 @@ void FormulaObject::dumpArea3dToken( const OUString& rTokClass, bool bNameMode )
OUString aRef = dumpTokenRefTabIdxs();
TokenRange aRange = dumpTokenRange( bNameMode );
writeTokenRange3dItem( "range", aRef, aRange, bNameMode );
- mxStack->pushOperand( out().getLastItemValue(), rTokClass );
+ mxStack->pushOperand( mxOut->getLastItemValue(), rTokClass );
}
void FormulaObject::dumpRefErr3dToken( const OUString& rTokClass, bool bArea )
@@ -1260,7 +1258,7 @@ void FormulaObject::dumpExpToken( const String& rName )
aPos.mnCol = dumpDec< sal_uInt16, sal_uInt8 >( getBiff() != BIFF2, "col" );
writeAddressItem( "base-addr", aPos );
OUStringBuffer aOp( rName );
- StringHelper::appendIndex( aOp, out().getLastItemValue() );
+ StringHelper::appendIndex( aOp, mxOut->getLastItemValue() );
mxStack->pushOperand( aOp.makeStringAndClear() );
}
@@ -1288,7 +1286,7 @@ void FormulaObject::dumpFuncToken( const OUString& rTokClass )
void FormulaObject::dumpFuncVarToken( const OUString& rTokClass )
{
sal_uInt8 nParamCount;
- in() >> nParamCount;
+ *mxStrm >> nParamCount;
sal_uInt16 nFuncId = readFuncId();
bool bCmd = getFlag( nFuncId, BIFF_TOK_FUNCVAR_CMD );
if( bCmd )
@@ -1345,7 +1343,7 @@ bool FormulaObject::dumpAttrToken()
case BIFF_TOK_ATTR_CHOOSE:
{
sal_uInt16 nCount = dumpDec< sal_uInt16, sal_uInt8 >( !bBiff2, "choices" );
- out().resetItemIndex();
+ mxOut->resetItemIndex();
for( sal_uInt16 nIdx = 0; nIdx < nCount; ++nIdx )
dumpDec< sal_uInt16, sal_uInt8 >( !bBiff2, "#skip" );
dumpDec< sal_uInt16, sal_uInt8 >( !bBiff2, "skip-err" );
@@ -1431,7 +1429,7 @@ void FormulaObject::dumpNlrColRowToken( const OUString& rTokClass, bool bAddData
{
TokenAddress aPos = dumpTokenAddress( false );
writeInfoItem( "addr", lclCreateNlr( aPos ) );
- mxStack->pushOperand( out().getLastItemValue(), rTokClass );
+ mxStack->pushOperand( mxOut->getLastItemValue(), rTokClass );
}
}
@@ -1447,7 +1445,7 @@ void FormulaObject::dumpNlrRangeToken( const OUString& rTokClass, bool bAddData
{
TokenAddress aPos = dumpTokenAddress( false );
writeInfoItem( "addr", lclCreateNlr( aPos ) );
- mxStack->pushOperand( out().getLastItemValue(), rTokClass );
+ mxStack->pushOperand( mxOut->getLastItemValue(), rTokClass );
}
dumpUnknown( 1 );
dumpRange( "target-range" );
@@ -1462,24 +1460,23 @@ void FormulaObject::dumpNlrRangeErrToken()
void FormulaObject::dumpAddTokenData()
{
- Output& rOut = out();
- rOut.resetItemIndex();
+ mxOut->resetItemIndex();
for( AddDataTypeVec::const_iterator aIt = maAddData.begin(), aEnd = maAddData.end(); aIt != aEnd; ++aIt )
{
AddDataType eType = *aIt;
{
- ItemGuard aItem( rOut, "#add-data" );
+ ItemGuard aItem( mxOut, "#add-data" );
switch( eType )
{
- case ADDDATA_NLR: rOut.writeAscii( "tNlr" ); break;
- case ADDDATA_ARRAY: rOut.writeAscii( "tArray" ); break;
- case ADDDATA_MEMAREA: rOut.writeAscii( "tMemArea" ); break;
+ case ADDDATA_NLR: mxOut->writeAscii( "tNlr" ); break;
+ case ADDDATA_ARRAY: mxOut->writeAscii( "tArray" ); break;
+ case ADDDATA_MEMAREA: mxOut->writeAscii( "tMemArea" ); break;
}
}
size_t nIdx = aIt - maAddData.begin();
- IndentGuard aIndGuard( rOut );
+ IndentGuard aIndGuard( mxOut );
switch( eType )
{
case ADDDATA_NLR: dumpAddDataNlr( nIdx ); break;
@@ -1513,7 +1510,7 @@ void FormulaObject::dumpAddDataArray( size_t nIdx )
dumpConstArrayHeader( nCols, nRows );
OUStringBuffer aOp;
- TableGuard aTabGuard( out(), 17 );
+ TableGuard aTabGuard( mxOut, 17 );
for( sal_uInt32 nRow = 0; nRow < nRows; ++nRow )
{
OUStringBuffer aArrayLine;
@@ -1779,7 +1776,7 @@ void WorkbookStreamObject::implDumpRecordBody()
dumpDec< sal_uInt8 >( "creator", "CHFRINFO-APPVERSION" );
dumpDec< sal_uInt8 >( "writer", "CHFRINFO-APPVERSION" );
sal_uInt16 nCount = dumpDec< sal_uInt16 >( "rec-range-count" );
- out().resetItemIndex();
+ mxOut->resetItemIndex();
for( sal_uInt16 nIndex = 0; !rStrm.isEof() && (nIndex < nCount); ++nIndex )
dumpHexPair< sal_uInt16 >( "#rec-range", '-' );
}
@@ -1995,7 +1992,7 @@ void WorkbookStreamObject::implDumpRecordBody()
break;
case BIFF_ID_COLUMNDEFAULT:
- out().resetItemIndex();
+ mxOut->resetItemIndex();
for( sal_Int32 nCol = 0, nCount = dumpColRange(); nCol < nCount; ++nCol )
dumpXfIdx( "#xf-idx", true );
dumpUnused( 2 );
@@ -2018,11 +2015,11 @@ void WorkbookStreamObject::implDumpRecordBody()
case BIFF_ID_COORDLIST:
{
- out().resetItemIndex();
- TableGuard aTabGuard( out(), 12, 10 );
+ mxOut->resetItemIndex();
+ TableGuard aTabGuard( mxOut, 12, 10 );
while( rStrm.getRemaining() >= 4 )
{
- MultiItemsGuard aMultiGuard( out() );
+ MultiItemsGuard aMultiGuard( mxOut );
writeEmptyItem( "#point" );
dumpDec< sal_uInt16 >( "x" );
dumpDec< sal_uInt16 >( "y" );
@@ -2040,10 +2037,10 @@ void WorkbookStreamObject::implDumpRecordBody()
sal_Int32 nCol2 = dumpColIndex( "last-col-idx", false );
sal_Int32 nCol1 = dumpColIndex( "first-col-idx", false );
sal_Int32 nRow = dumpRowIndex( "row-idx" );
- TableGuard aTabGuard( out(), 14, 17 );
+ TableGuard aTabGuard( mxOut, 14, 17 );
for( Address aPos( nCol1, nRow ); !rStrm.isEof() && (aPos.mnCol <= nCol2); ++aPos.mnCol )
{
- MultiItemsGuard aMultiGuard( out() );
+ MultiItemsGuard aMultiGuard( mxOut );
writeAddressItem( "pos", aPos );
dumpConstValue();
}
@@ -2117,7 +2114,7 @@ void WorkbookStreamObject::implDumpRecordBody()
case BIFF_ID_DBCELL:
dumpDec< sal_uInt32 >( "reverse-offset-to-row" );
- out().resetItemIndex();
+ mxOut->resetItemIndex();
while( rStrm.getRemaining() >= 2 )
dumpDec< sal_uInt16 >( "#cell-offset" );
break;
@@ -2181,7 +2178,7 @@ void WorkbookStreamObject::implDumpRecordBody()
else
{
dumpString( "workbook-url" );
- out().resetItemIndex();
+ mxOut->resetItemIndex();
for( sal_uInt16 nSheet = 0; !rStrm.isEof() && (nSheet < nCount); ++nSheet )
dumpString( "#sheet-name" );
}
@@ -2214,11 +2211,11 @@ void WorkbookStreamObject::implDumpRecordBody()
if( eBiff == BIFF8 )
{
sal_uInt16 nCount = dumpDec< sal_uInt16 >( "ref-count" );
- TableGuard aTabGuard( out(), 10, 17, 24 );
- out().resetItemIndex();
+ TableGuard aTabGuard( mxOut, 10, 17, 24 );
+ mxOut->resetItemIndex();
for( sal_uInt16 nRefId = 0; !rStrm.isEof() && (nRefId < nCount); ++nRefId )
{
- MultiItemsGuard aMultiGuard( out() );
+ MultiItemsGuard aMultiGuard( mxOut );
writeEmptyItem( "#ref" );
dumpDec< sal_uInt16 >( "extbook-idx" );
dumpDec< sal_Int16 >( "first-sheet", "EXTERNSHEET-IDX" );
@@ -2353,7 +2350,7 @@ void WorkbookStreamObject::implDumpRecordBody()
if( nFormat == 9 )
{
writeEmptyItem( "bitmap-header" );
- IndentGuard aIndGuard( out() );
+ IndentGuard aIndGuard( mxOut );
if( dumpDec< sal_uInt32 >( "header-size" ) == 12 )
{
dumpDec< sal_Int16 >( "width" );
@@ -2374,7 +2371,7 @@ void WorkbookStreamObject::implDumpRecordBody()
dumpRowIndex( "first-row-with-cell", eBiff == BIFF8 );
dumpRowIndex( "first-free-row", eBiff == BIFF8 );
if( nRecId == BIFF3_ID_INDEX ) dumpHex< sal_uInt32 >( (eBiff <= BIFF4) ? "first-xf-pos" : "defcolwidth-pos", "CONV-DEC" );
- out().resetItemIndex();
+ mxOut->resetItemIndex();
while( rStrm.getRemaining() >= 4 )
dumpHex< sal_uInt32 >( "#first-row-pos-of-block", "CONV-DEC" );
break;
@@ -2424,10 +2421,10 @@ void WorkbookStreamObject::implDumpRecordBody()
{
Address aPos = dumpAddress();
{
- TableGuard aTabGuard( out(), 12 );
+ TableGuard aTabGuard( mxOut, 12 );
for( ; rStrm.getRemaining() >= 4; ++aPos.mnCol )
{
- MultiItemsGuard aMultiGuard( out() );
+ MultiItemsGuard aMultiGuard( mxOut );
writeAddressItem( "pos", aPos );
dumpXfIdx();
}
@@ -2440,10 +2437,10 @@ void WorkbookStreamObject::implDumpRecordBody()
{
Address aPos = dumpAddress();
{
- TableGuard aTabGuard( out(), 12, 12 );
+ TableGuard aTabGuard( mxOut, 12, 12 );
for( ; rStrm.getRemaining() >= 8; ++aPos.mnCol )
{
- MultiItemsGuard aMultiGuard( out() );
+ MultiItemsGuard aMultiGuard( mxOut );
writeAddressItem( "pos", aPos );
dumpXfIdx();
dumpRk( "value" );
@@ -2611,13 +2608,13 @@ void WorkbookStreamObject::implDumpRecordBody()
case BIFF_ID_PTPAGEFIELDS:
{
- out().resetItemIndex();
- TableGuard aTabGuard( out(), 17, 17, 17 );
+ mxOut->resetItemIndex();
+ TableGuard aTabGuard( mxOut, 17, 17, 17 );
while( rStrm.getRemaining() >= 6 )
{
writeEmptyItem( "#page-field" );
- MultiItemsGuard aMultiGuard( out() );
- IndentGuard aIndGuard( out() );
+ MultiItemsGuard aMultiGuard( mxOut );
+ IndentGuard aIndGuard( mxOut );
dumpDec< sal_Int16 >( "base-field" );
dumpDec< sal_Int16 >( "item", "PTPAGEFIELDS-ITEM" );
dumpDec< sal_uInt16 >( "dropdown-obj-id" );
@@ -2626,7 +2623,7 @@ void WorkbookStreamObject::implDumpRecordBody()
break;
case BIFF_ID_PTROWCOLFIELDS:
- out().resetItemIndex();
+ mxOut->resetItemIndex();
for( sal_Int64 nIdx = 0, nCount = rStrm.getRemaining() / 2; nIdx < nCount; ++nIdx )
dumpDec< sal_Int16 >( "#field-idx" );
break;
@@ -2636,19 +2633,19 @@ void WorkbookStreamObject::implDumpRecordBody()
{
sal_uInt16 nCount = (mnPTRowColItemsIdx == 0) ? mnPTRowFields : mnPTColFields;
sal_Int64 nLineSize = 8 + 2 * nCount;
- out().resetItemIndex();
+ mxOut->resetItemIndex();
while( rStrm.getRemaining() >= nLineSize )
{
writeEmptyItem( "#line-data" );
- IndentGuard aIndGuard( out() );
- MultiItemsGuard aMultiGuard( out() );
+ IndentGuard aIndGuard( mxOut );
+ MultiItemsGuard aMultiGuard( mxOut );
dumpDec< sal_uInt16 >( "ident-count" );
dumpDec< sal_uInt16 >( "item-type", "PTROWCOLITEMS-ITEMTYPE" );
dumpDec< sal_uInt16 >( "used-count" );
dumpHex< sal_uInt16 >( "flags", "PTROWCOLITEMS-FLAGS" );
OUStringBuffer aItemList;
for( sal_uInt16 nIdx = 0; nIdx < nCount; ++nIdx )
- StringHelper::appendToken( aItemList, in().readInt16() );
+ StringHelper::appendToken( aItemList, mxStrm->readInt16() );
writeInfoItem( "item-idxs", aItemList.makeStringAndClear() );
}
++mnPTRowColItemsIdx;
@@ -2714,10 +2711,10 @@ void WorkbookStreamObject::implDumpRecordBody()
writeStringItem( "name", rStrm.readUniStringBody( nNameLen, true ) );
if( nUserLen > 0 ) dumpUniString( "user" ); // repeated string length
if( nCommentLen > 0 ) dumpUniString( "comment" ); // repeated string length
- out().resetItemIndex();
+ mxOut->resetItemIndex();
for( sal_uInt16 nCell = 0; !rStrm.isEof() && (nCell < nCellCount); ++nCell )
dumpAddress( "#pos" );
- out().resetItemIndex();
+ mxOut->resetItemIndex();
for( sal_uInt16 nCell = 0; !rStrm.isEof() && (nCell < nCellCount); ++nCell )
dumpString( "#value" );
dumpUnused( 2 * nCellCount );
@@ -2803,7 +2800,7 @@ void WorkbookStreamObject::implDumpRecordBody()
case BIFF_ID_SST:
dumpDec< sal_uInt32 >( "string-cell-count" );
dumpDec< sal_uInt32 >( "sst-size" );
- out().resetItemIndex();
+ mxOut->resetItemIndex();
while( !rStrm.isEof() && (rStrm.getRemaining() >= 3) )
dumpUniString( "#entry" );
break;
@@ -3029,7 +3026,7 @@ void WorkbookStreamObject::dumpExtColorValue( sal_uInt32 nColorType )
void WorkbookStreamObject::dumpExtColor( const String& rName )
{
- MultiItemsGuard aMultiGuard( out() );
+ MultiItemsGuard aMultiGuard( mxOut );
writeEmptyItem( rName( "color" ) );
switch( extractValue< sal_uInt8 >( dumpDec< sal_uInt8 >( "flags", "EXTCOLOR-FLAGS" ), 1, 7 ) )
{
@@ -3046,7 +3043,7 @@ void WorkbookStreamObject::dumpExtColor( const String& rName )
void WorkbookStreamObject::dumpExtCfColor( const String& rName )
{
- MultiItemsGuard aMultiGuard( out() );
+ MultiItemsGuard aMultiGuard( mxOut );
writeEmptyItem( rName( "color" ) );
dumpExtColorValue( dumpExtColorType< sal_uInt32 >() );
dumpDec< double >( "tint", "CONV-FLOAT-TO-PERC" );
@@ -3089,7 +3086,7 @@ sal_uInt16 WorkbookStreamObject::dumpCellHeader( bool bBiff2Style )
void WorkbookStreamObject::dumpBoolErr()
{
- MultiItemsGuard aMultiGuard( out() );
+ MultiItemsGuard aMultiGuard( mxOut );
sal_uInt8 nValue = dumpHex< sal_uInt8 >( "value" );
bool bErrCode = dumpBool< sal_uInt8 >( "is-errorcode" );
if( bErrCode )
@@ -3106,7 +3103,7 @@ void WorkbookStreamObject::dumpCfRuleProp()
if( getFlag< sal_uInt32 >( nFlags1, 0x02000000 ) )
{
writeEmptyItem( "numfmt-block" );
- IndentGuard aIndGuard( out() );
+ IndentGuard aIndGuard( mxOut );
if( getFlag< sal_uInt16 >( nFlags2, 0x0001 ) )
{
dumpDec< sal_uInt16 >( "size" );
@@ -3121,7 +3118,7 @@ void WorkbookStreamObject::dumpCfRuleProp()
if( getFlag< sal_uInt32 >( nFlags1, 0x04000000 ) )
{
writeEmptyItem( "font-block" );
- IndentGuard aIndGuard( out() );
+ IndentGuard aIndGuard( mxOut );
sal_Int64 nRecPos = rStrm.tell();
dumpUniString( "name", BIFF_STR_8BITLENGTH );
dumpUnused( static_cast< sal_Int32 >( nRecPos + 64 - rStrm.tell() ) );
@@ -3147,7 +3144,7 @@ void WorkbookStreamObject::dumpCfRuleProp()
if( getFlag< sal_uInt32 >( nFlags1, 0x08000000 ) )
{
writeEmptyItem( "alignment-block" );
- IndentGuard aIndGuard( out() );
+ IndentGuard aIndGuard( mxOut );
dumpHex< sal_uInt8 >( "alignent", "CFRULE-ALIGNMENT" );
dumpHex< sal_uInt8 >( "rotation", "TEXTROTATION" );
dumpHex< sal_uInt16 >( "indent", "CFRULE-INDENT" );
@@ -3156,7 +3153,7 @@ void WorkbookStreamObject::dumpCfRuleProp()
if( getFlag< sal_uInt32 >( nFlags1, 0x10000000 ) )
{
writeEmptyItem( "border-block" );
- IndentGuard aIndGuard( out() );
+ IndentGuard aIndGuard( mxOut );
dumpHex< sal_uInt16 >( "border-style", "XF-BORDERSTYLE" );
dumpHex< sal_uInt16 >( "border-color1", "XF-BORDERCOLOR1" );
dumpHex< sal_uInt32 >( "border-color2", "CFRULE-BORDERCOLOR2" );
@@ -3164,13 +3161,13 @@ void WorkbookStreamObject::dumpCfRuleProp()
if( getFlag< sal_uInt32 >( nFlags1, 0x20000000 ) )
{
writeEmptyItem( "pattern-block" );
- IndentGuard aIndGuard( out() );
+ IndentGuard aIndGuard( mxOut );
dumpHex< sal_uInt32 >( "pattern", "CFRULE-FILLBLOCK" );
}
if( getFlag< sal_uInt32 >( nFlags1, 0x40000000 ) )
{
writeEmptyItem( "protection-block" );
- IndentGuard aIndGuard( out() );
+ IndentGuard aIndGuard( mxOut );
dumpHex< sal_uInt16 >( "flags", "CFRULE-PROTECTION-FLAGS" );
}
}
@@ -3180,14 +3177,14 @@ void WorkbookStreamObject::dumpXfExtProp()
BiffInputStream& rStrm = getBiffStream();
for( sal_uInt16 nIndex = 0, nCount = dumpDec< sal_uInt16 >( "subrec-count" ); !rStrm.isEof() && (nIndex < nCount); ++nIndex )
{
- out().startMultiItems();
+ mxOut->startMultiItems();
sal_Int64 nStartPos = rStrm.tell();
writeEmptyItem( "SUBREC" );
sal_uInt16 nSubRecId = dumpDec< sal_uInt16 >( "id", "XFEXT-SUBREC" );
sal_uInt16 nSubRecSize = dumpDec< sal_uInt16 >( "size" );
sal_Int64 nEndPos = nStartPos + nSubRecSize;
- out().endMultiItems();
- IndentGuard aIndGuard( out() );
+ mxOut->endMultiItems();
+ IndentGuard aIndGuard( mxOut );
switch( nSubRecId )
{
case 4: case 5: case 7: case 8: case 9: case 10: case 11: case 13:
@@ -3200,11 +3197,11 @@ void WorkbookStreamObject::dumpXfExtProp()
break;
case 6:
dumpExtGradientHead();
- out().resetItemIndex();
- for( sal_Int32 nStop = 0, nStopCount = dumpDec< sal_Int32 >( "stop-count" ); (nStop < nStopCount) && !in().isEof(); ++nStop )
+ mxOut->resetItemIndex();
+ for( sal_Int32 nStop = 0, nStopCount = dumpDec< sal_Int32 >( "stop-count" ); (nStop < nStopCount) && !mxStrm->isEof(); ++nStop )
{
writeEmptyItem( "#stop" );
- IndentGuard aIndGuard2( out() );
+ IndentGuard aIndGuard2( mxOut );
sal_uInt16 nColorType = dumpExtColorType< sal_uInt16 >();
dumpExtColorValue( nColorType );
dumpDec< double >( "stop-pos" );
@@ -3228,14 +3225,14 @@ void WorkbookStreamObject::dumpDxfProp()
dumpUnused( 2 );
for( sal_uInt16 nIndex = 0, nCount = dumpDec< sal_uInt16 >( "subrec-count" ); !rStrm.isEof() && (nIndex < nCount); ++nIndex )
{
- out().startMultiItems();
+ mxOut->startMultiItems();
sal_Int64 nStartPos = rStrm.tell();
writeEmptyItem( "SUBREC" );
sal_uInt16 nSubRecId = dumpDec< sal_uInt16 >( "id", "DXF-SUBREC" );
sal_uInt16 nSubRecSize = dumpDec< sal_uInt16 >( "size" );
sal_Int64 nEndPos = nStartPos + nSubRecSize;
- out().endMultiItems();
- IndentGuard aIndGuard( out() );
+ mxOut->endMultiItems();
+ IndentGuard aIndGuard( mxOut );
switch( nSubRecId )
{
case 0:
@@ -3325,7 +3322,7 @@ void WorkbookStreamObject::dumpDxf12Prop()
{
BiffInputStream& rStrm = getBiffStream();
writeEmptyItem( "dxf-data" );
- IndentGuard aIndGuard( out() );
+ IndentGuard aIndGuard( mxOut );
sal_uInt32 nSize = dumpDec< sal_uInt32 >( "dxf-size" );
if( nSize == 0 )
{
@@ -3350,7 +3347,7 @@ void WorkbookStreamObject::dumpCfRule12Param( sal_uInt16 nSubType )
sal_Int64 nEndPos = getBiffStream().tell() + nSize;
{
writeEmptyItem( "params" );
- IndentGuard aIndGuard( out() );
+ IndentGuard aIndGuard( mxOut );
switch( nSubType )
{
case 5:
@@ -3380,7 +3377,7 @@ void WorkbookStreamObject::dumpCfRule12Param( sal_uInt16 nSubType )
void WorkbookStreamObject::dumpFontRec()
{
sal_uInt16 nFontId = getBiffData().getFontCount();
- out().resetItemIndex( nFontId );
+ mxOut->resetItemIndex( nFontId );
writeEmptyItem( "#font" );
sal_uInt16 nHeight = dumpDec< sal_uInt16 >( "height", "CONV-TWIP-TO-PT" );
sal_uInt16 nFlags = dumpHex< sal_uInt16 >( "flags", "FONT-FLAGS" );
@@ -3420,19 +3417,19 @@ void WorkbookStreamObject::dumpFormatRec()
case BIFF2:
case BIFF3:
nFormatIdx = mnFormatIdx++;
- out().resetItemIndex( nFormatIdx );
+ mxOut->resetItemIndex( nFormatIdx );
writeEmptyItem( "#fmt" );
break;
case BIFF4:
nFormatIdx = mnFormatIdx++;
- out().resetItemIndex( nFormatIdx );
+ mxOut->resetItemIndex( nFormatIdx );
writeEmptyItem( "#fmt" );
dumpUnused( 2 );
break;
case BIFF5:
case BIFF8:
getBiffStream() >> nFormatIdx;
- out().resetItemIndex( nFormatIdx );
+ mxOut->resetItemIndex( nFormatIdx );
writeEmptyItem( "#fmt" );
writeDecItem( "fmt-idx", nFormatIdx );
break;
@@ -3445,7 +3442,7 @@ void WorkbookStreamObject::dumpFormatRec()
void WorkbookStreamObject::dumpXfRec()
{
sal_uInt16 nXfId = getBiffData().getXfCount();
- out().resetItemIndex( nXfId );
+ mxOut->resetItemIndex( nXfId );
writeEmptyItem( "#xf" );
sal_uInt16 nFontId = dumpFontIdx( EMPTY_STRING, getBiff() >= BIFF5 );
switch( getBiff() )
@@ -3824,7 +3821,6 @@ void WorkbookStreamObject::dumpObjRecBiff5()
void WorkbookStreamObject::dumpObjRecBiff8()
{
- Output& rOut = out();
BiffInputStream& rStrm = getBiffStream();
NameListRef xRecNames = cfg().getNameList( "OBJ-RECNAMES" );
sal_uInt16 nObjType = 0xFFFF;
@@ -3833,10 +3829,10 @@ void WorkbookStreamObject::dumpObjRecBiff8()
bool bLoop = true;
while( bLoop && (rStrm.getRemaining() >= 4) )
{
- rOut.emptyLine();
+ mxOut->emptyLine();
sal_uInt16 nSubRecId, nSubRecSize;
{
- MultiItemsGuard aMultiGuard( rOut );
+ MultiItemsGuard aMultiGuard( mxOut );
writeEmptyItem( "OBJREC" );
writeHexItem( "pos", static_cast< sal_uInt32 >( rStrm.tell() ) );
rStrm >> nSubRecId >> nSubRecSize;
@@ -3849,7 +3845,7 @@ void WorkbookStreamObject::dumpObjRecBiff8()
sal_Int64 nRealRecSize = ::std::min< sal_Int64 >( nSubRecSize, rStrm.getRemaining() );
sal_Int64 nSubRecEnd = nSubRecStart + nRealRecSize;
- IndentGuard aIndGuard( rOut );
+ IndentGuard aIndGuard( mxOut );
switch( nSubRecId )
{
case BIFF_ID_OBJMACRO:
@@ -3871,7 +3867,7 @@ void WorkbookStreamObject::dumpObjRecBiff8()
if( rStrm.tell() + 4 <= nSubRecEnd )
{
if( bControl && bCtlsStrm )
- dumpOcxControl();
+ dumpControl();
else
dumpHex< sal_uInt32 >( "ole-storage-id" );
}
@@ -3880,7 +3876,7 @@ void WorkbookStreamObject::dumpObjRecBiff8()
sal_uInt32 nKeySize = dumpDec< sal_uInt32 >( "licence-key-size" );
if( nKeySize > 0 )
{
- IndentGuard aIndGuard2( rOut );
+ IndentGuard aIndGuard2( mxOut );
sal_Int64 nKeyEnd = rStrm.tell() + nKeySize;
dumpArray( "licence-key", static_cast< sal_Int32 >( nKeySize ) );
rStrm.seek( nKeyEnd );
@@ -4052,7 +4048,7 @@ void WorkbookStreamObject::dumpObjRecPadding()
{
if( getBiffStream().tell() & 1 )
{
- IndentGuard aIndGuard( out() );
+ IndentGuard aIndGuard( mxOut );
dumpHex< sal_uInt8 >( "padding" );
}
}
@@ -4090,7 +4086,7 @@ void WorkbookStreamObject::dumpObjRecFmla( const String& rName, sal_uInt16 nFmla
if( nFmlaSize > 0 )
{
writeEmptyItem( rName );
- IndentGuard aIndGuard( out() );
+ IndentGuard aIndGuard( mxOut );
sal_Int64 nStrmEnd = rStrm.tell() + nFmlaSize;
dumpObjRecFmlaRaw();
if( rStrm.isEof() || (rStrm.tell() != nStrmEnd) )
@@ -4105,7 +4101,7 @@ void WorkbookStreamObject::dumpObjRecPictFmla( sal_uInt16 nFmlaSize )
if( nFmlaSize > 0 )
{
writeEmptyItem( "pic-link" );
- IndentGuard aIndGuard( out() );
+ IndentGuard aIndGuard( mxOut );
sal_Int64 nStrmEnd = rStrm.tell() + nFmlaSize;
if( (getBiff() == BIFF3) && (nStrmEnd & 1) ) ++nStrmEnd; // BIFF3 size without padding
dumpObjRecFmlaRaw();
@@ -4152,7 +4148,7 @@ void PivotCacheStreamObject::implDumpRecordBody()
break;
case BIFF_ID_PCDFDISCRETEPR:
- out().resetItemIndex();
+ mxOut->resetItemIndex();
while( !rStrm.isEof() && (rStrm.getRemaining() >= 2) )
dumpDec< sal_uInt16 >( "#item-index" );
break;
@@ -4172,12 +4168,12 @@ void PivotCacheStreamObject::implDumpRecordBody()
case BIFF_ID_PCITEM_DATE:
{
DateTime aDateTime;
- aDateTime.Year = in().readuInt16();
- aDateTime.Month = in().readuInt16();
- aDateTime.Day = in().readuInt8();
- aDateTime.Hours = in().readuInt8();
- aDateTime.Minutes = in().readuInt8();
- aDateTime.Seconds = in().readuInt8();
+ aDateTime.Year = mxStrm->readuInt16();
+ aDateTime.Month = mxStrm->readuInt16();
+ aDateTime.Day = mxStrm->readuInt8();
+ aDateTime.Hours = mxStrm->readuInt8();
+ aDateTime.Minutes = mxStrm->readuInt8();
+ aDateTime.Seconds = mxStrm->readuInt8();
writeDateTimeItem( "value", aDateTime );
}
break;
@@ -4214,10 +4210,17 @@ void RootStorageObject::implDumpStorage( const StorageRef& rxStrg, const OUStrin
{
if( rStrgPath.equalsAscii( "_VBA_PROJECT_CUR" ) )
VbaProjectStorageObject( *this, rxStrg, rSysPath ).dump();
+ else if( rStrgPath.matchAsciiL( RTL_CONSTASCII_STRINGPARAM( "MBD" ) ) )
+ VbaContainerStorageObject( *this, rxStrg, rSysPath ).dump();
else
OleStorageObject::implDumpStorage( rxStrg, rStrgPath, rSysPath );
}
+void RootStorageObject::implDumpBaseStream( const BinaryInputStreamRef& rxStrm, const OUString& rSysFileName )
+{
+ WorkbookStreamObject( *this, rxStrm, rSysFileName ).dump();
+}
+
// ============================================================================
// ============================================================================
@@ -4233,7 +4236,7 @@ Dumper::Dumper( const Reference< XMultiServiceFactory >& rxFactory, const Refere
{
if( rxFactory.is() && rxInStrm.is() )
{
- StorageRef xStrg( new OleStorage( rxFactory, rxInStrm, true ) );
+ StorageRef xStrg( new ::oox::ole::OleStorage( rxFactory, rxInStrm, true ) );
MediaDescriptor aMediaDesc;
ConfigRef xCfg( new Config( DUMP_BIFF_CONFIG_ENVVAR, rxFactory, xStrg, rSysFileName, aMediaDesc ) );
DumperBase::construct( xCfg );
@@ -4242,17 +4245,7 @@ Dumper::Dumper( const Reference< XMultiServiceFactory >& rxFactory, const Refere
void Dumper::implDump()
{
- RootStorageObject aRootStrg( *this );
- if( aRootStrg.isValid() )
- {
- aRootStrg.dump();
- }
- else if( StorageBase* pRootStrg = cfg().getRootStorage().get() )
- {
- // try to dump plain BIFF stream
- BinaryInputStreamRef xStrm( new BinaryXInputStream( pRootStrg->openInputStream( OUString() ), false ) );
- WorkbookStreamObject( *this, xStrm, cfg().getSysFileName() ).dump();
- }
+ RootStorageObject( *this ).dump();
}
// ============================================================================
diff --git a/oox/source/dump/biffdumper.ini b/oox/source/dump/biffdumper.ini
index 618e89c996e0..16c3fb883149 100644
--- a/oox/source/dump/biffdumper.ini
+++ b/oox/source/dump/biffdumper.ini
@@ -350,7 +350,7 @@ multilist=RECORD-NAMES-BIFF5
0x00B8=DOCROUTE,RECIPNAME,,,,MULTRK,MULTBLANK,TOOLBARHDR
0x00C0=TOOLBAREND,MMS,ADDMENU,DELMENU,,PTDATAFIELD,PCDEFINITION,PCDFIELD
0x00C8=PCITEM_INDEXLIST,PCITEM_DOUBLE,PCITEM_BOOL,PCITEM_ERROR,PCITEM_INTEGER,PCITEM_STRING,PCITEM_DATE,PCITEM_MISSING
- 0x00D0=SXTBL,SXTBRGITEM,SXTBPG,OBPROJ,,PIVOTCACHE,RSTRING,DBCELL
+ 0x00D0=SXTBL,SXTBRGITEM,SXTBPG,VBAPROJECT,,PIVOTCACHE,RSTRING,DBCELL
0x00D8=PCDFRANGEPR,PCDFDISCRETEPR,BOOKBOOL,REVERT,SXEXT|PARAMQRY,SCENPROTECT,OLESIZE,UDDESC
0x00E0=XF,INTERFACEHDR,INTERFACEEND,PCDSOURCE,,,,
0x0206=FORMULA
@@ -381,7 +381,7 @@ multilist=RECORD-NAMES-BIFF8
0x0190=,,,,,,CHTRHEADER,
0x01A8=,USERBVIEW,USERSVIEWBEGIN,USERSVIEWEND,,QSI,EXTERNALBOOK,PROT4REV
0x01B0=CFHEADER,CFRULE,DATAVALIDATIONS,,,DCONBINAME,TXO,REFRESHALL
- 0x01B8=HYPERLINK,NLRDELNAME,CODENAME,PCDFSQLTYPE,PROT4REVPASS,,DATAVALIDATION,
+ 0x01B8=HYPERLINK,NLRDELNAME,CODENAME,PCDFSQLTYPE,PROT4REVPASS,VBAPROJECTEMPTY,DATAVALIDATION,
0x01C0=XL9FILE,RECALCID,INTCACHEDDATA,,,,,
0x0800=SCREENTIP,,,WEBQRYSETTINGS,WEBQRYTABLES,,,
0x0850=CHFRINFO,CHFRWRAPPER,CHFRBLOCKBEGIN,CHFRBLOCKEND,,,,CHFRUNITPROPS
diff --git a/oox/source/dump/dffdumper.cxx b/oox/source/dump/dffdumper.cxx
index 599687f5bd50..8730698561ce 100644
--- a/oox/source/dump/dffdumper.cxx
+++ b/oox/source/dump/dffdumper.cxx
@@ -93,7 +93,7 @@ void DffStreamObject::implWriteExtHeader()
case DFF_ID_SP: pcListName = "DFFSP-RECORD-INST"; break; // shape type
case DFF_ID_SPLITMENUCOLORS: pcListName = "DFFSPLITMENUC-RECORD-INST"; break; // number of colors
}
- MultiItemsGuard aMultiGuard( out() );
+ MultiItemsGuard aMultiGuard( mxOut );
writeHexItem( "instance", mnInstVer, pcListName );
if( isContainer() ) writeDecItem( "container-size", mnRealSize );
}
@@ -137,11 +137,11 @@ void DffStreamObject::implDumpRecordBody()
sal_uInt32 nClusters = dumpDec< sal_uInt32 >( "id-cluster-count" );
dumpDec< sal_uInt32 >( "shape-count" );
dumpDec< sal_uInt32 >( "drawing-count" );
- out().resetItemIndex( 1 );
- TableGuard aTabGuard( out(), 15, 16 );
- for( sal_uInt32 nCluster = 1; !in().isEof() && (nCluster < nClusters); ++nCluster )
+ mxOut->resetItemIndex( 1 );
+ TableGuard aTabGuard( mxOut, 15, 16 );
+ for( sal_uInt32 nCluster = 1; !mxStrm->isEof() && (nCluster < nClusters); ++nCluster )
{
- MultiItemsGuard aMultiGuard( out() );
+ MultiItemsGuard aMultiGuard( mxOut );
writeEmptyItem( "#cluster" );
dumpDec< sal_uInt32 >( "drawing-id" );
dumpHex< sal_uInt32 >( "next-free-id", "CONV-DEC" );
@@ -223,14 +223,14 @@ void DffStreamObject::dumpDffOpt()
{
sal_uInt16 nPropCount = getInst();
PropInfoVector aPropInfos;
- out().resetItemIndex();
- for( sal_uInt16 nPropIdx = 0; !in().isEof() && (nPropIdx < nPropCount); ++nPropIdx )
+ mxOut->resetItemIndex();
+ for( sal_uInt16 nPropIdx = 0; !mxStrm->isEof() && (nPropIdx < nPropCount); ++nPropIdx )
{
sal_uInt16 nPropId = dumpDffOptPropHeader();
sal_uInt16 nBaseId = nPropId & DFF_OPT_IDMASK;
- sal_uInt32 nValue = in().readuInt32();
+ sal_uInt32 nValue = mxStrm->readuInt32();
- IndentGuard aIndent( out() );
+ IndentGuard aIndent( mxOut );
if( getFlag( nPropId, DFF_OPT_COMPLEX ) )
{
writeHexItem( "complex-size", nValue, "CONV-DEC" );
@@ -280,14 +280,14 @@ void DffStreamObject::dumpDffOpt()
}
}
- out().resetItemIndex();
- for( PropInfoVector::iterator aIt = aPropInfos.begin(), aEnd = aPropInfos.end(); !in().isEof() && (aIt != aEnd); ++aIt )
+ mxOut->resetItemIndex();
+ for( PropInfoVector::iterator aIt = aPropInfos.begin(), aEnd = aPropInfos.end(); !mxStrm->isEof() && (aIt != aEnd); ++aIt )
{
- out().startMultiItems();
+ mxOut->startMultiItems();
writeEmptyItem( "#complex-data" );
writeHexItem( "id", aIt->mnId, "DFFOPT-PROPERTY-NAMES" );
- out().endMultiItems();
- IndentGuard aIndent( out() );
+ mxOut->endMultiItems();
+ IndentGuard aIndent( mxOut );
switch( aIt->meType )
{
case PROPTYPE_BINARY:
@@ -308,8 +308,8 @@ void DffStreamObject::dumpDffOpt()
sal_uInt16 DffStreamObject::dumpDffOptPropHeader()
{
- MultiItemsGuard aMultiGuard( out() );
- TableGuard aTabGuard( out(), 11 );
+ MultiItemsGuard aMultiGuard( mxOut );
+ TableGuard aTabGuard( mxOut, 11 );
writeEmptyItem( "#prop" );
return dumpHex< sal_uInt16 >( "id", "DFFOPT-PROPERTY-ID" );
}
diff --git a/oox/source/dump/dumperbase.cxx b/oox/source/dump/dumperbase.cxx
index 8e0e9a4e1225..807a5ec74715 100644
--- a/oox/source/dump/dumperbase.cxx
+++ b/oox/source/dump/dumperbase.cxx
@@ -38,6 +38,7 @@
#include <osl/file.hxx>
#include <comphelper/docpasswordhelper.hxx>
#include "oox/helper/binaryoutputstream.hxx"
+#include "oox/helper/textinputstream.hxx"
#include "oox/core/filterbase.hxx"
#include "oox/xls/biffhelper.hxx"
@@ -1042,31 +1043,31 @@ ConfigItemBase::~ConfigItemBase()
{
}
-void ConfigItemBase::readConfigBlock( const ConfigInputStreamRef& rxStrm )
+void ConfigItemBase::readConfigBlock( TextInputStream& rStrm )
{
- readConfigBlockContents( rxStrm );
+ readConfigBlockContents( rStrm );
}
void ConfigItemBase::implProcessConfigItemStr(
- const ConfigInputStreamRef& /*rxStrm*/, const OUString& /*rKey*/, const OUString& /*rData*/ )
+ TextInputStream& /*rStrm*/, const OUString& /*rKey*/, const OUString& /*rData*/ )
{
}
void ConfigItemBase::implProcessConfigItemInt(
- const ConfigInputStreamRef& /*rxStrm*/, sal_Int64 /*nKey*/, const OUString& /*rData*/ )
+ TextInputStream& /*rStrm*/, sal_Int64 /*nKey*/, const OUString& /*rData*/ )
{
}
-void ConfigItemBase::readConfigBlockContents( const ConfigInputStreamRef& rxStrm )
+void ConfigItemBase::readConfigBlockContents( TextInputStream& rStrm )
{
bool bLoop = true;
- while( bLoop && !rxStrm->isEOF() )
+ while( bLoop && !rStrm.isEof() )
{
OUString aKey, aData;
- switch( readConfigLine( rxStrm, aKey, aData ) )
+ switch( readConfigLine( rStrm, aKey, aData ) )
{
case LINETYPE_DATA:
- processConfigItem( rxStrm, aKey, aData );
+ processConfigItem( rStrm, aKey, aData );
break;
case LINETYPE_END:
bLoop = false;
@@ -1076,12 +1077,12 @@ void ConfigItemBase::readConfigBlockContents( const ConfigInputStreamRef& rxStrm
}
ConfigItemBase::LineType ConfigItemBase::readConfigLine(
- const ConfigInputStreamRef& rxStrm, OUString& orKey, OUString& orData ) const
+ TextInputStream& rStrm, OUString& orKey, OUString& orData ) const
{
OUString aLine;
- while( !rxStrm->isEOF() && (aLine.getLength() == 0) )
+ while( !rStrm.isEof() && (aLine.getLength() == 0) )
{
- try { aLine = rxStrm->readLine(); } catch( Exception& ) { aLine = OUString(); }
+ aLine = rStrm.readLine();
if( (aLine.getLength() > 0) && (aLine[ 0 ] == OOX_DUMP_BOM) )
aLine = aLine.copy( 1 );
aLine = StringHelper::trimSpaces( aLine );
@@ -1101,20 +1102,20 @@ ConfigItemBase::LineType ConfigItemBase::readConfigLine(
LINETYPE_DATA : LINETYPE_END;
}
-ConfigItemBase::LineType ConfigItemBase::readConfigLine( const ConfigInputStreamRef& rxStrm ) const
+ConfigItemBase::LineType ConfigItemBase::readConfigLine( TextInputStream& rStrm ) const
{
OUString aKey, aData;
- return readConfigLine( rxStrm, aKey, aData );
+ return readConfigLine( rStrm, aKey, aData );
}
void ConfigItemBase::processConfigItem(
- const ConfigInputStreamRef& rxStrm, const OUString& rKey, const OUString& rData )
+ TextInputStream& rStrm, const OUString& rKey, const OUString& rData )
{
sal_Int64 nKey;
if( StringHelper::convertStringToInt( nKey, rKey ) )
- implProcessConfigItemInt( rxStrm, nKey, rData );
+ implProcessConfigItemInt( rStrm, nKey, rData );
else
- implProcessConfigItemStr( rxStrm, rKey, rData );
+ implProcessConfigItemStr( rStrm, rKey, rData );
}
// ============================================================================
@@ -1144,18 +1145,18 @@ bool NameListBase::implIsValid() const
}
void NameListBase::implProcessConfigItemStr(
- const ConfigInputStreamRef& rxStrm, const OUString& rKey, const OUString& rData )
+ TextInputStream& rStrm, const OUString& rKey, const OUString& rData )
{
if( rKey.equalsAscii( "include" ) )
include( rData );
else if( rKey.equalsAscii( "exclude" ) )
exclude( rData );
else
- ConfigItemBase::implProcessConfigItemStr( rxStrm, rKey, rData );
+ ConfigItemBase::implProcessConfigItemStr( rStrm, rKey, rData );
}
void NameListBase::implProcessConfigItemInt(
- const ConfigInputStreamRef& /*rxStrm*/, sal_Int64 nKey, const OUString& rData )
+ TextInputStream& /*rStrm*/, sal_Int64 nKey, const OUString& rData )
{
implSetName( nKey, rData );
}
@@ -1206,14 +1207,14 @@ ConstList::ConstList( const SharedConfigData& rCfgData ) :
}
void ConstList::implProcessConfigItemStr(
- const ConfigInputStreamRef& rxStrm, const OUString& rKey, const OUString& rData )
+ TextInputStream& rStrm, const OUString& rKey, const OUString& rData )
{
if( rKey.equalsAscii( "default" ) )
setDefaultName( rData );
else if( rKey.equalsAscii( "quote-names" ) )
setQuoteNames( StringHelper::convertStringToBool( rData ) );
else
- NameListBase::implProcessConfigItemStr( rxStrm, rKey, rData );
+ NameListBase::implProcessConfigItemStr( rStrm, rKey, rData );
}
void ConstList::implSetName( sal_Int64 nKey, const OUString& rName )
@@ -1265,12 +1266,12 @@ void MultiList::setNamesFromVec( sal_Int64 nStartKey, const OUStringVector& rNam
}
void MultiList::implProcessConfigItemStr(
- const ConfigInputStreamRef& rxStrm, const OUString& rKey, const OUString& rData )
+ TextInputStream& rStrm, const OUString& rKey, const OUString& rData )
{
if( rKey.equalsAscii( "ignore-empty" ) )
mbIgnoreEmpty = StringHelper::convertStringToBool( rData );
else
- ConstList::implProcessConfigItemStr( rxStrm, rKey, rData );
+ ConstList::implProcessConfigItemStr( rStrm, rKey, rData );
}
void MultiList::implSetName( sal_Int64 nKey, const OUString& rName )
@@ -1289,7 +1290,7 @@ FlagsList::FlagsList( const SharedConfigData& rCfgData ) :
}
void FlagsList::implProcessConfigItemStr(
- const ConfigInputStreamRef& rxStrm, const OUString& rKey, const OUString& rData )
+ TextInputStream& rStrm, const OUString& rKey, const OUString& rData )
{
if( rKey.equalsAscii( "ignore" ) )
{
@@ -1299,7 +1300,7 @@ void FlagsList::implProcessConfigItemStr(
}
else
{
- NameListBase::implProcessConfigItemStr( rxStrm, rKey, rData );
+ NameListBase::implProcessConfigItemStr( rStrm, rKey, rData );
}
}
@@ -1600,18 +1601,18 @@ bool SharedConfigData::implIsValid() const
}
void SharedConfigData::implProcessConfigItemStr(
- const ConfigInputStreamRef& rxStrm, const OUString& rKey, const OUString& rData )
+ TextInputStream& rStrm, const OUString& rKey, const OUString& rData )
{
if( rKey.equalsAscii( "include-config-file" ) )
readConfigFile( maConfigPath + rData );
else if( rKey.equalsAscii( "constlist" ) )
- readNameList< ConstList >( rxStrm, rData );
+ readNameList< ConstList >( rStrm, rData );
else if( rKey.equalsAscii( "multilist" ) )
- readNameList< MultiList >( rxStrm, rData );
+ readNameList< MultiList >( rStrm, rData );
else if( rKey.equalsAscii( "flagslist" ) )
- readNameList< FlagsList >( rxStrm, rData );
+ readNameList< FlagsList >( rStrm, rData );
else if( rKey.equalsAscii( "combilist" ) )
- readNameList< CombiList >( rxStrm, rData );
+ readNameList< CombiList >( rStrm, rData );
else if( rKey.equalsAscii( "shortlist" ) )
createShortList( rData );
else if( rKey.equalsAscii( "unitconverter" ) )
@@ -1625,12 +1626,13 @@ bool SharedConfigData::readConfigFile( const OUString& rFileUrl )
bool bLoaded = maConfigFiles.count( rFileUrl ) > 0;
if( !bLoaded )
{
- Reference< XTextInputStream > xTextInStrm =
- InputOutputHelper::openTextInputStream( mxFactory, rFileUrl, CREATE_OUSTRING( "UTF-8" ) );
- if( xTextInStrm.is() )
+ Reference< XInputStream > xInStrm = InputOutputHelper::openInputStream( mxFactory, rFileUrl );
+ BinaryXInputStream aInStrm( xInStrm, true );
+ TextInputStream aTxtStrm( aInStrm, RTL_TEXTENCODING_UTF8 );
+ if( !aTxtStrm.isEof() )
{
maConfigFiles.insert( rFileUrl );
- readConfigBlockContents( xTextInStrm );
+ readConfigBlockContents( aTxtStrm );
bLoaded = true;
}
}
@@ -2220,20 +2222,38 @@ void StorageObjectBase::construct( const ObjectBase& rParent )
bool StorageObjectBase::implIsValid() const
{
- return mxStrg.get() && mxStrg->isStorage() && (maSysPath.getLength() > 0) && ObjectBase::implIsValid();
+ return mxStrg.get() && (maSysPath.getLength() > 0) && ObjectBase::implIsValid();
}
void StorageObjectBase::implDump()
{
- try
+ bool bIsStrg = mxStrg->isStorage();
+ bool bIsRoot = mxStrg->isRootStorage();
+ Reference< XInputStream > xBaseStrm;
+ if( !bIsStrg )
+ xBaseStrm = mxStrg->openInputStream( OUString() );
+
+ OUString aSysOutPath = maSysPath;
+ if( bIsRoot ) try
{
+ aSysOutPath += OOX_DUMP_DUMPEXT;
Reference< XSimpleFileAccess > xFileAccess( getFactory()->createInstance( CREATE_OUSTRING( "com.sun.star.ucb.SimpleFileAccess" ) ), UNO_QUERY_THROW );
- xFileAccess->kill( maSysPath + OOX_DUMP_DUMPEXT );
+ xFileAccess->kill( aSysOutPath );
}
catch( Exception& )
{
}
- extractStorage( mxStrg, OUString(), maSysPath );
+
+ if( bIsStrg )
+ {
+ extractStorage( mxStrg, OUString(), aSysOutPath );
+ }
+ else if( xBaseStrm.is() )
+ {
+ BinaryInputStreamRef xInStrm( new BinaryXInputStream( xBaseStrm, false ) );
+ xInStrm->seekToStart();
+ implDumpBaseStream( xInStrm, aSysOutPath );
+ }
}
void StorageObjectBase::implDumpStream( const BinaryInputStreamRef&, const OUString&, const OUString&, const OUString& )
@@ -2245,6 +2265,10 @@ void StorageObjectBase::implDumpStorage( const StorageRef& rxStrg, const OUStrin
extractStorage( rxStrg, rStrgPath, rSysPath );
}
+void StorageObjectBase::implDumpBaseStream( const BinaryInputStreamRef&, const OUString& )
+{
+}
+
void StorageObjectBase::addPreferredStream( const String& rStrmName )
{
if( rStrmName.has() )
@@ -2280,7 +2304,7 @@ void StorageObjectBase::extractStream( StorageBase& rStrg, const OUString& rStrg
{
BinaryXOutputStream aOutStrm( InputOutputHelper::openOutputStream( getFactory(), rSysFileName ), true );
if( !aOutStrm.isEof() )
- aOutStrm.copyStream( aInStrm );
+ aInStrm.copyToStream( aOutStrm );
}
BinaryXInputStreamRef xDumpStrm( new BinaryXInputStream( InputOutputHelper::openInputStream( getFactory(), rSysFileName ), true ) );
if( !xDumpStrm->isEof() )
@@ -2289,17 +2313,15 @@ void StorageObjectBase::extractStream( StorageBase& rStrg, const OUString& rStrg
void StorageObjectBase::extractStorage( const StorageRef& rxStrg, const OUString& rStrgPath, const OUString& rSysPath )
{
- OUString aSysOutPath = rSysPath + OOX_DUMP_DUMPEXT;
-
// create directory in file system
- ::osl::FileBase::RC eRes = ::osl::Directory::create( aSysOutPath );
+ ::osl::FileBase::RC eRes = ::osl::Directory::create( rSysPath );
if( (eRes != ::osl::FileBase::E_None) && (eRes != ::osl::FileBase::E_EXIST) )
return;
// process preferred storages and streams in root storage first
if( rStrgPath.getLength() == 0 )
for( PreferredItemVector::iterator aIt = maPreferred.begin(), aEnd = maPreferred.end(); aIt != aEnd; ++aIt )
- extractItem( rxStrg, rStrgPath, aIt->maName, aSysOutPath, aIt->mbStorage, !aIt->mbStorage );
+ extractItem( rxStrg, rStrgPath, aIt->maName, rSysPath, aIt->mbStorage, !aIt->mbStorage );
// process children of the storage
for( StorageIterator aIt( rxStrg ); aIt.isValid(); ++aIt )
@@ -2311,13 +2333,13 @@ void StorageObjectBase::extractStorage( const StorageRef& rxStrg, const OUString
for( PreferredItemVector::iterator aIIt = maPreferred.begin(), aIEnd = maPreferred.end(); !bFound && (aIIt != aIEnd); ++aIIt )
bFound = aIIt->maName == aItemName;
if( !bFound )
- extractItem( rxStrg, rStrgPath, aItemName, aSysOutPath, aIt.isStorage(), aIt.isStream() );
+ extractItem( rxStrg, rStrgPath, aItemName, rSysPath, aIt.isStorage(), aIt.isStream() );
}
}
-void StorageObjectBase::extractItem( const StorageRef& rxStrg, const OUString& rStrgPath, const OUString& rItemName, const OUString& rSysOutPath, bool bIsStrg, bool bIsStrm )
+void StorageObjectBase::extractItem( const StorageRef& rxStrg, const OUString& rStrgPath, const OUString& rItemName, const OUString& rSysPath, bool bIsStrg, bool bIsStrm )
{
- OUString aSysFileName = getSysFileName( rItemName, rSysOutPath );
+ OUString aSysFileName = getSysFileName( rItemName, rSysPath );
if( bIsStrg )
{
OUStringBuffer aStrgPath( rStrgPath );
@@ -2362,18 +2384,18 @@ bool OutputObjectBase::implIsValid() const
void OutputObjectBase::writeEmptyItem( const String& rName )
{
- ItemGuard aItem( *mxOut, rName );
+ ItemGuard aItem( mxOut, rName );
}
void OutputObjectBase::writeInfoItem( const String& rName, const String& rData )
{
- ItemGuard aItem( *mxOut, rName );
+ ItemGuard aItem( mxOut, rName );
mxOut->writeString( rData );
}
void OutputObjectBase::writeCharItem( const String& rName, sal_Unicode cData )
{
- ItemGuard aItem( *mxOut, rName );
+ ItemGuard aItem( mxOut, rName );
mxOut->writeChar( OOX_DUMP_STRQUOTE );
mxOut->writeChar( cData );
mxOut->writeChar( OOX_DUMP_STRQUOTE );
@@ -2381,7 +2403,7 @@ void OutputObjectBase::writeCharItem( const String& rName, sal_Unicode cData )
void OutputObjectBase::writeStringItem( const String& rName, const OUString& rData )
{
- ItemGuard aItem( *mxOut, rName );
+ ItemGuard aItem( mxOut, rName );
mxOut->writeAscii( "(len=" );
mxOut->writeDec( rData.getLength() );
mxOut->writeAscii( ")," );
@@ -2394,19 +2416,19 @@ void OutputObjectBase::writeStringItem( const String& rName, const OUString& rDa
void OutputObjectBase::writeArrayItem( const String& rName, const sal_uInt8* pnData, sal_Size nSize, sal_Unicode cSep )
{
- ItemGuard aItem( *mxOut, rName );
+ ItemGuard aItem( mxOut, rName );
mxOut->writeArray( pnData, nSize, cSep );
}
void OutputObjectBase::writeBoolItem( const String& rName, bool bData )
{
- ItemGuard aItem( *mxOut, rName );
+ ItemGuard aItem( mxOut, rName );
mxOut->writeBool( bData );
}
double OutputObjectBase::writeRkItem( const String& rName, sal_Int32 nRk )
{
- MultiItemsGuard aMultiGuard( out() );
+ MultiItemsGuard aMultiGuard( mxOut );
writeHexItem( rName, static_cast< sal_uInt32 >( nRk ), "RK-FLAGS" );
double fValue = ::oox::xls::BiffHelper::calcDoubleFromRk( nRk );
writeDecItem( "decoded", fValue );
@@ -2415,20 +2437,20 @@ double OutputObjectBase::writeRkItem( const String& rName, sal_Int32 nRk )
void OutputObjectBase::writeColorABGRItem( const String& rName, sal_Int32 nColor )
{
- ItemGuard aItem( *mxOut, rName );
+ ItemGuard aItem( mxOut, rName );
writeHexItem( rName, nColor );
mxOut->writeColorABGR( nColor );
}
void OutputObjectBase::writeDateTimeItem( const String& rName, const DateTime& rDateTime )
{
- ItemGuard aItem( *mxOut, rName );
+ ItemGuard aItem( mxOut, rName );
mxOut->writeDateTime( rDateTime );
}
void OutputObjectBase::writeGuidItem( const String& rName, const OUString& rGuid )
{
- ItemGuard aItem( *mxOut, rName );
+ ItemGuard aItem( mxOut, rName );
mxOut->writeString( rGuid );
aItem.cont();
mxOut->writeString( cfg().getStringOption( rGuid, OUString() ) );
@@ -2436,85 +2458,81 @@ void OutputObjectBase::writeGuidItem( const String& rName, const OUString& rGuid
void OutputObjectBase::writeColIndexItem( const String& rName, sal_Int32 nCol )
{
- Output& rOut = out();
- ItemGuard aItem( rOut, rName );
- rOut.writeDec( nCol );
+ ItemGuard aItem( mxOut, rName );
+ mxOut->writeDec( nCol );
aItem.cont();
- rOut.writeColIndex( nCol );
+ mxOut->writeColIndex( nCol );
}
void OutputObjectBase::writeRowIndexItem( const String& rName, sal_Int32 nRow )
{
- Output& rOut = out();
- ItemGuard aItem( rOut, rName );
- rOut.writeDec( nRow );
+ ItemGuard aItem( mxOut, rName );
+ mxOut->writeDec( nRow );
aItem.cont();
- rOut.writeRowIndex( nRow );
+ mxOut->writeRowIndex( nRow );
}
void OutputObjectBase::writeColRangeItem( const String& rName, sal_Int32 nCol1, sal_Int32 nCol2 )
{
- Output& rOut = out();
- ItemGuard aItem( rOut, rName );
- rOut.writeColRowRange( nCol1, nCol2 );
+ ItemGuard aItem( mxOut, rName );
+ mxOut->writeColRowRange( nCol1, nCol2 );
aItem.cont();
- rOut.writeColRange( nCol1, nCol2 );
+ mxOut->writeColRange( nCol1, nCol2 );
}
void OutputObjectBase::writeRowRangeItem( const String& rName, sal_Int32 nRow1, sal_Int32 nRow2 )
{
- Output& rOut = out();
- ItemGuard aItem( rOut, rName );
- rOut.writeColRowRange( nRow1, nRow2 );
+ ItemGuard aItem( mxOut, rName );
+ mxOut->writeColRowRange( nRow1, nRow2 );
aItem.cont();
- rOut.writeRowRange( nRow1, nRow2 );
+ mxOut->writeRowRange( nRow1, nRow2 );
}
void OutputObjectBase::writeAddressItem( const String& rName, const Address& rPos )
{
- ItemGuard aItem( out(), rName );
- StringHelper::appendAddress( out().getLine(), rPos );
+ ItemGuard aItem( mxOut, rName );
+ StringHelper::appendAddress( mxOut->getLine(), rPos );
}
void OutputObjectBase::writeRangeItem( const String& rName, const Range& rRange )
{
- ItemGuard aItem( out(), rName );
- StringHelper::appendRange( out().getLine(), rRange );
+ ItemGuard aItem( mxOut, rName );
+ StringHelper::appendRange( mxOut->getLine(), rRange );
}
void OutputObjectBase::writeRangeListItem( const String& rName, const RangeList& rRanges )
{
- MultiItemsGuard aMultiGuard( out() );
+ MultiItemsGuard aMultiGuard( mxOut );
writeEmptyItem( rName );
writeDecItem( "count", static_cast< sal_uInt16 >( rRanges.size() ) );
- ItemGuard aItem( out(), "ranges" );
- StringHelper::appendRangeList( out().getLine(), rRanges );
+ ItemGuard aItem( mxOut, "ranges" );
+ StringHelper::appendRangeList( mxOut->getLine(), rRanges );
}
void OutputObjectBase::writeTokenAddressItem( const String& rName, const TokenAddress& rPos, bool bNameMode )
{
- ItemGuard aItem( out(), rName );
- StringHelper::appendAddress( out().getLine(), rPos, bNameMode );
+ ItemGuard aItem( mxOut, rName );
+ StringHelper::appendAddress( mxOut->getLine(), rPos, bNameMode );
}
void OutputObjectBase::writeTokenAddress3dItem( const String& rName, const OUString& rRef, const TokenAddress& rPos, bool bNameMode )
{
- ItemGuard aItem( out(), rName );
- out().writeString( rRef );
- StringHelper::appendAddress( out().getLine(), rPos, bNameMode );
+ ItemGuard aItem( mxOut, rName );
+ mxOut->writeString( rRef );
+ StringHelper::appendAddress( mxOut->getLine(), rPos, bNameMode );
}
void OutputObjectBase::writeTokenRangeItem( const String& rName, const TokenRange& rRange, bool bNameMode )
{
- ItemGuard aItem( out(), rName );
- StringHelper::appendRange( out().getLine(), rRange, bNameMode );
+ ItemGuard aItem( mxOut, rName );
+ StringHelper::appendRange( mxOut->getLine(), rRange, bNameMode );
}
void OutputObjectBase::writeTokenRange3dItem( const String& rName, const OUString& rRef, const TokenRange& rRange, bool bNameMode )
{
- ItemGuard aItem( out(), rName );
- out().writeString( rRef );
- StringHelper::appendRange( out().getLine(), rRange, bNameMode );
+ ItemGuard aItem( mxOut, rName );
+ mxOut->writeString( rRef );
+ StringHelper::appendRange( mxOut->getLine(), rRange, bNameMode );
}
// ============================================================================
@@ -2565,8 +2583,7 @@ void InputObjectBase::skipBlock( sal_Int64 nBytes, bool bShowSize )
void InputObjectBase::dumpRawBinary( sal_Int64 nBytes, bool bShowOffset, bool bStream )
{
- Output& rOut = out();
- TableGuard aTabGuard( rOut,
+ TableGuard aTabGuard( mxOut,
bShowOffset ? 12 : 0,
3 * OOX_DUMP_BYTESPERLINE / 2 + 1,
3 * OOX_DUMP_BYTESPERLINE / 2 + 1,
@@ -2583,8 +2600,8 @@ void InputObjectBase::dumpRawBinary( sal_Int64 nBytes, bool bShowOffset, bool bS
while( bLoop && (nPos < nDumpEnd) )
{
- rOut.writeHex( static_cast< sal_uInt32 >( nPos ) );
- rOut.tab();
+ mxOut->writeHex( static_cast< sal_uInt32 >( nPos ) );
+ mxOut->tab();
sal_uInt8 pnLineData[ OOX_DUMP_BYTESPERLINE ];
sal_Int32 nLineSize = bSeekable ? ::std::min( static_cast< sal_Int32 >( nDumpEnd - mxStrm->tell() ), OOX_DUMP_BYTESPERLINE ) : OOX_DUMP_BYTESPERLINE;
@@ -2598,18 +2615,18 @@ void InputObjectBase::dumpRawBinary( sal_Int64 nBytes, bool bShowOffset, bool bS
const sal_uInt8* pnEnd = 0;
for( pnByte = pnLineData, pnEnd = pnLineData + nReadSize; pnByte != pnEnd; ++pnByte )
{
- if( (pnByte - pnLineData) == (OOX_DUMP_BYTESPERLINE / 2) ) rOut.tab();
- rOut.writeHex( *pnByte, false );
- rOut.writeChar( ' ' );
+ if( (pnByte - pnLineData) == (OOX_DUMP_BYTESPERLINE / 2) ) mxOut->tab();
+ mxOut->writeHex( *pnByte, false );
+ mxOut->writeChar( ' ' );
}
aTabGuard.tab( 3 );
for( pnByte = pnLineData, pnEnd = pnLineData + nReadSize; pnByte != pnEnd; ++pnByte )
{
- if( (pnByte - pnLineData) == (OOX_DUMP_BYTESPERLINE / 2) ) rOut.tab();
- rOut.writeChar( static_cast< sal_Unicode >( (*pnByte < 0x20) ? '.' : *pnByte ) );
+ if( (pnByte - pnLineData) == (OOX_DUMP_BYTESPERLINE / 2) ) mxOut->tab();
+ mxOut->writeChar( static_cast< sal_Unicode >( (*pnByte < 0x20) ? '.' : *pnByte ) );
}
- rOut.newLine();
+ mxOut->newLine();
}
}
@@ -2621,11 +2638,11 @@ void InputObjectBase::dumpRawBinary( sal_Int64 nBytes, bool bShowOffset, bool bS
void InputObjectBase::dumpBinary( const String& rName, sal_Int64 nBytes, bool bShowOffset )
{
{
- MultiItemsGuard aMultiGuard( out() );
+ MultiItemsGuard aMultiGuard( mxOut );
writeEmptyItem( rName );
writeDecItem( "size", nBytes );
}
- IndentGuard aIndGuard( out() );
+ IndentGuard aIndGuard( mxOut );
dumpRawBinary( nBytes, bShowOffset );
}
@@ -2642,7 +2659,7 @@ void InputObjectBase::dumpRemaining( sal_Int64 nBytes )
void InputObjectBase::dumpRemainingTo( sal_Int64 nPos )
{
- if( mxStrm->isEof() )
+ if( mxStrm->isEof() || (mxStrm->tell() > nPos) )
writeInfoItem( "stream-state", OOX_DUMP_ERR_STREAM );
else
dumpRemaining( nPos - mxStrm->tell() );
@@ -2760,7 +2777,7 @@ DateTime InputObjectBase::dumpFileTime( const String& rName )
{
DateTime aDateTime;
- ItemGuard aItem( out(), rName( "file-time" ) );
+ ItemGuard aItem( mxOut, rName( "file-time" ) );
sal_Int64 nFileTime = dumpDec< sal_Int64 >( EMPTY_STRING );
// file time is in 10^-7 seconds (100 nanoseconds), convert to 1/100 seconds
nFileTime /= 100000;
@@ -2871,9 +2888,9 @@ BinaryStreamObject::BinaryStreamObject( const OutputObjectBase& rParent, const B
void BinaryStreamObject::dumpBinaryStream( bool bShowOffset )
{
- in().seek( 0 );
- dumpRawBinary( in().getLength(), bShowOffset, true );
- out().emptyLine();
+ mxStrm->seekToStart();
+ dumpRawBinary( mxStrm->getLength(), bShowOffset, true );
+ mxOut->emptyLine();
}
void BinaryStreamObject::implDump()
@@ -2883,110 +2900,47 @@ void BinaryStreamObject::implDump()
// ============================================================================
-namespace {
-
-bool lclIsEof( BinaryInputStream& rStrm )
-{
- return rStrm.isEof() || (rStrm.isSeekable() && (rStrm.tell() >= rStrm.getLength()));
-}
-
-template< typename BufferType, typename CharType >
-CharType lclAppendChar( BufferType& orBuffer, CharType cChar )
-{
- if( (cChar == 0x0A) || (cChar == 0x0D) )
- return cChar;
- orBuffer.append( cChar );
- return 0;
-}
-
-template< typename BufferType, typename CharType, typename StreamDataType >
-bool lclReadLine( BufferType& orBuffer, sal_Unicode& orcNextLineChar, BinaryInputStream& rStrm )
-{
- CharType cLineEndChar = (orcNextLineChar == 0) ? 0 : lclAppendChar( orBuffer, static_cast< CharType >( orcNextLineChar ) );
- orcNextLineChar = 0;
-
- // read chars until EOF or line end character (LF or CR)
- bool bIsEof = lclIsEof( rStrm );
- while( !bIsEof && (cLineEndChar == 0) )
- {
- CharType cChar = static_cast< CharType >( rStrm.readValue< StreamDataType >() );
- bIsEof = rStrm.isEof();
- cLineEndChar = bIsEof ? 0 : lclAppendChar( orBuffer, cChar );
- }
-
- // try to skip LF following CR, or CR following LF
- if( !lclIsEof( rStrm ) && (cLineEndChar != 0) )
- {
- CharType cChar = static_cast< CharType >( rStrm.readValue< StreamDataType >() );
- bool bLineEnd = ((cChar == 0x0A) || (cChar == 0x0D)) && (cChar != cLineEndChar);
- if( !rStrm.isEof() && !bLineEnd )
- orcNextLineChar = static_cast< sal_Unicode >( cChar );
- }
-
- return (cLineEndChar != 0) || (orBuffer.getLength() > 0);
-}
-
-} // namespace
-
-// ----------------------------------------------------------------------------
-
TextStreamObject::TextStreamObject( const ObjectBase& rParent,
- const BinaryInputStreamRef& rxStrm, rtl_TextEncoding eTextEnc, const OUString& rSysFileName ) :
- meTextEnc( eTextEnc )
+ const BinaryInputStreamRef& rxStrm, rtl_TextEncoding eTextEnc, const OUString& rSysFileName )
{
InputObjectBase::construct( rParent, rxStrm, rSysFileName );
+ if( rxStrm.get() )
+ mxTextStrm.reset( new TextInputStream( *rxStrm, eTextEnc ) );
}
TextStreamObject::TextStreamObject( const OutputObjectBase& rParent,
- const BinaryInputStreamRef& rxStrm, rtl_TextEncoding eTextEnc ) :
- meTextEnc( eTextEnc )
+ const BinaryInputStreamRef& rxStrm, rtl_TextEncoding eTextEnc )
{
InputObjectBase::construct( rParent, rxStrm );
+ if( rxStrm.get() )
+ mxTextStrm.reset( new TextInputStream( *rxStrm, eTextEnc ) );
+}
+
+bool TextStreamObject::implIsValid() const
+{
+ return InputObjectBase::implIsValid() && mxTextStrm.get();
}
void TextStreamObject::implDump()
{
OUString aLine;
- sal_Unicode cNextLineChar = 0;
sal_uInt32 nLine = 0;
- while( readLine( aLine, cNextLineChar ) )
- implDumpLine( aLine, ++nLine );
- out().emptyLine();
+ while( !mxTextStrm->isEof() )
+ {
+ aLine = mxTextStrm->readLine();
+ if( !mxTextStrm->isEof() )
+ implDumpLine( aLine, ++nLine );
+ }
+ mxOut->emptyLine();
}
void TextStreamObject::implDumpLine( const OUString& rLine, sal_uInt32 nLine )
{
- Output& rOut = out();
- TableGuard aTabGuard( rOut, 8 );
- rOut.writeDec( nLine, 6 );
- rOut.tab();
- rOut.writeString( rLine );
- rOut.newLine();
-}
-
-bool TextStreamObject::readCharLine( OUString& orLine, sal_Unicode& orcNextLineChar )
-{
- OStringBuffer aBuffer;
- bool bHasData = lclReadLine< OStringBuffer, sal_Char, sal_uInt8 >( aBuffer, orcNextLineChar, in() );
- if( bHasData )
- orLine = OStringToOUString( aBuffer.makeStringAndClear(), meTextEnc );
- return bHasData;
-}
-
-bool TextStreamObject::readUcs2Line( OUString& orLine, sal_Unicode& orcNextLineChar )
-{
- OUStringBuffer aBuffer;
- bool bHasData = lclReadLine< OUStringBuffer, sal_Unicode, sal_uInt16 >( aBuffer, orcNextLineChar, in() );
- if( bHasData )
- orLine = aBuffer.makeStringAndClear();
- return bHasData;
-}
-
-bool TextStreamObject::readLine( OUString& orLine, sal_Unicode& orcNextLineChar )
-{
- return (meTextEnc == RTL_TEXTENCODING_UCS2) ?
- readUcs2Line( orLine, orcNextLineChar ) :
- readCharLine( orLine, orcNextLineChar );
+ TableGuard aTabGuard( mxOut, 8 );
+ mxOut->writeDec( nLine, 6 );
+ mxOut->tab();
+ mxOut->writeString( rLine );
+ mxOut->newLine();
}
// ============================================================================
@@ -3002,9 +2956,9 @@ void XmlStreamObject::implDump()
TextStreamObject::implDump();
if( maIncompleteLine.getLength() > 0 )
{
- out().resetIndent();
- out().writeString( maIncompleteLine );
- out().emptyLine();
+ mxOut->resetIndent();
+ mxOut->writeString( maIncompleteLine );
+ mxOut->emptyLine();
writeInfoItem( "stream-state", OOX_DUMP_ERR_STREAM );
}
}
@@ -3018,10 +2972,9 @@ void XmlStreamObject::implDumpLine( const OUString& rLine, sal_uInt32 )
aLine.append( rLine );
maIncompleteLine = OUString();
- Output& rOut = out();
if( aLine.getLength() == 0 )
{
- rOut.newLine();
+ mxOut->newLine();
return;
}
@@ -3092,10 +3045,10 @@ void XmlStreamObject::implDumpLine( const OUString& rLine, sal_uInt32 )
// flush output line
if( maIncompleteLine.getLength() == 0 )
{
- if( !bIsStartElement && bIsEndElement ) rOut.decIndent();
- rOut.writeString( aOutLine.makeStringAndClear() );
- rOut.newLine();
- if( bIsStartElement && !bIsEndElement ) rOut.incIndent();
+ if( !bIsStartElement && bIsEndElement ) mxOut->decIndent();
+ mxOut->writeString( aOutLine.makeStringAndClear() );
+ mxOut->newLine();
+ if( bIsStartElement && !bIsEndElement ) mxOut->incIndent();
}
}
}
@@ -3131,11 +3084,11 @@ void RecordObjectBase::implDump()
while( implStartRecord( *mxBaseStrm, mnRecPos, mnRecId, mnRecSize ) )
{
// record header
- out().emptyLine();
+ mxOut->emptyLine();
writeHeader();
implWriteExtHeader();
- IndentGuard aIndGuard( out() );
- sal_Int64 nRecPos = in().tell();
+ IndentGuard aIndGuard( mxOut );
+ sal_Int64 nRecPos = mxStrm->tell();
// record body
if( !mbBinaryOnly && cfg().hasName( xRecNames, mnRecId ) )
@@ -3148,7 +3101,7 @@ void RecordObjectBase::implDump()
}
// remaining undumped data
- if( !in().isEof() && (in().tell() == nRecPos) )
+ if( !mxStrm->isEof() && (mxStrm->tell() == nRecPos) )
dumpRawBinary( mnRecSize, false );
else
dumpRemainingTo( nRecPos + mnRecSize );
@@ -3176,13 +3129,13 @@ void RecordObjectBase::constructRecObjBase( const BinaryInputStreamRef& rxBaseSt
void RecordObjectBase::writeHeader()
{
- MultiItemsGuard aMultiGuard( out() );
+ MultiItemsGuard aMultiGuard( mxOut );
writeEmptyItem( "REC" );
if( mbShowRecPos && mxBaseStrm->isSeekable() )
writeShortHexItem( "pos", mnRecPos, "CONV-DEC" );
writeShortHexItem( "size", mnRecSize, "CONV-DEC" );
- ItemGuard aItem( out(), "id" );
- out().writeShortHex( mnRecId );
+ ItemGuard aItem( mxOut, "id" );
+ mxOut->writeShortHex( mnRecId );
addNameToItem( mnRecId, "CONV-DEC" );
addNameToItem( mnRecId, maRecNames );
}
@@ -3224,7 +3177,7 @@ bool SequenceRecordObjectBase::implStartRecord( BinaryInputStream& rBaseStrm, sa
sal_Int32 nRecSize = static_cast< sal_Int32 >( ornRecSize );
mxRecData->realloc( nRecSize );
bValid = (nRecSize == 0) || (rBaseStrm.readData( *mxRecData, nRecSize ) == nRecSize);
- in().seekToStart();
+ mxStrm->seekToStart();
}
return bValid;
}
diff --git a/oox/source/dump/oledumper.cxx b/oox/source/dump/oledumper.cxx
index b7750d4113b8..cc49ee050ea6 100644
--- a/oox/source/dump/oledumper.cxx
+++ b/oox/source/dump/oledumper.cxx
@@ -33,8 +33,8 @@
#include <rtl/tencinfo.h>
#include "oox/helper/binaryoutputstream.hxx"
#include "oox/core/filterbase.hxx"
+#include "oox/ole/olestorage.hxx"
#include "oox/ole/vbainputstream.hxx"
-#include "oox/xls/biffhelper.hxx"
#if OOX_INCLUDE_DUMPER
@@ -52,9 +52,52 @@ namespace dump {
// ============================================================================
// ============================================================================
-StdFontObject::StdFontObject( const InputObjectBase& rParent ) :
- InputObjectBase( rParent )
+OUString OleInputObjectBase::dumpAnsiString32( const String& rName )
{
+ return dumpCharArray( rName, mxStrm->readInt32(), RTL_TEXTENCODING_MS_1252 );
+}
+
+OUString OleInputObjectBase::dumpUniString32( const String& rName )
+{
+ return dumpUnicodeArray( rName, mxStrm->readInt32() );
+}
+
+sal_Int32 OleInputObjectBase::dumpStdClipboardFormat( const String& rName )
+{
+ return dumpDec< sal_Int32 >( rName( "clipboard-format" ), "OLE-STD-CLIPBOARD-FORMAT" );
+}
+
+OUString OleInputObjectBase::dumpAnsiString32OrStdClip( const String& rName )
+{
+ sal_Int32 nLen = mxStrm->readInt32();
+ return (nLen < 0) ? OUString::valueOf( dumpStdClipboardFormat( rName ) ) : dumpCharArray( rName, nLen, RTL_TEXTENCODING_MS_1252 );
+}
+
+OUString OleInputObjectBase::dumpUniString32OrStdClip( const String& rName )
+{
+ sal_Int32 nLen = mxStrm->readInt32();
+ return (nLen < 0) ? OUString::valueOf( dumpStdClipboardFormat( rName ) ) : dumpUnicodeArray( rName, nLen );
+}
+
+void OleInputObjectBase::writeOleColorItem( const String& rName, sal_uInt32 nColor )
+{
+ MultiItemsGuard aMultiGuard( mxOut );
+ writeHexItem( rName, nColor, "OLE-COLOR" );
+}
+
+sal_uInt32 OleInputObjectBase::dumpOleColor( const String& rName )
+{
+ sal_uInt32 nOleColor = mxStrm->readuInt32();
+ writeOleColorItem( rName, nOleColor );
+ return nOleColor;
+}
+
+// ============================================================================
+// ============================================================================
+
+StdFontObject::StdFontObject( const InputObjectBase& rParent )
+{
+ construct( rParent );
}
void StdFontObject::implDump()
@@ -64,19 +107,19 @@ void StdFontObject::implDump()
dumpHex< sal_uInt8 >( "flags", "STDFONT-FLAGS" );
dumpDec< sal_uInt16 >( "weight", "FONT-WEIGHT" );
dumpDec< sal_uInt32 >( "height", "STDFONT-HEIGHT" );
- dumpCharArray( "name", in().readuInt8(), RTL_TEXTENCODING_ASCII_US );
+ dumpCharArray( "name", mxStrm->readuInt8(), RTL_TEXTENCODING_ASCII_US );
}
// ============================================================================
-StdPicObject::StdPicObject( const InputObjectBase& rParent ) :
- InputObjectBase( rParent )
+StdPicObject::StdPicObject( const InputObjectBase& rParent )
{
+ construct( rParent );
}
void StdPicObject::implDump()
{
- dumpHex< sal_uInt32 >( "identifier" );
+ dumpHex< sal_uInt32 >( "identifier", "STDPIC-ID" );
sal_uInt32 nSize = dumpHex< sal_uInt32 >( "image-size", "CONV-DEC" );
dumpBinary( "image-data", nSize );
}
@@ -96,9 +139,9 @@ const sal_uInt32 STDHLINK_ASSTRING = 0x00000100; /// Hyperlink as sim
} // namespace
-StdHlinkObject::StdHlinkObject( const InputObjectBase& rParent ) :
- InputObjectBase( rParent )
+StdHlinkObject::StdHlinkObject( const InputObjectBase& rParent )
{
+ construct( rParent );
}
void StdHlinkObject::implDump()
@@ -126,15 +169,14 @@ void StdHlinkObject::implDump()
OUString StdHlinkObject::dumpHyperlinkString( const String& rName, bool bUnicode )
{
- sal_Int32 nLen = in().readInt32();
- return bUnicode ? dumpUnicodeArray( rName, nLen ) : dumpCharArray( rName, nLen, osl_getThreadTextEncoding() );
+ return bUnicode ? dumpUniString32( rName ) : dumpAnsiString32( rName );
}
bool StdHlinkObject::dumpGuidAndMoniker()
{
bool bValidMoniker = true;
OUString aGuid = cfg().getStringOption( dumpGuid( "moniker" ), OUString() );
- IndentGuard aIndGuard( out() );
+ IndentGuard aIndGuard( mxOut );
if( aGuid.equalsAscii( "URLMoniker" ) )
dumpUrlMoniker();
else if( aGuid.equalsAscii( "FileMoniker" ) )
@@ -153,9 +195,9 @@ bool StdHlinkObject::dumpGuidAndMoniker()
void StdHlinkObject::dumpUrlMoniker()
{
sal_Int32 nBytes = dumpDec< sal_Int32 >( "url-bytes" );
- sal_Int64 nEndPos = in().tell() + ::std::max< sal_Int32 >( nBytes, 0 );
+ sal_Int64 nEndPos = mxStrm->tell() + ::std::max< sal_Int32 >( nBytes, 0 );
dumpNullUnicodeArray( "url" );
- if( in().tell() + 24 == nEndPos )
+ if( mxStrm->tell() + 24 == nEndPos )
{
dumpGuid( "implementation-id" );
dumpDec< sal_uInt32 >( "version" );
@@ -172,7 +214,7 @@ void StdHlinkObject::dumpFileMoniker()
dumpHex< sal_uInt16 >( "version" );
dumpUnused( 20 );
sal_Int32 nBytes = dumpDec< sal_Int32 >( "total-bytes" );
- sal_Int64 nEndPos = in().tell() + ::std::max< sal_Int32 >( nBytes, 0 );
+ sal_Int64 nEndPos = mxStrm->tell() + ::std::max< sal_Int32 >( nBytes, 0 );
if( nBytes > 0 )
{
sal_Int32 nFileBytes = dumpDec< sal_Int32 >( "uni-filename-bytes" );
@@ -185,18 +227,18 @@ void StdHlinkObject::dumpFileMoniker()
void StdHlinkObject::dumpItemMoniker()
{
sal_Int32 nBytes = dumpDec< sal_Int32 >( "delimiter-bytes" );
- sal_Int64 nEndPos = in().tell() + ::std::max< sal_Int32 >( nBytes, 0 );
- dumpNullCharArray( "ansi-delimiter", osl_getThreadTextEncoding() );
- if( in().tell() < nEndPos )
- dumpUnicodeArray( "unicode-delimiter", (nEndPos - in().tell()) / 2 );
- in().seek( nEndPos );
+ sal_Int64 nEndPos = mxStrm->tell() + ::std::max< sal_Int32 >( nBytes, 0 );
+ dumpNullCharArray( "ansi-delimiter", RTL_TEXTENCODING_MS_1252 );
+ if( mxStrm->tell() < nEndPos )
+ dumpUnicodeArray( "unicode-delimiter", (nEndPos - mxStrm->tell()) / 2 );
+ mxStrm->seek( nEndPos );
nBytes = dumpDec< sal_Int32 >( "item-bytes" );
- nEndPos = in().tell() + ::std::max< sal_Int32 >( nBytes, 0 );
- dumpNullCharArray( "ansi-item", osl_getThreadTextEncoding() );
- if( in().tell() < nEndPos )
- dumpUnicodeArray( "unicode-item", (nEndPos - in().tell()) / 2 );
- in().seek( nEndPos );
+ nEndPos = mxStrm->tell() + ::std::max< sal_Int32 >( nBytes, 0 );
+ dumpNullCharArray( "ansi-item", RTL_TEXTENCODING_MS_1252 );
+ if( mxStrm->tell() < nEndPos )
+ dumpUnicodeArray( "unicode-item", (nEndPos - mxStrm->tell()) / 2 );
+ mxStrm->seek( nEndPos );
}
void StdHlinkObject::dumpAntiMoniker()
@@ -207,13 +249,54 @@ void StdHlinkObject::dumpAntiMoniker()
void StdHlinkObject::dumpCompositeMoniker()
{
sal_Int32 nCount = dumpDec< sal_Int32 >( "moniker-count" );
- for( sal_Int32 nIndex = 0; !in().isEof() && (nIndex < nCount); ++nIndex )
+ for( sal_Int32 nIndex = 0; !mxStrm->isEof() && (nIndex < nCount); ++nIndex )
dumpGuidAndMoniker();
}
// ============================================================================
// ============================================================================
+OleStreamObject::OleStreamObject( const ObjectBase& rParent, const BinaryInputStreamRef& rxStrm, const OUString& rSysFileName )
+{
+ construct( rParent, rxStrm, rSysFileName );
+}
+
+// ============================================================================
+
+OleCompObjObject::OleCompObjObject( const ObjectBase& rParent, const BinaryInputStreamRef& rxStrm, const OUString& rSysFileName ) :
+ OleStreamObject( rParent, rxStrm, rSysFileName )
+{
+}
+
+void OleCompObjObject::implDump()
+{
+ dumpUnused( 4 );
+ dumpDec< sal_uInt32 >( "version" );
+ dumpUnused( 20 );
+ dumpAnsiString32( "ansi-display-name" );
+ dumpAnsiString32OrStdClip( "ansi-clipboard-format" );
+ if( mxStrm->getRemaining() >= 4 )
+ {
+ sal_Int32 nLen = mxStrm->readInt32();
+ if( (0 <= nLen) && (nLen <= 40) )
+ {
+ dumpCharArray( "ansi-unused", nLen, RTL_TEXTENCODING_MS_1252 );
+ if( (mxStrm->getRemaining() >= 4) && (dumpHex< sal_Int32 >( "unicode-marker" ) == 0x71B239F4) )
+ {
+ dumpUniString32( "unicode-display-name" );
+ dumpUniString32OrStdClip( "unicode-clipboard-format" );
+ dumpUniString32( "unicode-unused" );
+ }
+ }
+ else
+ writeDecItem( "length", nLen );
+ }
+ dumpRemainingStream();
+}
+
+// ============================================================================
+// ============================================================================
+
namespace {
const sal_Int32 OLEPROP_ID_DICTIONARY = 0;
@@ -244,29 +327,26 @@ const sal_Int32 OLEPROP_TYPE_CLIPFMT = 71;
const sal_uInt16 CODEPAGE_UNICODE = 1200;
-const sal_uInt32 OCX_STRING_COMPRESSED = 0x80000000;
+const sal_uInt32 AX_STRING_COMPRESSED = 0x80000000;
} // namespace
// ============================================================================
-OlePropertyStreamObject::OlePropertyStreamObject( const ObjectBase& rParent, const BinaryInputStreamRef& rxStrm, const OUString& rSysFileName ) :
- BinaryStreamObject( rParent, rxStrm, rSysFileName )
+OlePropertyStreamObject::OlePropertyStreamObject( const ObjectBase& rParent, const BinaryInputStreamRef& rxStrm, const OUString& rSysFileName )
{
+ construct( rParent, rxStrm, rSysFileName );
}
void OlePropertyStreamObject::implDump()
{
- BinaryInputStream& rStrm = in();
- Output& rOut = out();
-
OUStringVector aGuidVec;
::std::vector< sal_uInt32 > aStartPosVec;
// dump header
writeEmptyItem( "HEADER" );
{
- IndentGuard aIndGuard( rOut );
+ IndentGuard aIndGuard( mxOut );
dumpHex< sal_uInt16 >( "byte-order", "OLEPROP-BYTE-ORDER" );
dumpDec< sal_uInt16 >( "version" );
dumpDec< sal_uInt16 >( "os-minor" );
@@ -276,29 +356,26 @@ void OlePropertyStreamObject::implDump()
// dump table of section positions
{
- TableGuard aTabGuard( rOut, 15, 60 );
- rOut.resetItemIndex();
- for( sal_Int32 nSectIdx = 0; !rStrm.isEof() && (nSectIdx < nSectCount); ++nSectIdx )
+ TableGuard aTabGuard( mxOut, 15, 60 );
+ mxOut->resetItemIndex();
+ for( sal_Int32 nSectIdx = 0; !mxStrm->isEof() && (nSectIdx < nSectCount); ++nSectIdx )
{
- MultiItemsGuard aMultiGuard( rOut );
+ MultiItemsGuard aMultiGuard( mxOut );
writeEmptyItem( "#section" );
aGuidVec.push_back( dumpGuid( "guid" ) );
aStartPosVec.push_back( dumpHex< sal_uInt32 >( "start-pos", "CONV-DEC" ) );
}
}
}
- rOut.emptyLine();
+ mxOut->emptyLine();
// dump sections
- for( size_t nSectIdx = 0; !rStrm.isEof() && (nSectIdx < aStartPosVec.size()); ++nSectIdx )
+ for( size_t nSectIdx = 0; !mxStrm->isEof() && (nSectIdx < aStartPosVec.size()); ++nSectIdx )
dumpSection( aGuidVec[ nSectIdx ], aStartPosVec[ nSectIdx ] );
}
void OlePropertyStreamObject::dumpSection( const OUString& rGuid, sal_uInt32 nStartPos )
{
- BinaryInputStream& rStrm = in();
- Output& rOut = out();
-
// property ID names
mxPropIds = cfg().createNameList< ConstList >( "OLEPROP-IDS" );
OUString aGuidName = cfg().getStringOption( rGuid, OUString() );
@@ -317,7 +394,7 @@ void OlePropertyStreamObject::dumpSection( const OUString& rGuid, sal_uInt32 nSt
writeSectionHeader( rGuid, nStartPos );
// seek to section
- IndentGuard aIndGuard( rOut );
+ IndentGuard aIndGuard( mxOut );
if( startElement( nStartPos ) )
{
// dump section header
@@ -326,11 +403,11 @@ void OlePropertyStreamObject::dumpSection( const OUString& rGuid, sal_uInt32 nSt
// dump table of property positions
{
- TableGuard aTabGuard( rOut, 15, 25 );
- rOut.resetItemIndex();
- for( sal_Int32 nPropIdx = 0; !rStrm.isEof() && (nPropIdx < nPropCount); ++nPropIdx )
+ TableGuard aTabGuard( mxOut, 15, 25 );
+ mxOut->resetItemIndex();
+ for( sal_Int32 nPropIdx = 0; !mxStrm->isEof() && (nPropIdx < nPropCount); ++nPropIdx )
{
- MultiItemsGuard aMultiGuard( rOut );
+ MultiItemsGuard aMultiGuard( mxOut );
writeEmptyItem( "#property" );
sal_Int32 nPropId = dumpDec< sal_Int32 >( "id", mxPropIds );
sal_uInt32 nPropPos = nStartPos + dumpHex< sal_uInt32 >( "start-pos", "CONV-DEC" );
@@ -338,10 +415,10 @@ void OlePropertyStreamObject::dumpSection( const OUString& rGuid, sal_uInt32 nSt
}
}
}
- rOut.emptyLine();
+ mxOut->emptyLine();
// code page property
- meTextEnc = osl_getThreadTextEncoding();
+ meTextEnc = RTL_TEXTENCODING_MS_1252;
mbIsUnicode = false;
PropertyPosMap::iterator aCodePageIt = aPropMap.find( OLEPROP_ID_CODEPAGE );
if( aCodePageIt != aPropMap.end() )
@@ -369,16 +446,16 @@ void OlePropertyStreamObject::dumpSection( const OUString& rGuid, sal_uInt32 nSt
void OlePropertyStreamObject::dumpProperty( sal_Int32 nPropId, sal_uInt32 nStartPos )
{
writePropertyHeader( nPropId, nStartPos );
- IndentGuard aIndGuard( out() );
+ IndentGuard aIndGuard( mxOut );
if( startElement( nStartPos ) )
dumpPropertyContents( nPropId );
- out().emptyLine();
+ mxOut->emptyLine();
}
void OlePropertyStreamObject::dumpCodePageProperty( sal_uInt32 nStartPos )
{
writePropertyHeader( OLEPROP_ID_CODEPAGE, nStartPos );
- IndentGuard aIndGuard( out() );
+ IndentGuard aIndGuard( mxOut );
if( startElement( nStartPos ) )
{
sal_Int32 nType = dumpPropertyType();
@@ -393,27 +470,27 @@ void OlePropertyStreamObject::dumpCodePageProperty( sal_uInt32 nStartPos )
else
dumpPropertyContents( OLEPROP_ID_CODEPAGE );
}
- out().emptyLine();
+ mxOut->emptyLine();
}
void OlePropertyStreamObject::dumpDictionaryProperty( sal_uInt32 nStartPos )
{
writePropertyHeader( OLEPROP_ID_DICTIONARY, nStartPos );
- IndentGuard aIndGuard( out() );
+ IndentGuard aIndGuard( mxOut );
if( startElement( nStartPos ) )
{
sal_Int32 nCount = dumpDec< sal_Int32 >( "count" );
- for( sal_Int32 nIdx = 0; !in().isEof() && (nIdx < nCount); ++nIdx )
+ for( sal_Int32 nIdx = 0; !mxStrm->isEof() && (nIdx < nCount); ++nIdx )
{
- MultiItemsGuard aMultiGuard( out() );
- TableGuard aTabGuard( out(), 10, 20 );
+ MultiItemsGuard aMultiGuard( mxOut );
+ TableGuard aTabGuard( mxOut, 10, 20 );
sal_Int32 nId = dumpDec< sal_Int32 >( "id" );
OUString aName = dumpString8( "name" );
if( mxPropIds.get() )
mxPropIds->setName( nId, aName );
}
}
- out().emptyLine();
+ mxOut->emptyLine();
}
void OlePropertyStreamObject::dumpPropertyContents( sal_Int32 nPropId )
@@ -423,11 +500,11 @@ void OlePropertyStreamObject::dumpPropertyContents( sal_Int32 nPropId )
{
sal_Int32 nBaseType = nType & 0x0FFF;
sal_Int32 nElemCount = dumpDec< sal_Int32 >( "element-count" );
- for( sal_Int32 nElemIdx = 0; !in().isEof() && (nElemIdx < nElemCount); ++nElemIdx )
+ for( sal_Int32 nElemIdx = 0; !mxStrm->isEof() && (nElemIdx < nElemCount); ++nElemIdx )
{
- out().resetItemIndex( nElemIdx );
+ mxOut->resetItemIndex( nElemIdx );
writeEmptyItem( "#element" );
- IndentGuard aIndGuard( out() );
+ IndentGuard aIndGuard( mxOut );
dumpPropertyValue( nPropId, nBaseType );
}
}
@@ -491,7 +568,7 @@ OUString OlePropertyStreamObject::dumpCharArray8( const String& rName, sal_Int32
if( nNewLen > 0 )
{
::std::vector< sal_Char > aBuffer( nNewLen + 1 );
- in().readMemory( &aBuffer.front(), nNewLen );
+ mxStrm->readMemory( &aBuffer.front(), nNewLen );
aBuffer[ nNewLen ] = 0;
aData = OStringToOUString( OString( &aBuffer.front() ), meTextEnc );
}
@@ -511,7 +588,7 @@ OUString OlePropertyStreamObject::dumpCharArray16( const String& rName, sal_Int3
::std::vector< sal_Unicode > aBuffer;
aBuffer.reserve( nNewLen + 1 );
for( size_t nIdx = 0; nIdx < nNewLen; ++nIdx )
- aBuffer.push_back( static_cast< sal_Unicode >( in().readuInt16() ) );
+ aBuffer.push_back( static_cast< sal_Unicode >( mxStrm->readuInt16() ) );
aBuffer.push_back( 0 );
OUString aData( &aBuffer.front() );
writeStringItem( rName, aData );
@@ -521,15 +598,15 @@ OUString OlePropertyStreamObject::dumpCharArray16( const String& rName, sal_Int3
bool OlePropertyStreamObject::startElement( sal_uInt32 nStartPos )
{
- in().seek( nStartPos );
- if( in().isEof() )
+ mxStrm->seek( nStartPos );
+ if( mxStrm->isEof() )
writeInfoItem( "stream-state", OOX_DUMP_ERR_STREAM );
- return !in().isEof();
+ return !mxStrm->isEof();
}
void OlePropertyStreamObject::writeSectionHeader( const OUString& rGuid, sal_uInt32 nStartPos )
{
- MultiItemsGuard aMultiGuard( out() );
+ MultiItemsGuard aMultiGuard( mxOut );
writeEmptyItem( "SECTION" );
writeHexItem( "pos", nStartPos, "CONV-DEC" );
writeGuidItem( "guid", rGuid );
@@ -537,7 +614,7 @@ void OlePropertyStreamObject::writeSectionHeader( const OUString& rGuid, sal_uIn
void OlePropertyStreamObject::writePropertyHeader( sal_Int32 nPropId, sal_uInt32 nStartPos )
{
- MultiItemsGuard aMultiGuard( out() );
+ MultiItemsGuard aMultiGuard( mxOut );
writeEmptyItem( "PROPERTY" );
writeHexItem( "pos", nStartPos, "CONV-DEC" );
writeDecItem( "id", nPropId, mxPropIds );
@@ -562,7 +639,9 @@ void OleStorageObject::construct( const ObjectBase& rParent )
void OleStorageObject::implDumpStream( const BinaryInputStreamRef& rxStrm, const OUString& /*rStrgPath*/, const OUString& rStrmName, const OUString& rSysFileName )
{
- if( rStrmName.equalsAscii( "\005SummaryInformation" ) || rStrmName.equalsAscii( "\005DocumentSummaryInformation" ) )
+ if( rStrmName.equalsAscii( "\001CompObj" ) )
+ OleCompObjObject( *this, rxStrm, rSysFileName ).dump();
+ else if( rStrmName.equalsAscii( "\005SummaryInformation" ) || rStrmName.equalsAscii( "\005DocumentSummaryInformation" ) )
OlePropertyStreamObject( *this, rxStrm, rSysFileName ).dump();
else
BinaryStreamObject( *this, rxStrm, rSysFileName ).dump();
@@ -571,40 +650,394 @@ void OleStorageObject::implDumpStream( const BinaryInputStreamRef& rxStrm, const
// ============================================================================
// ============================================================================
-void OcxPropertyObjectBase::construct( const ObjectBase& rParent,
+ComCtlObjectBase::ComCtlObjectBase( const InputObjectBase& rParent,
+ sal_uInt32 nDataId5, sal_uInt32 nDataId6, sal_uInt16 nVersion, bool bCommonPart, bool bComplexPart ) :
+ mnDataId5( nDataId5 ),
+ mnDataId6( nDataId6 ),
+ mnVersion( nVersion ),
+ mbCommonPart( bCommonPart ),
+ mbComplexPart( bComplexPart )
+{
+ construct( rParent );
+}
+
+void ComCtlObjectBase::implDump()
+{
+ sal_uInt32 nCommonSize = 0;
+ dumpComCtlSize() && dumpComCtlData( nCommonSize ) && (!mbCommonPart || dumpComCtlCommon( nCommonSize )) && (!mbComplexPart || dumpComCtlComplex());
+}
+
+void ComCtlObjectBase::implDumpCommonExtra( sal_Int64 /*nEndPos*/ )
+{
+}
+
+void ComCtlObjectBase::implDumpCommonTrailing()
+{
+}
+
+bool ComCtlObjectBase::dumpComCtlHeader( sal_uInt32 nExpId, sal_uInt16 nExpMajor, sal_uInt16 nExpMinor )
+{
+ // no idea if all this is correct...
+ sal_uInt32 nId = dumpHex< sal_uInt32 >( "header-id", "COMCTL-HEADER-IDS" );
+ ItemGuard aItem( mxOut, "version" );
+ sal_uInt16 nMinor, nMajor;
+ *mxStrm >> nMinor >> nMajor;
+ mxOut->writeDec( nMajor );
+ mxOut->writeChar( '.' );
+ mxOut->writeDec( nMinor );
+ return !mxStrm->isEof() && (nId == nExpId) && ((nExpMajor == SAL_MAX_UINT16) || (nExpMajor == nMajor)) && ((nExpMinor == SAL_MAX_UINT16) || (nExpMinor == nMinor));
+}
+
+bool ComCtlObjectBase::dumpComCtlSize()
+{
+ if( dumpComCtlHeader( 0x12344321, 0, 8 ) )
+ {
+ IndentGuard aIndGuard( mxOut );
+ dumpDec< sal_Int32 >( "width", "CONV-HMM-TO-CM" );
+ dumpDec< sal_Int32 >( "height", "CONV-HMM-TO-CM" );
+ return !mxStrm->isEof();
+ }
+ return false;
+}
+
+bool ComCtlObjectBase::dumpComCtlData( sal_uInt32& ornCommonPartSize )
+{
+ if( dumpComCtlHeader( (mnVersion == 5) ? mnDataId5 : mnDataId6, mnVersion ) )
+ {
+ IndentGuard aIndGuard( mxOut );
+ if( mbCommonPart )
+ ornCommonPartSize = dumpDec< sal_uInt32 >( "common-part-size" );
+ implDumpProperties();
+ return !mxStrm->isEof();
+ }
+ return false;
+}
+
+bool ComCtlObjectBase::dumpComCtlCommon( sal_uInt32 nPartSize )
+{
+ sal_Int64 nEndPos = mxStrm->tell() + nPartSize;
+ if( (nPartSize >= 16) && dumpComCtlHeader( 0xABCDEF01, 5, 0 ) )
+ {
+ IndentGuard aIndGuard( mxOut );
+ dumpUnknown( 4 );
+ dumpHex< sal_uInt32 >( "common-flags", "COMCTL-COMMON-FLAGS" );
+ implDumpCommonExtra( nEndPos );
+ dumpRemainingTo( nEndPos );
+ implDumpCommonTrailing();
+ return !mxStrm->isEof();
+ }
+ return false;
+}
+
+bool ComCtlObjectBase::dumpComCtlComplex()
+{
+ if( dumpComCtlHeader( 0xBDECDE1F, 5, 1 ) )
+ {
+ IndentGuard aIndGuard( mxOut );
+ sal_uInt32 nFlags = dumpHex< sal_uInt32 >( "comctl-complex-flags", "COMCTL-COMPLEX-FLAGS" );
+ if( !mxStrm->isEof() && (nFlags & 0x01) )
+ {
+ writeEmptyItem( "font" );
+ IndentGuard aIndGuard2( mxOut );
+ OUString aClassName = cfg().getStringOption( dumpGuid(), OUString() );
+ if( aClassName.equalsAscii( "StdFont" ) )
+ StdFontObject( *this ).dump();
+ }
+ if( !mxStrm->isEof() && (nFlags & 0x02) )
+ {
+ writeEmptyItem( "mouse-icon" );
+ IndentGuard aIndGuard2( mxOut );
+ OUString aClassName = cfg().getStringOption( dumpGuid(), OUString() );
+ if( aClassName.equalsAscii( "StdPic" ) )
+ StdPicObject( *this ).dump();
+ }
+ return !mxStrm->isEof();
+ }
+ return false;
+}
+
+// ============================================================================
+
+ComCtlScrollBarObject::ComCtlScrollBarObject( const InputObjectBase& rParent, sal_uInt16 nVersion ) :
+ ComCtlObjectBase( rParent, SAL_MAX_UINT32, 0x99470A83, nVersion, true, true )
+{
+}
+
+void ComCtlScrollBarObject::implDumpProperties()
+{
+ dumpHex< sal_uInt32 >( "flags", "COMCTL-SCROLLBAR-FLAGS" );
+ dumpDec< sal_Int32 >( "large-change" );
+ dumpDec< sal_Int32 >( "small-change" );
+ dumpDec< sal_Int32 >( "min" );
+ dumpDec< sal_Int32 >( "max" );
+ dumpDec< sal_Int32 >( "value" );
+}
+
+// ============================================================================
+
+ComCtlProgressBarObject::ComCtlProgressBarObject( const InputObjectBase& rParent, sal_uInt16 nVersion ) :
+ ComCtlObjectBase( rParent, 0xE6E17E84, 0x97AB8A01, nVersion, true, true )
+{
+}
+
+void ComCtlProgressBarObject::implDumpProperties()
+{
+ dumpDec< float >( "min" );
+ dumpDec< float >( "max" );
+ if( mnVersion == 6 )
+ {
+ dumpBool< sal_uInt16 >( "vertical" );
+ dumpBool< sal_uInt16 >( "smooth-scroll" );
+ }
+}
+
+// ============================================================================
+
+ComCtlSliderObject::ComCtlSliderObject( const InputObjectBase& rParent, sal_uInt16 nVersion ) :
+ ComCtlObjectBase( rParent, 0xE6E17E86, 0x0A2BAE11, nVersion, true, true )
+{
+}
+
+void ComCtlSliderObject::implDumpProperties()
+{
+ dumpBool< sal_Int32 >( "vertical" );
+ dumpDec< sal_Int32 >( "large-change" );
+ dumpDec< sal_Int32 >( "small-change" );
+ dumpDec< sal_Int32 >( "min" );
+ dumpDec< sal_Int32 >( "max" );
+ dumpDec< sal_Int16 >( "select-range", "COMCTL-SLIDER-SELECTRANGE" );
+ dumpUnused( 2 );
+ dumpDec< sal_Int32 >( "select-start" );
+ dumpDec< sal_Int32 >( "select-length" );
+ dumpDec< sal_Int32 >( "tick-style", "COMCTL-SLIDER-TICKSTYLE" );
+ dumpDec< sal_Int32 >( "tick-frequency" );
+ dumpDec< sal_Int32 >( "value" );
+ if( mnVersion == 6 )
+ dumpBool< sal_Int32 >( "tooltip-below" );
+}
+
+// ============================================================================
+
+ComCtlUpDownObject::ComCtlUpDownObject( const InputObjectBase& rParent, sal_uInt16 nVersion ) :
+ ComCtlObjectBase( rParent, 0xFF3626A0, 0xFF3626A0, nVersion, false, false )
+{
+}
+
+void ComCtlUpDownObject::implDumpProperties()
+{
+ dumpUnknown( 16 ); // buddy-property, somehow
+ dumpDec< sal_Int32 >( "buddy-control" );
+ dumpUnknown( 8 );
+ dumpDec< sal_Int32 >( "value" );
+ dumpUnknown( 4 );
+ dumpDec< sal_Int32 >( "increment" );
+ dumpDec< sal_Int32 >( "max" );
+ dumpDec< sal_Int32 >( "min" );
+ dumpHex< sal_uInt32 >( "flags-1", "COMCTL-UPDOWN-FLAGS1" );
+ dumpHex< sal_uInt32 >( "flags-2", "COMCTL-UPDOWN-FLAGS2" );
+ dumpUnknown( 4 );
+}
+
+// ============================================================================
+
+ComCtlImageListObject::ComCtlImageListObject( const InputObjectBase& rParent, sal_uInt16 nVersion ) :
+ ComCtlObjectBase( rParent, 0xE6E17E80, 0xE6E17E80, nVersion, true, false )
+{
+}
+
+void ComCtlImageListObject::implDumpProperties()
+{
+ dumpDec< sal_uInt16 >( "image-width" );
+ dumpDec< sal_uInt16 >( "image-height" );
+ dumpOleColor( "mask-color" );
+ dumpBool< sal_Int16 >( "use-mask-color" );
+ dumpUnknown( 2 );
+}
+
+void ComCtlImageListObject::implDumpCommonExtra( sal_Int64 /*nEndPos*/ )
+{
+ dumpUnknown( 4 );
+ dumpOleColor( "back-color" );
+ dumpUnknown( 4 );
+ sal_Int32 nImageCount = dumpDec< sal_Int32 >( "image-count" );
+ mxOut->resetItemIndex();
+ for( sal_Int32 nImageIndex = 0; (nImageIndex < nImageCount) && !mxStrm->isEof(); ++nImageIndex )
+ {
+ writeEmptyItem( "#image" );
+ IndentGuard aIndGuard( mxOut );
+ sal_uInt8 nFlags = dumpHex< sal_uInt8 >( "text-flags", "COMCTL-IMAGELIST-TEXTFLAGS" );
+ if( nFlags & 0x01 ) dumpUniString32( "caption" );
+ if( nFlags & 0x02 ) dumpUniString32( "key" );
+ }
+}
+
+void ComCtlImageListObject::implDumpCommonTrailing()
+{
+ sal_Int32 nImageCount = dumpDec< sal_Int32 >( "image-count" );
+ mxOut->resetItemIndex();
+ for( sal_Int32 nImageIndex = 0; (nImageIndex < nImageCount) && !mxStrm->isEof(); ++nImageIndex )
+ {
+ writeEmptyItem( "#image" );
+ IndentGuard aIndGuard( mxOut );
+ dumpDec< sal_Int32 >( "index" );
+ StdPicObject( *this ).dump();
+ }
+}
+
+// ============================================================================
+
+ComCtlTabStripObject::ComCtlTabStripObject( const InputObjectBase& rParent, sal_uInt16 nVersion ) :
+ ComCtlObjectBase( rParent, 0xE6E17E8A, 0xD12A7AC1, nVersion, true, true )
+{
+}
+
+void ComCtlTabStripObject::implDumpProperties()
+{
+ dumpHex< sal_uInt32 >( "flags-1", "COMCTL-TABSTRIP-FLAGS1" );
+ dumpDec< sal_uInt16 >( "tab-fixed-width", "CONV-HMM-TO-CM" );
+ dumpDec< sal_uInt16 >( "tab-fixed-height", "CONV-HMM-TO-CM" );
+ if( mnVersion == 6 )
+ {
+ dumpHex< sal_uInt32 >( "flags-2", "COMCTL-TABSTRIP-FLAGS2" );
+ dumpDec< sal_uInt16 >( "tab-min-width", "CONV-HMM-TO-CM" );
+ dumpUnknown( 2 );
+ dumpHex< sal_uInt32 >( "flags-3", "COMCTL-TABSTRIP-FLAGS3" );
+ }
+}
+
+void ComCtlTabStripObject::implDumpCommonExtra( sal_Int64 /*nEndPos*/ )
+{
+ dumpUnknown( 12 );
+ dumpUniString32( "image-list" );
+ sal_Int32 nTabCount = dumpDec< sal_Int32 >( "tab-count" );
+ mxOut->resetItemIndex();
+ for( sal_Int32 nTabIndex = 0; (nTabIndex < nTabCount) && !mxStrm->isEof(); ++nTabIndex )
+ {
+ writeEmptyItem( "#tab" );
+ IndentGuard aIndGuard( mxOut );
+ dumpUnknown( 4 );
+ sal_uInt32 nTabFlags = dumpHex< sal_uInt32 >( "tab-flags", "COMCTL-TABSTRIP-TABFLAGS" );
+ if( nTabFlags & 0x01 ) dumpUniString32( "caption" );
+ if( nTabFlags & 0x02 ) dumpUniString32( "key" );
+ if( nTabFlags & 0x04 ) dumpUniString32( "tag" );
+ if( nTabFlags & 0x08 ) dumpUniString32( "tooltip" );
+ dumpDec< sal_uInt16 >( "image-id" );
+ }
+}
+
+// ============================================================================
+
+ComCtlTreeViewObject::ComCtlTreeViewObject( const InputObjectBase& rParent, sal_uInt16 nVersion ) :
+ ComCtlObjectBase( rParent, 0xE6E17E8E, 0x6AC13CB1, nVersion, true, true ),
+ mnStringFlags( 0 )
+{
+}
+
+void ComCtlTreeViewObject::implDumpProperties()
+{
+ dumpHex< sal_uInt32 >( "flags", "COMCTL-TREEVIEW-FLAGS" );
+ dumpDec< sal_Int32 >( "indentation", "CONV-HMM-TO-CM" );
+ if( mnVersion == 6 )
+ dumpHex< sal_uInt32 >( "flags-2", "COMCTL-TREEVIEW-FLAGS2" );
+ mnStringFlags = dumpHex< sal_uInt32 >( "string-flags", "COMCTL-TREEVIEW-STRINGFLAGS" );
+}
+
+void ComCtlTreeViewObject::implDumpCommonExtra( sal_Int64 /*nEndPos*/ )
+{
+ dumpOleColor( "text-color" );
+ dumpOleColor( "back-color" );
+ dumpUnknown( 4 );
+ if( mnStringFlags & 0x02 )
+ dumpUniString32( "image-list" );
+ dumpUniString32( "path-separator" );
+}
+
+// ============================================================================
+
+ComCtlStatusBarObject::ComCtlStatusBarObject( const InputObjectBase& rParent, sal_uInt16 nVersion ) :
+ ComCtlObjectBase( rParent, 0xE6E17E88, SAL_MAX_UINT32, nVersion, true, true )
+{
+}
+
+void ComCtlStatusBarObject::implDumpProperties()
+{
+ dumpBool< sal_Int32 >( "style-simple-text" );
+ dumpBool< sal_Int16 >( "show-tips" );
+ dumpUnknown( 2 );
+}
+
+void ComCtlStatusBarObject::implDumpCommonExtra( sal_Int64 /*nEndPos*/ )
+{
+ dumpUnknown( 12 );
+ dumpUniString32( "simple-text" );
+ sal_Int32 nPanelCount = dumpDec< sal_Int32 >( "panel-count" );
+ mxOut->resetItemIndex();
+ for( sal_Int32 nPanelIndex = 0; (nPanelIndex < nPanelCount) && !mxStrm->isEof(); ++nPanelIndex )
+ {
+ writeEmptyItem( "#panel" );
+ IndentGuard aIndGuard( mxOut );
+ dumpHex< sal_uInt32 >( "panel-flags", "COMCTL-STATUSBAR-PANELFLAGS" );
+ dumpDec< sal_Int32 >( "current-width", "CONV-HMM-TO-CM" );
+ dumpDec< sal_Int32 >( "minimal-width", "CONV-HMM-TO-CM" );
+ sal_uInt32 nTextFlags = dumpHex< sal_uInt32 >( "text-flags", "COMCTL-STATUSBAR-TEXTFLAGS" );
+ if( nTextFlags & 0x01 ) dumpUniString32( "text" );
+ if( nTextFlags & 0x02 ) dumpUniString32( "vis-text" );
+ if( nTextFlags & 0x04 ) dumpUniString32( "key" );
+ if( nTextFlags & 0x08 ) dumpUniString32( "tag" );
+ if( nTextFlags & 0x10 ) dumpUniString32( "tooltip" );
+ }
+}
+
+void ComCtlStatusBarObject::implDumpCommonTrailing()
+{
+ sal_Int32 nImageCount = dumpDec< sal_Int32 >( "image-count" );
+ mxOut->resetItemIndex();
+ for( sal_Int32 nImageIndex = 0; (nImageIndex < nImageCount) && !mxStrm->isEof(); ++nImageIndex )
+ {
+ writeEmptyItem( "#image" );
+ IndentGuard aIndGuard( mxOut );
+ dumpDec< sal_Int32 >( "panel-index" );
+ StdPicObject( *this ).dump();
+ }
+}
+
+// ============================================================================
+// ============================================================================
+
+void AxPropertyObjectBase::construct( const ObjectBase& rParent,
const BinaryInputStreamRef& rxStrm, const OUString& rSysFileName, const String& rPropNameList, bool b64BitPropFlags )
{
- InputObjectBase::construct( rParent, rxStrm, rSysFileName );
- constructOcxPropObj( rPropNameList, b64BitPropFlags );
+ OleInputObjectBase::construct( rParent, rxStrm, rSysFileName );
+ constructAxPropObj( rPropNameList, b64BitPropFlags );
}
-void OcxPropertyObjectBase::construct( const OutputObjectBase& rParent,
+void AxPropertyObjectBase::construct( const OutputObjectBase& rParent,
const BinaryInputStreamRef& rxStrm, const String& rPropNameList, bool b64BitPropFlags )
{
- InputObjectBase::construct( rParent, rxStrm );
- constructOcxPropObj( rPropNameList, b64BitPropFlags );
+ OleInputObjectBase::construct( rParent, rxStrm );
+ constructAxPropObj( rPropNameList, b64BitPropFlags );
}
-void OcxPropertyObjectBase::construct( const InputObjectBase& rParent,
+void AxPropertyObjectBase::construct( const InputObjectBase& rParent,
const String& rPropNameList, bool b64BitPropFlags )
{
- InputObjectBase::construct( rParent );
- constructOcxPropObj( rPropNameList, b64BitPropFlags );
+ OleInputObjectBase::construct( rParent );
+ constructAxPropObj( rPropNameList, b64BitPropFlags );
}
-bool OcxPropertyObjectBase::implIsValid() const
+bool AxPropertyObjectBase::implIsValid() const
{
- return InputObjectBase::implIsValid() && in().isSeekable();
+ return OleInputObjectBase::implIsValid() && mxStrm->isSeekable();
}
-void OcxPropertyObjectBase::implDump()
+void AxPropertyObjectBase::implDump()
{
mbValid = true;
// header
setAlignAnchor();
dumpVersion();
sal_uInt16 nSize = dumpDec< sal_uInt16 >( "size" );
- mnPropertiesEnd = in().tell() + nSize;
+ mnPropertiesEnd = mxStrm->tell() + nSize;
// property flags
maLargeProps.clear();
maStreamProps.clear();
@@ -618,17 +1051,17 @@ void OcxPropertyObjectBase::implDump()
implDumpExtended();
}
-void OcxPropertyObjectBase::implDumpShortProperties()
+void AxPropertyObjectBase::implDumpShortProperties()
{
}
-void OcxPropertyObjectBase::implDumpExtended()
+void AxPropertyObjectBase::implDumpExtended()
{
}
-bool OcxPropertyObjectBase::ensureValid( bool bCondition )
+bool AxPropertyObjectBase::ensureValid( bool bCondition )
{
- if( mbValid && (!bCondition || in().isEof()) )
+ if( mbValid && (!bCondition || mxStrm->isEof()) )
{
if( !bCondition )
writeInfoItem( "state", OOX_DUMP_ERRASCII( "format-error" ) );
@@ -637,12 +1070,12 @@ bool OcxPropertyObjectBase::ensureValid( bool bCondition )
return mbValid;
}
-void OcxPropertyObjectBase::setAlignAnchor()
+void AxPropertyObjectBase::setAlignAnchor()
{
- mnPropertiesStart = in().tell();
+ mnPropertiesStart = mxStrm->tell();
}
-bool OcxPropertyObjectBase::startNextProperty()
+bool AxPropertyObjectBase::startNextProperty()
{
if( mnCurrProp == 0 ) mnCurrProp = 1; else mnCurrProp <<= 1;
bool bHasProp = getFlag( mnPropFlags, mnCurrProp );
@@ -650,12 +1083,12 @@ bool OcxPropertyObjectBase::startNextProperty()
return ensureValid() && bHasProp;
}
-OUString OcxPropertyObjectBase::getPropertyName() const
+OUString AxPropertyObjectBase::getPropertyName() const
{
return cfg().getName( mxPropNames, mnCurrProp );
}
-sal_uInt32 OcxPropertyObjectBase::dumpFlagsProperty( sal_uInt32 nDefault, const sal_Char* pcNameList )
+sal_uInt32 AxPropertyObjectBase::dumpFlagsProperty( sal_uInt32 nDefault, const sal_Char* pcNameList )
{
if( startNextProperty() )
{
@@ -665,18 +1098,17 @@ sal_uInt32 OcxPropertyObjectBase::dumpFlagsProperty( sal_uInt32 nDefault, const
return nDefault;
}
-sal_uInt32 OcxPropertyObjectBase::dumpColorProperty( sal_uInt32 nDefault )
+sal_uInt32 AxPropertyObjectBase::dumpColorProperty( sal_uInt32 nDefault )
{
if( startNextProperty() )
{
- MultiItemsGuard aMultiGuard( out() );
alignInput< sal_uInt32 >();
- return dumpHex< sal_uInt32 >( getPropertyName(), "OCX-COLOR" );
+ return dumpOleColor( getPropertyName() );
}
return nDefault;
}
-sal_Unicode OcxPropertyObjectBase::dumpUnicodeProperty()
+sal_Unicode AxPropertyObjectBase::dumpUnicodeProperty()
{
if( startNextProperty() )
{
@@ -686,41 +1118,41 @@ sal_Unicode OcxPropertyObjectBase::dumpUnicodeProperty()
return '\0';
}
-void OcxPropertyObjectBase::dumpUnknownProperty()
+void AxPropertyObjectBase::dumpUnknownProperty()
{
if( startNextProperty() )
ensureValid( false );
}
-void OcxPropertyObjectBase::dumpPosProperty()
+void AxPropertyObjectBase::dumpPosProperty()
{
if( startNextProperty() )
maLargeProps.push_back( LargeProperty( LargeProperty::PROPTYPE_POS, getPropertyName(), 8 ) );
}
-void OcxPropertyObjectBase::dumpSizeProperty()
+void AxPropertyObjectBase::dumpSizeProperty()
{
if( startNextProperty() )
maLargeProps.push_back( LargeProperty( LargeProperty::PROPTYPE_SIZE, getPropertyName(), 8 ) );
}
-void OcxPropertyObjectBase::dumpGuidProperty( OUString* pValue )
+void AxPropertyObjectBase::dumpGuidProperty( OUString* pValue )
{
if( startNextProperty() )
maLargeProps.push_back( LargeProperty( LargeProperty::PROPTYPE_GUID, getPropertyName(), 16, pValue ) );
}
-void OcxPropertyObjectBase::dumpStringProperty( OUString* pValue )
+void AxPropertyObjectBase::dumpStringProperty( OUString* pValue )
{
if( startNextProperty() )
{
alignInput< sal_uInt32 >();
- sal_uInt32 nLen = dumpHex< sal_uInt32 >( getPropertyName(), "OCX-STRINGLEN" );
+ sal_uInt32 nLen = dumpHex< sal_uInt32 >( getPropertyName(), "AX-STRINGLEN" );
maLargeProps.push_back( LargeProperty( LargeProperty::PROPTYPE_STRING, getPropertyName(), nLen, pValue ) );
}
}
-void OcxPropertyObjectBase::dumpStringArrayProperty()
+void AxPropertyObjectBase::dumpStringArrayProperty()
{
if( startNextProperty() )
{
@@ -730,7 +1162,7 @@ void OcxPropertyObjectBase::dumpStringArrayProperty()
}
}
-void OcxPropertyObjectBase::dumpStreamProperty()
+void AxPropertyObjectBase::dumpStreamProperty()
{
if( startNextProperty() )
{
@@ -740,26 +1172,26 @@ void OcxPropertyObjectBase::dumpStreamProperty()
}
}
-void OcxPropertyObjectBase::dumpEmbeddedFont()
+void AxPropertyObjectBase::dumpEmbeddedFont()
{
if( ensureValid() )
{
writeEmptyItem( "embedded-fontdata" );
- IndentGuard aIndGuard( out() );
- OcxCFontNewObject( *this ).dump();
+ IndentGuard aIndGuard( mxOut );
+ AxCFontNewObject( *this ).dump();
}
}
-void OcxPropertyObjectBase::dumpToPosition( sal_Int64 nPos )
+void AxPropertyObjectBase::dumpToPosition( sal_Int64 nPos )
{
dumpRemainingTo( nPos );
mbValid = true;
ensureValid();
}
-void OcxPropertyObjectBase::constructOcxPropObj( const String& rPropNameList, bool b64BitPropFlags )
+void AxPropertyObjectBase::constructAxPropObj( const String& rPropNameList, bool b64BitPropFlags )
{
- if( InputObjectBase::implIsValid() )
+ if( OleInputObjectBase::implIsValid() )
{
mxPropNames = cfg().getNameList( rPropNameList );
mb64BitPropFlags = b64BitPropFlags;
@@ -767,19 +1199,19 @@ void OcxPropertyObjectBase::constructOcxPropObj( const String& rPropNameList, bo
}
}
-void OcxPropertyObjectBase::dumpVersion()
+void AxPropertyObjectBase::dumpVersion()
{
- ItemGuard aItem( out(), "version" );
+ ItemGuard aItem( mxOut, "version" );
sal_uInt8 nMinor, nMajor;
- in() >> nMinor >> nMajor;
- out().writeDec( nMajor );
- out().writeChar( '.' );
- out().writeDec( nMinor );
+ *mxStrm >> nMinor >> nMajor;
+ mxOut->writeDec( nMajor );
+ mxOut->writeChar( '.' );
+ mxOut->writeDec( nMinor );
}
-OUString OcxPropertyObjectBase::dumpString( const String& rName, sal_uInt32 nSize, bool bArray )
+OUString AxPropertyObjectBase::dumpString( const String& rName, sal_uInt32 nSize, bool bArray )
{
- bool bCompressed = getFlag( nSize, OCX_STRING_COMPRESSED );
+ bool bCompressed = getFlag( nSize, AX_STRING_COMPRESSED );
sal_uInt32 nBufSize = extractValue< sal_uInt32 >( nSize, 0, 31 );
OUString aString = bCompressed ?
dumpCharArray( rName, nBufSize, RTL_TEXTENCODING_ISO_8859_1 ) :
@@ -788,30 +1220,30 @@ OUString OcxPropertyObjectBase::dumpString( const String& rName, sal_uInt32 nSiz
return aString;
}
-void OcxPropertyObjectBase::dumpShortProperties()
+void AxPropertyObjectBase::dumpShortProperties()
{
if( ensureValid() )
{
writeEmptyItem( "short-properties" );
- IndentGuard aIndGuard( out() );
+ IndentGuard aIndGuard( mxOut );
implDumpShortProperties();
alignInput< sal_uInt32 >();
}
}
-void OcxPropertyObjectBase::dumpLargeProperties()
+void AxPropertyObjectBase::dumpLargeProperties()
{
if( ensureValid( mnPropFlags == 0 ) && !maLargeProps.empty() )
{
writeEmptyItem( "large-properties" );
- IndentGuard aIndGuard( out() );
+ IndentGuard aIndGuard( mxOut );
for( LargePropertyVector::iterator aIt = maLargeProps.begin(), aEnd = maLargeProps.end(); ensureValid() && (aIt != aEnd); ++aIt )
{
switch( aIt->mePropType )
{
case LargeProperty::PROPTYPE_POS:
{
- MultiItemsGuard aMultiGuard( out() );
+ MultiItemsGuard aMultiGuard( mxOut );
writeEmptyItem( aIt->maItemName );
dumpDec< sal_Int32 >( "top", "CONV-HMM-TO-CM" );
dumpDec< sal_Int32 >( "left", "CONV-HMM-TO-CM" );
@@ -819,7 +1251,7 @@ void OcxPropertyObjectBase::dumpLargeProperties()
break;
case LargeProperty::PROPTYPE_SIZE:
{
- MultiItemsGuard aMultiGuard( out() );
+ MultiItemsGuard aMultiGuard( mxOut );
writeEmptyItem( aIt->maItemName );
dumpDec< sal_Int32 >( "width", "CONV-HMM-TO-CM" );
dumpDec< sal_Int32 >( "height", "CONV-HMM-TO-CM" );
@@ -842,13 +1274,13 @@ void OcxPropertyObjectBase::dumpLargeProperties()
case LargeProperty::PROPTYPE_STRINGARRAY:
{
writeEmptyItem( aIt->maItemName );
- IndentGuard aIndGuard2( out() );
- out().resetItemIndex();
- sal_Int64 nEndPos = in().tell() + aIt->mnDataSize;
- while( in().tell() < nEndPos )
+ IndentGuard aIndGuard2( mxOut );
+ mxOut->resetItemIndex();
+ sal_Int64 nEndPos = mxStrm->tell() + aIt->mnDataSize;
+ while( mxStrm->tell() < nEndPos )
{
- MultiItemsGuard aMultiGuard( out() );
- sal_uInt32 nDataSize = dumpHex< sal_uInt32 >( "#flags", "OCX-ARRAYSTRINGLEN" );
+ MultiItemsGuard aMultiGuard( mxOut );
+ sal_uInt32 nDataSize = dumpHex< sal_uInt32 >( "#flags", "AX-ARRAYSTRINGLEN" );
dumpString( "string", nDataSize, true );
}
dumpToPosition( nEndPos );
@@ -862,20 +1294,20 @@ void OcxPropertyObjectBase::dumpLargeProperties()
if( ensureValid() && !maStreamProps.empty() )
{
writeEmptyItem( "stream-properties" );
- IndentGuard aIndGuard( out() );
+ IndentGuard aIndGuard( mxOut );
for( StreamPropertyVector::iterator aIt = maStreamProps.begin(), aEnd = maStreamProps.end(); ensureValid() && (aIt != aEnd); ++aIt )
{
writeEmptyItem( aIt->maItemName );
if( ensureValid( aIt->mnData == 0xFFFF ) )
{
- IndentGuard aIndGuard2( out() );
+ IndentGuard aIndGuard2( mxOut );
OUString aClassName = cfg().getStringOption( dumpGuid(), OUString() );
if( aClassName.equalsAscii( "StdFont" ) )
StdFontObject( *this ).dump();
else if( aClassName.equalsAscii( "StdPic" ) )
StdPicObject( *this ).dump();
else if( aClassName.equalsAscii( "CFontNew" ) )
- OcxCFontNewObject( *this ).dump();
+ AxCFontNewObject( *this ).dump();
else
ensureValid( false );
}
@@ -885,43 +1317,43 @@ void OcxPropertyObjectBase::dumpLargeProperties()
// ============================================================================
-OcxCFontNewObject::OcxCFontNewObject( const InputObjectBase& rParent )
+AxCFontNewObject::AxCFontNewObject( const InputObjectBase& rParent )
{
- OcxPropertyObjectBase::construct( rParent, "OCX-CFONTNEW-PROPERTIES" );
+ AxPropertyObjectBase::construct( rParent, "AX-CFONTNEW-PROPERTIES" );
}
-void OcxCFontNewObject::implDumpShortProperties()
+void AxCFontNewObject::implDumpShortProperties()
{
dumpStringProperty();
- dumpFlagsProperty( 0, "OCX-CFONTNEW-FLAGS" );
+ dumpFlagsProperty( 0, "AX-CFONTNEW-FLAGS" );
dumpDecProperty< sal_Int32 >( 160 );
dumpDecProperty< sal_Int32 >( 0 );
- dumpDecProperty< sal_uInt8 >( 1, "CHARSET" );
+ dumpDecProperty< sal_uInt8 >( WINDOWS_CHARSET_DEFAULT, "CHARSET" );
dumpDecProperty< sal_uInt8 >( 0, "FONT-PITCHFAMILY" );
- dumpDecProperty< sal_uInt8 >( 1, "OCX-CFONTNEW-ALIGNMENT" );
+ dumpDecProperty< sal_uInt8 >( 1, "AX-CFONTNEW-ALIGNMENT" );
dumpDecProperty< sal_uInt16 >( 400, "FONT-WEIGHT" );
}
// ============================================================================
-OcxColumnInfoObject::OcxColumnInfoObject( const InputObjectBase& rParent )
+AxColumnInfoObject::AxColumnInfoObject( const InputObjectBase& rParent )
{
- OcxPropertyObjectBase::construct( rParent, "OCX-COLUMNINFO-PROPERTIES" );
+ AxPropertyObjectBase::construct( rParent, "AX-COLUMNINFO-PROPERTIES" );
}
-void OcxColumnInfoObject::implDumpShortProperties()
+void AxColumnInfoObject::implDumpShortProperties()
{
dumpDecProperty< sal_Int32 >( -1, "CONV-HMM-TO-CM" );
}
// ============================================================================
-OcxCommandButtonObject::OcxCommandButtonObject( const InputObjectBase& rParent )
+AxCommandButtonObject::AxCommandButtonObject( const InputObjectBase& rParent )
{
- OcxPropertyObjectBase::construct( rParent, "OCX-COMMANDBUTTON-PROPERTIES" );
+ AxPropertyObjectBase::construct( rParent, "AX-COMMANDBUTTON-PROPERTIES" );
}
-void OcxCommandButtonObject::implDumpShortProperties()
+void AxCommandButtonObject::implDumpShortProperties()
{
dumpColorProperty( 0x80000012 );
dumpColorProperty( 0x80000008 );
@@ -936,42 +1368,42 @@ void OcxCommandButtonObject::implDumpShortProperties()
dumpStreamProperty();
}
-void OcxCommandButtonObject::implDumpExtended()
+void AxCommandButtonObject::implDumpExtended()
{
dumpEmbeddedFont();
}
// ============================================================================
-OcxMorphControlObject::OcxMorphControlObject( const InputObjectBase& rParent )
+AxMorphControlObject::AxMorphControlObject( const InputObjectBase& rParent )
{
- OcxPropertyObjectBase::construct( rParent, "OCX-MORPH-PROPERTIES", true );
+ AxPropertyObjectBase::construct( rParent, "AX-MORPH-PROPERTIES", true );
}
-void OcxMorphControlObject::implDumpShortProperties()
+void AxMorphControlObject::implDumpShortProperties()
{
dumpFlagsProperty( 0x2C80081B );
dumpColorProperty( 0x80000005 );
dumpColorProperty( 0x80000008 );
dumpDecProperty< sal_uInt32 >( 0 );
dumpBorderStyleProperty< sal_uInt8 >( 0 );
- dumpDecProperty< sal_uInt8 >( 0, "OCX-MORPH-SCROLLBARS" );
- mnCtrlType = dumpDecProperty< sal_uInt8 >( 1, "OCX-MORPH-CONTROLTYPE" );
+ dumpDecProperty< sal_uInt8 >( 0, "AX-MORPH-SCROLLBARS" );
+ mnCtrlType = dumpDecProperty< sal_uInt8 >( 1, "AX-MORPH-CONTROLTYPE" );
dumpMousePtrProperty();
dumpSizeProperty();
dumpUnicodeProperty();
dumpDecProperty< sal_uInt32 >( 0, "CONV-HMM-TO-CM" );
- dumpDecProperty< sal_uInt16 >( 1, "OCX-MORPH-BOUNDCOLUMN" );
- dumpDecProperty< sal_Int16 >( -1, "OCX-MORPH-TEXTCOLUMN" );
- dumpDecProperty< sal_Int16 >( 1, "OCX-MORPH-COLUMNCOUNT" );
+ dumpDecProperty< sal_uInt16 >( 1, "AX-MORPH-BOUNDCOLUMN" );
+ dumpDecProperty< sal_Int16 >( -1, "AX-MORPH-TEXTCOLUMN" );
+ dumpDecProperty< sal_Int16 >( 1, "AX-MORPH-COLUMNCOUNT" );
dumpDecProperty< sal_uInt16 >( 8 );
mnColInfoCount = dumpDecProperty< sal_uInt16 >( 1 );
- dumpDecProperty< sal_uInt8 >( 2, "OCX-MORPH-MATCHENTRYTYPE" );
- dumpDecProperty< sal_uInt8 >( 0, "OCX-MORPH-LISTSTYLE" );
- dumpDecProperty< sal_uInt8 >( 0, "OCX-MORPH-SHOWDROPDOWNMODE" );
+ dumpDecProperty< sal_uInt8 >( 2, "AX-MORPH-MATCHENTRYTYPE" );
+ dumpDecProperty< sal_uInt8 >( 0, "AX-MORPH-LISTSTYLE" );
+ dumpDecProperty< sal_uInt8 >( 0, "AX-MORPH-SHOWDROPDOWNMODE" );
dumpUnknownProperty();
- dumpDecProperty< sal_uInt8 >( 1, "OCX-MORPH-DROPDOWNSTYLE" );
- dumpDecProperty< sal_uInt8 >( 0, "OCX-MORPH-SELECTIONTYPE" );
+ dumpDecProperty< sal_uInt8 >( 1, "AX-MORPH-DROPDOWNSTYLE" );
+ dumpDecProperty< sal_uInt8 >( 0, "AX-MORPH-SELECTIONTYPE" );
dumpStringProperty();
dumpStringProperty();
dumpImagePosProperty();
@@ -985,34 +1417,34 @@ void OcxMorphControlObject::implDumpShortProperties()
dumpStringProperty();
}
-void OcxMorphControlObject::implDumpExtended()
+void AxMorphControlObject::implDumpExtended()
{
dumpEmbeddedFont();
dumpColumnInfos();
}
-void OcxMorphControlObject::dumpColumnInfos()
+void AxMorphControlObject::dumpColumnInfos()
{
if( ensureValid() && (mnColInfoCount > 0) && ((mnCtrlType == 2) || (mnCtrlType == 3)) )
{
- out().resetItemIndex();
+ mxOut->resetItemIndex();
for( sal_uInt16 nIdx = 0; ensureValid() && (nIdx < mnColInfoCount); ++nIdx )
{
writeEmptyItem( "#column-info" );
- IndentGuard aIndGuard( out() );
- OcxColumnInfoObject( *this ).dump();
+ IndentGuard aIndGuard( mxOut );
+ AxColumnInfoObject( *this ).dump();
}
}
}
// ============================================================================
-OcxLabelObject::OcxLabelObject( const InputObjectBase& rParent )
+AxLabelObject::AxLabelObject( const InputObjectBase& rParent )
{
- OcxPropertyObjectBase::construct( rParent, "OCX-LABEL-PROPERTIES" );
+ AxPropertyObjectBase::construct( rParent, "AX-LABEL-PROPERTIES" );
}
-void OcxLabelObject::implDumpShortProperties()
+void AxLabelObject::implDumpShortProperties()
{
dumpColorProperty( 0x80000012 );
dumpColorProperty( 0x8000000F );
@@ -1029,19 +1461,19 @@ void OcxLabelObject::implDumpShortProperties()
dumpStreamProperty();
}
-void OcxLabelObject::implDumpExtended()
+void AxLabelObject::implDumpExtended()
{
dumpEmbeddedFont();
}
// ============================================================================
-OcxImageObject::OcxImageObject( const InputObjectBase& rParent )
+AxImageObject::AxImageObject( const InputObjectBase& rParent )
{
- OcxPropertyObjectBase::construct( rParent, "OCX-IMAGE-PROPERTIES" );
+ AxPropertyObjectBase::construct( rParent, "AX-IMAGE-PROPERTIES" );
}
-void OcxImageObject::implDumpShortProperties()
+void AxImageObject::implDumpShortProperties()
{
dumpUnknownProperty();
dumpUnknownProperty();
@@ -1062,12 +1494,12 @@ void OcxImageObject::implDumpShortProperties()
// ============================================================================
-OcxScrollBarObject::OcxScrollBarObject( const InputObjectBase& rParent )
+AxScrollBarObject::AxScrollBarObject( const InputObjectBase& rParent )
{
- OcxPropertyObjectBase::construct( rParent, "OCX-SCROLLBAR-PROPERTIES" );
+ AxPropertyObjectBase::construct( rParent, "AX-SCROLLBAR-PROPERTIES" );
}
-void OcxScrollBarObject::implDumpShortProperties()
+void AxScrollBarObject::implDumpShortProperties()
{
dumpColorProperty( 0x80000012 );
dumpColorProperty( 0x8000000F );
@@ -1083,19 +1515,19 @@ void OcxScrollBarObject::implDumpShortProperties()
dumpDecProperty< sal_Int32 >( 1 );
dumpDecProperty< sal_Int32 >( 1 );
dumpOrientationProperty();
- dumpDecProperty< sal_Int16 >( -1, "OCX-SCROLLBAR-PROPTHUMB" );
+ dumpDecProperty< sal_Int16 >( -1, "AX-SCROLLBAR-PROPTHUMB" );
dumpDelayProperty();
dumpStreamProperty();
}
// ============================================================================
-OcxSpinButtonObject::OcxSpinButtonObject( const InputObjectBase& rParent )
+AxSpinButtonObject::AxSpinButtonObject( const InputObjectBase& rParent )
{
- OcxPropertyObjectBase::construct( rParent, "OCX-SPINBUTTON-PROPERTIES" );
+ AxPropertyObjectBase::construct( rParent, "AX-SPINBUTTON-PROPERTIES" );
}
-void OcxSpinButtonObject::implDumpShortProperties()
+void AxSpinButtonObject::implDumpShortProperties()
{
dumpColorProperty( 0x80000012 );
dumpColorProperty( 0x8000000F );
@@ -1116,12 +1548,12 @@ void OcxSpinButtonObject::implDumpShortProperties()
// ============================================================================
-OcxTabStripObject::OcxTabStripObject( const InputObjectBase& rParent )
+AxTabStripObject::AxTabStripObject( const InputObjectBase& rParent )
{
- OcxPropertyObjectBase::construct( rParent, "OCX-TABSTRIP-PROPERTIES" );
+ AxPropertyObjectBase::construct( rParent, "AX-TABSTRIP-PROPERTIES" );
}
-void OcxTabStripObject::implDumpShortProperties()
+void AxTabStripObject::implDumpShortProperties()
{
dumpDecProperty< sal_Int32 >( -1 );
dumpColorProperty( 0x8000000F );
@@ -1131,8 +1563,8 @@ void OcxTabStripObject::implDumpShortProperties()
dumpStringArrayProperty();
dumpMousePtrProperty();
dumpUnknownProperty();
- dumpDecProperty< sal_uInt32 >( 0, "OCX-TABSTRIP-ORIENTATION" );
- dumpDecProperty< sal_uInt32 >( 0, "OCX-TABSTRIP-TABSTYLE" );
+ dumpDecProperty< sal_uInt32 >( 0, "AX-TABSTRIP-ORIENTATION" );
+ dumpDecProperty< sal_uInt32 >( 0, "AX-TABSTRIP-TABSTYLE" );
dumpBoolProperty();
dumpHmmProperty();
dumpHmmProperty();
@@ -1150,35 +1582,43 @@ void OcxTabStripObject::implDumpShortProperties()
dumpStreamProperty();
}
-void OcxTabStripObject::implDumpExtended()
+void AxTabStripObject::implDumpExtended()
{
dumpEmbeddedFont();
if( mnTabFlagCount > 0 )
{
writeEmptyItem( "tab-flags" );
- IndentGuard aIndGuard( out() );
- out().resetItemIndex();
+ IndentGuard aIndGuard( mxOut );
+ mxOut->resetItemIndex();
for( sal_Int32 nIdx = 0; ensureValid() && (nIdx < mnTabFlagCount); ++nIdx )
- dumpHex< sal_uInt32 >( "#flags", "OCX-TABSTRIP-FLAGS" );
+ dumpHex< sal_uInt32 >( "#flags", "AX-TABSTRIP-FLAGS" );
}
}
// ============================================================================
+// ============================================================================
-OcxControlObject::OcxControlObject( const InputObjectBase& rParent, const OUString& rProgId, sal_Int64 nLength ) :
- maProgId( rProgId ),
- mnLength( nLength )
+FormControlStreamObject::FormControlStreamObject( const ObjectBase& rParent, const BinaryInputStreamRef& rxStrm, const OUString& rSysFileName, const OUString* pProgId )
{
- InputObjectBase::construct( rParent );
+ construct( rParent, rxStrm, rSysFileName );
+ constructFormCtrlStrmObj( pProgId );
}
-void OcxControlObject::implDump()
+FormControlStreamObject::FormControlStreamObject( const OutputObjectBase& rParent, const BinaryInputStreamRef& rxStrm, const OUString* pProgId )
{
- sal_Int64 nEndPos = in().tell() + ::std::max< sal_Int64 >( mnLength, 0 );
- if( (maProgId.getLength() > 0) && (mnLength > 0) && !in().isEof() )
+ construct( rParent, rxStrm );
+ constructFormCtrlStrmObj( pProgId );
+}
+
+void FormControlStreamObject::implDump()
+{
+ if( mbReadGuid )
+ maProgId = cfg().getStringOption( dumpGuid(), OUString() );
+
+ if( (maProgId.getLength() > 0) && !mxStrm->isEof() )
{
if( maProgId.equalsAscii( "Forms.CommandButton.1" ) )
- OcxCommandButtonObject( *this ).dump();
+ AxCommandButtonObject( *this ).dump();
else if( maProgId.equalsAscii( "Forms.TextBox.1" ) ||
maProgId.equalsAscii( "Forms.ListBox.1" ) ||
maProgId.equalsAscii( "Forms.ComboBox.1" ) ||
@@ -1186,161 +1626,76 @@ void OcxControlObject::implDump()
maProgId.equalsAscii( "Forms.OptionButton.1" ) ||
maProgId.equalsAscii( "Forms.ToggleButton.1" ) ||
maProgId.equalsAscii( "RefEdit.Ctrl" ) )
- OcxMorphControlObject( *this ).dump();
+ AxMorphControlObject( *this ).dump();
else if( maProgId.equalsAscii( "Forms.Label.1" ) )
- OcxLabelObject( *this ).dump();
+ AxLabelObject( *this ).dump();
else if( maProgId.equalsAscii( "Forms.Image.1" ) )
- OcxImageObject( *this ).dump();
+ AxImageObject( *this ).dump();
else if( maProgId.equalsAscii( "Forms.ScrollBar.1" ) )
- OcxScrollBarObject( *this ).dump();
+ AxScrollBarObject( *this ).dump();
else if( maProgId.equalsAscii( "Forms.SpinButton.1" ) )
- OcxSpinButtonObject( *this ).dump();
+ AxSpinButtonObject( *this ).dump();
else if( maProgId.equalsAscii( "Forms.TabStrip.1" ) )
- OcxTabStripObject( *this ).dump();
+ AxTabStripObject( *this ).dump();
+ else if( maProgId.equalsAscii( "MSComCtl2.FlatScrollBar.2" ) )
+ ComCtlScrollBarObject( *this, 6 ).dump();
+ else if( maProgId.equalsAscii( "COMCTL.ProgCtrl.1" ) )
+ ComCtlProgressBarObject( *this, 5 ).dump();
+ else if( maProgId.equalsAscii( "MSComctlLib.ProgCtrl.2" ) )
+ ComCtlProgressBarObject( *this, 6 ).dump();
+ else if( maProgId.equalsAscii( "COMCTL.Slider.1" ) )
+ ComCtlSliderObject( *this, 5 ).dump();
+ else if( maProgId.equalsAscii( "MSComctlLib.Slider.2" ) )
+ ComCtlSliderObject( *this, 6 ).dump();
+ else if( maProgId.equalsAscii( "ComCtl2.UpDown.1" ) )
+ ComCtlUpDownObject( *this, 5 ).dump();
+ else if( maProgId.equalsAscii( "MSComCtl2.UpDown.2" ) )
+ ComCtlUpDownObject( *this, 6 ).dump();
+ else if( maProgId.equalsAscii( "COMCTL.ImageListCtrl.1" ) )
+ ComCtlImageListObject( *this, 5 ).dump();
+ else if( maProgId.equalsAscii( "MSComctlLib.ImageListCtrl.2" ) )
+ ComCtlImageListObject( *this, 6 ).dump();
+ else if( maProgId.equalsAscii( "COMCTL.TabStrip.1" ) )
+ ComCtlTabStripObject( *this, 5 ).dump();
+ else if( maProgId.equalsAscii( "MSComctlLib.TabStrip.2" ) )
+ ComCtlTabStripObject( *this, 6 ).dump();
+ else if( maProgId.equalsAscii( "COMCTL.TreeCtrl.1" ) )
+ ComCtlTreeViewObject( *this, 5 ).dump();
+ else if( maProgId.equalsAscii( "MSComctlLib.TreeCtrl.2" ) )
+ ComCtlTreeViewObject( *this, 6 ).dump();
+ else if( maProgId.equalsAscii( "COMCTL.SBarCtrl.1" ) )
+ ComCtlStatusBarObject( *this, 5 ).dump();
else if( maProgId.equalsAscii( "StdPic" ) )
StdPicObject( *this ).dump();
}
- dumpRemainingTo( nEndPos );
-}
-
-// ============================================================================
-
-OcxGuidControlObject::OcxGuidControlObject( const InputObjectBase& rParent, sal_Int64 nLength ) :
- mnLength( nLength )
-{
- InputObjectBase::construct( rParent );
-}
-
-OcxGuidControlObject::OcxGuidControlObject( const OutputObjectBase& rParent, const BinaryInputStreamRef& rxStrm )
-{
- mnLength = rxStrm.get() ? rxStrm->getLength() : -1;
- InputObjectBase::construct( rParent, rxStrm );
-}
-
-OcxGuidControlObject::OcxGuidControlObject( const ObjectBase& rParent, const BinaryInputStreamRef& rxStrm, const OUString& rSysFileName )
-{
- mnLength = rxStrm.get() ? rxStrm->getLength() : -1;
- InputObjectBase::construct( rParent, rxStrm, rSysFileName );
-}
-
-void OcxGuidControlObject::implDump()
-{
- OUString aProgId = cfg().getStringOption( dumpGuid(), OUString() );
- OcxControlObject( *this, aProgId, mnLength - 16 ).dump();
-}
-
-// ============================================================================
-
-OcxControlsStreamObject::OcxControlsStreamObject( const ObjectBase& rParent,
- const BinaryInputStreamRef& rxStrm, const OUString& rSysFileName, OcxFormSharedData& rFormData ) :
- mrFormData( rFormData )
-{
- InputObjectBase::construct( rParent, rxStrm, rSysFileName );
-}
-
-void OcxControlsStreamObject::implDump()
-{
- for( OcxFormSiteInfoVector::iterator aIt = mrFormData.maSiteInfos.begin(), aEnd = mrFormData.maSiteInfos.end(); !in().isEof() && (aIt != aEnd); ++aIt )
- {
- if( (aIt->mbInStream) && (aIt->mnLength > 0) )
- {
- out().emptyLine();
- writeDecItem( "control-id", aIt->mnId );
- writeInfoItem( "prog-id", aIt->maProgId );
- IndentGuard aIndGuard( out() );
- OcxControlObject( *this, aIt->maProgId, aIt->mnLength ).dump();
- }
- }
dumpRemainingStream();
}
-// ============================================================================
-// ============================================================================
-
-OcxPageObject::OcxPageObject( const InputObjectBase& rParent )
+void FormControlStreamObject::constructFormCtrlStrmObj( const OUString* pProgId )
{
- OcxPropertyObjectBase::construct( rParent, "OCX-PAGE-PROPERTIES" );
-}
-
-void OcxPageObject::implDumpShortProperties()
-{
- dumpUnknownProperty();
- dumpDecProperty< sal_uInt32 >( 0, "OCX-PAGE-TRANSITIONEFFECT" );
- dumpDecProperty< sal_uInt32 >( 0, "OCX-CONV-MS" );
+ mbReadGuid = pProgId == 0;
+ if( pProgId )
+ maProgId = *pProgId;
}
// ============================================================================
-
-OcxMultiPageObject::OcxMultiPageObject( const InputObjectBase& rParent )
-{
- OcxPropertyObjectBase::construct( rParent, "OCX-MULTIPAGE-PROPERTIES" );
-}
-
-void OcxMultiPageObject::implDumpShortProperties()
-{
- dumpUnknownProperty();
- mnPageCount = dumpDecProperty< sal_Int32 >( 0 );
- dumpDecProperty< sal_Int32 >( 0 );
- dumpBoolProperty();
-}
-
-void OcxMultiPageObject::implDumpExtended()
-{
- if( ensureValid() && (mnPageCount > 0) )
- {
- writeEmptyItem( "page-ids" );
- IndentGuard aIndGuard( out() );
- out().resetItemIndex();
- for( sal_Int32 nIdx = 0; ensureValid() && (nIdx < mnPageCount); ++nIdx )
- dumpDec< sal_Int32 >( "#id" );
- }
-}
-
// ============================================================================
-OcxMultiPageStreamObject::OcxMultiPageStreamObject( const ObjectBase& rParent,
- const BinaryInputStreamRef& rxStrm, const OUString& rSysFileName, OcxFormSharedData& rFormData ) :
+VbaFormClassInfoObject::VbaFormClassInfoObject( const InputObjectBase& rParent, VbaFormSharedData& rFormData ) :
mrFormData( rFormData )
{
- InputObjectBase::construct( rParent, rxStrm, rSysFileName );
+ AxPropertyObjectBase::construct( rParent, "VBA-CLASSINFO-PROPERTIES" );
}
-void OcxMultiPageStreamObject::implDump()
-{
- for( size_t nIdx = 0, nCount = mrFormData.maSiteInfos.size(); !in().isEof() && (nIdx < nCount); ++nIdx )
- {
- out().emptyLine();
- writeEmptyItem( "page" );
- IndentGuard aIndGuard( out() );
- OcxPageObject( *this ).dump();
- }
- if( !in().isEof() )
- {
- out().emptyLine();
- writeEmptyItem( "multi-page" );
- IndentGuard aIndGuard( out() );
- OcxMultiPageObject( *this ).dump();
- }
- dumpRemainingStream();
-}
-
-// ============================================================================
-// ============================================================================
-
-OcxFormClassInfoObject::OcxFormClassInfoObject( const InputObjectBase& rParent, OcxFormSharedData& rFormData ) :
- mrFormData( rFormData )
-{
- OcxPropertyObjectBase::construct( rParent, "OCX-CLASSINFO-PROPERTIES" );
-}
-
-void OcxFormClassInfoObject::implDumpShortProperties()
+void VbaFormClassInfoObject::implDumpShortProperties()
{
mrFormData.maClassInfoProgIds.push_back( OUString() );
dumpGuidProperty( &mrFormData.maClassInfoProgIds.back() );
dumpGuidProperty();
dumpUnknownProperty();
dumpGuidProperty();
- dumpFlagsProperty( 0, "OCX-CLASSINFO-FLAGS" );
+ dumpFlagsProperty( 0, "VBA-CLASSINFO-FLAGS" );
+ dumpDecProperty< sal_uInt32 >( 0 );
dumpDecProperty< sal_Int32 >( -1 );
dumpDecProperty< sal_uInt16 >( 0 );
dumpDecProperty< sal_uInt16 >( 0 );
@@ -1356,32 +1711,32 @@ void OcxFormClassInfoObject::implDumpShortProperties()
namespace {
-const sal_uInt32 OCX_FORMSITE_OBJSTREAM = 0x0010;
+const sal_uInt32 VBA_FORMSITE_OBJSTREAM = 0x0010;
-const sal_uInt16 OCX_FORMSITE_CLASSTABLEINDEX = 0x8000;
-const sal_uInt16 OCX_FORMSITE_CLASSTABLEMASK = 0x7FFF;
+const sal_uInt16 VBA_FORMSITE_CLASSTABLEINDEX = 0x8000;
+const sal_uInt16 VBA_FORMSITE_CLASSTABLEMASK = 0x7FFF;
} // namespace
// ----------------------------------------------------------------------------
-OcxFormSiteObject::OcxFormSiteObject( const InputObjectBase& rParent, OcxFormSharedData& rFormData ) :
+VbaFormSiteObject::VbaFormSiteObject( const InputObjectBase& rParent, VbaFormSharedData& rFormData ) :
mrFormData( rFormData )
{
- OcxPropertyObjectBase::construct( rParent, "OCX-FORMSITE-PROPERTIES" );
+ AxPropertyObjectBase::construct( rParent, "VBA-FORMSITE-PROPERTIES" );
}
-void OcxFormSiteObject::implDumpShortProperties()
+void VbaFormSiteObject::implDumpShortProperties()
{
- OcxFormSiteInfo aSiteInfo;
+ VbaFormSiteInfo aSiteInfo;
dumpStringProperty();
dumpStringProperty();
sal_Int32 nId = dumpDecProperty< sal_Int32 >( 0 );
dumpDecProperty< sal_Int32 >( 0 );
- sal_uInt32 nFlags = dumpFlagsProperty( 0x00000033, "OCX-FORMSITE-FLAGS" );
+ sal_uInt32 nFlags = dumpFlagsProperty( 0x00000033, "VBA-FORMSITE-FLAGS" );
sal_uInt32 nLength = dumpDecProperty< sal_uInt32 >( 0 );
dumpDecProperty< sal_Int16 >( -1 );
- sal_uInt16 nClassId = dumpHexProperty< sal_uInt16 >( 0x7FFF, "OCX-FORMSITE-CLASSIDCACHE" );
+ sal_uInt16 nClassId = dumpHexProperty< sal_uInt16 >( 0x7FFF, "VBA-FORMSITE-CLASSIDCACHE" );
dumpPosProperty();
dumpDecProperty< sal_uInt16 >( 0 );
dumpUnknownProperty();
@@ -1390,61 +1745,61 @@ void OcxFormSiteObject::implDumpShortProperties()
dumpStringProperty();
dumpStringProperty();
- sal_uInt16 nIndex = nClassId & OCX_FORMSITE_CLASSTABLEMASK;
- if( getFlag( nClassId, OCX_FORMSITE_CLASSTABLEINDEX ) )
+ sal_uInt16 nIndex = nClassId & VBA_FORMSITE_CLASSTABLEMASK;
+ if( getFlag( nClassId, VBA_FORMSITE_CLASSTABLEINDEX ) )
{
if( nIndex < mrFormData.maClassInfoProgIds.size() )
aSiteInfo.maProgId = mrFormData.maClassInfoProgIds[ nIndex ];
}
else
{
- if( cfg().hasName( "OCX-FORMSITE-CLASSNAMES", nIndex ) )
- aSiteInfo.maProgId = cfg().getName( "OCX-FORMSITE-CLASSNAMES", nIndex );
+ if( cfg().hasName( "VBA-FORMSITE-CLASSNAMES", nIndex ) )
+ aSiteInfo.maProgId = cfg().getName( "VBA-FORMSITE-CLASSNAMES", nIndex );
}
aSiteInfo.mnId = nId;
aSiteInfo.mnLength = nLength;
- aSiteInfo.mbInStream = getFlag( nFlags, OCX_FORMSITE_OBJSTREAM );
+ aSiteInfo.mbInStream = getFlag( nFlags, VBA_FORMSITE_OBJSTREAM );
mrFormData.maSiteInfos.push_back( aSiteInfo );
}
// ============================================================================
-OcxFormDesignExtObject::OcxFormDesignExtObject( const InputObjectBase& rParent )
+VbaFormDesignExtObject::VbaFormDesignExtObject( const InputObjectBase& rParent )
{
- OcxPropertyObjectBase::construct( rParent, "OCX-FORMDESIGNEXT-PROPERTIES" );
+ AxPropertyObjectBase::construct( rParent, "VBA-FORMDESIGNEXT-PROPERTIES" );
}
-void OcxFormDesignExtObject::implDumpShortProperties()
+void VbaFormDesignExtObject::implDumpShortProperties()
{
- dumpFlagsProperty( 0x00015F55, "OCX-FORMDESIGNEXT-FLAGS" );
+ dumpFlagsProperty( 0x00015F55, "VBA-FORMDESIGNEXT-FLAGS" );
dumpHmmProperty();
dumpHmmProperty();
- dumpDecProperty< sal_Int8 >( 0, "OCX-FORMDESIGNEXT-CLICKCTRLMODE" );
- dumpDecProperty< sal_Int8 >( 0, "OCX-FORMDESIGNEXT-DBLCLICKCTRLMODE" );
+ dumpDecProperty< sal_Int8 >( 0, "VBA-FORMDESIGNEXT-CLICKCTRLMODE" );
+ dumpDecProperty< sal_Int8 >( 0, "VBA-FORMDESIGNEXT-DBLCLICKCTRLMODE" );
}
// ============================================================================
namespace {
-const sal_uInt32 OCX_FORM_HASDESIGNEXTENDER = 0x00004000;
-const sal_uInt32 OCX_FORM_SKIPCLASSTABLE = 0x00008000;
+const sal_uInt32 AX_FORM_HASDESIGNEXTENDER = 0x00004000;
+const sal_uInt32 AX_FORM_SKIPCLASSTABLE = 0x00008000;
-const sal_uInt8 OCX_FORM_SITECOUNTTYPE_COUNT = 0x80;
-const sal_uInt8 OCX_FORM_SITECOUNTTYPE_MASK = 0x7F;
+const sal_uInt8 AX_FORM_SITECOUNTTYPE_COUNT = 0x80;
+const sal_uInt8 AX_FORM_SITECOUNTTYPE_MASK = 0x7F;
} // namespace
// ----------------------------------------------------------------------------
-OcxFormObject::OcxFormObject( const ObjectBase& rParent, const BinaryInputStreamRef& rxStrm, const OUString& rSysFileName, OcxFormSharedData& rFormData ) :
+VbaFStreamObject::VbaFStreamObject( const ObjectBase& rParent, const BinaryInputStreamRef& rxStrm, const OUString& rSysFileName, VbaFormSharedData& rFormData ) :
mrFormData( rFormData )
{
- OcxPropertyObjectBase::construct( rParent, rxStrm, rSysFileName, "OCX-FORM-PROPERTIES" );
+ AxPropertyObjectBase::construct( rParent, rxStrm, rSysFileName, "VBA-FORM-PROPERTIES" );
}
-void OcxFormObject::implDumpShortProperties()
+void VbaFStreamObject::implDumpShortProperties()
{
dumpUnknownProperty();
dumpColorProperty( 0x8000000F );
@@ -1452,17 +1807,17 @@ void OcxFormObject::implDumpShortProperties()
dumpDecProperty< sal_uInt32 >( 0 );
dumpUnknownProperty();
dumpUnknownProperty();
- mnFlags = dumpFlagsProperty( 0x00000004, "OCX-FORM-FLAGS" );
+ mnFlags = dumpFlagsProperty( 0x00000004, "VBA-FORM-FLAGS" );
dumpBorderStyleProperty< sal_uInt8 >( 0 );
dumpMousePtrProperty();
- dumpHexProperty< sal_uInt8 >( 0x0C, "OCX-FORM-SCROLLBARS" );
+ dumpHexProperty< sal_uInt8 >( 0x0C, "VBA-FORM-SCROLLBARS" );
dumpSizeProperty();
dumpSizeProperty();
dumpPosProperty();
dumpDecProperty< sal_uInt32 >( 0 );
dumpUnknownProperty();
dumpStreamProperty();
- dumpDecProperty< sal_uInt8 >( 0, "OCX-FORM-CYCLE" );
+ dumpDecProperty< sal_uInt8 >( 0, "VBA-FORM-CYCLE" );
dumpSpecialEffectProperty< sal_uInt8 >( 0 );
dumpColorProperty( 0x80000012 );
dumpStringProperty();
@@ -1476,7 +1831,7 @@ void OcxFormObject::implDumpShortProperties()
dumpDecProperty< sal_uInt32 >( 0 );
}
-void OcxFormObject::implDumpExtended()
+void VbaFStreamObject::implDumpExtended()
{
dumpClassInfos();
dumpSiteData();
@@ -1484,58 +1839,58 @@ void OcxFormObject::implDumpExtended()
dumpRemainingStream();
}
-void OcxFormObject::dumpClassInfos()
+void VbaFStreamObject::dumpClassInfos()
{
- if( ensureValid() && !getFlag( mnFlags, OCX_FORM_SKIPCLASSTABLE ) )
+ if( ensureValid() && !getFlag( mnFlags, AX_FORM_SKIPCLASSTABLE ) )
{
- out().emptyLine();
+ mxOut->emptyLine();
sal_uInt16 nCount = dumpDec< sal_uInt16 >( "class-info-count" );
- out().resetItemIndex();
+ mxOut->resetItemIndex();
for( sal_uInt16 nIdx = 0; ensureValid() && (nIdx < nCount); ++nIdx )
{
writeEmptyItem( "#class-info" );
- IndentGuard aIndGuard( out() );
- OcxFormClassInfoObject( *this, mrFormData ).dump();
+ IndentGuard aIndGuard( mxOut );
+ VbaFormClassInfoObject( *this, mrFormData ).dump();
}
}
}
-void OcxFormObject::dumpFormSites( sal_uInt32 nCount )
+void VbaFStreamObject::dumpFormSites( sal_uInt32 nCount )
{
- out().resetItemIndex();
+ mxOut->resetItemIndex();
for( sal_uInt32 nIdx = 0; ensureValid() && (nIdx < nCount); ++nIdx )
{
- out().emptyLine();
+ mxOut->emptyLine();
writeEmptyItem( "#form-site" );
- IndentGuard aIndGuard( out() );
- OcxFormSiteObject( *this, mrFormData ).dump();
+ IndentGuard aIndGuard( mxOut );
+ VbaFormSiteObject( *this, mrFormData ).dump();
}
}
-void OcxFormObject::dumpSiteData()
+void VbaFStreamObject::dumpSiteData()
{
if( ensureValid() )
{
- out().emptyLine();
+ mxOut->emptyLine();
setAlignAnchor();
sal_uInt32 nSiteCount = dumpDec< sal_uInt32 >( "site-count" );
sal_uInt32 nSiteLength = dumpDec< sal_uInt32 >( "site-data-size" );
- sal_Int64 nEndPos = in().tell() + nSiteLength;
- if( ensureValid( nEndPos <= in().getLength() ) )
+ sal_Int64 nEndPos = mxStrm->tell() + nSiteLength;
+ if( ensureValid( nEndPos <= mxStrm->getLength() ) )
{
- out().resetItemIndex();
+ mxOut->resetItemIndex();
sal_uInt32 nSiteIdx = 0;
while( ensureValid() && (nSiteIdx < nSiteCount) )
{
- out().emptyLine();
+ mxOut->emptyLine();
writeEmptyItem( "#site-info" );
- IndentGuard aIndGuard( out() );
+ IndentGuard aIndGuard( mxOut );
dumpDec< sal_uInt8 >( "depth" );
- sal_uInt8 nTypeCount = dumpHex< sal_uInt8 >( "type-count", "OCX-FORM-SITE-TYPECOUNT" );
- if( getFlag( nTypeCount, OCX_FORM_SITECOUNTTYPE_COUNT ) )
+ sal_uInt8 nTypeCount = dumpHex< sal_uInt8 >( "type-count", "VBA-FORM-SITE-TYPECOUNT" );
+ if( getFlag( nTypeCount, AX_FORM_SITECOUNTTYPE_COUNT ) )
{
dumpDec< sal_uInt8 >( "repeated-type" );
- nSiteIdx += (nTypeCount & OCX_FORM_SITECOUNTTYPE_MASK);
+ nSiteIdx += (nTypeCount & AX_FORM_SITECOUNTTYPE_MASK);
}
else
{
@@ -1549,46 +1904,141 @@ void OcxFormObject::dumpSiteData()
}
}
-void OcxFormObject::dumpDesignExtender()
+void VbaFStreamObject::dumpDesignExtender()
{
- if( ensureValid() && getFlag( mnFlags, OCX_FORM_HASDESIGNEXTENDER ) )
+ if( ensureValid() && getFlag( mnFlags, AX_FORM_HASDESIGNEXTENDER ) )
{
- out().emptyLine();
+ mxOut->emptyLine();
writeEmptyItem( "design-extender" );
- IndentGuard aIndGuard( out() );
- OcxFormDesignExtObject( *this ).dump();
+ IndentGuard aIndGuard( mxOut );
+ VbaFormDesignExtObject( *this ).dump();
+ }
+}
+
+// ============================================================================
+
+VbaOStreamObject::VbaOStreamObject( const ObjectBase& rParent,
+ const BinaryInputStreamRef& rxStrm, const OUString& rSysFileName, VbaFormSharedData& rFormData ) :
+ mrFormData( rFormData )
+{
+ OleInputObjectBase::construct( rParent, rxStrm, rSysFileName );
+}
+
+void VbaOStreamObject::implDump()
+{
+ for( VbaFormSiteInfoVector::iterator aIt = mrFormData.maSiteInfos.begin(), aEnd = mrFormData.maSiteInfos.end(); !mxStrm->isEof() && (aIt != aEnd); ++aIt )
+ {
+ if( (aIt->mbInStream) && (aIt->mnLength > 0) )
+ {
+ mxOut->emptyLine();
+ writeDecItem( "control-id", aIt->mnId );
+ writeInfoItem( "prog-id", aIt->maProgId );
+ IndentGuard aIndGuard( mxOut );
+ RelativeInputStreamRef xRelStrm( new RelativeInputStream( *mxStrm, aIt->mnLength ) );
+ FormControlStreamObject( *this, xRelStrm, &aIt->maProgId ).dump();
+ }
}
+ dumpRemainingStream();
+}
+
+// ============================================================================
+
+VbaPageObject::VbaPageObject( const InputObjectBase& rParent )
+{
+ AxPropertyObjectBase::construct( rParent, "VBA-PAGE-PROPERTIES" );
+}
+
+void VbaPageObject::implDumpShortProperties()
+{
+ dumpUnknownProperty();
+ dumpDecProperty< sal_uInt32 >( 0, "VBA-PAGE-TRANSITIONEFFECT" );
+ dumpDecProperty< sal_uInt32 >( 0, "AX-CONV-MS" );
}
// ============================================================================
-OcxFormStorageObject::OcxFormStorageObject( const ObjectBase& rParent, const StorageRef& rxStrg, const OUString& rSysPath ) :
+VbaMultiPageObject::VbaMultiPageObject( const InputObjectBase& rParent )
+{
+ AxPropertyObjectBase::construct( rParent, "VBA-MULTIPAGE-PROPERTIES" );
+}
+
+void VbaMultiPageObject::implDumpShortProperties()
+{
+ dumpUnknownProperty();
+ mnPageCount = dumpDecProperty< sal_Int32 >( 0 );
+ dumpDecProperty< sal_Int32 >( 0 );
+ dumpBoolProperty();
+}
+
+void VbaMultiPageObject::implDumpExtended()
+{
+ if( ensureValid() && (mnPageCount > 0) )
+ {
+ writeEmptyItem( "page-ids" );
+ IndentGuard aIndGuard( mxOut );
+ mxOut->resetItemIndex();
+ for( sal_Int32 nIdx = 0; ensureValid() && (nIdx < mnPageCount); ++nIdx )
+ dumpDec< sal_Int32 >( "#id" );
+ }
+}
+
+// ============================================================================
+
+VbaXStreamObject::VbaXStreamObject( const ObjectBase& rParent,
+ const BinaryInputStreamRef& rxStrm, const OUString& rSysFileName, VbaFormSharedData& rFormData ) :
+ mrFormData( rFormData )
+{
+ InputObjectBase::construct( rParent, rxStrm, rSysFileName );
+}
+
+void VbaXStreamObject::implDump()
+{
+ for( size_t nIdx = 0, nCount = mrFormData.maSiteInfos.size(); !mxStrm->isEof() && (nIdx < nCount); ++nIdx )
+ {
+ mxOut->emptyLine();
+ writeEmptyItem( "page" );
+ IndentGuard aIndGuard( mxOut );
+ VbaPageObject( *this ).dump();
+ }
+ if( !mxStrm->isEof() )
+ {
+ mxOut->emptyLine();
+ writeEmptyItem( "multi-page" );
+ IndentGuard aIndGuard( mxOut );
+ VbaMultiPageObject( *this ).dump();
+ }
+ dumpRemainingStream();
+}
+
+// ============================================================================
+
+VbaContainerStorageObject::VbaContainerStorageObject( const ObjectBase& rParent, const StorageRef& rxStrg, const OUString& rSysPath ) :
OleStorageObject( rParent, rxStrg, rSysPath )
{
addPreferredStream( "f" );
}
-void OcxFormStorageObject::implDumpStream( const BinaryInputStreamRef& rxStrm, const OUString& rStrgPath, const OUString& rStrmName, const OUString& rSysFileName )
+void VbaContainerStorageObject::implDumpStream( const BinaryInputStreamRef& rxStrm, const OUString& rStrgPath, const OUString& rStrmName, const OUString& rSysFileName )
{
if( rStrmName.equalsAscii( "f" ) )
- OcxFormObject( *this, rxStrm, rSysFileName, maFormData ).dump();
+ VbaFStreamObject( *this, rxStrm, rSysFileName, maFormData ).dump();
else if( rStrmName.equalsAscii( "o" ) )
- OcxControlsStreamObject( *this, rxStrm, rSysFileName, maFormData ).dump();
+ VbaOStreamObject( *this, rxStrm, rSysFileName, maFormData ).dump();
else if( rStrmName.equalsAscii( "x" ) )
- OcxMultiPageStreamObject( *this, rxStrm, rSysFileName, maFormData ).dump();
+ VbaXStreamObject( *this, rxStrm, rSysFileName, maFormData ).dump();
else
OleStorageObject::implDumpStream( rxStrm, rStrgPath, rStrmName, rSysFileName );
}
-void OcxFormStorageObject::implDumpStorage( const StorageRef& rxStrg, const OUString& rStrgPath, const OUString& rSysPath )
+void VbaContainerStorageObject::implDumpStorage( const StorageRef& rxStrg, const OUString& rStrgPath, const OUString& rSysPath )
{
if( isFormStorage( rStrgPath ) )
- OcxFormStorageObject( *this, rxStrg, rSysPath ).dump();
+ VbaContainerStorageObject( *this, rxStrg, rSysPath ).dump();
else
OleStorageObject( *this, rxStrg, rSysPath ).dump();
}
-bool OcxFormStorageObject::isFormStorage( const OUString& rStrgPath ) const
+bool VbaContainerStorageObject::isFormStorage( const OUString& rStrgPath ) const
{
if( (rStrgPath.getLength() >= 3) && (rStrgPath[ 0 ] == 'i') )
{
@@ -1597,7 +2047,7 @@ bool OcxFormStorageObject::isFormStorage( const OUString& rStrgPath ) const
aId = aId.copy( 1 );
sal_Int32 nId = aId.toInt32();
if( (nId > 0) && (OUString::valueOf( nId ) == aId) )
- for( OcxFormSiteInfoVector::const_iterator aIt = maFormData.maSiteInfos.begin(), aEnd = maFormData.maSiteInfos.end(); aIt != aEnd; ++aIt )
+ for( VbaFormSiteInfoVector::const_iterator aIt = maFormData.maSiteInfos.begin(), aEnd = maFormData.maSiteInfos.end(); aIt != aEnd; ++aIt )
if( aIt->mnId == nId )
return true;
}
@@ -1608,7 +2058,7 @@ bool OcxFormStorageObject::isFormStorage( const OUString& rStrgPath ) const
// ============================================================================
VbaSharedData::VbaSharedData() :
- meTextEnc( osl_getThreadTextEncoding() )
+ meTextEnc( RTL_TEXTENCODING_MS_1252 )
{
}
@@ -1659,7 +2109,7 @@ void VbaDirStreamObject::implDumpRecordBody()
switch( getRecId() )
{
case 0x0003:
- mrVbaData.meTextEnc = ::oox::xls::BiffHelper::calcTextEncodingFromCodePage( dumpDec< sal_uInt16 >( "codepage", "CODEPAGES" ) );
+ mrVbaData.meTextEnc = rtl_getTextEncodingFromWindowsCodePage( dumpDec< sal_uInt16 >( "codepage", "CODEPAGES" ) );
break;
case 0x0004:
dumpByteString( "name" );
@@ -1730,7 +2180,7 @@ void VbaDirStreamObject::implDumpRecordBody()
dumpUniString( "constants" );
break;
case 0x003D:
- dumpUniString( "helpfile-path" );
+ dumpByteString( "helpfile-path" );
break;
case 0x003E:
dumpUniString( "name" );
@@ -1759,7 +2209,7 @@ OUString VbaDirStreamObject::dumpUniString( const String& rName )
OUString VbaDirStreamObject::dumpByteStringWithLength( const String& rName )
{
- return dumpCharArray( rName, in().readInt32(), mrVbaData.meTextEnc );
+ return dumpCharArray( rName, mxStrm->readInt32(), mrVbaData.meTextEnc );
}
// ============================================================================
@@ -1776,10 +2226,10 @@ VbaModuleStreamObject::VbaModuleStreamObject(
void VbaModuleStreamObject::implDump()
{
dumpBinary( "perf-cache", mnStrmOffset );
- out().emptyLine();
+ mxOut->emptyLine();
writeEmptyItem( "source-code" );
- IndentGuard aIndGuard( out() );
- BinaryInputStreamRef xVbaStrm( new ::oox::ole::VbaInputStream( in() ) );
+ IndentGuard aIndGuard( mxOut );
+ BinaryInputStreamRef xVbaStrm( new ::oox::ole::VbaInputStream( *mxStrm ) );
TextStreamObject( *this, xVbaStrm, mrVbaData.meTextEnc ).dump();
}
@@ -1805,7 +2255,7 @@ void VbaStorageObject::implDumpStream( const BinaryInputStreamRef& rxStrm, const
// ============================================================================
VbaFormStorageObject::VbaFormStorageObject( const ObjectBase& rParent, const StorageRef& rxStrg, const OUString& rSysPath, VbaSharedData& rVbaData ) :
- OcxFormStorageObject( rParent, rxStrg, rSysPath ),
+ VbaContainerStorageObject( rParent, rxStrg, rSysPath ),
mrVbaData( rVbaData )
{
}
@@ -1815,7 +2265,7 @@ void VbaFormStorageObject::implDumpStream( const BinaryInputStreamRef& rxStrm, c
if( rStrmName.equalsAscii( "\003VBFrame" ) )
TextStreamObject( *this, rxStrm, mrVbaData.meTextEnc, rSysFileName ).dump();
else
- OcxFormStorageObject::implDumpStream( rxStrm, rStrgPath, rStrmName, rSysFileName );
+ VbaContainerStorageObject::implDumpStream( rxStrm, rStrgPath, rStrmName, rSysFileName );
}
// ============================================================================
@@ -1845,6 +2295,19 @@ void VbaProjectStorageObject::implDumpStorage( const StorageRef& rxStrg, const O
// ============================================================================
// ============================================================================
+ActiveXStorageObject::ActiveXStorageObject( const ObjectBase& rParent, const StorageRef& rxStrg, const OUString& rSysPath ) :
+ VbaContainerStorageObject( rParent, rxStrg, rSysPath )
+{
+}
+
+void ActiveXStorageObject::implDumpBaseStream( const BinaryInputStreamRef& rxStrm, const OUString& rSysFileName )
+{
+ FormControlStreamObject( *this, rxStrm, rSysFileName ).dump();
+}
+
+// ============================================================================
+// ============================================================================
+
} // namespace dump
} // namespace oox
diff --git a/oox/source/dump/oledumper.ini b/oox/source/dump/oledumper.ini
index c398b0c01e51..7efe424b0ddc 100644
--- a/oox/source/dump/oledumper.ini
+++ b/oox/source/dump/oledumper.ini
@@ -4,7 +4,39 @@
# Path to additional configuration data, relative to this file.
include-config-file=dumperbase.ini
-# StdFont ====================================================================
+# OLE name lists =============================================================
+
+constlist=OLE-STD-CLIPBOARD-FORMAT
+ 2=bmp
+ 3=wmf
+ 8=dib
+ 14=emf
+end
+
+combilist=OLE-COLOR
+ 0x0000FFFF=uint32,dec,palette-index,,filter=0xFF000000~0x01000000
+ 0x000000FF=uint32,dec,red,,filter=0xFF000000~0x00000000,filter=0xFF000000~0x02000000
+ 0x0000FF00=uint32,dec,green,,filter=0xFF000000~0x00000000,filter=0xFF000000~0x02000000
+ 0x00FF0000=uint32,dec,blue,,filter=0xFF000000~0x00000000,filter=0xFF000000~0x02000000
+ 0x0000FFFF=uint32,dec,system-color,SYSTEMCOLOR,filter=0xFF000000~0x80000000
+ 0xFF000000=uint8,dec,type,OLE-COLORTYPE
+end
+
+constlist=OLE-COLORTYPE
+ 0x00=default
+ 0x01=palette
+ 0x02=rgb
+ 0x80=system-color
+end
+
+multilist=OLE-MOUSEPTR
+ 0=default,arrow,cross,i-beam
+ 6=size-diag-down,size-vert,size-diag-up,size-hor
+ 10=up-arrow,hour-glass,no-drop,app-starting,help,size-all
+ 99=custom
+end
+
+# StdFont --------------------------------------------------------------------
{0BE35203-8F91-11CE-9DE3-00AA004BB851}=StdFont
@@ -17,11 +49,13 @@ end
unitconverter=STDFONT-HEIGHT,/10000,pt
-# StdPic =====================================================================
+# StdPic ---------------------------------------------------------------------
{0BE35204-8F91-11CE-9DE3-00AA004BB851}=StdPic
-# StdHlink ===================================================================
+shortlist=STDPIC-ID,0x0000746C,StdPic
+
+# StdHlink -------------------------------------------------------------------
{79EAC9D0-BAF9-11CE-8C82-00AA004BA90B}=StdHlink
{79EAC9E0-BAF9-11CE-8C82-00AA004BA90B}=URLMoniker
@@ -62,7 +96,7 @@ flagslist=STDHLINK-URL-FLAGS
0x00008000=no-encode-forbidden-chars
end
-# OLE name lists =============================================================
+# OLE property stream --------------------------------------------------------
{F29F85E0-4FF9-1068-AB91-08002B27B3D9}=GlobalDocProp
{D5CDD502-2E9C-101B-9397-08002B2CF9AE}=BuiltinDocProp
@@ -110,37 +144,210 @@ combilist=OLEPROP-TYPE
0x4000=byref
end
-# OCX name lists =============================================================
+# ComCtl controls ============================================================
+
+constlist=COMCTL-HEADER-IDS
+ 0x0A2BAE11=COMCTL_SLIDER_60
+ 0x12344321=COMCTL_SIZE
+ 0x6AC13CB1=COMCTL_TREEVIEW_60
+ 0x97AB8A01=COMCTL_PROGRESSBAR_60
+ 0x99470A83=COMCTL_SCROLLBAR_60
+ 0xABCDEF01=COMCTL_COMMONDATA
+ 0xBDECDE1F=COMCTL_COMPLEXDATA
+ 0xD12A7AC1=COMCTL_TABSTRIP_60
+ 0xE6E17E80=COMCTL_IMAGELIST_50_60
+ 0xE6E17E84=COMCTL_PROGRESSBAR_50
+ 0xE6E17E86=COMCTL_SLIDER_50
+ 0xE6E17E88=COMCTL_STATUSBAR_50
+ 0xE6E17E8A=COMCTL_TABSTRIP_50
+ 0xE6E17E8E=COMCTL_TREEVIEW_50
+ 0xFF3626A0=COMCTL_UPDOWN_50_60
+end
+
+combilist=COMCTL-COMMON-FLAGS
+ ignore=0xFFFF8000
+ 0x00000001=flat-border
+ 0x00000002=enabled
+ 0x00000004=3d-border
+ 0x000007F8=uint8,dec,mouse-ptr,OLE-MOUSEPTR
+ 0x00000800=ole-drag-auto
+ 0x00002000=ole-drop-manual
+end
+
+flagslist=COMCTL-COMPLEX-FLAGS
+ ignore=0xFFFFFFFC
+ 0x00000001=font
+ 0x00000002=mouse-icon
+end
+
+# flat scrollbar -------------------------------------------------------------
+
+{FE38753A-44A3-11D1-B5B7-0000C09000C4}=MSComCtl2.FlatScrollBar.2
+
+combilist=COMCTL-SCROLLBAR-FLAGS
+ 0x00000003=uint8,dec,appearance,COMCTL-SCROLLBAR-APPEARANCE
+ 0x0000000C=uint8,dec,arrows,COMCTL-SCROLLBAR-ARROWS
+ 0x00000010=!vertical!horizontal
+end
+
+shortlist=COMCTL-SCROLLBAR-APPEARANCE,0,3d,flat,track-3d
+shortlist=COMCTL-SCROLLBAR-ARROWS,0,both,left-up,right-down
+
+# progress bar ---------------------------------------------------------------
{0713E8D2-850A-101B-AFC0-4210102A8DA7}=COMCTL.ProgCtrl.1
+{35053A22-8589-11D1-B16A-00C0F0283628}=MSComctlLib.ProgCtrl.2
-combilist=OCX-COLOR
- 0x0000FFFF=uint32,dec,palette-index,,filter=0xFF000000~0x01000000
- 0x000000FF=uint32,dec,red,,filter=0xFF000000~0x00000000,filter=0xFF000000~0x02000000
- 0x0000FF00=uint32,dec,green,,filter=0xFF000000~0x00000000,filter=0xFF000000~0x02000000
- 0x00FF0000=uint32,dec,blue,,filter=0xFF000000~0x00000000,filter=0xFF000000~0x02000000
- 0x0000FFFF=uint32,dec,system-color,SYSTEMCOLOR,filter=0xFF000000~0x80000000
- 0xFF000000=uint8,dec,type,OCX-COLORTYPE
+# slider ---------------------------------------------------------------------
+
+{373FF7F0-EB8B-11CD-8820-08002B2F4F5A}=COMCTL.Slider.1
+{F08DF954-8592-11D1-B16A-00C0F0283628}=MSComctlLib.Slider.2
+
+constlist=COMCTL-SLIDER-SELECTRANGE
+ 0x00000000=off
+ 0x0000FFFF=on
+ end
+
+shortlist=COMCTL-SLIDER-TICKSTYLE,0,bottom-right,top-left,both,no-ticks
+
+# updown ---------------------------------------------------------------------
+
+{026371C0-1B7C-11CF-9D53-00AA003C9CB6}=ComCtl2.UpDown.1
+{603C7E80-87C2-11D1-8BE3-0000F8754DA1}=MSComCtl2.UpDown.2
+
+flagslist=COMCTL-UPDOWN-FLAGS1
+ 0x00000001=!align-left!align-right
+ 0x00000004=!vertical!horizontal
+ end
+
+flagslist=COMCTL-UPDOWN-FLAGS2
+ 0x00000004=wrap
+ 0x00000020=ole-drop-manual
+ 0x00000080=enabled
+ end
+
+# image list -----------------------------------------------------------------
+
+{58DA8D8F-9D6A-101B-AFC0-4210102A8DA7}=COMCTL.ImageListCtrl.1
+{2C247F23-8591-11D1-B16A-00C0F0283628}=MSComctlLib.ImageListCtrl.2
+
+flagslist=COMCTL-IMAGELIST-TEXTFLAGS
+ 0x01=key
+ 0x02=tag
end
-constlist=OCX-COLORTYPE
- 0x00=default
- 0x01=palette
- 0x02=rgb
- 0x80=system-color
+# tab strip ------------------------------------------------------------------
+
+{9ED94440-E5E8-101B-B9B5-444553540000}=COMCTL.TabStrip.1
+{1EFB6596-857C-11D1-B16A-00C0F0283628}=MSComctlLib.TabStrip.2
+
+combilist=COMCTL-TABSTRIP-FLAGS1
+ ignore=0xFFFFFFE0
+ 0x00000001=multi-row
+ 0x00000002=show-tooltips
+ 0x00000018=uint8,dec,tab-width-style,COMCTL-TABSTRIP-TABWIDTHSTYLE
+end
+
+combilist=COMCTL-TABSTRIP-FLAGS2
+ ignore=0xFFFF0000
+ 0x00000003=uint8,dec,style,COMCTL-TABSTRIP-STYLE
+ 0x00000004=hot-tracking
+ 0x00000008=multi-select
+ 0x00000030=uint8,dec,placement,COMCTL-TABSTRIP-PLACEMENT
+ 0x00000040=separators
+end
+
+flagslist=COMCTL-TABSTRIP-FLAGS3
+ ignore=0xFFFF0000
+ 0x00000001=tabstyle-opposite
+end
+
+shortlist=COMCTL-TABSTRIP-TABWIDTHSTYLE,0,justified,non-justified,fixed
+shortlist=COMCTL-TABSTRIP-STYLE,0,tabs,tab-buttons,flat-buttons
+shortlist=COMCTL-TABSTRIP-PLACEMENT,0,top,bottom,left,right
+
+flagslist=COMCTL-TABSTRIP-TABFLAGS
+ 0x00000001=caption
+ 0x00000002=key
+ 0x00000004=tag
+ 0x00000008=tooltip
+end
+
+# tree view ------------------------------------------------------------------
+
+{0713E8A2-850A-101B-AFC0-4210102A8DA7}=COMCTL.TreeCtrl.1
+{C74190B6-8589-11D1-B16A-00C0F0283628}=MSComctlLib.TreeCtrl.2
+
+combilist=COMCTL-TREEVIEW-FLAGS
+ ignore=0xFFFF0000
+ 0x00000001=!tree-lines!root-lines
+ 0x0000001C=uint8,dec,style,COMCTL-TREEVIEW-STYLE
+ 0x00000020=label-edit
+ 0x00000080=hide-selection
+ 0x00000100=sorted
+end
+
+flagslist=COMCTL-TREEVIEW-STRINGFLAGS
+ ignore=0xFFFFFFF8
+ 0x00000001=separator
+ 0x00000002=image-list
+end
+
+shortlist=COMCTL-TREEVIEW-STYLE,0,text,pic-text,plusminus-text,plusminus-pic-text,treelines-text,treelines-pic-text,treelines-plusminus-text,treelines-plusminus-pic-text
+
+flagslist=COMCTL-TREEVIEW-FLAGS2
+ 0x00000001=checkboxes
+ 0x00000002=full-row-select
+ 0x00000004=hot-tracking
+ 0x00000008=scroll
+ 0x00000010=single-select
+end
+
+# status bar -----------------------------------------------------------------
+
+{6B7E638F-850A-101B-AFC0-4210102A8DA7}=COMCTL.SBarCtrl.1
+
+combilist=COMCTL-STATUSBAR-PANELFLAGS
+ ignore=0xFFFFF000
+ 0x00000007=uint8,dec,style,COMCTL-STATUSBAR-STYLE
+ 0x00000018=uint8,dec,alignment,COMCTL-STATUSBAR-ALIGN
+ 0x00000060=uint8,dec,bevel,COMCTL-STATUSBAR-BEVEL
+ 0x00000080=enabled
+ 0x00000300=uint8,dec,autosize,COMCTL-STATUSBAR-AUTOSIZE
+ 0x00000400=visible
+end
+
+shortlist=COMCTL-STATUSBAR-STYLE,0,text,caps,num,ins,scrl,time,date,kana
+shortlist=COMCTL-STATUSBAR-ALIGN,0,left,center,right
+shortlist=COMCTL-STATUSBAR-BEVEL,0,no-bevel,inset,raised
+shortlist=COMCTL-STATUSBAR-AUTOSIZE,0,no-auto,spring,content
+
+flagslist=COMCTL-STATUSBAR-TEXTFLAGS
+ 0x00000001=text
+ 0x00000002=vis-text
+ 0x00000004=key
+ 0x00000008=tag
+ 0x00000010=tooltip
end
-combilist=OCX-STRINGLEN
+# other controls =============================================================
+
+# Microsoft Web Browser
+{8856F961-340A-11D0-A96B-00C04FD705A2}=Shell.Explorer.2
+
+# ActiveX name lists =========================================================
+
+combilist=AX-STRINGLEN
0x80000000=!unicode!compressed
0x7FFFFFFF=int32,dec,buffer-size
end
-combilist=OCX-ARRAYSTRINGLEN
+combilist=AX-ARRAYSTRINGLEN
0x80000000=!unicode!compressed
0x7FFFFFFF=int32,dec,len
end
-combilist=OCX-FLAGS
+combilist=AX-FLAGS
0x00000001=reserved-1
0x00000002=enabled
0x00000004=locked
@@ -151,7 +358,7 @@ combilist=OCX-FLAGS
0x00001000=existing-entries-only
0x00002000=caption-left
0x00004000=editable
- 0x00078000=uint8,dec,ime-mode,OCX-IMEMODE
+ 0x00078000=uint8,dec,ime-mode,AX-IMEMODE
0x00080000=drag-enabled
0x00100000=enter-as-newline
0x00200000=keep-selection
@@ -166,7 +373,7 @@ combilist=OCX-FLAGS
0x80000000=multi-line
end
-multilist=OCX-IMEMODE
+multilist=AX-IMEMODE
0=no-control,on,off,disabled
4=hiragana,fillwidth-katakana,halfwidth-katakana
7=fullwidth-alpha,halfwidth-alpha
@@ -174,33 +381,26 @@ multilist=OCX-IMEMODE
11=fullwidth-hanzi,halfwidth-hanzi
end
-multilist=OCX-MOUSEPTR
- 0=default,arrow,cross,i-beam
- 6=size-diag-down,size-vert,size-diag-up,size-hor
- 10=up-arrow,hour-glass,no-drop,app-starting,help,size-all
- 99=custom
+combilist=AX-IMAGEPOS
+ 0x0000FFFF=uint16,dec,image,AX-POS
+ 0xFFFF0000=uint16,dec,label,AX-POS
end
-combilist=OCX-IMAGEPOS
- 0x0000FFFF=uint16,dec,image,OCX-POS
- 0xFFFF0000=uint16,dec,label,OCX-POS
-end
-
-unitconverter=OCX-CONV-MS,1,ms
+unitconverter=AX-CONV-MS,1,ms
-shortlist=OCX-ENABLED,0,disabled,enabled
-shortlist=OCX-BORDERSTYLE,0,none,single
-shortlist=OCX-SPECIALEFFECT,0,flat,raised,sunken,etched,,,bump
-shortlist=OCX-ORIENTATION,-1,auto,vertical,horizontal
-shortlist=OCX-POS,0,top-left,top,top-right,left,center,right,bottom-left,bottom,bottom-right
-shortlist=OCX-IMAGEALIGN,0,top-left,top-right,center,bottom-left,bottom-right
-shortlist=OCX-IMAGESIZEMODE,0,clip,stretch,,stretch-ratio
+shortlist=AX-ENABLED,0,disabled,enabled
+shortlist=AX-BORDERSTYLE,0,none,single
+shortlist=AX-SPECIALEFFECT,0,flat,raised,sunken,etched,,,bump
+shortlist=AX-ORIENTATION,-1,auto,vertical,horizontal
+shortlist=AX-POS,0,top-left,top,top-right,left,center,right,bottom-left,bottom,bottom-right
+shortlist=AX-IMAGEALIGN,0,top-left,top-right,center,bottom-left,bottom-right
+shortlist=AX-IMAGESIZEMODE,0,clip,stretch,,stretch-ratio
# CFontNew -------------------------------------------------------------------
{AFC20920-DA4E-11CE-B94300AA006887B4}=CFontNew
-flagslist=OCX-CFONTNEW-PROPERTIES
+flagslist=AX-CFONTNEW-PROPERTIES
0x0001=font-name
0x0002=flags
0x0004=font-size
@@ -211,7 +411,7 @@ flagslist=OCX-CFONTNEW-PROPERTIES
0x0080=font-weight
end
-flagslist=OCX-CFONTNEW-FLAGS
+flagslist=AX-CFONTNEW-FLAGS
0x00000001=bold
0x00000002=italic
0x00000004=underline
@@ -221,11 +421,11 @@ flagslist=OCX-CFONTNEW-FLAGS
0x40000000=auto-color
end
-shortlist=OCX-CFONTNEW-ALIGNMENT,1,left,right,center
+shortlist=AX-CFONTNEW-ALIGNMENT,1,left,right,center
# column info ----------------------------------------------------------------
-flagslist=OCX-COLUMNINFO-PROPERTIES
+flagslist=AX-COLUMNINFO-PROPERTIES
0x00000001=column-width
end
@@ -233,7 +433,7 @@ end
{D7053240-CE69-11CD-A777-00DD01143C57}=Forms.CommandButton.1
-flagslist=OCX-COMMANDBUTTON-PROPERTIES
+flagslist=AX-COMMANDBUTTON-PROPERTIES
0x00000001=text-color
0x00000002=fill-color
0x00000004=flags
@@ -257,7 +457,7 @@ end
{8BD21D60-EC42-11CE-9E0D-00AA006002F3}=Forms.ToggleButton.1
{00024512-0000-0000-C000-000000000046}=RefEdit.Ctrl
-flagslist=OCX-MORPH-PROPERTIES
+flagslist=AX-MORPH-PROPERTIES
0x0000000000000001=flags
0x0000000000000002=fill-color
0x0000000000000004=text-color
@@ -291,26 +491,26 @@ flagslist=OCX-MORPH-PROPERTIES
0x0000000100000000=groupname
end
-shortlist=OCX-MORPH-SCROLLBARS,0,none,horizontal,vertical,both
-shortlist=OCX-MORPH-CONTROLTYPE,1,edit,listbox,combobox,checkbox,optionbutton,togglebutton,dropdown-listbox
-shortlist=OCX-MORPH-MATCHENTRYTYPE,0,first-letter,complete,none
-shortlist=OCX-MORPH-LISTSTYLE,0,plain,with-buttons
-shortlist=OCX-MORPH-SHOWDROPDOWNMODE,0,never,on-focus,always
-shortlist=OCX-MORPH-DROPDOWNSTYLE,0,no-symbol,arrow,ellipsis,underline
-shortlist=OCX-MORPH-SELECTIONTYPE,0,single,multi,range
+shortlist=AX-MORPH-SCROLLBARS,0,none,horizontal,vertical,both
+shortlist=AX-MORPH-CONTROLTYPE,1,edit,listbox,combobox,checkbox,optionbutton,togglebutton,dropdown-listbox
+shortlist=AX-MORPH-MATCHENTRYTYPE,0,first-letter,complete,none
+shortlist=AX-MORPH-LISTSTYLE,0,plain,with-buttons
+shortlist=AX-MORPH-SHOWDROPDOWNMODE,0,never,on-focus,always
+shortlist=AX-MORPH-DROPDOWNSTYLE,0,no-symbol,arrow,ellipsis,underline
+shortlist=AX-MORPH-SELECTIONTYPE,0,single,multi,range
-constlist=OCX-MORPH-BOUNDCOLUMN
+constlist=AX-MORPH-BOUNDCOLUMN
default=
0=value-is-row-index
end
-constlist=OCX-MORPH-TEXTCOLUMN
+constlist=AX-MORPH-TEXTCOLUMN
default=
-1=first-column-with-width
0=row-numbers
end
-constlist=OCX-MORPH-COLUMNCOUNT
+constlist=AX-MORPH-COLUMNCOUNT
default=
-1=all-columns
end
@@ -319,7 +519,7 @@ end
{978C9E23-D4B0-11CE-BF2D-00AA003F40D0}=Forms.Label.1
-flagslist=OCX-LABEL-PROPERTIES
+flagslist=AX-LABEL-PROPERTIES
0x00000001=text-color
0x00000002=fill-color
0x00000004=flags
@@ -339,7 +539,7 @@ end
{4C599241-6926-101B-9992-00000B65C6F9}=Forms.Image.1
-flagslist=OCX-IMAGE-PROPERTIES
+flagslist=AX-IMAGE-PROPERTIES
0x00000004=auto-size
0x00000008=border-color
0x00000010=fill-color
@@ -359,7 +559,7 @@ end
{DFD181E0-5E2F-11CE-A449-00AA004A803D}=Forms.ScrollBar.1
-flagslist=OCX-SCROLLBAR-PROPERTIES
+flagslist=AX-SCROLLBAR-PROPERTIES
0x00000001=arrow-color
0x00000002=fill-color
0x00000004=flags
@@ -379,13 +579,13 @@ flagslist=OCX-SCROLLBAR-PROPERTIES
0x00010000=mouse-icon
end
-shortlist=OCX-SCROLLBAR-PROPTHUMB,-1,proportional,fixed
+shortlist=AX-SCROLLBAR-PROPTHUMB,-1,proportional,fixed
# spin button ----------------------------------------------------------------
{79176FB0-B7F2-11CE-97EF-00AA006D2776}=Forms.SpinButton.1
-flagslist=OCX-SPINBUTTON-PROPERTIES
+flagslist=AX-SPINBUTTON-PROPERTIES
0x00000001=arrow-color
0x00000002=fill-color
0x00000004=flags
@@ -407,7 +607,7 @@ end
{EAE50EB0-4A62-11CE-BED6-00AA00611080}=Forms.TabStrip.1
-flagslist=OCX-TABSTRIP-PROPERTIES
+flagslist=AX-TABSTRIP-PROPERTIES
0x00000001=selected-tab
0x00000002=fill-color
0x00000004=text-color
@@ -431,40 +631,19 @@ flagslist=OCX-TABSTRIP-PROPERTIES
0x01000000=mouse-icon
end
-shortlist=OCX-TABSTRIP-ORIENTATION,0,top,bottom,left,right
-shortlist=OCX-TABSTRIP-TABSTYLE,0,tabs,buttons,none
+shortlist=AX-TABSTRIP-ORIENTATION,0,top,bottom,left,right
+shortlist=AX-TABSTRIP-TABSTYLE,0,tabs,buttons,none
-flagslist=OCX-TABSTRIP-FLAGS
+flagslist=AX-TABSTRIP-FLAGS
0x00000001=visible
0x00000002=enabled
end
-# frame ----------------------------------------------------------------------
-
-{6E182020-F460-11CE-9BCD-00AA00608E01}=Forms.Frame.1
-
-# page -----------------------------------------------------------------------
-
-flagslist=OCX-PAGE-PROPERTIES
- 0x00000002=transition-effect
- 0x00000004=transition-period
-end
-
-shortlist=OCX-PAGE-TRANSITIONEFFECT,0,none,cover-up,cover-right-up,cover-right,cover-right-down,cover-down,cover-left-down,cover-left,cover-left-up,push-up,push-right,push-down,push-left
-
-# multi page -----------------------------------------------------------------
-
-{46E31370-3F7A-11CE-BED6-00AA00611080}=Forms.MultiPage.1
-
-flagslist=OCX-MULTIPAGE-PROPERTIES
- 0x00000002=page-count
- 0x00000004=id
- 0x00000008=enabled
-end
+# VBA forms ==================================================================
# form class info ------------------------------------------------------------
-flagslist=OCX-CLASSINFO-PROPERTIES
+flagslist=VBA-CLASSINFO-PROPERTIES
0x00000001=class-id
0x00000002=disp-event
0x00000008=default-prog
@@ -481,18 +660,18 @@ flagslist=OCX-CLASSINFO-PROPERTIES
0x00004000=set-rowset
end
-combilist=OCX-CLASSINFO-FLAGS
- 0x0000FFFF=uint16,hex,classtable-flags,OCX-CLASSTABLE-CLASSFLAGS
- 0xFFFF0000=uint16,hex,var-flags,OCX-CLASSTABLE-VARFLAGS
+combilist=VBA-CLASSINFO-FLAGS
+ 0x0000FFFF=uint16,hex,classtable-flags,VBA-CLASSTABLE-CLASSFLAGS
+ 0xFFFF0000=uint16,hex,var-flags,VBA-CLASSTABLE-VARFLAGS
end
-flagslist=OCX-CLASSTABLE-CLASSFLAGS
+flagslist=VBA-CLASSTABLE-CLASSFLAGS
0x0001=exclusive-value
0x0002=dual-interface
0x0004=no-aggregation
end
-flagslist=OCX-CLASSTABLE-VARFLAGS
+flagslist=VBA-CLASSTABLE-VARFLAGS
0x0001=read-only
0x0002=source
0x0004=bindable
@@ -510,7 +689,7 @@ end
# form site ------------------------------------------------------------------
-flagslist=OCX-FORMSITE-PROPERTIES
+flagslist=VBA-FORMSITE-PROPERTIES
0x00000001=name
0x00000002=tag
0x00000004=id
@@ -527,7 +706,7 @@ flagslist=OCX-FORMSITE-PROPERTIES
0x00004000=row-source
end
-flagslist=OCX-FORMSITE-FLAGS
+flagslist=VBA-FORMSITE-FLAGS
0x00000001=tabstop
0x00000002=visible
0x00000004=default
@@ -540,7 +719,18 @@ flagslist=OCX-FORMSITE-FLAGS
0x00040000=container
end
-constlist=OCX-FORMSITE-CLASSNAMES
+combilist=VBA-FORMSITE-CLASSIDCACHE
+ 0x7FFF=uint16,dec,cache-idx,VBA-FORMSITE-CLASSIDCACHEINDEX,filter=0x8000~0x0000
+ 0x7FFF=uint16,dec,class-table-idx,,filter=0x8000~0x8000
+ 0x8000=!predefined-class-id!class-table-index
+end
+
+constlist=VBA-FORMSITE-CLASSIDCACHEINDEX
+ include=VBA-FORMSITE-CLASSNAMES
+ 0x7FFF=invalid
+end
+
+constlist=VBA-FORMSITE-CLASSNAMES
7=Forms.Form.1
12=Forms.Image.1
14=Forms.Frame.1
@@ -559,20 +749,9 @@ constlist=OCX-FORMSITE-CLASSNAMES
57=Forms.MultiPage.1
end
-constlist=OCX-FORMSITE-CLASSIDCACHEINDEX
- include=OCX-FORMSITE-CLASSNAMES
- 0x7FFF=invalid
-end
-
-combilist=OCX-FORMSITE-CLASSIDCACHE
- 0x7FFF=uint16,dec,cache-idx,OCX-FORMSITE-CLASSIDCACHEINDEX,filter=0x8000~0x0000
- 0x7FFF=uint16,dec,class-table-idx,,filter=0x8000~0x8000
- 0x8000=!predefined-class-id!class-table-index
-end
-
# form design extender ------------------------------------------------------
-flagslist=OCX-FORMDESIGNEXT-PROPERTIES
+flagslist=VBA-FORMDESIGNEXT-PROPERTIES
0x00000001=flags
0x00000002=grid-x
0x00000004=grid-y
@@ -580,7 +759,7 @@ flagslist=OCX-FORMDESIGNEXT-PROPERTIES
0x00000010=dblclick-control-mode
end
-flagslist=OCX-FORMDESIGNEXT-FLAGS
+flagslist=VBA-FORMDESIGNEXT-FLAGS
0x00000001=inherit-design-mode
0x00000002=design-mode
0x00000004=inherit-show-toolbox
@@ -601,14 +780,15 @@ flagslist=OCX-FORMDESIGNEXT-FLAGS
0x00020000=immediate-layout
end
-shortlist=OCX-FORMDESIGNEXT-CLICKCTRLMODE,-2,inherit,default,insertion-point,select-then-insert
-shortlist=OCX-FORMDESIGNEXT-DBLCLICKCTRLMODE,-2,inherit,,select-text,edit-code,edit-properties
+shortlist=VBA-FORMDESIGNEXT-CLICKCTRLMODE,-2,inherit,default,insertion-point,select-then-insert
+shortlist=VBA-FORMDESIGNEXT-DBLCLICKCTRLMODE,-2,inherit,,select-text,edit-code,edit-properties
# form -----------------------------------------------------------------------
{C62A69F0-16DC-11CE-9E98-00AA00574A4F}=Forms.Form.1
+{6E182020-F460-11CE-9BCD-00AA00608E01}=Forms.Frame.1
-flagslist=OCX-FORM-PROPERTIES
+flagslist=VBA-FORM-PROPERTIES
0x00000002=fill-color
0x00000004=text-color
0x00000008=next-available-id
@@ -635,13 +815,13 @@ flagslist=OCX-FORM-PROPERTIES
0x08000000=draw-buffer
end
-flagslist=OCX-FORM-FLAGS
+flagslist=VBA-FORM-FLAGS
0x00000004=enabled
0x00004000=has-design-extender
0x00008000=!has-class-table!skip-class-table
end
-flagslist=OCX-FORM-SCROLLBARS
+flagslist=VBA-FORM-SCROLLBARS
0x01=horizontal
0x02=vertical
0x04=keep-horizontal
@@ -649,24 +829,43 @@ flagslist=OCX-FORM-SCROLLBARS
0x10=vertical-left
end
-shortlist=OCX-FORM-CYCLE,0,all-forms,,current-form
+shortlist=VBA-FORM-CYCLE,0,all-forms,,current-form
-combilist=OCX-FORM-SITE-TYPECOUNT
+combilist=VBA-FORM-SITE-TYPECOUNT
0x7F=uint8,dec,type-count
0x80=!type!count
end
-# VBA name lists =============================================================
+# page -----------------------------------------------------------------------
+
+flagslist=VBA-PAGE-PROPERTIES
+ 0x00000002=transition-effect
+ 0x00000004=transition-period
+end
+
+shortlist=VBA-PAGE-TRANSITIONEFFECT,0,none,cover-up,cover-right-up,cover-right,cover-right-down,cover-down,cover-left-down,cover-left,cover-left-up,push-up,push-right,push-down,push-left
+
+# multi page -----------------------------------------------------------------
+
+{46E31370-3F7A-11CE-BED6-00AA00611080}=Forms.MultiPage.1
+
+flagslist=VBA-MULTIPAGE-PROPERTIES
+ 0x00000002=page-count
+ 0x00000004=id
+ 0x00000008=enabled
+end
+
+# VBA project name lists =====================================================
multilist=VBA-DIR-RECORD-NAMES
- 0x0000=,PROJECTSYSKIND,PROJECTLCID,PROJECTCODEPAGE,PROJECTNAME,PROJECTDOCSTRING,PROJECTHELPFILEPATH,PROJECTHELPCONTEXT
+ 0x0000=,PROJECTSYSKIND,PROJECTLCID,PROJECTCODEPAGE,PROJECTNAME,PROJECTDOCSTRING,PROJECTHELPFILEPATH1,PROJECTHELPCONTEXT
0x0008=PROJECTLIBFLAGS,PROJECTVERSION,,,PROJECTCONSTANTS,REFERENCEREGISTERED,REFERENCEPROJECT,PROJECTMODULES
0x0010=PROJECTEND,,,PROJECTCOOKIE,PROJECTLCIDINVOKE,,REFERENCENAME,
0x0018=,MODULENAME,MODULESTREAMNAME,,MODULEDOCSTRING,,MODULEHELPCONTEXT,
- 0x0020=,PROCEDURALMODULE,DOCUMENTMODULE,,,MODULEREADONLY,,
+ 0x0020=,MODULETYPEPROCEDURAL,MODULETYPEDOCUMENT,,,MODULEREADONLY,,
0x0028=MODULEPRIVATE,,,MODULEEND,MODULECOOKIE,,,REFERENCECONTROL
0x0030=REFERENCEEXTENDED,MODULEOFFSET,MODULESTREAMNAMEUNICODE,REFERENCEORIGINAL,,,,
- 0x0038=,,,,PROJECTCONSTANTSUNICODE,PROJECTHELPFILEPATHUNICODE,REFERENCENAMEUNICODE,
+ 0x0038=,,,,PROJECTCONSTANTSUNICODE,PROJECTHELPFILEPATH2,REFERENCENAMEUNICODE,
0x0040=PROJECTDOCSTRINGUNICODE,,,,,,,MODULENAMEUNICODE
0x0048=MODULEDOCSTRINGUNICODE,,,,,,,
end
diff --git a/oox/source/dump/pptxdumper.cxx b/oox/source/dump/pptxdumper.cxx
index e58991dbecc9..e01d7d349855 100644
--- a/oox/source/dump/pptxdumper.cxx
+++ b/oox/source/dump/pptxdumper.cxx
@@ -26,8 +26,8 @@
************************************************************************/
#include "oox/dump/pptxdumper.hxx"
-#include "oox/helper/olestorage.hxx"
#include "oox/helper/zipstorage.hxx"
+#include "oox/ole/olestorage.hxx"
#include "oox/dump/biffdumper.hxx"
#include "oox/dump/oledumper.hxx"
#include "oox/dump/xlsbdumper.hxx"
@@ -91,17 +91,18 @@ void RootStorageObject::implDumpStream( const BinaryInputStreamRef& rxStrm, cons
{
if( rStrgPath.equalsAscii( "ppt" ) && rStrmName.equalsAscii( "vbaProject.bin" ) )
{
- StorageRef xStrg( new OleStorage( getFactory(), xInStrm, false ) );
+ StorageRef xStrg( new ::oox::ole::OleStorage( getFactory(), xInStrm, false ) );
VbaProjectStorageObject( *this, xStrg, rSysFileName ).dump();
}
else if( rStrgPath.equalsAscii( "ppt/embeddings" ) )
{
- StorageRef xStrg( new OleStorage( getFactory(), xInStrm, false ) );
+ StorageRef xStrg( new ::oox::ole::OleStorage( getFactory(), xInStrm, false ) );
OleStorageObject( *this, xStrg, rSysFileName ).dump();
}
else if( rStrgPath.equalsAscii( "ppt/activeX" ) )
{
- OcxGuidControlObject( *this, rxStrm, rSysFileName ).dump();
+ StorageRef xStrg( new ::oox::ole::OleStorage( getFactory(), xInStrm, true ) );
+ ActiveXStorageObject( *this, xStrg, rSysFileName ).dump();
}
else
{
diff --git a/oox/source/dump/xlsbdumper.cxx b/oox/source/dump/xlsbdumper.cxx
index a9674951225b..80fccddff2ea 100644
--- a/oox/source/dump/xlsbdumper.cxx
+++ b/oox/source/dump/xlsbdumper.cxx
@@ -30,9 +30,9 @@
#include "oox/dump/biffdumper.hxx"
#include "oox/dump/oledumper.hxx"
#include "oox/dump/pptxdumper.hxx"
-#include "oox/helper/olestorage.hxx"
#include "oox/helper/zipstorage.hxx"
#include "oox/core/filterbase.hxx"
+#include "oox/ole/olestorage.hxx"
#include "oox/xls/biffhelper.hxx"
#include "oox/xls/formulabase.hxx"
#include "oox/xls/richstring.hxx"
@@ -82,8 +82,8 @@ RecordObjectBase::~RecordObjectBase()
void RecordObjectBase::construct( const ObjectBase& rParent, const BinaryInputStreamRef& rxStrm, const OUString& rSysFileName )
{
- mxStrm.reset( new RecordInputStream( getRecordDataSequence() ) );
- SequenceRecordObjectBase::construct( rParent, rxStrm, rSysFileName, mxStrm, "RECORD-NAMES", "SIMPLE-RECORDS" );
+ mxBiffStrm.reset( new RecordInputStream( getRecordDataSequence() ) );
+ SequenceRecordObjectBase::construct( rParent, rxStrm, rSysFileName, mxBiffStrm, "RECORD-NAMES", "SIMPLE-RECORDS" );
if( SequenceRecordObjectBase::implIsValid() )
mxErrCodes = cfg().getNameList( "ERRORCODES" );
}
@@ -111,22 +111,22 @@ OUString RecordObjectBase::getErrorName( sal_uInt8 nErrCode ) const
void RecordObjectBase::readAddress( Address& orAddress )
{
- in() >> orAddress.mnRow >> orAddress.mnCol;
+ *mxStrm >> orAddress.mnRow >> orAddress.mnCol;
}
void RecordObjectBase::readRange( Range& orRange )
{
- in() >> orRange.maFirst.mnRow >> orRange.maLast.mnRow >> orRange.maFirst.mnCol >> orRange.maLast.mnCol;
+ *mxStrm >> orRange.maFirst.mnRow >> orRange.maLast.mnRow >> orRange.maFirst.mnCol >> orRange.maLast.mnCol;
}
void RecordObjectBase::readRangeList( RangeList& orRanges )
{
sal_Int32 nCount;
- in() >> nCount;
+ *mxStrm >> nCount;
if( nCount >= 0 )
{
orRanges.resize( getLimitedValue< size_t, sal_Int32 >( nCount, 0, SAL_MAX_UINT16 ) );
- for( RangeList::iterator aIt = orRanges.begin(), aEnd = orRanges.end(); !in().isEof() && (aIt != aEnd); ++aIt )
+ for( RangeList::iterator aIt = orRanges.begin(), aEnd = orRanges.end(); !mxStrm->isEof() && (aIt != aEnd); ++aIt )
readRange( *aIt );
}
else
@@ -150,11 +150,11 @@ void RecordObjectBase::writeFontPortions( const FontPortionModelList& rPortions
if( !rPortions.empty() )
{
writeDecItem( "font-count", static_cast< sal_uInt32 >( rPortions.size() ) );
- IndentGuard aIndGuard( out() );
- TableGuard aTabGuard( out(), 14 );
+ IndentGuard aIndGuard( mxOut );
+ TableGuard aTabGuard( mxOut, 14 );
for( FontPortionModelList::const_iterator aIt = rPortions.begin(), aEnd = rPortions.end(); aIt != aEnd; ++aIt )
{
- MultiItemsGuard aMultiGuard( out() );
+ MultiItemsGuard aMultiGuard( mxOut );
writeDecItem( "char-pos", aIt->mnPos );
writeDecItem( "font-id", aIt->mnFontId, "FONTNAMES" );
}
@@ -166,11 +166,11 @@ void RecordObjectBase::writePhoneticPortions( const PhoneticPortionModelList& rP
if( !rPortions.empty() )
{
writeDecItem( "portion-count", static_cast< sal_uInt32 >( rPortions.size() ) );
- IndentGuard aIndGuard( out() );
- TableGuard aTabGuard( out(), 14, 21 );
+ IndentGuard aIndGuard( mxOut );
+ TableGuard aTabGuard( mxOut, 14, 21 );
for( PhoneticPortionModelList::const_iterator aIt = rPortions.begin(), aEnd = rPortions.end(); aIt != aEnd; ++aIt )
{
- MultiItemsGuard aMultiGuard( out() );
+ MultiItemsGuard aMultiGuard( mxOut );
writeDecItem( "char-pos", aIt->mnPos );
writeDecItem( "base-text-start", aIt->mnBasePos );
writeDecItem( "base-text-length", aIt->mnBaseLen );
@@ -183,7 +183,7 @@ void RecordObjectBase::writePhoneticPortions( const PhoneticPortionModelList& rP
sal_uInt8 RecordObjectBase::dumpBoolean( const String& rName )
{
sal_uInt8 nBool;
- in() >> nBool;
+ *mxStrm >> nBool;
writeBooleanItem( rName( "boolean" ), nBool );
return nBool;
}
@@ -191,7 +191,7 @@ sal_uInt8 RecordObjectBase::dumpBoolean( const String& rName )
sal_uInt8 RecordObjectBase::dumpErrorCode( const String& rName )
{
sal_uInt8 nErrCode;
- in() >> nErrCode;
+ *mxStrm >> nErrCode;
writeErrorCodeItem( rName( "error-code" ), nErrCode );
return nErrCode;
}
@@ -200,25 +200,25 @@ OUString RecordObjectBase::dumpString( const String& rName, bool bRich, bool b32
{
sal_uInt8 nFlags = bRich ? dumpHex< sal_uInt8 >( "flags", "STRING-FLAGS" ) : 0;
- OUString aString = mxStrm->readString( b32BitLen );
+ OUString aString = mxBiffStrm->readString( b32BitLen );
writeStringItem( rName( "text" ), aString );
// --- formatting ---
if( getFlag( nFlags, OOBIN_STRINGFLAG_FONTS ) )
{
- IndentGuard aIndGuard( out() );
+ IndentGuard aIndGuard( mxOut );
FontPortionModelList aPortions;
- aPortions.importPortions( *mxStrm );
+ aPortions.importPortions( *mxBiffStrm );
writeFontPortions( aPortions );
}
// --- phonetic text ---
if( getFlag( nFlags, OOBIN_STRINGFLAG_PHONETICS ) )
{
- IndentGuard aIndGuard( out() );
+ IndentGuard aIndGuard( mxOut );
dumpString( "phonetic-text" );
PhoneticPortionModelList aPortions;
- aPortions.importPortions( *mxStrm );
+ aPortions.importPortions( *mxBiffStrm );
writePhoneticPortions( aPortions );
dumpDec< sal_uInt16 >( "font-id", "FONTNAMES" );
dumpHex< sal_uInt16 >( "flags", "PHONETIC-FLAGS" );
@@ -229,7 +229,7 @@ OUString RecordObjectBase::dumpString( const String& rName, bool bRich, bool b32
void RecordObjectBase::dumpColor( const String& rName )
{
- MultiItemsGuard aMultiGuard( out() );
+ MultiItemsGuard aMultiGuard( mxOut );
writeEmptyItem( rName( "color" ) );
switch( extractValue< sal_uInt8 >( dumpDec< sal_uInt8 >( "flags", "COLOR-FLAGS" ), 1, 7 ) )
{
@@ -246,12 +246,12 @@ void RecordObjectBase::dumpColor( const String& rName )
DateTime RecordObjectBase::dumpPivotDateTime( const String& rName )
{
DateTime aDateTime;
- aDateTime.Year = in().readuInt16();
- aDateTime.Month = in().readuInt16();
- aDateTime.Day = in().readuInt8();
- aDateTime.Hours = in().readuInt8();
- aDateTime.Minutes = in().readuInt8();
- aDateTime.Seconds = in().readuInt8();
+ aDateTime.Year = mxStrm->readuInt16();
+ aDateTime.Month = mxStrm->readuInt16();
+ aDateTime.Day = mxStrm->readuInt8();
+ aDateTime.Hours = mxStrm->readuInt8();
+ aDateTime.Minutes = mxStrm->readuInt8();
+ aDateTime.Seconds = mxStrm->readuInt8();
writeDateTimeItem( rName, aDateTime );
return aDateTime;
}
@@ -259,7 +259,7 @@ DateTime RecordObjectBase::dumpPivotDateTime( const String& rName )
sal_Int32 RecordObjectBase::dumpColIndex( const String& rName )
{
sal_Int32 nCol;
- in() >> nCol;
+ *mxStrm >> nCol;
writeColIndexItem( rName( "col-idx" ), nCol );
return nCol;
}
@@ -267,7 +267,7 @@ sal_Int32 RecordObjectBase::dumpColIndex( const String& rName )
sal_Int32 RecordObjectBase::dumpRowIndex( const String& rName )
{
sal_Int32 nRow;
- in() >> nRow;
+ *mxStrm >> nRow;
writeRowIndexItem( rName( "row-idx" ), nRow );
return nRow;
}
@@ -275,7 +275,7 @@ sal_Int32 RecordObjectBase::dumpRowIndex( const String& rName )
sal_Int32 RecordObjectBase::dumpColRange( const String& rName )
{
sal_Int32 nCol1, nCol2;
- in() >> nCol1 >> nCol2;
+ *mxStrm >> nCol1 >> nCol2;
writeColRangeItem( rName( "col-range" ), nCol1, nCol2 );
return nCol2 - nCol1 + 1;
}
@@ -283,7 +283,7 @@ sal_Int32 RecordObjectBase::dumpColRange( const String& rName )
sal_Int32 RecordObjectBase::dumpRowRange( const String& rName )
{
sal_Int32 nRow1, nRow2;
- in() >> nRow1 >> nRow2;
+ *mxStrm >> nRow1 >> nRow2;
writeRowRangeItem( rName( "row-range" ), nRow1, nRow2 );
return nRow2 - nRow1 + 1;
}
@@ -363,26 +363,25 @@ void FormulaObject::dumpNameFormula( const String& rName )
void FormulaObject::implDump()
{
{
- MultiItemsGuard aMultiGuard( out() );
+ MultiItemsGuard aMultiGuard( mxOut );
writeEmptyItem( maName );
writeDecItem( "formula-size", mnSize );
}
if( mnSize < 0 ) return;
- BinaryInputStream& rStrm = in();
- sal_Int64 nStartPos = rStrm.tell();
- sal_Int64 nEndPos = ::std::min< sal_Int64 >( nStartPos + mnSize, rStrm.getLength() );
+ sal_Int64 nStartPos = mxStrm->tell();
+ sal_Int64 nEndPos = ::std::min< sal_Int64 >( nStartPos + mnSize, mxStrm->getLength() );
bool bValid = mxTokens.get();
mxStack.reset( new FormulaStack );
maAddData.clear();
- IndentGuard aIndGuard( out() );
+ IndentGuard aIndGuard( mxOut );
{
- TableGuard aTabGuard( out(), 8, 18 );
- while( bValid && (rStrm.tell() < nEndPos) )
+ TableGuard aTabGuard( mxOut, 8, 18 );
+ while( bValid && (mxStrm->tell() < nEndPos) )
{
- MultiItemsGuard aMultiGuard( out() );
- writeHexItem( EMPTY_STRING, static_cast< sal_uInt16 >( rStrm.tell() - nStartPos ) );
+ MultiItemsGuard aMultiGuard( mxOut );
+ writeHexItem( EMPTY_STRING, static_cast< sal_uInt16 >( mxStrm->tell() - nStartPos ) );
sal_uInt8 nTokenId = dumpHex< sal_uInt8 >( EMPTY_STRING, mxTokens );
bValid = mxTokens->hasName( nTokenId );
if( bValid )
@@ -457,7 +456,7 @@ void FormulaObject::implDump()
}
}
- if( nEndPos == rStrm.tell() )
+ if( nEndPos == mxStrm->tell() )
{
dumpAddTokenData();
if( mnSize > 0 )
@@ -468,7 +467,7 @@ void FormulaObject::implDump()
}
else
{
- dumpBinary( OOX_DUMP_ERRASCII( "formula-error" ), static_cast< sal_Int32 >( nEndPos - rStrm.tell() ), false );
+ dumpBinary( OOX_DUMP_ERRASCII( "formula-error" ), static_cast< sal_Int32 >( nEndPos - mxStrm->tell() ), false );
sal_Int32 nAddDataSize = dumpDec< sal_Int32 >( "add-data-size" );
dumpBinary( "add-data", nAddDataSize, false );
}
@@ -479,7 +478,7 @@ void FormulaObject::implDump()
void FormulaObject::dumpFormula( const String& rName, bool bNameMode )
{
maName = rName( "formula" );
- in() >> mnSize;
+ *mxStrm >> mnSize;
mbNameMode = bNameMode;
dump();
}
@@ -565,7 +564,7 @@ OUString FormulaObject::createPlaceHolder() const
OUString FormulaObject::writeFuncIdItem( sal_uInt16 nFuncId, const FunctionInfo** oppFuncInfo )
{
- ItemGuard aItemGuard( out(), "func-id" );
+ ItemGuard aItem( mxOut, "func-id" );
writeHexItem( EMPTY_STRING, nFuncId, "FUNCID" );
OUStringBuffer aBuffer;
const FunctionInfo* pFuncInfo = mxFuncProv->getFuncInfoFromOobFuncId( nFuncId );
@@ -578,10 +577,10 @@ OUString FormulaObject::writeFuncIdItem( sal_uInt16 nFuncId, const FunctionInfo*
StringHelper::appendIndex( aBuffer, nFuncId & BIFF_TOK_FUNCVAR_FUNCIDMASK );
}
OUString aFuncName = aBuffer.makeStringAndClear();
- aItemGuard.cont();
- out().writeChar( OOX_DUMP_STRQUOTE );
- out().writeString( aFuncName );
- out().writeChar( OOX_DUMP_STRQUOTE );
+ aItem.cont();
+ mxOut->writeChar( OOX_DUMP_STRQUOTE );
+ mxOut->writeString( aFuncName );
+ mxOut->writeChar( OOX_DUMP_STRQUOTE );
if( oppFuncInfo ) *oppFuncInfo = pFuncInfo;
return aFuncName;
}
@@ -641,13 +640,13 @@ OUString FormulaObject::dumpTokenRefId()
void FormulaObject::dumpIntToken()
{
dumpDec< sal_uInt16 >( "value" );
- mxStack->pushOperand( out().getLastItemValue() );
+ mxStack->pushOperand( mxOut->getLastItemValue() );
}
void FormulaObject::dumpDoubleToken()
{
dumpDec< double >( "value" );
- mxStack->pushOperand( out().getLastItemValue() );
+ mxStack->pushOperand( mxOut->getLastItemValue() );
}
void FormulaObject::dumpStringToken()
@@ -660,13 +659,13 @@ void FormulaObject::dumpStringToken()
void FormulaObject::dumpBoolToken()
{
dumpBoolean( "value" );
- mxStack->pushOperand( out().getLastItemValue() );
+ mxStack->pushOperand( mxOut->getLastItemValue() );
}
void FormulaObject::dumpErrorToken()
{
dumpErrorCode( "value" );
- mxStack->pushOperand( out().getLastItemValue() );
+ mxStack->pushOperand( mxOut->getLastItemValue() );
}
void FormulaObject::dumpMissArgToken()
@@ -698,14 +697,14 @@ void FormulaObject::dumpRefToken( const OUString& rTokClass, bool bNameMode )
{
TokenAddress aPos = dumpTokenAddress( bNameMode );
writeTokenAddressItem( "addr", aPos, bNameMode );
- mxStack->pushOperand( createRef( out().getLastItemValue() ), rTokClass );
+ mxStack->pushOperand( createRef( mxOut->getLastItemValue() ), rTokClass );
}
void FormulaObject::dumpAreaToken( const OUString& rTokClass, bool bNameMode )
{
TokenRange aRange = dumpTokenRange( bNameMode );
writeTokenRangeItem( "range", aRange, bNameMode );
- mxStack->pushOperand( createRef( out().getLastItemValue() ), rTokClass );
+ mxStack->pushOperand( createRef( mxOut->getLastItemValue() ), rTokClass );
}
void FormulaObject::dumpRefErrToken( const OUString& rTokClass, bool bArea )
@@ -719,7 +718,7 @@ void FormulaObject::dumpRef3dToken( const OUString& rTokClass, bool bNameMode )
OUString aRef = dumpTokenRefId();
TokenAddress aPos = dumpTokenAddress( bNameMode );
writeTokenAddress3dItem( "addr", aRef, aPos, bNameMode );
- mxStack->pushOperand( out().getLastItemValue(), rTokClass );
+ mxStack->pushOperand( mxOut->getLastItemValue(), rTokClass );
}
void FormulaObject::dumpArea3dToken( const OUString& rTokClass, bool bNameMode )
@@ -727,7 +726,7 @@ void FormulaObject::dumpArea3dToken( const OUString& rTokClass, bool bNameMode )
OUString aRef = dumpTokenRefId();
TokenRange aRange = dumpTokenRange( bNameMode );
writeTokenRange3dItem( "range", aRef, aRange, bNameMode );
- mxStack->pushOperand( out().getLastItemValue(), rTokClass );
+ mxStack->pushOperand( mxOut->getLastItemValue(), rTokClass );
}
void FormulaObject::dumpRefErr3dToken( const OUString& rTokClass, bool bArea )
@@ -755,7 +754,7 @@ void FormulaObject::dumpExpToken( const String& rName )
Address aPos;
dumpRowIndex( "base-row" );
OUStringBuffer aOp( rName );
- StringHelper::appendIndex( aOp, createPlaceHolder() + out().getLastItemValue() );
+ StringHelper::appendIndex( aOp, createPlaceHolder() + mxOut->getLastItemValue() );
mxStack->pushOperand( aOp.makeStringAndClear() );
maAddData.push_back( ADDDATA_EXP );
}
@@ -773,7 +772,7 @@ void FormulaObject::dumpBinaryOpToken( const String& rOp )
void FormulaObject::dumpFuncToken( const OUString& rTokClass )
{
sal_uInt16 nFuncId;
- in() >> nFuncId;
+ *mxStrm >> nFuncId;
const FunctionInfo* pFuncInfo = 0;
OUString aFuncName = writeFuncIdItem( nFuncId, &pFuncInfo );
if( pFuncInfo && (pFuncInfo->mnMinParamCount == pFuncInfo->mnMaxParamCount) )
@@ -786,7 +785,7 @@ void FormulaObject::dumpFuncVarToken( const OUString& rTokClass )
{
sal_uInt8 nParamCount;
sal_uInt16 nFuncId;
- in() >> nParamCount >> nFuncId;
+ *mxStrm >> nParamCount >> nFuncId;
bool bCmd = getFlag( nFuncId, BIFF_TOK_FUNCVAR_CMD );
if( bCmd )
writeHexItem( "param-count", nParamCount, "PARAMCOUNT-CMD" );
@@ -803,24 +802,23 @@ void FormulaObject::dumpFuncVarToken( const OUString& rTokClass )
bool FormulaObject::dumpTableToken()
{
- Output& rOut = out();
dumpUnused( 3 );
sal_uInt16 nFlags = dumpHex< sal_uInt16 >( "flags", "TABLEFLAGS" );
sal_uInt16 nTabId = dumpDec< sal_uInt16 >( "table-id" );
dumpUnused( 2 );
{
sal_uInt16 nCol1, nCol2;
- in() >> nCol1 >> nCol2;
- ItemGuard aItem( rOut, "cols" );
- rOut.writeDec( nCol1 );
+ *mxStrm >> nCol1 >> nCol2;
+ ItemGuard aItem( mxOut, "cols" );
+ mxOut->writeDec( nCol1 );
if( nCol1 != nCol2 )
{
- rOut.writeChar( OOX_DUMP_RANGESEP );
- rOut.writeDec( nCol2 );
+ mxOut->writeChar( OOX_DUMP_RANGESEP );
+ mxOut->writeDec( nCol2 );
}
}
OUStringBuffer aColRange;
- StringHelper::appendIndex( aColRange, rOut.getLastItemValue() );
+ StringHelper::appendIndex( aColRange, mxOut->getLastItemValue() );
OUStringBuffer aParams;
size_t nParams = 0;
if( getFlag( nFlags, OOBIN_TOK_TABLE_ALL ) && ++nParams )
@@ -860,7 +858,7 @@ bool FormulaObject::dumpAttrToken()
case OOBIN_TOK_ATTR_CHOOSE:
{
sal_uInt16 nCount = dumpDec< sal_uInt16 >( "choices" );
- out().resetItemIndex();
+ mxOut->resetItemIndex();
for( sal_uInt16 nIdx = 0; nIdx < nCount; ++nIdx )
dumpDec< sal_uInt16 >( "#skip" );
dumpDec< sal_uInt16 >( "skip-err" );
@@ -892,27 +890,25 @@ bool FormulaObject::dumpAttrToken()
void FormulaObject::dumpAddTokenData()
{
- Output& rOut = out();
- rOut.resetItemIndex();
- BinaryInputStream& rStrm = in();
- sal_Int32 nAddDataSize = (in().getLength() - in().tell() >= 4) ? dumpDec< sal_Int32 >( "add-data-size" ) : 0;
- sal_Int64 nEndPos = ::std::min< sal_Int64 >( rStrm.tell() + nAddDataSize, rStrm.getLength() );
- for( AddDataTypeVec::const_iterator aIt = maAddData.begin(), aEnd = maAddData.end(); (aIt != aEnd) && !rStrm.isEof() && (rStrm.tell() < nEndPos); ++aIt )
+ mxOut->resetItemIndex();
+ sal_Int32 nAddDataSize = (mxStrm->getLength() - mxStrm->tell() >= 4) ? dumpDec< sal_Int32 >( "add-data-size" ) : 0;
+ sal_Int64 nEndPos = ::std::min< sal_Int64 >( mxStrm->tell() + nAddDataSize, mxStrm->getLength() );
+ for( AddDataTypeVec::const_iterator aIt = maAddData.begin(), aEnd = maAddData.end(); (aIt != aEnd) && !mxStrm->isEof() && (mxStrm->tell() < nEndPos); ++aIt )
{
AddDataType eType = *aIt;
{
- ItemGuard aItem( rOut, "#add-data" );
+ ItemGuard aItem( mxOut, "#add-data" );
switch( eType )
{
- case ADDDATA_EXP: rOut.writeAscii( "tExp" ); break;
- case ADDDATA_ARRAY: rOut.writeAscii( "tArray" ); break;
- case ADDDATA_MEMAREA: rOut.writeAscii( "tMemArea" ); break;
+ case ADDDATA_EXP: mxOut->writeAscii( "tExp" ); break;
+ case ADDDATA_ARRAY: mxOut->writeAscii( "tArray" ); break;
+ case ADDDATA_MEMAREA: mxOut->writeAscii( "tMemArea" ); break;
}
}
size_t nIdx = aIt - maAddData.begin();
- IndentGuard aIndGuard( rOut );
+ IndentGuard aIndGuard( mxOut );
switch( eType )
{
case ADDDATA_EXP: dumpAddDataExp( nIdx ); break;
@@ -926,7 +922,7 @@ void FormulaObject::dumpAddTokenData()
void FormulaObject::dumpAddDataExp( size_t nIdx )
{
dumpColIndex( "base-col" );
- mxStack->replaceOnTop( createPlaceHolder( nIdx ), out().getLastItemValue() );
+ mxStack->replaceOnTop( createPlaceHolder( nIdx ), mxOut->getLastItemValue() );
}
void FormulaObject::dumpAddDataArray( size_t nIdx )
@@ -935,7 +931,7 @@ void FormulaObject::dumpAddDataArray( size_t nIdx )
dumpaddDataArrayHeader( nCols, nRows );
OUStringBuffer aOp;
- TableGuard aTabGuard( out(), 17 );
+ TableGuard aTabGuard( mxOut, 17 );
for( sal_Int32 nRow = 0; nRow < nRows; ++nRow )
{
OUStringBuffer aArrayLine;
@@ -954,28 +950,26 @@ void FormulaObject::dumpAddDataMemArea( size_t /*nIdx*/ )
void FormulaObject::dumpaddDataArrayHeader( sal_Int32& rnCols, sal_Int32& rnRows )
{
- Output& rOut = out();
- MultiItemsGuard aMultiGuard( rOut );
+ MultiItemsGuard aMultiGuard( mxOut );
rnRows = dumpDec< sal_Int32 >( "height" );
rnCols = dumpDec< sal_Int32 >( "width" );
- ItemGuard aItem( rOut, "size" );
- rOut.writeDec( rnCols );
- rOut.writeChar( 'x' );
- rOut.writeDec( rnRows );
+ ItemGuard aItem( mxOut, "size" );
+ mxOut->writeDec( rnCols );
+ mxOut->writeChar( 'x' );
+ mxOut->writeDec( rnRows );
aItem.cont();
- rOut.writeDec( rnCols * rnRows );
+ mxOut->writeDec( rnCols * rnRows );
}
OUString FormulaObject::dumpaddDataArrayValue()
{
- Output& rOut = out();
- MultiItemsGuard aMultiGuard( rOut );
+ MultiItemsGuard aMultiGuard( mxOut );
OUStringBuffer aValue;
switch( dumpDec< sal_uInt8 >( "type", "ARRAYVALUE-TYPE" ) )
{
case OOBIN_TOK_ARRAY_DOUBLE:
dumpDec< double >( "value" );
- aValue.append( rOut.getLastItemValue() );
+ aValue.append( mxOut->getLastItemValue() );
break;
case OOBIN_TOK_ARRAY_STRING:
aValue.append( dumpString( "value", false, false ) );
@@ -983,11 +977,11 @@ OUString FormulaObject::dumpaddDataArrayValue()
break;
case OOBIN_TOK_ARRAY_BOOL:
dumpBoolean( "value" );
- aValue.append( rOut.getLastItemValue() );
+ aValue.append( mxOut->getLastItemValue() );
break;
case OOBIN_TOK_ARRAY_ERROR:
dumpErrorCode( "value" );
- aValue.append( rOut.getLastItemValue() );
+ aValue.append( mxOut->getLastItemValue() );
dumpUnused( 3 );
break;
}
@@ -1150,11 +1144,11 @@ void RecordStreamObject::implDumpRecordBody()
dumpDec< sal_Int32 >( "formula2-size" );
dumpDec< sal_Int32 >( "formula3-size" );
dumpString( "text" );
- if( in().getLength() - in().tell() >= 8 )
+ if( mxStrm->getRemaining() >= 8 )
mxFmlaObj->dumpNameFormula( "formula1" );
- if( in().getLength() - in().tell() >= 8 )
+ if( mxStrm->getRemaining() >= 8 )
mxFmlaObj->dumpNameFormula( "formula2" );
- if( in().getLength() - in().tell() >= 8 )
+ if( mxStrm->getRemaining() >= 8 )
mxFmlaObj->dumpNameFormula( "formula3" );
}
break;
@@ -1272,10 +1266,10 @@ void RecordStreamObject::implDumpRecordBody()
dumpString( "name" );
mxFmlaObj->dumpNameFormula();
dumpString( "comment" );
- if( in().getLength() - in().tell() >= 4 ) dumpString( "menu-text" );
- if( in().getLength() - in().tell() >= 4 ) dumpString( "description-text" );
- if( in().getLength() - in().tell() >= 4 ) dumpString( "help-text" );
- if( in().getLength() - in().tell() >= 4 ) dumpString( "statusbar-text" );
+ if( mxStrm->getRemaining() >= 4 ) dumpString( "menu-text" );
+ if( mxStrm->getRemaining() >= 4 ) dumpString( "description-text" );
+ if( mxStrm->getRemaining() >= 4 ) dumpString( "help-text" );
+ if( mxStrm->getRemaining() >= 4 ) dumpString( "statusbar-text" );
break;
case OOBIN_ID_DIMENSION:
@@ -1288,16 +1282,16 @@ void RecordStreamObject::implDumpRecordBody()
case OOBIN_ID_DXF:
dumpHex< sal_uInt32 >( "flags", "DXF-FLAGS" );
- for( sal_uInt16 nIndex = 0, nCount = dumpDec< sal_uInt16 >( "subrec-count" ); !in().isEof() && (nIndex < nCount); ++nIndex )
+ for( sal_uInt16 nIndex = 0, nCount = dumpDec< sal_uInt16 >( "subrec-count" ); !mxStrm->isEof() && (nIndex < nCount); ++nIndex )
{
- out().startMultiItems();
- sal_Int64 nStartPos = in().tell();
+ mxOut->startMultiItems();
+ sal_Int64 nStartPos = mxStrm->tell();
writeEmptyItem( "SUBREC" );
sal_uInt16 nSubRecId = dumpDec< sal_uInt16 >( "id", "DXF-SUBREC" );
sal_uInt16 nSubRecSize = dumpDec< sal_uInt16 >( "size" );
sal_Int64 nEndPos = nStartPos + nSubRecSize;
- out().endMultiItems();
- IndentGuard aIndGuard( out() );
+ mxOut->endMultiItems();
+ IndentGuard aIndGuard( mxOut );
switch( nSubRecId )
{
case 0:
@@ -1438,11 +1432,11 @@ void RecordStreamObject::implDumpRecordBody()
case OOBIN_ID_EXTERNALSHEETS:
{
sal_Int32 nCount = dumpDec< sal_Int32 >( "ref-count" );
- TableGuard aTabGuard( out(), 13, 17, 24 );
- out().resetItemIndex();
- for( sal_Int32 nRefId = 0; !in().isEof() && (nRefId < nCount); ++nRefId )
+ TableGuard aTabGuard( mxOut, 13, 17, 24 );
+ mxOut->resetItemIndex();
+ for( sal_Int32 nRefId = 0; !mxStrm->isEof() && (nRefId < nCount); ++nRefId )
{
- MultiItemsGuard aMultiGuard( out() );
+ MultiItemsGuard aMultiGuard( mxOut );
writeEmptyItem( "#ref" );
dumpDec< sal_Int32 >( "extref-id" );
dumpDec< sal_Int32 >( "first-sheet", "EXTERNALSHEETS-ID" );
@@ -1461,8 +1455,8 @@ void RecordStreamObject::implDumpRecordBody()
break;
case OOBIN_ID_EXTSHEETNAMES:
- out().resetItemIndex();
- for( sal_Int32 nSheet = 0, nCount = dumpDec< sal_Int32 >( "sheet-count" ); !in().isEof() && (nSheet < nCount); ++nSheet )
+ mxOut->resetItemIndex();
+ for( sal_Int32 nSheet = 0, nCount = dumpDec< sal_Int32 >( "sheet-count" ); !mxStrm->isEof() && (nSheet < nCount); ++nSheet )
dumpString( "#sheet-name" );
break;
@@ -1477,11 +1471,11 @@ void RecordStreamObject::implDumpRecordBody()
dumpColor( "fg-color" );
dumpColor( "bg-color" );
dumpGradientHead();
- out().resetItemIndex();
- for( sal_Int32 nStop = 0, nStopCount = dumpDec< sal_Int32 >( "stop-count" ); (nStop < nStopCount) && !in().isEof(); ++nStop )
+ mxOut->resetItemIndex();
+ for( sal_Int32 nStop = 0, nStopCount = dumpDec< sal_Int32 >( "stop-count" ); (nStop < nStopCount) && !mxStrm->isEof(); ++nStop )
{
writeEmptyItem( "#stop" );
- IndentGuard aIndGuard( out() );
+ IndentGuard aIndGuard( mxOut );
dumpColor( "stop-color" );
dumpDec< double >( "stop-position" );
}
@@ -1739,7 +1733,7 @@ void RecordStreamObject::implDumpRecordBody()
{
sal_uInt16 nType = dumpDec< sal_uInt16 >( "type", "PCITEM_ARRAY-TYPE" );
sal_Int32 nCount = dumpDec< sal_Int32 >( "count" );
- out().resetItemIndex();
+ mxOut->resetItemIndex();
for( sal_Int32 nIdx = 0; nIdx < nCount; ++nIdx )
{
switch( nType )
@@ -1839,8 +1833,8 @@ void RecordStreamObject::implDumpRecordBody()
case OOBIN_ID_PTCOLFIELDS:
dumpDec< sal_Int32 >( "count" );
- out().resetItemIndex();
- while( in().getRemaining() >= 4 )
+ mxOut->resetItemIndex();
+ while( mxStrm->getRemaining() >= 4 )
dumpDec< sal_Int32 >( "#field", "PT-FIELDINDEX" );
break;
@@ -1948,8 +1942,8 @@ void RecordStreamObject::implDumpRecordBody()
case OOBIN_ID_PTROWFIELDS:
dumpDec< sal_Int32 >( "count" );
- out().resetItemIndex();
- while( in().getRemaining() >= 4 )
+ mxOut->resetItemIndex();
+ while( mxStrm->getRemaining() >= 4 )
dumpDec< sal_Int32 >( "#field", "PT-FIELDINDEX" );
break;
@@ -1959,8 +1953,8 @@ void RecordStreamObject::implDumpRecordBody()
dumpDec< sal_uInt16 >( "height", "CONV-TWIP-TO-PT" );
dumpHex< sal_uInt16 >( "flags", "ROW-FLAGS1" );
dumpHex< sal_uInt8 >( "flags", "ROW-FLAGS2" );
- out().resetItemIndex();
- for( sal_Int32 nSpan = 0, nSpanCount = dumpDec< sal_Int32 >( "row-spans-count" ); !in().isEof() && (nSpan < nSpanCount); ++nSpan )
+ mxOut->resetItemIndex();
+ for( sal_Int32 nSpan = 0, nSpanCount = dumpDec< sal_Int32 >( "row-spans-count" ); !mxStrm->isEof() && (nSpan < nSpanCount); ++nSpan )
dumpRowRange( "#row-spans" );
break;
@@ -2205,12 +2199,12 @@ void RootStorageObject::implDumpStream( const BinaryInputStreamRef& rxStrm, cons
{
if( rStrgPath.equalsAscii( "xl" ) && rStrmName.equalsAscii( "vbaProject.bin" ) )
{
- StorageRef xStrg( new OleStorage( getFactory(), xInStrm, false ) );
+ StorageRef xStrg( new ::oox::ole::OleStorage( getFactory(), xInStrm, false ) );
VbaProjectStorageObject( *this, xStrg, rSysFileName ).dump();
}
else if( rStrgPath.equalsAscii( "xl/embeddings" ) )
{
- StorageRef xStrg( new OleStorage( getFactory(), xInStrm, false ) );
+ StorageRef xStrg( new ::oox::ole::OleStorage( getFactory(), xInStrm, false ) );
OleStorageObject( *this, xStrg, rSysFileName ).dump();
}
else if(
@@ -2228,7 +2222,8 @@ void RootStorageObject::implDumpStream( const BinaryInputStreamRef& rxStrm, cons
}
else if( rStrgPath.equalsAscii( "xl/activeX" ) )
{
- OcxGuidControlObject( *this, rxStrm, rSysFileName ).dump();
+ StorageRef xStrg( new ::oox::ole::OleStorage( getFactory(), xInStrm, true ) );
+ ActiveXStorageObject( *this, xStrg, rSysFileName ).dump();
}
else
{
diff --git a/oox/source/helper/binaryinputstream.cxx b/oox/source/helper/binaryinputstream.cxx
index 5ba4a8b0b73b..a5a3cf9a2c30 100644
--- a/oox/source/helper/binaryinputstream.cxx
+++ b/oox/source/helper/binaryinputstream.cxx
@@ -30,6 +30,7 @@
#include <vector>
#include <rtl/strbuf.hxx>
#include <rtl/ustrbuf.hxx>
+#include "oox/helper/binaryoutputstream.hxx"
using ::rtl::OString;
using ::rtl::OStringBuffer;
@@ -102,6 +103,25 @@ OUString BinaryInputStream::readUnicodeArray( sal_Int32 nChars, bool bAllowNulCh
return aBuffer.makeStringAndClear();
}
+void BinaryInputStream::copyToStream( BinaryOutputStream& rOutStrm, sal_Int64 nBytes )
+{
+ if( nBytes > 0 )
+ {
+ sal_Int32 nBufferSize = getLimitedValue< sal_Int32, sal_Int64 >( nBytes, 0, INPUTSTREAM_BUFFERSIZE );
+ StreamDataSequence aBuffer( nBufferSize );
+ while( nBytes > 0 )
+ {
+ sal_Int32 nReadSize = getLimitedValue< sal_Int32, sal_Int64 >( nBytes, 0, nBufferSize );
+ sal_Int32 nBytesRead = readData( aBuffer, nReadSize );
+ rOutStrm.writeData( aBuffer );
+ if( nReadSize == nBytesRead )
+ nBytes -= nReadSize;
+ else
+ nBytes = 0;
+ }
+ }
+}
+
void BinaryInputStream::readAtom( void* opMem, sal_uInt8 nSize )
{
readMemory( opMem, nSize );
@@ -214,7 +234,7 @@ sal_Int32 SequenceInputStream::readMemory( void* opMem, sal_Int32 nBytes )
sal_Int32 nReadBytes = 0;
if( !mbEof )
{
- nReadBytes = ::std::min< sal_Int32 >( nBytes, mrData.getLength() - mnPos );
+ nReadBytes = getLimitedValue< sal_Int32, sal_Int32 >( nBytes, 0, mrData.getLength() - mnPos );
if( nReadBytes > 0 )
memcpy( opMem, mrData.getConstArray() + mnPos, static_cast< size_t >( nReadBytes ) );
mnPos += nReadBytes;
@@ -227,7 +247,7 @@ void SequenceInputStream::skip( sal_Int32 nBytes )
{
if( !mbEof )
{
- sal_Int32 nSkipBytes = ::std::min< sal_Int32 >( nBytes, mrData.getLength() - mnPos );
+ sal_Int32 nSkipBytes = getLimitedValue< sal_Int32, sal_Int32 >( nBytes, 0, mrData.getLength() - mnPos );
mnPos += nSkipBytes;
mbEof = nSkipBytes < nBytes;
}
@@ -235,5 +255,79 @@ void SequenceInputStream::skip( sal_Int32 nBytes )
// ============================================================================
+RelativeInputStream::RelativeInputStream( BinaryInputStream& rInStrm, sal_Int64 nLength ) :
+ mrInStrm( rInStrm ),
+ mnStartPos( rInStrm.tell() ),
+ mnRelPos( 0 )
+{
+ sal_Int64 nRemaining = rInStrm.getRemaining();
+ mnLength = (nRemaining >= 0) ? ::std::min( nLength, nRemaining ) : nLength;
+ mbEof = mnLength < 0;
+}
+
+bool RelativeInputStream::isSeekable() const
+{
+ return mrInStrm.isSeekable();
+}
+
+sal_Int64 RelativeInputStream::getLength() const
+{
+ return mnLength;
+}
+
+sal_Int64 RelativeInputStream::tell() const
+{
+ return mnRelPos;
+}
+
+void RelativeInputStream::seek( sal_Int64 nPos )
+{
+ if( mrInStrm.isSeekable() && (mnStartPos >= 0) )
+ {
+ mnRelPos = getLimitedValue< sal_Int64, sal_Int64 >( nPos, 0, mnLength );
+ mrInStrm.seek( mnStartPos + mnRelPos );
+ mbEof = (mnRelPos != nPos) || mrInStrm.isEof();
+ }
+}
+
+sal_Int32 RelativeInputStream::readData( StreamDataSequence& orData, sal_Int32 nBytes )
+{
+ sal_Int32 nReadBytes = 0;
+ if( !mbEof )
+ {
+ sal_Int32 nRealBytes = getLimitedValue< sal_Int32, sal_Int64 >( nBytes, 0, mnLength - mnRelPos );
+ nReadBytes = mrInStrm.readData( orData, nRealBytes );
+ mnRelPos += nReadBytes;
+ mbEof = (nRealBytes < nBytes) || mrInStrm.isEof();
+ }
+ return nReadBytes;
+}
+
+sal_Int32 RelativeInputStream::readMemory( void* opMem, sal_Int32 nBytes )
+{
+ sal_Int32 nReadBytes = 0;
+ if( !mbEof )
+ {
+ sal_Int32 nRealBytes = getLimitedValue< sal_Int32, sal_Int64 >( nBytes, 0, mnLength - mnRelPos );
+ nReadBytes = mrInStrm.readMemory( opMem, nRealBytes );
+ mnRelPos += nReadBytes;
+ mbEof = (nRealBytes < nBytes) || mrInStrm.isEof();
+ }
+ return nReadBytes;
+}
+
+void RelativeInputStream::skip( sal_Int32 nBytes )
+{
+ if( !mbEof )
+ {
+ sal_Int32 nSkipBytes = getLimitedValue< sal_Int32, sal_Int64 >( nBytes, 0, mnLength - mnRelPos );
+ mrInStrm.skip( nSkipBytes );
+ mnRelPos += nSkipBytes;
+ mbEof = nSkipBytes < nBytes;
+ }
+}
+
+// ============================================================================
+
} // namespace oox
diff --git a/oox/source/helper/binaryoutputstream.cxx b/oox/source/helper/binaryoutputstream.cxx
index be6bc6d67577..f39ac9d8f1b2 100644
--- a/oox/source/helper/binaryoutputstream.cxx
+++ b/oox/source/helper/binaryoutputstream.cxx
@@ -27,7 +27,6 @@
#include "oox/helper/binaryoutputstream.hxx"
#include <osl/diagnose.h>
-#include "oox/helper/binaryinputstream.hxx"
#include <string.h>
using ::com::sun::star::uno::UNO_QUERY;
@@ -42,25 +41,6 @@ const sal_Int32 OUTPUTSTREAM_BUFFERSIZE = 0x8000;
// ============================================================================
-void BinaryOutputStream::copyStream( BinaryInputStream& rInStrm, sal_Int64 nBytes )
-{
- if( nBytes > 0 )
- {
- sal_Int32 nBufferSize = getLimitedValue< sal_Int32, sal_Int64 >( nBytes, 0, OUTPUTSTREAM_BUFFERSIZE );
- StreamDataSequence aBuffer( nBufferSize );
- while( nBytes > 0 )
- {
- sal_Int32 nReadSize = getLimitedValue< sal_Int32, sal_Int64 >( nBytes, 0, nBufferSize );
- sal_Int32 nBytesRead = rInStrm.readData( aBuffer, nReadSize );
- writeData( aBuffer );
- if( nReadSize == nBytesRead )
- nBytes -= nReadSize;
- else
- nBytes = 0;
- }
- }
-}
-
void BinaryOutputStream::writeAtom( const void* pMem, sal_uInt8 nSize )
{
writeMemory( pMem, nSize );
diff --git a/oox/source/helper/binarystreambase.cxx b/oox/source/helper/binarystreambase.cxx
index be6b17d3aab9..a8f9320ffc94 100644
--- a/oox/source/helper/binarystreambase.cxx
+++ b/oox/source/helper/binarystreambase.cxx
@@ -61,7 +61,24 @@ void BinaryStreamBase::seek( sal_Int64 )
sal_Int64 BinaryStreamBase::getRemaining() const
{
- return isSeekable() ? ::std::max< sal_Int64 >( getLength() - tell(), 0 ) : -1;
+ // do not use isSeekable(), implementations may provide stream position and size even if not seekable
+ sal_Int64 nPos = tell();
+ sal_Int64 nLen = getLength();
+ return ((nPos >= 0) && (nLen >= 0)) ? ::std::max< sal_Int64 >( nLen - nPos, 0 ) : -1;
+}
+
+void BinaryStreamBase::alignToBlock( sal_Int32 nBlockSize, sal_Int64 nAnchorPos )
+{
+ sal_Int64 nStrmPos = tell();
+ // nothing to do, if stream is at anchor position
+ if( isSeekable() && (0 <= nAnchorPos) && (nAnchorPos != nStrmPos) && (nBlockSize > 1) )
+ {
+ // prevent modulo with negative arguments...
+ sal_Int64 nSkipSize = (nAnchorPos < nStrmPos) ?
+ (nBlockSize - ((nStrmPos - nAnchorPos - 1) % nBlockSize) - 1) :
+ ((nAnchorPos - nStrmPos) % nBlockSize);
+ seek( nStrmPos + nSkipSize );
+ }
}
// ============================================================================
@@ -135,7 +152,7 @@ sal_Int64 SequenceSeekableStream::tell() const
void SequenceSeekableStream::seek( sal_Int64 nPos )
{
mnPos = getLimitedValue< sal_Int32, sal_Int64 >( nPos, 0, mrData.getLength() );
- mbEof = mnPos < nPos;
+ mbEof = mnPos != nPos;
}
// ============================================================================
diff --git a/oox/source/helper/graphichelper.cxx b/oox/source/helper/graphichelper.cxx
index 3e54cd16c2bc..6b294f61abef 100644
--- a/oox/source/helper/graphichelper.cxx
+++ b/oox/source/helper/graphichelper.cxx
@@ -26,42 +26,248 @@
************************************************************************/
#include "oox/helper/graphichelper.hxx"
+#include <com/sun/star/awt/Point.hpp>
+#include <com/sun/star/awt/Size.hpp>
+#include <com/sun/star/awt/XDevice.hpp>
+#include <com/sun/star/awt/XUnitConversion.hpp>
+#include <com/sun/star/frame/XFramesSupplier.hpp>
#include <com/sun/star/graphic/GraphicObject.hpp>
#include <com/sun/star/graphic/XGraphicProvider.hpp>
+#include <com/sun/star/util/MeasureUnit.hpp>
#include <comphelper/componentcontext.hxx>
#include <comphelper/seqstream.hxx>
+#include "tokens.hxx"
+#include "oox/helper/containerhelper.hxx"
using ::rtl::OUString;
-using ::com::sun::star::uno::Exception;
-using ::com::sun::star::uno::Reference;
-using ::com::sun::star::uno::Sequence;
-using ::com::sun::star::uno::UNO_QUERY;
-using ::com::sun::star::uno::UNO_SET_THROW;
+using ::com::sun::star::awt::DeviceInfo;
+using ::com::sun::star::awt::Point;
+using ::com::sun::star::awt::Size;
+using ::com::sun::star::awt::XDevice;
+using ::com::sun::star::awt::XUnitConversion;
using ::com::sun::star::beans::PropertyValue;
-using ::com::sun::star::io::XInputStream;
-using ::com::sun::star::lang::XMultiServiceFactory;
+using ::com::sun::star::frame::XFrame;
+using ::com::sun::star::frame::XFramesSupplier;
using ::com::sun::star::graphic::GraphicObject;
using ::com::sun::star::graphic::XGraphic;
using ::com::sun::star::graphic::XGraphicObject;
using ::com::sun::star::graphic::XGraphicProvider;
+using ::com::sun::star::io::XInputStream;
+using ::com::sun::star::lang::XMultiServiceFactory;
+using ::com::sun::star::uno::Exception;
+using ::com::sun::star::uno::Reference;
+using ::com::sun::star::uno::Sequence;
+using ::com::sun::star::uno::UNO_QUERY;
+using ::com::sun::star::uno::UNO_QUERY_THROW;
+using ::com::sun::star::uno::UNO_SET_THROW;
namespace oox {
// ============================================================================
-GraphicHelper::GraphicHelper( const Reference< XMultiServiceFactory >& rxFactory ) :
- mxGraphicProvider( rxFactory->createInstance( CREATE_OUSTRING( "com.sun.star.graphic.GraphicProvider" ) ), UNO_QUERY ),
+namespace {
+
+inline sal_Int32 lclConvertScreenPixelToHmm( double fPixel, double fPixelPerHmm )
+{
+ return static_cast< sal_Int32 >( (fPixelPerHmm > 0.0) ? (fPixel / fPixelPerHmm + 0.5) : 0.0 );
+}
+
+} // namespace
+
+// ============================================================================
+
+GraphicHelper::GraphicHelper( const Reference< XMultiServiceFactory >& rxGlobalFactory, const Reference< XFrame >& rxTargetFrame ) :
+ mxGraphicProvider( rxGlobalFactory->createInstance( CREATE_OUSTRING( "com.sun.star.graphic.GraphicProvider" ) ), UNO_QUERY ),
maGraphicObjScheme( CREATE_OUSTRING( "vnd.sun.star.GraphicObject:" ) )
{
- ::comphelper::ComponentContext aContext( rxFactory );
+ ::comphelper::ComponentContext aContext( rxGlobalFactory );
mxCompContext = aContext.getUNOContext();
+
+ //! TODO: get colors from system
+ maSystemPalette[ XML_3dDkShadow ] = 0x716F64;
+ maSystemPalette[ XML_3dLight ] = 0xF1EFE2;
+ maSystemPalette[ XML_activeBorder ] = 0xD4D0C8;
+ maSystemPalette[ XML_activeCaption ] = 0x0054E3;
+ maSystemPalette[ XML_appWorkspace ] = 0x808080;
+ maSystemPalette[ XML_background ] = 0x004E98;
+ maSystemPalette[ XML_btnFace ] = 0xECE9D8;
+ maSystemPalette[ XML_btnHighlight ] = 0xFFFFFF;
+ maSystemPalette[ XML_btnShadow ] = 0xACA899;
+ maSystemPalette[ XML_btnText ] = 0x000000;
+ maSystemPalette[ XML_captionText ] = 0xFFFFFF;
+ maSystemPalette[ XML_gradientActiveCaption ] = 0x3D95FF;
+ maSystemPalette[ XML_gradientInactiveCaption ] = 0xD8E4F8;
+ maSystemPalette[ XML_grayText ] = 0xACA899;
+ maSystemPalette[ XML_highlight ] = 0x316AC5;
+ maSystemPalette[ XML_highlightText ] = 0xFFFFFF;
+ maSystemPalette[ XML_hotLight ] = 0x000080;
+ maSystemPalette[ XML_inactiveBorder ] = 0xD4D0C8;
+ maSystemPalette[ XML_inactiveCaption ] = 0x7A96DF;
+ maSystemPalette[ XML_inactiveCaptionText ] = 0xD8E4F8;
+ maSystemPalette[ XML_infoBk ] = 0xFFFFE1;
+ maSystemPalette[ XML_infoText ] = 0x000000;
+ maSystemPalette[ XML_menu ] = 0xFFFFFF;
+ maSystemPalette[ XML_menuBar ] = 0xECE9D8;
+ maSystemPalette[ XML_menuHighlight ] = 0x316AC5;
+ maSystemPalette[ XML_menuText ] = 0x000000;
+ maSystemPalette[ XML_scrollBar ] = 0xD4D0C8;
+ maSystemPalette[ XML_window ] = 0xFFFFFF;
+ maSystemPalette[ XML_windowFrame ] = 0x000000;
+ maSystemPalette[ XML_windowText ] = 0x000000;
+
+ // if no target frame has been passed (e.g. OLE objects), try to fallback to the active frame
+ // TODO: we need some mechanism to keep and pass the parent frame
+ Reference< XFrame > xFrame = rxTargetFrame;
+ if( !xFrame.is() && rxGlobalFactory.is() ) try
+ {
+ Reference< XFramesSupplier > xFramesSupp( rxGlobalFactory->createInstance( CREATE_OUSTRING( "com.sun.star.frame.Desktop" ) ), UNO_QUERY_THROW );
+ xFrame = xFramesSupp->getActiveFrame();
+ }
+ catch( Exception& )
+ {
+ }
+
+ // get the metric of the output device
+ OSL_ENSURE( xFrame.is(), "GraphicHelper::GraphicHelper - cannot get target frame" );
+ maDeviceInfo.PixelPerMeterX = maDeviceInfo.PixelPerMeterY = 3500.0; // some default just in case
+ if( xFrame.is() ) try
+ {
+ Reference< XDevice > xDevice( xFrame->getContainerWindow(), UNO_QUERY_THROW );
+ mxUnitConversion.set( xDevice, UNO_QUERY );
+ OSL_ENSURE( mxUnitConversion.is(), "GraphicHelper::GraphicHelper - cannot get unit converter" );
+ maDeviceInfo = xDevice->getInfo();
+ }
+ catch( Exception& )
+ {
+ OSL_ENSURE( false, "GraphicHelper::GraphicHelper - cannot get output device info" );
+ }
+ mfPixelPerHmmX = maDeviceInfo.PixelPerMeterX / 100000.0;
+ mfPixelPerHmmY = maDeviceInfo.PixelPerMeterY / 100000.0;
}
GraphicHelper::~GraphicHelper()
{
}
-Reference< XGraphic > GraphicHelper::importGraphic( const Reference< XInputStream >& rxInStrm )
+sal_Int32 GraphicHelper::getSystemColor( sal_Int32 nToken, sal_Int32 nDefaultRgb ) const
+{
+ return ContainerHelper::getMapElement( maSystemPalette, nToken, nDefaultRgb );
+}
+
+sal_Int32 GraphicHelper::getSchemeColor( sal_Int32 /*nToken*/ ) const
+{
+ OSL_ENSURE( false, "GraphicHelper::getSchemeColor - scheme colors not implemented" );
+ return API_RGB_TRANSPARENT;
+}
+
+sal_Int32 GraphicHelper::getPaletteColor( sal_Int32 /*nPaletteIdx*/ ) const
+{
+ OSL_ENSURE( false, "GraphicHelper::getPaletteColor - palette colors not implemented" );
+ return API_RGB_TRANSPARENT;
+}
+
+const DeviceInfo& GraphicHelper::getDeviceInfo() const
+{
+ return maDeviceInfo;
+}
+
+sal_Int32 GraphicHelper::convertScreenPixelXToHmm( double fPixelX ) const
+{
+ return lclConvertScreenPixelToHmm( fPixelX, mfPixelPerHmmX );
+}
+
+sal_Int32 GraphicHelper::convertScreenPixelYToHmm( double fPixelY ) const
+{
+ return lclConvertScreenPixelToHmm( fPixelY, mfPixelPerHmmY );
+}
+
+Point GraphicHelper::convertScreenPixelToHmm( const Point& rPixel ) const
+{
+ return Point( convertScreenPixelXToHmm( rPixel.X ), convertScreenPixelYToHmm( rPixel.Y ) );
+}
+
+Size GraphicHelper::convertScreenPixelToHmm( const Size& rPixel ) const
+{
+ return Size( convertScreenPixelXToHmm( rPixel.Width ), convertScreenPixelYToHmm( rPixel.Height ) );
+}
+
+double GraphicHelper::convertHmmToScreenPixelX( sal_Int32 nHmmX ) const
+{
+ return nHmmX * mfPixelPerHmmX;
+}
+
+double GraphicHelper::convertHmmToScreenPixelY( sal_Int32 nHmmY ) const
+{
+ return nHmmY * mfPixelPerHmmY;
+}
+
+Point GraphicHelper::convertHmmToScreenPixel( const Point& rHmm ) const
+{
+ return Point(
+ static_cast< sal_Int32 >( convertHmmToScreenPixelX( rHmm.X ) + 0.5 ),
+ static_cast< sal_Int32 >( convertHmmToScreenPixelY( rHmm.Y ) + 0.5 ) );
+}
+
+Size GraphicHelper::convertHmmToScreenPixel( const Size& rHmm ) const
+{
+ return Size(
+ static_cast< sal_Int32 >( convertHmmToScreenPixelX( rHmm.Width ) + 0.5 ),
+ static_cast< sal_Int32 >( convertHmmToScreenPixelY( rHmm.Height ) + 0.5 ) );
+}
+
+Point GraphicHelper::convertAppFontToHmm( const Point& rAppFont ) const
+{
+ if( mxUnitConversion.is() ) try
+ {
+ Point aPixel = mxUnitConversion->convertPointToPixel( rAppFont, ::com::sun::star::util::MeasureUnit::APPFONT );
+ return convertScreenPixelToHmm( aPixel );
+ }
+ catch( Exception& )
+ {
+ }
+ return Point( 0, 0 );
+}
+
+Size GraphicHelper::convertAppFontToHmm( const Size& rAppFont ) const
+{
+ if( mxUnitConversion.is() ) try
+ {
+ Size aPixel = mxUnitConversion->convertSizeToPixel( rAppFont, ::com::sun::star::util::MeasureUnit::APPFONT );
+ return convertScreenPixelToHmm( aPixel );
+ }
+ catch( Exception& )
+ {
+ }
+ return Size( 0, 0 );
+}
+
+Point GraphicHelper::convertHmmToAppFont( const Point& rHmm ) const
+{
+ if( mxUnitConversion.is() ) try
+ {
+ Point aPixel = convertHmmToScreenPixel( rHmm );
+ return mxUnitConversion->convertPointToLogic( aPixel, ::com::sun::star::util::MeasureUnit::APPFONT );
+ }
+ catch( Exception& )
+ {
+ }
+ return Point( 0, 0 );
+}
+
+Size GraphicHelper::convertHmmToAppFont( const Size& rHmm ) const
+{
+ if( mxUnitConversion.is() ) try
+ {
+ Size aPixel = convertHmmToScreenPixel( rHmm );
+ return mxUnitConversion->convertSizeToLogic( aPixel, ::com::sun::star::util::MeasureUnit::APPFONT );
+ }
+ catch( Exception& )
+ {
+ }
+ return Size( 0, 0 );
+}
+
+Reference< XGraphic > GraphicHelper::importGraphic( const Reference< XInputStream >& rxInStrm ) const
{
Reference< XGraphic > xGraphic;
if( rxInStrm.is() && mxGraphicProvider.is() ) try
@@ -77,7 +283,7 @@ Reference< XGraphic > GraphicHelper::importGraphic( const Reference< XInputStrea
return xGraphic;
}
-Reference< XGraphic > GraphicHelper::importGraphic( const StreamDataSequence& rGraphicData )
+Reference< XGraphic > GraphicHelper::importGraphic( const StreamDataSequence& rGraphicData ) const
{
Reference< XGraphic > xGraphic;
if( rGraphicData.hasElements() )
@@ -88,7 +294,7 @@ Reference< XGraphic > GraphicHelper::importGraphic( const StreamDataSequence& rG
return xGraphic;
}
-OUString GraphicHelper::createGraphicObject( const Reference< XGraphic >& rxGraphic )
+OUString GraphicHelper::createGraphicObject( const Reference< XGraphic >& rxGraphic ) const
{
OUString aGraphicObjUrl;
if( mxCompContext.is() && rxGraphic.is() ) try
@@ -104,12 +310,12 @@ OUString GraphicHelper::createGraphicObject( const Reference< XGraphic >& rxGrap
return aGraphicObjUrl;
}
-OUString GraphicHelper::importGraphicObject( const Reference< XInputStream >& rxInStrm )
+OUString GraphicHelper::importGraphicObject( const Reference< XInputStream >& rxInStrm ) const
{
return createGraphicObject( importGraphic( rxInStrm ) );
}
-OUString GraphicHelper::importGraphicObject( const StreamDataSequence& rGraphicData )
+OUString GraphicHelper::importGraphicObject( const StreamDataSequence& rGraphicData ) const
{
return createGraphicObject( importGraphic( rGraphicData ) );
}
diff --git a/oox/source/helper/makefile.mk b/oox/source/helper/makefile.mk
index 4a91a7a47764..3518db0c6d7c 100644
--- a/oox/source/helper/makefile.mk
+++ b/oox/source/helper/makefile.mk
@@ -48,12 +48,12 @@ SLOFILES = \
$(SLO)$/containerhelper.obj \
$(SLO)$/graphichelper.obj \
$(SLO)$/modelobjecthelper.obj \
- $(SLO)$/olestorage.obj \
$(SLO)$/progressbar.obj \
$(SLO)$/propertymap.obj \
$(SLO)$/propertyset.obj \
$(SLO)$/recordinputstream.obj \
$(SLO)$/storagebase.obj \
+ $(SLO)$/textinputstream.obj \
$(SLO)$/zipstorage.obj
# --- Targets -------------------------------------------------------
diff --git a/oox/source/helper/modelobjecthelper.cxx b/oox/source/helper/modelobjecthelper.cxx
index d1996991090a..6528fea5634d 100644
--- a/oox/source/helper/modelobjecthelper.cxx
+++ b/oox/source/helper/modelobjecthelper.cxx
@@ -44,11 +44,11 @@ namespace oox {
// ============================================================================
-ModelObjectHelper::ModelObjectHelper( const Reference< XMultiServiceFactory >& rxFactory ) :
- maMarkerContainer( rxFactory, CREATE_OUSTRING( "com.sun.star.drawing.MarkerTable" ) ),
- maDashContainer( rxFactory, CREATE_OUSTRING( "com.sun.star.drawing.DashTable" ) ),
- maGradientContainer( rxFactory, CREATE_OUSTRING( "com.sun.star.drawing.GradientTable" ) ),
- maBitmapContainer( rxFactory, CREATE_OUSTRING( "com.sun.star.drawing.BitmapTable" ) ),
+ModelObjectHelper::ModelObjectHelper( const Reference< XMultiServiceFactory >& rxModelFactory ) :
+ maMarkerContainer( rxModelFactory, CREATE_OUSTRING( "com.sun.star.drawing.MarkerTable" ) ),
+ maDashContainer( rxModelFactory, CREATE_OUSTRING( "com.sun.star.drawing.DashTable" ) ),
+ maGradientContainer( rxModelFactory, CREATE_OUSTRING( "com.sun.star.drawing.GradientTable" ) ),
+ maBitmapContainer( rxModelFactory, CREATE_OUSTRING( "com.sun.star.drawing.BitmapTable" ) ),
maDashNameBase( CREATE_OUSTRING( "msLineDash " ) ),
maGradientNameBase( CREATE_OUSTRING( "msFillGradient " ) ),
maBitmapNameBase( CREATE_OUSTRING( "msFillBitmap " ) )
diff --git a/oox/source/helper/olestorage.cxx b/oox/source/helper/olestorage.cxx
deleted file mode 100644
index fe660b27ff2b..000000000000
--- a/oox/source/helper/olestorage.cxx
+++ /dev/null
@@ -1,180 +0,0 @@
-/*************************************************************************
- *
- * 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/helper/olestorage.hxx"
-#include <com/sun/star/lang/XMultiServiceFactory.hpp>
-#include <com/sun/star/beans/PropertyValue.hpp>
-#include <com/sun/star/container/XNameContainer.hpp>
-#include <com/sun/star/io/XInputStream.hpp>
-#include <com/sun/star/io/XOutputStream.hpp>
-#include <com/sun/star/io/XStream.hpp>
-#include "oox/helper/helper.hxx"
-
-using ::rtl::OUString;
-using ::com::sun::star::uno::Any;
-using ::com::sun::star::uno::Reference;
-using ::com::sun::star::uno::Sequence;
-using ::com::sun::star::uno::Exception;
-using ::com::sun::star::uno::UNO_QUERY;
-using ::com::sun::star::uno::UNO_QUERY_THROW;
-using ::com::sun::star::container::XNameAccess;
-using ::com::sun::star::lang::XMultiServiceFactory;
-using ::com::sun::star::beans::PropertyValue;
-using ::com::sun::star::embed::XStorage;
-using ::com::sun::star::io::XInputStream;
-using ::com::sun::star::io::XOutputStream;
-using ::com::sun::star::io::XStream;
-
-namespace oox {
-
-// ============================================================================
-
-OleStorage::OleStorage(
- const Reference< XMultiServiceFactory >& rxFactory,
- const Reference< XInputStream >& rxInStream,
- bool bBaseStreamAccess ) :
- StorageBase( rxInStream, bBaseStreamAccess )
-{
- OSL_ENSURE( rxFactory.is(), "OleStorage::OleStorage - missing service factory" );
- // create base storage object
- Sequence< Any > aArgs( 2 );
- aArgs[ 0 ] <<= rxInStream;
- aArgs[ 1 ] <<= true; // true = do not create a copy of the input stream
- mxStorage.set( rxFactory->createInstanceWithArguments(
- CREATE_OUSTRING( "com.sun.star.embed.OLESimpleStorage" ), aArgs ), UNO_QUERY );
- mxElements.set( mxStorage, UNO_QUERY );
-}
-
-OleStorage::OleStorage(
- const Reference< XMultiServiceFactory >& rxFactory,
- const Reference< XStream >& rxStream,
- bool bBaseStreamAccess ) :
- StorageBase( rxStream, bBaseStreamAccess )
-{
- OSL_ENSURE( rxFactory.is(), "OleStorage::OleStorage - missing service factory" );
- (void)rxFactory; // prevent compiler warning
- OSL_ENSURE( false, "OleStorage::OleStorage - not implemented" );
- mxElements.set( mxStorage, UNO_QUERY );
-}
-
-OleStorage::OleStorage( const OleStorage& rParentStorage, const Reference< XNameAccess >& rxElementsAccess, const OUString& rElementName ) :
- StorageBase( rParentStorage, rElementName ),
- mxStorage( rParentStorage.mxStorage ),
- mxElements( rxElementsAccess )
-{
- OSL_ENSURE( mxElements.is(), "OleStorage::OleStorage - missing elements access" );
-}
-
-OleStorage::~OleStorage()
-{
-}
-
-// StorageBase interface ------------------------------------------------------
-
-bool OleStorage::implIsStorage() const
-{
- if( mxStorage.is() && mxElements.is() ) try
- {
- /* If this is not a storage, hasElements() throws an exception. But we
- do not return the result of hasElements(), because an empty storage
- is a valid storage too. */
- mxElements->hasElements();
- return true;
- }
- catch( Exception& )
- {
- }
- return false;
-}
-
-Reference< XStorage > OleStorage::implGetXStorage() const
-{
- OSL_ENSURE( false, "OleStorage::getXStorage - not implemented" );
- return Reference< XStorage >();
-}
-
-void OleStorage::implGetElementNames( ::std::vector< OUString >& orElementNames ) const
-{
- Sequence< OUString > aNames;
- if( mxElements.is() ) try
- {
- aNames = mxElements->getElementNames();
- if( aNames.getLength() > 0 )
- orElementNames.insert( orElementNames.end(), aNames.getConstArray(), aNames.getConstArray() + aNames.getLength() );
- }
- catch( Exception& )
- {
- }
-}
-
-StorageRef OleStorage::implOpenSubStorage( const OUString& rElementName, bool bCreate )
-{
- OSL_ENSURE( !bCreate, "OleStorage::implOpenSubStorage - creating substorages not implemented" );
- (void)bCreate; // prevent compiler warning
- StorageRef xSubStorage;
- if( mxElements.is() ) try
- {
- Reference< XNameAccess > xSubElements( mxElements->getByName( rElementName ), UNO_QUERY_THROW );
- xSubStorage.reset( new OleStorage( *this, xSubElements, rElementName ) );
- }
- catch( Exception& )
- {
- }
- return xSubStorage;
-}
-
-Reference< XInputStream > OleStorage::implOpenInputStream( const OUString& rElementName )
-{
- Reference< XInputStream > xInStream;
- if( mxElements.is() ) try
- {
- xInStream.set( mxElements->getByName( rElementName ), UNO_QUERY );
- }
- catch( Exception& )
- {
- }
- return xInStream;
-}
-
-Reference< XOutputStream > OleStorage::implOpenOutputStream( const OUString& rElementName )
-{
- Reference< XOutputStream > xOutStream;
- if( mxElements.is() && (rElementName.getLength() > 0) ) try
- {
- (void)rElementName; // prevent compiler warning
- OSL_ENSURE( false, "OleStorage::implOpenOutputStream - not implemented" );
- }
- catch( Exception& )
- {
- }
- return xOutStream;
-}
-
-// ============================================================================
-
-} // namespace oox
-
diff --git a/oox/source/helper/propertyset.cxx b/oox/source/helper/propertyset.cxx
index 5477224b9461..c52872e50f2f 100644
--- a/oox/source/helper/propertyset.cxx
+++ b/oox/source/helper/propertyset.cxx
@@ -57,6 +57,12 @@ bool PropertySet::getAnyProperty( Any& orValue, sal_Int32 nPropId ) const
return getAnyProperty( orValue, PropertyMap::getPropertyName( nPropId ) );
}
+Any PropertySet::getAnyProperty( sal_Int32 nPropId ) const
+{
+ Any aValue;
+ return getAnyProperty( aValue, nPropId ) ? aValue : Any();
+}
+
bool PropertySet::getBoolProperty( sal_Int32 nPropId ) const
{
Any aAny;
@@ -66,18 +72,17 @@ bool PropertySet::getBoolProperty( sal_Int32 nPropId ) const
void PropertySet::getProperties( Sequence< Any >& orValues, const Sequence< OUString >& rPropNames ) const
{
- if( mxMultiPropSet.is() ) // first try the XMultiPropertySet
+ if( mxMultiPropSet.is() ) try
{
- try
- {
- orValues = mxMultiPropSet->getPropertyValues( rPropNames );
- }
- catch( Exception& )
- {
- OSL_ENSURE( false, "PropertySet::getProperties - cannot get all property values" );
- }
+ orValues = mxMultiPropSet->getPropertyValues( rPropNames );
+ return;
}
- else if( mxPropSet.is() )
+ catch( Exception& )
+ {
+ OSL_ENSURE( false, "PropertySet::getProperties - cannot get all property values - fallback to single mode" );
+ }
+
+ if( mxPropSet.is() )
{
sal_Int32 nLen = rPropNames.getLength();
const OUString* pPropName = rPropNames.getConstArray();
@@ -101,18 +106,17 @@ void PropertySet::setProperties( const Sequence< OUString >& rPropNames, const S
OSL_ENSURE( rPropNames.getLength() == rValues.getLength(),
"PropertySet::setProperties - length of sequences different" );
- if( mxMultiPropSet.is() ) // first try the XMultiPropertySet
+ if( mxMultiPropSet.is() ) try
{
- try
- {
- mxMultiPropSet->setPropertyValues( rPropNames, rValues );
- }
- catch( Exception& )
- {
- OSL_ENSURE( false, "PropertySet::setProperties - cannot set all property values" );
- }
+ mxMultiPropSet->setPropertyValues( rPropNames, rValues );
+ return;
}
- else if( mxPropSet.is() )
+ catch( Exception& )
+ {
+ OSL_ENSURE( false, "PropertySet::setProperties - cannot set all property values, fallback to single mode" );
+ }
+
+ if( mxPropSet.is() )
{
const OUString* pPropName = rPropNames.getConstArray();
const OUString* pPropNameEnd = pPropName + rPropNames.getLength();
diff --git a/oox/source/helper/storagebase.cxx b/oox/source/helper/storagebase.cxx
index 6f174a74593c..4a05f66db81b 100644
--- a/oox/source/helper/storagebase.cxx
+++ b/oox/source/helper/storagebase.cxx
@@ -29,11 +29,14 @@
#include <com/sun/star/io/XStream.hpp>
#include <com/sun/star/embed/XTransactedObject.hpp>
#include <rtl/ustrbuf.hxx>
+#include "oox/helper/binaryinputstream.hxx"
+#include "oox/helper/binaryoutputstream.hxx"
using ::rtl::OUString;
using ::rtl::OUStringBuffer;
+using ::com::sun::star::uno::Exception;
using ::com::sun::star::uno::Reference;
-using ::com::sun::star::uno::UNO_QUERY;
+using ::com::sun::star::uno::UNO_SET_THROW;
using ::com::sun::star::embed::XStorage;
using ::com::sun::star::embed::XTransactedObject;
using ::com::sun::star::io::XInputStream;
@@ -66,24 +69,25 @@ void lclSplitFirstElement( OUString& orElement, OUString& orRemainder, const OUS
StorageBase::StorageBase( const Reference< XInputStream >& rxInStream, bool bBaseStreamAccess ) :
mxInStream( rxInStream ),
- mpParentStorage( 0 ),
- mbBaseStreamAccess( bBaseStreamAccess )
+ mbBaseStreamAccess( bBaseStreamAccess ),
+ mbReadOnly( true )
{
OSL_ENSURE( mxInStream.is(), "StorageBase::StorageBase - missing base input stream" );
}
StorageBase::StorageBase( const Reference< XStream >& rxOutStream, bool bBaseStreamAccess ) :
mxOutStream( rxOutStream ),
- mpParentStorage( 0 ),
- mbBaseStreamAccess( bBaseStreamAccess )
+ mbBaseStreamAccess( bBaseStreamAccess ),
+ mbReadOnly( false )
{
OSL_ENSURE( mxOutStream.is(), "StorageBase::StorageBase - missing base output stream" );
}
-StorageBase::StorageBase( const StorageBase& rParentStorage, const OUString& rStorageName ) :
+StorageBase::StorageBase( const StorageBase& rParentStorage, const OUString& rStorageName, bool bReadOnly ) :
+ maParentPath( rParentStorage.getPath() ),
maStorageName( rStorageName ),
- mpParentStorage( &rParentStorage ),
- mbBaseStreamAccess( false )
+ mbBaseStreamAccess( false ),
+ mbReadOnly( bReadOnly )
{
}
@@ -96,6 +100,16 @@ bool StorageBase::isStorage() const
return implIsStorage();
}
+bool StorageBase::isRootStorage() const
+{
+ return implIsStorage() && (maStorageName.getLength() == 0);
+}
+
+bool StorageBase::isReadOnly() const
+{
+ return mbReadOnly;
+}
+
Reference< XStorage > StorageBase::getXStorage() const
{
return implGetXStorage();
@@ -108,9 +122,7 @@ const OUString& StorageBase::getName() const
OUString StorageBase::getPath() const
{
- OUStringBuffer aBuffer;
- if( mpParentStorage )
- aBuffer.append( mpParentStorage->getPath() );
+ OUStringBuffer aBuffer( maParentPath );
if( aBuffer.getLength() > 0 )
aBuffer.append( sal_Unicode( '/' ) );
aBuffer.append( maStorageName );
@@ -123,15 +135,19 @@ void StorageBase::getElementNames( ::std::vector< OUString >& orElementNames ) c
implGetElementNames( orElementNames );
}
-StorageRef StorageBase::openSubStorage( const OUString& rStorageName, bool bCreate )
+StorageRef StorageBase::openSubStorage( const OUString& rStorageName, bool bCreateMissing )
{
StorageRef xSubStorage;
- OUString aElement, aRemainder;
- lclSplitFirstElement( aElement, aRemainder, rStorageName );
- if( aElement.getLength() > 0 )
- xSubStorage = getSubStorage( aElement, bCreate );
- if( xSubStorage.get() && (aRemainder.getLength() > 0) )
- xSubStorage = xSubStorage->openSubStorage( aRemainder, bCreate );
+ OSL_ENSURE( !bCreateMissing || !mbReadOnly, "StorageBase::openSubStorage - cannot create substorage in read-only mode" );
+ if( !bCreateMissing || !mbReadOnly )
+ {
+ OUString aElement, aRemainder;
+ lclSplitFirstElement( aElement, aRemainder, rStorageName );
+ if( aElement.getLength() > 0 )
+ xSubStorage = getSubStorage( aElement, bCreateMissing );
+ if( xSubStorage.get() && (aRemainder.getLength() > 0) )
+ xSubStorage = xSubStorage->openSubStorage( aRemainder, bCreateMissing );
+ }
return xSubStorage;
}
@@ -163,47 +179,96 @@ Reference< XInputStream > StorageBase::openInputStream( const OUString& rStreamN
Reference< XOutputStream > StorageBase::openOutputStream( const OUString& rStreamName )
{
Reference< XOutputStream > xOutStream;
- OUString aElement, aRemainder;
- lclSplitFirstElement( aElement, aRemainder, rStreamName );
- if( aElement.getLength() > 0 )
+ OSL_ENSURE( !mbReadOnly, "StorageBase::openOutputStream - cannot create output stream in read-only mode" );
+ if( !mbReadOnly )
{
- if( aRemainder.getLength() > 0 )
+ OUString aElement, aRemainder;
+ lclSplitFirstElement( aElement, aRemainder, rStreamName );
+ if( aElement.getLength() > 0 )
{
- StorageRef xSubStorage = getSubStorage( aElement, true );
- if( xSubStorage.get() )
- xOutStream = xSubStorage->openOutputStream( aRemainder );
+ if( aRemainder.getLength() > 0 )
+ {
+ StorageRef xSubStorage = getSubStorage( aElement, true );
+ if( xSubStorage.get() )
+ xOutStream = xSubStorage->openOutputStream( aRemainder );
+ }
+ else
+ {
+ xOutStream = implOpenOutputStream( aElement );
+ }
}
- else
+ else if( mbBaseStreamAccess )
{
- xOutStream = implOpenOutputStream( aElement );
+ xOutStream = mxOutStream->getOutputStream();
}
}
- else if( mbBaseStreamAccess )
+ return xOutStream;
+}
+
+void StorageBase::copyToStorage( StorageBase& rDestStrg, const OUString& rElementName )
+{
+ OSL_ENSURE( rDestStrg.isStorage() && !rDestStrg.isReadOnly(), "StorageBase::copyToStorage - invalid destination" );
+ OSL_ENSURE( rElementName.getLength() > 0, "StorageBase::copyToStorage - invalid element name" );
+ if( rDestStrg.isStorage() && !rDestStrg.isReadOnly() && (rElementName.getLength() > 0) )
{
- xOutStream = mxOutStream->getOutputStream();
+ StorageRef xSubStrg = openSubStorage( rElementName, false );
+ if( xSubStrg.get() )
+ {
+ StorageRef xDestSubStrg = rDestStrg.openSubStorage( rElementName, true );
+ if( xDestSubStrg.get() )
+ xSubStrg->copyStorageToStorage( *xDestSubStrg );
+ }
+ else
+ {
+ Reference< XInputStream > xInStrm = openInputStream( rElementName );
+ if( xInStrm.is() )
+ {
+ Reference< XOutputStream > xOutStrm = rDestStrg.openOutputStream( rElementName );
+ if( xOutStrm.is() )
+ {
+ BinaryXInputStream aInStrm( xInStrm, true );
+ BinaryXOutputStream aOutStrm( xOutStrm, true );
+ aInStrm.copyToStream( aOutStrm );
+ }
+ }
+ }
}
- return xOutStream;
}
-StorageRef StorageBase::getSubStorage( const OUString& rElementName, bool bCreate )
+void StorageBase::copyStorageToStorage( StorageBase& rDestStrg )
{
- SubStorageMap::iterator aIt = maSubStorages.find( rElementName );
- return (aIt == maSubStorages.end()) ?
- (maSubStorages[ rElementName ] = implOpenSubStorage( rElementName, bCreate )) : aIt->second;
+ OSL_ENSURE( rDestStrg.isStorage() && !rDestStrg.isReadOnly(), "StorageBase::copyToStorage - invalid destination" );
+ if( rDestStrg.isStorage() && !rDestStrg.isReadOnly() )
+ {
+ ::std::vector< OUString > aElements;
+ getElementNames( aElements );
+ for( ::std::vector< OUString >::iterator aIt = aElements.begin(), aEnd = aElements.end(); aIt != aEnd; ++aIt )
+ copyToStorage( rDestStrg, *aIt );
+ }
}
void StorageBase::commit()
{
- for( SubStorageMap::iterator aIt = maSubStorages.begin(); aIt != maSubStorages.end(); aIt ++ )
- aIt->second->commit();
+ OSL_ENSURE( !mbReadOnly, "StorageBase::commit - cannot commit in read-only mode" );
+ if( !mbReadOnly )
+ {
+ // commit all open substorages
+ maSubStorages.forEachMem( &StorageBase::commit );
+ // commit this storage
+ implCommit();
+ }
+}
- Reference< XTransactedObject > xTransactedObj( getXStorage(), UNO_QUERY );
+// private --------------------------------------------------------------------
- if( xTransactedObj.is() )
- xTransactedObj->commit();
+StorageRef StorageBase::getSubStorage( const OUString& rElementName, bool bCreateMissing )
+{
+ StorageRef& rxSubStrg = maSubStorages[ rElementName ];
+ if( !rxSubStrg )
+ rxSubStrg = implOpenSubStorage( rElementName, bCreateMissing );
+ return rxSubStrg;
}
// ============================================================================
} // namespace oox
-
diff --git a/oox/source/helper/textinputstream.cxx b/oox/source/helper/textinputstream.cxx
new file mode 100755
index 000000000000..d6d4736f3ca2
--- /dev/null
+++ b/oox/source/helper/textinputstream.cxx
@@ -0,0 +1,128 @@
+/*************************************************************************
+ *
+ * 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/helper/textinputstream.hxx"
+#include <rtl/strbuf.hxx>
+#include <rtl/ustrbuf.hxx>
+#include "oox/helper/binaryinputstream.hxx"
+
+using ::rtl::OStringBuffer;
+using ::rtl::OStringToOUString;
+using ::rtl::OUString;
+using ::rtl::OUStringBuffer;
+
+namespace oox {
+
+// ============================================================================
+
+namespace {
+
+/** Reads a text line from stream. First, tries to skip the second character of
+ a two-character line end sequence. Returns the new line-end character. */
+template< typename BufferType, typename CharType, typename StreamDataType >
+sal_Unicode lclReadLine( BufferType& orBuffer, BinaryInputStream& rInStrm, sal_Unicode cLastEolChar )
+{
+ // try to skip LF following CR, or CR following LF
+ if( !rInStrm.isEof() && (cLastEolChar != 0) )
+ {
+ CharType cChar = static_cast< CharType >( rInStrm.readValue< StreamDataType >() );
+ // return on EOF after line-end
+ if( rInStrm.isEof() )
+ return 0;
+ // return on sequence of equal line-end characters
+ bool bIsEolChar = (cChar == 10) || (cChar == 13);
+ if( bIsEolChar && (cChar == cLastEolChar) )
+ return cChar;
+ // append the character, if it is not the other line-end charcter
+ if( !bIsEolChar )
+ orBuffer.append( cChar );
+ }
+
+ // read chars until EOF or line end character (LF or CR)
+ while( true )
+ {
+ CharType cChar = static_cast< CharType >( rInStrm.readValue< StreamDataType >() );
+ if( rInStrm.isEof() )
+ return 0;
+ if( (cChar == 10) || (cChar == 13) )
+ return cChar;
+ orBuffer.append( cChar );
+ }
+}
+
+} // namespace
+
+// ============================================================================
+
+TextInputStream::TextInputStream( BinaryInputStream& rInStrm, rtl_TextEncoding eTextEnc ) :
+ mrInStrm( rInStrm ),
+ meTextEnc( eTextEnc ),
+ mcLastEolChar( 0 )
+{
+}
+
+bool TextInputStream::isEof() const
+{
+ // do not return EOF, if last text line missed line-end character (see below)
+ return mrInStrm.isEof() && (mcLastEolChar == 0);
+}
+
+OUString TextInputStream::readLine()
+{
+ if( mrInStrm.isEof() )
+ {
+ mcLastEolChar = 0;
+ return OUString();
+ }
+
+ OUString aLine;
+ if( meTextEnc == RTL_TEXTENCODING_UCS2 )
+ {
+ // read 16-bit characters for UCS2 encoding
+ OUStringBuffer aBuffer;
+ mcLastEolChar = lclReadLine< OUStringBuffer, sal_Unicode, sal_uInt16 >( aBuffer, mrInStrm, mcLastEolChar );
+ aLine = aBuffer.makeStringAndClear();
+ }
+ else
+ {
+ // otherwise, read 8-bit characters and convert according to text encoding
+ OStringBuffer aBuffer;
+ mcLastEolChar = lclReadLine< OStringBuffer, sal_Char, sal_uInt8 >( aBuffer, mrInStrm, mcLastEolChar );
+ aLine = OStringToOUString( aBuffer.makeStringAndClear(), meTextEnc );
+ }
+
+ // if last line is not empty but line-end character is missing, do not return EOF
+ if( mrInStrm.isEof() && (aLine.getLength() > 0) )
+ mcLastEolChar = 10;
+
+ return aLine;
+}
+
+// ============================================================================
+
+} // namespace oox
+
diff --git a/oox/source/helper/zipstorage.cxx b/oox/source/helper/zipstorage.cxx
index c90b2071b133..72b6fcd1bff0 100644
--- a/oox/source/helper/zipstorage.cxx
+++ b/oox/source/helper/zipstorage.cxx
@@ -26,26 +26,29 @@
************************************************************************/
#include "oox/helper/zipstorage.hxx"
-#include <com/sun/star/container/XHierarchicalNameAccess.hpp>
-#include <com/sun/star/lang/XMultiServiceFactory.hpp>
-#include <com/sun/star/embed/XStorage.hpp>
#include <com/sun/star/embed/ElementModes.hpp>
+#include <com/sun/star/embed/XStorage.hpp>
+#include <com/sun/star/embed/XTransactedObject.hpp>
#include <com/sun/star/io/XInputStream.hpp>
#include <com/sun/star/io/XOutputStream.hpp>
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
#include <comphelper/storagehelper.hxx>
#include "oox/helper/helper.hxx"
using ::rtl::OUString;
-using ::com::sun::star::uno::Any;
-using ::com::sun::star::uno::Reference;
-using ::com::sun::star::uno::Sequence;
-using ::com::sun::star::uno::Exception;
-using ::com::sun::star::uno::UNO_QUERY;
-using ::com::sun::star::lang::XMultiServiceFactory;
+using ::com::sun::star::container::NoSuchElementException;
using ::com::sun::star::embed::XStorage;
+using ::com::sun::star::embed::XTransactedObject;
using ::com::sun::star::io::XInputStream;
using ::com::sun::star::io::XOutputStream;
using ::com::sun::star::io::XStream;
+using ::com::sun::star::lang::XMultiServiceFactory;
+using ::com::sun::star::uno::Any;
+using ::com::sun::star::uno::Exception;
+using ::com::sun::star::uno::Reference;
+using ::com::sun::star::uno::Sequence;
+using ::com::sun::star::uno::UNO_QUERY;
+using ::com::sun::star::uno::UNO_QUERY_THROW;
namespace oox {
@@ -93,7 +96,7 @@ ZipStorage::ZipStorage(
}
ZipStorage::ZipStorage( const ZipStorage& rParentStorage, const Reference< XStorage >& rxStorage, const OUString& rElementName ) :
- StorageBase( rParentStorage, rElementName ),
+ StorageBase( rParentStorage, rElementName, rParentStorage.isReadOnly() ),
mxStorage( rxStorage )
{
OSL_ENSURE( mxStorage.is(), "ZipStorage::ZipStorage - missing storage" );
@@ -127,7 +130,7 @@ void ZipStorage::implGetElementNames( ::std::vector< OUString >& orElementNames
}
}
-StorageRef ZipStorage::implOpenSubStorage( const OUString& rElementName, bool bCreate )
+StorageRef ZipStorage::implOpenSubStorage( const OUString& rElementName, bool bCreateMissing )
{
Reference< XStorage > xSubXStorage;
bool bMissing = false;
@@ -138,7 +141,7 @@ StorageRef ZipStorage::implOpenSubStorage( const OUString& rElementName, bool bC
xSubXStorage = mxStorage->openStorageElement(
rElementName, ::com::sun::star::embed::ElementModes::READ );
}
- catch( ::com::sun::star::container::NoSuchElementException& )
+ catch( NoSuchElementException& )
{
bMissing = true;
}
@@ -146,15 +149,14 @@ StorageRef ZipStorage::implOpenSubStorage( const OUString& rElementName, bool bC
{
}
- if( bMissing && bCreate )
- try
- {
- xSubXStorage = mxStorage->openStorageElement(
- rElementName, ::com::sun::star::embed::ElementModes::READWRITE );
- }
- catch( Exception& )
- {
- }
+ if( bMissing && bCreateMissing ) try
+ {
+ xSubXStorage = mxStorage->openStorageElement(
+ rElementName, ::com::sun::star::embed::ElementModes::READWRITE );
+ }
+ catch( Exception& )
+ {
+ }
StorageRef xSubStorage;
if( xSubXStorage.is() )
@@ -188,7 +190,17 @@ Reference< XOutputStream > ZipStorage::implOpenOutputStream( const OUString& rEl
return xOutStream;
}
+void ZipStorage::implCommit() const
+{
+ try
+ {
+ Reference< XTransactedObject >( mxStorage, UNO_QUERY_THROW )->commit();
+ }
+ catch( Exception& )
+ {
+ }
+}
+
// ============================================================================
} // namespace oox
-
diff --git a/oox/source/ole/axbinaryreader.cxx b/oox/source/ole/axbinaryreader.cxx
index f49776ef70e5..cb7e292b8cf4 100644..100755
--- a/oox/source/ole/axbinaryreader.cxx
+++ b/oox/source/ole/axbinaryreader.cxx
@@ -89,13 +89,80 @@ void AxAlignedInputStream::align( size_t nSize )
// ============================================================================
+AxFontData::AxFontData() :
+ mnFontEffects( 0 ),
+ mnFontHeight( 160 ),
+ mnFontCharSet( WINDOWS_CHARSET_DEFAULT ),
+ mnHorAlign( AX_FONTDATA_LEFT )
+{
+}
+
+sal_Int16 AxFontData::getHeightPoints() const
+{
+ /* MSO uses weird font sizes:
+ 1pt->30, 2pt->45, 3pt->60, 4pt->75, 5pt->105, 6pt->120, 7pt->135,
+ 8pt->165, 9pt->180, 10pt->195, 11pt->225, ... */
+ return getLimitedValue< sal_Int16, sal_Int32 >( (mnFontHeight + 10) / 20, 1, SAL_MAX_INT16 );
+}
+
+void AxFontData::setHeightPoints( sal_Int16 nPoints )
+{
+ mnFontHeight = getLimitedValue< sal_Int32, sal_Int32 >( ((nPoints * 4 + 1) / 3) * 15, 30, 4294967 );
+}
+
+bool AxFontData::importBinaryModel( BinaryInputStream& rInStrm )
+{
+ AxBinaryPropertyReader aReader( rInStrm );
+ aReader.readStringProperty( maFontName );
+ aReader.readIntProperty< sal_uInt32 >( mnFontEffects );
+ aReader.readIntProperty< sal_Int32 >( mnFontHeight );
+ aReader.skipIntProperty< sal_Int32 >(); // font offset
+ aReader.readIntProperty< sal_uInt8 >( mnFontCharSet );
+ aReader.skipIntProperty< sal_uInt8 >(); // font pitch/family
+ aReader.readIntProperty< sal_uInt8 >( mnHorAlign );
+ aReader.skipIntProperty< sal_uInt16 >(); // font weight
+ return aReader.finalizeImport();
+}
+
+bool AxFontData::importStdFont( BinaryInputStream& rInStrm )
+{
+ StdFontInfo aFontInfo;
+ if( OleHelper::importStdFont( aFontInfo, rInStrm, false ) )
+ {
+ maFontName = aFontInfo.maName;
+ mnFontEffects = 0;
+ setFlag( mnFontEffects, AX_FONTDATA_BOLD, aFontInfo.mnWeight >= OLE_STDFONT_BOLD );
+ setFlag( mnFontEffects, AX_FONTDATA_ITALIC, getFlag( aFontInfo.mnFlags, OLE_STDFONT_ITALIC ) );
+ setFlag( mnFontEffects, AX_FONTDATA_UNDERLINE, getFlag( aFontInfo.mnFlags, OLE_STDFONT_UNDERLINE ) );
+ setFlag( mnFontEffects, AX_FONTDATA_STRIKEOUT, getFlag( aFontInfo.mnFlags,OLE_STDFONT_STRIKE ) );
+ // StdFont stores font height in 1/10,000 of points
+ setHeightPoints( getLimitedValue< sal_Int16, sal_Int32 >( aFontInfo.mnHeight / 10000, 0, SAL_MAX_INT16 ) );
+ mnFontCharSet = aFontInfo.mnCharSet;
+ mnHorAlign = AX_FONTDATA_LEFT;
+ return true;
+ }
+ return false;
+}
+
+bool AxFontData::importGuidAndFont( BinaryInputStream& rInStrm )
+{
+ OUString aGuid = OleHelper::importGuid( rInStrm );
+ if( aGuid.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "{AFC20920-DA4E-11CE-B943-00AA006887B4}" ) ) )
+ return importBinaryModel( rInStrm );
+ if( aGuid.equalsAscii( OLE_GUID_STDFONT ) )
+ return importStdFont( rInStrm );
+ return false;
+}
+
+// ============================================================================
+
AxBinaryPropertyReader::ComplexProperty::~ComplexProperty()
{
}
bool AxBinaryPropertyReader::PairProperty::readProperty( AxAlignedInputStream& rInStrm )
{
- rInStrm >> mrnValue1 >> mrnValue2;
+ rInStrm >> mrPairData.first >> mrPairData.second;
return true;
}
@@ -116,6 +183,17 @@ bool AxBinaryPropertyReader::StringProperty::readProperty( AxAlignedInputStream&
return bValidChars;
}
+bool AxBinaryPropertyReader::GuidProperty::readProperty( AxAlignedInputStream& rInStrm )
+{
+ mrGuid = OleHelper::importGuid( rInStrm );
+ return true;
+}
+
+bool AxBinaryPropertyReader::FontProperty::readProperty( AxAlignedInputStream& rInStrm )
+{
+ return mrFontData.importGuidAndFont( rInStrm );
+}
+
bool AxBinaryPropertyReader::PictureProperty::readProperty( AxAlignedInputStream& rInStrm )
{
return OleHelper::importStdPic( mrPicData, rInStrm, true );
@@ -145,10 +223,10 @@ void AxBinaryPropertyReader::readBoolProperty( bool& orbValue, bool bReverse )
orbValue = startNextProperty() != bReverse;
}
-void AxBinaryPropertyReader::readPairProperty( sal_Int32& ornValue1, sal_Int32& ornValue2 )
+void AxBinaryPropertyReader::readPairProperty( AxPairData& orPairData )
{
if( startNextProperty() )
- maLargeProps.push_back( ComplexPropVector::value_type( new PairProperty( ornValue1, ornValue2 ) ) );
+ maLargeProps.push_back( ComplexPropVector::value_type( new PairProperty( orPairData ) ) );
}
void AxBinaryPropertyReader::readStringProperty( OUString& orValue )
@@ -160,6 +238,22 @@ void AxBinaryPropertyReader::readStringProperty( OUString& orValue )
}
}
+void AxBinaryPropertyReader::readGuidProperty( ::rtl::OUString& orGuid )
+{
+ if( startNextProperty() )
+ maLargeProps.push_back( ComplexPropVector::value_type( new GuidProperty( orGuid ) ) );
+}
+
+void AxBinaryPropertyReader::readFontProperty( AxFontData& orFontData )
+{
+ if( startNextProperty() )
+ {
+ sal_Int16 nData = maInStrm.readAligned< sal_Int16 >();
+ if( ensureValid( nData == -1 ) )
+ maStreamProps.push_back( ComplexPropVector::value_type( new FontProperty( orFontData ) ) );
+ }
+}
+
void AxBinaryPropertyReader::readPictureProperty( StreamDataSequence& orPicData )
{
if( startNextProperty() )
diff --git a/oox/source/ole/axcontrol.cxx b/oox/source/ole/axcontrol.cxx
index 96baaab4bb36..95d5c7dc67b7 100644
--- a/oox/source/ole/axcontrol.cxx
+++ b/oox/source/ole/axcontrol.cxx
@@ -27,20 +27,24 @@
#include "oox/ole/axcontrol.hxx"
#include <rtl/tencinfo.h>
-#include <com/sun/star/lang/XMultiServiceFactory.hpp>
-#include <com/sun/star/container/XIndexContainer.hpp>
#include <com/sun/star/awt/FontSlant.hpp>
#include <com/sun/star/awt/FontStrikeout.hpp>
#include <com/sun/star/awt/FontUnderline.hpp>
#include <com/sun/star/awt/FontWeight.hpp>
#include <com/sun/star/awt/ImagePosition.hpp>
#include <com/sun/star/awt/ImageScaleMode.hpp>
+#include <com/sun/star/awt/Point.hpp>
#include <com/sun/star/awt/ScrollBarOrientation.hpp>
+#include <com/sun/star/awt/Size.hpp>
#include <com/sun/star/awt/TextAlign.hpp>
#include <com/sun/star/awt/VisualEffect.hpp>
#include <com/sun/star/awt/XControlModel.hpp>
-#include <com/sun/star/style/VerticalAlignment.hpp>
+#include <com/sun/star/container/XIndexContainer.hpp>
+#include <com/sun/star/form/XForm.hpp>
#include <com/sun/star/form/XFormComponent.hpp>
+#include <com/sun/star/form/XFormsSupplier.hpp>
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include <com/sun/star/style/VerticalAlignment.hpp>
#include "properties.hxx"
#include "tokens.hxx"
#include "oox/helper/attributelist.hxx"
@@ -48,20 +52,23 @@
#include "oox/helper/graphichelper.hxx"
#include "oox/helper/propertymap.hxx"
#include "oox/helper/propertyset.hxx"
-#include "oox/core/filterbase.hxx"
-#include "oox/ole/axbinaryreader.hxx"
-#include "oox/ole/axcontrolhelper.hxx"
-#include "oox/ole/olehelper.hxx"
using ::rtl::OUString;
+using ::com::sun::star::awt::Point;
+using ::com::sun::star::awt::Size;
+using ::com::sun::star::awt::XControlModel;
+using ::com::sun::star::container::XIndexContainer;
+using ::com::sun::star::container::XNameContainer;
+using ::com::sun::star::drawing::XDrawPage;
+using ::com::sun::star::form::XForm;
+using ::com::sun::star::form::XFormComponent;
+using ::com::sun::star::lang::XMultiServiceFactory;
using ::com::sun::star::uno::Any;
using ::com::sun::star::uno::Exception;
using ::com::sun::star::uno::Reference;
+using ::com::sun::star::uno::UNO_QUERY;
using ::com::sun::star::uno::UNO_QUERY_THROW;
-using ::com::sun::star::container::XIndexContainer;
-using ::com::sun::star::awt::XControlModel;
-using ::com::sun::star::form::XFormComponent;
-using ::oox::core::FilterBase;
+using ::com::sun::star::uno::UNO_SET_THROW;
namespace oox {
namespace ole {
@@ -70,6 +77,29 @@ namespace ole {
namespace {
+const sal_uInt32 COMCTL_ID_SIZE = 0x12344321;
+
+const sal_uInt32 COMCTL_ID_COMMONDATA = 0xABCDEF01;
+const sal_uInt32 COMCTL_COMMON_FLATBORDER = 0x00000001;
+const sal_uInt32 COMCTL_COMMON_ENABLED = 0x00000002;
+const sal_uInt32 COMCTL_COMMON_3DBORDER = 0x00000004;
+const sal_uInt32 COMCTL_COMMON_OLEDROPMAN = 0x00002000;
+
+const sal_uInt32 COMCTL_ID_COMPLEXDATA = 0xBDECDE1F;
+const sal_uInt32 COMCTL_COMPLEX_FONT = 0x00000001;
+const sal_uInt32 COMCTL_COMPLEX_MOUSEICON = 0x00000002;
+
+const sal_uInt32 COMCTL_ID_SCROLLBAR_60 = 0x99470A83;
+const sal_uInt32 COMCTL_SCROLLBAR_HOR = 0x00000010;
+const sal_Int32 COMCTL_SCROLLBAR_3D = 0;
+const sal_Int32 COMCTL_SCROLLBAR_FLAT = 1;
+const sal_Int32 COMCTL_SCROLLBAR_TRACK3D = 2;
+
+const sal_uInt32 COMCTL_ID_PROGRESSBAR_50 = 0xE6E17E84;
+const sal_uInt32 COMCTL_ID_PROGRESSBAR_60 = 0x97AB8A01;
+
+// ----------------------------------------------------------------------------
+
const sal_uInt32 AX_FLAGS_ENABLED = 0x00000002;
const sal_uInt32 AX_FLAGS_LOCKED = 0x00000004;
const sal_uInt32 AX_FLAGS_OPAQUE = 0x00000008;
@@ -99,26 +129,6 @@ const sal_uInt32 AX_MORPHDATA_DEFFLAGS = 0x2C80081B;
const sal_uInt32 AX_SPINBUTTON_DEFFLAGS = 0x0000001B;
const sal_uInt32 AX_SCROLLBAR_DEFFLAGS = 0x0000001B;
-const sal_uInt32 AX_FONT_BOLD = 0x00000001;
-const sal_uInt32 AX_FONT_ITALIC = 0x00000002;
-const sal_uInt32 AX_FONT_UNDERLINE = 0x00000004;
-const sal_uInt32 AX_FONT_STRIKEOUT = 0x00000008;
-const sal_uInt32 AX_FONT_DISABLED = 0x00002000;
-const sal_uInt32 AX_FONT_AUTOCOLOR = 0x40000000;
-
-const sal_Int32 AX_FONTALIGN_LEFT = 1;
-const sal_Int32 AX_FONTALIGN_RIGHT = 2;
-const sal_Int32 AX_FONTALIGN_CENTER = 3;
-
-const sal_Int32 AX_BORDERSTYLE_NONE = 0;
-const sal_Int32 AX_BORDERSTYLE_SINGLE = 1;
-
-const sal_Int32 AX_SPECIALEFFECT_FLAT = 0;
-const sal_Int32 AX_SPECIALEFFECT_RAISED = 1;
-const sal_Int32 AX_SPECIALEFFECT_SUNKEN = 2;
-const sal_Int32 AX_SPECIALEFFECT_ETCHED = 3;
-const sal_Int32 AX_SPECIALEFFECT_BUMPED = 6;
-
const sal_uInt16 AX_POS_TOPLEFT = 0;
const sal_uInt16 AX_POS_TOP = 1;
const sal_uInt16 AX_POS_TOPRIGHT = 2;
@@ -129,31 +139,21 @@ const sal_uInt16 AX_POS_BOTTOMLEFT = 6;
const sal_uInt16 AX_POS_BOTTOM = 7;
const sal_uInt16 AX_POS_BOTTOMRIGHT = 8;
-#define AX_PICPOS( label, image ) ((AX_POS_##label << 16) | AX_POS_##image)
-const sal_uInt32 AX_PICPOS_LEFTTOP = AX_PICPOS( TOPRIGHT, TOPLEFT );
-const sal_uInt32 AX_PICPOS_LEFTCENTER = AX_PICPOS( RIGHT, LEFT );
-const sal_uInt32 AX_PICPOS_LEFTBOTTOM = AX_PICPOS( BOTTOMRIGHT, BOTTOMLEFT );
-const sal_uInt32 AX_PICPOS_RIGHTTOP = AX_PICPOS( TOPLEFT, TOPRIGHT );
-const sal_uInt32 AX_PICPOS_RIGHTCENTER = AX_PICPOS( LEFT, RIGHT );
-const sal_uInt32 AX_PICPOS_RIGHTBOTTOM = AX_PICPOS( BOTTOMLEFT, BOTTOMRIGHT );
-const sal_uInt32 AX_PICPOS_ABOVELEFT = AX_PICPOS( BOTTOMLEFT, TOPLEFT );
-const sal_uInt32 AX_PICPOS_ABOVECENTER = AX_PICPOS( BOTTOM, TOP );
-const sal_uInt32 AX_PICPOS_ABOVERIGHT = AX_PICPOS( BOTTOMRIGHT, TOPRIGHT );
-const sal_uInt32 AX_PICPOS_BELOWLEFT = AX_PICPOS( TOPLEFT, BOTTOMLEFT );
-const sal_uInt32 AX_PICPOS_BELOWCENTER = AX_PICPOS( TOP, BOTTOM );
-const sal_uInt32 AX_PICPOS_BELOWRIGHT = AX_PICPOS( TOPRIGHT, BOTTOMRIGHT );
-const sal_uInt32 AX_PICPOS_CENTER = AX_PICPOS( CENTER, CENTER );
-#undef AX_PICPOS
-
-const sal_Int32 AX_PICSIZE_CLIP = 0;
-const sal_Int32 AX_PICSIZE_STRETCH = 1;
-const sal_Int32 AX_PICSIZE_ZOOM = 3;
-
-const sal_Int32 AX_PICALIGN_TOPLEFT = 0;
-const sal_Int32 AX_PICALIGN_TOPRIGHT = 1;
-const sal_Int32 AX_PICALIGN_CENTER = 2;
-const sal_Int32 AX_PICALIGN_BOTTOMLEFT = 3;
-const sal_Int32 AX_PICALIGN_BOTTOMRIGHT = 4;
+#define AX_PICPOS_IMPL( label, image ) ((AX_POS_##label << 16) | AX_POS_##image)
+const sal_uInt32 AX_PICPOS_LEFTTOP = AX_PICPOS_IMPL( TOPRIGHT, TOPLEFT );
+const sal_uInt32 AX_PICPOS_LEFTCENTER = AX_PICPOS_IMPL( RIGHT, LEFT );
+const sal_uInt32 AX_PICPOS_LEFTBOTTOM = AX_PICPOS_IMPL( BOTTOMRIGHT, BOTTOMLEFT );
+const sal_uInt32 AX_PICPOS_RIGHTTOP = AX_PICPOS_IMPL( TOPLEFT, TOPRIGHT );
+const sal_uInt32 AX_PICPOS_RIGHTCENTER = AX_PICPOS_IMPL( LEFT, RIGHT );
+const sal_uInt32 AX_PICPOS_RIGHTBOTTOM = AX_PICPOS_IMPL( BOTTOMLEFT, BOTTOMRIGHT );
+const sal_uInt32 AX_PICPOS_ABOVELEFT = AX_PICPOS_IMPL( BOTTOMLEFT, TOPLEFT );
+const sal_uInt32 AX_PICPOS_ABOVECENTER = AX_PICPOS_IMPL( BOTTOM, TOP );
+const sal_uInt32 AX_PICPOS_ABOVERIGHT = AX_PICPOS_IMPL( BOTTOMRIGHT, TOPRIGHT );
+const sal_uInt32 AX_PICPOS_BELOWLEFT = AX_PICPOS_IMPL( TOPLEFT, BOTTOMLEFT );
+const sal_uInt32 AX_PICPOS_BELOWCENTER = AX_PICPOS_IMPL( TOP, BOTTOM );
+const sal_uInt32 AX_PICPOS_BELOWRIGHT = AX_PICPOS_IMPL( TOPRIGHT, BOTTOMRIGHT );
+const sal_uInt32 AX_PICPOS_CENTER = AX_PICPOS_IMPL( CENTER, CENTER );
+#undef AX_PICPOS_IMPL
const sal_Int32 AX_DISPLAYSTYLE_TEXT = 1;
const sal_Int32 AX_DISPLAYSTYLE_LISTBOX = 2;
@@ -186,6 +186,25 @@ const sal_Int32 AX_ORIENTATION_HORIZONTAL = 1;
const sal_Int32 AX_PROPTHUMB_ON = -1;
const sal_Int32 AX_PROPTHUMB_OFF = 0;
+const sal_uInt32 AX_CONTAINER_ENABLED = 0x00000004;
+const sal_uInt32 AX_CONTAINER_HASDESIGNEXT = 0x00004000;
+const sal_uInt32 AX_CONTAINER_NOCLASSTABLE = 0x00008000;
+
+const sal_uInt32 AX_CONTAINER_DEFFLAGS = 0x00000004;
+
+const sal_Int32 AX_CONTAINER_DEFWIDTH = 4000;
+const sal_Int32 AX_CONTAINER_DEFHEIGHT = 3000;
+
+const sal_Int32 AX_CONTAINER_CYCLEALL = 0;
+const sal_Int32 AX_CONTAINER_CYCLECURRENT = 2;
+
+const sal_Int32 AX_CONTAINER_SCR_NONE = 0x00;
+const sal_Int32 AX_CONTAINER_SCR_HOR = 0x01;
+const sal_Int32 AX_CONTAINER_SCR_VER = 0x02;
+const sal_Int32 AX_CONTAINER_SCR_KEEP_HOR = 0x04;
+const sal_Int32 AX_CONTAINER_SCR_KEEP_VER = 0x08;
+const sal_Int32 AX_CONTAINER_SCR_SHOW_LEFT = 0x10;
+
// ----------------------------------------------------------------------------
const sal_Int16 API_BORDER_NONE = 0;
@@ -196,37 +215,82 @@ const sal_Int16 API_STATE_UNCHECKED = 0;
const sal_Int16 API_STATE_CHECKED = 1;
const sal_Int16 API_STATE_DONTKNOW = 2;
-// ----------------------------------------------------------------------------
+} // namespace
+
+// ============================================================================
-/** Specifies how a form control supports transparent background. */
-enum ApiTransparencyMode
+ControlConverter::ControlConverter( const GraphicHelper& rGraphicHelper, bool bDefaultColorBgr ) :
+ mrGraphicHelper( rGraphicHelper ),
+ mbDefaultColorBgr( bDefaultColorBgr )
{
- API_TRANSPARENCY_NOTSUPPORTED, /// Control does not support transparency.
- API_TRANSPARENCY_VOID, /// Transparency is enabled by missing fill color.
- API_TRANSPARENCY_PAINTTRANSPARENT /// Transparency is enabled by the 'PaintTransparent' property.
-};
+}
-// ----------------------------------------------------------------------------
+ControlConverter::~ControlConverter()
+{
+}
-/** Specifies how a form control supports the DefaultState property. */
-enum ApiDefaultStateMode
+// Generic conversion ---------------------------------------------------------
+
+void ControlConverter::convertSize( PropertyMap& rPropMap, const AxPairData& rSize ) const
{
- API_DEFAULTSTATE_BOOLEAN, /// Control does not support tri-state, state is given as boolean.
- API_DEFAULTSTATE_SHORT, /// Control does not support tri-state, state is given as short.
- API_DEFAULTSTATE_TRISTATE /// Control supports tri-state, state is given as short.
-};
+ // size is given in 1/100 mm, UNO needs AppFont units
+ Size aAppFontSize = mrGraphicHelper.convertHmmToAppFont( Size( rSize.first, rSize.second ) );
+ rPropMap.setProperty( PROP_Width, aAppFontSize.Width );
+ rPropMap.setProperty( PROP_Height, aAppFontSize.Height );
+}
-// ----------------------------------------------------------------------------
+void ControlConverter::convertPosition( PropertyMap& rPropMap, const AxPairData& rPos ) const
+{
+ // position is given in 1/100 mm, UNO needs AppFont units
+ Point aAppFontPos = mrGraphicHelper.convertHmmToAppFont( Point( rPos.first, rPos.second ) );
+ rPropMap.setProperty( PROP_PositionX, aAppFontPos.X );
+ rPropMap.setProperty( PROP_PositionY, aAppFontPos.Y );
+}
+
+void ControlConverter::convertColor( PropertyMap& rPropMap, sal_Int32 nPropId, sal_uInt32 nOleColor ) const
+{
+ rPropMap.setProperty( nPropId, OleHelper::decodeOleColor( mrGraphicHelper, nOleColor, mbDefaultColorBgr ) );
+}
+
+void ControlConverter::convertPicture( PropertyMap& rPropMap, const StreamDataSequence& rPicData ) const
+{
+ if( rPicData.hasElements() )
+ {
+ OUString aGraphicUrl = mrGraphicHelper.importGraphicObject( rPicData );
+ if( aGraphicUrl.getLength() > 0 )
+ rPropMap.setProperty( PROP_ImageURL, aGraphicUrl );
+ }
+}
+
+void ControlConverter::convertOrientation( PropertyMap& rPropMap, bool bHorizontal ) const
+{
+ namespace AwtScrollBarOrient = ::com::sun::star::awt::ScrollBarOrientation;
+ sal_Int32 nScrollOrient = bHorizontal ? AwtScrollBarOrient::HORIZONTAL : AwtScrollBarOrient::VERTICAL;
+ rPropMap.setProperty( PROP_Orientation, nScrollOrient );
+}
-/** Converts the AX background formatting to UNO properties. */
-void lclConvertBackground( AxControlHelper& rHelper, PropertyMap& rPropMap, sal_uInt32 nBackColor, sal_uInt32 nFlags, ApiTransparencyMode eTranspMode )
+void ControlConverter::convertScrollBar( PropertyMap& rPropMap,
+ sal_Int32 nMin, sal_Int32 nMax, sal_Int32 nPosition,
+ sal_Int32 nSmallChange, sal_Int32 nLargeChange, bool bAwtModel ) const
+{
+ rPropMap.setProperty( PROP_ScrollValueMin, ::std::min( nMin, nMax ) );
+ rPropMap.setProperty( PROP_ScrollValueMax, ::std::max( nMin, nMax ) );
+ rPropMap.setProperty( PROP_LineIncrement, nSmallChange );
+ rPropMap.setProperty( PROP_BlockIncrement, nLargeChange );
+ rPropMap.setProperty( bAwtModel ? PROP_ScrollValue : PROP_DefaultScrollValue, nPosition );
+}
+
+// ActiveX (Forms 2.0) specific conversion ------------------------------------
+
+void ControlConverter::convertAxBackground( PropertyMap& rPropMap,
+ sal_uInt32 nBackColor, sal_uInt32 nFlags, ApiTransparencyMode eTranspMode ) const
{
bool bOpaque = getFlag( nFlags, AX_FLAGS_OPAQUE );
switch( eTranspMode )
{
case API_TRANSPARENCY_NOTSUPPORTED:
// fake transparency by using system window background if needed
- rPropMap.setProperty( PROP_BackgroundColor, rHelper.convertColor( bOpaque ? nBackColor : AX_SYSCOLOR_WINDOWBACK ) );
+ convertColor( rPropMap, PROP_BackgroundColor, bOpaque ? nBackColor : AX_SYSCOLOR_WINDOWBACK );
break;
case API_TRANSPARENCY_PAINTTRANSPARENT:
rPropMap.setProperty( PROP_PaintTransparent, !bOpaque );
@@ -234,52 +298,31 @@ void lclConvertBackground( AxControlHelper& rHelper, PropertyMap& rPropMap, sal_
case API_TRANSPARENCY_VOID:
// keep transparency by leaving the (void) default property value
if( bOpaque )
- rPropMap.setProperty( PROP_BackgroundColor, rHelper.convertColor( nBackColor ) );
+ convertColor( rPropMap, PROP_BackgroundColor, nBackColor );
break;
}
}
-// ----------------------------------------------------------------------------
-
-/** Converts the AX border formatting to UNO properties. */
-void lclConvertBorder( AxControlHelper& rHelper, PropertyMap& rPropMap, sal_uInt32 nBorderColor, sal_Int32 nBorderStyle, sal_Int32 nSpecialEffect )
+void ControlConverter::convertAxBorder( PropertyMap& rPropMap,
+ sal_uInt32 nBorderColor, sal_Int32 nBorderStyle, sal_Int32 nSpecialEffect ) const
{
sal_Int16 nBorder = (nBorderStyle == AX_BORDERSTYLE_SINGLE) ? API_BORDER_FLAT :
((nSpecialEffect == AX_SPECIALEFFECT_FLAT) ? API_BORDER_NONE : API_BORDER_SUNKEN);
rPropMap.setProperty( PROP_Border, nBorder );
- rPropMap.setProperty( PROP_BorderColor, rHelper.convertColor( nBorderColor ) );
+ convertColor( rPropMap, PROP_BorderColor, nBorderColor );
}
-// ----------------------------------------------------------------------------
-
-/** Converts the AX special effect to UNO properties. */
-void lclConvertVisualEffect( AxControlHelper& /*rHelper*/, PropertyMap& rPropMap, sal_Int32 nSpecialEffect )
+void ControlConverter::convertAxVisualEffect( PropertyMap& rPropMap, sal_Int32 nSpecialEffect ) const
{
namespace AwtVisualEffect = ::com::sun::star::awt::VisualEffect;
sal_Int16 nVisualEffect = (nSpecialEffect == AX_SPECIALEFFECT_FLAT) ? AwtVisualEffect::FLAT : AwtVisualEffect::LOOK3D;
rPropMap.setProperty( PROP_VisualEffect, nVisualEffect );
}
-// ----------------------------------------------------------------------------
-
-/** Converts the passed picture stream to UNO properties. */
-void lclConvertPicture( AxControlHelper& rHelper, PropertyMap& rPropMap, const StreamDataSequence& rPicData )
-{
- if( rPicData.hasElements() )
- {
- OUString aGraphicUrl = rHelper.getFilter().getGraphicHelper().importGraphicObject( rPicData );
- if( aGraphicUrl.getLength() > 0 )
- rPropMap.setProperty( PROP_ImageURL, aGraphicUrl );
- }
-}
-
-// ----------------------------------------------------------------------------
-
-/** Converts the passed picture stream and position to UNO properties. */
-void lclConvertPicture( AxControlHelper& rHelper, PropertyMap& rPropMap, const StreamDataSequence& rPicData, sal_uInt32 nPicPos )
+void ControlConverter::convertAxPicture( PropertyMap& rPropMap, const StreamDataSequence& rPicData, sal_uInt32 nPicPos ) const
{
// the picture
- lclConvertPicture( rHelper, rPropMap, rPicData );
+ convertPicture( rPropMap, rPicData );
// picture position
namespace AwtImagePos = ::com::sun::star::awt::ImagePosition;
@@ -299,18 +342,16 @@ void lclConvertPicture( AxControlHelper& rHelper, PropertyMap& rPropMap, const S
case AX_PICPOS_BELOWCENTER: nImagePos = AwtImagePos::BelowCenter; break;
case AX_PICPOS_BELOWRIGHT: nImagePos = AwtImagePos::BelowRight; break;
case AX_PICPOS_CENTER: nImagePos = AwtImagePos::Centered; break;
- default: OSL_ENSURE( false, "lclConvertPicture - unknown picture position" );
+ default: OSL_ENSURE( false, "ControlConverter::convertAxPicture - unknown picture position" );
}
rPropMap.setProperty( PROP_ImagePosition, nImagePos );
}
-// ----------------------------------------------------------------------------
-
-/** Converts the passed picture stream and position to UNO properties. */
-void lclConvertPicture( AxControlHelper& rHelper, PropertyMap& rPropMap, const StreamDataSequence& rPicData, sal_Int32 nPicSizeMode, sal_Int32 /*nPicAlign*/, bool /*bPicTiling*/ )
+void ControlConverter::convertAxPicture( PropertyMap& rPropMap, const StreamDataSequence& rPicData,
+ sal_Int32 nPicSizeMode, sal_Int32 /*nPicAlign*/, bool /*bPicTiling*/ ) const
{
// the picture
- lclConvertPicture( rHelper, rPropMap, rPicData );
+ convertPicture( rPropMap, rPicData );
// picture scale mode
namespace AwtScaleMode = ::com::sun::star::awt::ImageScaleMode;
@@ -320,15 +361,13 @@ void lclConvertPicture( AxControlHelper& rHelper, PropertyMap& rPropMap, const S
case AX_PICSIZE_CLIP: nScaleMode = AwtScaleMode::None; break;
case AX_PICSIZE_STRETCH: nScaleMode = AwtScaleMode::Anisotropic; break;
case AX_PICSIZE_ZOOM: nScaleMode = AwtScaleMode::Isotropic; break;
- default: OSL_ENSURE( false, "lclConvertPicture - unknown picture size mode" );
+ default: OSL_ENSURE( false, "ControlConverter::convertAxPicture - unknown picture size mode" );
}
rPropMap.setProperty( PROP_ScaleMode, nScaleMode );
}
-// ----------------------------------------------------------------------------
-
-/** Converts the AX value for checked/unchecked/dontknow to UNO properties. */
-void lclConvertState( AxControlHelper& /*rHelper*/, PropertyMap& rPropMap, const OUString& rValue, sal_Int32 nMultiSelect, ApiDefaultStateMode eDefStateMode )
+void ControlConverter::convertAxState( PropertyMap& rPropMap,
+ const OUString& rValue, sal_Int32 nMultiSelect, ApiDefaultStateMode eDefStateMode, bool bAwtModel ) const
{
bool bBooleanState = eDefStateMode == API_DEFAULTSTATE_BOOLEAN;
bool bSupportsTriState = eDefStateMode == API_DEFAULTSTATE_TRISTATE;
@@ -341,44 +380,280 @@ void lclConvertState( AxControlHelper& /*rHelper*/, PropertyMap& rPropMap, const
case '1': nState = API_STATE_CHECKED; break;
// any other string (also empty) means 'dontknow'
}
+ sal_Int32 nPropId = bAwtModel ? PROP_State : PROP_DefaultState;
if( bBooleanState )
- rPropMap.setProperty( PROP_DefaultState, nState != API_STATE_UNCHECKED );
+ rPropMap.setProperty( nPropId, nState != API_STATE_UNCHECKED );
else
- rPropMap.setProperty( PROP_DefaultState, nState );
+ rPropMap.setProperty( nPropId, nState );
// tristate
if( bSupportsTriState )
rPropMap.setProperty( PROP_TriState, nMultiSelect == AX_SELCTION_MULTI );
}
-// ----------------------------------------------------------------------------
-
-/** Converts the AX control orientation to UNO properties. */
-void lclConvertOrientation( AxControlHelper& /*rHelper*/, PropertyMap& rPropMap, sal_Int32 nOrientation, sal_Int32 nWidth, sal_Int32 nHeight )
+void ControlConverter::convertAxOrientation( PropertyMap& rPropMap,
+ const AxPairData& rSize, sal_Int32 nOrientation ) const
{
- namespace AwtScrollBarOrient = ::com::sun::star::awt::ScrollBarOrientation;
- sal_Int32 nScrollOrient = AwtScrollBarOrient::HORIZONTAL;
+ bool bHorizontal = true;
switch( nOrientation )
{
- case AX_ORIENTATION_AUTO: if( nWidth <= nHeight) nScrollOrient = AwtScrollBarOrient::VERTICAL; break;
- case AX_ORIENTATION_VERTICAL: nScrollOrient = AwtScrollBarOrient::VERTICAL; break;
- case AX_ORIENTATION_HORIZONTAL: nScrollOrient = AwtScrollBarOrient::HORIZONTAL; break;
- default: OSL_ENSURE( false, "lclConvertOrientation - unknown orientation" );
+ case AX_ORIENTATION_AUTO: bHorizontal = rSize.first > rSize.second; break;
+ case AX_ORIENTATION_VERTICAL: bHorizontal = false; break;
+ case AX_ORIENTATION_HORIZONTAL: bHorizontal = true; break;
+ default: OSL_ENSURE( false, "ControlConverter::convertAxOrientation - unknown orientation" );
}
- rPropMap.setProperty( PROP_Orientation, nScrollOrient );
+ convertOrientation( rPropMap, bHorizontal );
}
-} // namespace
+// ============================================================================
+
+ControlModelBase::ControlModelBase() :
+ maSize( 0, 0 ),
+ mbAwtModel( false )
+{
+}
+
+ControlModelBase::~ControlModelBase()
+{
+}
+
+OUString ControlModelBase::getServiceName() const
+{
+ ApiControlType eCtrlType = getControlType();
+ if( mbAwtModel ) switch( eCtrlType )
+ {
+ case API_CONTROL_BUTTON: return CREATE_OUSTRING( "com.sun.star.awt.UnoControlButtonModel" );
+ case API_CONTROL_FIXEDTEXT: return CREATE_OUSTRING( "com.sun.star.awt.UnoControlFixedTextModel" );
+ case API_CONTROL_IMAGE: return CREATE_OUSTRING( "com.sun.star.awt.UnoControlImageControlModel" );
+ case API_CONTROL_CHECKBOX: return CREATE_OUSTRING( "com.sun.star.awt.UnoControlCheckBoxModel" );
+ case API_CONTROL_RADIOBUTTON: return CREATE_OUSTRING( "com.sun.star.awt.UnoControlRadioButtonModel" );
+ case API_CONTROL_EDIT: return CREATE_OUSTRING( "com.sun.star.awt.UnoControlEditModel" );
+ case API_CONTROL_LISTBOX: return CREATE_OUSTRING( "com.sun.star.awt.UnoControlListBoxModel" );
+ case API_CONTROL_COMBOBOX: return CREATE_OUSTRING( "com.sun.star.awt.UnoControlComboBoxModel" );
+ case API_CONTROL_SPINBUTTON: return CREATE_OUSTRING( "com.sun.star.awt.UnoControlSpinButtonModel" );
+ case API_CONTROL_SCROLLBAR: return CREATE_OUSTRING( "com.sun.star.awt.UnoControlScrollBarModel" );
+ case API_CONTROL_PROGRESSBAR: return CREATE_OUSTRING( "com.sun.star.awt.UnoControlProgressBarModel" );
+ case API_CONTROL_GROUPBOX: return CREATE_OUSTRING( "com.sun.star.awt.UnoControlGroupBoxModel" );
+ case API_CONTROL_DIALOG: return CREATE_OUSTRING( "com.sun.star.awt.UnoControlDialogModel" );
+ default: OSL_ENSURE( false, "ControlModelBase::getServiceName - no AWT model service supported" );
+ }
+ else switch( eCtrlType )
+ {
+ case API_CONTROL_BUTTON: return CREATE_OUSTRING( "com.sun.star.form.component.CommandButton" );
+ case API_CONTROL_FIXEDTEXT: return CREATE_OUSTRING( "com.sun.star.form.component.FixedText" );
+ case API_CONTROL_IMAGE: return CREATE_OUSTRING( "com.sun.star.form.component.DatabaseImageControl" );
+ case API_CONTROL_CHECKBOX: return CREATE_OUSTRING( "com.sun.star.form.component.CheckBox" );
+ case API_CONTROL_RADIOBUTTON: return CREATE_OUSTRING( "com.sun.star.form.component.RadioButton" );
+ case API_CONTROL_EDIT: return CREATE_OUSTRING( "com.sun.star.form.component.TextField" );
+ case API_CONTROL_LISTBOX: return CREATE_OUSTRING( "com.sun.star.form.component.ListBox" );
+ case API_CONTROL_COMBOBOX: return CREATE_OUSTRING( "com.sun.star.form.component.ComboBox" );
+ case API_CONTROL_SPINBUTTON: return CREATE_OUSTRING( "com.sun.star.form.component.SpinButton" );
+ case API_CONTROL_SCROLLBAR: return CREATE_OUSTRING( "com.sun.star.form.component.ScrollBar" );
+ case API_CONTROL_GROUPBOX: return CREATE_OUSTRING( "com.sun.star.form.component.GroupBox" );
+ default: OSL_ENSURE( false, "ControlModelBase::getServiceName - no form component service supported" );
+ }
+ return OUString();
+}
+
+void ControlModelBase::importProperty( sal_Int32 /*nPropId*/, const OUString& /*rValue*/ )
+{
+}
+
+void ControlModelBase::importPictureData( sal_Int32 /*nPropId*/, BinaryInputStream& /*rInStrm*/ )
+{
+}
+
+void ControlModelBase::convertProperties( PropertyMap& /*rPropMap*/, const ControlConverter& /*rConv*/ ) const
+{
+}
+
+void ControlModelBase::convertSize( PropertyMap& rPropMap, const ControlConverter& rConv ) const
+{
+ rConv.convertSize( rPropMap, maSize );
+}
+
+// ============================================================================
+
+ComCtlModelBase::ComCtlModelBase( sal_uInt32 nDataPartId5, sal_uInt32 nDataPartId6,
+ sal_uInt16 nVersion, bool bCommonPart, bool bComplexPart ) :
+ maFontData( CREATE_OUSTRING( "Tahoma" ), 82500 ),
+ mnFlags( 0 ),
+ mnVersion( nVersion ),
+ mnDataPartId5( nDataPartId5 ),
+ mnDataPartId6( nDataPartId6 ),
+ mbCommonPart( bCommonPart ),
+ mbComplexPart( bComplexPart )
+{
+}
+
+bool ComCtlModelBase::importBinaryModel( BinaryInputStream& rInStrm )
+{
+ // read initial size part and header of the control data part
+ if( importSizePart( rInStrm ) && readPartHeader( rInStrm, getDataPartId(), mnVersion ) )
+ {
+ // if flags part exists, the first int32 of the data part contains its size
+ sal_uInt32 nCommonPartSize = mbCommonPart ? rInStrm.readuInt32() : 0;
+ // implementations must read the exact amount of data, stream must point to its end afterwards
+ importControlData( rInStrm );
+ // read following parts
+ if( !rInStrm.isEof() &&
+ (!mbCommonPart || importCommonPart( rInStrm, nCommonPartSize )) &&
+ (!mbComplexPart || importComplexPart( rInStrm )) )
+ {
+ return !rInStrm.isEof();
+ }
+ }
+ return false;
+}
+
+void ComCtlModelBase::convertProperties( PropertyMap& rPropMap, const ControlConverter& rConv ) const
+{
+ if( mbCommonPart )