xref: /aoo41x/main/sfx2/source/doc/oleprops.hxx (revision 67e470da)
1*353d8f4dSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*353d8f4dSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*353d8f4dSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*353d8f4dSAndrew Rist  * distributed with this work for additional information
6*353d8f4dSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*353d8f4dSAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*353d8f4dSAndrew Rist  * "License"); you may not use this file except in compliance
9*353d8f4dSAndrew Rist  * with the License.  You may obtain a copy of the License at
10*353d8f4dSAndrew Rist  *
11*353d8f4dSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*353d8f4dSAndrew Rist  *
13*353d8f4dSAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*353d8f4dSAndrew Rist  * software distributed under the License is distributed on an
15*353d8f4dSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*353d8f4dSAndrew Rist  * KIND, either express or implied.  See the License for the
17*353d8f4dSAndrew Rist  * specific language governing permissions and limitations
18*353d8f4dSAndrew Rist  * under the License.
19*353d8f4dSAndrew Rist  *
20*353d8f4dSAndrew Rist  *************************************************************/
21*353d8f4dSAndrew Rist 
22*353d8f4dSAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir #include <map>
25cdf0e10cSrcweir #include <boost/shared_ptr.hpp>
26cdf0e10cSrcweir #include <sot/storage.hxx>
27cdf0e10cSrcweir #include <vcl/bitmapex.hxx>
28cdf0e10cSrcweir 
29cdf0e10cSrcweir #include <com/sun/star/util/DateTime.hpp>
30cdf0e10cSrcweir 
31cdf0e10cSrcweir 
32cdf0e10cSrcweir // ============================================================================
33cdf0e10cSrcweir 
34cdf0e10cSrcweir //namespace {
35cdf0e10cSrcweir 
36cdf0e10cSrcweir // ============================================================================
37cdf0e10cSrcweir // property type IDs
38cdf0e10cSrcweir const sal_Int32 PROPTYPE_INT16          = 2;
39cdf0e10cSrcweir const sal_Int32 PROPTYPE_INT32          = 3;
40cdf0e10cSrcweir const sal_Int32 PROPTYPE_FLOAT          = 4;
41cdf0e10cSrcweir const sal_Int32 PROPTYPE_DOUBLE         = 5;
42cdf0e10cSrcweir const sal_Int32 PROPTYPE_DATE           = 7;
43cdf0e10cSrcweir const sal_Int32 PROPTYPE_STRING         = 8;
44cdf0e10cSrcweir const sal_Int32 PROPTYPE_STATUS         = 10;
45cdf0e10cSrcweir const sal_Int32 PROPTYPE_BOOL           = 11;
46cdf0e10cSrcweir const sal_Int32 PROPTYPE_VARIANT        = 12;
47cdf0e10cSrcweir const sal_Int32 PROPTYPE_INT8           = 16;
48cdf0e10cSrcweir const sal_Int32 PROPTYPE_UINT8          = 17;
49cdf0e10cSrcweir const sal_Int32 PROPTYPE_UINT16         = 18;
50cdf0e10cSrcweir const sal_Int32 PROPTYPE_UINT32         = 19;
51cdf0e10cSrcweir const sal_Int32 PROPTYPE_INT64          = 20;
52cdf0e10cSrcweir const sal_Int32 PROPTYPE_UINT64         = 21;
53cdf0e10cSrcweir const sal_Int32 PROPTYPE_STRING8        = 30;
54cdf0e10cSrcweir const sal_Int32 PROPTYPE_STRING16       = 31;
55cdf0e10cSrcweir const sal_Int32 PROPTYPE_FILETIME       = 64;
56cdf0e10cSrcweir const sal_Int32 PROPTYPE_BLOB           = 65;
57cdf0e10cSrcweir const sal_Int32 PROPTYPE_CLIPFMT        = 71;
58cdf0e10cSrcweir 
59cdf0e10cSrcweir // static property IDs
60cdf0e10cSrcweir const sal_Int32 PROPID_DICTIONARY       = 0;
61cdf0e10cSrcweir const sal_Int32 PROPID_CODEPAGE         = 1;
62cdf0e10cSrcweir const sal_Int32 PROPID_FIRSTCUSTOM      = 2;
63cdf0e10cSrcweir 
64cdf0e10cSrcweir // property IDs for GlobalDocPropertySet
65cdf0e10cSrcweir const sal_Int32 PROPID_TITLE            = 2;
66cdf0e10cSrcweir const sal_Int32 PROPID_SUBJECT          = 3;
67cdf0e10cSrcweir const sal_Int32 PROPID_AUTHOR           = 4;
68cdf0e10cSrcweir const sal_Int32 PROPID_KEYWORDS         = 5;
69cdf0e10cSrcweir const sal_Int32 PROPID_COMMENTS         = 6;
70cdf0e10cSrcweir const sal_Int32 PROPID_TEMPLATE         = 7;
71cdf0e10cSrcweir const sal_Int32 PROPID_LASTAUTHOR       = 8;
72cdf0e10cSrcweir const sal_Int32 PROPID_REVNUMBER        = 9;
73cdf0e10cSrcweir const sal_Int32 PROPID_EDITTIME         = 10;
74cdf0e10cSrcweir const sal_Int32 PROPID_LASTPRINTED      = 11;
75cdf0e10cSrcweir const sal_Int32 PROPID_CREATED          = 12;
76cdf0e10cSrcweir const sal_Int32 PROPID_LASTSAVED        = 13;
77cdf0e10cSrcweir const sal_Int32 PROPID_THUMBNAIL        = 17;
78cdf0e10cSrcweir 
79cdf0e10cSrcweir // predefined codepages
80cdf0e10cSrcweir const sal_uInt16 CODEPAGE_UNKNOWN       = 0;
81cdf0e10cSrcweir const sal_uInt16 CODEPAGE_UNICODE       = 1200;
82cdf0e10cSrcweir const sal_uInt16 CODEPAGE_UTF8          = 65001;
83cdf0e10cSrcweir 
84cdf0e10cSrcweir // predefined clipboard format IDs
85cdf0e10cSrcweir const sal_Int32 CLIPFMT_WIN             = -1;
86cdf0e10cSrcweir 
87cdf0e10cSrcweir // predefined clipboard data format IDs
88cdf0e10cSrcweir const sal_Int32 CLIPDATAFMT_DIB         = 8;
89cdf0e10cSrcweir 
90cdf0e10cSrcweir // ============================================================================
91cdf0e10cSrcweir // ============================================================================
92cdf0e10cSrcweir 
93cdf0e10cSrcweir /** Helper for classes that need text encoding settings.
94cdf0e10cSrcweir 
95cdf0e10cSrcweir     Classes derived from this class will include functions to store and use
96cdf0e10cSrcweir     text encoding settings and to convert Windows codepage constants.
97cdf0e10cSrcweir  */
98cdf0e10cSrcweir class SfxOleTextEncoding
99cdf0e10cSrcweir {
100cdf0e10cSrcweir public:
SfxOleTextEncoding()101cdf0e10cSrcweir     inline explicit     SfxOleTextEncoding() :
102cdf0e10cSrcweir                             mxTextEnc( new rtl_TextEncoding( gsl_getSystemTextEncoding() ) ) {}
SfxOleTextEncoding(rtl_TextEncoding eTextEnc)103cdf0e10cSrcweir     inline explicit     SfxOleTextEncoding( rtl_TextEncoding eTextEnc ) :
104cdf0e10cSrcweir                             mxTextEnc( new rtl_TextEncoding( eTextEnc ) ) {}
SfxOleTextEncoding(sal_Int16 nCodePage)105cdf0e10cSrcweir     inline explicit     SfxOleTextEncoding( sal_Int16 nCodePage ) :
106cdf0e10cSrcweir                             mxTextEnc( new rtl_TextEncoding ) { SetCodePage( nCodePage ); }
107cdf0e10cSrcweir 
108cdf0e10cSrcweir     /** Returns the current text encoding identifier. */
GetTextEncoding() const109cdf0e10cSrcweir     inline rtl_TextEncoding GetTextEncoding() const { return *mxTextEnc; }
110cdf0e10cSrcweir     /** Sets the passed text encoding. */
SetTextEncoding(rtl_TextEncoding eTextEnc)111cdf0e10cSrcweir     inline void         SetTextEncoding( rtl_TextEncoding eTextEnc ) { *mxTextEnc = eTextEnc; }
112cdf0e10cSrcweir 
113cdf0e10cSrcweir     /** Returns true, if this object contains Unicode text encoding. */
IsUnicode() const114cdf0e10cSrcweir     inline bool         IsUnicode() const { return GetTextEncoding() == RTL_TEXTENCODING_UCS2; }
115cdf0e10cSrcweir     /** Sets Unicode text encoding to this object. */
SetUnicode()116cdf0e10cSrcweir     inline void         SetUnicode() { SetTextEncoding( RTL_TEXTENCODING_UCS2 ); }
117cdf0e10cSrcweir 
118cdf0e10cSrcweir     /** Converts the current settings to a Windows codepage identifier. */
119cdf0e10cSrcweir     sal_uInt16          GetCodePage() const;
120cdf0e10cSrcweir     /** Sets the current text encoding from a Windows codepage identifier. */
121cdf0e10cSrcweir     void                SetCodePage( sal_uInt16 nCodePage );
122cdf0e10cSrcweir 
123cdf0e10cSrcweir private:
124cdf0e10cSrcweir     typedef ::boost::shared_ptr< rtl_TextEncoding > TextEncRef;
125cdf0e10cSrcweir     TextEncRef          mxTextEnc;
126cdf0e10cSrcweir };
127cdf0e10cSrcweir 
128cdf0e10cSrcweir // ============================================================================
129cdf0e10cSrcweir 
130cdf0e10cSrcweir /** Helper for classes that need to load or save string values.
131cdf0e10cSrcweir 
132cdf0e10cSrcweir     Classes derived from this class contain functions to load and save string
133cdf0e10cSrcweir     values with the text encoding passed in the constructor.
134cdf0e10cSrcweir  */
135cdf0e10cSrcweir class SfxOleStringHelper : public SfxOleTextEncoding
136cdf0e10cSrcweir {
137cdf0e10cSrcweir public:
138cdf0e10cSrcweir     /** Creates a string helper object depending on an external text encoding. */
SfxOleStringHelper(const SfxOleTextEncoding & rTextEnc)139cdf0e10cSrcweir     inline explicit     SfxOleStringHelper( const SfxOleTextEncoding& rTextEnc ) :
140cdf0e10cSrcweir                             SfxOleTextEncoding( rTextEnc ) {}
141cdf0e10cSrcweir     /** Creates a string helper object with own text encoding. */
SfxOleStringHelper(rtl_TextEncoding eTextEnc)142cdf0e10cSrcweir     inline explicit     SfxOleStringHelper( rtl_TextEncoding eTextEnc ) :
143cdf0e10cSrcweir                             SfxOleTextEncoding( eTextEnc ) {}
144cdf0e10cSrcweir 
145cdf0e10cSrcweir     /** Loads a string from the passed stream with current encoding (maybe Unicode). */
146cdf0e10cSrcweir     String              LoadString8( SvStream& rStrm ) const;
147cdf0e10cSrcweir     /** Saves a string to the passed stream with current encoding (maybe Unicode). */
148cdf0e10cSrcweir     void                SaveString8( SvStream& rStrm, const String& rValue ) const;
149cdf0e10cSrcweir 
150cdf0e10cSrcweir     /** Loads a Unicode string from the passed stream, ignores own encoding. */
151cdf0e10cSrcweir     String              LoadString16( SvStream& rStrm ) const;
152cdf0e10cSrcweir     /** Saves a Unicode string to the passed stream, ignores own encoding. */
153cdf0e10cSrcweir     void                SaveString16( SvStream& rStrm, const String& rValue ) const;
154cdf0e10cSrcweir 
155cdf0e10cSrcweir private:
156cdf0e10cSrcweir     String              ImplLoadString8( SvStream& rStrm ) const;
157cdf0e10cSrcweir     String              ImplLoadString16( SvStream& rStrm ) const;
158cdf0e10cSrcweir     void                ImplSaveString8( SvStream& rStrm, const String& rValue ) const;
159cdf0e10cSrcweir     void                ImplSaveString16( SvStream& rStrm, const String& rValue ) const;
160cdf0e10cSrcweir };
161cdf0e10cSrcweir 
162cdf0e10cSrcweir 
163cdf0e10cSrcweir // ============================================================================
164cdf0e10cSrcweir // ============================================================================
165cdf0e10cSrcweir 
166cdf0e10cSrcweir /** Base class for all classes related to OLE property sets.
167cdf0e10cSrcweir 
168cdf0e10cSrcweir     Derived calsses have to implement the pure virtual functions ImplLoad() and
169cdf0e10cSrcweir     ImplSave().
170cdf0e10cSrcweir  */
171cdf0e10cSrcweir class SfxOleObjectBase
172cdf0e10cSrcweir {
173cdf0e10cSrcweir public:
SfxOleObjectBase()174cdf0e10cSrcweir     inline explicit     SfxOleObjectBase() : mnErrCode( ERRCODE_NONE ) {}
175cdf0e10cSrcweir     virtual             ~SfxOleObjectBase();
176cdf0e10cSrcweir 
177cdf0e10cSrcweir     /** Returns true, if an error code (other than ERRCODE_NONE) is set. */
HasError() const178cdf0e10cSrcweir     inline bool         HasError() const { return mnErrCode != ERRCODE_NONE; }
179cdf0e10cSrcweir     /** Returns the current error code. */
GetError() const180cdf0e10cSrcweir     inline ErrCode      GetError() const { return mnErrCode; }
181cdf0e10cSrcweir 
182cdf0e10cSrcweir     /** Loads this object from the passed stream. Calls virtual ImplLoad(). */
183cdf0e10cSrcweir     ErrCode             Load( SvStream& rStrm );
184cdf0e10cSrcweir     /** Saves this object to the passed stream. Calls virtual ImplSave(). */
185cdf0e10cSrcweir     ErrCode             Save( SvStream& rStrm );
186cdf0e10cSrcweir 
187cdf0e10cSrcweir protected:
188cdf0e10cSrcweir     /** Sets the passed error code. Will be returned by Load() and Save() functions.
189cdf0e10cSrcweir         Always the first error code is stored. Multiple calls have no effect. */
SetError(ErrCode nErrCode)190cdf0e10cSrcweir     inline void         SetError( ErrCode nErrCode ) { if( !HasError() ) mnErrCode = nErrCode; }
191cdf0e10cSrcweir     /** Loads the passed object from the stream. Sets returned error code as own error. */
192cdf0e10cSrcweir     void                LoadObject( SvStream& rStrm, SfxOleObjectBase& rObj );
193cdf0e10cSrcweir     /** Saves the passed object to the stream. Sets returned error code as own error. */
194cdf0e10cSrcweir     void                SaveObject( SvStream& rStrm, SfxOleObjectBase& rObj );
195cdf0e10cSrcweir 
196cdf0e10cSrcweir private:
197cdf0e10cSrcweir     /** Derived classes implement loading the object from the passed steam. */
198cdf0e10cSrcweir     virtual void        ImplLoad( SvStream& rStrm ) = 0;
199cdf0e10cSrcweir     /** Derived classes implement saving the object to the passed steam. */
200cdf0e10cSrcweir     virtual void        ImplSave( SvStream& rStrm ) = 0;
201cdf0e10cSrcweir 
202cdf0e10cSrcweir private:
203cdf0e10cSrcweir     ErrCode             mnErrCode;      /// Current error code.
204cdf0e10cSrcweir };
205cdf0e10cSrcweir 
206cdf0e10cSrcweir // ============================================================================
207cdf0e10cSrcweir // ============================================================================
208cdf0e10cSrcweir 
209cdf0e10cSrcweir /** Base class for all OLE property objects. */
210cdf0e10cSrcweir class SfxOlePropertyBase : public SfxOleObjectBase
211cdf0e10cSrcweir {
212cdf0e10cSrcweir public:
SfxOlePropertyBase(sal_Int32 nPropId,sal_Int32 nPropType)213cdf0e10cSrcweir     inline explicit     SfxOlePropertyBase( sal_Int32 nPropId, sal_Int32 nPropType ) :
214cdf0e10cSrcweir                             mnPropId( nPropId ), mnPropType( nPropType ) {}
215cdf0e10cSrcweir 
GetPropId() const216cdf0e10cSrcweir     inline sal_Int32    GetPropId() const { return mnPropId; }
GetPropType() const217cdf0e10cSrcweir     inline sal_Int32    GetPropType() const { return mnPropType; }
218cdf0e10cSrcweir 
219cdf0e10cSrcweir protected:
SetPropId(sal_Int32 nPropId)220cdf0e10cSrcweir     inline void         SetPropId( sal_Int32 nPropId ) { mnPropId = nPropId; }
SetPropType(sal_Int32 nPropType)221cdf0e10cSrcweir     inline void         SetPropType( sal_Int32 nPropType ) { mnPropType = nPropType; }
222cdf0e10cSrcweir 
223cdf0e10cSrcweir private:
224cdf0e10cSrcweir     sal_Int32           mnPropId;
225cdf0e10cSrcweir     sal_Int32           mnPropType;
226cdf0e10cSrcweir };
227cdf0e10cSrcweir 
228cdf0e10cSrcweir typedef ::boost::shared_ptr< SfxOlePropertyBase > SfxOlePropertyRef;
229cdf0e10cSrcweir 
230cdf0e10cSrcweir // ============================================================================
231cdf0e10cSrcweir /** Property representing the codepage used to encode bytestrings in the entire property set. */
232cdf0e10cSrcweir class SfxOleCodePageProperty : public SfxOlePropertyBase, public SfxOleTextEncoding
233cdf0e10cSrcweir {
234cdf0e10cSrcweir public:
235cdf0e10cSrcweir     explicit            SfxOleCodePageProperty();
236cdf0e10cSrcweir 
237cdf0e10cSrcweir private:
238cdf0e10cSrcweir     virtual void        ImplLoad( SvStream& rStrm );
239cdf0e10cSrcweir     virtual void        ImplSave( SvStream& rStrm );
240cdf0e10cSrcweir };
241cdf0e10cSrcweir 
242cdf0e10cSrcweir // ============================================================================
243cdf0e10cSrcweir // ============================================================================
244cdf0e10cSrcweir 
245cdf0e10cSrcweir /** Property containing custom names for other properties in the property set. */
246cdf0e10cSrcweir class SfxOleDictionaryProperty : public SfxOlePropertyBase, public SfxOleStringHelper
247cdf0e10cSrcweir {
248cdf0e10cSrcweir public:
249cdf0e10cSrcweir     explicit            SfxOleDictionaryProperty( const SfxOleTextEncoding& rTextEnc );
250cdf0e10cSrcweir 
251cdf0e10cSrcweir     /** Returns true, if the property contains at least one custom property name. */
HasPropertyNames() const252cdf0e10cSrcweir     inline bool         HasPropertyNames() const { return !maPropNameMap.empty(); }
253cdf0e10cSrcweir     /** Prepares the property for loading. Does not affect contained names for its own. */
SetNameCount(sal_Int32 nNameCount)254cdf0e10cSrcweir     inline void         SetNameCount( sal_Int32 nNameCount ) { SetPropType( nNameCount ); }
255cdf0e10cSrcweir 
256cdf0e10cSrcweir     /** Returns the custom name for the passed property ID, or an empty string, if name not found. */
257cdf0e10cSrcweir     const String&       GetPropertyName( sal_Int32 nPropId ) const;
258cdf0e10cSrcweir     /** Sets a custom name for the passed property ID. */
259cdf0e10cSrcweir     void                SetPropertyName( sal_Int32 nPropId, const String& rPropName );
260cdf0e10cSrcweir 
261cdf0e10cSrcweir private:
262cdf0e10cSrcweir     virtual void        ImplLoad( SvStream& rStrm );
263cdf0e10cSrcweir     virtual void        ImplSave( SvStream& rStrm );
264cdf0e10cSrcweir 
265cdf0e10cSrcweir private:
266cdf0e10cSrcweir     typedef ::std::map< sal_Int32, String > SfxOlePropNameMap;
267cdf0e10cSrcweir     SfxOlePropNameMap   maPropNameMap;
268cdf0e10cSrcweir };
269cdf0e10cSrcweir 
270cdf0e10cSrcweir // ============================================================================
271cdf0e10cSrcweir // ============================================================================
272cdf0e10cSrcweir 
273cdf0e10cSrcweir /** A section in a property set. Contains properties with unique identifiers. */
274cdf0e10cSrcweir class SfxOleSection : public SfxOleObjectBase
275cdf0e10cSrcweir {
276cdf0e10cSrcweir private:
277cdf0e10cSrcweir     typedef ::std::map< sal_Int32, SfxOlePropertyRef > SfxOlePropMap;
278cdf0e10cSrcweir 
279cdf0e10cSrcweir public:
280cdf0e10cSrcweir     explicit            SfxOleSection( bool bSupportsDict );
281cdf0e10cSrcweir 
282cdf0e10cSrcweir     /** Returns the property with the passed ID, or an empty reference, if nothing found. */
283cdf0e10cSrcweir     SfxOlePropertyRef   GetProperty( sal_Int32 nPropId ) const;
284cdf0e10cSrcweir     /** Returns the value of a signed int32 property with the passed ID in rnValue.
285cdf0e10cSrcweir         @return  true = Property found, rnValue is valid; false = Property not found. */
286cdf0e10cSrcweir     bool                GetInt32Value( sal_Int32& rnValue, sal_Int32 nPropId ) const;
287cdf0e10cSrcweir     /** Returns the value of a floating-point property with the passed ID in rfValue.
288cdf0e10cSrcweir         @return  true = Property found, rfValue is valid; false = Property not found. */
289cdf0e10cSrcweir     bool                GetDoubleValue( double& rfValue, sal_Int32 nPropId ) const;
290cdf0e10cSrcweir     /** Returns the value of a boolean property with the passed ID in rbValue.
291cdf0e10cSrcweir         @return  true = Property found, rbValue is valid; false = Property not found. */
292cdf0e10cSrcweir     bool                GetBoolValue( bool& rbValue, sal_Int32 nPropId ) const;
293cdf0e10cSrcweir     /** Returns the value of a string property with the passed ID in rValue.
294cdf0e10cSrcweir         @return  true = Property found, rValue is valid; false = Property not found. */
295cdf0e10cSrcweir     bool                GetStringValue( String& rValue, sal_Int32 nPropId ) const;
296cdf0e10cSrcweir     /** Returns the value of a time stamp property with the passed ID in rValue.
297cdf0e10cSrcweir         @return  true = Property found, rValue is valid; false = Property not found. */
298cdf0e10cSrcweir     bool                GetFileTimeValue( ::com::sun::star::util::DateTime& rValue, sal_Int32 nPropId ) const;
299cdf0e10cSrcweir 
300cdf0e10cSrcweir     /** Adds the passed property to the property set. Drops an existing old property. */
301cdf0e10cSrcweir     void                SetProperty( SfxOlePropertyRef xProp );
302cdf0e10cSrcweir     /** Inserts a signed int32 property with the passed value. */
303cdf0e10cSrcweir     void                SetInt32Value( sal_Int32 nPropId, sal_Int32 nValue );
304cdf0e10cSrcweir     /** Inserts a foating-point property with the passed value. */
305cdf0e10cSrcweir     void                SetDoubleValue( sal_Int32 nPropId, double fValue );
306cdf0e10cSrcweir     /** Inserts a boolean property with the passed value. */
307cdf0e10cSrcweir     void                SetBoolValue( sal_Int32 nPropId, bool bValue );
308cdf0e10cSrcweir     /** Inserts a string property with the passed value.
309cdf0e10cSrcweir         @return  true = Property inserted; false = String was empty, property not inserted. */
310cdf0e10cSrcweir     bool                SetStringValue( sal_Int32 nPropId, const String& rValue, bool bSkipEmpty = true );
311cdf0e10cSrcweir     /** Inserts a time stamp property with the passed value. */
312cdf0e10cSrcweir     void                SetFileTimeValue( sal_Int32 nPropId, const ::com::sun::star::util::DateTime& rValue );
313cdf0e10cSrcweir     /** Inserts a thumbnail property from the passed meta file. */
314cdf0e10cSrcweir     void                SetThumbnailValue( sal_Int32 nPropId,
315cdf0e10cSrcweir                             const ::com::sun::star::uno::Sequence<sal_uInt8> & i_rData);
316cdf0e10cSrcweir     /** Inserts a BLOB property with the passed data. */
317cdf0e10cSrcweir     void                SetBlobValue( sal_Int32 nPropId,
318cdf0e10cSrcweir                             const ::com::sun::star::uno::Sequence<sal_uInt8> & i_rData);
319cdf0e10cSrcweir 
320cdf0e10cSrcweir     /** Returns the value of the property with the passed ID in a UNO any. */
321cdf0e10cSrcweir     com::sun::star::uno::Any GetAnyValue( sal_Int32 nPropId ) const;
322cdf0e10cSrcweir     /** Inserts a property created from the passed any.
323cdf0e10cSrcweir         @return  true = Property converted and inserted; false = Property type not supported. */
324cdf0e10cSrcweir     bool                SetAnyValue( sal_Int32 nPropId, const com::sun::star::uno::Any& rValue );
325cdf0e10cSrcweir 
326cdf0e10cSrcweir     /** Returns the custom name for the passed property ID, or an empty string, if name not found. */
327cdf0e10cSrcweir     const String&       GetPropertyName( sal_Int32 nPropId ) const;
328cdf0e10cSrcweir     /** Sets a custom name for the passed property ID. */
329cdf0e10cSrcweir     void                SetPropertyName( sal_Int32 nPropId, const String& rPropName );
330cdf0e10cSrcweir 
331cdf0e10cSrcweir     /** Returns the identifiers of all existing properties in the passed vector. */
332cdf0e10cSrcweir     void                GetPropertyIds( ::std::vector< sal_Int32 >& rPropIds ) const;
333cdf0e10cSrcweir     /** Returns a property identifier not used in this section. */
334cdf0e10cSrcweir     sal_Int32           GetFreePropertyId() const;
335cdf0e10cSrcweir 
336cdf0e10cSrcweir private:
337cdf0e10cSrcweir     virtual void        ImplLoad( SvStream& rStrm );
338cdf0e10cSrcweir     virtual void        ImplSave( SvStream& rStrm );
339cdf0e10cSrcweir 
340cdf0e10cSrcweir     bool                SeekToPropertyPos( SvStream& rStrm, sal_uInt32 nPropPos ) const;
341cdf0e10cSrcweir     void                LoadProperty( SvStream& rStrm, sal_Int32 nPropId );
342cdf0e10cSrcweir     void                SaveProperty( SvStream& rStrm, SfxOlePropertyBase& rProp, sal_Size& rnPropPosPos );
343cdf0e10cSrcweir 
344cdf0e10cSrcweir private:
345cdf0e10cSrcweir     SfxOlePropMap       maPropMap;              /// All properties in this section, by identifier.
346cdf0e10cSrcweir     SfxOleCodePageProperty maCodePageProp;      /// The codepage property.
347cdf0e10cSrcweir     SfxOleDictionaryProperty maDictProp;        /// The dictionary property.
348cdf0e10cSrcweir     sal_Size            mnStartPos;             /// Start stream position of the section.
349cdf0e10cSrcweir     bool                mbSupportsDict;         /// true = section supports dictionary.
350cdf0e10cSrcweir };
351cdf0e10cSrcweir 
352cdf0e10cSrcweir typedef ::boost::shared_ptr< SfxOleSection > SfxOleSectionRef;
353cdf0e10cSrcweir 
354cdf0e10cSrcweir // ============================================================================
355cdf0e10cSrcweir // ============================================================================
356cdf0e10cSrcweir 
357cdf0e10cSrcweir /** Enumerates different section types in OLE property sets. */
358cdf0e10cSrcweir enum SfxOleSectionType
359cdf0e10cSrcweir {
360cdf0e10cSrcweir     SECTION_GLOBAL,         /// Globally defined properties.
361cdf0e10cSrcweir     SECTION_BUILTIN,        /// Properties built into MS Office.
362cdf0e10cSrcweir     SECTION_CUSTOM          /// Custom properties.
363cdf0e10cSrcweir };
364cdf0e10cSrcweir 
365cdf0e10cSrcweir // ============================================================================
366cdf0e10cSrcweir 
367cdf0e10cSrcweir /** Represents a complete property set, may consist of several property sections. */
368cdf0e10cSrcweir class SfxOlePropertySet : public SfxOleObjectBase
369cdf0e10cSrcweir {
370cdf0e10cSrcweir public:
SfxOlePropertySet()371cdf0e10cSrcweir     inline explicit     SfxOlePropertySet() {}
372cdf0e10cSrcweir 
373cdf0e10cSrcweir     /** Loads this object from the passed storage. */
374cdf0e10cSrcweir     ErrCode             LoadPropertySet( SotStorage* pStrg, const String& rStrmName );
375cdf0e10cSrcweir     /** Saves this object to the passed storage. */
376cdf0e10cSrcweir     ErrCode             SavePropertySet( SotStorage* pStrg, const String& rStrmName );
377cdf0e10cSrcweir 
378cdf0e10cSrcweir     /** Returns the specified section, or an empty reference, if nothing found. */
379cdf0e10cSrcweir     SfxOleSectionRef    GetSection( SfxOleSectionType eSection ) const;
380cdf0e10cSrcweir     /** Returns the specified section, or an empty reference, if nothing found. */
381cdf0e10cSrcweir     SfxOleSectionRef    GetSection( const SvGlobalName& rSectionGuid ) const;
382cdf0e10cSrcweir 
383cdf0e10cSrcweir     /** Creates and returns the specified section, or just returns it if it already exists. */
384cdf0e10cSrcweir     SfxOleSection&      AddSection( SfxOleSectionType eSection );
385cdf0e10cSrcweir     /** Creates and returns the specified section, or just returns it if it already exists. */
386cdf0e10cSrcweir     SfxOleSection&      AddSection( const SvGlobalName& rSectionGuid );
387cdf0e10cSrcweir 
388cdf0e10cSrcweir private:
389cdf0e10cSrcweir     virtual void        ImplLoad( SvStream& rStrm );
390cdf0e10cSrcweir     virtual void        ImplSave( SvStream& rStrm );
391cdf0e10cSrcweir 
392cdf0e10cSrcweir     /** Returns the GUID for the specified section. */
393cdf0e10cSrcweir     static const SvGlobalName& GetSectionGuid( SfxOleSectionType eSection );
394cdf0e10cSrcweir 
395cdf0e10cSrcweir private:
396cdf0e10cSrcweir     typedef ::std::map< SvGlobalName, SfxOleSectionRef > SfxOleSectionMap;
397cdf0e10cSrcweir     SfxOleSectionMap    maSectionMap;
398cdf0e10cSrcweir };
399cdf0e10cSrcweir 
400cdf0e10cSrcweir //};
401