merge to m67

This commit is contained in:
Mathias Bauer 2009-12-05 19:29:07 +01:00
commit 82f5d55a7f
26 changed files with 1602 additions and 267 deletions

View file

@ -55,6 +55,7 @@ SLOFILES= \
$(SLO)$/mscodec.obj \
$(SLO)$/msfiltertracer.obj \
$(SLO)$/svdfppt.obj \
$(SLO)$/msvbahelper.obj\
$(SLO)$/svxmsbas2.obj
SHL1TARGET= msfilter$(DLLPOSTFIX)

View file

@ -415,12 +415,25 @@ private:
sal_uInt16 dumpFormatIdx( const String& rName = EMPTY_STRING );
sal_uInt16 dumpXfIdx( const String& rName = EMPTY_STRING, bool bBiff2Style = false );
template< typename Type >
inline Type dumpExtColorType() { return dumpDec< Type >( "color-type", "EXTCOLOR-TYPE" ); }
void dumpExtColorValue( sal_uInt32 nColorType );
void dumpExtColor( const String& rName = EMPTY_STRING );
void dumpExtCfColor( const String& rName = EMPTY_STRING );
void dumpExtGradientHead();
::rtl::OUString dumpPivotString( const String& rName, sal_uInt16 nStrLen );
::rtl::OUString dumpPivotString( const String& rName );
sal_uInt16 dumpCellHeader( bool bBiff2Style = false );
void dumpBoolErr();
void dumpCfRuleProp();
void dumpXfExtProp();
void dumpDxfProp();
void dumpDxf12Prop();
void dumpCfRule12Param( sal_uInt16 nSubType );
void dumpFontRec();
void dumpFormatRec();
void dumpXfRec();

View file

@ -1897,19 +1897,6 @@ protected:
inline StreamDataSequence& getRecordDataSequence() { return *mxRecData; }
using RecordObjectBase::construct;
void construct(
const ObjectBase& rParent,
const BinaryInputStreamRef& rxBaseStrm,
const ::rtl::OUString& rSysFileName,
const BinaryInputStreamRef& rxRecStrm,
const String& rRecNames,
const String& rSimpleRecs = EMPTY_STRING );
void construct(
const OutputObjectBase& rParent,
const BinaryInputStreamRef& rxBaseStrm,
const BinaryInputStreamRef& rxRecStrm,
const String& rRecNames,
const String& rSimpleRecs = EMPTY_STRING );
void construct(
const ObjectBase& rParent,
const BinaryInputStreamRef& rxBaseStrm,

View file

@ -211,6 +211,7 @@ protected:
virtual void implDumpRecordBody();
private:
void dumpGradientHead();
void dumpCellHeader( bool bWithColumn );
private:

View file

@ -0,0 +1,188 @@
/*************************************************************************
*
* 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: axbinaryreader.hxx,v $
* $Revision: 1.1 $
*
* 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_AXBINARYREADER_HXX
#define OOX_OLE_AXBINARYREADER_HXX
#include "oox/helper/binaryinputstream.hxx"
#include "oox/helper/containerhelper.hxx"
namespace oox {
namespace ole {
// ============================================================================
/** A wrapper for an unseekable binary input stream. */
class AxAlignedInputStream : public BinaryInputStream
{
public:
explicit AxAlignedInputStream( BinaryInputStream& rInStrm );
/** Return the current stream position (relative to position at construction time). */
virtual sal_Int64 tell() const;
/** Seeks the stream to the passed position, if it is behind the current position. */
virtual void seek( sal_Int64 nPos );
/** Reads nBytes bytes to the passed sequence.
@return Number of bytes really read. */
virtual sal_Int32 readData( StreamDataSequence& orData, sal_Int32 nBytes );
/** Reads nBytes bytes to the (existing) buffer opMem.
@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. */
virtual void skip( sal_Int32 nBytes );
/** Aligns the stream to a multiple of the passed size. */
void align( size_t nSize );
/** Aligns the stream according to the passed type and reads an atomar value. */
template< typename Type >
inline Type readAligned() { align( sizeof( Type ) ); return readValue< Type >(); }
/** Aligns the stream according to the passed type and skips the size of the type. */
template< typename Type >
inline void skipAligned() { align( sizeof( Type ) ); skip( sizeof( Type ) ); }
private:
BinaryInputStream& mrInStrm; /// The wrapped input stream.
sal_Int64 mnStrmPos; /// Tracks relative position in the stream.
};
// ============================================================================
/** Import helper to read simple and complex ActiveX form control properties
from a binary input stream. */
class AxBinaryPropertyReader
{
public:
explicit AxBinaryPropertyReader( BinaryInputStream& rInStrm, bool b64BitPropFlags = false );
/** Reads the next integer property value from the stream, if the
respective flag in the property mask is set. */
template< typename StreamType, typename DataType >
inline void readIntProperty( DataType& ornValue )
{ if( startNextProperty() ) ornValue = maInStrm.readAligned< StreamType >(); }
/** Reads the next boolean property value from the stream, if the
respective flag in the property mask is set. */
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 );
/** 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 picture property from the stream, if the respective flag
in the property mask is set. */
void readPictureProperty( StreamDataSequence& orPicData );
/** Skips the next integer property value in the stream, if the respective
flag in the property mask is set. */
template< typename StreamType >
inline void skipIntProperty() { if( startNextProperty() ) maInStrm.skipAligned< StreamType >(); }
/** 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 string property in the stream, if the respective flag in
the property mask is set. */
inline void skipStringProperty() { readStringProperty( maDummyString ); }
/** Skips the next picture property in the stream, if the respective flag
in the property mask is set. */
inline void skipPictureProperty() { readPictureProperty( maDummyPicData ); }
/** Has to be called for undefined properties. If the respective flag in
the mask is set, the property import cannot be finished successfully. */
inline void skipUndefinedProperty() { ensureValid( !startNextProperty() ); }
/** Final processing, reads contents of all complex properties. */
bool finalizeImport();
private:
bool ensureValid( bool bCondition = true );
bool startNextProperty();
private:
/** Base class for complex properties such as string, point, size, GUID, picture. */
struct ComplexProperty
{
virtual ~ComplexProperty();
virtual bool readProperty( AxAlignedInputStream& rInStrm ) = 0;
};
/** Complex property for a 32-bit value pair, e.g. point or size. */
struct PairProperty : public ComplexProperty
{
sal_Int32& mrnValue1;
sal_Int32& mrnValue2;
inline explicit PairProperty( sal_Int32& rnValue1, sal_Int32& rnValue2 ) :
mrnValue1( rnValue1 ), mrnValue2( rnValue2 ) {}
virtual bool readProperty( AxAlignedInputStream& rInStrm );
};
/** Complex property for a string value. */
struct StringProperty : public ComplexProperty
{
::rtl::OUString& mrValue;
sal_uInt32 mnSize;
inline explicit StringProperty( ::rtl::OUString& rValue, sal_uInt32 nSize ) :
mrValue( rValue ), mnSize( nSize ) {}
virtual bool readProperty( AxAlignedInputStream& rInStrm );
};
/** Stream property for a picture or mouse icon. */
struct PictureProperty : public ComplexProperty
{
StreamDataSequence& mrPicData;
inline explicit PictureProperty( StreamDataSequence& rPicData ) :
mrPicData( rPicData ) {}
virtual bool readProperty( AxAlignedInputStream& rInStrm );
};
typedef RefVector< ComplexProperty > ComplexPropVector;
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.
StreamDataSequence maDummyPicData; /// Dummy picture for unsupported properties.
::rtl::OUString maDummyString; /// Dummy string for unsupported properties.
sal_Int64 mnPropFlags; /// Flags specifying existing properties.
sal_Int64 mnNextProp; /// Next property to read.
sal_Int64 mnPropsEnd; /// End position of simple/large properties.
bool mbValid; /// True = stream still valid.
};
// ============================================================================
} // namespace ole
} // namespace oox
#endif

View file

@ -32,15 +32,16 @@
#define OOX_OLE_AXCONTROL_HXX
#include <memory>
#include <rtl/ustring.hxx>
#include <com/sun/star/uno/Reference.hxx>
#include "oox/helper/binarystreambase.hxx"
namespace com { namespace sun { namespace star {
namespace awt { class XControlModel; }
} } }
namespace oox { class PropertyMap; }
namespace oox {
class BinaryInputStream;
class PropertyMap;
}
namespace oox {
namespace ole {
@ -58,7 +59,9 @@ public:
/** 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, const StreamDataSequence& rDataSeq );
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 );
/** Derived classes return the UNO service name used to construct the control component. */
virtual ::rtl::OUString getServiceName() const = 0;
@ -81,6 +84,7 @@ public:
explicit AxFontDataModel();
virtual void importProperty( sal_Int32 nPropId, const ::rtl::OUString& rValue );
virtual void importBinaryModel( BinaryInputStream& rInStrm );
virtual void convertProperties( AxControlHelper& rHelper, PropertyMap& rPropMap ) const;
private:
@ -100,7 +104,8 @@ public:
virtual ::rtl::OUString getServiceName() const;
virtual void importProperty( sal_Int32 nPropId, const ::rtl::OUString& rValue );
virtual void importPictureData( sal_Int32 nPropId, const StreamDataSequence& rDataSeq );
virtual void importPictureData( sal_Int32 nPropId, BinaryInputStream& rInStrm );
virtual void importBinaryModel( BinaryInputStream& rInStrm );
virtual void convertProperties( AxControlHelper& rHelper, PropertyMap& rPropMap ) const;
private:
@ -122,6 +127,7 @@ public:
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;
private:
@ -143,7 +149,8 @@ public:
virtual ::rtl::OUString getServiceName() const;
virtual void importProperty( sal_Int32 nPropId, const ::rtl::OUString& rValue );
virtual void importPictureData( sal_Int32 nPropId, const StreamDataSequence& rDataSeq );
virtual void importPictureData( sal_Int32 nPropId, BinaryInputStream& rInStrm );
virtual void importBinaryModel( BinaryInputStream& rInStrm );
virtual void convertProperties( AxControlHelper& rHelper, PropertyMap& rPropMap ) const;
private:
@ -166,7 +173,8 @@ public:
explicit AxMorphDataModel();
virtual void importProperty( sal_Int32 nPropId, const ::rtl::OUString& rValue );
virtual void importPictureData( sal_Int32 nPropId, const StreamDataSequence& rDataSeq );
virtual void importPictureData( sal_Int32 nPropId, BinaryInputStream& rInStrm );
virtual void importBinaryModel( BinaryInputStream& rInStrm );
virtual void convertProperties( AxControlHelper& rHelper, PropertyMap& rPropMap ) const;
protected:
@ -266,6 +274,7 @@ public:
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;
private:
@ -289,6 +298,7 @@ public:
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;
private:
@ -317,6 +327,13 @@ public:
/** 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 );
/** 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; }
/** Creates and returns the UNO form component object for this control and
inserts it into the form wrapped by the passed helper. */
@ -325,7 +342,8 @@ public:
private:
::std::auto_ptr< AxControlModelBase > mxModel;
::rtl::OUString maName;
::rtl::OUString maClassId; /// Class identifier of the control model.
::rtl::OUString maName; /// Name of the control.
};
// ============================================================================

View file

@ -45,7 +45,9 @@ class AxControlModelBase;
class AxControlPropertyContext : public ::oox::core::ContextHandler2
{
public:
explicit AxControlPropertyContext( ::oox::core::FragmentHandler2& rFragment, AxControlModelBase& rModel );
explicit AxControlPropertyContext(
::oox::core::FragmentHandler2& rFragment,
AxControlModelBase& rModel );
virtual ::oox::core::ContextHandlerRef
onCreateContext( sal_Int32 nElement, const AttributeList& rAttribs );

View file

@ -269,11 +269,16 @@ const sal_uInt16 BIFF3_ID_BOF = 0x0209;
const sal_uInt16 BIFF4_ID_BOF = 0x0409;
const sal_uInt16 BIFF5_ID_BOF = 0x0809;
const sal_uInt16 BIFF_ID_BOOKBOOL = 0x00DA;
const sal_uInt16 BIFF_ID_BOOKEXT = 0x0863;
const sal_uInt16 BIFF2_ID_BOOLERR = 0x0005;
const sal_uInt16 BIFF3_ID_BOOLERR = 0x0205;
const sal_uInt16 BIFF_ID_BOTTOMMARGIN = 0x0029;
const sal_uInt16 BIFF_ID_CALCCOUNT = 0x000C;
const sal_uInt16 BIFF_ID_CALCMODE = 0x000D;
const sal_uInt16 BIFF_ID_CFHEADER = 0x01B0;
const sal_uInt16 BIFF_ID_CFRULE = 0x01B1;
const sal_uInt16 BIFF_ID_CFRULE12 = 0x087A;
const sal_uInt16 BIFF_ID_CFRULEEXT = 0x087B;
const sal_uInt16 BIFF_ID_CH3DDATAFORMAT = 0x105F;
const sal_uInt16 BIFF_ID_CHAREA = 0x101A;
const sal_uInt16 BIFF_ID_CHAREAFORMAT = 0x100A;
@ -289,6 +294,7 @@ const sal_uInt16 BIFF_ID_CHCHARTLINE = 0x101C;
const sal_uInt16 BIFF_ID_CHDATAFORMAT = 0x1006;
const sal_uInt16 BIFF_ID_CHDEFAULTTEXT = 0x1024;
const sal_uInt16 BIFF_ID_CHDROPBAR = 0x103D;
const sal_uInt16 BIFF_ID_CHECKCOMPAT = 0x088C;
const sal_uInt16 BIFF_ID_CHEND = 0x1034;
const sal_uInt16 BIFF_ID_CHESCHERFORMAT = 0x1066;
const sal_uInt16 BIFF_ID_CHFONT = 0x1026;
@ -335,15 +341,15 @@ const sal_uInt16 BIFF_ID_CHTEXT = 0x1025;
const sal_uInt16 BIFF_ID_CHTICK = 0x101E;
const sal_uInt16 BIFF_ID_CHTYPEGROUP = 0x1014;
const sal_uInt16 BIFF_ID_CHVALUERANGE = 0x101F;
const sal_uInt16 BIFF_ID_CFHEADER = 0x01B0;
const sal_uInt16 BIFF_ID_CFRULE = 0x01B1;
const sal_uInt16 BIFF_ID_CODENAME = 0x01BA;
const sal_uInt16 BIFF_ID_CODEPAGE = 0x0042;
const sal_uInt16 BIFF_ID_COLINFO = 0x007D;
const sal_uInt16 BIFF_ID_COLUMNDEFAULT = 0x0020;
const sal_uInt16 BIFF_ID_COLWIDTH = 0x0024;
const sal_uInt16 BIFF_ID_COMPRESSPICS = 0x089B;
const sal_uInt16 BIFF_ID_CONT = 0x003C;
const sal_uInt16 BIFF_ID_COORDLIST = 0x00A9;
const sal_uInt16 BIFF_ID_COUNTRY = 0x008C;
const sal_uInt16 BIFF_ID_CRN = 0x005A;
const sal_uInt16 BIFF2_ID_DATATABLE = 0x0036;
const sal_uInt16 BIFF3_ID_DATATABLE = 0x0236;
@ -351,6 +357,7 @@ const sal_uInt16 BIFF2_ID_DATATABLE2 = 0x0037;
const sal_uInt16 BIFF_ID_DATAVALIDATION = 0x01BE;
const sal_uInt16 BIFF_ID_DATAVALIDATIONS = 0x01B2;
const sal_uInt16 BIFF_ID_DATEMODE = 0x0022;
const sal_uInt16 BIFF_ID_DBCELL = 0x00D7;
const sal_uInt16 BIFF_ID_DCONBINAME = 0x01B5;
const sal_uInt16 BIFF_ID_DCONNAME = 0x0052;
const sal_uInt16 BIFF_ID_DCONREF = 0x0051;
@ -363,6 +370,7 @@ const sal_uInt16 BIFF3_ID_DEFROWHEIGHT = 0x0225;
const sal_uInt16 BIFF_ID_DELTA = 0x0010;
const sal_uInt16 BIFF2_ID_DIMENSION = 0x0000;
const sal_uInt16 BIFF3_ID_DIMENSION = 0x0200;
const sal_uInt16 BIFF_ID_DXF = 0x088D;
const sal_uInt16 BIFF_ID_EOF = 0x000A;
const sal_uInt16 BIFF_ID_EXTERNALBOOK = 0x01AE;
const sal_uInt16 BIFF2_ID_EXTERNALNAME = 0x0023;
@ -377,19 +385,24 @@ const sal_uInt16 BIFF3_ID_FONT = 0x0231;
const sal_uInt16 BIFF5_ID_FONT = 0x0031;
const sal_uInt16 BIFF_ID_FONTCOLOR = 0x0045;
const sal_uInt16 BIFF_ID_FOOTER = 0x0015;
const sal_uInt16 BIFF_ID_FORCEFULLCALC = 0x08A3;
const sal_uInt16 BIFF2_ID_FORMAT = 0x001E;
const sal_uInt16 BIFF4_ID_FORMAT = 0x041E;
const sal_uInt16 BIFF2_ID_FORMULA = 0x0006;
const sal_uInt16 BIFF3_ID_FORMULA = 0x0206;
const sal_uInt16 BIFF4_ID_FORMULA = 0x0406;
const sal_uInt16 BIFF5_ID_FORMULA = 0x0006;
const sal_uInt16 BIFF_ID_GUTS = 0x0080;
const sal_uInt16 BIFF_ID_HCENTER = 0x0083;
const sal_uInt16 BIFF_ID_HEADER = 0x0014;
const sal_uInt16 BIFF_ID_HEADERFOOTER = 0x089C;
const sal_uInt16 BIFF_ID_HIDEOBJ = 0x008D;
const sal_uInt16 BIFF_ID_HORPAGEBREAKS = 0x001B;
const sal_uInt16 BIFF_ID_HYPERLINK = 0x01B8;
const sal_uInt16 BIFF3_ID_IMGDATA = 0x007F;
const sal_uInt16 BIFF8_ID_IMGDATA = 0x00E9;
const sal_uInt16 BIFF2_ID_INDEX = 0x000B;
const sal_uInt16 BIFF3_ID_INDEX = 0x020B;
const sal_uInt16 BIFF2_ID_INTEGER = 0x0002;
const sal_uInt16 BIFF_ID_INTERFACEHDR = 0x00E1;
const sal_uInt16 BIFF_ID_ITERATION = 0x0011;
@ -403,6 +416,7 @@ const sal_uInt16 BIFF_ID_MERGEDCELLS = 0x00E5;
const sal_uInt16 BIFF_ID_MSODRAWING = 0x00EC;
const sal_uInt16 BIFF_ID_MSODRAWINGGROUP = 0x00EB;
const sal_uInt16 BIFF_ID_MSODRAWINGSEL = 0x00ED;
const sal_uInt16 BIFF_ID_MTHREADSETTINGS = 0x089A;
const sal_uInt16 BIFF_ID_MULTBLANK = 0x00BE;
const sal_uInt16 BIFF_ID_MULTRK = 0x00BD;
const sal_uInt16 BIFF_ID_NOTE = 0x001C;
@ -410,6 +424,7 @@ const sal_uInt16 BIFF2_ID_NUMBER = 0x0003;
const sal_uInt16 BIFF3_ID_NUMBER = 0x0203;
const sal_uInt16 BIFF_ID_OBJ = 0x005D;
const sal_uInt16 BIFF_ID_OBJECTPROTECT = 0x0063;
const sal_uInt16 BIFF_ID_PAGELAYOUTVIEW = 0x088B;
const sal_uInt16 BIFF_ID_PAGESETUP = 0x00A1;
const sal_uInt16 BIFF_ID_PALETTE = 0x0092;
const sal_uInt16 BIFF_ID_PANE = 0x0041;
@ -448,6 +463,7 @@ const sal_uInt16 BIFF_ID_PTFITEM = 0x00B2;
const sal_uInt16 BIFF_ID_PTPAGEFIELDS = 0x00B6;
const sal_uInt16 BIFF_ID_PTROWCOLFIELDS = 0x00B4;
const sal_uInt16 BIFF_ID_PTROWCOLITEMS = 0x00B5;
const sal_uInt16 BIFF_ID_RECALCID = 0x01C1;
const sal_uInt16 BIFF_ID_REFMODE = 0x000F;
const sal_uInt16 BIFF_ID_RIGHTMARGIN = 0x0027;
const sal_uInt16 BIFF_ID_RK = 0x027E;
@ -461,11 +477,12 @@ const sal_uInt16 BIFF_ID_SCL = 0x00A0;
const sal_uInt16 BIFF_ID_SCENPROTECT = 0x00DD;
const sal_uInt16 BIFF_ID_SCREENTIP = 0x0800;
const sal_uInt16 BIFF_ID_SELECTION = 0x001D;
const sal_uInt16 BIFF_ID_SHAREDFEATHEAD = 0x0867;
const sal_uInt16 BIFF_ID_SHAREDFMLA = 0x04BC;
const sal_uInt16 BIFF_ID_SHEET = 0x0085;
const sal_uInt16 BIFF_ID_SHEETEXT = 0x0862;
const sal_uInt16 BIFF_ID_SHEETHEADER = 0x008F;
const sal_uInt16 BIFF_ID_SHEETPR = 0x0081;
const sal_uInt16 BIFF_ID_SHEETPROTECTION = 0x0867;
const sal_uInt16 BIFF_ID_SST = 0x00FC;
const sal_uInt16 BIFF_ID_STANDARDWIDTH = 0x0099;
const sal_uInt16 BIFF2_ID_STRING = 0x0007;
@ -473,6 +490,8 @@ const sal_uInt16 BIFF3_ID_STRING = 0x0207;
const sal_uInt16 BIFF_ID_STYLE = 0x0293;
const sal_uInt16 BIFF_ID_STYLEEXT = 0x0892;
const sal_uInt16 BIFF_ID_SXEXT = 0x00DC;
const sal_uInt16 BIFF_ID_TABLESTYLES = 0x088E;
const sal_uInt16 BIFF_ID_THEME = 0x0896;
const sal_uInt16 BIFF_ID_TOPMARGIN = 0x0028;
const sal_uInt16 BIFF_ID_TXO = 0x01B6;
const sal_uInt16 BIFF_ID_UNCALCED = 0x005E;
@ -488,6 +507,8 @@ const sal_uInt16 BIFF2_ID_XF = 0x0043;
const sal_uInt16 BIFF3_ID_XF = 0x0243;
const sal_uInt16 BIFF4_ID_XF = 0x0443;
const sal_uInt16 BIFF5_ID_XF = 0x00E0;
const sal_uInt16 BIFF_ID_XFCRC = 0x087C;
const sal_uInt16 BIFF_ID_XFEXT = 0x087D;
const sal_uInt16 BIFF_ID_UNKNOWN = SAL_MAX_UINT16;

View file

@ -182,6 +182,8 @@ private:
void importPTDefinition();
/** Imports the SCENARIOS record and the following scenarios. */
void importScenarios();
/** Imports the SHAREDFEATHEAD record. */
void importSharedFeatHead();
/** Imports the STANDARDWIDTH record and sets standard column width. */
void importStandardWidth();

View file

@ -510,8 +510,25 @@ OUString BiffObjectBase::dumpUniString( const String& rName, BiffStringFlags nFl
// #122185# bPhonetic flag may be set, but phonetic data may be missing
if( nPhoneticSize > 0 )
{
sal_Int64 nStrmPos = mxBiffStrm->tell();
IndentGuard aIndGuard( out() );
dumpBinary( "phonetic-data", nPhoneticSize, false );
writeEmptyItem( "phonetic-data" );
dumpUnused( 2 );
dumpDec< sal_uInt16 >( "size" );
dumpDec< sal_uInt16 >( "font-idx", "FONTNAMES" );
dumpHex< sal_uInt16 >( "flags", "PHONETICPR-FLAGS" );
sal_uInt16 nCount = dumpDec< sal_uInt16 >( "portion-count" );
sal_uInt16 nLen = dumpDec< sal_uInt16 >( "text-len" );
dumpUnicodeArray( "text", mxBiffStrm->readuInt16() );
if( nLen == 0 ) dumpUnused( 2 );
for( sal_uInt16 nPortion = 0; !mxBiffStrm->isEof() && (nPortion < nCount); ++nPortion )
{
MultiItemsGuard aMultiGuard( out() );
dumpDec< sal_uInt16 >( "first-portion-char" );
dumpDec< sal_uInt16 >( "first-main-char" );
dumpDec< sal_uInt16 >( "main-char-count" );
}
dumpRemainingTo( nStrmPos + nPhoneticSize );
}
return aString;
@ -1604,6 +1621,14 @@ void WorkbookStreamObject::implDumpRecordBody()
initializePerSheet();
break;
case BIFF_ID_BOOKEXT:
dumpFrHeader( true, true );
dumpDec< sal_uInt32 >( "rec-size" );
dumpHex< sal_uInt32 >( "flags-1", "BOOKEXT-FLAGS1" );
if( rStrm.getRemaining() > 0 ) dumpHex< sal_uInt8 >( "flags-2", "BOOKEXT-FLAGS2" );
if( rStrm.getRemaining() > 0 ) dumpHex< sal_uInt8 >( "flags-3", "BOOKEXT-FLAGS3" );
break;
case BIFF2_ID_BOOLERR:
case BIFF3_ID_BOOLERR:
dumpCellHeader( nRecId == BIFF2_ID_BOOLERR );
@ -1612,7 +1637,7 @@ void WorkbookStreamObject::implDumpRecordBody()
case BIFF_ID_CFHEADER:
dumpDec< sal_uInt16 >( "rule-count" );
dumpBool< sal_uInt16 >( "need-update" );
dumpHex< sal_uInt16 >( "flags", "CFHEADER-FLAGS" );
dumpRange( "bounding-range" );
dumpRangeList();
break;
@ -1623,65 +1648,45 @@ void WorkbookStreamObject::implDumpRecordBody()
dumpDec< sal_uInt8 >( "operator", "CFRULE-OPERATOR" );
sal_uInt16 nFmla1Size = dumpDec< sal_uInt16 >( "formula1-size" );
sal_uInt16 nFmla2Size = dumpDec< sal_uInt16 >( "formula2-size" );
sal_uInt32 nFlags = dumpHex< sal_uInt32 >( "flags", "CFRULE-FLAGS" );
dumpUnused( 2 );
if( getFlag< sal_uInt32 >( nFlags, 0x04000000 ) )
{
writeEmptyItem( "font-block" );
IndentGuard aIndGuard( out() );
sal_Int64 nRecPos = rStrm.tell();
dumpUniString( "name", BIFF_STR_8BITLENGTH );
dumpUnused( static_cast< sal_Int32 >( nRecPos + 64 - rStrm.tell() ) );
dumpDec< sal_Int32 >( "height", "CONV-TWIP-TO-PT" );
dumpHex< sal_uInt32 >( "flags", "CFRULE-FONTFLAGS" );
dumpDec< sal_uInt16 >( "weight", "FONT-WEIGHT" );
dumpDec< sal_uInt16 >( "escapement", "FONT-ESCAPEMENT" );
dumpDec< sal_uInt8 >( "underline", "FONT-UNDERLINE" );
dumpUnused( 3 ); // family/charset?
dumpDec< sal_Int32 >( "color", mxColors );
dumpUnused( 4 );
dumpHex< sal_uInt32 >( "used-flags", "CFRULE-FONTUSEDFLAGS" );
dumpDec< sal_uInt32 >( "escapement-used", "CFRULE-FONTUSED" );
dumpDec< sal_uInt32 >( "underline-used", "CFRULE-FONTUSED" );
dumpUnused( 18 );
}
if( getFlag< sal_uInt32 >( nFlags, 0x08000000 ) )
{
writeEmptyItem( "alignment-block" );
IndentGuard aIndGuard( out() );
dumpHex< sal_uInt8 >( "alignent", "CFRULE-ALIGNMENT" );
dumpHex< sal_uInt8 >( "rotation", "TEXTROTATION" );
dumpHex< sal_uInt16 >( "indent", "CFRULE-INDENT" );
dumpDec< sal_uInt16 >( "relative-indent" );
dumpUnknown( 2 );
}
if( getFlag< sal_uInt32 >( nFlags, 0x10000000 ) )
{
writeEmptyItem( "border-block" );
IndentGuard aIndGuard( out() );
dumpHex< sal_uInt16 >( "border-style", "XF-BORDERSTYLE" );
dumpHex< sal_uInt16 >( "border-color1", "XF-BORDERCOLOR1" );
dumpHex< sal_uInt32 >( "border-color2", "CFRULE-BORDERCOLOR2" );
}
if( getFlag< sal_uInt32 >( nFlags, 0x20000000 ) )
{
writeEmptyItem( "pattern-block" );
IndentGuard aIndGuard( out() );
dumpHex< sal_uInt32 >( "pattern", "CFRULE-FILLBLOCK" );
}
if( getFlag< sal_uInt32 >( nFlags, 0x40000000 ) )
{
writeEmptyItem( "protection-block" );
IndentGuard aIndGuard( out() );
dumpHex< sal_uInt16 >( "flags", "CFRULE-PROTECTION-FLAGS" );
}
if( nFmla1Size > 0 )
getFormulaDumper().dumpNameFormula( "formula1", nFmla1Size );
if( nFmla2Size > 0 )
getFormulaDumper().dumpNameFormula( "formula2", nFmla2Size );
dumpCfRuleProp();
if( nFmla1Size > 0 ) getFormulaDumper().dumpNameFormula( "formula1", nFmla1Size );
if( nFmla2Size > 0 ) getFormulaDumper().dumpNameFormula( "formula2", nFmla2Size );
}
break;
case BIFF_ID_CFRULE12:
{
dumpFrHeader( true, true );
dumpDec< sal_uInt8 >( "type", "CFRULE12-TYPE" );
dumpDec< sal_uInt8 >( "operator", "CFRULE-OPERATOR" );
sal_uInt16 nFmla1Size = dumpDec< sal_uInt16 >( "formula1-size" );
sal_uInt16 nFmla2Size = dumpDec< sal_uInt16 >( "formula2-size" );
dumpDxf12Prop();
if( nFmla1Size > 0 ) getFormulaDumper().dumpNameFormula( "formula1", nFmla1Size );
if( nFmla2Size > 0 ) getFormulaDumper().dumpNameFormula( "formula2", nFmla2Size );
getFormulaDumper().dumpNameFormula( "active-formula" );
dumpHex< sal_uInt8 >( "flags", "CFRULE12-FLAGS" );
dumpDec< sal_uInt16 >( "priority" );
dumpCfRule12Param( dumpDec< sal_uInt16 >( "sub-type", "CFRULE12-SUBTYPE" ) );
}
break;
case BIFF_ID_CFRULEEXT:
dumpFrHeader( true, true );
dumpBool< sal_uInt32 >( "cfrule12-follows" );
dumpDec< sal_uInt16 >( "cfheader-id" );
if( rStrm.getRemaining() >= 25 )
{
dumpDec< sal_uInt16 >( "cfrule-idx" );
dumpDec< sal_uInt8 >( "operator", "CFRULE-OPERATOR" );
sal_uInt8 nSubType = dumpDec< sal_uInt8 >( "sub-type", "CFRULE12-SUBTYPE" );
dumpDec< sal_uInt16 >( "priority" );
dumpHex< sal_uInt8 >( "flags", "CFRULEEXT-FLAGS" );
if( dumpBoolean( "has-dxf-data" ) ) dumpDxf12Prop();
dumpCfRule12Param( nSubType );
}
break;
case BIFF_ID_CH3DDATAFORMAT:
dumpDec< sal_uInt8 >( "base", "CH3DDATAFORMAT-BASE" );
dumpDec< sal_uInt8 >( "top", "CH3DDATAFORMAT-TOP" );
@ -1729,10 +1734,9 @@ void WorkbookStreamObject::implDumpRecordBody()
dumpHex< sal_uInt16 >( "flags", "CHCHART3D-FLAGS" );
break;
case BIFF_ID_CHTYPEGROUP:
dumpUnused( 16 );
dumpHex< sal_uInt16 >( "flags", "CHTYPEGROUP-FLAGS" );
if( eBiff >= BIFF5 ) dumpDec< sal_uInt16 >( "group-idx" );
case BIFF_ID_CHECKCOMPAT:
dumpFrHeader( true, true );
dumpBool< sal_uInt32 >( "check-compatibility" );
break;
case BIFF_ID_CHDATAFORMAT:
@ -1961,6 +1965,12 @@ void WorkbookStreamObject::implDumpRecordBody()
if( eBiff == BIFF8 ) dumpDec< sal_uInt16 >( "label-rotation", "TEXTROTATION" );
break;
case BIFF_ID_CHTYPEGROUP:
dumpUnused( 16 );
dumpHex< sal_uInt16 >( "flags", "CHTYPEGROUP-FLAGS" );
if( eBiff >= BIFF5 ) dumpDec< sal_uInt16 >( "group-idx" );
break;
case BIFF_ID_CHVALUERANGE:
dumpDec< double >( "minimum" );
dumpDec< double >( "maximum" );
@ -1999,6 +2009,11 @@ void WorkbookStreamObject::implDumpRecordBody()
dumpDec< sal_uInt16 >( "col-width", "CONV-COLWIDTH" );
break;
case BIFF_ID_COMPRESSPICS:
dumpFrHeader( true, true );
dumpBool< sal_uInt32 >( "recommend-compress-pics" );
break;
case BIFF_ID_CONT:
if( (eBiff == BIFF8) && (getLastRecId() == BIFF_ID_OBJ) )
dumpEmbeddedDff();
@ -2018,6 +2033,11 @@ void WorkbookStreamObject::implDumpRecordBody()
}
break;
case BIFF_ID_COUNTRY:
dumpDec< sal_uInt16 >( "ui-country", "COUNTRY" );
dumpDec< sal_uInt16 >( "sys-country", "COUNTRY" );
break;
case BIFF_ID_CRN:
{
sal_Int32 nCol2 = dumpColIndex( "last-col-idx", false );
@ -2098,6 +2118,13 @@ void WorkbookStreamObject::implDumpRecordBody()
dumpDec< sal_Int32 >( "dval-entry-count" );
break;
case BIFF_ID_DBCELL:
dumpDec< sal_uInt32 >( "reverse-offset-to-row" );
out().resetItemIndex();
while( rStrm.getRemaining() >= 2 )
dumpDec< sal_uInt16 >( "#cell-offset" );
break;
case BIFF2_ID_DEFINEDNAME:
case BIFF3_ID_DEFINEDNAME:
{
@ -2143,6 +2170,12 @@ void WorkbookStreamObject::implDumpRecordBody()
if( nRecId == BIFF3_ID_DIMENSION ) dumpUnused( 2 );
break;
case BIFF_ID_DXF:
dumpFrHeader( true, true );
dumpHex< sal_uInt16 >( "flags", "DXF-FLAGS" );
dumpDxfProp();
break;
case BIFF_ID_EXTERNALBOOK:
{
sal_uInt16 nCount = dumpDec< sal_uInt16 >( "sheet-count" );
@ -2255,6 +2288,11 @@ void WorkbookStreamObject::implDumpRecordBody()
dumpFontRec();
break;
case BIFF_ID_FORCEFULLCALC:
dumpFrHeader( true, true );
dumpBool< sal_Int32 >( "recalc-all-formulas" );
break;
case BIFF2_ID_FORMAT:
case BIFF4_ID_FORMAT:
dumpFormatRec();
@ -2275,11 +2313,34 @@ void WorkbookStreamObject::implDumpRecordBody()
dumpString( "footer", BIFF_STR_8BITLENGTH );
break;
case BIFF_ID_GUTS:
dumpDec< sal_uInt16 >( "row-outlines-width" );
dumpDec< sal_uInt16 >( "column-outlines-height" );
dumpDec< sal_uInt16 >( "row-levels", "GUTS-LEVELS" );
dumpDec< sal_uInt16 >( "column-levels", "GUTS-LEVELS" );
break;
case BIFF_ID_HEADER:
if( rStrm.getRemaining() > 0 )
dumpString( "header", BIFF_STR_8BITLENGTH );
break;
case BIFF_ID_HEADERFOOTER:
{
dumpFrHeader( true, true );
dumpGuid( "view-guid" );
dumpHex< sal_uInt16 >( "flags", "HEADERFOOTER-FLAGS" );
sal_uInt16 nEvenHLen = dumpDec< sal_uInt16 >( "even-h-len" );
sal_uInt16 nEvenFLen = dumpDec< sal_uInt16 >( "even-f-len" );
sal_uInt16 nFirstHLen = dumpDec< sal_uInt16 >( "first-h-len" );
sal_uInt16 nFirstFLen = dumpDec< sal_uInt16 >( "first-f-len" );
if( nEvenHLen > 0 ) dumpUniString( "even-h" );
if( nEvenFLen > 0 ) dumpUniString( "even-f" );
if( nFirstHLen > 0 ) dumpUniString( "first-h" );
if( nFirstFLen > 0 ) dumpUniString( "first-f" );
}
break;
case BIFF_ID_HYPERLINK:
dumpRange();
if( cfg().getStringOption( dumpGuid( "guid" ), OUString() ).equalsAscii( "StdHlink" ) )
@ -2307,6 +2368,20 @@ void WorkbookStreamObject::implDumpRecordBody()
}
break;
case BIFF2_ID_INDEX:
case BIFF3_ID_INDEX:
if( eBiff <= BIFF4 )
dumpHex< sal_uInt32 >( "first-defname-pos", "CONV-DEC" );
else
dumpUnused( 4 );
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();
while( rStrm.getRemaining() >= 4 )
dumpHex< sal_uInt32 >( "#first-row-pos-of-block", "CONV-DEC" );
break;
case BIFF2_ID_INTEGER:
dumpCellHeader( true );
dumpDec< sal_uInt16 >( "value" );
@ -2341,6 +2416,13 @@ void WorkbookStreamObject::implDumpRecordBody()
mbHasDff = true;
break;
case BIFF_ID_MTHREADSETTINGS:
dumpFrHeader( true, true );
dumpBool< sal_Int32 >( "multi-thread-enabled" );
dumpBool< sal_Int32 >( "manual-thread-count" );
dumpDec< sal_Int32 >( "thread-count" );
break;
case BIFF_ID_MULTBLANK:
{
Address aPos = dumpAddress();
@ -2398,6 +2480,12 @@ void WorkbookStreamObject::implDumpRecordBody()
dumpObjRec();
break;
case BIFF_ID_PAGELAYOUTVIEW:
dumpFrHeader( true, true );
dumpDec< sal_uInt16 >( "scaling", "CONV-PERCENT" );
dumpHex< sal_uInt16 >( "flags", "PAGELAYOUTVIEW-FLAGS" );
break;
case BIFF_ID_PAGESETUP:
dumpDec< sal_uInt16 >( "paper-size", "PAGESETUP-PAPERSIZE" );
dumpDec< sal_uInt16 >( "scaling", "CONV-PERCENT" );
@ -2570,6 +2658,11 @@ void WorkbookStreamObject::implDumpRecordBody()
}
break;
case BIFF_ID_RECALCID:
dumpFrHeader( true, false );
dumpDec< sal_uInt32 >( "recalc-engine-id" );
break;
case BIFF_ID_RK:
dumpCellHeader();
dumpRk( "value" );
@ -2661,6 +2754,20 @@ void WorkbookStreamObject::implDumpRecordBody()
dumpRangeList( "selection", false );
break;
case BIFF_ID_SHAREDFEATHEAD:
{
dumpFrHeader( true, true );
sal_uInt16 nType = dumpDec< sal_uInt16 >( "feature-type", "SHAREDFEATHEAD-TYPE" );
dumpUnused( 1 );
if( dumpBool< sal_Int32 >( "has-data" ) ) switch( nType )
{
case 2:
dumpHex< sal_uInt32 >( "allowed-flags", "SHAREDFEATHEAD-PROT-FLAGS" );
break;
}
}
break;
case BIFF_ID_SHAREDFMLA:
dumpRange( "formula-range", false );
dumpUnused( 1 );
@ -2680,18 +2787,22 @@ void WorkbookStreamObject::implDumpRecordBody()
dumpString( "sheet-name", BIFF_STR_8BITLENGTH, BIFF_STR_8BITLENGTH );
break;
case BIFF_ID_SHEETEXT:
dumpFrHeader( true, true );
dumpDec< sal_uInt32 >( "rec-size" );
dumpDec< sal_uInt32 >( "flags-1", "SHEETEXT-FLAGS1" );
if( rStrm.getRemaining() >= 20 )
{
dumpDec< sal_uInt32 >( "flags-2", "SHEETEXT-FLAGS2" );
dumpExtCfColor( "tab-color" );
}
break;
case BIFF_ID_SHEETHEADER:
dumpHex< sal_uInt32 >( "substream-size", "CONV-DEC" );
dumpByteString( "sheet-name", BIFF_STR_8BITLENGTH );
break;
case BIFF_ID_SHEETPROTECTION:
dumpFrHeader( true, true );
dumpUnused( 7 );
dumpHex< sal_uInt16 >( "allowed-flags", "SHEETPROTECTION-FLAGS" );
dumpUnused( 2 );
break;
case BIFF_ID_SST:
dumpDec< sal_uInt32 >( "string-cell-count" );
dumpDec< sal_uInt32 >( "sst-size" );
@ -2725,6 +2836,7 @@ void WorkbookStreamObject::implDumpRecordBody()
dumpDec< sal_Int8 >( "builtin-idx", "STYLEEXT-BUILTIN" );
dumpDec< sal_Int8 >( "outline-level" );
dumpUnicodeArray( "style-name", rStrm.readuInt16() );
dumpDxfProp();
break;
case BIFF_ID_SXEXT:
@ -2739,6 +2851,22 @@ void WorkbookStreamObject::implDumpRecordBody()
}
break;
case BIFF_ID_TABLESTYLES:
{
dumpFrHeader( true, true );
dumpDec< sal_uInt32 >( "table-style-count" );
sal_uInt16 nDefTableLen, nDefPivotLen;
rStrm >> nDefTableLen >> nDefPivotLen;
dumpUnicodeArray( "def-table-style", nDefTableLen );
dumpUnicodeArray( "def-pivot-style", nDefPivotLen );
}
break;
case BIFF_ID_THEME:
dumpFrHeader( true, true );
dumpDec< sal_uInt32 >( "theme-version", "THEME-VERSION" );
break;
case BIFF_ID_TXO:
dumpHex< sal_uInt16 >( "flags", "TXO-FLAGS" );
dumpDec< sal_uInt16 >( "orientation", "TEXTORIENTATION" );
@ -2813,6 +2941,21 @@ void WorkbookStreamObject::implDumpRecordBody()
case BIFF5_ID_XF:
dumpXfRec();
break;
case BIFF_ID_XFCRC:
dumpFrHeader( true, true );
dumpUnused( 2 );
dumpDec< sal_uInt16 >( "xf-count" );
dumpHex< sal_uInt32 >( "xf-checksum" );
break;
case BIFF_ID_XFEXT:
dumpFrHeader( true, true );
dumpUnused( 2 );
dumpXfIdx( "xf-idx" );
dumpUnused( 2 );
dumpXfExtProp();
break;
}
}
@ -2851,12 +2994,12 @@ sal_uInt16 WorkbookStreamObject::dumpColorIdx( const String& rName, bool b16Bit
sal_uInt16 WorkbookStreamObject::dumpFontIdx( const String& rName, bool b16Bit )
{
return dumpDec< sal_uInt16, sal_uInt8 >( b16Bit, rName( "font-idx" ), "FONTNAMES" );
return dumpDec< sal_uInt16, sal_uInt8 >( b16Bit, rName( "font-idx" ), mxFontNames );
}
sal_uInt16 WorkbookStreamObject::dumpFormatIdx( const String& rName )
{
return dumpDec< sal_uInt16, sal_uInt8 >( getBiff() >= BIFF5, rName( "fmt-idx" ), "FORMATS" );
return dumpDec< sal_uInt16, sal_uInt8 >( getBiff() >= BIFF5, rName( "fmt-idx" ), mxFormats );
}
sal_uInt16 WorkbookStreamObject::dumpXfIdx( const String& rName, bool bBiff2Style )
@ -2874,6 +3017,54 @@ sal_uInt16 WorkbookStreamObject::dumpXfIdx( const String& rName, bool bBiff2Styl
return nXfIdx;
}
void WorkbookStreamObject::dumpExtColorValue( sal_uInt32 nColorType )
{
switch( nColorType )
{
case 0: dumpUnused( 4 ); break;
case 1: dumpDec< sal_uInt32 >( "color-idx", mxColors ); break;
case 2: dumpColorABGR(); break;
case 3: dumpDec< sal_uInt32 >( "theme-id" ); break;
case 4: dumpUnused( 4 ); break;
default: dumpUnknown( 4 );
}
}
void WorkbookStreamObject::dumpExtColor( const String& rName )
{
MultiItemsGuard aMultiGuard( out() );
writeEmptyItem( rName( "color" ) );
switch( extractValue< sal_uInt8 >( dumpDec< sal_uInt8 >( "flags", "EXTCOLOR-FLAGS" ), 1, 7 ) )
{
case 0: dumpUnused( 1 ); break;
case 1: dumpColorIdx( "color-idx", false ); break;
case 2: dumpUnused( 1 ); break;
case 3: dumpDec< sal_uInt8 >( "theme-id" ); break;
case 4: dumpUnused( 1 ); break;
default: dumpUnknown( 1 );
}
dumpDec< sal_Int16 >( "tint", "CONV-TINT" );
dumpColorABGR();
}
void WorkbookStreamObject::dumpExtCfColor( const String& rName )
{
MultiItemsGuard aMultiGuard( out() );
writeEmptyItem( rName( "color" ) );
dumpExtColorValue( dumpExtColorType< sal_uInt32 >() );
dumpDec< double >( "tint", "CONV-FLOAT-TO-PERC" );
}
void WorkbookStreamObject::dumpExtGradientHead()
{
dumpDec< sal_Int32 >( "gradient-type", "EXTGRADIENT-TYPE" );
dumpDec< double >( "linear-angle" );
dumpDec< double >( "pos-left" );
dumpDec< double >( "pos-right" );
dumpDec< double >( "pos-top" );
dumpDec< double >( "pos-bottom" );
}
OUString WorkbookStreamObject::dumpPivotString( const String& rName, sal_uInt16 nStrLen )
{
OUString aString;
@ -2910,6 +3101,285 @@ void WorkbookStreamObject::dumpBoolErr()
writeBooleanItem( "boolean", nValue );
}
void WorkbookStreamObject::dumpCfRuleProp()
{
BiffInputStream& rStrm = getBiffStream();
sal_uInt32 nFlags1 = dumpHex< sal_uInt32 >( "flags-1", "CFRULE-FLAGS1" );
sal_uInt16 nFlags2 = dumpHex< sal_uInt16 >( "flags-2", "CFRULE-FLAGS2" );
if( getFlag< sal_uInt32 >( nFlags1, 0x02000000 ) )
{
writeEmptyItem( "numfmt-block" );
IndentGuard aIndGuard( out() );
if( getFlag< sal_uInt16 >( nFlags2, 0x0001 ) )
{
dumpDec< sal_uInt16 >( "size" );
dumpUniString( "numfmt" );
}
else
{
dumpUnused( 1 );
dumpDec< sal_uInt8 >( "fmt-idx", mxFormats );
}
}
if( getFlag< sal_uInt32 >( nFlags1, 0x04000000 ) )
{
writeEmptyItem( "font-block" );
IndentGuard aIndGuard( out() );
sal_Int64 nRecPos = rStrm.tell();
dumpUniString( "name", BIFF_STR_8BITLENGTH );
dumpUnused( static_cast< sal_Int32 >( nRecPos + 64 - rStrm.tell() ) );
dumpDec< sal_Int32 >( "height", "CONV-TWIP-TO-PT" );
dumpHex< sal_uInt32 >( "flags", "CFRULE-FONTFLAGS" );
dumpDec< sal_Int16 >( "weight", "CFRULE-FONTWEIGHT" );
dumpDec< sal_Int16 >( "escapement", "CFRULE-FONTESCAPEMENT" );
dumpDec< sal_Int8 >( "underline", "CFRULE-FONTUNDERLINE" );
dumpDec< sal_uInt8 >( "family", "FONT-FAMILY" );
dumpDec< sal_uInt8 >( "charset", "CHARSET" );
dumpUnused( 1 );
dumpDec< sal_Int32 >( "color", "CFRULE-FONTCOLOR" );
dumpUnused( 4 );
dumpHex< sal_uInt32 >( "used-flags", "CFRULE-FONTUSEDFLAGS" );
dumpDec< sal_uInt32 >( "escapement-used", "CFRULE-FONTUSED" );
dumpDec< sal_uInt32 >( "underline-used", "CFRULE-FONTUSED" );
dumpDec< sal_uInt32 >( "weight-used", "CFRULE-FONTUSED" );
dumpUnused( 4 );
dumpDec< sal_Int32 >( "first-char" );
dumpDec< sal_Int32 >( "char-count" );
dumpDec< sal_uInt16 >( "font-idx" );
}
if( getFlag< sal_uInt32 >( nFlags1, 0x08000000 ) )
{
writeEmptyItem( "alignment-block" );
IndentGuard aIndGuard( out() );
dumpHex< sal_uInt8 >( "alignent", "CFRULE-ALIGNMENT" );
dumpHex< sal_uInt8 >( "rotation", "TEXTROTATION" );
dumpHex< sal_uInt16 >( "indent", "CFRULE-INDENT" );
dumpDec< sal_Int32 >( "relative-indent" );
}
if( getFlag< sal_uInt32 >( nFlags1, 0x10000000 ) )
{
writeEmptyItem( "border-block" );
IndentGuard aIndGuard( out() );
dumpHex< sal_uInt16 >( "border-style", "XF-BORDERSTYLE" );
dumpHex< sal_uInt16 >( "border-color1", "XF-BORDERCOLOR1" );
dumpHex< sal_uInt32 >( "border-color2", "CFRULE-BORDERCOLOR2" );
}
if( getFlag< sal_uInt32 >( nFlags1, 0x20000000 ) )
{
writeEmptyItem( "pattern-block" );
IndentGuard aIndGuard( out() );
dumpHex< sal_uInt32 >( "pattern", "CFRULE-FILLBLOCK" );
}
if( getFlag< sal_uInt32 >( nFlags1, 0x40000000 ) )
{
writeEmptyItem( "protection-block" );
IndentGuard aIndGuard( out() );
dumpHex< sal_uInt16 >( "flags", "CFRULE-PROTECTION-FLAGS" );
}
}
void WorkbookStreamObject::dumpXfExtProp()
{
BiffInputStream& rStrm = getBiffStream();
for( sal_uInt16 nIndex = 0, nCount = dumpDec< sal_uInt16 >( "subrec-count" ); !rStrm.isEof() && (nIndex < nCount); ++nIndex )
{
out().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() );
switch( nSubRecId )
{
case 4: case 5: case 7: case 8: case 9: case 10: case 11: case 13:
{
sal_uInt16 nColorType = dumpExtColorType< sal_uInt16 >();
dumpDec< sal_Int16 >( "tint", "CONV-TINT" );
dumpExtColorValue( nColorType );
dumpUnused( 8 );
}
break;
case 6:
dumpExtGradientHead();
out().resetItemIndex();
for( sal_Int32 nStop = 0, nStopCount = dumpDec< sal_Int32 >( "stop-count" ); (nStop < nStopCount) && !in().isEof(); ++nStop )
{
writeEmptyItem( "#stop" );
IndentGuard aIndGuard( out() );
sal_uInt16 nColorType = dumpExtColorType< sal_uInt16 >();
dumpExtColorValue( nColorType );
dumpDec< double >( "stop-pos" );
dumpDec< double >( "tint", "CONV-FLOAT-TO-PERC" );
}
break;
case 14:
dumpDec< sal_Int8 >( "font-scheme", "EXTFONT-SCHEME" );
break;
case 15:
dumpDec< sal_uInt16 >( "indent" );
break;
}
dumpRemainingTo( nEndPos );
}
}
void WorkbookStreamObject::dumpDxfProp()
{
BiffInputStream& rStrm = getBiffStream();
dumpUnused( 2 );
for( sal_uInt16 nIndex = 0, nCount = dumpDec< sal_uInt16 >( "subrec-count" ); !rStrm.isEof() && (nIndex < nCount); ++nIndex )
{
out().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() );
switch( nSubRecId )
{
case 0:
dumpDec< sal_uInt8 >( "pattern", mxFillPatterns );
break;
case 1: case 2: case 5:
dumpExtColor();
break;
case 3:
dumpExtGradientHead();
break;
case 4:
dumpDec< sal_uInt16 >( "index" );
dumpDec< double >( "stop-position" );
dumpExtColor( "stop-color" );
break;
case 6: case 7: case 8: case 9: case 10: case 11: case 12:
dumpExtColor( "color" );
dumpDec< sal_uInt16 >( "style", mxBorderStyles );
break;
case 13: case 14:
dumpBoolean( "value" );
break;
case 15:
dumpDec< sal_uInt8 >( "alignment", "XF-HORALIGN" );
break;
case 16:
dumpDec< sal_uInt8 >( "alignment", "XF-VERALIGN" );
break;
case 17:
dumpDec< sal_uInt8 >( "rotation", "TEXTROTATION" );
break;
case 18:
dumpDec< sal_uInt16 >( "indent" );
break;
case 19:
dumpDec< sal_uInt8 >( "text-dir", "XF-TEXTDIRECTION" );
break;
case 20: case 21: case 22: case 23:
dumpBoolean( "value" );
break;
case 24:
dumpUnicodeArray( "name", rStrm.readuInt16() );
break;
case 25:
dumpDec< sal_uInt16 >( "weight", "FONT-WEIGHT" );
break;
case 26:
dumpDec< sal_uInt16 >( "underline", "FONT-UNDERLINE" );
break;
case 27:
dumpDec< sal_uInt16 >( "escapement", "FONT-ESCAPEMENT" );
break;
case 28: case 29: case 30: case 31: case 32: case 33:
dumpBoolean( "value" );
break;
case 34:
dumpDec< sal_uInt8 >( "charset", "CHARSET" );
break;
case 35:
dumpDec< sal_uInt8 >( "family", "FONT-FAMILY" );
break;
case 36:
dumpDec< sal_Int32 >( "height", "CONV-TWIP-TO-PT" );
break;
case 37:
dumpDec< sal_uInt8 >( "scheme", "EXTFONT-SCHEME" );
break;
case 38:
dumpUnicodeArray( "numfmt", rStrm.readuInt16() );
break;
case 41:
dumpDec< sal_uInt16 >( "fmt-idx", mxFormats );
break;
case 42:
dumpDec< sal_Int16 >( "relative-indent" );
break;
case 43: case 44:
dumpBoolean( "value" );
break;
}
dumpRemainingTo( nEndPos );
}
}
void WorkbookStreamObject::dumpDxf12Prop()
{
BiffInputStream& rStrm = getBiffStream();
writeEmptyItem( "dxf-data" );
IndentGuard aIndGuard( out() );
sal_uInt32 nSize = dumpDec< sal_uInt32 >( "dxf-size" );
if( nSize == 0 )
{
dumpUnused( 2 );
}
else
{
sal_Int64 nEndPos = rStrm.tell() + nSize;
dumpCfRuleProp();
if( rStrm.tell() + 8 <= nEndPos )
{
dumpUnused( 6 );
dumpXfExtProp();
}
dumpRemainingTo( nEndPos );
}
}
void WorkbookStreamObject::dumpCfRule12Param( sal_uInt16 nSubType )
{
sal_uInt8 nSize = dumpDec< sal_uInt8 >( "params-size" );
sal_Int64 nEndPos = getBiffStream().tell() + nSize;
{
writeEmptyItem( "params" );
IndentGuard aIndGuard( out() );
switch( nSubType )
{
case 5:
dumpHex< sal_uInt8 >( "flags", "CFRULE12-TOP10-FLAGS" );
dumpDec< sal_uInt16 >( "rank" );
dumpUnused( 13 );
break;
case 8:
dumpDec< sal_uInt16 >( "operator", "CFRULE12-TEXT-OPERATOR" );
dumpUnused( 14 );
break;
case 15: case 16: case 17: case 18: case 19: case 20: case 21: case 22: case 23: case 24:
dumpDec< sal_uInt16 >( "operator", "CFRULE12-DATE-OPERATOR" );
dumpUnused( 14 );
break;
case 25: case 26: case 29: case 30:
dumpDec< sal_uInt16 >( "std-dev" );
dumpUnused( 14 );
break;
default:
dumpUnused( 16 );
}
}
dumpRemainingTo( nEndPos );
}
void WorkbookStreamObject::dumpFontRec()
{
sal_uInt16 nFontId = getBiffData().getFontCount();

View file

@ -29,6 +29,7 @@ merge-continue-record=1
unitconverter=CONV-PERCENT-NEG,-1,%
unitconverter=CONV-COLWIDTH,/256,chars
unitconverter=CONV-TINT,/327.67,%
shortlist=BIFF,0,biff2,biff3,biff4,biff5,biff8
@ -42,30 +43,57 @@ constlist=ERRORCODES
0x2A=#N/A
end
shortlist=EGA-COLORS,0,ega-black,ega-white,ega-red,ega-green,ega-blue,ega-yellow,ega-magenta,ega-cyan
shortlist=WINDOWS-PALETTE-0,0,black,white,red,green,blue,yellow,magenta,cyan
shortlist=WINDOWS-PALETTE-8,8,black,white,red,green,blue,yellow,magenta,cyan
shortlist=WINDOWS-PALETTE-16,16,dark-red,dark-green,dark-blue,dark-yellow,dark-magenta,dark-cyan,light-grey,dark-grey
constlist=COLORS-BIFF2
include=EGA-COLORS
default=
24=sys-window-text
25=sys-window-bg
multilist=WINDOWS-SYSCOLORS-BIFF2
24=sys-window-text,sys-window-bg
0x7FFF=sys-window-text
end
constlist=COLORS-BIFF5
include=EGA-COLORS
default=
64=sys-window-text
65=sys-window-bg
67=sys-button-face
77=sys-window-text-chart
78=sys-window-bg-chart
79=auto-border-chart
80=sys-tooltip-bg
81=sys-tooltip-text
multilist=WINDOWS-SYSCOLORS-BIFF5
64=sys-window-text,sys-window-bg,,sys-button-face
77=sys-window-text-chart,sys-window-bg-chart,auto-border-chart,sys-tooltip-bg,sys-tooltip-text
0x7FFF=sys-window-text
end
constlist=COLORS-BIFF2
include=WINDOWS-PALETTE-0
include=WINDOWS-SYSCOLORS-BIFF2
end
constlist=COLORS-BIFF3
include=WINDOWS-PALETTE-0
include=WINDOWS-PALETTE-8
include=WINDOWS-PALETTE-16
include=WINDOWS-SYSCOLORS-BIFF2
end
multilist=COLORS-BIFF5
include=WINDOWS-PALETTE-0
include=WINDOWS-PALETTE-8
include=WINDOWS-PALETTE-16
24=0x8080FF,0x802060,0xFFFFC0,0xA0E0E0,0x600080,0xFF8080,0x0080C0,0xC0C0FF
32=0x000080,0xFF00FF,0xFFFF00,0x00FFFF,0x800080,0x800000,0x008080,0x0000FF
40=0x00CFFF,0x69FFFF,0xE0FFE0,0xFFFF80,0xA6CAF0,0xDD9CB3,0xB38FEE,0xE3E3E3
48=0x2A6FF9,0x3FB8CD,0x488436,0x958C41,0x8E5E42,0xA0627A,0x624FAC,0x969696
56=0x1D2FBE,0x286676,0x004500,0x453E01,0x6A2813,0x85396A,0x4A3285,0x424242
include=WINDOWS-SYSCOLORS-BIFF5
end
multilist=COLORS-BIFF8
include=WINDOWS-PALETTE-0
include=WINDOWS-PALETTE-8
include=WINDOWS-PALETTE-16
24=0x9999FF,0x993366,0xFFFFCC,0xCCFFFF,0x660066,0xFF8080,0x0066CC,0xCCCCFF
32=0x000080,0xFF00FF,0xFFFF00,0x00FFFF,0x800080,0x800000,0x008080,0x0000FF
40=0x00CCFF,0xCCFFFF,0xCCFFCC,0xFFFF99,0x99CCFF,0xFF99CC,0xCC99FF,0xFFCC99
48=0x3366FF,0x33CCCC,0x99CC00,0xFFCC00,0xFF9900,0xFF6600,0x666699,0x969696
56=0x003366,0x339966,0x003300,0x333300,0x993300,0x993366,0x333399,0x333333
include=WINDOWS-SYSCOLORS-BIFF5
end
shortlist=BORDERSTYLES-BIFF3,0,none,thin,medium,dash,dot,thick,double,hair
multilist=BORDERSTYLES-BIFF8
@ -130,6 +158,17 @@ flagslist=FR-FLAGS
0x0002=alert-unsupported
end
shortlist=EXTCOLOR-TYPE,0,auto,indexed,rgb,theme,n/a
combilist=EXTCOLOR-FLAGS
0x01=rgb-valid
0xFE=uint8,dec,type,EXTCOLOR-TYPE
end
shortlist=EXTGRADIENT-TYPE,0,linear,path
shortlist=EXTFONT-SCHEME,-1,n/a,none,major,minor
# DFF ------------------------------------------------------------------------
flagslist=DFF-CLIENTANCHOR-FLAGS
@ -265,7 +304,7 @@ multilist=RECORD-NAMES-BIFF3
0x0088=EDG,PUB,NOTEOFF,LH,COUNTRY,HIDEOBJ,,
0x0090=SORT,SUB,PALETTE,,LHRECORD,LHNGRAPH,,
0x0200=,,,,,,FORMULA,STRING
0x0208=ROW,BOF,,INDEX,,,,
0x0208=ROW,BOF,,,,,,
0x0218=DEFINEDNAME
0x0221=ARRAY
0x0223=EXTERNALNAME
@ -308,13 +347,14 @@ multilist=RECORD-NAMES-BIFF5
0x0098=,,,FILTERMODE,,AUTOFILTERINFO,AUTOFILTER,
0x00A8=,,,,,,SCENARIOS,SCENARIO
0x00B0=PTDEFINITION,PTFIELD,PTFITEM,,PTROWCOLFIELDS,PTROWCOLITEMS,PTPAGEFIELDS,
0x00B8=DOCROUTE,RECIPNAME,,,SHAREDFMLA,MULTRK,MULTBLANK,TOOLBARHDR
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
0x00D8=PCDFRANGEPR,PCDFDISCRETEPR,BOOKBOOL,REVERT,SXEXT|PARAMQRY,SCENPROTECT,OLESIZE,UDDESC
0x00E0=XF,INTERFACEHDR,INTERFACEEND,PCDSOURCE,,,,
0x0206=FORMULA
0x04BC=SHAREDFMLA
# chart records
exclude=0x1004,0x102D,0x102F,0x1036,0x1037,0x1038,0x103B
0x1040=CHRADARAREA,CHAXESSET,,CHLEGENDENTRY,CHPROPERTIES,CHSERGROUP,CHUSEDAXESSETS,
@ -342,13 +382,17 @@ multilist=RECORD-NAMES-BIFF8
0x01A8=,USERBVIEW,USERSVIEWBEGIN,USERSVIEWEND,,QSI,EXTERNALBOOK,PROT4REV
0x01B0=CFHEADER,CFRULE,DATAVALIDATIONS,,,DCONBINAME,TXO,REFRESHALL
0x01B8=HYPERLINK,NLRDELNAME,CODENAME,PCDFSQLTYPE,PROT4REVPASS,,DATAVALIDATION,
0x01C0=XL9FILE,,,,,,,
0x01C0=XL9FILE,RECALCID,INTCACHEDDATA,,,,,
0x0800=SCREENTIP,,,WEBQRYSETTINGS,WEBQRYTABLES,,,
0x0850=CHFRINFO,CHFRWRAPPER,CHFRBLOCKBEGIN,CHFRBLOCKEND,,,,CHFRUNITPROPS
0x0858=CHPIVOTREF,CHPIVOTFLAGS,,,,,,
0x0860=,,SHEETLAYOUT,,,,,SHEETPROTECTION
0x0860=,,SHEETEXT,BOOKEXT,,,,SHAREDFEATHEAD
0x0868=,,,CHFRLABELPROPS,,,,
0x0890=,,STYLEEXT,,,,,
0x0878=,,CFRULE12,CFRULEEXT,XFCRC,XFEXT,,
0x0888=,,,PAGELAYOUTVIEW,CHECKCOMPAT,DXF,TABLESTYLES,
0x0890=,,STYLEEXT,,,,THEME,
0x0898=,,MTHREADSETTINGS,COMPRESSPICS,HEADERFOOTER,,,
0x08A0=,,,FORCEFULLCALC,,,,
# chart records
0x1058=,,,,,,,CH3DDATAFORMAT
0x1060=CHFONTBASE,CHPIEEXT,CHLABELRANGE2,CHDATATABLE,CHPLOTGROWTH,CHSERINDEX,CHESCHERFORMAT,CHPIEEXTSETT
@ -476,7 +520,7 @@ constlist=BOF-SHEETTYPE
0x0100=workspace
end
shortlist=BOF-EXCELVERSION,0,excel-97,excel-2000,excel-2002,excel-2003,excel-2007
shortlist=BOF-EXCELVERSION,0,excel-97,excel-2000,excel-2002,excel-2003,excel-2007,,excel-2010
shortlist=BOF-LOWESTVERSION-BIFF,6,biff8
combilist=BOF-HISTORY-FLAGS
@ -499,17 +543,50 @@ combilist=BOF-LOWESTVERSION-FLAGS
0x00000F00=uint8,dec,version-saved,BOF-EXCELVERSION
end
# BOOKEXT --------------------------------------------------------------------
combilist=BOOKEXT-FLAGS1
0x00000001=no-auto-recover
0x00000002=hide-pivot-list
0x00000004=filter-privacy
0x00000008=embed-smarttags
0x00000030=uint8,dec,display-smarttags,BOOKEXT-DISPLAY-SMARTTAGS
0x00000040=saved-on-recovery
0x00000080=minimal-save
0x00000100=opened-on-recovery
0x00000200=opened-in-save-mode
end
shortlist=BOOKEXT-DISPLAY-SMARTTAGS,0,button-and-indicator,button,nothing
flagslist=BOOKEXT-FLAGS2
0x01=warn-smart-doc-manifest
0x02=show-inc-annotations
end
flagslist=BOOKEXT-FLAGS3
0x02=!all-published!selected-items-published
0x04=show-pivot-chart-filter
end
# CALCMODE -------------------------------------------------------------------
shortlist=CALCMODE,-1,automatic-no-table,manual,automatic
# CFHEADER -------------------------------------------------------------------
combilist=CFHEADER-FLAGS
0x0001=complex
0xFFFE=uint16,dec,id
end
# CFRULE ---------------------------------------------------------------------
shortlist=CFRULE-TYPE,1,value,formula
shortlist=CFRULE-OPERATOR,0,none,between,not-between,equal,not-equal,greater-than,less-than,greater-equal,less-equal
flagslist=CFRULE-FLAGS
ignore=0x00380080
flagslist=CFRULE-FLAGS1
ignore=0x00200000
0x00000001=!hor-align-used
0x00000002=!vert-align-used
0x00000004=!text-wrap-used
@ -517,6 +594,7 @@ flagslist=CFRULE-FLAGS
0x00000010=!justify-lastline-used
0x00000020=!indent-used
0x00000040=!shrinktofit-used
0x00000080=!cell-merged-used
0x00000100=!cell-locked-used
0x00000200=!cell-hidden-used
0x00000400=!left-border-used
@ -528,6 +606,9 @@ flagslist=CFRULE-FLAGS
0x00010000=!fill-pattern-used
0x00020000=!fg-color-idx-used
0x00040000=!bg-color-idx-used
0x00080000=!fmt-idx-used
0x00100000=!def-font-used
0x02000000=numfmt-block
0x04000000=font-block
0x08000000=alignment-block
0x10000000=border-block
@ -536,6 +617,13 @@ flagslist=CFRULE-FLAGS
0x80000000=!text-dir-used
end
flagslist=CFRULE-FLAGS2
ignore=0x0002
0x0001=!numfmt-id!numfmt-string
0x0004=outline-border
0x8000=use-text-dir
end
combilist=CFRULE-ALIGNMENT
0x07=uint8,dec,hor-align,XF-HORALIGN
0x08=text-wrap
@ -546,6 +634,7 @@ end
combilist=CFRULE-INDENT
0x000F=uint8,dec,indent
0x0010=shrink-to-fit
0x0020=cell-merged
0x00C0=uint8,dec,text-dir,XF-TEXTDIRECTION
end
@ -558,7 +647,28 @@ flagslist=CFRULE-FONTFLAGS
0x00000080=strikeout
end
constlist=CFRULE-FONTWEIGHT
include=FONT-WEIGHT
-1=unused
end
constlist=CFRULE-FONTESCAPEMENT
include=FONT-ESCAPEMENT
-1=unused
end
constlist=CFRULE-FONTUNDERLINE
include=FONT-UNDERLINE
-1=unused
end
constlist=CFRULE-FONTCOLOR
include=COLORS-BIFF8
-1=unused
end
flagslist=CFRULE-FONTUSEDFLAGS
ignore=0xFFFFFF00
0x00000002=!italic-used
0x00000008=!outline-used
0x00000010=!shadow-used
@ -590,6 +700,36 @@ flagslist=CFRULE-PROTECTION-FLAGS
0x0002=formula-hidden
end
# CFRULE12 -------------------------------------------------------------------
shortlist=CFRULE12-TYPE,1,cell-is,expression,color-scale,data-bar,top-ten,icon-set
flagslist=CFRULE12-FLAGS
0x0002=stop-if-true
end
multilist=CFRULE12-SUBTYPE
0=cell-is,expression,color-scale,data-bar,icon-set,top-ten,,unique-values,contains-text,contains-blanks
10=not-contains-blanks,contains-errors,not-contains-errors,,,today,tomorrow,yesterday,last-7-days,last-month
20=next-month,this-week,next-week,last-week,this-month,above-average,below-average,duplicate-values,,equal-above-average
30=equal-below-average
end
flagslist=CFRULE12-TOP10-FLAGS
0x01=!bottom!top
0x02=percent
end
shortlist=CFRULE12-TEXT-OPERATOR,0,contains,not-contains,begins-with,ends-with
shortlist=CFRULE12-DATE-OPERATOR,0,today,yesterday,last-7-days,this-week,last-week,last-month,tomorrow,next-week,next-month,this-month
# CFRULEEXT ------------------------------------------------------------------
flagslist=CFRULEEXT-FLAGS
0x0001=active
0x0002=stop-if-true
end
# CH3DDATAFORMAT -------------------------------------------------------------
shortlist=CH3DDATAFORMAT-BASE,0,rectangular,circular
@ -1071,6 +1211,25 @@ flagslist=DEFROWHEIGHT-FLAGS-BIFF3
0x0008=thick-bottom
end
# DXF ------------------------------------------------------------------------
flagslist=DXF-FLAGS
0x0001=!swap-fg-bg-color
0x0002=use-internal-borders
end
multilist=DXF-SUBREC
0=FILL-PATTERN,FILL-FGCOLOR,FILL-BGCOLOR,FILL-GRADIENT,FILL-STOP
5=FONT-COLOR,BORDER-TOP,BORDER-BOTTOM,BORDER-LEFT,BORDER-RIGHT
10=BORDER-DIAGONAL,BORDER-VERTICAL,BORDER-HORIZONTAL,BORDER-DIAGUP,BORDER-DIAGDOWN
15=ALIGN-HORIZONTAL,ALIGN-VERTICAL,ALIGN-ROTATION,ALIGN-INDENT,ALIGN-READINGORDER
20=ALIGN-WRAPTEXT,ALIGN-JUSTLASTLINE,ALIGN-SHRINKTOFIT,ALIGN-MERGED,FONT-NAME
25=FONT-WEIGHT,FONT-UNDERLINE,FONT-ESCAPEMENT,FONT-ITALIC,FONT-STRIKE
30=FONT-OUTLINE,FONT-SHADOW,FONT-CONDENSE,FONT-EXTEND,FONT-CHARSET
35=FONT-PITCHFAMILY,FONT-HEIGHT,FONT-SCHEME,NUMFMT-CODE,
40=,NUMFMT-ID,ALIGN-RELINDENT,PROT-LOCKED,PROT-HIDDEN
end
# EXTERNALBOOK ---------------------------------------------------------------
constlist=EXTERNALBOOK-KEY
@ -1145,6 +1304,20 @@ end
shortlist=FORMULA-RESULTTYPE,0,string,boolean,error,empty
# GUTS -----------------------------------------------------------------------
shortlist=GUTS-LEVELS,0,none,,1-level,2-levels,3-levels,4-levels,5-levels,6-levels,7-levels
# HEADERFOOTER ---------------------------------------------------------------
flagslist=HEADERFOOTER-FLAGS
ignore=0xFFF0
0x0001=has-even-hf
0x0002=has-first-hf
0x0004=scale-with-sheet
0x0008=align-with-margins
end
# HIDEOBJ --------------------------------------------------------------------
shortlist=HIDEOBJ,0,show,placeholder,hide
@ -1337,6 +1510,15 @@ flagslist=OBJCMO-FLAGS
0x4000=auto-area
end
# PAGELAYOUTVIEW -------------------------------------------------------------
flagslist=PAGELAYOUTVIEW-FLAGS
ignore=0xFFF8
0x0001=page-layout-view
0x0002=show-ruler
0x0004=hide-margins
end
# PAGESETUP ------------------------------------------------------------------
multilist=PAGESETUP-PAPERSIZE
@ -1441,7 +1623,7 @@ shortlist=PHONETICPR-TYPE,0,halfwidth-katakana,fullwidth-katakana,hiragana,no-co
shortlist=PHONETICPR-ALIGNMENT,0,no-control,left,center,distributed
combilist=PHONETICPR-FLAGS
ignore=0x0030
ignore=0xFFF0
0x0003=uint8,dec,type,PHONETICPR-TYPE
0x000C=uint8,dec,alignment,PHONETICPR-ALIGNMENT
end
@ -1602,11 +1784,50 @@ combilist=ROW-FLAGS
0x40000000=show-phonetic
end
# SHAREDFEATHEAD -------------------------------------------------------------
shortlist=SHAREDFEATHEAD-TYPE,2,protection,ignored-formula-errors,smarttag,table
flagslist=SHAREDFEATHEAD-PROT-FLAGS
0x00000001=edit-object
0x00000002=edit-scenario
0x00000004=format-cell
0x00000008=format-column
0x00000010=format-row
0x00000020=insert-column
0x00000040=insert-row
0x00000080=insert-hyperlink
0x00000100=delete-column
0x00000200=delete-row
0x00000400=select-locked
0x00000800=sort
0x00001000=use-autofilter
0x00002000=pivottable-report
0x00004000=select-unlocked
end
# SHEET ----------------------------------------------------------------------
shortlist=SHEET-STATE,0,visible,hidden,very-hidden
shortlist=SHEET-TYPE,0,worksheet,macrosheet,chartsheet,,,,vb-module
# SHEETEXT -------------------------------------------------------------------
combilist=SHEETEXT-FLAGS1
0x0000007F=uint8,dec,color-idx,SHEETEXT-COLOR
end
constlist=SHEETEXT-COLOR
include=COLORS
0x7F=undefined
end
combilist=SHEETEXT-FLAGS2
include=SHEETEXT-FLAGS1
0x00000080=eval-cond-formats
0x00000100=!published!unpublished
end
# SHEETPR --------------------------------------------------------------------
shortlist=SHEETPR-WINDOWPOS,0,tiled,horizontal,vertical,cascaded
@ -1635,26 +1856,6 @@ flagslist=SHEETPR-FLAGS-BIFF5
0x0010=dialog-sheet
end
# SHEETPROTECTION ------------------------------------------------------------
flagslist=SHEETPROTECTION-FLAGS
0x0001=edit-object
0x0002=edit-scenario
0x0004=format-cell
0x0008=format-column
0x0010=format-row
0x0020=insert-column
0x0040=insert-row
0x0080=insert-hyperlink
0x0100=delete-column
0x0200=delete-row
0x0400=select-locked
0x0800=sort
0x1000=use-autofilter
0x2000=pivottable-report
0x4000=select-unlocked
end
# STYLE ----------------------------------------------------------------------
combilist=STYLE-FLAGS
@ -1697,6 +1898,14 @@ end
shortlist=SXEXT-SOURCETYPE,1,odbc,dao,,webquery
# THEME ----------------------------------------------------------------------
constlist=THEME-VERSION
0=custom
123820=default
124226=default
end
# TXO ------------------------------------------------------------------------
combilist=TXO-FLAGS
@ -1901,5 +2110,14 @@ combilist=CELL-XFSTYLE-BIFF2
include=XF-STYLEFLAGS-BIFF2
end
# XFEXT ----------------------------------------------------------------------
multilist=XFEXT-SUBREC
0=,,,,FILL-FGCOLOR
5=FILL-BGCOLOR,FILL-GRADIENT,BORDER-TOP-COLOR,BORDER-BOTTOM-COLOR,BORDER-LEFT-COLOR
10=BORDER-RIGHT-COLOR,BORDER-DIAG-COLOR,,TEXT-COLOR,FONT-SCHEME
15=INDENT
end
# ============================================================================

View file

@ -3130,20 +3130,6 @@ void RecordObjectBase::writeHeader()
// ============================================================================
void SequenceRecordObjectBase::construct(
const ObjectBase& rParent, const BinaryInputStreamRef& rxBaseStrm, const ::rtl::OUString& rSysFileName,
const BinaryInputStreamRef& rxRecStrm, const String& rRecNames, const String& rSimpleRecs )
{
RecordObjectBase::construct( rParent, rxBaseStrm, rSysFileName, rxRecStrm, rRecNames, rSimpleRecs );
}
void SequenceRecordObjectBase::construct( const OutputObjectBase& rParent,
const BinaryInputStreamRef& rxBaseStrm, const BinaryInputStreamRef& rxRecStrm,
const String& rRecNames, const String& rSimpleRecs )
{
RecordObjectBase::construct( rParent, rxBaseStrm, rxRecStrm, rRecNames, rSimpleRecs );
}
void SequenceRecordObjectBase::construct( const ObjectBase& rParent,
const BinaryInputStreamRef& rxBaseStrm, const ::rtl::OUString& rSysFileName,
const String& rRecNames, const String& rSimpleRecs )

View file

@ -222,6 +222,7 @@ show-record-position=0
unitconverter=CONV-DEC,1
unitconverter=CONV-PERCENT,1,%
unitconverter=CONV-FLOAT-TO-PERC,100,%
unitconverter=CONV-DEG,1,°
unitconverter=CONV-HMM-TO-CM,/1000,cm
unitconverter=CONV-INCH-TO-CM,2.54,cm
@ -351,5 +352,23 @@ constlist=CODEPAGES
65001=utf-8
end
multilist=COUNTRY
1=usa,canada,latin-america,,,,russia
20=egypt
30=greece,netherlands,belgium,france,spain,,hungary,,,italy
40=,switzerland,,austria,uk,denmark,sweden,norway,poland,germany
50=,,mexico,,,brazil
60=,australia,,,new-zealand,,thailand
80=,japan,korea,,vietnam,,china
90=turkey
210=,,,algeria,,,morocco,,libya
350=,portugal,,,iceland,,,,finland
420=czech
880=,,,,,,taiwan
960=,lebanon,jordan,syria,iraq,kuwait,saudi-arabia
970=,uae,israel,,qatar
980=,iran
end
# ============================================================================

View file

@ -1037,7 +1037,6 @@ void OcxLabelObject::implDumpShortProperties()
dumpSpecialEffectProperty< sal_uInt16 >( 0 );
dumpStreamProperty();
dumpUnicodeProperty();
dumpBoolProperty();
dumpStreamProperty();
}

View file

@ -1130,16 +1130,16 @@ void RecordStreamObject::implDumpRecordBody()
case 0: dumpDec< sal_Int32 >( "operator", "CFRULE-CELL-OPERATOR" ); break;
case 5: dumpDec< sal_Int32 >( "rank" ); break;
case 8: dumpDec< sal_Int32 >( "operator", "CFRULE-TEXT-OPERATOR" ); break;
case 15: dumpDec< sal_Int32 >( "operator", "CFRULE-TIME-OPERATOR" ); break;
case 16: dumpDec< sal_Int32 >( "operator", "CFRULE-TIME-OPERATOR" ); break;
case 17: dumpDec< sal_Int32 >( "operator", "CFRULE-TIME-OPERATOR" ); break;
case 18: dumpDec< sal_Int32 >( "operator", "CFRULE-TIME-OPERATOR" ); break;
case 19: dumpDec< sal_Int32 >( "operator", "CFRULE-TIME-OPERATOR" ); break;
case 20: dumpDec< sal_Int32 >( "operator", "CFRULE-TIME-OPERATOR" ); break;
case 21: dumpDec< sal_Int32 >( "operator", "CFRULE-TIME-OPERATOR" ); break;
case 22: dumpDec< sal_Int32 >( "operator", "CFRULE-TIME-OPERATOR" ); break;
case 23: dumpDec< sal_Int32 >( "operator", "CFRULE-TIME-OPERATOR" ); break;
case 24: dumpDec< sal_Int32 >( "operator", "CFRULE-TIME-OPERATOR" ); break;
case 15: dumpDec< sal_Int32 >( "operator", "CFRULE-DATE-OPERATOR" ); break;
case 16: dumpDec< sal_Int32 >( "operator", "CFRULE-DATE-OPERATOR" ); break;
case 17: dumpDec< sal_Int32 >( "operator", "CFRULE-DATE-OPERATOR" ); break;
case 18: dumpDec< sal_Int32 >( "operator", "CFRULE-DATE-OPERATOR" ); break;
case 19: dumpDec< sal_Int32 >( "operator", "CFRULE-DATE-OPERATOR" ); break;
case 20: dumpDec< sal_Int32 >( "operator", "CFRULE-DATE-OPERATOR" ); break;
case 21: dumpDec< sal_Int32 >( "operator", "CFRULE-DATE-OPERATOR" ); break;
case 22: dumpDec< sal_Int32 >( "operator", "CFRULE-DATE-OPERATOR" ); break;
case 23: dumpDec< sal_Int32 >( "operator", "CFRULE-DATE-OPERATOR" ); break;
case 24: dumpDec< sal_Int32 >( "operator", "CFRULE-DATE-OPERATOR" ); break;
case 25: dumpDec< sal_Int32 >( "std-dev" ); break;
case 26: dumpDec< sal_Int32 >( "std-dev" ); break;
case 29: dumpDec< sal_Int32 >( "std-dev" ); break;
@ -1306,38 +1306,22 @@ void RecordStreamObject::implDumpRecordBody()
case 0:
dumpDec< sal_uInt8 >( "pattern", "FILLPATTERNS" );
break;
case 1:
case 2:
case 1: case 2: case 5:
dumpColor();
break;
case 3:
dumpDec< sal_Int32 >( "gradient-type", "FILL-GRADIENTTYPE" );
dumpDec< double >( "linear-angle" );
dumpDec< double >( "pos-left" );
dumpDec< double >( "pos-right" );
dumpDec< double >( "pos-top" );
dumpDec< double >( "pos-bottom" );
dumpGradientHead();
break;
case 4:
dumpDec< sal_uInt16 >( "index" );
dumpDec< double >( "stop-position" );
dumpColor( "stop-color" );
break;
case 5:
dumpColor();
break;
case 6:
case 7:
case 8:
case 9:
case 10:
case 11:
case 12:
case 6: case 7: case 8: case 9: case 10: case 11: case 12:
dumpColor( "color" );
dumpDec< sal_uInt16 >( "style", "BORDERSTYLES" );
break;
case 13:
case 14:
case 13: case 14:
dumpBoolean( "value" );
break;
case 15:
@ -1355,9 +1339,7 @@ void RecordStreamObject::implDumpRecordBody()
case 19:
dumpDec< sal_uInt8 >( "text-dir", "XF-TEXTDIRECTION" );
break;
case 20:
case 21:
case 22:
case 20: case 21: case 22:
dumpBoolean( "value" );
break;
case 24:
@ -1372,12 +1354,7 @@ void RecordStreamObject::implDumpRecordBody()
case 27:
dumpDec< sal_uInt16 >( "escapement", "FONT-ESCAPEMENT" );
break;
case 28:
case 29:
case 30:
case 31:
case 32:
case 33:
case 28: case 29: case 30: case 31: case 32: case 33:
dumpBoolean( "value" );
break;
case 34:
@ -1399,10 +1376,9 @@ void RecordStreamObject::implDumpRecordBody()
dumpDec< sal_uInt16 >( "numfmt-id" );
break;
case 42:
dumpDec< sal_uInt16 >( "relative-indent" );
dumpDec< sal_Int16 >( "relative-indent" );
break;
case 43:
case 44:
case 43: case 44:
dumpBoolean( "value" );
break;
}
@ -1503,12 +1479,7 @@ void RecordStreamObject::implDumpRecordBody()
dumpDec< sal_Int32 >( "fill-pattern", "FILLPATTERNS" );
dumpColor( "fg-color" );
dumpColor( "bg-color" );
dumpDec< sal_Int32 >( "gradient-type", "FILL-GRADIENTTYPE" );
dumpDec< double >( "linear-angle" );
dumpDec< double >( "pos-left" );
dumpDec< double >( "pos-right" );
dumpDec< double >( "pos-top" );
dumpDec< double >( "pos-bottom" );
dumpGradientHead();
out().resetItemIndex();
for( sal_Int32 nStop = 0, nStopCount = dumpDec< sal_Int32 >( "stop-count" ); (nStop < nStopCount) && !in().isEof(); ++nStop )
{
@ -2174,6 +2145,16 @@ void RecordStreamObject::implDumpRecordBody()
}
}
void RecordStreamObject::dumpGradientHead()
{
dumpDec< sal_Int32 >( "gradient-type", "FILL-GRADIENTTYPE" );
dumpDec< double >( "linear-angle" );
dumpDec< double >( "pos-left" );
dumpDec< double >( "pos-right" );
dumpDec< double >( "pos-top" );
dumpDec< double >( "pos-bottom" );
}
void RecordStreamObject::dumpCellHeader( bool bWithColumn )
{
if( bWithColumn ) dumpColIndex();

View file

@ -328,13 +328,13 @@ end
shortlist=CFRULE-CELL-OPERATOR,1,between,not-between,equal,not-equal,greater-than,less-than,greater-equal,less-equal
shortlist=CFRULE-TEXT-OPERATOR,0,contains,not-contains,begins-with,ends-with
shortlist=CFRULE-TIME-OPERATOR,0,today,yesterday,last-7-days,this-week,last-week,last-month,tomorrow,next-week,next-month,this-month
shortlist=CFRULE-DATE-OPERATOR,0,today,yesterday,last-7-days,this-week,last-week,last-month,tomorrow,next-week,next-month,this-month
shortlist=CFRULE-OTHER-OPERATOR,0,none
flagslist=CFRULE-FLAGS
0x0001=table-row
0x0002=stop-if-true
0x0004=avove-average
0x0004=above-average
0x0008=bottom
0x0010=percent
end

216
oox/source/ole/axbinaryreader.cxx Executable file
View file

@ -0,0 +1,216 @@
/*************************************************************************
*
* 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: axbinaryreader.cxx,v $
* $Revision: 1.1 $
*
* 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/ole/axbinaryreader.hxx"
#include "oox/ole/olehelper.hxx"
using ::rtl::OUString;
namespace oox {
namespace ole {
// ============================================================================
namespace {
const sal_uInt32 AX_STRING_SIZEMASK = 0x7FFFFFFF;
const sal_uInt32 AX_STRING_COMPRESSED = 0x80000000;
} // namespace
// ============================================================================
AxAlignedInputStream::AxAlignedInputStream( BinaryInputStream& rInStrm ) :
mrInStrm( rInStrm ),
mnStrmPos( 0 )
{
}
sal_Int64 AxAlignedInputStream::tell() const
{
return mnStrmPos;
}
void AxAlignedInputStream::seek( sal_Int64 nPos )
{
mbEof = mbEof || (nPos < mnStrmPos);
if( !mbEof )
skip( static_cast< sal_Int32 >( nPos - mnStrmPos ) );
}
sal_Int32 AxAlignedInputStream::readData( StreamDataSequence& orData, sal_Int32 nBytes )
{
sal_Int32 nReadSize = mrInStrm.readData( orData, nBytes );
mnStrmPos += nReadSize;
return nReadSize;
}
sal_Int32 AxAlignedInputStream::readMemory( void* opMem, sal_Int32 nBytes )
{
sal_Int32 nReadSize = mrInStrm.readMemory( opMem, nBytes );
mnStrmPos += nReadSize;
return nReadSize;
}
void AxAlignedInputStream::skip( sal_Int32 nBytes )
{
mrInStrm.skip( nBytes );
mnStrmPos += nBytes;
}
void AxAlignedInputStream::align( size_t nSize )
{
skip( static_cast< sal_Int32 >( (nSize - (mnStrmPos % nSize)) % nSize ) );
}
// ============================================================================
AxBinaryPropertyReader::ComplexProperty::~ComplexProperty()
{
}
bool AxBinaryPropertyReader::PairProperty::readProperty( AxAlignedInputStream& rInStrm )
{
rInStrm >> mrnValue1 >> mrnValue2;
return true;
}
bool AxBinaryPropertyReader::StringProperty::readProperty( AxAlignedInputStream& rInStrm )
{
bool bCompressed = getFlag( mnSize, AX_STRING_COMPRESSED );
sal_uInt32 nBufSize = mnSize & AX_STRING_SIZEMASK;
sal_Int64 nEndPos = rInStrm.tell() + nBufSize;
sal_Int32 nChars = static_cast< sal_Int32 >( nBufSize / (bCompressed ? 1 : 2) );
bool bValidChars = nChars <= 65536;
OSL_ENSURE( bValidChars, "StringProperty::readProperty - string too long" );
nChars = ::std::min< sal_Int32 >( nChars, 65536 );
mrValue = bCompressed ?
// ISO-8859-1 maps all byte values xx to the same Unicode code point U+00xx
rInStrm.readCharArrayUC( nChars, RTL_TEXTENCODING_ISO_8859_1 ) :
rInStrm.readUnicodeArray( nChars );
rInStrm.seek( nEndPos );
return bValidChars;
}
bool AxBinaryPropertyReader::PictureProperty::readProperty( AxAlignedInputStream& rInStrm )
{
return OleHelper::importStdPic( mrPicData, rInStrm, true );
}
// ----------------------------------------------------------------------------
AxBinaryPropertyReader::AxBinaryPropertyReader( BinaryInputStream& rInStrm, bool b64BitPropFlags ) :
maInStrm( rInStrm ),
mbValid( true )
{
// version and size of property block
maInStrm.skip( 2 );
sal_uInt16 nBlockSize = maInStrm.readValue< sal_uInt16 >();
mnPropsEnd = maInStrm.tell() + nBlockSize;
// flagfield containing existing properties
if( b64BitPropFlags )
maInStrm >> mnPropFlags;
else
mnPropFlags = maInStrm.readuInt32();
mnNextProp = 1;
}
void AxBinaryPropertyReader::readBoolProperty( bool& orbValue, bool bReverse )
{
// there is no data, the boolean value is equivalent to the property flag itself
orbValue = startNextProperty() != bReverse;
}
void AxBinaryPropertyReader::readPairProperty( sal_Int32& ornValue1, sal_Int32& ornValue2 )
{
if( startNextProperty() )
maLargeProps.push_back( ComplexPropVector::value_type( new PairProperty( ornValue1, ornValue2 ) ) );
}
void AxBinaryPropertyReader::readStringProperty( OUString& orValue )
{
if( startNextProperty() )
{
sal_uInt32 nSize = maInStrm.readAligned< sal_uInt32 >();
maLargeProps.push_back( ComplexPropVector::value_type( new StringProperty( orValue, nSize ) ) );
}
}
void AxBinaryPropertyReader::readPictureProperty( StreamDataSequence& orPicData )
{
if( startNextProperty() )
{
sal_Int16 nData = maInStrm.readAligned< sal_Int16 >();
if( ensureValid( nData == -1 ) )
maStreamProps.push_back( ComplexPropVector::value_type( new PictureProperty( orPicData ) ) );
}
}
bool AxBinaryPropertyReader::finalizeImport()
{
// read large properties
maInStrm.align( 4 );
if( ensureValid( mnPropFlags == 0 ) && !maLargeProps.empty() )
{
for( ComplexPropVector::iterator aIt = maLargeProps.begin(), aEnd = maLargeProps.end(); ensureValid() && (aIt != aEnd); ++aIt )
{
ensureValid( (*aIt)->readProperty( maInStrm ) );
maInStrm.align( 4 );
}
}
maInStrm.seek( mnPropsEnd );
// read stream properties (no stream alignment between properties!)
if( ensureValid() && !maStreamProps.empty() )
for( ComplexPropVector::iterator aIt = maStreamProps.begin(), aEnd = maStreamProps.end(); ensureValid() && (aIt != aEnd); ++aIt )
ensureValid( (*aIt)->readProperty( maInStrm ) );
return mbValid;
}
bool AxBinaryPropertyReader::ensureValid( bool bCondition )
{
mbValid = mbValid && bCondition && !maInStrm.isEof();
return mbValid;
}
bool AxBinaryPropertyReader::startNextProperty()
{
bool bHasProp = getFlag( mnPropFlags, mnNextProp );
setFlag( mnPropFlags, mnNextProp, false );
mnNextProp <<= 1;
return ensureValid() && bHasProp;
}
// ============================================================================
} // namespace ole
} // namespace oox

View file

@ -52,6 +52,7 @@
#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"
@ -254,25 +255,20 @@ void lclConvertVisualEffect( AxControlHelper& /*rHelper*/, PropertyMap& rPropMap
// ----------------------------------------------------------------------------
/** Converts the AX picture to UNO properties. */
/** Converts the passed picture stream to UNO properties. */
void lclConvertPicture( AxControlHelper& rHelper, PropertyMap& rPropMap, const StreamDataSequence& rPicData )
{
if( rPicData.hasElements() )
{
SequenceInputStream aInStrm( rPicData );
StreamDataSequence aPictureData;
if( OleHelper::importStdPic( aPictureData, aInStrm, true ) )
{
OUString aGraphicUrl = rHelper.getFilter().getGraphicHelper().importGraphicObject( aPictureData );
if( aGraphicUrl.getLength() > 0 )
rPropMap.setProperty( PROP_ImageURL, aGraphicUrl );
}
OUString aGraphicUrl = rHelper.getFilter().getGraphicHelper().importGraphicObject( rPicData );
if( aGraphicUrl.getLength() > 0 )
rPropMap.setProperty( PROP_ImageURL, aGraphicUrl );
}
}
// ----------------------------------------------------------------------------
/** Converts the AX picture and position to UNO properties. */
/** Converts the passed picture stream and position to UNO properties. */
void lclConvertPicture( AxControlHelper& rHelper, PropertyMap& rPropMap, const StreamDataSequence& rPicData, sal_uInt32 nPicPos )
{
// the picture
@ -303,7 +299,7 @@ void lclConvertPicture( AxControlHelper& rHelper, PropertyMap& rPropMap, const S
// ----------------------------------------------------------------------------
/** Converts the AX picture and position to UNO properties. */
/** 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*/ )
{
// the picture
@ -392,7 +388,11 @@ void AxControlModelBase::importProperty( sal_Int32 nPropId, const OUString& rVal
}
}
void AxControlModelBase::importPictureData( sal_Int32 /*nPropId*/, const StreamDataSequence& /*rDataSeq*/ )
void AxControlModelBase::importBinaryModel( BinaryInputStream& /*rInStrm*/ )
{
}
void AxControlModelBase::importPictureData( sal_Int32 /*nPropId*/, BinaryInputStream& /*rInStrm*/ )
{
}
@ -423,6 +423,20 @@ void AxFontDataModel::importProperty( sal_Int32 nPropId, const OUString& rValue
}
}
void AxFontDataModel::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
aReader.finalizeImport();
}
void AxFontDataModel::convertProperties( AxControlHelper& rHelper, PropertyMap& rPropMap ) const
{
namespace cssa = ::com::sun::star::awt;
@ -491,15 +505,33 @@ void AxCommandButtonModel::importProperty( sal_Int32 nPropId, const OUString& rV
}
}
void AxCommandButtonModel::importPictureData( sal_Int32 nPropId, const StreamDataSequence& rDataSeq )
void AxCommandButtonModel::importPictureData( sal_Int32 nPropId, BinaryInputStream& rInStrm )
{
switch( nPropId )
{
case XML_Picture: maPictureData = rDataSeq; break;
default: AxFontDataModel::importPictureData( nPropId, rDataSeq );
case XML_Picture: OleHelper::importStdPic( maPictureData, rInStrm, true ); break;
default: AxFontDataModel::importPictureData( nPropId, rInStrm );
}
}
void AxCommandButtonModel::importBinaryModel( BinaryInputStream& rInStrm )
{
AxBinaryPropertyReader aReader( rInStrm );
aReader.readIntProperty< sal_uInt32 >( mnTextColor );
aReader.readIntProperty< sal_uInt32 >( mnBackColor );
aReader.readIntProperty< sal_uInt32 >( mnFlags );
aReader.readStringProperty( maCaption );
aReader.readIntProperty< sal_uInt32 >( mnPicturePos );
aReader.readPairProperty( mnWidth, mnHeight );
aReader.skipIntProperty< sal_uInt8 >(); // mouse pointer
aReader.readPictureProperty( maPictureData );
aReader.skipIntProperty< sal_uInt16 >(); // accelerator
aReader.readBoolProperty( mbFocusOnClick, true ); // binary flag means "do not take focus"
aReader.skipPictureProperty(); // mouse icon
if( aReader.finalizeImport() )
AxFontDataModel::importBinaryModel( rInStrm );
}
OUString AxCommandButtonModel::getServiceName() const
{
return CREATE_OUSTRING( "com.sun.star.form.component.CommandButton" );
@ -545,6 +577,26 @@ void AxLabelModel::importProperty( sal_Int32 nPropId, const OUString& rValue )
}
}
void AxLabelModel::importBinaryModel( BinaryInputStream& rInStrm )
{
AxBinaryPropertyReader aReader( rInStrm );
aReader.readIntProperty< sal_uInt32 >( mnTextColor );
aReader.readIntProperty< sal_uInt32 >( mnBackColor );
aReader.readIntProperty< sal_uInt32 >( mnFlags );
aReader.readStringProperty( maCaption );
aReader.skipIntProperty< sal_uInt32 >(); // picture position
aReader.readPairProperty( mnWidth, mnHeight );
aReader.skipIntProperty< sal_uInt8 >(); // mouse pointer
aReader.readIntProperty< sal_uInt32 >( mnBorderColor );
aReader.readIntProperty< sal_uInt16 >( mnBorderStyle );
aReader.readIntProperty< sal_uInt16 >( mnSpecialEffect );
aReader.skipPictureProperty(); // picture
aReader.skipIntProperty< sal_uInt16 >(); // accelerator
aReader.skipPictureProperty(); // mouse icon
if( aReader.finalizeImport() )
AxFontDataModel::importBinaryModel( rInStrm );
}
OUString AxLabelModel::getServiceName() const
{
return CREATE_OUSTRING( "com.sun.star.form.component.FixedText" );
@ -592,15 +644,36 @@ void AxImageModel::importProperty( sal_Int32 nPropId, const OUString& rValue )
}
}
void AxImageModel::importPictureData( sal_Int32 nPropId, const StreamDataSequence& rDataSeq )
void AxImageModel::importPictureData( sal_Int32 nPropId, BinaryInputStream& rInStrm )
{
switch( nPropId )
{
case XML_Picture: maPictureData = rDataSeq; break;
default: AxControlModelBase::importPictureData( nPropId, rDataSeq );
case XML_Picture: OleHelper::importStdPic( maPictureData, rInStrm, true ); break;
default: AxControlModelBase::importPictureData( nPropId, rInStrm );
}
}
void AxImageModel::importBinaryModel( BinaryInputStream& rInStrm )
{
AxBinaryPropertyReader aReader( rInStrm );
aReader.skipUndefinedProperty();
aReader.skipUndefinedProperty();
aReader.skipBoolProperty(); // auto-size
aReader.readIntProperty< sal_uInt32 >( mnBorderColor );
aReader.readIntProperty< sal_uInt32 >( mnBackColor );
aReader.readIntProperty< sal_uInt8 >( mnBorderStyle );
aReader.skipIntProperty< sal_uInt8 >(); // mouse pointer
aReader.readIntProperty< sal_uInt8 >( mnPicSizeMode );
aReader.readIntProperty< sal_uInt8 >( mnSpecialEffect );
aReader.readPairProperty( mnWidth, mnHeight );
aReader.readPictureProperty( maPictureData );
aReader.readIntProperty< sal_uInt8 >( mnPicAlign );
aReader.readBoolProperty( mbPicTiling );
aReader.readIntProperty< sal_uInt32 >( mnFlags );
aReader.skipPictureProperty(); // mouse icon
aReader.finalizeImport();
}
OUString AxImageModel::getServiceName() const
{
return CREATE_OUSTRING( "com.sun.star.form.component.DatabaseImageControl" );
@ -662,15 +735,55 @@ void AxMorphDataModel::importProperty( sal_Int32 nPropId, const OUString& rValue
}
}
void AxMorphDataModel::importPictureData( sal_Int32 nPropId, const StreamDataSequence& rDataSeq )
void AxMorphDataModel::importPictureData( sal_Int32 nPropId, BinaryInputStream& rInStrm )
{
switch( nPropId )
{
case XML_Picture: maPictureData = rDataSeq; break;
default: AxFontDataModel::importPictureData( nPropId, rDataSeq );
case XML_Picture: OleHelper::importStdPic( maPictureData, rInStrm, true ); break;
default: AxFontDataModel::importPictureData( nPropId, rInStrm );
}
}
void AxMorphDataModel::importBinaryModel( BinaryInputStream& rInStrm )
{
AxBinaryPropertyReader aReader( rInStrm, true );
aReader.readIntProperty< sal_uInt32 >( mnFlags );
aReader.readIntProperty< sal_uInt32 >( mnBackColor );
aReader.readIntProperty< sal_uInt32 >( mnTextColor );
aReader.readIntProperty< sal_Int32 >( mnMaxLength );
aReader.readIntProperty< sal_uInt8 >( mnBorderStyle );
aReader.readIntProperty< sal_uInt8 >( mnScrollBars );
aReader.readIntProperty< sal_uInt8 >( mnDisplayStyle );
aReader.skipIntProperty< sal_uInt8 >(); // mouse pointer
aReader.readPairProperty( mnWidth, mnHeight );
aReader.readIntProperty< sal_uInt16 >( mnPasswordChar );
aReader.skipIntProperty< sal_uInt32 >(); // list width
aReader.skipIntProperty< sal_uInt16 >(); // bound column
aReader.skipIntProperty< sal_Int16 >(); // text column
aReader.skipIntProperty< sal_Int16 >(); // column count
aReader.readIntProperty< sal_uInt16 >( mnListRows );
aReader.skipIntProperty< sal_uInt16 >(); // column info count
aReader.readIntProperty< sal_uInt8 >( mnMatchEntry );
aReader.skipIntProperty< sal_uInt8 >(); // list style
aReader.readIntProperty< sal_uInt8 >( mnShowDropButton );
aReader.skipUndefinedProperty();
aReader.skipIntProperty< sal_uInt8 >(); // drop down style
aReader.readIntProperty< sal_uInt8 >( mnMultiSelect );
aReader.readStringProperty( maValue );
aReader.readStringProperty( maCaption );
aReader.readIntProperty< sal_uInt32 >( mnPicturePos );
aReader.readIntProperty< sal_uInt32 >( mnBorderColor );
aReader.readIntProperty< sal_uInt32 >( mnSpecialEffect );
aReader.skipPictureProperty(); // mouse icon
aReader.readPictureProperty( maPictureData );
aReader.skipIntProperty< sal_uInt16 >(); // accelerator
aReader.skipUndefinedProperty();
aReader.skipBoolProperty();
aReader.readStringProperty( maGroupName );
if( aReader.finalizeImport() )
AxFontDataModel::importBinaryModel( rInStrm );
}
void AxMorphDataModel::convertProperties( AxControlHelper& rHelper, PropertyMap& rPropMap ) const
{
rPropMap.setProperty( PROP_TextColor, rHelper.convertColor( mnTextColor ) );
@ -865,6 +978,27 @@ void AxSpinButtonModel::importProperty( sal_Int32 nPropId, const OUString& rValu
}
}
void AxSpinButtonModel::importBinaryModel( BinaryInputStream& rInStrm )
{
AxBinaryPropertyReader aReader( rInStrm );
aReader.readIntProperty< sal_uInt32 >( mnArrowColor );
aReader.readIntProperty< sal_uInt32 >( mnBackColor );
aReader.readIntProperty< sal_uInt32 >( mnFlags );
aReader.readPairProperty( mnWidth, mnHeight );
aReader.skipIntProperty< sal_uInt32 >(); // unused
aReader.readIntProperty< sal_Int32 >( mnMin );
aReader.readIntProperty< sal_Int32 >( mnMax );
aReader.readIntProperty< sal_Int32 >( mnPosition );
aReader.skipIntProperty< sal_uInt32 >(); // prev enabled
aReader.skipIntProperty< sal_uInt32 >(); // next enabled
aReader.readIntProperty< sal_Int32 >( mnSmallChange );
aReader.readIntProperty< sal_Int32 >( mnOrientation );
aReader.readIntProperty< sal_Int32 >( mnDelay );
aReader.skipPictureProperty(); // mouse icon
aReader.skipIntProperty< sal_uInt8 >(); // mouse pointer
aReader.finalizeImport();
}
void AxSpinButtonModel::convertProperties( AxControlHelper& rHelper, PropertyMap& rPropMap ) const
{
sal_Int32 nMin = ::std::min( mnMin, mnMax );
@ -924,6 +1058,29 @@ void AxScrollBarModel::importProperty( sal_Int32 nPropId, const OUString& rValue
}
}
void AxScrollBarModel::importBinaryModel( BinaryInputStream& rInStrm )
{
AxBinaryPropertyReader aReader( rInStrm );
aReader.readIntProperty< sal_uInt32 >( mnArrowColor );
aReader.readIntProperty< sal_uInt32 >( mnBackColor );
aReader.readIntProperty< sal_uInt32 >( mnFlags );
aReader.readPairProperty( mnWidth, mnHeight );
aReader.skipIntProperty< sal_uInt8 >(); // mouse pointer
aReader.readIntProperty< sal_Int32 >( mnMin );
aReader.readIntProperty< sal_Int32 >( mnMax );
aReader.readIntProperty< sal_Int32 >( mnPosition );
aReader.skipIntProperty< sal_uInt32 >(); // unused
aReader.skipIntProperty< sal_uInt32 >(); // prev enabled
aReader.skipIntProperty< sal_uInt32 >(); // next enabled
aReader.readIntProperty< sal_Int32 >( mnSmallChange );
aReader.readIntProperty< sal_Int32 >( mnLargeChange );
aReader.readIntProperty< sal_Int32 >( mnOrientation );
aReader.readIntProperty< sal_Int16 >( mnPropThumb );
aReader.readIntProperty< sal_Int32 >( mnDelay );
aReader.skipPictureProperty(); // mouse icon
aReader.finalizeImport();
}
void AxScrollBarModel::convertProperties( AxControlHelper& rHelper, PropertyMap& rPropMap ) const
{
sal_Int32 nMin = ::std::min( mnMin, mnMax );
@ -962,27 +1119,28 @@ AxControl::~AxControl()
AxControlModelBase* AxControl::createModel( const OUString& rClassId )
{
// TODO: move into a factory
if( rClassId.equalsIgnoreAsciiCaseAscii( "{D7053240-CE69-11CD-A777-00DD01143C57}" ) ) // Forms.CommandButton.1
maClassId = rClassId.toAsciiUpperCase();
if( maClassId.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "{D7053240-CE69-11CD-A777-00DD01143C57}" ) ) ) // Forms.CommandButton.1
mxModel.reset( new AxCommandButtonModel );
else if( rClassId.equalsIgnoreAsciiCaseAscii( "{978C9E23-D4B0-11CE-BF2D-00AA003F40D0}" ) ) // Forms.Label.1
else if( maClassId.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "{978C9E23-D4B0-11CE-BF2D-00AA003F40D0}" ) ) ) // Forms.Label.1
mxModel.reset( new AxLabelModel );
else if( rClassId.equalsIgnoreAsciiCaseAscii( "{4C599241-6926-101B-9992-00000B65C6F9}" ) ) // Forms.Image.1
else if( maClassId.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "{4C599241-6926-101B-9992-00000B65C6F9}" ) ) ) // Forms.Image.1
mxModel.reset( new AxImageModel );
else if( rClassId.equalsIgnoreAsciiCaseAscii( "{8BD21D60-EC42-11CE-9E0D-00AA006002F3}" ) ) // Forms.ToggleButton.1
else if( maClassId.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "{8BD21D60-EC42-11CE-9E0D-00AA006002F3}" ) ) ) // Forms.ToggleButton.1
mxModel.reset( new AxToggleButtonModel );
else if( rClassId.equalsIgnoreAsciiCaseAscii( "{8BD21D40-EC42-11CE-9E0D-00AA006002F3}" ) ) // Forms.CheckBox.1
else if( maClassId.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "{8BD21D40-EC42-11CE-9E0D-00AA006002F3}" ) ) ) // Forms.CheckBox.1
mxModel.reset( new AxCheckBoxModel );
else if( rClassId.equalsIgnoreAsciiCaseAscii( "{8BD21D50-EC42-11CE-9E0D-00AA006002F3}" ) ) // Forms.OptionButton.1
else if( maClassId.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "{8BD21D50-EC42-11CE-9E0D-00AA006002F3}" ) ) ) // Forms.OptionButton.1
mxModel.reset( new AxOptionButtonModel );
else if( rClassId.equalsIgnoreAsciiCaseAscii( "{8BD21D10-EC42-11CE-9E0D-00AA006002F3}" ) ) // Forms.TextBox.1
else if( maClassId.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "{8BD21D10-EC42-11CE-9E0D-00AA006002F3}" ) ) ) // Forms.TextBox.1
mxModel.reset( new AxTextBoxModel );
else if( rClassId.equalsIgnoreAsciiCaseAscii( "{8BD21D20-EC42-11CE-9E0D-00AA006002F3}" ) ) // Forms.ListBox.1
else if( maClassId.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "{8BD21D20-EC42-11CE-9E0D-00AA006002F3}" ) ) ) // Forms.ListBox.1
mxModel.reset( new AxListBoxModel );
else if( rClassId.equalsIgnoreAsciiCaseAscii( "{8BD21D30-EC42-11CE-9E0D-00AA006002F3}" ) ) // Forms.ComboBox.1
else if( maClassId.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "{8BD21D30-EC42-11CE-9E0D-00AA006002F3}" ) ) ) // Forms.ComboBox.1
mxModel.reset( new AxComboBoxModel );
else if( rClassId.equalsIgnoreAsciiCaseAscii( "{79176FB0-B7F2-11CE-97EF-00AA006D2776}" ) ) // Forms.SpinButton.1
else if( maClassId.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "{79176FB0-B7F2-11CE-97EF-00AA006D2776}" ) ) ) // Forms.SpinButton.1
mxModel.reset( new AxSpinButtonModel );
else if( rClassId.equalsIgnoreAsciiCaseAscii( "{DFD181E0-5E2F-11CE-A449-00AA004A803D}" ) ) // Forms.ScrollBar.1
else if( maClassId.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "{DFD181E0-5E2F-11CE-A449-00AA004A803D}" ) ) ) // Forms.ScrollBar.1
mxModel.reset( new AxScrollBarModel );
else
mxModel.reset();
@ -990,6 +1148,12 @@ AxControlModelBase* AxControl::createModel( const OUString& rClassId )
return mxModel.get();
}
void AxControl::importBinaryModel( BinaryInputStream& rInStrm )
{
if( AxControlModelBase* pModel = createModel( OleHelper::importGuid( rInStrm ) ) )
pModel->importBinaryModel( rInStrm );
}
Reference< XControlModel > AxControl::convertAndInsert( AxControlHelper& rHelper ) const
{
Reference< XControlModel > xCtrlModel;

View file

@ -79,9 +79,8 @@ ContextHandlerRef AxControlPropertyContext::onCreateContext( sal_Int32 nElement,
OUString aPicturePath = getFragmentPathFromRelId( rAttribs.getString( R_TOKEN( id ), OUString() ) );
if( aPicturePath.getLength() > 0 )
{
StreamDataSequence aPictureData;
if( getFilter().importBinaryData( aPictureData, aPicturePath ) )
mrModel.importPictureData( mnPropId, aPictureData );
BinaryXInputStream aInStrm( getFilter().openInputStream( aPicturePath ), true );
mrModel.importPictureData( mnPropId, aInStrm );
}
}
break;
@ -101,11 +100,30 @@ ContextHandlerRef AxControlFragment::onCreateContext( sal_Int32 nElement, const
{
if( isRootElement() && (nElement == AX_TOKEN( ocx )) )
{
if( rAttribs.getToken( AX_TOKEN( persistence ), XML_TOKEN_INVALID ) == XML_persistPropertyBag )
OUString aClassId = rAttribs.getString( AX_TOKEN( classid ), OUString() );
switch( rAttribs.getToken( AX_TOKEN( persistence ), XML_TOKEN_INVALID ) )
{
OUString aClassId = rAttribs.getString( AX_TOKEN( classid ), OUString() );
if( AxControlModelBase* pModel = mrControl.createModel( aClassId ) )
return new AxControlPropertyContext( *this, *pModel );
case XML_persistPropertyBag:
if( AxControlModelBase* pModel = mrControl.createModel( aClassId ) )
return new AxControlPropertyContext( *this, *pModel );
break;
case XML_persistStreamInit:
{
OUString aFragmentPath = getFragmentPathFromRelId( rAttribs.getString( R_TOKEN( id ), OUString() ) );
if( aFragmentPath.getLength() > 0 )
{
BinaryXInputStream aInStrm( getFilter().openInputStream( aFragmentPath ), true );
if( !aInStrm.isEof() )
{
mrControl.importBinaryModel( aInStrm );
// binary stream contains a copy of the class ID, must be equal to attribute value
OSL_ENSURE( !mrControl.getModel() || aClassId.equalsIgnoreAsciiCase( mrControl.getClassId() ),
"AxControlFragment::importBinaryControl - form control class ID mismatch" );
}
}
}
break;
}
}
return 0;

View file

@ -93,8 +93,10 @@ AxControlHelper::~AxControlHelper()
Reference< XForm > AxControlHelper::getControlForm() const
{
if( !mbHasFormQuerried )
{
mbHasFormQuerried = true;
mxForm = createControlForm(); // virtual call
mbHasFormQuerried = true;
}
return mxForm;
}

View file

@ -45,6 +45,7 @@ ENABLE_EXCEPTIONS=TRUE
# --- Files --------------------------------------------------------
SLOFILES = \
$(SLO)$/axbinaryreader.obj \
$(SLO)$/axcontrol.obj \
$(SLO)$/axcontrolfragment.obj \
$(SLO)$/axcontrolhelper.obj \

View file

@ -42,6 +42,7 @@ namespace ole {
namespace {
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_Char* const OLE_GUID_URLMONIKER = "{79EAC9E0-BAF9-11CE-8C82-00AA004BA90B}";

View file

@ -88,6 +88,8 @@ const sal_uInt32 BIFF_DATAVAL_NODROPDOWN = 0x00000200;
const sal_uInt32 BIFF_DATAVAL_SHOWINPUT = 0x00040000;
const sal_uInt32 BIFF_DATAVAL_SHOWERROR = 0x00080000;
const sal_uInt32 BIFF_SHRFEATHEAD_SHEETPROT = 2;
const sal_Int32 OOBIN_OLEOBJECT_CONTENT = 1;
const sal_Int32 OOBIN_OLEOBJECT_ICON = 4;
const sal_Int32 OOBIN_OLEOBJECT_ALWAYS = 1;
@ -889,7 +891,7 @@ bool BiffWorksheetFragment::importFragment()
case BIFF_ID_SCENPROTECT: rWorksheetSett.importScenProtect( mrStrm ); break;
case BIFF_ID_SCL: rSheetViewSett.importScl( mrStrm ); break;
case BIFF_ID_SHEETPR: rWorksheetSett.importSheetPr( mrStrm ); break;
case BIFF_ID_SHEETPROTECTION: rWorksheetSett.importSheetProtection( mrStrm ); break;
case BIFF_ID_SHAREDFEATHEAD: importSharedFeatHead(); break;
case BIFF_ID_STANDARDWIDTH: importStandardWidth(); break;
case BIFF_ID_UNCALCED: rWorkbookSett.importUncalced( mrStrm ); break;
case BIFF_ID_VCENTER: rPageSett.importVerCenter( mrStrm ); break;
@ -1155,6 +1157,20 @@ void BiffWorksheetFragment::importScenarios()
getScenarios().createSheetScenarios( getSheetIndex() ).importScenarios( mrStrm );
}
void BiffWorksheetFragment::importSharedFeatHead()
{
mrStrm.skip( 12 );
sal_uInt16 nType = mrStrm.readuInt16();
mrStrm.skip( 5 );
switch( nType )
{
case BIFF_SHRFEATHEAD_SHEETPROT:
if( mrStrm.getRemaining() >= 4 )
getWorksheetSettings().importSheetProtection( mrStrm );
break;
}
}
void BiffWorksheetFragment::importStandardWidth()
{
sal_uInt16 nWidth;

View file

@ -60,21 +60,21 @@ const sal_uInt16 BIFF_SHEETPR_SYMBOLSRIGHT = 0x0080;
const sal_uInt16 BIFF_SHEETPR_FITTOPAGES = 0x0100;
const sal_uInt16 BIFF_SHEETPR_SKIPEXT = 0x0200; /// BIFF3-BIFF4
const sal_uInt16 BIFF_SHEETPROT_OBJECTS = 0x0001;
const sal_uInt16 BIFF_SHEETPROT_SCENARIOS = 0x0002;
const sal_uInt16 BIFF_SHEETPROT_FORMAT_CELLS = 0x0004;
const sal_uInt16 BIFF_SHEETPROT_FORMAT_COLUMNS = 0x0008;
const sal_uInt16 BIFF_SHEETPROT_FORMAT_ROWS = 0x0010;
const sal_uInt16 BIFF_SHEETPROT_INSERT_COLUMNS = 0x0020;
const sal_uInt16 BIFF_SHEETPROT_INSERT_ROWS = 0x0040;
const sal_uInt16 BIFF_SHEETPROT_INSERT_HLINKS = 0x0080;
const sal_uInt16 BIFF_SHEETPROT_DELETE_COLUMNS = 0x0100;
const sal_uInt16 BIFF_SHEETPROT_DELETE_ROWS = 0x0200;
const sal_uInt16 BIFF_SHEETPROT_SELECT_LOCKED = 0x0400;
const sal_uInt16 BIFF_SHEETPROT_SORT = 0x0800;
const sal_uInt16 BIFF_SHEETPROT_AUTOFILTER = 0x1000;
const sal_uInt16 BIFF_SHEETPROT_PIVOTTABLES = 0x2000;
const sal_uInt16 BIFF_SHEETPROT_SELECT_UNLOCKED = 0x4000;
const sal_uInt32 BIFF_SHEETPROT_OBJECTS = 0x00000001;
const sal_uInt32 BIFF_SHEETPROT_SCENARIOS = 0x00000002;
const sal_uInt32 BIFF_SHEETPROT_FORMAT_CELLS = 0x00000004;
const sal_uInt32 BIFF_SHEETPROT_FORMAT_COLUMNS = 0x00000008;
const sal_uInt32 BIFF_SHEETPROT_FORMAT_ROWS = 0x00000010;
const sal_uInt32 BIFF_SHEETPROT_INSERT_COLUMNS = 0x00000020;
const sal_uInt32 BIFF_SHEETPROT_INSERT_ROWS = 0x00000040;
const sal_uInt32 BIFF_SHEETPROT_INSERT_HLINKS = 0x00000080;
const sal_uInt32 BIFF_SHEETPROT_DELETE_COLUMNS = 0x00000100;
const sal_uInt32 BIFF_SHEETPROT_DELETE_ROWS = 0x00000200;
const sal_uInt32 BIFF_SHEETPROT_SELECT_LOCKED = 0x00000400;
const sal_uInt32 BIFF_SHEETPROT_SORT = 0x00000800;
const sal_uInt32 BIFF_SHEETPROT_AUTOFILTER = 0x00001000;
const sal_uInt32 BIFF_SHEETPROT_PIVOTTABLES = 0x00002000;
const sal_uInt32 BIFF_SHEETPROT_SELECT_UNLOCKED = 0x00004000;
} // namespace
@ -277,8 +277,7 @@ void WorksheetSettings::importPassword( BiffInputStream& rStrm )
void WorksheetSettings::importSheetProtection( BiffInputStream& rStrm )
{
rStrm.skip( 19 );
sal_uInt16 nFlags = rStrm.readuInt16();
sal_uInt32 nFlags = rStrm.readuInt32();
// set flag means protection is disabled
maSheetProt.mbObjects = !getFlag( nFlags, BIFF_SHEETPROT_OBJECTS );
maSheetProt.mbScenarios = !getFlag( nFlags, BIFF_SHEETPROT_SCENARIOS );

View file

@ -1001,5 +1001,11 @@ namespace DOM
events::CEventDispatcher::dispatchEvent(m_aNodePtr, evt);
return sal_True;
}
::sal_Int64 SAL_CALL CNode::getSomething(const Sequence< ::sal_Int8 >& /*aIdentifier*/)
throw (RuntimeException)
{
return sal::static_int_cast<sal_Int64>(reinterpret_cast<sal_IntPtr>(m_aNodePtr));
}
}

View file

@ -37,9 +37,10 @@
#include <sal/types.h>
#include <sax/fastattribs.hxx>
#include <cppuhelper/implbase1.hxx>
#include <cppuhelper/implbase2.hxx>
#include <cppuhelper/implbase3.hxx>
#include <com/sun/star/uno/Reference.h>
#include <com/sun/star/uno/Exception.hpp>
#include <com/sun/star/lang/XUnoTunnel.hpp>
#include <com/sun/star/xml/dom/XNode.hpp>
#include <com/sun/star/xml/dom/XNodeList.hpp>
#include <com/sun/star/xml/dom/XNamedNodeMap.hpp>
@ -67,6 +68,8 @@ using namespace com::sun::star::xml::sax;
using namespace com::sun::star::xml::dom;
using namespace com::sun::star::xml::dom::events;
using com::sun::star::lang::XUnoTunnel;
namespace DOM
{
struct Context
@ -117,7 +120,7 @@ namespace DOM
typedef std::map< const xmlNodePtr, CNode* > nodemap_t;
class CNode : public cppu::WeakImplHelper2< XNode, XEventTarget >
class CNode : public cppu::WeakImplHelper3< XNode, XUnoTunnel, XEventTarget >
{
friend class CDocument;
friend class CElement;
@ -342,6 +345,9 @@ namespace DOM
virtual sal_Bool SAL_CALL dispatchEvent(const Reference< XEvent >& evt)
throw(RuntimeException, EventException);
// --- XUnoTunnel
virtual ::sal_Int64 SAL_CALL getSomething(const Sequence< ::sal_Int8 >& aIdentifier)
throw (RuntimeException);
};
/// eliminate redundant namespace declarations