/*****************************************************************************
 *	ftpprop.h
 *****************************************************************************/

#ifndef _FTPPROP_H
#define _FTPPROP_H

#include "ftpdhlp.h"
#include "ftppl.h"

HRESULT CFtpProp_DoProp(CFtpPidlList * pflHfpl, CFtpFolder * pff, HWND hwnd);



/*****************************************************************************\
    CLASS: CFtpProp

    DESCRIPTION:
        NOTE! that we use the IShellFolder on the wrong thread!

    Take careful note that all the CFtpFolder methods we call are thread-safe.
    The Change UNIX Permissions feature works by sending the command
    "SITE CHMOD <permissions> <filename>" to the server.
\*****************************************************************************/

class CFtpProp          : public IUnknown
{
public:
    //////////////////////////////////////////////////////
    // Public Interfaces
    //////////////////////////////////////////////////////
    
    // *** IUnknown ***
    virtual STDMETHODIMP_(ULONG) AddRef(void);
    virtual STDMETHODIMP_(ULONG) Release(void);
    virtual STDMETHODIMP QueryInterface(REFIID riid, LPVOID * ppvObj);
    
public:
    CFtpProp();
    ~CFtpProp(void);

    // Friend Functions
    friend HRESULT CFtpProp_Create(CFtpPidlList * pflHfpl, CFtpFolder * pff, HWND hwnd, CFtpProp ** ppfp);
    static HRESULT _CommitCHMOD_CB(HINTERNET hint, HINTPROCINFO * phpi, LPVOID pv, BOOL * pfReleaseHint);
    static DWORD _PropertySheetThreadProc(LPVOID pvCFtpProp) {return ((CFtpProp *) pvCFtpProp)->_PropertySheetThread(); };

protected:
    // Public Member Variables
    int                     m_cRef;

    CFtpFolder *            m_pff;          // Folder that owns the pidls
    CFtpPidlList *          m_pflHfpl;      // 
    HWND                    m_hwnd;         // browser window for UI and Legacy ChangeNotify
    CFtpDialogTemplate      m_ftpDialogTemplate;
    BOOL                    m_fChangeModeSupported;
    DWORD                   m_dwNewPermissions;

    
    // Public Member Functions
    BOOL OnInitDialog(HWND hdlg);
    BOOL OnClose(HWND hDlg);
    BOOL OnDestroy(HWND hDlg);
    DWORD _PropertySheetThread(void);
    void _HideCHMOD_UI(HWND hDlg);
    HRESULT _SetCHMOD_UI(HWND hDlg);
    DWORD _GetCHMOD_UI(HWND hDlg);
    DWORD _GetUnixPermissions(void);
    HRESULT _CommitCHMOD(HINTERNET hint, HINTPROCINFO * phpi, BOOL * pfReleaseHint);
    INT_PTR _SetWhiteBGCtlColor(HWND hDlg, HDC hdc, HWND hwndCtl);

    static INT_PTR DlgProc(HWND hdlg, UINT wm, WPARAM wp, LPARAM lp);
};

DWORD DoProp_OnThread(LPVOID pv);


#endif // _FTPPROP_H