1*ca5ec200SAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
3*ca5ec200SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
4*ca5ec200SAndrew Rist * or more contributor license agreements. See the NOTICE file
5*ca5ec200SAndrew Rist * distributed with this work for additional information
6*ca5ec200SAndrew Rist * regarding copyright ownership. The ASF licenses this file
7*ca5ec200SAndrew Rist * to you under the Apache License, Version 2.0 (the
8*ca5ec200SAndrew Rist * "License"); you may not use this file except in compliance
9*ca5ec200SAndrew Rist * with the License. You may obtain a copy of the License at
10*ca5ec200SAndrew Rist *
11*ca5ec200SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12*ca5ec200SAndrew Rist *
13*ca5ec200SAndrew Rist * Unless required by applicable law or agreed to in writing,
14*ca5ec200SAndrew Rist * software distributed under the License is distributed on an
15*ca5ec200SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*ca5ec200SAndrew Rist * KIND, either express or implied. See the License for the
17*ca5ec200SAndrew Rist * specific language governing permissions and limitations
18*ca5ec200SAndrew Rist * under the License.
19*ca5ec200SAndrew Rist *
20*ca5ec200SAndrew Rist *************************************************************/
21*ca5ec200SAndrew Rist
22*ca5ec200SAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir #include "oox/dump/oledumper.hxx"
25cdf0e10cSrcweir
26cdf0e10cSrcweir #include <com/sun/star/io/XInputStream.hpp>
27cdf0e10cSrcweir #include <com/sun/star/io/XOutputStream.hpp>
28cdf0e10cSrcweir #include <osl/file.hxx>
29cdf0e10cSrcweir #include <osl/thread.h>
30cdf0e10cSrcweir #include <rtl/tencinfo.h>
31cdf0e10cSrcweir #include "oox/core/filterbase.hxx"
32cdf0e10cSrcweir #include "oox/helper/binaryoutputstream.hxx"
33cdf0e10cSrcweir #include "oox/ole/olestorage.hxx"
34cdf0e10cSrcweir #include "oox/ole/vbainputstream.hxx"
35cdf0e10cSrcweir
36cdf0e10cSrcweir #if OOX_INCLUDE_DUMPER
37cdf0e10cSrcweir
38cdf0e10cSrcweir namespace oox {
39cdf0e10cSrcweir namespace dump {
40cdf0e10cSrcweir
41cdf0e10cSrcweir // ============================================================================
42cdf0e10cSrcweir
43cdf0e10cSrcweir using namespace ::com::sun::star::io;
44cdf0e10cSrcweir using namespace ::com::sun::star::uno;
45cdf0e10cSrcweir
46cdf0e10cSrcweir using ::rtl::OString;
47cdf0e10cSrcweir using ::rtl::OStringToOUString;
48cdf0e10cSrcweir using ::rtl::OUString;
49cdf0e10cSrcweir using ::rtl::OUStringBuffer;
50cdf0e10cSrcweir
51cdf0e10cSrcweir // ============================================================================
52cdf0e10cSrcweir // ============================================================================
53cdf0e10cSrcweir
dumpAnsiString32(const String & rName)54cdf0e10cSrcweir OUString OleInputObjectBase::dumpAnsiString32( const String& rName )
55cdf0e10cSrcweir {
56cdf0e10cSrcweir return dumpCharArray( rName, mxStrm->readInt32(), RTL_TEXTENCODING_MS_1252 );
57cdf0e10cSrcweir }
58cdf0e10cSrcweir
dumpUniString32(const String & rName)59cdf0e10cSrcweir OUString OleInputObjectBase::dumpUniString32( const String& rName )
60cdf0e10cSrcweir {
61cdf0e10cSrcweir return dumpUnicodeArray( rName, mxStrm->readInt32() );
62cdf0e10cSrcweir }
63cdf0e10cSrcweir
dumpStdClipboardFormat(const String & rName)64cdf0e10cSrcweir sal_Int32 OleInputObjectBase::dumpStdClipboardFormat( const String& rName )
65cdf0e10cSrcweir {
66cdf0e10cSrcweir return dumpDec< sal_Int32 >( rName( "clipboard-format" ), "OLE-STD-CLIPBOARD-FORMAT" );
67cdf0e10cSrcweir }
68cdf0e10cSrcweir
dumpAnsiString32OrStdClip(const String & rName)69cdf0e10cSrcweir OUString OleInputObjectBase::dumpAnsiString32OrStdClip( const String& rName )
70cdf0e10cSrcweir {
71cdf0e10cSrcweir sal_Int32 nLen = mxStrm->readInt32();
72cdf0e10cSrcweir return (nLen < 0) ? OUString::valueOf( dumpStdClipboardFormat( rName ) ) : dumpCharArray( rName, nLen, RTL_TEXTENCODING_MS_1252 );
73cdf0e10cSrcweir }
74cdf0e10cSrcweir
dumpUniString32OrStdClip(const String & rName)75cdf0e10cSrcweir OUString OleInputObjectBase::dumpUniString32OrStdClip( const String& rName )
76cdf0e10cSrcweir {
77cdf0e10cSrcweir sal_Int32 nLen = mxStrm->readInt32();
78cdf0e10cSrcweir return (nLen < 0) ? OUString::valueOf( dumpStdClipboardFormat( rName ) ) : dumpUnicodeArray( rName, nLen );
79cdf0e10cSrcweir }
80cdf0e10cSrcweir
writeOleColorItem(const String & rName,sal_uInt32 nColor)81cdf0e10cSrcweir void OleInputObjectBase::writeOleColorItem( const String& rName, sal_uInt32 nColor )
82cdf0e10cSrcweir {
83cdf0e10cSrcweir MultiItemsGuard aMultiGuard( mxOut );
84cdf0e10cSrcweir writeHexItem( rName, nColor, "OLE-COLOR" );
85cdf0e10cSrcweir }
86cdf0e10cSrcweir
dumpOleColor(const String & rName)87cdf0e10cSrcweir sal_uInt32 OleInputObjectBase::dumpOleColor( const String& rName )
88cdf0e10cSrcweir {
89cdf0e10cSrcweir sal_uInt32 nOleColor = mxStrm->readuInt32();
90cdf0e10cSrcweir writeOleColorItem( rName, nOleColor );
91cdf0e10cSrcweir return nOleColor;
92cdf0e10cSrcweir }
93cdf0e10cSrcweir
94cdf0e10cSrcweir // ============================================================================
95cdf0e10cSrcweir // ============================================================================
96cdf0e10cSrcweir
StdFontObject(const InputObjectBase & rParent)97cdf0e10cSrcweir StdFontObject::StdFontObject( const InputObjectBase& rParent )
98cdf0e10cSrcweir {
99cdf0e10cSrcweir construct( rParent );
100cdf0e10cSrcweir }
101cdf0e10cSrcweir
implDump()102cdf0e10cSrcweir void StdFontObject::implDump()
103cdf0e10cSrcweir {
104cdf0e10cSrcweir dumpDec< sal_uInt8 >( "version" );
105cdf0e10cSrcweir dumpDec< sal_uInt16 >( "charset", "CHARSET" );
106cdf0e10cSrcweir dumpHex< sal_uInt8 >( "flags", "STDFONT-FLAGS" );
107cdf0e10cSrcweir dumpDec< sal_uInt16 >( "weight", "FONT-WEIGHT" );
108cdf0e10cSrcweir dumpDec< sal_uInt32 >( "height", "STDFONT-HEIGHT" );
109cdf0e10cSrcweir dumpCharArray( "name", mxStrm->readuInt8(), RTL_TEXTENCODING_ASCII_US );
110cdf0e10cSrcweir }
111cdf0e10cSrcweir
112cdf0e10cSrcweir // ============================================================================
113cdf0e10cSrcweir
StdPicObject(const InputObjectBase & rParent)114cdf0e10cSrcweir StdPicObject::StdPicObject( const InputObjectBase& rParent )
115cdf0e10cSrcweir {
116cdf0e10cSrcweir construct( rParent );
117cdf0e10cSrcweir }
118cdf0e10cSrcweir
implDump()119cdf0e10cSrcweir void StdPicObject::implDump()
120cdf0e10cSrcweir {
121cdf0e10cSrcweir dumpHex< sal_uInt32 >( "identifier", "STDPIC-ID" );
122cdf0e10cSrcweir sal_uInt32 nSize = dumpHex< sal_uInt32 >( "image-size", "CONV-DEC" );
123cdf0e10cSrcweir dumpBinary( "image-data", nSize );
124cdf0e10cSrcweir }
125cdf0e10cSrcweir
126cdf0e10cSrcweir // ============================================================================
127cdf0e10cSrcweir
128cdf0e10cSrcweir namespace {
129cdf0e10cSrcweir
130cdf0e10cSrcweir const sal_uInt32 STDHLINK_HASTARGET = 0x00000001; /// Has hyperlink moniker.
131cdf0e10cSrcweir const sal_uInt32 STDHLINK_ABSOLUTE = 0x00000002; /// Absolute path.
132cdf0e10cSrcweir const sal_uInt32 STDHLINK_HASLOCATION = 0x00000008; /// Has target location.
133cdf0e10cSrcweir const sal_uInt32 STDHLINK_HASDISPLAY = 0x00000010; /// Has display string.
134cdf0e10cSrcweir const sal_uInt32 STDHLINK_HASGUID = 0x00000020; /// Has identification GUID.
135cdf0e10cSrcweir const sal_uInt32 STDHLINK_HASTIME = 0x00000040; /// Has creation time.
136cdf0e10cSrcweir const sal_uInt32 STDHLINK_HASFRAME = 0x00000080; /// Has frame.
137cdf0e10cSrcweir const sal_uInt32 STDHLINK_ASSTRING = 0x00000100; /// Hyperlink as simple string.
138cdf0e10cSrcweir
139cdf0e10cSrcweir } // namespace
140cdf0e10cSrcweir
StdHlinkObject(const InputObjectBase & rParent)141cdf0e10cSrcweir StdHlinkObject::StdHlinkObject( const InputObjectBase& rParent )
142cdf0e10cSrcweir {
143cdf0e10cSrcweir construct( rParent );
144cdf0e10cSrcweir }
145cdf0e10cSrcweir
implDump()146cdf0e10cSrcweir void StdHlinkObject::implDump()
147cdf0e10cSrcweir {
148cdf0e10cSrcweir dumpDec< sal_uInt32 >( "stream-version" );
149cdf0e10cSrcweir sal_uInt32 nFlags = dumpHex< sal_uInt32 >( "flags", "STDHLINK-FLAGS" );
150cdf0e10cSrcweir if( getFlag( nFlags, STDHLINK_HASDISPLAY ) )
151cdf0e10cSrcweir dumpHyperlinkString( "display", true );
152cdf0e10cSrcweir if( getFlag( nFlags, STDHLINK_HASFRAME ) )
153cdf0e10cSrcweir dumpHyperlinkString( "frame", true );
154cdf0e10cSrcweir if( getFlag( nFlags, STDHLINK_HASTARGET ) )
155cdf0e10cSrcweir {
156cdf0e10cSrcweir if( getFlag( nFlags, STDHLINK_ASSTRING ) )
157cdf0e10cSrcweir dumpHyperlinkString( "filename", true );
158cdf0e10cSrcweir else if( !dumpGuidAndMoniker() )
159cdf0e10cSrcweir return;
160cdf0e10cSrcweir }
161cdf0e10cSrcweir if( getFlag( nFlags, STDHLINK_HASLOCATION ) )
162cdf0e10cSrcweir dumpHyperlinkString( "location", true );
163cdf0e10cSrcweir if( getFlag( nFlags, STDHLINK_HASGUID ) )
164cdf0e10cSrcweir dumpGuid( "id-guid" );
165cdf0e10cSrcweir if( getFlag( nFlags, STDHLINK_HASTIME ) )
166cdf0e10cSrcweir dumpFileTime( "creation-time" );
167cdf0e10cSrcweir }
168cdf0e10cSrcweir
dumpHyperlinkString(const String & rName,bool bUnicode)169cdf0e10cSrcweir OUString StdHlinkObject::dumpHyperlinkString( const String& rName, bool bUnicode )
170cdf0e10cSrcweir {
171cdf0e10cSrcweir return bUnicode ? dumpUniString32( rName ) : dumpAnsiString32( rName );
172cdf0e10cSrcweir }
173cdf0e10cSrcweir
dumpGuidAndMoniker()174cdf0e10cSrcweir bool StdHlinkObject::dumpGuidAndMoniker()
175cdf0e10cSrcweir {
176cdf0e10cSrcweir bool bValidMoniker = true;
177cdf0e10cSrcweir OUString aGuid = cfg().getStringOption( dumpGuid( "moniker" ), OUString() );
178cdf0e10cSrcweir IndentGuard aIndGuard( mxOut );
179cdf0e10cSrcweir if( aGuid.equalsAscii( "URLMoniker" ) )
180cdf0e10cSrcweir dumpUrlMoniker();
181cdf0e10cSrcweir else if( aGuid.equalsAscii( "FileMoniker" ) )
182cdf0e10cSrcweir dumpFileMoniker();
183cdf0e10cSrcweir else if( aGuid.equalsAscii( "ItemMoniker" ) )
184cdf0e10cSrcweir dumpItemMoniker();
185cdf0e10cSrcweir else if( aGuid.equalsAscii( "AntiMoniker" ) )
186cdf0e10cSrcweir dumpAntiMoniker();
187cdf0e10cSrcweir else if( aGuid.equalsAscii( "CompositeMoniker" ) )
188cdf0e10cSrcweir dumpCompositeMoniker();
189cdf0e10cSrcweir else
190cdf0e10cSrcweir bValidMoniker = false;
191cdf0e10cSrcweir return bValidMoniker;
192cdf0e10cSrcweir }
193cdf0e10cSrcweir
dumpUrlMoniker()194cdf0e10cSrcweir void StdHlinkObject::dumpUrlMoniker()
195cdf0e10cSrcweir {
196cdf0e10cSrcweir sal_Int32 nBytes = dumpDec< sal_Int32 >( "url-bytes" );
197cdf0e10cSrcweir sal_Int64 nEndPos = mxStrm->tell() + ::std::max< sal_Int32 >( nBytes, 0 );
198cdf0e10cSrcweir dumpNullUnicodeArray( "url" );
199cdf0e10cSrcweir if( mxStrm->tell() + 24 == nEndPos )
200cdf0e10cSrcweir {
201cdf0e10cSrcweir dumpGuid( "implementation-id" );
202cdf0e10cSrcweir dumpDec< sal_uInt32 >( "version" );
203cdf0e10cSrcweir dumpHex< sal_uInt32 >( "flags", "STDHLINK-URL-FLAGS" );
204cdf0e10cSrcweir }
205cdf0e10cSrcweir dumpRemainingTo( nEndPos );
206cdf0e10cSrcweir }
207cdf0e10cSrcweir
dumpFileMoniker()208cdf0e10cSrcweir void StdHlinkObject::dumpFileMoniker()
209cdf0e10cSrcweir {
210cdf0e10cSrcweir dumpDec< sal_Int16 >( "up-levels" );
211cdf0e10cSrcweir dumpHyperlinkString( "ansi-filename", false );
212cdf0e10cSrcweir dumpDec< sal_Int16 >( "server-path-len" );
213cdf0e10cSrcweir dumpHex< sal_uInt16 >( "version" );
214cdf0e10cSrcweir dumpUnused( 20 );
215cdf0e10cSrcweir sal_Int32 nBytes = dumpDec< sal_Int32 >( "total-bytes" );
216cdf0e10cSrcweir sal_Int64 nEndPos = mxStrm->tell() + ::std::max< sal_Int32 >( nBytes, 0 );
217cdf0e10cSrcweir if( nBytes > 0 )
218cdf0e10cSrcweir {
219cdf0e10cSrcweir sal_Int32 nFileBytes = dumpDec< sal_Int32 >( "uni-filename-bytes" );
220cdf0e10cSrcweir dumpDec< sal_uInt16 >( "key-value" );
221cdf0e10cSrcweir dumpUnicodeArray( "unicode-filename", nFileBytes / 2 );
222cdf0e10cSrcweir }
223cdf0e10cSrcweir dumpRemainingTo( nEndPos );
224cdf0e10cSrcweir }
225cdf0e10cSrcweir
dumpItemMoniker()226cdf0e10cSrcweir void StdHlinkObject::dumpItemMoniker()
227cdf0e10cSrcweir {
228cdf0e10cSrcweir sal_Int32 nBytes = dumpDec< sal_Int32 >( "delimiter-bytes" );
229cdf0e10cSrcweir sal_Int64 nEndPos = mxStrm->tell() + ::std::max< sal_Int32 >( nBytes, 0 );
230cdf0e10cSrcweir dumpNullCharArray( "ansi-delimiter", RTL_TEXTENCODING_MS_1252 );
231cdf0e10cSrcweir if( mxStrm->tell() < nEndPos )
232cdf0e10cSrcweir dumpUnicodeArray( "unicode-delimiter", (nEndPos - mxStrm->tell()) / 2 );
233cdf0e10cSrcweir mxStrm->seek( nEndPos );
234cdf0e10cSrcweir
235cdf0e10cSrcweir nBytes = dumpDec< sal_Int32 >( "item-bytes" );
236cdf0e10cSrcweir nEndPos = mxStrm->tell() + ::std::max< sal_Int32 >( nBytes, 0 );
237cdf0e10cSrcweir dumpNullCharArray( "ansi-item", RTL_TEXTENCODING_MS_1252 );
238cdf0e10cSrcweir if( mxStrm->tell() < nEndPos )
239cdf0e10cSrcweir dumpUnicodeArray( "unicode-item", (nEndPos - mxStrm->tell()) / 2 );
240cdf0e10cSrcweir mxStrm->seek( nEndPos );
241cdf0e10cSrcweir }
242cdf0e10cSrcweir
dumpAntiMoniker()243cdf0e10cSrcweir void StdHlinkObject::dumpAntiMoniker()
244cdf0e10cSrcweir {
245cdf0e10cSrcweir dumpDec< sal_Int32 >( "count" );
246cdf0e10cSrcweir }
247cdf0e10cSrcweir
dumpCompositeMoniker()248cdf0e10cSrcweir void StdHlinkObject::dumpCompositeMoniker()
249cdf0e10cSrcweir {
250cdf0e10cSrcweir sal_Int32 nCount = dumpDec< sal_Int32 >( "moniker-count" );
251cdf0e10cSrcweir for( sal_Int32 nIndex = 0; !mxStrm->isEof() && (nIndex < nCount); ++nIndex )
252cdf0e10cSrcweir dumpGuidAndMoniker();
253cdf0e10cSrcweir }
254cdf0e10cSrcweir
255cdf0e10cSrcweir // ============================================================================
256cdf0e10cSrcweir // ============================================================================
257cdf0e10cSrcweir
OleStreamObject(const ObjectBase & rParent,const BinaryInputStreamRef & rxStrm,const OUString & rSysFileName)258cdf0e10cSrcweir OleStreamObject::OleStreamObject( const ObjectBase& rParent, const BinaryInputStreamRef& rxStrm, const OUString& rSysFileName )
259cdf0e10cSrcweir {
260cdf0e10cSrcweir construct( rParent, rxStrm, rSysFileName );
261cdf0e10cSrcweir }
262cdf0e10cSrcweir
263cdf0e10cSrcweir // ============================================================================
264cdf0e10cSrcweir
OleCompObjObject(const ObjectBase & rParent,const BinaryInputStreamRef & rxStrm,const OUString & rSysFileName)265cdf0e10cSrcweir OleCompObjObject::OleCompObjObject( const ObjectBase& rParent, const BinaryInputStreamRef& rxStrm, const OUString& rSysFileName ) :
266cdf0e10cSrcweir OleStreamObject( rParent, rxStrm, rSysFileName )
267cdf0e10cSrcweir {
268cdf0e10cSrcweir }
269cdf0e10cSrcweir
implDump()270cdf0e10cSrcweir void OleCompObjObject::implDump()
271cdf0e10cSrcweir {
272cdf0e10cSrcweir dumpUnused( 4 );
273cdf0e10cSrcweir dumpDec< sal_uInt32 >( "version" );
274cdf0e10cSrcweir dumpUnused( 20 );
275cdf0e10cSrcweir dumpAnsiString32( "ansi-display-name" );
276cdf0e10cSrcweir dumpAnsiString32OrStdClip( "ansi-clipboard-format" );
277cdf0e10cSrcweir if( mxStrm->getRemaining() >= 4 )
278cdf0e10cSrcweir {
279cdf0e10cSrcweir sal_Int32 nLen = mxStrm->readInt32();
280cdf0e10cSrcweir if( (0 <= nLen) && (nLen <= 40) )
281cdf0e10cSrcweir {
282cdf0e10cSrcweir dumpCharArray( "ansi-unused", nLen, RTL_TEXTENCODING_MS_1252 );
283cdf0e10cSrcweir if( (mxStrm->getRemaining() >= 4) && (dumpHex< sal_Int32 >( "unicode-marker" ) == 0x71B239F4) )
284cdf0e10cSrcweir {
285cdf0e10cSrcweir dumpUniString32( "unicode-display-name" );
286cdf0e10cSrcweir dumpUniString32OrStdClip( "unicode-clipboard-format" );
287cdf0e10cSrcweir dumpUniString32( "unicode-unused" );
288cdf0e10cSrcweir }
289cdf0e10cSrcweir }
290cdf0e10cSrcweir else
291cdf0e10cSrcweir writeDecItem( "length", nLen );
292cdf0e10cSrcweir }
293cdf0e10cSrcweir dumpRemainingStream();
294cdf0e10cSrcweir }
295cdf0e10cSrcweir
296cdf0e10cSrcweir // ============================================================================
297cdf0e10cSrcweir // ============================================================================
298cdf0e10cSrcweir
299cdf0e10cSrcweir namespace {
300cdf0e10cSrcweir
301cdf0e10cSrcweir const sal_Int32 OLEPROP_ID_DICTIONARY = 0;
302cdf0e10cSrcweir const sal_Int32 OLEPROP_ID_CODEPAGE = 1;
303cdf0e10cSrcweir
304cdf0e10cSrcweir const sal_uInt16 OLEPROP_TYPE_INT16 = 2;
305cdf0e10cSrcweir const sal_uInt16 OLEPROP_TYPE_INT32 = 3;
306cdf0e10cSrcweir const sal_uInt16 OLEPROP_TYPE_FLOAT = 4;
307cdf0e10cSrcweir const sal_uInt16 OLEPROP_TYPE_DOUBLE = 5;
308cdf0e10cSrcweir const sal_uInt16 OLEPROP_TYPE_DATE = 7;
309cdf0e10cSrcweir const sal_uInt16 OLEPROP_TYPE_STRING = 8;
310cdf0e10cSrcweir const sal_uInt16 OLEPROP_TYPE_STATUS = 10;
311cdf0e10cSrcweir const sal_uInt16 OLEPROP_TYPE_BOOL = 11;
312cdf0e10cSrcweir const sal_uInt16 OLEPROP_TYPE_VARIANT = 12;
313cdf0e10cSrcweir const sal_uInt16 OLEPROP_TYPE_INT8 = 16;
314cdf0e10cSrcweir const sal_uInt16 OLEPROP_TYPE_UINT8 = 17;
315cdf0e10cSrcweir const sal_uInt16 OLEPROP_TYPE_UINT16 = 18;
316cdf0e10cSrcweir const sal_uInt16 OLEPROP_TYPE_UINT32 = 19;
317cdf0e10cSrcweir const sal_uInt16 OLEPROP_TYPE_INT64 = 20;
318cdf0e10cSrcweir const sal_uInt16 OLEPROP_TYPE_UINT64 = 21;
319cdf0e10cSrcweir const sal_uInt16 OLEPROP_TYPE_STRING8 = 30;
320cdf0e10cSrcweir const sal_uInt16 OLEPROP_TYPE_STRING16 = 31;
321cdf0e10cSrcweir const sal_uInt16 OLEPROP_TYPE_FILETIME = 64;
322cdf0e10cSrcweir const sal_uInt16 OLEPROP_TYPE_BLOB = 65;
323cdf0e10cSrcweir const sal_uInt16 OLEPROP_TYPE_STREAM = 66;
324cdf0e10cSrcweir const sal_uInt16 OLEPROP_TYPE_STORAGE = 67;
325cdf0e10cSrcweir const sal_uInt16 OLEPROP_TYPE_CLIPFMT = 71;
326cdf0e10cSrcweir
327cdf0e10cSrcweir const sal_uInt16 OLEPROP_TYPE_SIMPLE = 0x0000;
328cdf0e10cSrcweir const sal_uInt16 OLEPROP_TYPE_VECTOR = 0x1000;
329cdf0e10cSrcweir const sal_uInt16 OLEPROP_TYPE_ARRAY = 0x2000;
330cdf0e10cSrcweir
331cdf0e10cSrcweir const sal_uInt16 CODEPAGE_UNICODE = 1200;
332cdf0e10cSrcweir
333cdf0e10cSrcweir const sal_uInt32 AX_STRING_COMPRESSED = 0x80000000;
334cdf0e10cSrcweir
335cdf0e10cSrcweir } // namespace
336cdf0e10cSrcweir
337cdf0e10cSrcweir // ============================================================================
338cdf0e10cSrcweir
OlePropertyStreamObject(const ObjectBase & rParent,const BinaryInputStreamRef & rxStrm,const OUString & rSysFileName)339cdf0e10cSrcweir OlePropertyStreamObject::OlePropertyStreamObject( const ObjectBase& rParent, const BinaryInputStreamRef& rxStrm, const OUString& rSysFileName )
340cdf0e10cSrcweir {
341cdf0e10cSrcweir construct( rParent, rxStrm, rSysFileName );
342cdf0e10cSrcweir }
343cdf0e10cSrcweir
implDump()344cdf0e10cSrcweir void OlePropertyStreamObject::implDump()
345cdf0e10cSrcweir {
346cdf0e10cSrcweir OUStringVector aGuidVec;
347cdf0e10cSrcweir ::std::vector< sal_uInt32 > aStartPosVec;
348cdf0e10cSrcweir
349cdf0e10cSrcweir // dump header
350cdf0e10cSrcweir writeEmptyItem( "HEADER" );
351cdf0e10cSrcweir {
352cdf0e10cSrcweir IndentGuard aIndGuard( mxOut );
353cdf0e10cSrcweir dumpHex< sal_uInt16 >( "byte-order", "OLEPROP-BYTE-ORDER" );
354cdf0e10cSrcweir dumpDec< sal_uInt16 >( "version" );
355cdf0e10cSrcweir dumpDec< sal_uInt16 >( "os-minor" );
356cdf0e10cSrcweir dumpDec< sal_uInt16 >( "os-type", "OLEPROP-OSTYPE" );
357cdf0e10cSrcweir dumpGuid( "guid" );
358cdf0e10cSrcweir sal_Int32 nSectCount = dumpDec< sal_Int32 >( "section-count" );
359cdf0e10cSrcweir
360cdf0e10cSrcweir // dump table of section positions
361cdf0e10cSrcweir {
362cdf0e10cSrcweir TableGuard aTabGuard( mxOut, 15, 60 );
363cdf0e10cSrcweir mxOut->resetItemIndex();
364cdf0e10cSrcweir for( sal_Int32 nSectIdx = 0; !mxStrm->isEof() && (nSectIdx < nSectCount); ++nSectIdx )
365cdf0e10cSrcweir {
366cdf0e10cSrcweir MultiItemsGuard aMultiGuard( mxOut );
367cdf0e10cSrcweir writeEmptyItem( "#section" );
368cdf0e10cSrcweir aGuidVec.push_back( dumpGuid( "guid" ) );
369cdf0e10cSrcweir aStartPosVec.push_back( dumpHex< sal_uInt32 >( "start-pos", "CONV-DEC" ) );
370cdf0e10cSrcweir }
371cdf0e10cSrcweir }
372cdf0e10cSrcweir }
373cdf0e10cSrcweir mxOut->emptyLine();
374cdf0e10cSrcweir
375cdf0e10cSrcweir // dump sections
376cdf0e10cSrcweir for( size_t nSectIdx = 0; !mxStrm->isEof() && (nSectIdx < aStartPosVec.size()); ++nSectIdx )
377cdf0e10cSrcweir dumpSection( aGuidVec[ nSectIdx ], aStartPosVec[ nSectIdx ] );
378cdf0e10cSrcweir }
379cdf0e10cSrcweir
dumpSection(const OUString & rGuid,sal_uInt32 nStartPos)380cdf0e10cSrcweir void OlePropertyStreamObject::dumpSection( const OUString& rGuid, sal_uInt32 nStartPos )
381cdf0e10cSrcweir {
382cdf0e10cSrcweir // property ID names
383cdf0e10cSrcweir mxPropIds = cfg().createNameList< ConstList >( "OLEPROP-IDS" );
384cdf0e10cSrcweir OUString aGuidName = cfg().getStringOption( rGuid, OUString() );
385cdf0e10cSrcweir if( aGuidName.equalsAscii( "GlobalDocProp" ) )
386cdf0e10cSrcweir mxPropIds->includeList( cfg().getNameList( "OLEPROP-GLOBALIDS" ) );
387cdf0e10cSrcweir else if( aGuidName.equalsAscii( "BuiltinDocProp" ) )
388cdf0e10cSrcweir mxPropIds->includeList( cfg().getNameList( "OLEPROP-BUILTINIDS" ) );
389cdf0e10cSrcweir else
390cdf0e10cSrcweir mxPropIds->includeList( cfg().getNameList( "OLEPROP-BASEIDS" ) );
391cdf0e10cSrcweir
392cdf0e10cSrcweir // property ID/position map
393cdf0e10cSrcweir typedef ::std::map< sal_Int32, sal_uInt32 > PropertyPosMap;
394cdf0e10cSrcweir PropertyPosMap aPropMap;
395cdf0e10cSrcweir
396cdf0e10cSrcweir // dump section header line
397cdf0e10cSrcweir writeSectionHeader( rGuid, nStartPos );
398cdf0e10cSrcweir
399cdf0e10cSrcweir // seek to section
400cdf0e10cSrcweir IndentGuard aIndGuard( mxOut );
401cdf0e10cSrcweir if( startElement( nStartPos ) )
402cdf0e10cSrcweir {
403cdf0e10cSrcweir // dump section header
404cdf0e10cSrcweir dumpDec< sal_Int32 >( "size" );
405cdf0e10cSrcweir sal_Int32 nPropCount = dumpDec< sal_Int32 >( "property-count" );
406cdf0e10cSrcweir
407cdf0e10cSrcweir // dump table of property positions
408cdf0e10cSrcweir {
409cdf0e10cSrcweir TableGuard aTabGuard( mxOut, 15, 25 );
410cdf0e10cSrcweir mxOut->resetItemIndex();
411cdf0e10cSrcweir for( sal_Int32 nPropIdx = 0; !mxStrm->isEof() && (nPropIdx < nPropCount); ++nPropIdx )
412cdf0e10cSrcweir {
413cdf0e10cSrcweir MultiItemsGuard aMultiGuard( mxOut );
414cdf0e10cSrcweir writeEmptyItem( "#property" );
415cdf0e10cSrcweir sal_Int32 nPropId = dumpDec< sal_Int32 >( "id", mxPropIds );
416cdf0e10cSrcweir sal_uInt32 nPropPos = nStartPos + dumpHex< sal_uInt32 >( "start-pos", "CONV-DEC" );
417cdf0e10cSrcweir aPropMap[ nPropId ] = nPropPos;
418cdf0e10cSrcweir }
419cdf0e10cSrcweir }
420cdf0e10cSrcweir }
421cdf0e10cSrcweir mxOut->emptyLine();
422cdf0e10cSrcweir
423cdf0e10cSrcweir // code page property
424cdf0e10cSrcweir meTextEnc = RTL_TEXTENCODING_MS_1252;
425cdf0e10cSrcweir mbIsUnicode = false;
426cdf0e10cSrcweir PropertyPosMap::iterator aCodePageIt = aPropMap.find( OLEPROP_ID_CODEPAGE );
427cdf0e10cSrcweir if( aCodePageIt != aPropMap.end() )
428cdf0e10cSrcweir {
429cdf0e10cSrcweir dumpCodePageProperty( aCodePageIt->second );
430cdf0e10cSrcweir aPropMap.erase( aCodePageIt );
431cdf0e10cSrcweir }
432cdf0e10cSrcweir
433cdf0e10cSrcweir // dictionary property
434cdf0e10cSrcweir PropertyPosMap::iterator aDictIt = aPropMap.find( OLEPROP_ID_DICTIONARY );
435cdf0e10cSrcweir if( aDictIt != aPropMap.end() )
436cdf0e10cSrcweir {
437cdf0e10cSrcweir dumpDictionaryProperty( aDictIt->second );
438cdf0e10cSrcweir aPropMap.erase( aDictIt );
439cdf0e10cSrcweir }
440cdf0e10cSrcweir
441cdf0e10cSrcweir // other properties
442cdf0e10cSrcweir for( PropertyPosMap::const_iterator aIt = aPropMap.begin(), aEnd = aPropMap.end(); aIt != aEnd; ++aIt )
443cdf0e10cSrcweir dumpProperty( aIt->first, aIt->second );
444cdf0e10cSrcweir
445cdf0e10cSrcweir // remove the user defined list of property ID names
446cdf0e10cSrcweir cfg().eraseNameList( "OLEPROP-IDS" );
447cdf0e10cSrcweir }
448cdf0e10cSrcweir
dumpProperty(sal_Int32 nPropId,sal_uInt32 nStartPos)449cdf0e10cSrcweir void OlePropertyStreamObject::dumpProperty( sal_Int32 nPropId, sal_uInt32 nStartPos )
450cdf0e10cSrcweir {
451cdf0e10cSrcweir writePropertyHeader( nPropId, nStartPos );
452cdf0e10cSrcweir IndentGuard aIndGuard( mxOut );
453cdf0e10cSrcweir if( startElement( nStartPos ) )
454cdf0e10cSrcweir dumpPropertyContents( nPropId );
455cdf0e10cSrcweir mxOut->emptyLine();
456cdf0e10cSrcweir }
457cdf0e10cSrcweir
dumpCodePageProperty(sal_uInt32 nStartPos)458cdf0e10cSrcweir void OlePropertyStreamObject::dumpCodePageProperty( sal_uInt32 nStartPos )
459cdf0e10cSrcweir {
460cdf0e10cSrcweir writePropertyHeader( OLEPROP_ID_CODEPAGE, nStartPos );
461cdf0e10cSrcweir IndentGuard aIndGuard( mxOut );
462cdf0e10cSrcweir if( startElement( nStartPos ) )
463cdf0e10cSrcweir {
464cdf0e10cSrcweir sal_uInt16 nType = dumpPropertyType();
465cdf0e10cSrcweir if( nType == OLEPROP_TYPE_INT16 )
466cdf0e10cSrcweir {
467cdf0e10cSrcweir sal_uInt16 nCodePage = dumpDec< sal_uInt16 >( "codepage", "CODEPAGES" );
468cdf0e10cSrcweir rtl_TextEncoding eNewTextEnc = rtl_getTextEncodingFromWindowsCodePage( nCodePage );
469cdf0e10cSrcweir if( eNewTextEnc != RTL_TEXTENCODING_DONTKNOW )
470cdf0e10cSrcweir meTextEnc = eNewTextEnc;
471cdf0e10cSrcweir mbIsUnicode = nCodePage == CODEPAGE_UNICODE;
472cdf0e10cSrcweir }
473cdf0e10cSrcweir else
474cdf0e10cSrcweir dumpPropertyContents( OLEPROP_ID_CODEPAGE );
475cdf0e10cSrcweir }
476cdf0e10cSrcweir mxOut->emptyLine();
477cdf0e10cSrcweir }
478cdf0e10cSrcweir
dumpDictionaryProperty(sal_uInt32 nStartPos)479cdf0e10cSrcweir void OlePropertyStreamObject::dumpDictionaryProperty( sal_uInt32 nStartPos )
480cdf0e10cSrcweir {
481cdf0e10cSrcweir writePropertyHeader( OLEPROP_ID_DICTIONARY, nStartPos );
482cdf0e10cSrcweir IndentGuard aIndGuard( mxOut );
483cdf0e10cSrcweir if( startElement( nStartPos ) )
484cdf0e10cSrcweir {
485cdf0e10cSrcweir sal_Int32 nCount = dumpDec< sal_Int32 >( "count" );
486cdf0e10cSrcweir for( sal_Int32 nIdx = 0; !mxStrm->isEof() && (nIdx < nCount); ++nIdx )
487cdf0e10cSrcweir {
488cdf0e10cSrcweir MultiItemsGuard aMultiGuard( mxOut );
489cdf0e10cSrcweir TableGuard aTabGuard( mxOut, 10, 20 );
490cdf0e10cSrcweir sal_Int32 nId = dumpDec< sal_Int32 >( "id" );
491cdf0e10cSrcweir OUString aName = dumpString8( "name" );
492cdf0e10cSrcweir if( mxPropIds.get() )
493cdf0e10cSrcweir mxPropIds->setName( nId, aName );
494cdf0e10cSrcweir }
495cdf0e10cSrcweir }
496cdf0e10cSrcweir mxOut->emptyLine();
497cdf0e10cSrcweir }
498cdf0e10cSrcweir
dumpPropertyContents(sal_Int32 nPropId)499cdf0e10cSrcweir sal_uInt16 OlePropertyStreamObject::dumpPropertyContents( sal_Int32 nPropId )
500cdf0e10cSrcweir {
501cdf0e10cSrcweir sal_uInt16 nType = dumpPropertyType();
502cdf0e10cSrcweir sal_uInt16 nBaseType = static_cast< sal_uInt16 >( nType & 0x0FFF );
503cdf0e10cSrcweir sal_uInt16 nArrayType = static_cast< sal_uInt16 >( nType & 0xF000 );
504cdf0e10cSrcweir switch( nArrayType )
505cdf0e10cSrcweir {
506cdf0e10cSrcweir case OLEPROP_TYPE_SIMPLE: dumpPropertyValue( nPropId, nBaseType ); break;
507cdf0e10cSrcweir case OLEPROP_TYPE_VECTOR: dumpPropertyVector( nPropId, nBaseType ); break;
508cdf0e10cSrcweir case OLEPROP_TYPE_ARRAY: dumpPropertyArray( nPropId, nBaseType ); break;
509cdf0e10cSrcweir }
510cdf0e10cSrcweir return nType;
511cdf0e10cSrcweir }
512cdf0e10cSrcweir
dumpPropertyValue(sal_Int32 nPropId,sal_uInt16 nBaseType)513cdf0e10cSrcweir void OlePropertyStreamObject::dumpPropertyValue( sal_Int32 nPropId, sal_uInt16 nBaseType )
514cdf0e10cSrcweir {
515cdf0e10cSrcweir switch( nBaseType )
516cdf0e10cSrcweir {
517cdf0e10cSrcweir case OLEPROP_TYPE_INT16: dumpDec< sal_Int16 >( "value" ); break;
518cdf0e10cSrcweir case OLEPROP_TYPE_INT32: dumpDec< sal_Int32 >( "value" ); break;
519cdf0e10cSrcweir case OLEPROP_TYPE_FLOAT: dumpDec< float >( "value" ); break;
520cdf0e10cSrcweir case OLEPROP_TYPE_DOUBLE: dumpDec< double >( "value" ); break;
521cdf0e10cSrcweir case OLEPROP_TYPE_DATE: dumpDec< double >( "date" ); break;
522cdf0e10cSrcweir case OLEPROP_TYPE_STRING: dumpString8( "value" ); break;
523cdf0e10cSrcweir case OLEPROP_TYPE_STATUS: dumpHex< sal_Int32 >( "status" ); break;
524cdf0e10cSrcweir case OLEPROP_TYPE_BOOL: dumpBool< sal_Int16 >( "value" ); break;
525cdf0e10cSrcweir case OLEPROP_TYPE_VARIANT: dumpPropertyContents( nPropId ); break;
526cdf0e10cSrcweir case OLEPROP_TYPE_INT8: dumpDec< sal_Int8 >( "value" ); break;
527cdf0e10cSrcweir case OLEPROP_TYPE_UINT8: dumpDec< sal_uInt8 >( "value" ); break;
528cdf0e10cSrcweir case OLEPROP_TYPE_UINT16: dumpDec< sal_uInt16 >( "value" ); break;
529cdf0e10cSrcweir case OLEPROP_TYPE_UINT32: dumpDec< sal_uInt32 >( "value" ); break;
530cdf0e10cSrcweir case OLEPROP_TYPE_INT64: dumpDec< sal_Int64 >( "value" ); break;
531cdf0e10cSrcweir case OLEPROP_TYPE_UINT64: dumpDec< sal_uInt64 >( "value" ); break;
532cdf0e10cSrcweir case OLEPROP_TYPE_STRING8: dumpString8( "value" ); break;
533cdf0e10cSrcweir case OLEPROP_TYPE_STRING16: dumpString16( "value" ); break;
534cdf0e10cSrcweir case OLEPROP_TYPE_FILETIME: dumpFileTime( "file-time" ); break;
535cdf0e10cSrcweir case OLEPROP_TYPE_BLOB: dumpBlob( nPropId, "data" ); break;
536cdf0e10cSrcweir case OLEPROP_TYPE_STREAM: dumpString8( "stream-name" ); break;
537cdf0e10cSrcweir case OLEPROP_TYPE_STORAGE: dumpString8( "storage-name" ); break;
538cdf0e10cSrcweir case OLEPROP_TYPE_CLIPFMT: dumpBlob( nPropId, "clip-data" ); break;
539cdf0e10cSrcweir }
540cdf0e10cSrcweir }
541cdf0e10cSrcweir
dumpPropertyVector(sal_Int32 nPropId,sal_uInt16 nBaseType)542cdf0e10cSrcweir void OlePropertyStreamObject::dumpPropertyVector( sal_Int32 nPropId, sal_uInt16 nBaseType )
543cdf0e10cSrcweir {
544cdf0e10cSrcweir sal_Int32 nElemCount = dumpDec< sal_Int32 >( "element-count" );
545cdf0e10cSrcweir for( sal_Int32 nElemIdx = 0; !mxStrm->isEof() && (nElemIdx < nElemCount); ++nElemIdx )
546cdf0e10cSrcweir {
547cdf0e10cSrcweir mxOut->resetItemIndex( nElemIdx );
548cdf0e10cSrcweir writeEmptyItem( "#element" );
549cdf0e10cSrcweir IndentGuard aIndGuard( mxOut );
550cdf0e10cSrcweir dumpPropertyValue( nPropId, nBaseType );
551cdf0e10cSrcweir }
552cdf0e10cSrcweir }
553cdf0e10cSrcweir
dumpPropertyArray(sal_Int32,sal_uInt16)554cdf0e10cSrcweir void OlePropertyStreamObject::dumpPropertyArray( sal_Int32 /*nPropId*/, sal_uInt16 /*nBaseType*/ )
555cdf0e10cSrcweir {
556cdf0e10cSrcweir // TODO
557cdf0e10cSrcweir }
558cdf0e10cSrcweir
dumpPropertyType()559cdf0e10cSrcweir sal_uInt16 OlePropertyStreamObject::dumpPropertyType()
560cdf0e10cSrcweir {
561cdf0e10cSrcweir return static_cast< sal_uInt16 >( dumpHex< sal_Int32 >( "type", "OLEPROP-TYPE" ) & 0xFFFF );
562cdf0e10cSrcweir }
563cdf0e10cSrcweir
dumpBlob(sal_Int32 nPropId,const String & rName)564cdf0e10cSrcweir void OlePropertyStreamObject::dumpBlob( sal_Int32 nPropId, const String& rName )
565cdf0e10cSrcweir {
566cdf0e10cSrcweir sal_Int32 nSize = dumpDec< sal_Int32 >( "data-size" );
567cdf0e10cSrcweir if( nSize > 0 )
568cdf0e10cSrcweir {
569cdf0e10cSrcweir OUString aPropName = mxPropIds->getName( cfg(), nPropId );
570cdf0e10cSrcweir if( aPropName == CREATE_OUSTRING( "'_PID_HLINKS'" ) )
571cdf0e10cSrcweir dumpHlinks( nSize );
572cdf0e10cSrcweir else
573cdf0e10cSrcweir dumpBinary( rName, nSize );
574cdf0e10cSrcweir }
575cdf0e10cSrcweir }
576cdf0e10cSrcweir
dumpString8(const String & rName)577cdf0e10cSrcweir OUString OlePropertyStreamObject::dumpString8( const String& rName )
578cdf0e10cSrcweir {
579cdf0e10cSrcweir sal_Int32 nLen = dumpDec< sal_Int32 >( "string-len" );
580cdf0e10cSrcweir return mbIsUnicode ? dumpCharArray16( rName, nLen ) : dumpCharArray8( rName, nLen );
581cdf0e10cSrcweir }
582cdf0e10cSrcweir
dumpCharArray8(const String & rName,sal_Int32 nLen)583cdf0e10cSrcweir OUString OlePropertyStreamObject::dumpCharArray8( const String& rName, sal_Int32 nLen )
584cdf0e10cSrcweir {
585cdf0e10cSrcweir sal_Int32 nNewLen = getLimitedValue< sal_Int32, sal_Int32 >( nLen, 0, 1024 );
586cdf0e10cSrcweir OUString aData = mxStrm->readCharArrayUC( nNewLen, meTextEnc );
587cdf0e10cSrcweir writeStringItem( rName, aData );
588cdf0e10cSrcweir return aData;
589cdf0e10cSrcweir }
590cdf0e10cSrcweir
dumpString16(const String & rName)591cdf0e10cSrcweir OUString OlePropertyStreamObject::dumpString16( const String& rName )
592cdf0e10cSrcweir {
593cdf0e10cSrcweir sal_Int32 nLen = dumpDec< sal_Int32 >( "string-len" );
594cdf0e10cSrcweir return dumpCharArray16( rName, nLen );
595cdf0e10cSrcweir }
596cdf0e10cSrcweir
dumpCharArray16(const String & rName,sal_Int32 nLen)597cdf0e10cSrcweir OUString OlePropertyStreamObject::dumpCharArray16( const String& rName, sal_Int32 nLen )
598cdf0e10cSrcweir {
599cdf0e10cSrcweir sal_Int32 nNewLen = getLimitedValue< sal_Int32, sal_Int32 >( nLen, 0, 1024 );
600cdf0e10cSrcweir OUString aData = mxStrm->readUnicodeArray( nNewLen );
601cdf0e10cSrcweir writeStringItem( rName, aData );
602cdf0e10cSrcweir if( nNewLen & 1 ) dumpUnused( 2 ); // always padding to 32bit
603cdf0e10cSrcweir return aData;
604cdf0e10cSrcweir }
605cdf0e10cSrcweir
dumpTypedProperty(const String & rName,sal_uInt16 nExpectedType)606cdf0e10cSrcweir bool OlePropertyStreamObject::dumpTypedProperty( const String& rName, sal_uInt16 nExpectedType )
607cdf0e10cSrcweir {
608cdf0e10cSrcweir writeEmptyItem( rName );
609cdf0e10cSrcweir IndentGuard aIndGuard( mxOut );
610cdf0e10cSrcweir return (dumpPropertyContents( -1 ) == nExpectedType) && !mxStrm->isEof();
611cdf0e10cSrcweir }
612cdf0e10cSrcweir
dumpHlinks(sal_Int32 nSize)613cdf0e10cSrcweir void OlePropertyStreamObject::dumpHlinks( sal_Int32 nSize )
614cdf0e10cSrcweir {
615cdf0e10cSrcweir sal_Int64 nEndPos = mxStrm->tell() + nSize;
616cdf0e10cSrcweir sal_Int32 nCount = dumpDec< sal_Int32 >( "property-count" );
617cdf0e10cSrcweir bool bValid = true;
618cdf0e10cSrcweir for( sal_Int32 nHlinkIndex = 0, nHlinkCount = nCount / 6; bValid && !mxStrm->isEof() && (nHlinkIndex < nHlinkCount); ++nHlinkIndex )
619cdf0e10cSrcweir {
620cdf0e10cSrcweir writeEmptyItem( "HYPERLINK" );
621cdf0e10cSrcweir IndentGuard aIndGuard( mxOut );
622cdf0e10cSrcweir bValid =
623cdf0e10cSrcweir dumpTypedProperty( "hash", OLEPROP_TYPE_INT32 ) &&
624cdf0e10cSrcweir dumpTypedProperty( "app", OLEPROP_TYPE_INT32 ) &&
625cdf0e10cSrcweir dumpTypedProperty( "shape-id", OLEPROP_TYPE_INT32 ) &&
626cdf0e10cSrcweir dumpTypedProperty( "info", OLEPROP_TYPE_INT32 ) &&
627cdf0e10cSrcweir dumpTypedProperty( "target", OLEPROP_TYPE_STRING16 ) &&
628cdf0e10cSrcweir dumpTypedProperty( "location", OLEPROP_TYPE_STRING16 );
629cdf0e10cSrcweir }
630cdf0e10cSrcweir dumpRemainingTo( nEndPos );
631cdf0e10cSrcweir }
632cdf0e10cSrcweir
startElement(sal_uInt32 nStartPos)633cdf0e10cSrcweir bool OlePropertyStreamObject::startElement( sal_uInt32 nStartPos )
634cdf0e10cSrcweir {
635cdf0e10cSrcweir mxStrm->seek( nStartPos );
636cdf0e10cSrcweir if( mxStrm->isEof() )
637cdf0e10cSrcweir writeInfoItem( "stream-state", OOX_DUMP_ERR_STREAM );
638cdf0e10cSrcweir return !mxStrm->isEof();
639cdf0e10cSrcweir }
640cdf0e10cSrcweir
writeSectionHeader(const OUString & rGuid,sal_uInt32 nStartPos)641cdf0e10cSrcweir void OlePropertyStreamObject::writeSectionHeader( const OUString& rGuid, sal_uInt32 nStartPos )
642cdf0e10cSrcweir {
643cdf0e10cSrcweir MultiItemsGuard aMultiGuard( mxOut );
644cdf0e10cSrcweir writeEmptyItem( "SECTION" );
645cdf0e10cSrcweir writeHexItem( "pos", nStartPos, "CONV-DEC" );
646cdf0e10cSrcweir writeGuidItem( "guid", rGuid );
647cdf0e10cSrcweir }
648cdf0e10cSrcweir
writePropertyHeader(sal_Int32 nPropId,sal_uInt32 nStartPos)649cdf0e10cSrcweir void OlePropertyStreamObject::writePropertyHeader( sal_Int32 nPropId, sal_uInt32 nStartPos )
650cdf0e10cSrcweir {
651cdf0e10cSrcweir MultiItemsGuard aMultiGuard( mxOut );
652cdf0e10cSrcweir writeEmptyItem( "PROPERTY" );
653cdf0e10cSrcweir writeHexItem( "pos", nStartPos, "CONV-DEC" );
654cdf0e10cSrcweir writeDecItem( "id", nPropId, mxPropIds );
655cdf0e10cSrcweir }
656cdf0e10cSrcweir
657cdf0e10cSrcweir // ============================================================================
658cdf0e10cSrcweir
OleStorageObject(const ObjectBase & rParent,const StorageRef & rxStrg,const OUString & rSysPath)659cdf0e10cSrcweir OleStorageObject::OleStorageObject( const ObjectBase& rParent, const StorageRef& rxStrg, const OUString& rSysPath )
660cdf0e10cSrcweir {
661cdf0e10cSrcweir construct( rParent, rxStrg, rSysPath );
662cdf0e10cSrcweir }
663cdf0e10cSrcweir
construct(const ObjectBase & rParent,const StorageRef & rxStrg,const OUString & rSysPath)664cdf0e10cSrcweir void OleStorageObject::construct( const ObjectBase& rParent, const StorageRef& rxStrg, const OUString& rSysPath )
665cdf0e10cSrcweir {
666cdf0e10cSrcweir StorageObjectBase::construct( rParent, rxStrg, rSysPath );
667cdf0e10cSrcweir }
668cdf0e10cSrcweir
construct(const ObjectBase & rParent)669cdf0e10cSrcweir void OleStorageObject::construct( const ObjectBase& rParent )
670cdf0e10cSrcweir {
671cdf0e10cSrcweir StorageObjectBase::construct( rParent );
672cdf0e10cSrcweir }
673cdf0e10cSrcweir
implDumpStream(const Reference<XInputStream> & rxStrm,const OUString &,const OUString & rStrmName,const OUString & rSysFileName)674cdf0e10cSrcweir void OleStorageObject::implDumpStream( const Reference< XInputStream >& rxStrm, const OUString& /*rStrgPath*/, const OUString& rStrmName, const OUString& rSysFileName )
675cdf0e10cSrcweir {
676cdf0e10cSrcweir if( rStrmName.equalsAscii( "\001CompObj" ) )
677cdf0e10cSrcweir OleCompObjObject( *this, rxStrm, rSysFileName ).dump();
678cdf0e10cSrcweir else if( rStrmName.equalsAscii( "\005SummaryInformation" ) || rStrmName.equalsAscii( "\005DocumentSummaryInformation" ) )
679cdf0e10cSrcweir OlePropertyStreamObject( *this, rxStrm, rSysFileName ).dump();
680cdf0e10cSrcweir else
681cdf0e10cSrcweir BinaryStreamObject( *this, rxStrm, rSysFileName ).dump();
682cdf0e10cSrcweir }
683cdf0e10cSrcweir
684cdf0e10cSrcweir // ============================================================================
685cdf0e10cSrcweir // ============================================================================
686cdf0e10cSrcweir
ComCtlObjectBase(const InputObjectBase & rParent,sal_uInt32 nDataId5,sal_uInt32 nDataId6,sal_uInt16 nVersion,bool bCommonPart,bool bComplexPart)687cdf0e10cSrcweir ComCtlObjectBase::ComCtlObjectBase( const InputObjectBase& rParent,
688cdf0e10cSrcweir sal_uInt32 nDataId5, sal_uInt32 nDataId6, sal_uInt16 nVersion, bool bCommonPart, bool bComplexPart ) :
689cdf0e10cSrcweir mnDataId5( nDataId5 ),
690cdf0e10cSrcweir mnDataId6( nDataId6 ),
691cdf0e10cSrcweir mnVersion( nVersion ),
692cdf0e10cSrcweir mbCommonPart( bCommonPart ),
693cdf0e10cSrcweir mbComplexPart( bComplexPart )
694cdf0e10cSrcweir {
695cdf0e10cSrcweir construct( rParent );
696cdf0e10cSrcweir }
697cdf0e10cSrcweir
implDump()698cdf0e10cSrcweir void ComCtlObjectBase::implDump()
699cdf0e10cSrcweir {
700cdf0e10cSrcweir sal_uInt32 nCommonSize = 0;
701cdf0e10cSrcweir dumpComCtlSize() && dumpComCtlData( nCommonSize ) && (!mbCommonPart || dumpComCtlCommon( nCommonSize )) && (!mbComplexPart || dumpComCtlComplex());
702cdf0e10cSrcweir }
703cdf0e10cSrcweir
implDumpCommonExtra(sal_Int64)704cdf0e10cSrcweir void ComCtlObjectBase::implDumpCommonExtra( sal_Int64 /*nEndPos*/ )
705cdf0e10cSrcweir {
706cdf0e10cSrcweir }
707cdf0e10cSrcweir
implDumpCommonTrailing()708cdf0e10cSrcweir void ComCtlObjectBase::implDumpCommonTrailing()
709cdf0e10cSrcweir {
710cdf0e10cSrcweir }
711cdf0e10cSrcweir
dumpComCtlHeader(sal_uInt32 nExpId,sal_uInt16 nExpMajor,sal_uInt16 nExpMinor)712cdf0e10cSrcweir bool ComCtlObjectBase::dumpComCtlHeader( sal_uInt32 nExpId, sal_uInt16 nExpMajor, sal_uInt16 nExpMinor )
713cdf0e10cSrcweir {
714cdf0e10cSrcweir // no idea if all this is correct...
715cdf0e10cSrcweir sal_uInt32 nId = dumpHex< sal_uInt32 >( "header-id", "COMCTL-HEADER-IDS" );
716cdf0e10cSrcweir ItemGuard aItem( mxOut, "version" );
717cdf0e10cSrcweir sal_uInt16 nMinor, nMajor;
718cdf0e10cSrcweir *mxStrm >> nMinor >> nMajor;
719cdf0e10cSrcweir mxOut->writeDec( nMajor );
720cdf0e10cSrcweir mxOut->writeChar( '.' );
721cdf0e10cSrcweir mxOut->writeDec( nMinor );
722cdf0e10cSrcweir return !mxStrm->isEof() && (nId == nExpId) && ((nExpMajor == SAL_MAX_UINT16) || (nExpMajor == nMajor)) && ((nExpMinor == SAL_MAX_UINT16) || (nExpMinor == nMinor));
723cdf0e10cSrcweir }
724cdf0e10cSrcweir
dumpComCtlSize()725cdf0e10cSrcweir bool ComCtlObjectBase::dumpComCtlSize()
726cdf0e10cSrcweir {
727cdf0e10cSrcweir if( dumpComCtlHeader( 0x12344321, 0, 8 ) )
728cdf0e10cSrcweir {
729cdf0e10cSrcweir IndentGuard aIndGuard( mxOut );
730cdf0e10cSrcweir dumpDec< sal_Int32 >( "width", "CONV-HMM-TO-CM" );
731cdf0e10cSrcweir dumpDec< sal_Int32 >( "height", "CONV-HMM-TO-CM" );
732cdf0e10cSrcweir return !mxStrm->isEof();
733cdf0e10cSrcweir }
734cdf0e10cSrcweir return false;
735cdf0e10cSrcweir }
736cdf0e10cSrcweir
dumpComCtlData(sal_uInt32 & ornCommonPartSize)737cdf0e10cSrcweir bool ComCtlObjectBase::dumpComCtlData( sal_uInt32& ornCommonPartSize )
738cdf0e10cSrcweir {
739cdf0e10cSrcweir if( dumpComCtlHeader( (mnVersion == 5) ? mnDataId5 : mnDataId6, mnVersion ) )
740cdf0e10cSrcweir {
741cdf0e10cSrcweir IndentGuard aIndGuard( mxOut );
742cdf0e10cSrcweir if( mbCommonPart )
743cdf0e10cSrcweir ornCommonPartSize = dumpDec< sal_uInt32 >( "common-part-size" );
744cdf0e10cSrcweir implDumpProperties();
745cdf0e10cSrcweir return !mxStrm->isEof();
746cdf0e10cSrcweir }
747cdf0e10cSrcweir return false;
748cdf0e10cSrcweir }
749cdf0e10cSrcweir
dumpComCtlCommon(sal_uInt32 nPartSize)750cdf0e10cSrcweir bool ComCtlObjectBase::dumpComCtlCommon( sal_uInt32 nPartSize )
751cdf0e10cSrcweir {
752cdf0e10cSrcweir sal_Int64 nEndPos = mxStrm->tell() + nPartSize;
753cdf0e10cSrcweir if( (nPartSize >= 16) && dumpComCtlHeader( 0xABCDEF01, 5, 0 ) )
754cdf0e10cSrcweir {
755cdf0e10cSrcweir IndentGuard aIndGuard( mxOut );
756cdf0e10cSrcweir dumpUnknown( 4 );
757cdf0e10cSrcweir dumpHex< sal_uInt32 >( "common-flags", "COMCTL-COMMON-FLAGS" );
758cdf0e10cSrcweir implDumpCommonExtra( nEndPos );
759cdf0e10cSrcweir dumpRemainingTo( nEndPos );
760cdf0e10cSrcweir implDumpCommonTrailing();
761cdf0e10cSrcweir return !mxStrm->isEof();
762cdf0e10cSrcweir }
763cdf0e10cSrcweir return false;
764cdf0e10cSrcweir }
765cdf0e10cSrcweir
dumpComCtlComplex()766cdf0e10cSrcweir bool ComCtlObjectBase::dumpComCtlComplex()
767cdf0e10cSrcweir {
768cdf0e10cSrcweir if( dumpComCtlHeader( 0xBDECDE1F, 5, 1 ) )
769cdf0e10cSrcweir {
770cdf0e10cSrcweir IndentGuard aIndGuard( mxOut );
771cdf0e10cSrcweir sal_uInt32 nFlags = dumpHex< sal_uInt32 >( "comctl-complex-flags", "COMCTL-COMPLEX-FLAGS" );
772cdf0e10cSrcweir if( !mxStrm->isEof() && (nFlags & 0x01) )
773cdf0e10cSrcweir {
774cdf0e10cSrcweir writeEmptyItem( "font" );
775cdf0e10cSrcweir IndentGuard aIndGuard2( mxOut );
776cdf0e10cSrcweir OUString aClassName = cfg().getStringOption( dumpGuid(), OUString() );
777cdf0e10cSrcweir if( aClassName.equalsAscii( "StdFont" ) )
778cdf0e10cSrcweir StdFontObject( *this ).dump();
779cdf0e10cSrcweir }
780cdf0e10cSrcweir if( !mxStrm->isEof() && (nFlags & 0x02) )
781cdf0e10cSrcweir {
782cdf0e10cSrcweir writeEmptyItem( "mouse-icon" );
783cdf0e10cSrcweir IndentGuard aIndGuard2( mxOut );
784cdf0e10cSrcweir OUString aClassName = cfg().getStringOption( dumpGuid(), OUString() );
785cdf0e10cSrcweir if( aClassName.equalsAscii( "StdPic" ) )
786cdf0e10cSrcweir StdPicObject( *this ).dump();
787cdf0e10cSrcweir }
788cdf0e10cSrcweir return !mxStrm->isEof();
789cdf0e10cSrcweir }
790cdf0e10cSrcweir return false;
791cdf0e10cSrcweir }
792cdf0e10cSrcweir
793cdf0e10cSrcweir // ============================================================================
794cdf0e10cSrcweir
ComCtlScrollBarObject(const InputObjectBase & rParent,sal_uInt16 nVersion)795cdf0e10cSrcweir ComCtlScrollBarObject::ComCtlScrollBarObject( const InputObjectBase& rParent, sal_uInt16 nVersion ) :
796cdf0e10cSrcweir ComCtlObjectBase( rParent, SAL_MAX_UINT32, 0x99470A83, nVersion, true, true )
797cdf0e10cSrcweir {
798cdf0e10cSrcweir }
799cdf0e10cSrcweir
implDumpProperties()800cdf0e10cSrcweir void ComCtlScrollBarObject::implDumpProperties()
801cdf0e10cSrcweir {
802cdf0e10cSrcweir dumpHex< sal_uInt32 >( "flags", "COMCTL-SCROLLBAR-FLAGS" );
803cdf0e10cSrcweir dumpDec< sal_Int32 >( "large-change" );
804cdf0e10cSrcweir dumpDec< sal_Int32 >( "small-change" );
805cdf0e10cSrcweir dumpDec< sal_Int32 >( "min" );
806cdf0e10cSrcweir dumpDec< sal_Int32 >( "max" );
807cdf0e10cSrcweir dumpDec< sal_Int32 >( "value" );
808cdf0e10cSrcweir }
809cdf0e10cSrcweir
810cdf0e10cSrcweir // ============================================================================
811cdf0e10cSrcweir
ComCtlProgressBarObject(const InputObjectBase & rParent,sal_uInt16 nVersion)812cdf0e10cSrcweir ComCtlProgressBarObject::ComCtlProgressBarObject( const InputObjectBase& rParent, sal_uInt16 nVersion ) :
813cdf0e10cSrcweir ComCtlObjectBase( rParent, 0xE6E17E84, 0x97AB8A01, nVersion, true, true )
814cdf0e10cSrcweir {
815cdf0e10cSrcweir }
816cdf0e10cSrcweir
implDumpProperties()817cdf0e10cSrcweir void ComCtlProgressBarObject::implDumpProperties()
818cdf0e10cSrcweir {
819cdf0e10cSrcweir dumpDec< float >( "min" );
820cdf0e10cSrcweir dumpDec< float >( "max" );
821cdf0e10cSrcweir if( mnVersion == 6 )
822cdf0e10cSrcweir {
823cdf0e10cSrcweir dumpBool< sal_uInt16 >( "vertical" );
824cdf0e10cSrcweir dumpBool< sal_uInt16 >( "smooth-scroll" );
825cdf0e10cSrcweir }
826cdf0e10cSrcweir }
827cdf0e10cSrcweir
828cdf0e10cSrcweir // ============================================================================
829cdf0e10cSrcweir
ComCtlSliderObject(const InputObjectBase & rParent,sal_uInt16 nVersion)830cdf0e10cSrcweir ComCtlSliderObject::ComCtlSliderObject( const InputObjectBase& rParent, sal_uInt16 nVersion ) :
831cdf0e10cSrcweir ComCtlObjectBase( rParent, 0xE6E17E86, 0x0A2BAE11, nVersion, true, true )
832cdf0e10cSrcweir {
833cdf0e10cSrcweir }
834cdf0e10cSrcweir
implDumpProperties()835cdf0e10cSrcweir void ComCtlSliderObject::implDumpProperties()
836cdf0e10cSrcweir {
837cdf0e10cSrcweir dumpBool< sal_Int32 >( "vertical" );
838cdf0e10cSrcweir dumpDec< sal_Int32 >( "large-change" );
839cdf0e10cSrcweir dumpDec< sal_Int32 >( "small-change" );
840cdf0e10cSrcweir dumpDec< sal_Int32 >( "min" );
841cdf0e10cSrcweir dumpDec< sal_Int32 >( "max" );
842cdf0e10cSrcweir dumpDec< sal_Int16 >( "select-range", "COMCTL-SLIDER-SELECTRANGE" );
843cdf0e10cSrcweir dumpUnused( 2 );
844cdf0e10cSrcweir dumpDec< sal_Int32 >( "select-start" );
845cdf0e10cSrcweir dumpDec< sal_Int32 >( "select-length" );
846cdf0e10cSrcweir dumpDec< sal_Int32 >( "tick-style", "COMCTL-SLIDER-TICKSTYLE" );
847cdf0e10cSrcweir dumpDec< sal_Int32 >( "tick-frequency" );
848cdf0e10cSrcweir dumpDec< sal_Int32 >( "value" );
849cdf0e10cSrcweir if( mnVersion == 6 )
850cdf0e10cSrcweir dumpBool< sal_Int32 >( "tooltip-below" );
851cdf0e10cSrcweir }
852cdf0e10cSrcweir
853cdf0e10cSrcweir // ============================================================================
854cdf0e10cSrcweir
ComCtlUpDownObject(const InputObjectBase & rParent,sal_uInt16 nVersion)855cdf0e10cSrcweir ComCtlUpDownObject::ComCtlUpDownObject( const InputObjectBase& rParent, sal_uInt16 nVersion ) :
856cdf0e10cSrcweir ComCtlObjectBase( rParent, 0xFF3626A0, 0xFF3626A0, nVersion, false, false )
857cdf0e10cSrcweir {
858cdf0e10cSrcweir }
859cdf0e10cSrcweir
implDumpProperties()860cdf0e10cSrcweir void ComCtlUpDownObject::implDumpProperties()
861cdf0e10cSrcweir {
862cdf0e10cSrcweir dumpUnknown( 16 ); // buddy-property, somehow
863cdf0e10cSrcweir dumpDec< sal_Int32 >( "buddy-control" );
864cdf0e10cSrcweir dumpUnknown( 8 );
865cdf0e10cSrcweir dumpDec< sal_Int32 >( "value" );
866cdf0e10cSrcweir dumpUnknown( 4 );
867cdf0e10cSrcweir dumpDec< sal_Int32 >( "increment" );
868cdf0e10cSrcweir dumpDec< sal_Int32 >( "max" );
869cdf0e10cSrcweir dumpDec< sal_Int32 >( "min" );
870cdf0e10cSrcweir dumpHex< sal_uInt32 >( "flags-1", "COMCTL-UPDOWN-FLAGS1" );
871cdf0e10cSrcweir dumpHex< sal_uInt32 >( "flags-2", "COMCTL-UPDOWN-FLAGS2" );
872cdf0e10cSrcweir dumpUnknown( 4 );
873cdf0e10cSrcweir }
874cdf0e10cSrcweir
875cdf0e10cSrcweir // ============================================================================
876cdf0e10cSrcweir
ComCtlImageListObject(const InputObjectBase & rParent,sal_uInt16 nVersion)877cdf0e10cSrcweir ComCtlImageListObject::ComCtlImageListObject( const InputObjectBase& rParent, sal_uInt16 nVersion ) :
878cdf0e10cSrcweir ComCtlObjectBase( rParent, 0xE6E17E80, 0xE6E17E80, nVersion, true, false )
879cdf0e10cSrcweir {
880cdf0e10cSrcweir }
881cdf0e10cSrcweir
implDumpProperties()882cdf0e10cSrcweir void ComCtlImageListObject::implDumpProperties()
883cdf0e10cSrcweir {
884cdf0e10cSrcweir dumpDec< sal_uInt16 >( "image-width" );
885cdf0e10cSrcweir dumpDec< sal_uInt16 >( "image-height" );
886cdf0e10cSrcweir dumpOleColor( "mask-color" );
887cdf0e10cSrcweir dumpBool< sal_Int16 >( "use-mask-color" );
888cdf0e10cSrcweir dumpUnknown( 2 );
889cdf0e10cSrcweir }
890cdf0e10cSrcweir
implDumpCommonExtra(sal_Int64)891cdf0e10cSrcweir void ComCtlImageListObject::implDumpCommonExtra( sal_Int64 /*nEndPos*/ )
892cdf0e10cSrcweir {
893cdf0e10cSrcweir dumpUnknown( 4 );
894cdf0e10cSrcweir dumpOleColor( "back-color" );
895cdf0e10cSrcweir dumpUnknown( 4 );
896cdf0e10cSrcweir sal_Int32 nImageCount = dumpDec< sal_Int32 >( "image-count" );
897cdf0e10cSrcweir mxOut->resetItemIndex();
898cdf0e10cSrcweir for( sal_Int32 nImageIndex = 0; (nImageIndex < nImageCount) && !mxStrm->isEof(); ++nImageIndex )
899cdf0e10cSrcweir {
900cdf0e10cSrcweir writeEmptyItem( "#image" );
901cdf0e10cSrcweir IndentGuard aIndGuard( mxOut );
902cdf0e10cSrcweir sal_uInt8 nFlags = dumpHex< sal_uInt8 >( "text-flags", "COMCTL-IMAGELIST-TEXTFLAGS" );
903cdf0e10cSrcweir if( nFlags & 0x01 ) dumpUniString32( "caption" );
904cdf0e10cSrcweir if( nFlags & 0x02 ) dumpUniString32( "key" );
905cdf0e10cSrcweir }
906cdf0e10cSrcweir }
907cdf0e10cSrcweir
implDumpCommonTrailing()908cdf0e10cSrcweir void ComCtlImageListObject::implDumpCommonTrailing()
909cdf0e10cSrcweir {
910cdf0e10cSrcweir sal_Int32 nImageCount = dumpDec< sal_Int32 >( "image-count" );
911cdf0e10cSrcweir mxOut->resetItemIndex();
912cdf0e10cSrcweir for( sal_Int32 nImageIndex = 0; (nImageIndex < nImageCount) && !mxStrm->isEof(); ++nImageIndex )
913cdf0e10cSrcweir {
914cdf0e10cSrcweir writeEmptyItem( "#image" );
915cdf0e10cSrcweir IndentGuard aIndGuard( mxOut );
916cdf0e10cSrcweir dumpDec< sal_Int32 >( "index" );
917cdf0e10cSrcweir StdPicObject( *this ).dump();
918cdf0e10cSrcweir }
919cdf0e10cSrcweir }
920cdf0e10cSrcweir
921cdf0e10cSrcweir // ============================================================================
922cdf0e10cSrcweir
ComCtlTabStripObject(const InputObjectBase & rParent,sal_uInt16 nVersion)923cdf0e10cSrcweir ComCtlTabStripObject::ComCtlTabStripObject( const InputObjectBase& rParent, sal_uInt16 nVersion ) :
924cdf0e10cSrcweir ComCtlObjectBase( rParent, 0xE6E17E8A, 0xD12A7AC1, nVersion, true, true )
925cdf0e10cSrcweir {
926cdf0e10cSrcweir }
927cdf0e10cSrcweir
implDumpProperties()928cdf0e10cSrcweir void ComCtlTabStripObject::implDumpProperties()
929cdf0e10cSrcweir {
930cdf0e10cSrcweir dumpHex< sal_uInt32 >( "flags-1", "COMCTL-TABSTRIP-FLAGS1" );
931cdf0e10cSrcweir dumpDec< sal_uInt16 >( "tab-fixed-width", "CONV-HMM-TO-CM" );
932cdf0e10cSrcweir dumpDec< sal_uInt16 >( "tab-fixed-height", "CONV-HMM-TO-CM" );
933cdf0e10cSrcweir if( mnVersion == 6 )
934cdf0e10cSrcweir {
935cdf0e10cSrcweir dumpHex< sal_uInt32 >( "flags-2", "COMCTL-TABSTRIP-FLAGS2" );
936cdf0e10cSrcweir dumpDec< sal_uInt16 >( "tab-min-width", "CONV-HMM-TO-CM" );
937cdf0e10cSrcweir dumpUnknown( 2 );
938cdf0e10cSrcweir dumpHex< sal_uInt32 >( "flags-3", "COMCTL-TABSTRIP-FLAGS3" );
939cdf0e10cSrcweir }
940cdf0e10cSrcweir }
941cdf0e10cSrcweir
implDumpCommonExtra(sal_Int64)942cdf0e10cSrcweir void ComCtlTabStripObject::implDumpCommonExtra( sal_Int64 /*nEndPos*/ )
943cdf0e10cSrcweir {
944cdf0e10cSrcweir dumpUnknown( 12 );
945cdf0e10cSrcweir dumpUniString32( "image-list" );
946cdf0e10cSrcweir sal_Int32 nTabCount = dumpDec< sal_Int32 >( "tab-count" );
947cdf0e10cSrcweir mxOut->resetItemIndex();
948cdf0e10cSrcweir for( sal_Int32 nTabIndex = 0; (nTabIndex < nTabCount) && !mxStrm->isEof(); ++nTabIndex )
949cdf0e10cSrcweir {
950cdf0e10cSrcweir writeEmptyItem( "#tab" );
951cdf0e10cSrcweir IndentGuard aIndGuard( mxOut );
952cdf0e10cSrcweir dumpUnknown( 4 );
953cdf0e10cSrcweir sal_uInt32 nTabFlags = dumpHex< sal_uInt32 >( "tab-flags", "COMCTL-TABSTRIP-TABFLAGS" );
954cdf0e10cSrcweir if( nTabFlags & 0x01 ) dumpUniString32( "caption" );
955cdf0e10cSrcweir if( nTabFlags & 0x02 ) dumpUniString32( "key" );
956cdf0e10cSrcweir if( nTabFlags & 0x04 ) dumpUniString32( "tag" );
957cdf0e10cSrcweir if( nTabFlags & 0x08 ) dumpUniString32( "tooltip" );
958cdf0e10cSrcweir dumpDec< sal_uInt16 >( "image-id" );
959cdf0e10cSrcweir }
960cdf0e10cSrcweir }
961cdf0e10cSrcweir
962cdf0e10cSrcweir // ============================================================================
963cdf0e10cSrcweir
ComCtlTreeViewObject(const InputObjectBase & rParent,sal_uInt16 nVersion)964cdf0e10cSrcweir ComCtlTreeViewObject::ComCtlTreeViewObject( const InputObjectBase& rParent, sal_uInt16 nVersion ) :
965cdf0e10cSrcweir ComCtlObjectBase( rParent, 0xE6E17E8E, 0x6AC13CB1, nVersion, true, true ),
966cdf0e10cSrcweir mnStringFlags( 0 )
967cdf0e10cSrcweir {
968cdf0e10cSrcweir }
969cdf0e10cSrcweir
implDumpProperties()970cdf0e10cSrcweir void ComCtlTreeViewObject::implDumpProperties()
971cdf0e10cSrcweir {
972cdf0e10cSrcweir dumpHex< sal_uInt32 >( "flags", "COMCTL-TREEVIEW-FLAGS" );
973cdf0e10cSrcweir dumpDec< sal_Int32 >( "indentation", "CONV-HMM-TO-CM" );
974cdf0e10cSrcweir if( mnVersion == 6 )
975cdf0e10cSrcweir dumpHex< sal_uInt32 >( "flags-2", "COMCTL-TREEVIEW-FLAGS2" );
976cdf0e10cSrcweir mnStringFlags = dumpHex< sal_uInt32 >( "string-flags", "COMCTL-TREEVIEW-STRINGFLAGS" );
977cdf0e10cSrcweir }
978cdf0e10cSrcweir
implDumpCommonExtra(sal_Int64)979cdf0e10cSrcweir void ComCtlTreeViewObject::implDumpCommonExtra( sal_Int64 /*nEndPos*/ )
980cdf0e10cSrcweir {
981cdf0e10cSrcweir dumpOleColor( "text-color" );
982cdf0e10cSrcweir dumpOleColor( "back-color" );
983cdf0e10cSrcweir dumpUnknown( 4 );
984cdf0e10cSrcweir if( mnStringFlags & 0x02 )
985cdf0e10cSrcweir dumpUniString32( "image-list" );
986cdf0e10cSrcweir dumpUniString32( "path-separator" );
987cdf0e10cSrcweir }
988cdf0e10cSrcweir
989cdf0e10cSrcweir // ============================================================================
990cdf0e10cSrcweir
ComCtlStatusBarObject(const InputObjectBase & rParent,sal_uInt16 nVersion)991cdf0e10cSrcweir ComCtlStatusBarObject::ComCtlStatusBarObject( const InputObjectBase& rParent, sal_uInt16 nVersion ) :
992cdf0e10cSrcweir ComCtlObjectBase( rParent, 0xE6E17E88, SAL_MAX_UINT32, nVersion, true, true )
993cdf0e10cSrcweir {
994cdf0e10cSrcweir }
995cdf0e10cSrcweir
implDumpProperties()996cdf0e10cSrcweir void ComCtlStatusBarObject::implDumpProperties()
997cdf0e10cSrcweir {
998cdf0e10cSrcweir dumpBool< sal_Int32 >( "style-simple-text" );
999cdf0e10cSrcweir dumpBool< sal_Int16 >( "show-tips" );
1000cdf0e10cSrcweir dumpUnknown( 2 );
1001cdf0e10cSrcweir }
1002cdf0e10cSrcweir
implDumpCommonExtra(sal_Int64)1003cdf0e10cSrcweir void ComCtlStatusBarObject::implDumpCommonExtra( sal_Int64 /*nEndPos*/ )
1004cdf0e10cSrcweir {
1005cdf0e10cSrcweir dumpUnknown( 12 );
1006cdf0e10cSrcweir dumpUniString32( "simple-text" );
1007cdf0e10cSrcweir sal_Int32 nPanelCount = dumpDec< sal_Int32 >( "panel-count" );
1008cdf0e10cSrcweir mxOut->resetItemIndex();
1009cdf0e10cSrcweir for( sal_Int32 nPanelIndex = 0; (nPanelIndex < nPanelCount) && !mxStrm->isEof(); ++nPanelIndex )
1010cdf0e10cSrcweir {
1011cdf0e10cSrcweir writeEmptyItem( "#panel" );
1012cdf0e10cSrcweir IndentGuard aIndGuard( mxOut );
1013cdf0e10cSrcweir dumpHex< sal_uInt32 >( "panel-flags", "COMCTL-STATUSBAR-PANELFLAGS" );
1014cdf0e10cSrcweir dumpDec< sal_Int32 >( "current-width", "CONV-HMM-TO-CM" );
1015cdf0e10cSrcweir dumpDec< sal_Int32 >( "minimal-width", "CONV-HMM-TO-CM" );
1016cdf0e10cSrcweir sal_uInt32 nTextFlags = dumpHex< sal_uInt32 >( "text-flags", "COMCTL-STATUSBAR-TEXTFLAGS" );
1017cdf0e10cSrcweir if( nTextFlags & 0x01 ) dumpUniString32( "text" );
1018cdf0e10cSrcweir if( nTextFlags & 0x02 ) dumpUniString32( "vis-text" );
1019cdf0e10cSrcweir if( nTextFlags & 0x04 ) dumpUniString32( "key" );
1020cdf0e10cSrcweir if( nTextFlags & 0x08 ) dumpUniString32( "tag" );
1021cdf0e10cSrcweir if( nTextFlags & 0x10 ) dumpUniString32( "tooltip" );
1022cdf0e10cSrcweir }
1023cdf0e10cSrcweir }
1024cdf0e10cSrcweir
implDumpCommonTrailing()1025cdf0e10cSrcweir void ComCtlStatusBarObject::implDumpCommonTrailing()
1026cdf0e10cSrcweir {
1027cdf0e10cSrcweir sal_Int32 nImageCount = dumpDec< sal_Int32 >( "image-count" );
1028cdf0e10cSrcweir mxOut->resetItemIndex();
1029cdf0e10cSrcweir for( sal_Int32 nImageIndex = 0; (nImageIndex < nImageCount) && !mxStrm->isEof(); ++nImageIndex )
1030cdf0e10cSrcweir {
1031cdf0e10cSrcweir writeEmptyItem( "#image" );
1032cdf0e10cSrcweir IndentGuard aIndGuard( mxOut );
1033cdf0e10cSrcweir dumpDec< sal_Int32 >( "panel-index" );
1034cdf0e10cSrcweir StdPicObject( *this ).dump();
1035cdf0e10cSrcweir }
1036cdf0e10cSrcweir }
1037cdf0e10cSrcweir
1038cdf0e10cSrcweir // ============================================================================
1039cdf0e10cSrcweir // ============================================================================
1040cdf0e10cSrcweir
construct(const ObjectBase & rParent,const BinaryInputStreamRef & rxStrm,const OUString & rSysFileName,const String & rPropNameList,bool b64BitPropFlags)1041cdf0e10cSrcweir void AxPropertyObjectBase::construct( const ObjectBase& rParent,
1042cdf0e10cSrcweir const BinaryInputStreamRef& rxStrm, const OUString& rSysFileName, const String& rPropNameList, bool b64BitPropFlags )
1043cdf0e10cSrcweir {
1044cdf0e10cSrcweir OleInputObjectBase::construct( rParent, rxStrm, rSysFileName );
1045cdf0e10cSrcweir constructAxPropObj( rPropNameList, b64BitPropFlags );
1046cdf0e10cSrcweir }
1047cdf0e10cSrcweir
construct(const OutputObjectBase & rParent,const BinaryInputStreamRef & rxStrm,const String & rPropNameList,bool b64BitPropFlags)1048cdf0e10cSrcweir void AxPropertyObjectBase::construct( const OutputObjectBase& rParent,
1049cdf0e10cSrcweir const BinaryInputStreamRef& rxStrm, const String& rPropNameList, bool b64BitPropFlags )
1050cdf0e10cSrcweir {
1051cdf0e10cSrcweir OleInputObjectBase::construct( rParent, rxStrm );
1052cdf0e10cSrcweir constructAxPropObj( rPropNameList, b64BitPropFlags );
1053cdf0e10cSrcweir }
1054cdf0e10cSrcweir
construct(const InputObjectBase & rParent,const String & rPropNameList,bool b64BitPropFlags)1055cdf0e10cSrcweir void AxPropertyObjectBase::construct( const InputObjectBase& rParent,
1056cdf0e10cSrcweir const String& rPropNameList, bool b64BitPropFlags )
1057cdf0e10cSrcweir {
1058cdf0e10cSrcweir OleInputObjectBase::construct( rParent );
1059cdf0e10cSrcweir constructAxPropObj( rPropNameList, b64BitPropFlags );
1060cdf0e10cSrcweir }
1061cdf0e10cSrcweir
implIsValid() const1062cdf0e10cSrcweir bool AxPropertyObjectBase::implIsValid() const
1063cdf0e10cSrcweir {
1064cdf0e10cSrcweir return OleInputObjectBase::implIsValid() && mxStrm->isSeekable();
1065cdf0e10cSrcweir }
1066cdf0e10cSrcweir
implDump()1067cdf0e10cSrcweir void AxPropertyObjectBase::implDump()
1068cdf0e10cSrcweir {
1069cdf0e10cSrcweir mbValid = true;
1070cdf0e10cSrcweir // header
1071cdf0e10cSrcweir setAlignAnchor();
1072cdf0e10cSrcweir dumpVersion();
1073cdf0e10cSrcweir sal_uInt16 nSize = dumpDec< sal_uInt16 >( "size" );
1074cdf0e10cSrcweir mnPropertiesEnd = mxStrm->tell() + nSize;
1075cdf0e10cSrcweir // property flags
1076cdf0e10cSrcweir maLargeProps.clear();
1077cdf0e10cSrcweir maStreamProps.clear();
1078cdf0e10cSrcweir mnPropFlags = dumpHex< sal_Int64, sal_uInt32 >( mb64BitPropFlags, "properties", mxPropNames );
1079cdf0e10cSrcweir mnCurrProp = 0;
1080cdf0e10cSrcweir // properties
1081cdf0e10cSrcweir dumpShortProperties();
1082cdf0e10cSrcweir dumpLargeProperties();
1083cdf0e10cSrcweir setAlignAnchor();
1084cdf0e10cSrcweir if( ensureValid() )
1085cdf0e10cSrcweir implDumpExtended();
1086cdf0e10cSrcweir }
1087cdf0e10cSrcweir
implDumpShortProperties()1088cdf0e10cSrcweir void AxPropertyObjectBase::implDumpShortProperties()
1089cdf0e10cSrcweir {
1090cdf0e10cSrcweir }
1091cdf0e10cSrcweir
implDumpExtended()1092cdf0e10cSrcweir void AxPropertyObjectBase::implDumpExtended()
1093cdf0e10cSrcweir {
1094cdf0e10cSrcweir }
1095cdf0e10cSrcweir
ensureValid(bool bCondition)1096cdf0e10cSrcweir bool AxPropertyObjectBase::ensureValid( bool bCondition )
1097cdf0e10cSrcweir {
1098cdf0e10cSrcweir if( mbValid && (!bCondition || mxStrm->isEof()) )
1099cdf0e10cSrcweir {
1100cdf0e10cSrcweir if( !bCondition )
1101cdf0e10cSrcweir writeInfoItem( "state", OOX_DUMP_ERRASCII( "format-error" ) );
1102cdf0e10cSrcweir mbValid = false;
1103cdf0e10cSrcweir }
1104cdf0e10cSrcweir return mbValid;
1105cdf0e10cSrcweir }
1106cdf0e10cSrcweir
setAlignAnchor()1107cdf0e10cSrcweir void AxPropertyObjectBase::setAlignAnchor()
1108cdf0e10cSrcweir {
1109cdf0e10cSrcweir mnPropertiesStart = mxStrm->tell();
1110cdf0e10cSrcweir }
1111cdf0e10cSrcweir
startNextProperty()1112cdf0e10cSrcweir bool AxPropertyObjectBase::startNextProperty()
1113cdf0e10cSrcweir {
1114cdf0e10cSrcweir if( mnCurrProp == 0 ) mnCurrProp = 1; else mnCurrProp <<= 1;
1115cdf0e10cSrcweir bool bHasProp = getFlag( mnPropFlags, mnCurrProp );
1116cdf0e10cSrcweir setFlag( mnPropFlags, mnCurrProp, false );
1117cdf0e10cSrcweir return ensureValid() && bHasProp;
1118cdf0e10cSrcweir }
1119cdf0e10cSrcweir
getPropertyName() const1120cdf0e10cSrcweir OUString AxPropertyObjectBase::getPropertyName() const
1121cdf0e10cSrcweir {
1122cdf0e10cSrcweir return cfg().getName( mxPropNames, mnCurrProp );
1123cdf0e10cSrcweir }
1124cdf0e10cSrcweir
dumpFlagsProperty(sal_uInt32 nDefault,const sal_Char * pcNameList)1125cdf0e10cSrcweir sal_uInt32 AxPropertyObjectBase::dumpFlagsProperty( sal_uInt32 nDefault, const sal_Char* pcNameList )
1126cdf0e10cSrcweir {
1127cdf0e10cSrcweir if( startNextProperty() )
1128cdf0e10cSrcweir {
1129cdf0e10cSrcweir alignInput< sal_uInt32 >();
1130cdf0e10cSrcweir return dumpHex< sal_uInt32 >( getPropertyName(), pcNameList );
1131cdf0e10cSrcweir }
1132cdf0e10cSrcweir return nDefault;
1133cdf0e10cSrcweir }
1134cdf0e10cSrcweir
dumpColorProperty(sal_uInt32 nDefault)1135cdf0e10cSrcweir sal_uInt32 AxPropertyObjectBase::dumpColorProperty( sal_uInt32 nDefault )
1136cdf0e10cSrcweir {
1137cdf0e10cSrcweir if( startNextProperty() )
1138cdf0e10cSrcweir {
1139cdf0e10cSrcweir alignInput< sal_uInt32 >();
1140cdf0e10cSrcweir return dumpOleColor( getPropertyName() );
1141cdf0e10cSrcweir }
1142cdf0e10cSrcweir return nDefault;
1143cdf0e10cSrcweir }
1144cdf0e10cSrcweir
dumpUnicodeProperty()1145cdf0e10cSrcweir sal_Unicode AxPropertyObjectBase::dumpUnicodeProperty()
1146cdf0e10cSrcweir {
1147cdf0e10cSrcweir if( startNextProperty() )
1148cdf0e10cSrcweir {
1149cdf0e10cSrcweir alignInput< sal_uInt16 >();
1150cdf0e10cSrcweir return dumpUnicode( getPropertyName() );
1151cdf0e10cSrcweir }
1152cdf0e10cSrcweir return '\0';
1153cdf0e10cSrcweir }
1154cdf0e10cSrcweir
dumpUnknownProperty()1155cdf0e10cSrcweir void AxPropertyObjectBase::dumpUnknownProperty()
1156cdf0e10cSrcweir {
1157cdf0e10cSrcweir if( startNextProperty() )
1158cdf0e10cSrcweir ensureValid( false );
1159cdf0e10cSrcweir }
1160cdf0e10cSrcweir
dumpPosProperty()1161cdf0e10cSrcweir void AxPropertyObjectBase::dumpPosProperty()
1162cdf0e10cSrcweir {
1163cdf0e10cSrcweir if( startNextProperty() )
1164cdf0e10cSrcweir maLargeProps.push_back( LargeProperty( LargeProperty::PROPTYPE_POS, getPropertyName(), 8 ) );
1165cdf0e10cSrcweir }
1166cdf0e10cSrcweir
dumpSizeProperty()1167cdf0e10cSrcweir void AxPropertyObjectBase::dumpSizeProperty()
1168cdf0e10cSrcweir {
1169cdf0e10cSrcweir if( startNextProperty() )
1170cdf0e10cSrcweir maLargeProps.push_back( LargeProperty( LargeProperty::PROPTYPE_SIZE, getPropertyName(), 8 ) );
1171cdf0e10cSrcweir }
1172cdf0e10cSrcweir
dumpGuidProperty(OUString * pValue)1173cdf0e10cSrcweir void AxPropertyObjectBase::dumpGuidProperty( OUString* pValue )
1174cdf0e10cSrcweir {
1175cdf0e10cSrcweir if( startNextProperty() )
1176cdf0e10cSrcweir maLargeProps.push_back( LargeProperty( LargeProperty::PROPTYPE_GUID, getPropertyName(), 16, pValue ) );
1177cdf0e10cSrcweir }
1178cdf0e10cSrcweir
dumpStringProperty(OUString * pValue)1179cdf0e10cSrcweir void AxPropertyObjectBase::dumpStringProperty( OUString* pValue )
1180cdf0e10cSrcweir {
1181cdf0e10cSrcweir if( startNextProperty() )
1182cdf0e10cSrcweir {
1183cdf0e10cSrcweir alignInput< sal_uInt32 >();
1184cdf0e10cSrcweir sal_uInt32 nLen = dumpHex< sal_uInt32 >( getPropertyName(), "AX-STRINGLEN" );
1185cdf0e10cSrcweir maLargeProps.push_back( LargeProperty( LargeProperty::PROPTYPE_STRING, getPropertyName(), nLen, pValue ) );
1186cdf0e10cSrcweir }
1187cdf0e10cSrcweir }
1188cdf0e10cSrcweir
dumpStringArrayProperty()1189cdf0e10cSrcweir void AxPropertyObjectBase::dumpStringArrayProperty()
1190cdf0e10cSrcweir {
1191cdf0e10cSrcweir if( startNextProperty() )
1192cdf0e10cSrcweir {
1193cdf0e10cSrcweir alignInput< sal_uInt32 >();
1194cdf0e10cSrcweir sal_uInt32 nLen = dumpHex< sal_uInt32 >( getPropertyName(), "CONV-DEC" );
1195cdf0e10cSrcweir maLargeProps.push_back( LargeProperty( LargeProperty::PROPTYPE_STRINGARRAY, getPropertyName(), nLen ) );
1196cdf0e10cSrcweir }
1197cdf0e10cSrcweir }
1198cdf0e10cSrcweir
dumpStreamProperty()1199cdf0e10cSrcweir void AxPropertyObjectBase::dumpStreamProperty()
1200cdf0e10cSrcweir {
1201cdf0e10cSrcweir if( startNextProperty() )
1202cdf0e10cSrcweir {
1203cdf0e10cSrcweir alignInput< sal_uInt16 >();
1204cdf0e10cSrcweir sal_uInt16 nData = dumpHex< sal_uInt16 >( getPropertyName() );
1205cdf0e10cSrcweir maStreamProps.push_back( StreamProperty( getPropertyName(), nData ) );
1206cdf0e10cSrcweir }
1207cdf0e10cSrcweir }
1208cdf0e10cSrcweir
dumpEmbeddedFont()1209cdf0e10cSrcweir void AxPropertyObjectBase::dumpEmbeddedFont()
1210cdf0e10cSrcweir {
1211cdf0e10cSrcweir if( ensureValid() )
1212cdf0e10cSrcweir {
1213cdf0e10cSrcweir writeEmptyItem( "embedded-fontdata" );
1214cdf0e10cSrcweir IndentGuard aIndGuard( mxOut );
1215cdf0e10cSrcweir AxCFontNewObject( *this ).dump();
1216cdf0e10cSrcweir }
1217cdf0e10cSrcweir }
1218cdf0e10cSrcweir
dumpToPosition(sal_Int64 nPos)1219cdf0e10cSrcweir void AxPropertyObjectBase::dumpToPosition( sal_Int64 nPos )
1220cdf0e10cSrcweir {
1221cdf0e10cSrcweir dumpRemainingTo( nPos );
1222cdf0e10cSrcweir mbValid = true;
1223cdf0e10cSrcweir ensureValid();
1224cdf0e10cSrcweir }
1225cdf0e10cSrcweir
constructAxPropObj(const String & rPropNameList,bool b64BitPropFlags)1226cdf0e10cSrcweir void AxPropertyObjectBase::constructAxPropObj( const String& rPropNameList, bool b64BitPropFlags )
1227cdf0e10cSrcweir {
1228cdf0e10cSrcweir if( OleInputObjectBase::implIsValid() )
1229cdf0e10cSrcweir {
1230cdf0e10cSrcweir mxPropNames = cfg().getNameList( rPropNameList );
1231cdf0e10cSrcweir mb64BitPropFlags = b64BitPropFlags;
1232cdf0e10cSrcweir mbValid = true;
1233cdf0e10cSrcweir }
1234cdf0e10cSrcweir }
1235cdf0e10cSrcweir
dumpVersion()1236cdf0e10cSrcweir void AxPropertyObjectBase::dumpVersion()
1237cdf0e10cSrcweir {
1238cdf0e10cSrcweir ItemGuard aItem( mxOut, "version" );
1239cdf0e10cSrcweir sal_uInt8 nMinor, nMajor;
1240cdf0e10cSrcweir *mxStrm >> nMinor >> nMajor;
1241cdf0e10cSrcweir mxOut->writeDec( nMajor );
1242cdf0e10cSrcweir mxOut->writeChar( '.' );
1243cdf0e10cSrcweir mxOut->writeDec( nMinor );
1244cdf0e10cSrcweir }
1245cdf0e10cSrcweir
dumpString(const String & rName,sal_uInt32 nSize,bool bArray)1246cdf0e10cSrcweir OUString AxPropertyObjectBase::dumpString( const String& rName, sal_uInt32 nSize, bool bArray )
1247cdf0e10cSrcweir {
1248cdf0e10cSrcweir bool bCompressed = getFlag( nSize, AX_STRING_COMPRESSED );
1249cdf0e10cSrcweir sal_uInt32 nBufSize = extractValue< sal_uInt32 >( nSize, 0, 31 );
1250cdf0e10cSrcweir OUString aString = bCompressed ?
1251cdf0e10cSrcweir dumpCharArray( rName, nBufSize, RTL_TEXTENCODING_ISO_8859_1 ) :
1252cdf0e10cSrcweir dumpUnicodeArray( rName, bArray ? nBufSize : (nBufSize / 2) );
1253cdf0e10cSrcweir alignInput< sal_Int32 >();
1254cdf0e10cSrcweir return aString;
1255cdf0e10cSrcweir }
1256cdf0e10cSrcweir
dumpShortProperties()1257cdf0e10cSrcweir void AxPropertyObjectBase::dumpShortProperties()
1258cdf0e10cSrcweir {
1259cdf0e10cSrcweir if( ensureValid() )
1260cdf0e10cSrcweir {
1261cdf0e10cSrcweir writeEmptyItem( "short-properties" );
1262cdf0e10cSrcweir IndentGuard aIndGuard( mxOut );
1263cdf0e10cSrcweir implDumpShortProperties();
1264cdf0e10cSrcweir alignInput< sal_uInt32 >();
1265cdf0e10cSrcweir }
1266cdf0e10cSrcweir }
1267cdf0e10cSrcweir
dumpLargeProperties()1268cdf0e10cSrcweir void AxPropertyObjectBase::dumpLargeProperties()
1269cdf0e10cSrcweir {
1270cdf0e10cSrcweir if( ensureValid( mnPropFlags == 0 ) && !maLargeProps.empty() )
1271cdf0e10cSrcweir {
1272cdf0e10cSrcweir writeEmptyItem( "large-properties" );
1273cdf0e10cSrcweir IndentGuard aIndGuard( mxOut );
1274cdf0e10cSrcweir for( LargePropertyVector::iterator aIt = maLargeProps.begin(), aEnd = maLargeProps.end(); ensureValid() && (aIt != aEnd); ++aIt )
1275cdf0e10cSrcweir {
1276cdf0e10cSrcweir switch( aIt->mePropType )
1277cdf0e10cSrcweir {
1278cdf0e10cSrcweir case LargeProperty::PROPTYPE_POS:
1279cdf0e10cSrcweir {
1280cdf0e10cSrcweir MultiItemsGuard aMultiGuard( mxOut );
1281cdf0e10cSrcweir writeEmptyItem( aIt->maItemName );
1282cdf0e10cSrcweir dumpDec< sal_Int32 >( "top", "CONV-HMM-TO-CM" );
1283cdf0e10cSrcweir dumpDec< sal_Int32 >( "left", "CONV-HMM-TO-CM" );
1284cdf0e10cSrcweir }
1285cdf0e10cSrcweir break;
1286cdf0e10cSrcweir case LargeProperty::PROPTYPE_SIZE:
1287cdf0e10cSrcweir {
1288cdf0e10cSrcweir MultiItemsGuard aMultiGuard( mxOut );
1289cdf0e10cSrcweir writeEmptyItem( aIt->maItemName );
1290cdf0e10cSrcweir dumpDec< sal_Int32 >( "width", "CONV-HMM-TO-CM" );
1291cdf0e10cSrcweir dumpDec< sal_Int32 >( "height", "CONV-HMM-TO-CM" );
1292cdf0e10cSrcweir }
1293cdf0e10cSrcweir break;
1294cdf0e10cSrcweir case LargeProperty::PROPTYPE_GUID:
1295cdf0e10cSrcweir {
1296cdf0e10cSrcweir OUString aGuid = dumpGuid( aIt->maItemName );
1297cdf0e10cSrcweir if( aIt->mpItemValue )
1298cdf0e10cSrcweir *aIt->mpItemValue = cfg().getStringOption( aGuid, OUString() );
1299cdf0e10cSrcweir }
1300cdf0e10cSrcweir break;
1301cdf0e10cSrcweir case LargeProperty::PROPTYPE_STRING:
1302cdf0e10cSrcweir {
1303cdf0e10cSrcweir OUString aString = dumpString( aIt->maItemName, aIt->mnDataSize, false );
1304cdf0e10cSrcweir if( aIt->mpItemValue )
1305cdf0e10cSrcweir *aIt->mpItemValue = aString;
1306cdf0e10cSrcweir }
1307cdf0e10cSrcweir break;
1308cdf0e10cSrcweir case LargeProperty::PROPTYPE_STRINGARRAY:
1309cdf0e10cSrcweir {
1310cdf0e10cSrcweir writeEmptyItem( aIt->maItemName );
1311cdf0e10cSrcweir IndentGuard aIndGuard2( mxOut );
1312cdf0e10cSrcweir mxOut->resetItemIndex();
1313cdf0e10cSrcweir sal_Int64 nEndPos = mxStrm->tell() + aIt->mnDataSize;
1314cdf0e10cSrcweir while( mxStrm->tell() < nEndPos )
1315cdf0e10cSrcweir {
1316cdf0e10cSrcweir MultiItemsGuard aMultiGuard( mxOut );
1317cdf0e10cSrcweir sal_uInt32 nDataSize = dumpHex< sal_uInt32 >( "#flags", "AX-ARRAYSTRINGLEN" );
1318cdf0e10cSrcweir dumpString( "string", nDataSize, true );
1319cdf0e10cSrcweir }
1320cdf0e10cSrcweir dumpToPosition( nEndPos );
1321cdf0e10cSrcweir }
1322cdf0e10cSrcweir break;
1323cdf0e10cSrcweir }
1324cdf0e10cSrcweir }
1325cdf0e10cSrcweir }
1326cdf0e10cSrcweir dumpToPosition( mnPropertiesEnd );
1327cdf0e10cSrcweir
1328cdf0e10cSrcweir if( ensureValid() && !maStreamProps.empty() )
1329cdf0e10cSrcweir {
1330cdf0e10cSrcweir writeEmptyItem( "stream-properties" );
1331cdf0e10cSrcweir IndentGuard aIndGuard( mxOut );
1332cdf0e10cSrcweir for( StreamPropertyVector::iterator aIt = maStreamProps.begin(), aEnd = maStreamProps.end(); ensureValid() && (aIt != aEnd); ++aIt )
1333cdf0e10cSrcweir {
1334cdf0e10cSrcweir writeEmptyItem( aIt->maItemName );
1335cdf0e10cSrcweir if( ensureValid( aIt->mnData == 0xFFFF ) )
1336cdf0e10cSrcweir {
1337cdf0e10cSrcweir IndentGuard aIndGuard2( mxOut );
1338cdf0e10cSrcweir OUString aClassName = cfg().getStringOption( dumpGuid(), OUString() );
1339cdf0e10cSrcweir if( aClassName.equalsAscii( "StdFont" ) )
1340cdf0e10cSrcweir StdFontObject( *this ).dump();
1341cdf0e10cSrcweir else if( aClassName.equalsAscii( "StdPic" ) )
1342cdf0e10cSrcweir StdPicObject( *this ).dump();
1343cdf0e10cSrcweir else if( aClassName.equalsAscii( "CFontNew" ) )
1344cdf0e10cSrcweir AxCFontNewObject( *this ).dump();
1345cdf0e10cSrcweir else
1346cdf0e10cSrcweir ensureValid( false );
1347cdf0e10cSrcweir }
1348cdf0e10cSrcweir }
1349cdf0e10cSrcweir }
1350cdf0e10cSrcweir }
1351cdf0e10cSrcweir
1352cdf0e10cSrcweir // ============================================================================
1353cdf0e10cSrcweir
AxCFontNewObject(const InputObjectBase & rParent)1354cdf0e10cSrcweir AxCFontNewObject::AxCFontNewObject( const InputObjectBase& rParent )
1355cdf0e10cSrcweir {
1356cdf0e10cSrcweir AxPropertyObjectBase::construct( rParent, "AX-CFONTNEW-PROPERTIES" );
1357cdf0e10cSrcweir }
1358cdf0e10cSrcweir
implDumpShortProperties()1359cdf0e10cSrcweir void AxCFontNewObject::implDumpShortProperties()
1360cdf0e10cSrcweir {
1361cdf0e10cSrcweir dumpStringProperty();
1362cdf0e10cSrcweir dumpFlagsProperty( 0, "AX-CFONTNEW-FLAGS" );
1363cdf0e10cSrcweir dumpDecProperty< sal_Int32 >( 160 );
1364cdf0e10cSrcweir dumpDecProperty< sal_Int32 >( 0 );
1365cdf0e10cSrcweir dumpDecProperty< sal_uInt8 >( WINDOWS_CHARSET_DEFAULT, "CHARSET" );
1366cdf0e10cSrcweir dumpDecProperty< sal_uInt8 >( 0, "FONT-PITCHFAMILY" );
1367cdf0e10cSrcweir dumpDecProperty< sal_uInt8 >( 1, "AX-CFONTNEW-ALIGNMENT" );
1368cdf0e10cSrcweir dumpDecProperty< sal_uInt16 >( 400, "FONT-WEIGHT" );
1369cdf0e10cSrcweir }
1370cdf0e10cSrcweir
1371cdf0e10cSrcweir // ============================================================================
1372cdf0e10cSrcweir
AxColumnInfoObject(const InputObjectBase & rParent)1373cdf0e10cSrcweir AxColumnInfoObject::AxColumnInfoObject( const InputObjectBase& rParent )
1374cdf0e10cSrcweir {
1375cdf0e10cSrcweir AxPropertyObjectBase::construct( rParent, "AX-COLUMNINFO-PROPERTIES" );
1376cdf0e10cSrcweir }
1377cdf0e10cSrcweir
implDumpShortProperties()1378cdf0e10cSrcweir void AxColumnInfoObject::implDumpShortProperties()
1379cdf0e10cSrcweir {
1380cdf0e10cSrcweir dumpDecProperty< sal_Int32 >( -1, "CONV-HMM-TO-CM" );
1381cdf0e10cSrcweir }
1382cdf0e10cSrcweir
1383cdf0e10cSrcweir // ============================================================================
1384cdf0e10cSrcweir
AxCommandButtonObject(const InputObjectBase & rParent)1385cdf0e10cSrcweir AxCommandButtonObject::AxCommandButtonObject( const InputObjectBase& rParent )
1386cdf0e10cSrcweir {
1387cdf0e10cSrcweir AxPropertyObjectBase::construct( rParent, "AX-COMMANDBUTTON-PROPERTIES" );
1388cdf0e10cSrcweir }
1389cdf0e10cSrcweir
implDumpShortProperties()1390cdf0e10cSrcweir void AxCommandButtonObject::implDumpShortProperties()
1391cdf0e10cSrcweir {
1392cdf0e10cSrcweir dumpColorProperty( 0x80000012 );
1393cdf0e10cSrcweir dumpColorProperty( 0x80000008 );
1394cdf0e10cSrcweir dumpFlagsProperty( 0x0000001B );
1395cdf0e10cSrcweir dumpStringProperty();
1396cdf0e10cSrcweir dumpImagePosProperty();
1397cdf0e10cSrcweir dumpSizeProperty();
1398cdf0e10cSrcweir dumpMousePtrProperty();
1399cdf0e10cSrcweir dumpStreamProperty();
1400cdf0e10cSrcweir dumpUnicodeProperty();
1401cdf0e10cSrcweir dumpBoolProperty();
1402cdf0e10cSrcweir dumpStreamProperty();
1403cdf0e10cSrcweir }
1404cdf0e10cSrcweir
implDumpExtended()1405cdf0e10cSrcweir void AxCommandButtonObject::implDumpExtended()
1406cdf0e10cSrcweir {
1407cdf0e10cSrcweir dumpEmbeddedFont();
1408cdf0e10cSrcweir }
1409cdf0e10cSrcweir
1410cdf0e10cSrcweir // ============================================================================
1411cdf0e10cSrcweir
AxMorphControlObject(const InputObjectBase & rParent)1412cdf0e10cSrcweir AxMorphControlObject::AxMorphControlObject( const InputObjectBase& rParent )
1413cdf0e10cSrcweir {
1414cdf0e10cSrcweir AxPropertyObjectBase::construct( rParent, "AX-MORPH-PROPERTIES", true );
1415cdf0e10cSrcweir }
1416cdf0e10cSrcweir
implDumpShortProperties()1417cdf0e10cSrcweir void AxMorphControlObject::implDumpShortProperties()
1418cdf0e10cSrcweir {
1419cdf0e10cSrcweir dumpFlagsProperty( 0x2C80081B );
1420cdf0e10cSrcweir dumpColorProperty( 0x80000005 );
1421cdf0e10cSrcweir dumpColorProperty( 0x80000008 );
1422cdf0e10cSrcweir dumpDecProperty< sal_uInt32 >( 0 );
1423cdf0e10cSrcweir dumpBorderStyleProperty< sal_uInt8 >( 0 );
1424cdf0e10cSrcweir dumpDecProperty< sal_uInt8 >( 0, "AX-MORPH-SCROLLBARS" );
1425cdf0e10cSrcweir mnCtrlType = dumpDecProperty< sal_uInt8 >( 1, "AX-MORPH-CONTROLTYPE" );
1426cdf0e10cSrcweir dumpMousePtrProperty();
1427cdf0e10cSrcweir dumpSizeProperty();
1428cdf0e10cSrcweir dumpUnicodeProperty();
1429cdf0e10cSrcweir dumpDecProperty< sal_uInt32 >( 0, "CONV-HMM-TO-CM" );
1430cdf0e10cSrcweir dumpDecProperty< sal_uInt16 >( 1, "AX-MORPH-BOUNDCOLUMN" );
1431cdf0e10cSrcweir dumpDecProperty< sal_Int16 >( -1, "AX-MORPH-TEXTCOLUMN" );
1432cdf0e10cSrcweir dumpDecProperty< sal_Int16 >( 1, "AX-MORPH-COLUMNCOUNT" );
1433cdf0e10cSrcweir dumpDecProperty< sal_uInt16 >( 8 );
1434cdf0e10cSrcweir mnColInfoCount = dumpDecProperty< sal_uInt16 >( 1 );
1435cdf0e10cSrcweir dumpDecProperty< sal_uInt8 >( 2, "AX-MORPH-MATCHENTRYTYPE" );
1436cdf0e10cSrcweir dumpDecProperty< sal_uInt8 >( 0, "AX-MORPH-LISTSTYLE" );
1437cdf0e10cSrcweir dumpDecProperty< sal_uInt8 >( 0, "AX-MORPH-SHOWDROPDOWNMODE" );
1438cdf0e10cSrcweir dumpUnknownProperty();
1439cdf0e10cSrcweir dumpDecProperty< sal_uInt8 >( 1, "AX-MORPH-DROPDOWNSTYLE" );
1440cdf0e10cSrcweir dumpDecProperty< sal_uInt8 >( 0, "AX-MORPH-SELECTIONTYPE" );
1441cdf0e10cSrcweir dumpStringProperty();
1442cdf0e10cSrcweir dumpStringProperty();
1443cdf0e10cSrcweir dumpImagePosProperty();
1444cdf0e10cSrcweir dumpColorProperty( 0x80000006 );
1445cdf0e10cSrcweir dumpSpecialEffectProperty< sal_uInt32 >( 2 );
1446cdf0e10cSrcweir dumpStreamProperty();
1447cdf0e10cSrcweir dumpStreamProperty();
1448cdf0e10cSrcweir dumpUnicodeProperty();
1449cdf0e10cSrcweir dumpUnknownProperty();
1450cdf0e10cSrcweir dumpBoolProperty();
1451cdf0e10cSrcweir dumpStringProperty();
1452cdf0e10cSrcweir }
1453cdf0e10cSrcweir
implDumpExtended()1454cdf0e10cSrcweir void AxMorphControlObject::implDumpExtended()
1455cdf0e10cSrcweir {
1456cdf0e10cSrcweir dumpEmbeddedFont();
1457cdf0e10cSrcweir dumpColumnInfos();
1458cdf0e10cSrcweir }
1459cdf0e10cSrcweir
dumpColumnInfos()1460cdf0e10cSrcweir void AxMorphControlObject::dumpColumnInfos()
1461cdf0e10cSrcweir {
1462cdf0e10cSrcweir if( ensureValid() && (mnColInfoCount > 0) && ((mnCtrlType == 2) || (mnCtrlType == 3)) )
1463cdf0e10cSrcweir {
1464cdf0e10cSrcweir mxOut->resetItemIndex();
1465cdf0e10cSrcweir for( sal_uInt16 nIdx = 0; ensureValid() && (nIdx < mnColInfoCount); ++nIdx )
1466cdf0e10cSrcweir {
1467cdf0e10cSrcweir writeEmptyItem( "#column-info" );
1468cdf0e10cSrcweir IndentGuard aIndGuard( mxOut );
1469cdf0e10cSrcweir AxColumnInfoObject( *this ).dump();
1470cdf0e10cSrcweir }
1471cdf0e10cSrcweir }
1472cdf0e10cSrcweir }
1473cdf0e10cSrcweir
1474cdf0e10cSrcweir // ============================================================================
1475cdf0e10cSrcweir
AxLabelObject(const InputObjectBase & rParent)1476cdf0e10cSrcweir AxLabelObject::AxLabelObject( const InputObjectBase& rParent )
1477cdf0e10cSrcweir {
1478cdf0e10cSrcweir AxPropertyObjectBase::construct( rParent, "AX-LABEL-PROPERTIES" );
1479cdf0e10cSrcweir }
1480cdf0e10cSrcweir
implDumpShortProperties()1481cdf0e10cSrcweir void AxLabelObject::implDumpShortProperties()
1482cdf0e10cSrcweir {
1483cdf0e10cSrcweir dumpColorProperty( 0x80000012 );
1484cdf0e10cSrcweir dumpColorProperty( 0x8000000F );
1485cdf0e10cSrcweir dumpFlagsProperty( 0x0080001B );
1486cdf0e10cSrcweir dumpStringProperty();
1487cdf0e10cSrcweir dumpImagePosProperty();
1488cdf0e10cSrcweir dumpSizeProperty();
1489cdf0e10cSrcweir dumpMousePtrProperty();
1490cdf0e10cSrcweir dumpColorProperty( 0x80000006 );
1491cdf0e10cSrcweir dumpBorderStyleProperty< sal_uInt16 >( 0 );
1492cdf0e10cSrcweir dumpSpecialEffectProperty< sal_uInt16 >( 0 );
1493cdf0e10cSrcweir dumpStreamProperty();
1494cdf0e10cSrcweir dumpUnicodeProperty();
1495cdf0e10cSrcweir dumpStreamProperty();
1496cdf0e10cSrcweir }
1497cdf0e10cSrcweir
implDumpExtended()1498cdf0e10cSrcweir void AxLabelObject::implDumpExtended()
1499cdf0e10cSrcweir {
1500cdf0e10cSrcweir dumpEmbeddedFont();
1501cdf0e10cSrcweir }
1502cdf0e10cSrcweir
1503cdf0e10cSrcweir // ============================================================================
1504cdf0e10cSrcweir
AxImageObject(const InputObjectBase & rParent)1505cdf0e10cSrcweir AxImageObject::AxImageObject( const InputObjectBase& rParent )
1506cdf0e10cSrcweir {
1507cdf0e10cSrcweir AxPropertyObjectBase::construct( rParent, "AX-IMAGE-PROPERTIES" );
1508cdf0e10cSrcweir }
1509cdf0e10cSrcweir
implDumpShortProperties()1510cdf0e10cSrcweir void AxImageObject::implDumpShortProperties()
1511cdf0e10cSrcweir {
1512cdf0e10cSrcweir dumpUnknownProperty();
1513cdf0e10cSrcweir dumpUnknownProperty();
1514cdf0e10cSrcweir dumpBoolProperty();
1515cdf0e10cSrcweir dumpColorProperty( 0x80000006 );
1516cdf0e10cSrcweir dumpColorProperty( 0x8000000F );
1517cdf0e10cSrcweir dumpBorderStyleProperty< sal_uInt8 >( 1 );
1518cdf0e10cSrcweir dumpMousePtrProperty();
1519cdf0e10cSrcweir dumpImageSizeModeProperty();
1520cdf0e10cSrcweir dumpSpecialEffectProperty< sal_uInt8 >( 0 );
1521cdf0e10cSrcweir dumpSizeProperty();
1522cdf0e10cSrcweir dumpStreamProperty();
1523cdf0e10cSrcweir dumpImageAlignProperty();
1524cdf0e10cSrcweir dumpBoolProperty();
1525cdf0e10cSrcweir dumpFlagsProperty( 0x0000001B );
1526cdf0e10cSrcweir dumpStreamProperty();
1527cdf0e10cSrcweir }
1528cdf0e10cSrcweir
1529cdf0e10cSrcweir // ============================================================================
1530cdf0e10cSrcweir
AxScrollBarObject(const InputObjectBase & rParent)1531cdf0e10cSrcweir AxScrollBarObject::AxScrollBarObject( const InputObjectBase& rParent )
1532cdf0e10cSrcweir {
1533cdf0e10cSrcweir AxPropertyObjectBase::construct( rParent, "AX-SCROLLBAR-PROPERTIES" );
1534cdf0e10cSrcweir }
1535cdf0e10cSrcweir
implDumpShortProperties()1536cdf0e10cSrcweir void AxScrollBarObject::implDumpShortProperties()
1537cdf0e10cSrcweir {
1538cdf0e10cSrcweir dumpColorProperty( 0x80000012 );
1539cdf0e10cSrcweir dumpColorProperty( 0x8000000F );
1540cdf0e10cSrcweir dumpFlagsProperty( 0x0000001B );
1541cdf0e10cSrcweir dumpSizeProperty();
1542cdf0e10cSrcweir dumpMousePtrProperty();
1543cdf0e10cSrcweir dumpDecProperty< sal_Int32 >( 0 );
1544cdf0e10cSrcweir dumpDecProperty< sal_Int32 >( 32767 );
1545cdf0e10cSrcweir dumpDecProperty< sal_Int32 >( 0 );
1546cdf0e10cSrcweir dumpHexProperty< sal_uInt32 >( 0 );
1547cdf0e10cSrcweir dumpEnabledProperty();
1548cdf0e10cSrcweir dumpEnabledProperty();
1549cdf0e10cSrcweir dumpDecProperty< sal_Int32 >( 1 );
1550cdf0e10cSrcweir dumpDecProperty< sal_Int32 >( 1 );
1551cdf0e10cSrcweir dumpOrientationProperty();
1552cdf0e10cSrcweir dumpDecProperty< sal_Int16 >( -1, "AX-SCROLLBAR-PROPTHUMB" );
1553cdf0e10cSrcweir dumpDelayProperty();
1554cdf0e10cSrcweir dumpStreamProperty();
1555cdf0e10cSrcweir }
1556cdf0e10cSrcweir
1557cdf0e10cSrcweir // ============================================================================
1558cdf0e10cSrcweir
AxSpinButtonObject(const InputObjectBase & rParent)1559cdf0e10cSrcweir AxSpinButtonObject::AxSpinButtonObject( const InputObjectBase& rParent )
1560cdf0e10cSrcweir {
1561cdf0e10cSrcweir AxPropertyObjectBase::construct( rParent, "AX-SPINBUTTON-PROPERTIES" );
1562cdf0e10cSrcweir }
1563cdf0e10cSrcweir
implDumpShortProperties()1564cdf0e10cSrcweir void AxSpinButtonObject::implDumpShortProperties()
1565cdf0e10cSrcweir {
1566cdf0e10cSrcweir dumpColorProperty( 0x80000012 );
1567cdf0e10cSrcweir dumpColorProperty( 0x8000000F );
1568cdf0e10cSrcweir dumpFlagsProperty( 0x0000001B );
1569cdf0e10cSrcweir dumpSizeProperty();
1570cdf0e10cSrcweir dumpHexProperty< sal_uInt32 >( 0 );
1571cdf0e10cSrcweir dumpDecProperty< sal_Int32 >( 0 );
1572cdf0e10cSrcweir dumpDecProperty< sal_Int32 >( 100 );
1573cdf0e10cSrcweir dumpDecProperty< sal_Int32 >( 0 );
1574cdf0e10cSrcweir dumpEnabledProperty();
1575cdf0e10cSrcweir dumpEnabledProperty();
1576cdf0e10cSrcweir dumpDecProperty< sal_Int32 >( 1 );
1577cdf0e10cSrcweir dumpOrientationProperty();
1578cdf0e10cSrcweir dumpDelayProperty();
1579cdf0e10cSrcweir dumpStreamProperty();
1580cdf0e10cSrcweir dumpMousePtrProperty();
1581cdf0e10cSrcweir }
1582cdf0e10cSrcweir
1583cdf0e10cSrcweir // ============================================================================
1584cdf0e10cSrcweir
AxTabStripObject(const InputObjectBase & rParent)1585cdf0e10cSrcweir AxTabStripObject::AxTabStripObject( const InputObjectBase& rParent )
1586cdf0e10cSrcweir {
1587cdf0e10cSrcweir AxPropertyObjectBase::construct( rParent, "AX-TABSTRIP-PROPERTIES" );
1588cdf0e10cSrcweir }
1589cdf0e10cSrcweir
implDumpShortProperties()1590cdf0e10cSrcweir void AxTabStripObject::implDumpShortProperties()
1591cdf0e10cSrcweir {
1592cdf0e10cSrcweir dumpDecProperty< sal_Int32 >( -1 );
1593cdf0e10cSrcweir dumpColorProperty( 0x8000000F );
1594cdf0e10cSrcweir dumpColorProperty( 0x80000012 );
1595cdf0e10cSrcweir dumpUnknownProperty();
1596cdf0e10cSrcweir dumpSizeProperty();
1597cdf0e10cSrcweir dumpStringArrayProperty();
1598cdf0e10cSrcweir dumpMousePtrProperty();
1599cdf0e10cSrcweir dumpUnknownProperty();
1600cdf0e10cSrcweir dumpDecProperty< sal_uInt32 >( 0, "AX-TABSTRIP-ORIENTATION" );
1601cdf0e10cSrcweir dumpDecProperty< sal_uInt32 >( 0, "AX-TABSTRIP-TABSTYLE" );
1602cdf0e10cSrcweir dumpBoolProperty();
1603cdf0e10cSrcweir dumpHmmProperty();
1604cdf0e10cSrcweir dumpHmmProperty();
1605cdf0e10cSrcweir dumpBoolProperty();
1606cdf0e10cSrcweir dumpUnknownProperty();
1607cdf0e10cSrcweir dumpStringArrayProperty();
1608cdf0e10cSrcweir dumpUnknownProperty();
1609cdf0e10cSrcweir dumpStringArrayProperty();
1610cdf0e10cSrcweir dumpFlagsProperty( 0x0000001B );
1611cdf0e10cSrcweir dumpBoolProperty();
1612cdf0e10cSrcweir dumpDecProperty< sal_uInt32 >( 0 );
1613cdf0e10cSrcweir dumpStringArrayProperty();
1614cdf0e10cSrcweir mnTabFlagCount = dumpDecProperty< sal_Int32 >( 0 );
1615cdf0e10cSrcweir dumpStringArrayProperty();
1616cdf0e10cSrcweir dumpStreamProperty();
1617cdf0e10cSrcweir }
1618cdf0e10cSrcweir
implDumpExtended()1619cdf0e10cSrcweir void AxTabStripObject::implDumpExtended()
1620cdf0e10cSrcweir {
1621cdf0e10cSrcweir dumpEmbeddedFont();
1622cdf0e10cSrcweir if( mnTabFlagCount > 0 )
1623cdf0e10cSrcweir {
1624cdf0e10cSrcweir writeEmptyItem( "tab-flags" );
1625cdf0e10cSrcweir IndentGuard aIndGuard( mxOut );
1626cdf0e10cSrcweir mxOut->resetItemIndex();
1627cdf0e10cSrcweir for( sal_Int32 nIdx = 0; ensureValid() && (nIdx < mnTabFlagCount); ++nIdx )
1628cdf0e10cSrcweir dumpHex< sal_uInt32 >( "#flags", "AX-TABSTRIP-FLAGS" );
1629cdf0e10cSrcweir }
1630cdf0e10cSrcweir }
1631cdf0e10cSrcweir
1632cdf0e10cSrcweir // ============================================================================
1633cdf0e10cSrcweir // ============================================================================
1634cdf0e10cSrcweir
FormControlStreamObject(const ObjectBase & rParent,const BinaryInputStreamRef & rxStrm,const OUString & rSysFileName,const OUString * pProgId)1635cdf0e10cSrcweir FormControlStreamObject::FormControlStreamObject( const ObjectBase& rParent, const BinaryInputStreamRef& rxStrm, const OUString& rSysFileName, const OUString* pProgId )
1636cdf0e10cSrcweir {
1637cdf0e10cSrcweir construct( rParent, rxStrm, rSysFileName );
1638cdf0e10cSrcweir constructFormCtrlStrmObj( pProgId );
1639cdf0e10cSrcweir }
1640cdf0e10cSrcweir
FormControlStreamObject(const OutputObjectBase & rParent,const BinaryInputStreamRef & rxStrm,const OUString * pProgId)1641cdf0e10cSrcweir FormControlStreamObject::FormControlStreamObject( const OutputObjectBase& rParent, const BinaryInputStreamRef& rxStrm, const OUString* pProgId )
1642cdf0e10cSrcweir {
1643cdf0e10cSrcweir construct( rParent, rxStrm );
1644cdf0e10cSrcweir constructFormCtrlStrmObj( pProgId );
1645cdf0e10cSrcweir }
1646cdf0e10cSrcweir
implDump()1647cdf0e10cSrcweir void FormControlStreamObject::implDump()
1648cdf0e10cSrcweir {
1649cdf0e10cSrcweir if( mbReadGuid )
1650cdf0e10cSrcweir maProgId = cfg().getStringOption( dumpGuid(), OUString() );
1651cdf0e10cSrcweir
1652cdf0e10cSrcweir if( (maProgId.getLength() > 0) && !mxStrm->isEof() )
1653cdf0e10cSrcweir {
1654cdf0e10cSrcweir if( maProgId.equalsAscii( "Forms.CommandButton.1" ) )
1655cdf0e10cSrcweir AxCommandButtonObject( *this ).dump();
1656cdf0e10cSrcweir else if( maProgId.equalsAscii( "Forms.TextBox.1" ) ||
1657cdf0e10cSrcweir maProgId.equalsAscii( "Forms.ListBox.1" ) ||
1658cdf0e10cSrcweir maProgId.equalsAscii( "Forms.ComboBox.1" ) ||
1659cdf0e10cSrcweir maProgId.equalsAscii( "Forms.CheckBox.1" ) ||
1660cdf0e10cSrcweir maProgId.equalsAscii( "Forms.OptionButton.1" ) ||
1661cdf0e10cSrcweir maProgId.equalsAscii( "Forms.ToggleButton.1" ) ||
1662cdf0e10cSrcweir maProgId.equalsAscii( "RefEdit.Ctrl" ) )
1663cdf0e10cSrcweir AxMorphControlObject( *this ).dump();
1664cdf0e10cSrcweir else if( maProgId.equalsAscii( "Forms.Label.1" ) )
1665cdf0e10cSrcweir AxLabelObject( *this ).dump();
1666cdf0e10cSrcweir else if( maProgId.equalsAscii( "Forms.Image.1" ) )
1667cdf0e10cSrcweir AxImageObject( *this ).dump();
1668cdf0e10cSrcweir else if( maProgId.equalsAscii( "Forms.ScrollBar.1" ) )
1669cdf0e10cSrcweir AxScrollBarObject( *this ).dump();
1670cdf0e10cSrcweir else if( maProgId.equalsAscii( "Forms.SpinButton.1" ) )
1671cdf0e10cSrcweir AxSpinButtonObject( *this ).dump();
1672cdf0e10cSrcweir else if( maProgId.equalsAscii( "Forms.TabStrip.1" ) )
1673cdf0e10cSrcweir AxTabStripObject( *this ).dump();
1674cdf0e10cSrcweir else if( maProgId.equalsAscii( "MSComCtl2.FlatScrollBar.2" ) )
1675cdf0e10cSrcweir ComCtlScrollBarObject( *this, 6 ).dump();
1676cdf0e10cSrcweir else if( maProgId.equalsAscii( "COMCTL.ProgCtrl.1" ) )
1677cdf0e10cSrcweir ComCtlProgressBarObject( *this, 5 ).dump();
1678cdf0e10cSrcweir else if( maProgId.equalsAscii( "MSComctlLib.ProgCtrl.2" ) )
1679cdf0e10cSrcweir ComCtlProgressBarObject( *this, 6 ).dump();
1680cdf0e10cSrcweir else if( maProgId.equalsAscii( "COMCTL.Slider.1" ) )
1681cdf0e10cSrcweir ComCtlSliderObject( *this, 5 ).dump();
1682cdf0e10cSrcweir else if( maProgId.equalsAscii( "MSComctlLib.Slider.2" ) )
1683cdf0e10cSrcweir ComCtlSliderObject( *this, 6 ).dump();
1684cdf0e10cSrcweir else if( maProgId.equalsAscii( "ComCtl2.UpDown.1" ) )
1685cdf0e10cSrcweir ComCtlUpDownObject( *this, 5 ).dump();
1686cdf0e10cSrcweir else if( maProgId.equalsAscii( "MSComCtl2.UpDown.2" ) )
1687cdf0e10cSrcweir ComCtlUpDownObject( *this, 6 ).dump();
1688cdf0e10cSrcweir else if( maProgId.equalsAscii( "COMCTL.ImageListCtrl.1" ) )
1689cdf0e10cSrcweir ComCtlImageListObject( *this, 5 ).dump();
1690cdf0e10cSrcweir else if( maProgId.equalsAscii( "MSComctlLib.ImageListCtrl.2" ) )
1691cdf0e10cSrcweir ComCtlImageListObject( *this, 6 ).dump();
1692cdf0e10cSrcweir else if( maProgId.equalsAscii( "COMCTL.TabStrip.1" ) )
1693cdf0e10cSrcweir ComCtlTabStripObject( *this, 5 ).dump();
1694cdf0e10cSrcweir else if( maProgId.equalsAscii( "MSComctlLib.TabStrip.2" ) )
1695cdf0e10cSrcweir ComCtlTabStripObject( *this, 6 ).dump();
1696cdf0e10cSrcweir else if( maProgId.equalsAscii( "COMCTL.TreeCtrl.1" ) )
1697cdf0e10cSrcweir ComCtlTreeViewObject( *this, 5 ).dump();
1698cdf0e10cSrcweir else if( maProgId.equalsAscii( "MSComctlLib.TreeCtrl.2" ) )
1699cdf0e10cSrcweir ComCtlTreeViewObject( *this, 6 ).dump();
1700cdf0e10cSrcweir else if( maProgId.equalsAscii( "COMCTL.SBarCtrl.1" ) )
1701cdf0e10cSrcweir ComCtlStatusBarObject( *this, 5 ).dump();
1702cdf0e10cSrcweir else if( maProgId.equalsAscii( "StdPic" ) )
1703cdf0e10cSrcweir StdPicObject( *this ).dump();
1704cdf0e10cSrcweir }
1705cdf0e10cSrcweir dumpRemainingStream();
1706cdf0e10cSrcweir }
1707cdf0e10cSrcweir
constructFormCtrlStrmObj(const OUString * pProgId)1708cdf0e10cSrcweir void FormControlStreamObject::constructFormCtrlStrmObj( const OUString* pProgId )
1709cdf0e10cSrcweir {
1710cdf0e10cSrcweir mbReadGuid = pProgId == 0;
1711cdf0e10cSrcweir if( pProgId )
1712cdf0e10cSrcweir maProgId = *pProgId;
1713cdf0e10cSrcweir }
1714cdf0e10cSrcweir
1715cdf0e10cSrcweir // ============================================================================
1716cdf0e10cSrcweir // ============================================================================
1717cdf0e10cSrcweir
VbaFormClassInfoObject(const InputObjectBase & rParent,VbaFormSharedData & rFormData)1718cdf0e10cSrcweir VbaFormClassInfoObject::VbaFormClassInfoObject( const InputObjectBase& rParent, VbaFormSharedData& rFormData ) :
1719cdf0e10cSrcweir mrFormData( rFormData )
1720cdf0e10cSrcweir {
1721cdf0e10cSrcweir AxPropertyObjectBase::construct( rParent, "VBA-CLASSINFO-PROPERTIES" );
1722cdf0e10cSrcweir }
1723cdf0e10cSrcweir
implDumpShortProperties()1724cdf0e10cSrcweir void VbaFormClassInfoObject::implDumpShortProperties()
1725cdf0e10cSrcweir {
1726cdf0e10cSrcweir mrFormData.maClassInfoProgIds.push_back( OUString() );
1727cdf0e10cSrcweir dumpGuidProperty( &mrFormData.maClassInfoProgIds.back() );
1728cdf0e10cSrcweir dumpGuidProperty();
1729cdf0e10cSrcweir dumpUnknownProperty();
1730cdf0e10cSrcweir dumpGuidProperty();
1731cdf0e10cSrcweir dumpFlagsProperty( 0, "VBA-CLASSINFO-FLAGS" );
1732cdf0e10cSrcweir dumpDecProperty< sal_uInt32 >( 0 );
1733cdf0e10cSrcweir dumpDecProperty< sal_Int32 >( -1 );
1734cdf0e10cSrcweir dumpDecProperty< sal_uInt16 >( 0 );
1735cdf0e10cSrcweir dumpDecProperty< sal_uInt16 >( 0 );
1736cdf0e10cSrcweir dumpDecProperty< sal_uInt16 >( 0, "OLEPROP-TYPE" );
1737cdf0e10cSrcweir dumpDecProperty< sal_uInt16 >( 0 );
1738cdf0e10cSrcweir dumpDecProperty< sal_uInt16 >( 0 );
1739cdf0e10cSrcweir dumpDecProperty< sal_uInt16 >( 0, "OLEPROP-TYPE" );
1740cdf0e10cSrcweir dumpDecProperty< sal_Int32 >( -1 );
1741cdf0e10cSrcweir dumpDecProperty< sal_uInt16 >( 0 );
1742cdf0e10cSrcweir }
1743cdf0e10cSrcweir
1744cdf0e10cSrcweir // ============================================================================
1745cdf0e10cSrcweir
1746cdf0e10cSrcweir namespace {
1747cdf0e10cSrcweir
1748cdf0e10cSrcweir const sal_uInt32 VBA_FORMSITE_OBJSTREAM = 0x0010;
1749cdf0e10cSrcweir
1750cdf0e10cSrcweir const sal_uInt16 VBA_FORMSITE_CLASSTABLEINDEX = 0x8000;
1751cdf0e10cSrcweir const sal_uInt16 VBA_FORMSITE_CLASSTABLEMASK = 0x7FFF;
1752cdf0e10cSrcweir
1753cdf0e10cSrcweir } // namespace
1754cdf0e10cSrcweir
1755cdf0e10cSrcweir // ----------------------------------------------------------------------------
1756cdf0e10cSrcweir
VbaFormSiteObject(const InputObjectBase & rParent,VbaFormSharedData & rFormData)1757cdf0e10cSrcweir VbaFormSiteObject::VbaFormSiteObject( const InputObjectBase& rParent, VbaFormSharedData& rFormData ) :
1758cdf0e10cSrcweir mrFormData( rFormData )
1759cdf0e10cSrcweir {
1760cdf0e10cSrcweir AxPropertyObjectBase::construct( rParent, "VBA-FORMSITE-PROPERTIES" );
1761cdf0e10cSrcweir }
1762cdf0e10cSrcweir
implDumpShortProperties()1763cdf0e10cSrcweir void VbaFormSiteObject::implDumpShortProperties()
1764cdf0e10cSrcweir {
1765cdf0e10cSrcweir VbaFormSiteInfo aSiteInfo;
1766cdf0e10cSrcweir dumpStringProperty();
1767cdf0e10cSrcweir dumpStringProperty();
1768cdf0e10cSrcweir sal_Int32 nId = dumpDecProperty< sal_Int32 >( 0 );
1769cdf0e10cSrcweir dumpDecProperty< sal_Int32 >( 0 );
1770cdf0e10cSrcweir sal_uInt32 nFlags = dumpFlagsProperty( 0x00000033, "VBA-FORMSITE-FLAGS" );
1771cdf0e10cSrcweir sal_uInt32 nLength = dumpDecProperty< sal_uInt32 >( 0 );
1772cdf0e10cSrcweir dumpDecProperty< sal_Int16 >( -1 );
1773cdf0e10cSrcweir sal_uInt16 nClassId = dumpHexProperty< sal_uInt16 >( 0x7FFF, "VBA-FORMSITE-CLASSIDCACHE" );
1774cdf0e10cSrcweir dumpPosProperty();
1775cdf0e10cSrcweir dumpDecProperty< sal_uInt16 >( 0 );
1776cdf0e10cSrcweir dumpUnknownProperty();
1777cdf0e10cSrcweir dumpStringProperty();
1778cdf0e10cSrcweir dumpStringProperty();
1779cdf0e10cSrcweir dumpStringProperty();
1780cdf0e10cSrcweir dumpStringProperty();
1781cdf0e10cSrcweir
1782cdf0e10cSrcweir sal_uInt16 nIndex = nClassId & VBA_FORMSITE_CLASSTABLEMASK;
1783cdf0e10cSrcweir if( getFlag( nClassId, VBA_FORMSITE_CLASSTABLEINDEX ) )
1784cdf0e10cSrcweir {
1785cdf0e10cSrcweir if( nIndex < mrFormData.maClassInfoProgIds.size() )
1786cdf0e10cSrcweir aSiteInfo.maProgId = mrFormData.maClassInfoProgIds[ nIndex ];
1787cdf0e10cSrcweir }
1788cdf0e10cSrcweir else
1789cdf0e10cSrcweir {
1790cdf0e10cSrcweir if( cfg().hasName( "VBA-FORMSITE-CLASSNAMES", nIndex ) )
1791cdf0e10cSrcweir aSiteInfo.maProgId = cfg().getName( "VBA-FORMSITE-CLASSNAMES", nIndex );
1792cdf0e10cSrcweir }
1793cdf0e10cSrcweir aSiteInfo.mnId = nId;
1794cdf0e10cSrcweir aSiteInfo.mnLength = nLength;
1795cdf0e10cSrcweir aSiteInfo.mbInStream = getFlag( nFlags, VBA_FORMSITE_OBJSTREAM );
1796cdf0e10cSrcweir
1797cdf0e10cSrcweir mrFormData.maSiteInfos.push_back( aSiteInfo );
1798cdf0e10cSrcweir }
1799cdf0e10cSrcweir
1800cdf0e10cSrcweir // ============================================================================
1801cdf0e10cSrcweir
VbaFormDesignExtObject(const InputObjectBase & rParent)1802cdf0e10cSrcweir VbaFormDesignExtObject::VbaFormDesignExtObject( const InputObjectBase& rParent )
1803cdf0e10cSrcweir {
1804cdf0e10cSrcweir AxPropertyObjectBase::construct( rParent, "VBA-FORMDESIGNEXT-PROPERTIES" );
1805cdf0e10cSrcweir }
1806cdf0e10cSrcweir
implDumpShortProperties()1807cdf0e10cSrcweir void VbaFormDesignExtObject::implDumpShortProperties()
1808cdf0e10cSrcweir {
1809cdf0e10cSrcweir dumpFlagsProperty( 0x00015F55, "VBA-FORMDESIGNEXT-FLAGS" );
1810cdf0e10cSrcweir dumpHmmProperty();
1811cdf0e10cSrcweir dumpHmmProperty();
1812cdf0e10cSrcweir dumpDecProperty< sal_Int8 >( 0, "VBA-FORMDESIGNEXT-CLICKCTRLMODE" );
1813cdf0e10cSrcweir dumpDecProperty< sal_Int8 >( 0, "VBA-FORMDESIGNEXT-DBLCLICKCTRLMODE" );
1814cdf0e10cSrcweir }
1815cdf0e10cSrcweir
1816cdf0e10cSrcweir // ============================================================================
1817cdf0e10cSrcweir
1818cdf0e10cSrcweir namespace {
1819cdf0e10cSrcweir
1820cdf0e10cSrcweir const sal_uInt32 AX_FORM_HASDESIGNEXTENDER = 0x00004000;
1821cdf0e10cSrcweir const sal_uInt32 AX_FORM_SKIPCLASSTABLE = 0x00008000;
1822cdf0e10cSrcweir
1823cdf0e10cSrcweir const sal_uInt8 AX_FORM_SITECOUNTTYPE_COUNT = 0x80;
1824cdf0e10cSrcweir const sal_uInt8 AX_FORM_SITECOUNTTYPE_MASK = 0x7F;
1825cdf0e10cSrcweir
1826cdf0e10cSrcweir } // namespace
1827cdf0e10cSrcweir
1828cdf0e10cSrcweir // ----------------------------------------------------------------------------
1829cdf0e10cSrcweir
VbaFStreamObject(const ObjectBase & rParent,const BinaryInputStreamRef & rxStrm,const OUString & rSysFileName,VbaFormSharedData & rFormData)1830cdf0e10cSrcweir VbaFStreamObject::VbaFStreamObject( const ObjectBase& rParent, const BinaryInputStreamRef& rxStrm, const OUString& rSysFileName, VbaFormSharedData& rFormData ) :
1831cdf0e10cSrcweir mrFormData( rFormData )
1832cdf0e10cSrcweir {
1833cdf0e10cSrcweir AxPropertyObjectBase::construct( rParent, rxStrm, rSysFileName, "VBA-FORM-PROPERTIES" );
1834cdf0e10cSrcweir }
1835cdf0e10cSrcweir
implDumpShortProperties()1836cdf0e10cSrcweir void VbaFStreamObject::implDumpShortProperties()
1837cdf0e10cSrcweir {
1838cdf0e10cSrcweir dumpUnknownProperty();
1839cdf0e10cSrcweir dumpColorProperty( 0x8000000F );
1840cdf0e10cSrcweir dumpColorProperty( 0x80000012 );
1841cdf0e10cSrcweir dumpDecProperty< sal_uInt32 >( 0 );
1842cdf0e10cSrcweir dumpUnknownProperty();
1843cdf0e10cSrcweir dumpUnknownProperty();
1844cdf0e10cSrcweir mnFlags = dumpFlagsProperty( 0x00000004, "VBA-FORM-FLAGS" );
1845cdf0e10cSrcweir dumpBorderStyleProperty< sal_uInt8 >( 0 );
1846cdf0e10cSrcweir dumpMousePtrProperty();
1847cdf0e10cSrcweir dumpHexProperty< sal_uInt8 >( 0x0C, "VBA-FORM-SCROLLBARS" );
1848cdf0e10cSrcweir dumpSizeProperty();
1849cdf0e10cSrcweir dumpSizeProperty();
1850cdf0e10cSrcweir dumpPosProperty();
1851cdf0e10cSrcweir dumpDecProperty< sal_uInt32 >( 0 );
1852cdf0e10cSrcweir dumpUnknownProperty();
1853cdf0e10cSrcweir dumpStreamProperty();
1854cdf0e10cSrcweir dumpDecProperty< sal_uInt8 >( 0, "VBA-FORM-CYCLE" );
1855cdf0e10cSrcweir dumpSpecialEffectProperty< sal_uInt8 >( 0 );
1856cdf0e10cSrcweir dumpColorProperty( 0x80000012 );
1857cdf0e10cSrcweir dumpStringProperty();
1858cdf0e10cSrcweir dumpStreamProperty();
1859cdf0e10cSrcweir dumpStreamProperty();
1860cdf0e10cSrcweir dumpDecProperty< sal_Int32 >( 100, "CONV-PERCENT" );
1861cdf0e10cSrcweir dumpImageAlignProperty();
1862cdf0e10cSrcweir dumpBoolProperty();
1863cdf0e10cSrcweir dumpImageSizeModeProperty();
1864cdf0e10cSrcweir dumpDecProperty< sal_uInt32 >( 0 );
1865cdf0e10cSrcweir dumpDecProperty< sal_uInt32 >( 0 );
1866cdf0e10cSrcweir }
1867cdf0e10cSrcweir
implDumpExtended()1868cdf0e10cSrcweir void VbaFStreamObject::implDumpExtended()
1869cdf0e10cSrcweir {
1870cdf0e10cSrcweir dumpClassInfos();
1871cdf0e10cSrcweir dumpSiteData();
1872cdf0e10cSrcweir dumpDesignExtender();
1873cdf0e10cSrcweir dumpRemainingStream();
1874cdf0e10cSrcweir }
1875cdf0e10cSrcweir
dumpClassInfos()1876cdf0e10cSrcweir void VbaFStreamObject::dumpClassInfos()
1877cdf0e10cSrcweir {
1878cdf0e10cSrcweir if( ensureValid() && !getFlag( mnFlags, AX_FORM_SKIPCLASSTABLE ) )
1879cdf0e10cSrcweir {
1880cdf0e10cSrcweir mxOut->emptyLine();
1881cdf0e10cSrcweir sal_uInt16 nCount = dumpDec< sal_uInt16 >( "class-info-count" );
1882cdf0e10cSrcweir mxOut->resetItemIndex();
1883cdf0e10cSrcweir for( sal_uInt16 nIdx = 0; ensureValid() && (nIdx < nCount); ++nIdx )
1884cdf0e10cSrcweir {
1885cdf0e10cSrcweir writeEmptyItem( "#class-info" );
1886cdf0e10cSrcweir IndentGuard aIndGuard( mxOut );
1887cdf0e10cSrcweir VbaFormClassInfoObject( *this, mrFormData ).dump();
1888cdf0e10cSrcweir }
1889cdf0e10cSrcweir }
1890cdf0e10cSrcweir }
1891cdf0e10cSrcweir
dumpFormSites(sal_uInt32 nCount)1892cdf0e10cSrcweir void VbaFStreamObject::dumpFormSites( sal_uInt32 nCount )
1893cdf0e10cSrcweir {
1894cdf0e10cSrcweir mxOut->resetItemIndex();
1895cdf0e10cSrcweir for( sal_uInt32 nIdx = 0; ensureValid() && (nIdx < nCount); ++nIdx )
1896cdf0e10cSrcweir {
1897cdf0e10cSrcweir mxOut->emptyLine();
1898cdf0e10cSrcweir writeEmptyItem( "#form-site" );
1899cdf0e10cSrcweir IndentGuard aIndGuard( mxOut );
1900cdf0e10cSrcweir VbaFormSiteObject( *this, mrFormData ).dump();
1901cdf0e10cSrcweir }
1902cdf0e10cSrcweir }
1903cdf0e10cSrcweir
dumpSiteData()1904cdf0e10cSrcweir void VbaFStreamObject::dumpSiteData()
1905cdf0e10cSrcweir {
1906cdf0e10cSrcweir if( ensureValid() )
1907cdf0e10cSrcweir {
1908cdf0e10cSrcweir mxOut->emptyLine();
1909cdf0e10cSrcweir setAlignAnchor();
1910cdf0e10cSrcweir sal_uInt32 nSiteCount = dumpDec< sal_uInt32 >( "site-count" );
1911cdf0e10cSrcweir sal_uInt32 nSiteLength = dumpDec< sal_uInt32 >( "site-data-size" );
1912cdf0e10cSrcweir sal_Int64 nEndPos = mxStrm->tell() + nSiteLength;
1913cdf0e10cSrcweir if( ensureValid( nEndPos <= mxStrm->size() ) )
1914cdf0e10cSrcweir {
1915cdf0e10cSrcweir mxOut->resetItemIndex();
1916cdf0e10cSrcweir sal_uInt32 nSiteIdx = 0;
1917cdf0e10cSrcweir while( ensureValid() && (nSiteIdx < nSiteCount) )
1918cdf0e10cSrcweir {
1919cdf0e10cSrcweir mxOut->emptyLine();
1920cdf0e10cSrcweir writeEmptyItem( "#site-info" );
1921cdf0e10cSrcweir IndentGuard aIndGuard( mxOut );
1922cdf0e10cSrcweir dumpDec< sal_uInt8 >( "depth" );
1923cdf0e10cSrcweir sal_uInt8 nTypeCount = dumpHex< sal_uInt8 >( "type-count", "VBA-FORM-SITE-TYPECOUNT" );
1924cdf0e10cSrcweir if( getFlag( nTypeCount, AX_FORM_SITECOUNTTYPE_COUNT ) )
1925cdf0e10cSrcweir {
1926cdf0e10cSrcweir dumpDec< sal_uInt8 >( "repeated-type" );
1927cdf0e10cSrcweir nSiteIdx += (nTypeCount & AX_FORM_SITECOUNTTYPE_MASK);
1928cdf0e10cSrcweir }
1929cdf0e10cSrcweir else
1930cdf0e10cSrcweir {
1931cdf0e10cSrcweir ++nSiteIdx;
1932cdf0e10cSrcweir }
1933cdf0e10cSrcweir }
1934cdf0e10cSrcweir alignInput< sal_uInt32 >();
1935cdf0e10cSrcweir dumpFormSites( nSiteCount );
1936cdf0e10cSrcweir dumpToPosition( nEndPos );
1937cdf0e10cSrcweir }
1938cdf0e10cSrcweir }
1939cdf0e10cSrcweir }
1940cdf0e10cSrcweir
dumpDesignExtender()1941cdf0e10cSrcweir void VbaFStreamObject::dumpDesignExtender()
1942cdf0e10cSrcweir {
1943cdf0e10cSrcweir if( ensureValid() && getFlag( mnFlags, AX_FORM_HASDESIGNEXTENDER ) )
1944cdf0e10cSrcweir {
1945cdf0e10cSrcweir mxOut->emptyLine();
1946cdf0e10cSrcweir writeEmptyItem( "design-extender" );
1947cdf0e10cSrcweir IndentGuard aIndGuard( mxOut );
1948cdf0e10cSrcweir VbaFormDesignExtObject( *this ).dump();
1949cdf0e10cSrcweir }
1950cdf0e10cSrcweir }
1951cdf0e10cSrcweir
1952cdf0e10cSrcweir // ============================================================================
1953cdf0e10cSrcweir
VbaOStreamObject(const ObjectBase & rParent,const BinaryInputStreamRef & rxStrm,const OUString & rSysFileName,VbaFormSharedData & rFormData)1954cdf0e10cSrcweir VbaOStreamObject::VbaOStreamObject( const ObjectBase& rParent,
1955cdf0e10cSrcweir const BinaryInputStreamRef& rxStrm, const OUString& rSysFileName, VbaFormSharedData& rFormData ) :
1956cdf0e10cSrcweir mrFormData( rFormData )
1957cdf0e10cSrcweir {
1958cdf0e10cSrcweir OleInputObjectBase::construct( rParent, rxStrm, rSysFileName );
1959cdf0e10cSrcweir }
1960cdf0e10cSrcweir
implDump()1961cdf0e10cSrcweir void VbaOStreamObject::implDump()
1962cdf0e10cSrcweir {
1963cdf0e10cSrcweir for( VbaFormSiteInfoVector::iterator aIt = mrFormData.maSiteInfos.begin(), aEnd = mrFormData.maSiteInfos.end(); !mxStrm->isEof() && (aIt != aEnd); ++aIt )
1964cdf0e10cSrcweir {
1965cdf0e10cSrcweir if( (aIt->mbInStream) && (aIt->mnLength > 0) )
1966cdf0e10cSrcweir {
1967cdf0e10cSrcweir mxOut->emptyLine();
1968cdf0e10cSrcweir writeDecItem( "control-id", aIt->mnId );
1969cdf0e10cSrcweir writeInfoItem( "prog-id", aIt->maProgId );
1970cdf0e10cSrcweir IndentGuard aIndGuard( mxOut );
1971cdf0e10cSrcweir BinaryInputStreamRef xRelStrm( new RelativeInputStream( *mxStrm, aIt->mnLength ) );
1972cdf0e10cSrcweir FormControlStreamObject( *this, xRelStrm, &aIt->maProgId ).dump();
1973cdf0e10cSrcweir }
1974cdf0e10cSrcweir }
1975cdf0e10cSrcweir dumpRemainingStream();
1976cdf0e10cSrcweir }
1977cdf0e10cSrcweir
1978cdf0e10cSrcweir // ============================================================================
1979cdf0e10cSrcweir
VbaPageObject(const InputObjectBase & rParent)1980cdf0e10cSrcweir VbaPageObject::VbaPageObject( const InputObjectBase& rParent )
1981cdf0e10cSrcweir {
1982cdf0e10cSrcweir AxPropertyObjectBase::construct( rParent, "VBA-PAGE-PROPERTIES" );
1983cdf0e10cSrcweir }
1984cdf0e10cSrcweir
implDumpShortProperties()1985cdf0e10cSrcweir void VbaPageObject::implDumpShortProperties()
1986cdf0e10cSrcweir {
1987cdf0e10cSrcweir dumpUnknownProperty();
1988cdf0e10cSrcweir dumpDecProperty< sal_uInt32 >( 0, "VBA-PAGE-TRANSITIONEFFECT" );
1989cdf0e10cSrcweir dumpDecProperty< sal_uInt32 >( 0, "AX-CONV-MS" );
1990cdf0e10cSrcweir }
1991cdf0e10cSrcweir
1992cdf0e10cSrcweir // ============================================================================
1993cdf0e10cSrcweir
VbaMultiPageObject(const InputObjectBase & rParent)1994cdf0e10cSrcweir VbaMultiPageObject::VbaMultiPageObject( const InputObjectBase& rParent )
1995cdf0e10cSrcweir {
1996cdf0e10cSrcweir AxPropertyObjectBase::construct( rParent, "VBA-MULTIPAGE-PROPERTIES" );
1997cdf0e10cSrcweir }
1998cdf0e10cSrcweir
implDumpShortProperties()1999cdf0e10cSrcweir void VbaMultiPageObject::implDumpShortProperties()
2000cdf0e10cSrcweir {
2001cdf0e10cSrcweir dumpUnknownProperty();
2002cdf0e10cSrcweir mnPageCount = dumpDecProperty< sal_Int32 >( 0 );
2003cdf0e10cSrcweir dumpDecProperty< sal_Int32 >( 0 );
2004cdf0e10cSrcweir dumpBoolProperty();
2005cdf0e10cSrcweir }
2006cdf0e10cSrcweir
implDumpExtended()2007cdf0e10cSrcweir void VbaMultiPageObject::implDumpExtended()
2008cdf0e10cSrcweir {
2009cdf0e10cSrcweir if( ensureValid() && (mnPageCount > 0) )
2010cdf0e10cSrcweir {
2011cdf0e10cSrcweir writeEmptyItem( "page-ids" );
2012cdf0e10cSrcweir IndentGuard aIndGuard( mxOut );
2013cdf0e10cSrcweir mxOut->resetItemIndex();
2014cdf0e10cSrcweir for( sal_Int32 nIdx = 0; ensureValid() && (nIdx < mnPageCount); ++nIdx )
2015cdf0e10cSrcweir dumpDec< sal_Int32 >( "#id" );
2016cdf0e10cSrcweir }
2017cdf0e10cSrcweir }
2018cdf0e10cSrcweir
2019cdf0e10cSrcweir // ============================================================================
2020cdf0e10cSrcweir
VbaXStreamObject(const ObjectBase & rParent,const BinaryInputStreamRef & rxStrm,const OUString & rSysFileName,VbaFormSharedData & rFormData)2021cdf0e10cSrcweir VbaXStreamObject::VbaXStreamObject( const ObjectBase& rParent,
2022cdf0e10cSrcweir const BinaryInputStreamRef& rxStrm, const OUString& rSysFileName, VbaFormSharedData& rFormData ) :
2023cdf0e10cSrcweir mrFormData( rFormData )
2024cdf0e10cSrcweir {
2025cdf0e10cSrcweir InputObjectBase::construct( rParent, rxStrm, rSysFileName );
2026cdf0e10cSrcweir }
2027cdf0e10cSrcweir
implDump()2028cdf0e10cSrcweir void VbaXStreamObject::implDump()
2029cdf0e10cSrcweir {
2030cdf0e10cSrcweir for( size_t nIdx = 0, nCount = mrFormData.maSiteInfos.size(); !mxStrm->isEof() && (nIdx < nCount); ++nIdx )
2031cdf0e10cSrcweir {
2032cdf0e10cSrcweir mxOut->emptyLine();
2033cdf0e10cSrcweir writeEmptyItem( "page" );
2034cdf0e10cSrcweir IndentGuard aIndGuard( mxOut );
2035cdf0e10cSrcweir VbaPageObject( *this ).dump();
2036cdf0e10cSrcweir }
2037cdf0e10cSrcweir if( !mxStrm->isEof() )
2038cdf0e10cSrcweir {
2039cdf0e10cSrcweir mxOut->emptyLine();
2040cdf0e10cSrcweir writeEmptyItem( "multi-page" );
2041cdf0e10cSrcweir IndentGuard aIndGuard( mxOut );
2042cdf0e10cSrcweir VbaMultiPageObject( *this ).dump();
2043cdf0e10cSrcweir }
2044cdf0e10cSrcweir dumpRemainingStream();
2045cdf0e10cSrcweir }
2046cdf0e10cSrcweir
2047cdf0e10cSrcweir // ============================================================================
2048cdf0e10cSrcweir
VbaContainerStorageObject(const ObjectBase & rParent,const StorageRef & rxStrg,const OUString & rSysPath)2049cdf0e10cSrcweir VbaContainerStorageObject::VbaContainerStorageObject( const ObjectBase& rParent, const StorageRef& rxStrg, const OUString& rSysPath ) :
2050cdf0e10cSrcweir OleStorageObject( rParent, rxStrg, rSysPath )
2051cdf0e10cSrcweir {
2052cdf0e10cSrcweir addPreferredStream( "f" );
2053cdf0e10cSrcweir }
2054cdf0e10cSrcweir
implDumpStream(const Reference<XInputStream> & rxStrm,const OUString & rStrgPath,const OUString & rStrmName,const OUString & rSysFileName)2055cdf0e10cSrcweir void VbaContainerStorageObject::implDumpStream( const Reference< XInputStream >& rxStrm, const OUString& rStrgPath, const OUString& rStrmName, const OUString& rSysFileName )
2056cdf0e10cSrcweir {
2057cdf0e10cSrcweir if( rStrmName.equalsAscii( "f" ) )
2058cdf0e10cSrcweir VbaFStreamObject( *this, rxStrm, rSysFileName, maFormData ).dump();
2059cdf0e10cSrcweir else if( rStrmName.equalsAscii( "o" ) )
2060cdf0e10cSrcweir VbaOStreamObject( *this, rxStrm, rSysFileName, maFormData ).dump();
2061cdf0e10cSrcweir else if( rStrmName.equalsAscii( "x" ) )
2062cdf0e10cSrcweir VbaXStreamObject( *this, rxStrm, rSysFileName, maFormData ).dump();
2063cdf0e10cSrcweir else
2064cdf0e10cSrcweir OleStorageObject::implDumpStream( rxStrm, rStrgPath, rStrmName, rSysFileName );
2065cdf0e10cSrcweir }
2066cdf0e10cSrcweir
implDumpStorage(const StorageRef & rxStrg,const OUString & rStrgPath,const OUString & rSysPath)2067cdf0e10cSrcweir void VbaContainerStorageObject::implDumpStorage( const StorageRef& rxStrg, const OUString& rStrgPath, const OUString& rSysPath )
2068cdf0e10cSrcweir {
2069cdf0e10cSrcweir if( isFormStorage( rStrgPath ) )
2070cdf0e10cSrcweir VbaContainerStorageObject( *this, rxStrg, rSysPath ).dump();
2071cdf0e10cSrcweir else
2072cdf0e10cSrcweir OleStorageObject( *this, rxStrg, rSysPath ).dump();
2073cdf0e10cSrcweir }
2074cdf0e10cSrcweir
isFormStorage(const OUString & rStrgPath) const2075cdf0e10cSrcweir bool VbaContainerStorageObject::isFormStorage( const OUString& rStrgPath ) const
2076cdf0e10cSrcweir {
2077cdf0e10cSrcweir if( (rStrgPath.getLength() >= 3) && (rStrgPath[ 0 ] == 'i') )
2078cdf0e10cSrcweir {
2079cdf0e10cSrcweir OUString aId = rStrgPath.copy( 1 );
2080cdf0e10cSrcweir if( (aId.getLength() == 2) && (aId[ 0 ] == '0') )
2081cdf0e10cSrcweir aId = aId.copy( 1 );
2082cdf0e10cSrcweir sal_Int32 nId = aId.toInt32();
2083cdf0e10cSrcweir if( (nId > 0) && (OUString::valueOf( nId ) == aId) )
2084cdf0e10cSrcweir for( VbaFormSiteInfoVector::const_iterator aIt = maFormData.maSiteInfos.begin(), aEnd = maFormData.maSiteInfos.end(); aIt != aEnd; ++aIt )
2085cdf0e10cSrcweir if( aIt->mnId == nId )
2086cdf0e10cSrcweir return true;
2087cdf0e10cSrcweir }
2088cdf0e10cSrcweir return false;
2089cdf0e10cSrcweir }
2090cdf0e10cSrcweir
2091cdf0e10cSrcweir // ============================================================================
2092cdf0e10cSrcweir // ============================================================================
2093cdf0e10cSrcweir
VbaSharedData()2094cdf0e10cSrcweir VbaSharedData::VbaSharedData() :
2095cdf0e10cSrcweir meTextEnc( RTL_TEXTENCODING_MS_1252 )
2096cdf0e10cSrcweir {
2097cdf0e10cSrcweir }
2098cdf0e10cSrcweir
isModuleStream(const::rtl::OUString & rStrmName) const2099cdf0e10cSrcweir bool VbaSharedData::isModuleStream( const ::rtl::OUString& rStrmName ) const
2100cdf0e10cSrcweir {
2101cdf0e10cSrcweir return maStrmOffsets.count( rStrmName ) > 0;
2102cdf0e10cSrcweir }
2103cdf0e10cSrcweir
getStreamOffset(const OUString & rStrmName) const2104cdf0e10cSrcweir sal_Int32 VbaSharedData::getStreamOffset( const OUString& rStrmName ) const
2105cdf0e10cSrcweir {
2106cdf0e10cSrcweir StreamOffsetMap::const_iterator aIt = maStrmOffsets.find( rStrmName );
2107cdf0e10cSrcweir return (aIt == maStrmOffsets.end()) ? 0 : aIt->second;
2108cdf0e10cSrcweir }
2109cdf0e10cSrcweir
2110cdf0e10cSrcweir // ============================================================================
2111cdf0e10cSrcweir
VbaDirStreamObject(const ObjectBase & rParent,const BinaryInputStreamRef & rxStrm,const OUString & rSysFileName,VbaSharedData & rVbaData)2112cdf0e10cSrcweir VbaDirStreamObject::VbaDirStreamObject( const ObjectBase& rParent,
2113cdf0e10cSrcweir const BinaryInputStreamRef& rxStrm, const OUString& rSysFileName, VbaSharedData& rVbaData ) :
2114cdf0e10cSrcweir mrVbaData( rVbaData )
2115cdf0e10cSrcweir {
2116cdf0e10cSrcweir mxInStrm = rxStrm;
2117cdf0e10cSrcweir if( mxInStrm.get() )
2118cdf0e10cSrcweir {
2119cdf0e10cSrcweir BinaryInputStreamRef xVbaStrm( new ::oox::ole::VbaInputStream( *mxInStrm ) );
2120cdf0e10cSrcweir SequenceRecordObjectBase::construct( rParent, xVbaStrm, rSysFileName, "VBA-DIR-RECORD-NAMES", "VBA-DIR-SIMPLE-RECORDS" );
2121cdf0e10cSrcweir }
2122cdf0e10cSrcweir }
2123cdf0e10cSrcweir
implIsValid() const2124cdf0e10cSrcweir bool VbaDirStreamObject::implIsValid() const
2125cdf0e10cSrcweir {
2126cdf0e10cSrcweir return mxInStrm.get() && SequenceRecordObjectBase::implIsValid();
2127cdf0e10cSrcweir }
2128cdf0e10cSrcweir
implReadRecordHeader(BinaryInputStream & rBaseStrm,sal_Int64 & ornRecId,sal_Int64 & ornRecSize)2129cdf0e10cSrcweir bool VbaDirStreamObject::implReadRecordHeader( BinaryInputStream& rBaseStrm, sal_Int64& ornRecId, sal_Int64& ornRecSize )
2130cdf0e10cSrcweir {
2131cdf0e10cSrcweir ornRecId = rBaseStrm.readuInt16();
2132cdf0e10cSrcweir ornRecSize = rBaseStrm.readInt32();
2133cdf0e10cSrcweir
2134cdf0e10cSrcweir // for no obvious reason, PROJECTVERSION record contains size field of 4, but is 6 bytes long
2135cdf0e10cSrcweir if( ornRecId == 9 )
2136cdf0e10cSrcweir ornRecSize = 6;
2137cdf0e10cSrcweir
2138cdf0e10cSrcweir return !rBaseStrm.isEof();
2139cdf0e10cSrcweir }
2140cdf0e10cSrcweir
implDumpRecordBody()2141cdf0e10cSrcweir void VbaDirStreamObject::implDumpRecordBody()
2142cdf0e10cSrcweir {
2143cdf0e10cSrcweir switch( getRecId() )
2144cdf0e10cSrcweir {
2145cdf0e10cSrcweir case 0x0003:
2146cdf0e10cSrcweir mrVbaData.meTextEnc = rtl_getTextEncodingFromWindowsCodePage( dumpDec< sal_uInt16 >( "codepage", "CODEPAGES" ) );
2147cdf0e10cSrcweir break;
2148cdf0e10cSrcweir case 0x0004:
2149cdf0e10cSrcweir dumpByteString( "name" );
2150cdf0e10cSrcweir break;
2151cdf0e10cSrcweir case 0x0005:
2152cdf0e10cSrcweir dumpByteString( "description" );
2153cdf0e10cSrcweir break;
2154cdf0e10cSrcweir case 0x0006:
2155cdf0e10cSrcweir dumpByteString( "helpfile-path" );
2156cdf0e10cSrcweir break;
2157cdf0e10cSrcweir case 0x0009:
2158cdf0e10cSrcweir dumpDec< sal_uInt32 >( "major" );
2159cdf0e10cSrcweir dumpDec< sal_uInt16 >( "minor" );
2160cdf0e10cSrcweir break;
2161cdf0e10cSrcweir case 0x000C:
2162cdf0e10cSrcweir dumpByteString( "constants" );
2163cdf0e10cSrcweir break;
2164cdf0e10cSrcweir case 0x000D:
2165cdf0e10cSrcweir dumpByteStringWithLength( "lib-id" );
2166cdf0e10cSrcweir dumpUnused( 6 );
2167cdf0e10cSrcweir break;
2168cdf0e10cSrcweir case 0x000E:
2169cdf0e10cSrcweir dumpByteStringWithLength( "lib-id-absolute" );
2170cdf0e10cSrcweir dumpByteStringWithLength( "lib-id-relative" );
2171cdf0e10cSrcweir dumpDec< sal_uInt32 >( "major" );
2172cdf0e10cSrcweir dumpDec< sal_uInt16 >( "minor" );
2173cdf0e10cSrcweir break;
2174cdf0e10cSrcweir case 0x0016:
2175cdf0e10cSrcweir dumpByteString( "name" );
2176cdf0e10cSrcweir break;
2177cdf0e10cSrcweir case 0x0019:
2178cdf0e10cSrcweir dumpByteString( "name" );
2179cdf0e10cSrcweir maCurrStream = OUString();
2180cdf0e10cSrcweir mnCurrOffset = 0;
2181cdf0e10cSrcweir break;
2182cdf0e10cSrcweir case 0x001A:
2183cdf0e10cSrcweir maCurrStream = dumpByteString( "stream-name" );
2184cdf0e10cSrcweir break;
2185cdf0e10cSrcweir case 0x001C:
2186cdf0e10cSrcweir dumpByteString( "description" );
2187cdf0e10cSrcweir break;
2188cdf0e10cSrcweir case 0x002B:
2189cdf0e10cSrcweir if( maCurrStream.getLength() > 0 )
2190cdf0e10cSrcweir mrVbaData.maStrmOffsets[ maCurrStream ] = mnCurrOffset;
2191cdf0e10cSrcweir maCurrStream = OUString();
2192cdf0e10cSrcweir mnCurrOffset = 0;
2193cdf0e10cSrcweir break;
2194cdf0e10cSrcweir case 0x002F:
2195cdf0e10cSrcweir dumpByteStringWithLength( "lib-id-twiddled" );
2196cdf0e10cSrcweir dumpUnused( 6 );
2197cdf0e10cSrcweir break;
2198cdf0e10cSrcweir case 0x0030:
2199cdf0e10cSrcweir dumpByteStringWithLength( "lib-id-extended" );
2200cdf0e10cSrcweir dumpUnused( 6 );
2201cdf0e10cSrcweir dumpGuid( "original-typelib" );
2202cdf0e10cSrcweir dumpDec< sal_uInt32 >( "cookie" );
2203cdf0e10cSrcweir break;
2204cdf0e10cSrcweir case 0x0031:
2205cdf0e10cSrcweir mnCurrOffset = dumpHex< sal_Int32 >( "stream-offset", "CONV-DEC" );
2206cdf0e10cSrcweir break;
2207cdf0e10cSrcweir case 0x0032:
2208cdf0e10cSrcweir dumpUniString( "stream-name" );
2209cdf0e10cSrcweir break;
2210cdf0e10cSrcweir case 0x0033:
2211cdf0e10cSrcweir dumpByteString( "lib-id-original" );
2212cdf0e10cSrcweir break;
2213cdf0e10cSrcweir case 0x003C:
2214cdf0e10cSrcweir dumpUniString( "constants" );
2215cdf0e10cSrcweir break;
2216cdf0e10cSrcweir case 0x003D:
2217cdf0e10cSrcweir dumpByteString( "helpfile-path" );
2218cdf0e10cSrcweir break;
2219cdf0e10cSrcweir case 0x003E:
2220cdf0e10cSrcweir dumpUniString( "name" );
2221cdf0e10cSrcweir break;
2222cdf0e10cSrcweir case 0x0040:
2223cdf0e10cSrcweir dumpUniString( "description" );
2224cdf0e10cSrcweir break;
2225cdf0e10cSrcweir case 0x0047:
2226cdf0e10cSrcweir dumpUniString( "name" );
2227cdf0e10cSrcweir break;
2228cdf0e10cSrcweir case 0x0048:
2229cdf0e10cSrcweir dumpUniString( "description" );
2230cdf0e10cSrcweir break;
2231cdf0e10cSrcweir }
2232cdf0e10cSrcweir }
2233cdf0e10cSrcweir
dumpByteString(const String & rName)2234cdf0e10cSrcweir OUString VbaDirStreamObject::dumpByteString( const String& rName )
2235cdf0e10cSrcweir {
2236cdf0e10cSrcweir return dumpCharArray( rName, static_cast< sal_Int32 >( getRecSize() ), mrVbaData.meTextEnc );
2237cdf0e10cSrcweir }
2238cdf0e10cSrcweir
dumpUniString(const String & rName)2239cdf0e10cSrcweir OUString VbaDirStreamObject::dumpUniString( const String& rName )
2240cdf0e10cSrcweir {
2241cdf0e10cSrcweir return dumpUnicodeArray( rName, static_cast< sal_Int32 >( getRecSize() / 2 ) );
2242cdf0e10cSrcweir }
2243cdf0e10cSrcweir
dumpByteStringWithLength(const String & rName)2244cdf0e10cSrcweir OUString VbaDirStreamObject::dumpByteStringWithLength( const String& rName )
2245cdf0e10cSrcweir {
2246cdf0e10cSrcweir return dumpCharArray( rName, mxStrm->readInt32(), mrVbaData.meTextEnc );
2247cdf0e10cSrcweir }
2248cdf0e10cSrcweir
2249cdf0e10cSrcweir // ============================================================================
2250cdf0e10cSrcweir
VbaModuleStreamObject(const ObjectBase & rParent,const BinaryInputStreamRef & rxStrm,const OUString & rSysFileName,VbaSharedData & rVbaData,sal_Int32 nStrmOffset)2251cdf0e10cSrcweir VbaModuleStreamObject::VbaModuleStreamObject(
2252cdf0e10cSrcweir const ObjectBase& rParent, const BinaryInputStreamRef& rxStrm,
2253cdf0e10cSrcweir const OUString& rSysFileName, VbaSharedData& rVbaData, sal_Int32 nStrmOffset ) :
2254cdf0e10cSrcweir mrVbaData( rVbaData ),
2255cdf0e10cSrcweir mnStrmOffset( nStrmOffset )
2256cdf0e10cSrcweir {
2257cdf0e10cSrcweir InputObjectBase::construct( rParent, rxStrm, rSysFileName );
2258cdf0e10cSrcweir }
2259cdf0e10cSrcweir
implDump()2260cdf0e10cSrcweir void VbaModuleStreamObject::implDump()
2261cdf0e10cSrcweir {
2262cdf0e10cSrcweir dumpBinary( "perf-cache", mnStrmOffset );
2263cdf0e10cSrcweir mxOut->emptyLine();
2264cdf0e10cSrcweir writeEmptyItem( "source-code" );
2265cdf0e10cSrcweir IndentGuard aIndGuard( mxOut );
2266cdf0e10cSrcweir BinaryInputStreamRef xVbaStrm( new ::oox::ole::VbaInputStream( *mxStrm ) );
2267cdf0e10cSrcweir TextLineStreamObject( *this, xVbaStrm, mrVbaData.meTextEnc ).dump();
2268cdf0e10cSrcweir }
2269cdf0e10cSrcweir
2270cdf0e10cSrcweir // ============================================================================
2271cdf0e10cSrcweir
VbaStorageObject(const ObjectBase & rParent,const StorageRef & rxStrg,const OUString & rSysPath,VbaSharedData & rVbaData)2272cdf0e10cSrcweir VbaStorageObject::VbaStorageObject( const ObjectBase& rParent, const StorageRef& rxStrg, const OUString& rSysPath, VbaSharedData& rVbaData ) :
2273cdf0e10cSrcweir OleStorageObject( rParent, rxStrg, rSysPath ),
2274cdf0e10cSrcweir mrVbaData( rVbaData )
2275cdf0e10cSrcweir {
2276cdf0e10cSrcweir addPreferredStream( "dir" );
2277cdf0e10cSrcweir }
2278cdf0e10cSrcweir
implDumpStream(const Reference<XInputStream> & rxStrm,const OUString & rStrgPath,const OUString & rStrmName,const OUString & rSysFileName)2279cdf0e10cSrcweir void VbaStorageObject::implDumpStream( const Reference< XInputStream >& rxStrm, const OUString& rStrgPath, const OUString& rStrmName, const OUString& rSysFileName )
2280cdf0e10cSrcweir {
2281cdf0e10cSrcweir if( (rStrgPath.getLength() == 0) && rStrmName.equalsAscii( "dir" ) )
2282cdf0e10cSrcweir VbaDirStreamObject( *this, rxStrm, rSysFileName, mrVbaData ).dump();
2283cdf0e10cSrcweir else if( mrVbaData.isModuleStream( rStrmName ) )
2284cdf0e10cSrcweir VbaModuleStreamObject( *this, rxStrm, rSysFileName, mrVbaData, mrVbaData.getStreamOffset( rStrmName ) ).dump();
2285cdf0e10cSrcweir else
2286cdf0e10cSrcweir OleStorageObject::implDumpStream( rxStrm, rStrgPath, rStrmName, rSysFileName );
2287cdf0e10cSrcweir }
2288cdf0e10cSrcweir
2289cdf0e10cSrcweir // ============================================================================
2290cdf0e10cSrcweir
VbaFormStorageObject(const ObjectBase & rParent,const StorageRef & rxStrg,const OUString & rSysPath,VbaSharedData & rVbaData)2291cdf0e10cSrcweir VbaFormStorageObject::VbaFormStorageObject( const ObjectBase& rParent, const StorageRef& rxStrg, const OUString& rSysPath, VbaSharedData& rVbaData ) :
2292cdf0e10cSrcweir VbaContainerStorageObject( rParent, rxStrg, rSysPath ),
2293cdf0e10cSrcweir mrVbaData( rVbaData )
2294cdf0e10cSrcweir {
2295cdf0e10cSrcweir }
2296cdf0e10cSrcweir
implDumpStream(const Reference<XInputStream> & rxStrm,const OUString & rStrgPath,const OUString & rStrmName,const OUString & rSysFileName)2297cdf0e10cSrcweir void VbaFormStorageObject::implDumpStream( const Reference< XInputStream >& rxStrm, const OUString& rStrgPath, const OUString& rStrmName, const OUString& rSysFileName )
2298cdf0e10cSrcweir {
2299cdf0e10cSrcweir if( rStrmName.equalsAscii( "\003VBFrame" ) )
2300cdf0e10cSrcweir TextLineStreamObject( *this, rxStrm, mrVbaData.meTextEnc, rSysFileName ).dump();
2301cdf0e10cSrcweir else
2302cdf0e10cSrcweir VbaContainerStorageObject::implDumpStream( rxStrm, rStrgPath, rStrmName, rSysFileName );
2303cdf0e10cSrcweir }
2304cdf0e10cSrcweir
2305cdf0e10cSrcweir // ============================================================================
2306cdf0e10cSrcweir
VbaProjectStorageObject(const ObjectBase & rParent,const StorageRef & rxStrg,const OUString & rSysPath)2307cdf0e10cSrcweir VbaProjectStorageObject::VbaProjectStorageObject( const ObjectBase& rParent, const StorageRef& rxStrg, const OUString& rSysPath ) :
2308cdf0e10cSrcweir OleStorageObject( rParent, rxStrg, rSysPath )
2309cdf0e10cSrcweir {
2310cdf0e10cSrcweir addPreferredStorage( "VBA" );
2311cdf0e10cSrcweir }
2312cdf0e10cSrcweir
implDumpStream(const Reference<XInputStream> & rxStrm,const OUString & rStrgPath,const OUString & rStrmName,const OUString & rSysFileName)2313cdf0e10cSrcweir void VbaProjectStorageObject::implDumpStream( const Reference< XInputStream >& rxStrm, const OUString& rStrgPath, const OUString& rStrmName, const OUString& rSysFileName )
2314cdf0e10cSrcweir {
2315cdf0e10cSrcweir if( (rStrgPath.getLength() == 0) && rStrmName.equalsAscii( "PROJECT" ) )
2316cdf0e10cSrcweir TextLineStreamObject( *this, rxStrm, maVbaData.meTextEnc, rSysFileName ).dump();
2317cdf0e10cSrcweir else
2318cdf0e10cSrcweir OleStorageObject::implDumpStream( rxStrm, rStrgPath, rStrmName, rSysFileName );
2319cdf0e10cSrcweir }
2320cdf0e10cSrcweir
implDumpStorage(const StorageRef & rxStrg,const OUString & rStrgPath,const OUString & rSysPath)2321cdf0e10cSrcweir void VbaProjectStorageObject::implDumpStorage( const StorageRef& rxStrg, const OUString& rStrgPath, const OUString& rSysPath )
2322cdf0e10cSrcweir {
2323cdf0e10cSrcweir if( rStrgPath.equalsAscii( "VBA" ) )
2324cdf0e10cSrcweir VbaStorageObject( *this, rxStrg, rSysPath, maVbaData ).dump();
2325cdf0e10cSrcweir else
2326cdf0e10cSrcweir VbaFormStorageObject( *this, rxStrg, rSysPath, maVbaData ).dump();
2327cdf0e10cSrcweir }
2328cdf0e10cSrcweir
2329cdf0e10cSrcweir // ============================================================================
2330cdf0e10cSrcweir // ============================================================================
2331cdf0e10cSrcweir
ActiveXStorageObject(const ObjectBase & rParent,const StorageRef & rxStrg,const OUString & rSysPath)2332cdf0e10cSrcweir ActiveXStorageObject::ActiveXStorageObject( const ObjectBase& rParent, const StorageRef& rxStrg, const OUString& rSysPath ) :
2333cdf0e10cSrcweir VbaContainerStorageObject( rParent, rxStrg, rSysPath )
2334cdf0e10cSrcweir {
2335cdf0e10cSrcweir }
2336cdf0e10cSrcweir
implDumpBaseStream(const BinaryInputStreamRef & rxStrm,const OUString & rSysFileName)2337cdf0e10cSrcweir void ActiveXStorageObject::implDumpBaseStream( const BinaryInputStreamRef& rxStrm, const OUString& rSysFileName )
2338cdf0e10cSrcweir {
2339cdf0e10cSrcweir FormControlStreamObject( *this, rxStrm, rSysFileName ).dump();
2340cdf0e10cSrcweir }
2341cdf0e10cSrcweir
2342cdf0e10cSrcweir // ============================================================================
2343cdf0e10cSrcweir // ============================================================================
2344cdf0e10cSrcweir
2345cdf0e10cSrcweir } // namespace dump
2346cdf0e10cSrcweir } // namespace oox
2347cdf0e10cSrcweir
2348cdf0e10cSrcweir #endif
2349