/*
 * Combo box definitions
 */

#ifndef __WINE_COMBO_H
#define __WINE_COMBO_H

#include "windef.h"

struct tagWND;

#define ID_CB_LISTBOX           1000
#define ID_CB_EDIT              1001

/* Internal flags */

#define CBF_DROPPED             0x0001
#define CBF_BUTTONDOWN          0x0002
#define CBF_NOROLLUP            0x0004
#define CBF_MEASUREITEM		0x0008
#define CBF_FOCUSED             0x0010
#define CBF_CAPTURE             0x0020
#define CBF_EDIT                0x0040
#define CBF_NORESIZE		0x0080
#define CBF_NOTIFY		0x0100
#define CBF_NOREDRAW            0x0200
#define CBF_SELCHANGE		0x0400
#define CBF_NOEDITNOTIFY        0x1000
#define CBF_NOLBSELECT          0x2000  /* do not change current selection */
#define CBF_EUI                 0x8000

/* Combo state struct */

typedef struct
{
   struct tagWND *self;
   HWND  	owner;
   UINT  	dwStyle;
   HWND  	hWndEdit;
   HWND  	hWndLBox;
   UINT  	wState;
   HFONT 	hFont;
   RECT         textRect;
   RECT         buttonRect;
   RECT         droppedRect;
   INT          droppedIndex;
   INT          fixedOwnerDrawHeight;
   INT   	droppedWidth;		/* last two are not used unless set */
   INT   	editHeight;		/* explicitly */
} HEADCOMBO,*LPHEADCOMBO;

/*
 * Note, that CBS_DROPDOWNLIST style is actually (CBS_SIMPLE | CBS_DROPDOWN)!
 */

#define CB_GETTYPE( lphc )    ((lphc)->dwStyle & (CBS_DROPDOWNLIST))
#define CB_DISABLED( lphc )   ((lphc)->self->dwStyle & WS_DISABLED)
#define CB_OWNERDRAWN( lphc ) ((lphc)->dwStyle & (CBS_OWNERDRAWFIXED | CBS_OWNERDRAWVARIABLE))
#define CB_HASSTRINGS( lphc ) ((lphc)->dwStyle & CBS_HASSTRINGS)
#define CB_HWND( lphc )       ((lphc)->self->hwndSelf)

LRESULT WINAPI ComboWndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam );

BOOL 	COMBO_FlipListbox( LPHEADCOMBO, BOOL, BOOL );
LRESULT COMBO_Directory( LPHEADCOMBO, UINT, LPSTR, BOOL );

#endif /* __WINE_COMBO_H */

