1 /**************************************************************
2 *
3 * Licensed to the Apache Software Foundation (ASF) under one
4 * or more contributor license agreements. See the NOTICE file
5 * distributed with this work for additional information
6 * regarding copyright ownership. The ASF licenses this file
7 * to you under the Apache License, Version 2.0 (the
8 * "License"); you may not use this file except in compliance
9 * with the License. You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing,
14 * software distributed under the License is distributed on an
15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16 * KIND, either express or implied. See the License for the
17 * specific language governing permissions and limitations
18 * under the License.
19 *
20 *************************************************************/
21
22
23
24 //+-------------------------------------------------------------------------
25 //
26 // File: propspec.hxx
27 //
28 // Contents: C++ wrapper(s) for FULLPROPSPEC
29 //
30 //-------------------------------------------------------------------------
31 #pragma once
32 #if defined _MSC_VER
33 #pragma warning(push, 1)
34 #endif
35 #include <windows.h>
36 #include <ole2.h>
37 #include <ntquery.h>
38 #if defined _MSC_VER
39 #pragma warning(pop)
40 #endif
41 //+-------------------------------------------------------------------------
42 //
43 // Declare: CLSID_SummaryInforation, GUID
44 // CLSID_Storage, GUID
45 //
46 // Contents: Definitions of OpenOffice Document properties
47 //
48 //--------------------------------------------------------------------------
49
50 //extern GUID CLSID_Storage;
51 //
52 //extern GUID CLSID_SummaryInformation;
53 //const PID_TITLE = PIDSI_TITLE; // 2;
54 //const PID_SUBJECT = PIDSI_SUBJECT; // 3;
55 //const PID_AUTHOR = PIDSI_AUTHOR; // 4;
56 //const PID_KEYWORDS = PIDSI_KEYWORDS; // 5;
57 //const PID_COMMENTS = PIDSI_COMMENTS; //6;
58 //const PID_REVNUMBER = PIDSI_REVNUMBER; //9;
59 //const PID_WORDCOUNT = PIDSI_WORDCOUNT; //f;
60 //+-------------------------------------------------------------------------
61 //
62 // Class: CFullPropertySpec
63 //
64 // Purpose: Describes full (PropertySet\Property) name of a property.
65 //
66 //--------------------------------------------------------------------------
67
68 class CFullPropSpec
69 {
70 public:
71 CFullPropSpec();
72 CFullPropSpec( GUID const & guidPropSet, PROPID pidProperty );
73 CFullPropSpec( GUID const & guidPropSet, WCHAR const * wcsProperty );
74 // Validity check
75 inline BOOL IsValid() const;
76
77 // Copy constructors/assignment/clone
78 CFullPropSpec( CFullPropSpec const & Property );
79 CFullPropSpec & operator=( CFullPropSpec const & Property );
80 ~CFullPropSpec();
81 // Memory allocation
82 void * operator new( size_t size );
83 inline void * operator new( size_t size, void * p );
84 void operator delete( void * p );
85 inline FULLPROPSPEC * CastToStruct();
86 inline FULLPROPSPEC const * CastToStruct() const;
87 // Comparators
88 int operator==( CFullPropSpec const & prop ) const;
89 int operator!=( CFullPropSpec const & prop ) const;
90 // Member variable access
91 inline void SetPropSet( GUID const & guidPropSet );
92 inline GUID const & GetPropSet() const;
93
94 void SetProperty( PROPID pidProperty );
95 BOOL SetProperty( WCHAR const * wcsProperty );
96 inline WCHAR const * GetPropertyName() const;
97 inline PROPID GetPropertyPropid() const;
98 inline PROPSPEC GetPropSpec() const;
99 inline BOOL IsPropertyName() const;
100 inline BOOL IsPropertyPropid() const;
101 private:
102 GUID _guidPropSet;
103 PROPSPEC _psProperty;
104 };
105 // Inline methods for CFullPropSpec
operator new(size_t size)106 inline void * CFullPropSpec::operator new( size_t size )
107 {
108 void * p = CoTaskMemAlloc( size );
109 return( p );
110 }
operator new(size_t,void * p)111 inline void * CFullPropSpec::operator new( size_t /*size*/, void * p )
112 {
113 return( p );
114 }
operator delete(void * p)115 inline void CFullPropSpec::operator delete( void * p )
116 {
117 if ( p )
118 CoTaskMemFree( p );
119 }
IsValid() const120 inline BOOL CFullPropSpec::IsValid() const
121 {
122 return ( _psProperty.ulKind == PRSPEC_PROPID ||
123 0 != _psProperty.lpwstr );
124 }
SetPropSet(GUID const & guidPropSet)125 inline void CFullPropSpec::SetPropSet( GUID const & guidPropSet )
126 {
127 _guidPropSet = guidPropSet;
128 }
GetPropSet() const129 inline GUID const & CFullPropSpec::GetPropSet() const
130 {
131 return( _guidPropSet );
132 }
GetPropSpec() const133 inline PROPSPEC CFullPropSpec::GetPropSpec() const
134 {
135 return( _psProperty );
136 }
GetPropertyName() const137 inline WCHAR const * CFullPropSpec::GetPropertyName() const
138 {
139 return( _psProperty.lpwstr );
140 }
GetPropertyPropid() const141 inline PROPID CFullPropSpec::GetPropertyPropid() const
142 {
143 return( _psProperty.propid );
144 }
IsPropertyName() const145 inline BOOL CFullPropSpec::IsPropertyName() const
146 {
147 return( _psProperty.ulKind == PRSPEC_LPWSTR );
148 }
IsPropertyPropid() const149 inline BOOL CFullPropSpec::IsPropertyPropid() const
150 {
151 return( _psProperty.ulKind == PRSPEC_PROPID );
152 }
153