/*
 * Copyright (C) 2002 Gyorgy 'Nog' Jeney  
 *
 * 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
 */

/*
 * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
 * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
 * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
 * a choice of LGPL license versions is made available with the language indicating
 * that LGPLv2 or any later version may be used, or where a choice of which version
 * of the LGPL is applied is otherwise unspecified.
 */

#ifndef _INC_CUSTCNTL
#define _INC_CUSTCNTL

#ifdef __cplusplus
extern "C" {
#endif

/* Size defs */
#define CCHCCCLASS 32
#define CCHCCDESC 32
#define CCHCCTEXT 256

/* Custom Control Style Structure */
typedef struct tagCCSYLEA {
  DWORD flStyle;
  DWORD flExtStyle;
  char szText[CCHCCTEXT];
  LANGID lgid;
  WORD wReserved1;
} CCSTYLEA, *LPCCSTYLEA;

typedef struct tagCCSYLEW {
  DWORD flStyle;
  DWORD flExtStyle;
  WCHAR szText[CCHCCTEXT];
  LANGID lgid;
  WORD wReserved1;
} CCSTYLEW, *LPCCSTYLEW;

#define CCSTYLE   WINELIB_NAME_AW(CCSTYLE)
#define LPCCSTYLE WINELIB_NAME_AW(LPCCSTYLE)

typedef BOOL (CALLBACK *LPFNCCSTYLEA)(HWND, LPCCSTYLEA);
typedef BOOL (CALLBACK *LPFNCCSTYLEW)(HWND, LPCCSTYLEW);

#define LPFNCCSTYLE WINELIB_NAME_AW(LPFNCCSTYLE)

typedef int (CALLBACK *LPFNCCSIZETOTEXTA)(DWORD, DWORD, HFONT, LPSTR);
typedef int (CALLBACK *LPFNCCSIZETOTEXTW)(DWORD, DWORD, HFONT, LPWSTR);

#define LPFNCCSIZETOTEXT WINELIB_NAME_AW(LPFNCCSIZETOTEXT)

/* Custom Control style flags structure */
typedef struct tagCCSTYLEFLAGA {
  DWORD flStyle;
  DWORD flStyleMask;
  LPSTR pszStyle;
} CCSTYLEFLAGA, *LPCCSTYLEFLAGA;

typedef struct tagCCSTYLEFLAGW {
  DWORD flStyle;
  DWORD flStyleMask;
  LPWSTR pszStyle;
} CCSTYLEFLAGW, *LPCCSTYLEFLAGW;

#define CCSTYLEFLAG WINELIB_NAME_AW(CCSTYLEFLAG)

/* Custom Control Flags */
#define CCF_NOTEXT 0x00000001

/* CustomControl info structure */
typedef struct tagCCINFOA {
  char szClass[CCHCCCLASS];
  DWORD flOptions;
  char szDesc[CCHCCDESC];
  UINT cxDefault;
  UINT cyDefault;
  DWORD flStyleDefault;
  DWORD flExtStyleDefault;
  DWORD flCtrlTypeMask;
  char szTextDefault[CCHCCTEXT];
  int cStyleFlags;
  LPCCSTYLEFLAGA aStyleFlags;
  LPFNCCSTYLEA lpfnStyle;
  LPFNCCSIZETOTEXTA lpfnSizeToText;
  DWORD dwReserved1;
  DWORD dwReserved2;
} CCINFOA, *LPCCINFOA;

typedef struct tagCCINFOW {
  WCHAR szClass[CCHCCCLASS];
  DWORD flOptions;
  WCHAR szDesc[CCHCCDESC];
  UINT cxDefault;
  UINT cyDefault;
  DWORD flStyleDefault;
  DWORD flExtStyleDefault;
  DWORD flCtrlTypeMask;
  int cStyleFlags;
  LPCCSTYLEFLAGW aStyleFlags;
  WCHAR szTextDefault[CCHCCTEXT];
  LPFNCCSTYLEW lpfnStyle;
  LPFNCCSIZETOTEXTW lpfnSizeToText;
  DWORD dwReserved1;
  DWORD dwReserved2;
} CCINFOW, *LPCCINFOW;

DECL_WINELIB_TYPE_AW(CCINFO)
DECL_WINELIB_TYPE_AW(LPCCINFO)

typedef UINT (CALLBACK *LPFNCCINFOA)(LPCCINFOA);
typedef UINT (CALLBACK *LPFNCCINFOW)(LPCCINFOW);

DECL_WINELIB_TYPE_AW(LPFNCCINFO)

#ifdef __cplusplus
}
#endif

#endif /* _INC_CUSTCNTL */
