/*
 * Copyright (C) 2007 Francois Gouget
 *
 * 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
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 */
#ifndef __WINE_WFEXT_H
#define __WINE_WFEXT_H

#ifdef __cplusplus
extern "C" {
#endif

#define MENU_TEXT_LEN         40

#define FMMENU_FIRST          1
#define FMMENU_LAST           99

#define FMEVENT_LOAD          100
#define FMEVENT_UNLOAD        101
#define FMEVENT_INITMENU      102
#define FMEVENT_USER_REFRESH  103
#define FMEVENT_SELCHANGE     104
#define FMEVENT_TOOLBARLOAD   105
#define FMEVENT_HELPSTRING    106
#define FMEVENT_HELPMENUITEM  107

#define FMFOCUS_DIR           1
#define FMFOCUS_TREE          2
#define FMFOCUS_DRIVES        3
#define FMFOCUS_SEARCH        4

#define FM_GETFOCUS           (WM_USER + 0x0200)
#define FM_GETDRIVEINFOA      (WM_USER + 0x0201)
#define FM_GETSELCOUNT        (WM_USER + 0x0202)
#define FM_GETSELCOUNTLFN     (WM_USER + 0x0203)
#define FM_GETFILESELA        (WM_USER + 0x0204)
#define FM_GETFILESELLFNA     (WM_USER + 0x0205)
#define FM_REFRESH_WINDOWS    (WM_USER + 0x0206)
#define FM_RELOAD_EXTENSIONS  (WM_USER + 0x0207)
#define FM_GETDRIVEINFOW      (WM_USER + 0x0211)
#define FM_GETFILESELW        (WM_USER + 0x0214)
#define FM_GETFILESELLFNW     (WM_USER + 0x0215)

#define FM_GETDRIVEINFO       WINELIB_NAME_AW(FM_GETDRIVEINFO)
#define FM_GETFILESEL         WINELIB_NAME_AW(FM_GETFILESEL)
#define FM_GETFILESELLFN      WINELIB_NAME_AW(FM_GETFILESELLFN)

typedef struct _FMS_GETFILESELA
{
    FILETIME ftTime;
    DWORD    dwSize;
    BYTE     bAttr;
    CHAR     szName[260];
} FMS_GETFILESELA, *LPFMS_GETFILESELA;

typedef struct _FMS_GETFILESELW
{
    FILETIME ftTime;
    DWORD    dwSize;
    BYTE     bAttr;
    WCHAR    szName[260];
} FMS_GETFILESELW, *LPFMS_GETFILESELW;

#define FMS_GETFILESEL        WINELIB_NAME_AW(FMS_GETFILESEL)
#define LPFMS_GETFILESEL      WINELIB_NAME_AW(LPFMS_GETFILESEL)

typedef struct _FMS_GETDRIVEINFOA
{
    DWORD dwTotalSpace;
    DWORD dwFreeSpace;
    CHAR  szPath[260];
    CHAR  szVolume[14];
    CHAR  szShare[128];
} FMS_GETDRIVEINFOA, *LPFMS_GETDRIVEINFOA;

typedef struct _FMS_GETDRIVEINFOW
{
    DWORD dwTotalSpace;
    DWORD dwFreeSpace;
    WCHAR szPath[260];
    WCHAR szVolume[14];
    WCHAR szShare[128];
} FMS_GETDRIVEINFOW, *LPFMS_GETDRIVEINFOW;

#define FMS_GETDRIVEINFO      WINELIB_NAME_AW(FMS_GETDRIVEINFO)
#define LPFMS_GETDRIVEINFO    WINELIB_NAME_AW(LPFMS_GETDRIVEINFO)

typedef struct _FMS_LOADA
{
    DWORD dwSize;
    CHAR  szMenuName[MENU_TEXT_LEN];
    HMENU hMenu;
    UINT  wMenuDelta;
} FMS_LOADA, *LPFMS_LOADA;

typedef struct _FMS_LOADW
{
    DWORD dwSize;
    WCHAR szMenuName[MENU_TEXT_LEN];
    HMENU hMenu;
    UINT  wMenuDelta;
} FMS_LOADW, *LPFMS_LOADW;

#define FMS_LOAD              WINELIB_NAME_AW(FMS_LOAD)
#define LPFMS_LOAD            WINELIB_NAME_AW(LPFMS_LOAD)

typedef struct tagEXT_BUTTON
{
    WORD idCommand;
    WORD idsHelp;
    WORD fsStyle;
} EXT_BUTTON, *LPEXT_BUTTON;

typedef struct tagFMS_TOOLBARLOAD
{
    DWORD        dwSize;
    LPEXT_BUTTON lpButtons;
    WORD         cButtons;
    WORD         cBitmaps;
    WORD         idBitmap;
    HBITMAP      hBitmap;
} FMS_TOOLBARLOAD, *LPFMS_TOOLBARLOAD;

typedef struct tagFMS_HELPSTRINGA
{
    INT   idCommand;
    HMENU hMenu;
    CHAR  szHelp[128];
} FMS_HELPSTRINGA, *LPFMS_HELPSTRINGA;

typedef struct tagFMS_HELPSTRINGW
{
    INT   idCommand;
    HMENU hMenu;
    WCHAR szHelp[128];
} FMS_HELPSTRINGW, *LPFMS_HELPSTRINGW;

#define FMS_HELPSTRING        WINELIB_NAME_AW(FMS_HELPSTRING)
#define LPFMS_HELPSTRING      WINELIB_NAME_AW(LPFMS_HELPSTRING)

typedef DWORD (WINAPI *FM_EXT_PROC)(HWND,WORD,LONG);
typedef DWORD (WINAPI *FM_UNDELETE_PROCA)(HWND,LPSTR);
typedef DWORD (WINAPI *FM_UNDELETE_PROCW)(HWND,LPWSTR);
DECL_WINELIB_TYPE_AW(FM_UNDELETE_PROC);

LONG WINAPI FMExtensionProc(HWND,WORD,LONG);
LONG WINAPI FMExtensionProcW(HWND,WORD,LONG);

#ifdef __cplusplus
}
#endif

#endif