Add OOM PropertyAccessor helper methods
[gpgol.git] / src / oomhelp.h
1 /* oomhelp.h - Defs for helper functions for the Outlook Object Model
2  *     Copyright (C) 2009 g10 Code GmbH
3  *     Copyright (C) 2015 Intevation GmbH
4  *
5  * This file is part of GpgOL.
6  * 
7  * GpgOL is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  * 
12  * GpgOL is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU Lesser General Public License for more details.
16  * 
17  * You should have received a copy of the GNU Lesser General Public License
18  * along with this program; if not, see <http://www.gnu.org/licenses/>.
19  */
20
21 #ifndef OOMHELP_H
22 #define OOMHELP_H
23
24 #include <unknwn.h>
25 #include "mymapi.h"
26
27 /* Helper to release dispatcher */
28 #define RELDISP(dispatcher) if (dispatcher) dispatcher->Release()
29
30 #define MSOCONTROLBUTTON    1
31 #define MSOCONTROLEDIT      2
32 #define MSOCONTROLDROPDOWN  3
33 #define MSOCONTROLCOMBOBOX  4
34 #define MSOCONTROLPOPUP    10
35
36 enum 
37   {
38     msoButtonAutomatic = 0,
39     msoButtonIcon = 1,
40     msoButtonCaption = 2,
41     msoButtonIconAndCaption = 3,
42     msoButtonIconAndWrapCaption = 7,
43     msoButtonIconAndCaptionBelow = 11,
44     msoButtonWrapCaption = 14,
45     msoButtonIconAndWrapCaptionBelow = 15 
46   };
47
48 enum
49   {
50     msoButtonDown = -1,
51     msoButtonUp = 0,
52     msoButtonMixed = 2
53   };
54
55
56 DEFINE_GUID(GUID_NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
57
58 DEFINE_GUID(IID_IConnectionPoint, 
59             0xb196b286, 0xbab4, 0x101a,
60             0xb6, 0x9c, 0x00, 0xaa, 0x00, 0x34, 0x1d, 0x07);
61 DEFINE_GUID(IID_IConnectionPointContainer, 
62             0xb196b284, 0xbab4, 0x101a,
63             0xb6, 0x9c, 0x00, 0xaa, 0x00, 0x34, 0x1d, 0x07);
64 DEFINE_GUID(IID_IPictureDisp,
65             0x7bf80981, 0xbf32, 0x101a,
66             0x8b, 0xbb, 0x00, 0xaa, 0x00, 0x30, 0x0c, 0xab);
67 DEFINE_GUID(IID_ApplicationEvents, 0x0006304E, 0x0000, 0x0000,
68             0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46);
69 DEFINE_GUID(IID_MailItemEvents, 0x0006302B, 0x0000, 0x0000,
70             0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46);
71 DEFINE_GUID(IID_MailItem, 0x00063034, 0x0000, 0x0000,
72             0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46);
73 DEFINE_GUID(IID_IMAPISecureMessage, 0x253cc320, 0xeab6, 0x11d0,
74             0x82, 0x22, 0, 0x60, 0x97, 0x93, 0x87, 0xea);
75
76 DEFINE_OLEGUID(IID_IUnknown,                  0x00000000, 0, 0);
77 DEFINE_OLEGUID(IID_IDispatch,                 0x00020400, 0, 0);
78 DEFINE_OLEGUID(IID_IOleWindow,                0x00000114, 0, 0);
79
80 #ifndef PR_SMTP_ADDRESS_DASL
81 #define PR_SMTP_ADDRESS_DASL \
82   "http://schemas.microsoft.com/mapi/proptag/0x39FE001E"
83 #endif
84
85 #define PR_MESSAGE_CLASS_W_DASL \
86   "http://schemas.microsoft.com/mapi/proptag/0x001A001F"
87 #define GPGOL_ATTACHTYPE_DASL \
88   "http://schemas.microsoft.com/mapi/string/" \
89   "{31805AB8-3E92-11DC-879C-00061B031004}/GpgOL Attach Type/0x00000003"
90 #define PR_ATTACH_DATA_BIN_DASL \
91   "http://schemas.microsoft.com/mapi/proptag/0x37010102"
92 #define PR_BODY_W_DASL \
93   "http://schemas.microsoft.com/mapi/proptag/0x1000001F"
94 #define PR_ATTACHMENT_HIDDEN_DASL \
95   "http://schemas.microsoft.com/mapi/proptag/0x7FFE000B"
96
97 #ifdef __cplusplus
98 extern "C" {
99 #if 0
100 }
101 #endif
102 #endif
103
104 /* Return the malloced name of an COM+ object.  */
105 char *get_object_name (LPUNKNOWN obj);
106
107 /* Helper to lookup a dispid.  */
108 DISPID lookup_oom_dispid (LPDISPATCH pDisp, const char *name);
109
110 /* Return the OOM object's IDispatch interface described by FULLNAME.  */
111 LPDISPATCH get_oom_object (LPDISPATCH pStart, const char *fullname);
112
113 /* Set the Icon of a CommandBarControl.  */
114 int put_oom_icon (LPDISPATCH pDisp, int rsource_id, int size);
115
116 /* Set the boolean property NAME to VALUE.  */
117 int put_oom_bool (LPDISPATCH pDisp, const char *name, int value);
118
119 /* Set the property NAME to VALUE.  */
120 int put_oom_int (LPDISPATCH pDisp, const char *name, int value);
121
122 /* Set the property NAME to STRING.  */
123 int put_oom_string (LPDISPATCH pDisp, const char *name, const char *string);
124
125 /* Get the boolean property NAME of the object PDISP.  */
126 int get_oom_bool (LPDISPATCH pDisp, const char *name);
127
128 /* Get the integer property NAME of the object PDISP.  */
129 int get_oom_int (LPDISPATCH pDisp, const char *name);
130
131 /* Get the string property NAME of the object PDISP.  */
132 char *get_oom_string (LPDISPATCH pDisp, const char *name);
133
134 /* Get an IUnknown object from property NAME of PDISP.  */
135 LPUNKNOWN get_oom_iunknown (LPDISPATCH pDisp, const char *name);
136
137 /* Return the control object with tag property value TAG.  */
138 LPDISPATCH get_oom_control_bytag (LPDISPATCH pObj, const char *tag);
139
140 /* Add a new button to an object which supports the add method.
141    Returns the new object or NULL on error.  */
142 LPDISPATCH add_oom_button (LPDISPATCH pObj);
143
144 /* Delete a button.  */
145 void del_oom_button (LPDISPATCH button);
146
147 /* Get the HWND of the active window in the current context */
148 HWND get_oom_context_window (LPDISPATCH context);
149
150 /* Get the address of the recipients as string list */
151 char ** get_oom_recipients (LPDISPATCH recipients);
152
153 /* Add an attachment to a dispatcher */
154 int
155 add_oom_attachment (LPDISPATCH disp, wchar_t* inFile);
156
157 /* Look up a string with the propertyAccessor interface */
158 char *
159 get_pa_string (LPDISPATCH pDisp, const char *property);
160
161 /* Look up a long with the propertyAccessor interface.
162  returns -1 on error.*/
163 int
164 get_pa_int (LPDISPATCH pDisp, const char *property, int *rInt);
165
166 /* Set a variant with the propertyAccessor interface */
167 int
168 set_pa_variant (LPDISPATCH pDisp, const char *dasl_id, VARIANT *value);
169
170 /* Look up a variant with the propertyAccessor interface */
171 int
172 get_pa_variant (LPDISPATCH pDisp, const char *dasl_id, VARIANT *rVariant);
173
174 /* Look up a LONG with the propertyAccessor interface */
175 LONG
176 get_pa_long (LPDISPATCH pDisp, const char *dasl_id);
177
178 /* Queries the interface of the dispatcher for the id
179    id. Returns NULL on error. The returned Object
180    must be released.
181    Mainly useful to check if an object is what
182    it appears to be. */
183 LPDISPATCH
184 get_object_by_id (LPDISPATCH pDisp, REFIID id);
185
186 /* Obtain the MAPI Message corresponding to the
187    Mailitem. Returns NULL on error.
188
189    The returned Message needs to be released by the
190    caller */
191 LPMESSAGE
192 get_oom_message (LPDISPATCH mailitem);
193
194 /* Obtain the Base MAPI Message of a MailItem.
195    The parameter should be a pointer to a MailItem.
196    returns NULL on error.
197
198    The returned Message needs to be released by the
199    caller.
200 */
201 LPMESSAGE
202 get_oom_base_message (LPDISPATCH mailitem);
203
204 /* Invoke a method of an outlook object.
205    returns true on success false otherwise.
206
207    rVariant should either point to a propery initialized
208    variant (initinalized wiht VariantInit) to hold
209    the return value or a pointer to NULL.
210    */
211 int
212 invoke_oom_method (LPDISPATCH pDisp, const char *name, VARIANT *rVariant);
213
214 #ifdef __cplusplus
215 }
216 #endif
217 #endif /*OOMHELP_H*/