summaryrefslogtreecommitdiff
path: root/sd/source/filter/ppt/propread.hxx
blob: 9ce6b9eb33f4d75fe743ebc7d26490cb25ffdc7a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*************************************************************************
 *
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 * 
 * Copyright 2000, 2010 Oracle and/or its affiliates.
 *
 * OpenOffice.org - a multi-platform office productivity suite
 *
 * This file is part of OpenOffice.org.
 *
 * OpenOffice.org is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License version 3
 * only, as published by the Free Software Foundation.
 *
 * OpenOffice.org is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License version 3 for more details
 * (a copy is included in the LICENSE file that accompanied this code).
 *
 * You should have received a copy of the GNU Lesser General Public License
 * version 3 along with OpenOffice.org.  If not, see
 * <http://www.openoffice.org/license.html>
 * for a copy of the LGPLv3 License.
 *
 ************************************************************************/

#ifndef _PROPREAD_HXX_
#define _PROPREAD_HXX_

#include <tools/solar.h>
#include <sot/storage.hxx>
#include <tools/gen.hxx>
#include <tools/list.hxx>
#include <tools/stream.hxx>
#include <tools/datetime.hxx>

#include <tools/string.hxx>

// SummaryInformation
#define PID_TITLE				0x02
#define PID_SUBJECT 			0x03
#define PID_AUTHOR				0x04
#define PID_KEYWORDS			0x05
#define PID_COMMENTS			0x06
#define PID_TEMPLATE			0x07
#define PID_LASTAUTHOR			0x08
#define PID_REVNUMBER			0x09
#define PID_EDITTIME			0x0a
#define PID_LASTPRINTED_DTM 	0x0b
#define PID_CREATE_DTM			0x0c
#define PID_LASTSAVED_DTM		0x0d

// DocumentSummaryInformation
#define PID_CATEGORY			0x02
#define PID_PRESFORMAT			0x03
#define PID_BYTECOUNT			0x04
#define PID_LINECOUNT			0x05
#define PID_PARACOUNT			0x06
#define PID_SLIDECOUNT			0x07
#define PID_NOTECOUNT			0x08
#define PID_HIDDENCOUNT 		0x09
#define PID_MMCLIPCOUNT 		0x0a
#define PID_SCALE				0x0b
#define PID_HEADINGPAIR 		0x0c
#define PID_DOCPARTS			0x0d
#define PID_MANAGER 			0x0e
#define PID_COMPANY 			0x0f
#define PID_LINKSDIRTY			0x10

#define VT_EMPTY			0
#define VT_NULL 			1
#define VT_I2				2
#define VT_I4				3
#define VT_R4				4
#define VT_R8				5
#define VT_CY				6
#define VT_DATE 			7
#define VT_BSTR 			8
#define VT_UI4				9
#define VT_ERROR			10
#define VT_BOOL 			11
#define VT_VARIANT			12
#define VT_DECIMAL			14
#define VT_I1				16
#define VT_UI1				17
#define VT_UI2				18
#define VT_I8				20
#define VT_UI8				21
#define VT_INT				22
#define VT_UINT 			23
#define VT_LPSTR			30
#define VT_LPWSTR			31
#define VT_FILETIME 		64
#define VT_BLOB 			65
#define VT_STREAM			66
#define VT_STORAGE			67
#define VT_STREAMED_OBJECT	68
#define VT_STORED_OBJECT	69
#define VT_BLOB_OBJECT		70
#define VT_CF				71
#define VT_CLSID			72
#define VT_VECTOR			0x1000
#define VT_ARRAY			0x2000
#define VT_BYREF			0x4000
#define VT_TYPEMASK 		0xFFF

// ------------------------------------------------------------------------

class PropItem : public SvMemoryStream
{
        sal_uInt16		mnTextEnc;

    public :
                        PropItem(){};
        void			Clear();

        void			SetTextEncoding( sal_uInt16 nTextEnc ){ mnTextEnc = nTextEnc; };
        sal_Bool		Read( String& rString, sal_uInt32 nType = VT_EMPTY, sal_Bool bDwordAlign = sal_True );
        PropItem&		operator=( PropItem& rPropItem );

    using SvStream::Read;
};

// ------------------------------------------------------------------------

class Dictionary : protected List
{
    friend class Section;

        void		AddProperty( UINT32 nId, const String& rString );

    public :
                    Dictionary(){};
                    ~Dictionary();
        Dictionary& operator=( Dictionary& rDictionary );
        UINT32		GetProperty( const String& rPropName );
};

// ------------------------------------------------------------------------

class Section : private List
{
        sal_uInt16				mnTextEnc;

    protected:

        BYTE					aFMTID[ 16 ];

        void					AddProperty( sal_uInt32 nId, const sal_uInt8* pBuf, sal_uInt32 nBufSize );

    public:
                                Section( const sal_uInt8* pFMTID );
                                Section( Section& rSection );
                                ~Section();

        Section&				operator=( Section& rSection );
        sal_Bool				GetProperty( sal_uInt32 nId, PropItem& rPropItem );
        sal_Bool				GetDictionary( Dictionary& rDict );
        const sal_uInt8* 		GetFMTID() const { return aFMTID; };
        void					Read( SvStorageStream* pStrm );
};

// ------------------------------------------------------------------------

class PropRead : private List
{
        sal_Bool				mbStatus;
        SvStorageStream*		mpSvStream;

        sal_uInt16				mnByteOrder;
        sal_uInt16				mnFormat;
        sal_uInt16				mnVersionLo;
        sal_uInt16				mnVersionHi;
        sal_uInt8				mApplicationCLSID[ 16 ];

        void					AddSection( Section& rSection );

    public:
                                PropRead( SvStorage& rSvStorage, const String& rName );
                                ~PropRead();

        PropRead&				operator=( PropRead& rPropRead );
        const Section*			GetSection( const BYTE* pFMTID );
        sal_Bool				IsValid() const { return mbStatus; };
        void					Read();
};


#endif

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */