Merge branch 'master' into mime-addin
[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
81 #define PR_SMTP_ADDRESS "http://schemas.microsoft.com/mapi/proptag/0x39FE001E"
82 #endif
83
84 #ifdef __cplusplus
85 extern "C" {
86 #if 0
87 }
88 #endif
89 #endif
90
91 /* Return the malloced name of an COM+ object.  */
92 char *get_object_name (LPUNKNOWN obj);
93
94 /* Helper to lookup a dispid.  */
95 DISPID lookup_oom_dispid (LPDISPATCH pDisp, const char *name);
96
97 /* Return the OOM object's IDispatch interface described by FULLNAME.  */
98 LPDISPATCH get_oom_object (LPDISPATCH pStart, const char *fullname);
99
100 /* Set the Icon of a CommandBarControl.  */
101 int put_oom_icon (LPDISPATCH pDisp, int rsource_id, int size);
102
103 /* Set the boolean property NAME to VALUE.  */
104 int put_oom_bool (LPDISPATCH pDisp, const char *name, int value);
105
106 /* Set the property NAME to VALUE.  */
107 int put_oom_int (LPDISPATCH pDisp, const char *name, int value);
108
109 /* Set the property NAME to STRING.  */
110 int put_oom_string (LPDISPATCH pDisp, const char *name, const char *string);
111
112 /* Get the boolean property NAME of the object PDISP.  */
113 int get_oom_bool (LPDISPATCH pDisp, const char *name);
114
115 /* Get the integer property NAME of the object PDISP.  */
116 int get_oom_int (LPDISPATCH pDisp, const char *name);
117
118 /* Get the string property NAME of the object PDISP.  */
119 char *get_oom_string (LPDISPATCH pDisp, const char *name);
120
121 /* Get an IUnknown object from property NAME of PDISP.  */
122 LPUNKNOWN get_oom_iunknown (LPDISPATCH pDisp, const char *name);
123
124 /* Return the control object with tag property value TAG.  */
125 LPDISPATCH get_oom_control_bytag (LPDISPATCH pObj, const char *tag);
126
127 /* Add a new button to an object which supports the add method.
128    Returns the new object or NULL on error.  */
129 LPDISPATCH add_oom_button (LPDISPATCH pObj);
130
131 /* Delete a button.  */
132 void del_oom_button (LPDISPATCH button);
133
134 /* Get the HWND of the active window in the current context */
135 HWND get_oom_context_window (LPDISPATCH context);
136
137 /* Get the address of the recipients as string list */
138 char ** get_oom_recipients (LPDISPATCH recipients);
139
140 /* Add an attachment to a dispatcher */
141 int
142 add_oom_attachment (LPDISPATCH disp, wchar_t* inFile);
143
144 /* Look up a string with the propertyAccessor interface */
145 char *
146 get_pa_string (LPDISPATCH pDisp, const char *property);
147
148 /* Queries the interface of the dispatcher for the id
149    id. Returns NULL on error. The returned Object
150    must be released.
151    Mainly useful to check if an object is what
152    it appears to be. */
153 LPDISPATCH
154 get_object_by_id (LPDISPATCH pDisp, REFIID id);
155
156 /* Obtain the MAPI Message corresponding to the
157    Mailitem. Returns NULL on error.
158
159    The returned Message needs to be released by the
160    caller */
161 LPMESSAGE
162 get_oom_message (LPDISPATCH mailitem);
163
164 /* Obtain the Base MAPI Message of a MailItem.
165    The parameter should be a pointer to a MailItem.
166    returns NULL on error.
167
168    The returned Message needs to be released by the
169    caller.
170 */
171 LPMESSAGE
172 get_oom_base_message (LPDISPATCH mailitem);
173
174 /* Invoke a method of an outlook object.
175    returns true on success false otherwise.
176
177    rVariant should either point to a propery initialized
178    variant (initinalized wiht VariantInit) to hold
179    the return value or a pointer to NULL.
180    */
181 int
182 invoke_oom_method (LPDISPATCH pDisp, const char *name, VARIANT *rVariant);
183
184 #ifdef __cplusplus
185 }
186 #endif
187 #endif /*OOMHELP_H*/