#ifndef _fldrlist_h_
#define _fldrlist_h_

typedef enum _CR_RETURN
{
        CR_DIFFERENT,
        CR_SAME,
} CR_RETURN;

typedef enum _CR_MASK
{
        CR_CLSID         = 0x0001,  // ROOT specified by CLSID instead of IDList
        CR_IDLROOT       = 0x0002,  // ROOT specified by IDList
        CR_IDLFOLDER     = 0x0004,  // ROOT & FOLDER specified by IDLists
        CR_IDLFOLDERONLY = 0x0008,  // FOLDER only specified by IDLists
        CR_REMOVE        = 0x0010,  // Used for CWM_SPECIFYCOMPARE only
} CR_MASK;

typedef struct _COMPAREROOT
{
        UINT        uSize;
        HWND        hwnd;
        CR_MASK     mask;
        CLSID       clsid;
        ITEMIDLIST  idlRoot;
        // ... ITEMIDLIST idlFolder;  this follow if (mask & CR_IDLFOLDER)
} COMPAREROOT, *LPCOMPAREROOT;

LPCOMPAREROOT FolderList_BuildCompare(HWND hwndTree, const CLSID *pclsid, LPCITEMIDLIST pidlRoot, LPCITEMIDLIST pidlFolder);
void WINAPI FolderList_AddCompare(LPCOMPAREROOT lpcr);
void WINAPI FolderList_RemoveCompare(LPCOMPAREROOT lpcr);
BOOL WINAPI FolderList_PerformCompare(LPCOMPAREROOT lpcr);

void WINAPI FolderList_UnregisterWindow(HWND hwndTree);
void FolderList_RegisterWindow(HWND hwnd, LPCITEMIDLIST pidlFolder);

#endif