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