#ifndef __WIAPROPUI_H_INCLUDED
#define __WIAPROPUI_H_INCLUDED

/*******************************************************************************
*
*  (C) COPYRIGHT MICROSOFT CORP., 1999
*
*  TITLE:       WiaPropUI.H
*
*
*
*  DESCRIPTION:
*   Definitions and declarations for querying, displaying, and setting
*   WIA device and item properties
*
*******************************************************************************/


#include <objbase.h>

#ifdef __cplusplus
extern "C" {
#endif

 /* 83bbcbf3-b28a-4919-a5aa-73027445d672 */
// helper object for other WIA UI components
DEFINE_GUID (CLSID_WiaPropHelp, 0x83bbcbf3,0xb28a,0x4919,0xa5, 0xaa, 0x73, 0x02, 0x74, 0x45, 0xd6, 0x72);

DEFINE_GUID (IID_IWiaPropUI,  /* 7eed2e9b-acda-11d2-8080-00805f6596d2 */
    0x7eed2e9b,
    0xacda,
    0x11d2,
    0x80, 0x80, 0x00, 0x80, 0x5f, 0x65, 0x96, 0xd2
  );

// property sheet handler
DEFINE_GUID (CLSID_WiaPropUI,0x905667aa,0xacd6,0x11d2,0x80, 0x80,0x00,0x80,0x5f,0x65,0x96,0xd2);


#ifdef __cplusplus
}
#endif

// Define a structure for storing camera download options
typedef struct tagCamOptions
{
    BOOL bAutoCopy;        // TRUE if download should happen when camera is plugged in
    BOOL bShowUI;          // TRUE if the download should be interactive
    BOOL bDeleteFromDevice;// TRUE if images are removed from device after copy
    BOOL bCopyAsGroup;
    BSTR bstrDestination;  // path to default download site
    BSTR bstrAuthor;       // default image author
} CAMOPTIONS, *PCAMOPTIONS;

//
// Flags
//
#define PROPUI_DEFAULT            0
#define PROPUI_MODELESS           0
#define PROPUI_MODAL              1
#define PROPUI_READONLY           2




interface IWiaItem;
interface IWiaItem;

#undef INTERFACE
#define INTERFACE IWiaPropUI
//
// IWiaPropUI is meant to encapsulate the display and management of
// property sheets for camera and scanner devices, and for items saved
// in camera memory. Once a caller has a pointer to this interface, he can
// use it to open property sheets for multiple items; the implementation
// of the interface must support multiple active sheets and should also
// prevent duplicate sheets being displayed.
// Once the interface's ref count reaches zero, any open property sheets
// will be closed.
//
DECLARE_INTERFACE_(IWiaPropUI, IUnknown)
{
    // IUnknown methods

    STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID* ppvObj) PURE;
    STDMETHOD_(ULONG, AddRef) (THIS) PURE;
    STDMETHOD_(ULONG, Release) (THIS) PURE;

    // IWiaPropUI methods

    STDMETHOD(ShowItemProperties)(THIS_ HWND hParent, IN LPCWSTR szDeviceId, IN LPCWSTR szItem, DWORD dwFlags) PURE;
    STDMETHOD(GetItemPropertyPages) (THIS_ IWiaItem *pItem, IN OUT LPPROPSHEETHEADER ppsh);


};

#endif //__WIAPROPUI_H_INCLUDED