/***********************************************************************
 *
 *  _ABUSER.H
 *
 *  Header file for code in ABUSER.C
 *
 *  Copyright 1992, 1993 Microsoft Corporation.  All Rights Reserved.
 *
 ***********************************************************************/


#ifdef __cplusplus
extern "C" {
#endif

/*
 *  Function prototypes
 *
 *  Reuses methods:
 *		ROOT_QueryInterface
 *		ROOT_AddRef
 *		ROOT_GetLastError
 *		ROOT_Reserved
 */
	
#undef	INTERFACE
#define INTERFACE	struct _ABUSER

#undef  MAPIMETHOD_
#define	MAPIMETHOD_(type, method)	MAPIMETHOD_DECLARE(type, method, ABU_)
		MAPI_IUNKNOWN_METHODS(IMPL)
		MAPI_IMAPIPROP_METHODS(IMPL)
		MAPI_IMAILUSER_METHODS(IMPL)
#undef  MAPIMETHOD_
#define	MAPIMETHOD_(type, method)	MAPIMETHOD_TYPEDEF(type, method, ABU_)
		MAPI_IUNKNOWN_METHODS(IMPL)
		MAPI_IMAPIPROP_METHODS(IMPL)
		MAPI_IMAILUSER_METHODS(IMPL)
#undef  MAPIMETHOD_
#define MAPIMETHOD_(type, method)	STDMETHOD_(type, method)

DECLARE_MAPI_INTERFACE(ABU_)
{
	MAPI_IUNKNOWN_METHODS(IMPL)
	MAPI_IMAPIPROP_METHODS(IMPL)
	MAPI_IMAILUSER_METHODS(IMPL)
};

typedef struct _ABUSER
{
	ABU_Vtbl FAR * lpVtbl;

    FAB_Wrapped;

	/*
	 *	 Table used for country codes drop down list
	 */
	LPTABLEDATA	lpTDatDDListBox;


} ABUSER, *LPABUSER;

#define CBABUSER	sizeof(ABUSER)

/*
 *  Creates a new Mail User object  (see ABUSER.C)
 */
HRESULT
HrNewFaxUser(   LPMAILUSER *        lppMAPIPropEntry,
                ULONG *             lpulObjectType,
                ULONG               cbEntryID,
                LPENTRYID           lpEntryID,
                LPABLOGON           lpABPLogon,
                LPCIID              lpInterface,
                HINSTANCE           hLibrary,
                LPALLOCATEBUFFER    lpAllocBuff,
                LPALLOCATEMORE      lpAllocMore,
                LPFREEBUFFER        lpFreeBuff,
                LPMALLOC            lpMalloc );

HRESULT	HrBuildDDLBXCountriesTable(LPABUSER lpABUser);

// country list structure
#define COUNTRY_NAME_SIZE		50
typedef struct tagCOUNTRIESLIST           
{
	TCHAR	szDisplayName[COUNTRY_NAME_SIZE+1];
	DWORD	dwValue;
} COUNTRIESLIST, *LPCOUNTRIESLIST;


// Entry ID for the DD list box table
typedef struct _options_entryid
{
	BYTE 	abFlags[4];
	MAPIUID muid;
	ULONG 	ulVersion;
	ULONG 	ulType;
	ULONG 	ulRowNumber;
} OPTIONS_ENTRYID, *LPOPTIONS_ENTRYID;

#define CBOPTIONS_ENTRYID sizeof(OPTIONS_ENTRYID)


/*
 *
 *  Declaration of a button interface for various button controls
 *
 */


#undef	INTERFACE
#define	INTERFACE	struct _ABUBUTT

#undef	MAPIMETHOD_
#define	MAPIMETHOD_(type,method)	MAPIMETHOD_DECLARE(type,method,ABUBUTT_)
		MAPI_IUNKNOWN_METHODS(IMPL)
		MAPI_IMAPICONTROL_METHODS(IMPL)

#undef	MAPIMETHOD_
#define	MAPIMETHOD_(type,method)	MAPIMETHOD_TYPEDEF(type,method,ABUBUTT_)
		MAPI_IUNKNOWN_METHODS(IMPL)
		MAPI_IMAPICONTROL_METHODS(IMPL)

#undef	MAPIMETHOD_
#define	MAPIMETHOD_(type,method)	STDMETHOD_(type,method)

DECLARE_MAPI_INTERFACE(ABUBUTT_)
{
	MAPI_IUNKNOWN_METHODS(IMPL)
	MAPI_IMAPICONTROL_METHODS(IMPL)
};

typedef struct _ABUBUTT
{
	ABUBUTT_Vtbl FAR * lpVtbl;

	/*
	 *  Need to be the same as other objects
	 *  since this object reuses methods from
	 *  other objects.
	 */
								   
    FAB_IUnkWithLogon;

	/*  Private data */

	// The property tag associated with this button
	ULONG ulPropTag;


} ABUBUTT, *LPABUBUTT;

#define CBABUBUTT	sizeof(ABUBUTT)

/*
 * Create a button of the type above (ABUSER.C)
 */
HRESULT
HrNewABUserButton( LPMAPICONTROL * lppMAPICont,
            LPABLOGON           lpABLogon,
            HINSTANCE           hLibrary,
            LPALLOCATEBUFFER    lpAllocBuff,
            LPALLOCATEMORE      lpAllocMore,
            LPFREEBUFFER        lpFreeBuff,
            LPMALLOC            lpMalloc,
 			ULONG				ulPropTag);

#ifdef	__cplusplus
}		/* extern "C" */
#endif