[HHCTRL.OCX] Sync with Wine Staging 3.3. CORE-14434
[reactos.git] / dll / win32 / hhctrl.ocx / hhctrl.h
1 /*
2 * Copyright 2005 James Hawkins
3 * Copyright 2007 Jacek Caban for CodeWeavers
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
9 *
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
18 */
19
20 #ifndef HHCTRL_H
21 #define HHCTRL_H
22
23 #include <stdarg.h>
24
25 #define COBJMACROS
26
27 #include "windef.h"
28 #include "winbase.h"
29 #include "winuser.h"
30 #include "winnls.h"
31 #include "htmlhelp.h"
32 #include "ole2.h"
33 #include "exdisp.h"
34 #include "mshtmhst.h"
35 #include "commctrl.h"
36
37 #ifdef INIT_GUID
38 #include "initguid.h"
39 #endif
40
41 #include "wine/itss.h"
42 #include "wine/unicode.h"
43 #include "wine/heap.h"
44 #include "wine/list.h"
45
46 #define WB_GOBACK 0
47 #define WB_GOFORWARD 1
48 #define WB_GOHOME 2
49 #define WB_SEARCH 3
50 #define WB_REFRESH 4
51 #define WB_STOP 5
52 #define WB_PRINT 6
53
54 typedef struct {
55 LPWSTR chm_file;
56 LPWSTR chm_index;
57 } ChmPath;
58
59 typedef struct ContentItem {
60 struct ContentItem *parent;
61 struct ContentItem *child;
62 struct ContentItem *next;
63
64 HTREEITEM id;
65
66 LPWSTR name;
67 LPWSTR local;
68 ChmPath merge;
69 } ContentItem;
70
71 typedef struct IndexSubItem {
72 LPWSTR name;
73 LPWSTR local;
74 } IndexSubItem;
75
76 typedef struct IndexItem {
77 struct IndexItem *next;
78
79 HTREEITEM id;
80 LPWSTR keyword;
81 ChmPath merge;
82
83 int nItems;
84 int itemFlags;
85 int indentLevel;
86 IndexSubItem *items;
87 } IndexItem;
88
89 typedef struct SearchItem {
90 struct SearchItem *next;
91
92 HTREEITEM id;
93 LPWSTR title;
94 LPWSTR filename;
95 } SearchItem;
96
97 typedef struct CHMInfo
98 {
99 IITStorage *pITStorage;
100 IStorage *pStorage;
101 WCHAR *szFile;
102
103 IStream *strings_stream;
104 char **strings;
105 DWORD strings_size;
106
107 WCHAR *compiledFile;
108 WCHAR *defWindow;
109 WCHAR *defTopic;
110 WCHAR *defTitle;
111 WCHAR *defToc;
112
113 UINT codePage;
114 } CHMInfo;
115
116 #define TAB_CONTENTS 0
117 #define TAB_INDEX 1
118 #define TAB_SEARCH 2
119 #define TAB_FAVORITES 3
120 #define TAB_NUMTABS TAB_FAVORITES
121
122 typedef struct {
123 HWND hwnd;
124 DWORD id;
125 } HHTab;
126
127 typedef struct {
128 HWND hwndList;
129 HWND hwndPopup;
130 HWND hwndCallback;
131 } IndexPopup;
132
133 typedef struct {
134 SearchItem *root;
135 HWND hwndEdit;
136 HWND hwndList;
137 HWND hwndContainer;
138 } SearchTab;
139
140 typedef struct {
141 HIMAGELIST hImageList;
142 } ContentsTab;
143
144 struct wintype_stringsW {
145 WCHAR *pszType;
146 WCHAR *pszCaption;
147 WCHAR *pszToc;
148 WCHAR *pszIndex;
149 WCHAR *pszFile;
150 WCHAR *pszHome;
151 WCHAR *pszJump1;
152 WCHAR *pszJump2;
153 WCHAR *pszUrlJump1;
154 WCHAR *pszUrlJump2;
155 WCHAR *pszCustomTabs;
156 };
157
158 struct wintype_stringsA {
159 char *pszType;
160 char *pszCaption;
161 char *pszToc;
162 char *pszIndex;
163 char *pszFile;
164 char *pszHome;
165 char *pszJump1;
166 char *pszJump2;
167 char *pszUrlJump1;
168 char *pszUrlJump2;
169 char *pszCustomTabs;
170 };
171
172 typedef struct {
173 IOleClientSite IOleClientSite_iface;
174 IOleInPlaceSite IOleInPlaceSite_iface;
175 IOleInPlaceFrame IOleInPlaceFrame_iface;
176 IDocHostUIHandler IDocHostUIHandler_iface;
177
178 LONG ref;
179
180 IOleObject *ole_obj;
181 IWebBrowser2 *web_browser;
182 HWND hwndWindow;
183 } WebBrowserContainer;
184
185 typedef struct {
186 WebBrowserContainer *web_browser;
187
188 HH_WINTYPEW WinType;
189
190 struct wintype_stringsA stringsA;
191 struct wintype_stringsW stringsW;
192
193 struct list entry;
194 CHMInfo *pCHMInfo;
195 ContentItem *content;
196 IndexItem *index;
197 IndexPopup popup;
198 SearchTab search;
199 ContentsTab contents;
200 HWND hwndTabCtrl;
201 HWND hwndSizeBar;
202 HFONT hFont;
203
204 HHTab tabs[TAB_FAVORITES+1];
205 int viewer_initialized;
206 DWORD current_tab;
207 } HHInfo;
208
209 BOOL InitWebBrowser(HHInfo*,HWND) DECLSPEC_HIDDEN;
210 void ReleaseWebBrowser(HHInfo*) DECLSPEC_HIDDEN;
211 void ResizeWebBrowser(HHInfo*,DWORD,DWORD) DECLSPEC_HIDDEN;
212 void DoPageAction(WebBrowserContainer*,DWORD) DECLSPEC_HIDDEN;
213
214 void InitContent(HHInfo*) DECLSPEC_HIDDEN;
215 void ReleaseContent(HHInfo*) DECLSPEC_HIDDEN;
216 void ActivateContentTopic(HWND,LPCWSTR,ContentItem *) DECLSPEC_HIDDEN;
217
218 void InitIndex(HHInfo*) DECLSPEC_HIDDEN;
219 void ReleaseIndex(HHInfo*) DECLSPEC_HIDDEN;
220
221 CHMInfo *OpenCHM(LPCWSTR szFile) DECLSPEC_HIDDEN;
222 BOOL LoadWinTypeFromCHM(HHInfo *info) DECLSPEC_HIDDEN;
223 CHMInfo *CloseCHM(CHMInfo *pCHMInfo) DECLSPEC_HIDDEN;
224 void SetChmPath(ChmPath*,LPCWSTR,LPCWSTR) DECLSPEC_HIDDEN;
225 IStream *GetChmStream(CHMInfo*,LPCWSTR,ChmPath*) DECLSPEC_HIDDEN;
226 LPWSTR FindContextAlias(CHMInfo*,DWORD) DECLSPEC_HIDDEN;
227 WCHAR *GetDocumentTitle(CHMInfo*,LPCWSTR) DECLSPEC_HIDDEN;
228
229 extern struct list window_list DECLSPEC_HIDDEN;
230 HHInfo *CreateHelpViewer(HHInfo*,LPCWSTR,HWND) DECLSPEC_HIDDEN;
231 void ReleaseHelpViewer(HHInfo*) DECLSPEC_HIDDEN;
232 BOOL NavigateToUrl(HHInfo*,LPCWSTR) DECLSPEC_HIDDEN;
233 BOOL NavigateToChm(HHInfo*,LPCWSTR,LPCWSTR) DECLSPEC_HIDDEN;
234 void MergeChmProperties(HH_WINTYPEW*,HHInfo*,BOOL) DECLSPEC_HIDDEN;
235 void UpdateHelpWindow(HHInfo *info) DECLSPEC_HIDDEN;
236
237 void InitSearch(HHInfo *info, const char *needle) DECLSPEC_HIDDEN;
238 void ReleaseSearch(HHInfo *info) DECLSPEC_HIDDEN;
239
240 LPCWSTR skip_schema(LPCWSTR url) DECLSPEC_HIDDEN;
241 void wintype_stringsA_free(struct wintype_stringsA *stringsA) DECLSPEC_HIDDEN;
242 void wintype_stringsW_free(struct wintype_stringsW *stringsW) DECLSPEC_HIDDEN;
243 WCHAR *decode_html(const char *html_fragment, int html_fragment_len, UINT code_page) DECLSPEC_HIDDEN;
244 HHInfo *find_window(const WCHAR *window) DECLSPEC_HIDDEN;
245
246 /* memory allocation functions */
247
248 static inline void * __WINE_ALLOC_SIZE(2) heap_realloc_zero(void *mem, size_t len)
249 {
250 return HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, mem, len);
251 }
252
253 static inline LPWSTR strdupW(LPCWSTR str)
254 {
255 LPWSTR ret;
256 int size;
257
258 if(!str)
259 return NULL;
260
261 size = (strlenW(str)+1)*sizeof(WCHAR);
262 ret = heap_alloc(size);
263 memcpy(ret, str, size);
264
265 return ret;
266 }
267
268 static inline LPWSTR strdupnAtoW(LPCSTR str, LONG lenA)
269 {
270 LPWSTR ret;
271 DWORD len;
272
273 if(!str)
274 return NULL;
275
276 if (lenA > 0)
277 {
278 /* find length of string */
279 LPCSTR eos = memchr(str, 0, lenA);
280 if (eos) lenA = eos - str;
281 }
282
283 len = MultiByteToWideChar(CP_ACP, 0, str, lenA, NULL, 0)+1; /* +1 for null pad */
284 ret = heap_alloc(len*sizeof(WCHAR));
285 MultiByteToWideChar(CP_ACP, 0, str, lenA, ret, len);
286 ret[len-1] = 0;
287
288 return ret;
289 }
290
291 static inline LPWSTR strdupAtoW(LPCSTR str)
292 {
293 return strdupnAtoW(str, -1);
294 }
295
296 static inline LPSTR strdupWtoA(LPCWSTR str)
297 {
298 LPSTR ret;
299 DWORD len;
300
301 if(!str)
302 return NULL;
303
304 len = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL);
305 ret = heap_alloc(len);
306 WideCharToMultiByte(CP_ACP, 0, str, -1, ret, len, NULL, NULL);
307 return ret;
308 }
309
310
311 extern HINSTANCE hhctrl_hinstance DECLSPEC_HIDDEN;
312 extern BOOL hh_process DECLSPEC_HIDDEN;
313
314 #endif