hhctrl.h 7.31 KB
Newer Older
1 2
/*
 * Copyright 2005 James Hawkins
3
 * Copyright 2007 Jacek Caban for CodeWeavers
4 5 6 7 8 9 10 11 12 13 14 15 16
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library 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 for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * 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 21 22 23 24 25
#ifndef HHCTRL_H
#define HHCTRL_H

#include <stdarg.h>

#define COBJMACROS
26

27 28 29 30 31 32
#include "windef.h"
#include "winbase.h"
#include "winuser.h"
#include "winnls.h"
#include "htmlhelp.h"
#include "ole2.h"
33 34
#include "exdisp.h"
#include "mshtmhst.h"
35
#include "commctrl.h"
36

37 38 39 40 41
#ifdef INIT_GUID
#include "initguid.h"
#endif

#include "wine/itss.h"
42
#include "wine/unicode.h"
43
#include "wine/list.h"
44 45 46 47 48 49 50

#define WB_GOBACK     0
#define WB_GOFORWARD  1
#define WB_GOHOME     2
#define WB_SEARCH     3
#define WB_REFRESH    4
#define WB_STOP       5
51
#define WB_PRINT      6
52

53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
typedef struct {
    LPWSTR chm_file;
    LPWSTR chm_index;
} ChmPath;

typedef struct ContentItem {
    struct ContentItem *parent;
    struct ContentItem *child;
    struct ContentItem *next;

    HTREEITEM id;

    LPWSTR name;
    LPWSTR local;
    ChmPath merge;
} ContentItem;

70 71 72 73 74 75 76 77 78 79 80 81 82 83
typedef struct IndexSubItem {
    LPWSTR name;
    LPWSTR local;
} IndexSubItem;

typedef struct IndexItem {
    struct IndexItem *next;

    HTREEITEM id;
    LPWSTR keyword;
    ChmPath merge;

    int nItems;
    int itemFlags;
84
    int indentLevel;
85 86 87
    IndexSubItem *items;
} IndexItem;

88 89 90 91 92 93 94 95
typedef struct SearchItem {
    struct SearchItem *next;

    HTREEITEM id;
    LPWSTR title;
    LPWSTR filename;
} SearchItem;

96 97 98 99
typedef struct CHMInfo
{
    IITStorage *pITStorage;
    IStorage *pStorage;
100
    WCHAR *szFile;
101 102 103 104

    IStream *strings_stream;
    char **strings;
    DWORD strings_size;
105

106
    WCHAR *compiledFile;
107
    WCHAR *defWindow;
108 109 110
    WCHAR *defTopic;
    WCHAR *defTitle;
    WCHAR *defToc;
111 112

    UINT codePage;
113 114
} CHMInfo;

115 116 117 118
#define TAB_CONTENTS   0
#define TAB_INDEX      1
#define TAB_SEARCH     2
#define TAB_FAVORITES  3
119
#define TAB_NUMTABS    TAB_FAVORITES
120 121 122 123 124

typedef struct {
    HWND hwnd;
    DWORD id;
} HHTab;
125

126 127 128 129 130 131
typedef struct {
    HWND hwndList;
    HWND hwndPopup;
    HWND hwndCallback;
} IndexPopup;

132
typedef struct {
133
    SearchItem *root;
134 135 136 137 138
    HWND hwndEdit;
    HWND hwndList;
    HWND hwndContainer;
} SearchTab;

139 140 141 142
typedef struct {
    HIMAGELIST hImageList;
} ContentsTab;

143 144 145 146 147 148 149 150 151 152 153 154 155 156
struct wintype_stringsW {
    WCHAR *pszType;
    WCHAR *pszCaption;
    WCHAR *pszToc;
    WCHAR *pszIndex;
    WCHAR *pszFile;
    WCHAR *pszHome;
    WCHAR *pszJump1;
    WCHAR *pszJump2;
    WCHAR *pszUrlJump1;
    WCHAR *pszUrlJump2;
    WCHAR *pszCustomTabs;
};

157 158 159 160 161 162 163 164 165 166 167 168 169 170
struct wintype_stringsA {
    char *pszType;
    char *pszCaption;
    char *pszToc;
    char *pszIndex;
    char *pszFile;
    char *pszHome;
    char *pszJump1;
    char *pszJump2;
    char *pszUrlJump1;
    char *pszUrlJump2;
    char *pszCustomTabs;
};

171 172 173 174 175 176
typedef struct {
    IOleClientSite *client_site;
    IWebBrowser2 *web_browser;
    IOleObject *wb_object;

    HH_WINTYPEW WinType;
177

178
    struct wintype_stringsA stringsA;
179
    struct wintype_stringsW stringsW;
180

181
    struct list entry;
182
    CHMInfo *pCHMInfo;
183
    ContentItem *content;
184
    IndexItem *index;
185
    IndexPopup popup;
186
    SearchTab search;
187
    ContentsTab contents;
188 189 190
    HWND hwndTabCtrl;
    HWND hwndSizeBar;
    HFONT hFont;
191 192

    HHTab tabs[TAB_FAVORITES+1];
193
    int viewer_initialized;
194
    DWORD current_tab;
195
} HHInfo;
196

197 198 199 200
BOOL InitWebBrowser(HHInfo*,HWND) DECLSPEC_HIDDEN;
void ReleaseWebBrowser(HHInfo*) DECLSPEC_HIDDEN;
void ResizeWebBrowser(HHInfo*,DWORD,DWORD) DECLSPEC_HIDDEN;
void DoPageAction(HHInfo*,DWORD) DECLSPEC_HIDDEN;
201

202 203 204
void InitContent(HHInfo*) DECLSPEC_HIDDEN;
void ReleaseContent(HHInfo*) DECLSPEC_HIDDEN;
void ActivateContentTopic(HWND,LPCWSTR,ContentItem *) DECLSPEC_HIDDEN;
205

206 207
void InitIndex(HHInfo*) DECLSPEC_HIDDEN;
void ReleaseIndex(HHInfo*) DECLSPEC_HIDDEN;
208

209 210 211 212 213 214
CHMInfo *OpenCHM(LPCWSTR szFile) DECLSPEC_HIDDEN;
BOOL LoadWinTypeFromCHM(HHInfo *info) DECLSPEC_HIDDEN;
CHMInfo *CloseCHM(CHMInfo *pCHMInfo) DECLSPEC_HIDDEN;
void SetChmPath(ChmPath*,LPCWSTR,LPCWSTR) DECLSPEC_HIDDEN;
IStream *GetChmStream(CHMInfo*,LPCWSTR,ChmPath*) DECLSPEC_HIDDEN;
LPWSTR FindContextAlias(CHMInfo*,DWORD) DECLSPEC_HIDDEN;
215
WCHAR *GetDocumentTitle(CHMInfo*,LPCWSTR) DECLSPEC_HIDDEN;
216

217
HHInfo *CreateHelpViewer(HHInfo*,LPCWSTR,HWND) DECLSPEC_HIDDEN;
218 219 220
void ReleaseHelpViewer(HHInfo*) DECLSPEC_HIDDEN;
BOOL NavigateToUrl(HHInfo*,LPCWSTR) DECLSPEC_HIDDEN;
BOOL NavigateToChm(HHInfo*,LPCWSTR,LPCWSTR) DECLSPEC_HIDDEN;
221 222
void MergeChmProperties(HH_WINTYPEW*,HHInfo*,BOOL) DECLSPEC_HIDDEN;
void UpdateHelpWindow(HHInfo *info) DECLSPEC_HIDDEN;
223

224 225
void InitSearch(HHInfo *info, const char *needle) DECLSPEC_HIDDEN;
void ReleaseSearch(HHInfo *info) DECLSPEC_HIDDEN;
226

227
LPCWSTR skip_schema(LPCWSTR url) DECLSPEC_HIDDEN;
228
void wintype_stringsA_free(struct wintype_stringsA *stringsA) DECLSPEC_HIDDEN;
229
void wintype_stringsW_free(struct wintype_stringsW *stringsW) DECLSPEC_HIDDEN;
230 231
WCHAR *decode_html(const char *html_fragment, int html_fragment_len, UINT code_page) DECLSPEC_HIDDEN;
HHInfo *find_window(const WCHAR *window) DECLSPEC_HIDDEN;
232

233 234
/* memory allocation functions */

235
static inline void * __WINE_ALLOC_SIZE(1) heap_alloc(size_t len)
236 237 238 239
{
    return HeapAlloc(GetProcessHeap(), 0, len);
}

240
static inline void * __WINE_ALLOC_SIZE(1) heap_alloc_zero(size_t len)
241 242 243 244
{
    return HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, len);
}

245
static inline void * __WINE_ALLOC_SIZE(2) heap_realloc(void *mem, size_t len)
246 247 248 249
{
    return HeapReAlloc(GetProcessHeap(), 0, mem, len);
}

250
static inline void * __WINE_ALLOC_SIZE(2) heap_realloc_zero(void *mem, size_t len)
251 252 253 254
{
    return HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, mem, len);
}

255
static inline BOOL heap_free(void *mem)
256 257 258 259
{
    return HeapFree(GetProcessHeap(), 0, mem);
}

260 261 262 263 264 265 266 267 268
static inline LPWSTR strdupW(LPCWSTR str)
{
    LPWSTR ret;
    int size;

    if(!str)
        return NULL;

    size = (strlenW(str)+1)*sizeof(WCHAR);
269
    ret = heap_alloc(size);
270 271 272 273 274
    memcpy(ret, str, size);

    return ret;
}

275
static inline LPWSTR strdupnAtoW(LPCSTR str, LONG lenA)
276 277 278 279 280 281 282
{
    LPWSTR ret;
    DWORD len;

    if(!str)
        return NULL;

283 284 285 286 287 288 289 290
    if (lenA > 0)
    {
        /* find length of string */
        LPCSTR eos = memchr(str, 0, lenA);
	if (eos) lenA = eos - str;
    }

    len = MultiByteToWideChar(CP_ACP, 0, str, lenA, NULL, 0)+1; /* +1 for null pad */
291
    ret = heap_alloc(len*sizeof(WCHAR));
292 293
    MultiByteToWideChar(CP_ACP, 0, str, lenA, ret, len);
    ret[len-1] = 0;
294 295 296 297

    return ret;
}

298 299 300 301 302
static inline LPWSTR strdupAtoW(LPCSTR str)
{
    return strdupnAtoW(str, -1);
}

303 304 305 306 307 308 309 310 311 312 313 314 315
static inline LPSTR strdupWtoA(LPCWSTR str)
{
    LPSTR ret;
    DWORD len;

    if(!str)
        return NULL;

    len = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL);
    ret = heap_alloc(len);
    WideCharToMultiByte(CP_ACP, 0, str, -1, ret, len, NULL, NULL);
    return ret;
}
316 317


318 319
extern HINSTANCE hhctrl_hinstance DECLSPEC_HIDDEN;
extern BOOL hh_process DECLSPEC_HIDDEN;
320

321
#endif