office-gobmx/oox/source/helper/storagebase.cxx
Ivo Hinkelmann 0851da4d8a CWS-TOOLING: integrate CWS dr68
2009-06-19 17:43:48 +0200 oc  r273175 : #i102946# some lines for new dialog added
2009-06-19 14:17:45 +0200 oc  r273158 : #i102946# three lines added
2009-05-19 11:56:14 +0200 dr  r272065 : #i99677# wrong attribute name
2009-05-18 18:37:05 +0200 dr  r272045 : #i10000# suncc warning
2009-05-05 16:46:13 +0200 dr  r271536 : #i10000# adoptions after rebase to master containing dr67
2009-05-05 16:01:19 +0200 dr  r271530 : #i10000# adoptions after rebase to master containing dr67
2009-05-04 14:20:39 +0200 dr  r271453 : CWS-TOOLING: rebase CWS dr68 to trunk@271427 (milestone: DEV300:m47)
2009-04-28 17:01:14 +0200 dr  r271332 : CWS-TOOLING: rebase CWS dr68 to trunk@270723 (milestone: DEV300:m46)
2009-04-23 12:21:40 +0200 dr  r271149 : #i100688# missing checkins
2009-04-23 12:18:16 +0200 dr  r271147 : #i100978# relations path handling
2009-04-22 19:25:45 +0200 nn  r271136 : #i49491# show navigator for double click on document position status bar control
2009-04-22 11:28:36 +0200 nn  r271085 : #i60401# small text change
2009-04-21 16:53:23 +0200 dr  r271044 : #i10000# missing dtor
2009-04-20 13:39:25 +0200 nn  r270977 : #i60401# add dialog to extend sort range (patch from maoyg)
2009-04-08 12:11:08 +0200 dr  r270630 : #i100943# prevent assertion when loading chart with empty category ranges
2009-04-07 19:03:00 +0200 dr  r270609 : #i100688# missing bits for OLE
2009-04-07 17:14:06 +0200 dr  r270605 : ported fix for #i100710#
2009-04-07 17:12:50 +0200 dr  r270604 : #i10000# wae
2009-04-07 15:31:55 +0200 dr  r270598 : import system colors moved to FilterBase class, more rework on fill and color contexts
2009-04-06 15:00:03 +0200 dr  r270552 : #i99677# prevent recursive loading of the current document
2009-04-03 18:28:42 +0200 dr  r270515 : added import of brightness/contrast and mono/grayscale color effects for image shapes
2009-04-03 17:36:03 +0200 dr  r270509 : cache already imported embedded graphics
2009-04-03 16:46:34 +0200 dr  r270500 : more rework on bitmap fill and graphic object handling
2009-03-31 12:28:10 +0200 dr  r270271 : #i10000# unxlngi6 wae
2009-03-31 09:04:10 +0200 dr  r270261 : CWS-TOOLING: rebase CWS dr68 to trunk@270033 (milestone: DEV300:m45)
2009-03-30 17:42:05 +0200 dr  r270249 : #i91122# add missing doc
2009-03-30 17:37:08 +0200 dr  r270248 : #i91122# add missing doc
2009-03-30 16:59:15 +0200 dr  r270241 : #i99677# add import of ActiveX scrollbar controls
2009-03-30 14:30:36 +0200 dr  r270230 : #i91122# missing/wrong documentation
2009-03-30 13:03:38 +0200 dr  r270220 : #i99677# add import of ActiveX combobox and spinbutton controls
2009-03-27 11:46:59 +0100 dr  r270144 : #i99677# import ActiveX listbox controls (Forms.ListBox.1)
2009-03-26 19:58:00 +0100 dr  r270104 : #i99677# move more OLE import code into ole submodule
2009-03-26 15:15:02 +0100 dr  r270082 : #i100546# add import of chart bitmap fills, add import of X/Y offset in tiled bitmap fills of all shapes
2009-03-25 12:54:59 +0100 dr  r270018 : #i99677# import ActiveX edit text control (Forms.TextBox.1)
2009-03-24 10:59:29 +0100 dr  r269921 : #i99677# moved import of OLE StdHlink to 'ole' submodule, added string import helpers to BinaryStreamBase class, removed implementation of ST_XString import from docprop in favour of the implementation in class AttributeList
2009-03-24 10:40:18 +0100 dr  r269919 : #i100502# implicit precedence of '&&' was intended
2009-03-24 10:18:29 +0100 dr  r269917 : #i100502# missing parentheses
2009-03-23 15:17:48 +0100 dr  r269876 : #i99677# more code reorg, added graphic helper and OLE helper object per filter, added OLE/control import to PPTX/XLSX filter, moved helpers from XmlFilterBase to FilterBase
2009-03-19 12:45:20 +0100 dr  r269740 : #i99677# interface changes in oox
2009-03-18 15:51:50 +0100 dr  r269683 : #i99677# improved relation handling (internal/external), added preprocessor for VML streams to eat MS specific instructions, added OCX ToggleButton/OptionButton import, added DIB import for BIFF (page background picture, lots of other minor improvements
2009-03-16 15:25:30 +0100 dr  r269551 : #i99677# import excel form control client data (printable, cell link)
2009-03-13 18:37:17 +0100 dr  r269494 : #i99677# import image controls and check boxes
2009-03-12 15:08:18 +0100 dr  r269420 : #i10000# rebase problems
2009-03-12 14:43:09 +0100 dr  r269418 : #i10000# rebase problems
2009-03-12 14:42:41 +0100 dr  r269417 : #i10000# missing delivered header
2009-03-12 13:57:06 +0100 dr  r269405 : #i10000# typos
2009-03-12 12:58:52 +0100 dr  r269391 : CWS-TOOLING: rebase CWS dr68 to trunk@269297 (milestone: DEV300:m43)
2009-03-12 11:11:46 +0100 dr  r269374 : #i99677# first step to import BIFF8 page background
2009-03-12 10:21:53 +0100 dr  r269364 : #i99677# rework of graphic import in entire filter, added import of AX Label controls
2009-03-09 16:44:50 +0100 dr  r269202 : #i99677# import some formatting attributes of command buttons
2009-03-05 15:31:46 +0100 dr  r268911 : #i99677# use VML shape client data to import excel VML shape positions
2009-03-05 11:39:48 +0100 dr  r268888 : #i99677# create UNO control shapes from VML control shapes
2009-03-05 11:38:59 +0100 dr  r268886 : #i99677# change attribute Shapes to DrawPage for import of embedded form controls
2009-03-05 11:30:40 +0100 dr  r268885 : #i99677# change attribute Shapes to DrawPage for import of embedded form controls
2009-03-04 18:46:05 +0100 dr  r268860 : adapt namespace ids according to oox
2009-03-04 18:43:49 +0100 dr  r268859 : #i99677# more VML import rework
2009-03-03 13:38:36 +0100 dr  r268721 : #i99677# more cleanup for VML filter
2009-03-03 13:13:15 +0100 dr  r268719 : #i99807# do not iterate beyond end of std::list
2009-03-02 11:55:49 +0100 dr  r268644 : add ST_XString support (encoded characters in attribute values)
2009-02-26 17:07:18 +0100 dr  r268542 : #i99677# first steps of ax control import: dummy AX base classes, reimplement VML import (hopefully without breaking anything), register embedded AX controls at VML drawing
2009-02-23 17:43:50 +0100 dr  r268365 : #i99426# remaining work on scenario import
2009-02-19 16:56:25 +0100 dr  r268295 : #i99426# base implementations for scenarios import
2009-07-15 14:57:49 +00:00

212 lines
6.3 KiB
C++

/*************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* Copyright 2008 by Sun Microsystems, Inc.
*
* OpenOffice.org - a multi-platform office productivity suite
*
* $RCSfile: storagebase.cxx,v $
* $Revision: 1.3 $
*
* 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/storagebase.hxx"
#include <com/sun/star/io/XStream.hpp>
#include <com/sun/star/embed/XTransactedObject.hpp>
#include <rtl/ustrbuf.hxx>
using ::rtl::OUString;
using ::rtl::OUStringBuffer;
using ::com::sun::star::uno::Reference;
using ::com::sun::star::uno::UNO_QUERY;
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;
namespace oox {
// ============================================================================
namespace {
void lclSplitFirstElement( OUString& orElement, OUString& orRemainder, const OUString& rFullName )
{
sal_Int32 nSlashPos = rFullName.indexOf( '/' );
if( (0 <= nSlashPos) && (nSlashPos < rFullName.getLength()) )
{
orElement = rFullName.copy( 0, nSlashPos );
orRemainder = rFullName.copy( nSlashPos + 1 );
}
else
{
orElement = rFullName;
}
}
} // namespace
// ----------------------------------------------------------------------------
StorageBase::StorageBase( const Reference< XInputStream >& rxInStream, bool bBaseStreamAccess ) :
mxInStream( rxInStream ),
mpParentStorage( 0 ),
mbBaseStreamAccess( bBaseStreamAccess )
{
OSL_ENSURE( mxInStream.is(), "StorageBase::StorageBase - missing base input stream" );
}
StorageBase::StorageBase( const Reference< XStream >& rxOutStream, bool bBaseStreamAccess ) :
mxOutStream( rxOutStream ),
mpParentStorage( 0 ),
mbBaseStreamAccess( bBaseStreamAccess )
{
OSL_ENSURE( mxOutStream.is(), "StorageBase::StorageBase - missing base output stream" );
}
StorageBase::StorageBase( const StorageBase& rParentStorage, const OUString& rStorageName ) :
maStorageName( rStorageName ),
mpParentStorage( &rParentStorage ),
mbBaseStreamAccess( false )
{
}
StorageBase::~StorageBase()
{
}
bool StorageBase::isStorage() const
{
return implIsStorage();
}
Reference< XStorage > StorageBase::getXStorage() const
{
return implGetXStorage();
}
const OUString& StorageBase::getName() const
{
return maStorageName;
}
OUString StorageBase::getPath() const
{
OUStringBuffer aBuffer;
if( mpParentStorage )
aBuffer.append( mpParentStorage->getPath() );
if( aBuffer.getLength() > 0 )
aBuffer.append( sal_Unicode( '/' ) );
aBuffer.append( maStorageName );
return aBuffer.makeStringAndClear();
}
void StorageBase::getElementNames( ::std::vector< OUString >& orElementNames ) const
{
orElementNames.clear();
implGetElementNames( orElementNames );
}
StorageRef StorageBase::openSubStorage( const OUString& rStorageName, bool bCreate )
{
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 );
return xSubStorage;
}
Reference< XInputStream > StorageBase::openInputStream( const OUString& rStreamName )
{
Reference< XInputStream > xInStream;
OUString aElement, aRemainder;
lclSplitFirstElement( aElement, aRemainder, rStreamName );
if( aElement.getLength() > 0 )
{
if( aRemainder.getLength() > 0 )
{
StorageRef xSubStorage = getSubStorage( aElement, false );
if( xSubStorage.get() )
xInStream = xSubStorage->openInputStream( aRemainder );
}
else
{
xInStream = implOpenInputStream( aElement );
}
}
else if( mbBaseStreamAccess )
{
xInStream = mxInStream;
}
return xInStream;
}
Reference< XOutputStream > StorageBase::openOutputStream( const OUString& rStreamName )
{
Reference< XOutputStream > xOutStream;
OUString aElement, aRemainder;
lclSplitFirstElement( aElement, aRemainder, rStreamName );
if( aElement.getLength() > 0 )
{
if( aRemainder.getLength() > 0 )
{
StorageRef xSubStorage = getSubStorage( aElement, true );
if( xSubStorage.get() )
xOutStream = xSubStorage->openOutputStream( aRemainder );
}
else
{
xOutStream = implOpenOutputStream( aElement );
}
}
else if( mbBaseStreamAccess )
{
xOutStream = mxOutStream->getOutputStream();
}
return xOutStream;
}
StorageRef StorageBase::getSubStorage( const OUString& rElementName, bool bCreate )
{
SubStorageMap::iterator aIt = maSubStorages.find( rElementName );
return (aIt == maSubStorages.end()) ?
(maSubStorages[ rElementName ] = implOpenSubStorage( rElementName, bCreate )) : aIt->second;
}
void StorageBase::commit()
{
for( SubStorageMap::iterator aIt = maSubStorages.begin(); aIt != maSubStorages.end(); aIt ++ )
aIt->second->commit();
Reference< XTransactedObject > xTransactedObj( getXStorage(), UNO_QUERY );
if( xTransactedObj.is() )
xTransactedObj->commit();
}
// ============================================================================
} // namespace oox