//+-------------------------------------------------------------------------
//
//  Microsoft Windows
//  Copyright (C) Microsoft Corporation, 1997.
//
//  File:       Callback.h
//
//  Contents:   Callback implementation
//
//  Classes:    COfflineSychronizeCallback
//
//  Notes:
//
//  History:    05-Nov-97   rogerg      Created.
//
//--------------------------------------------------------------------------

#ifndef _SYNCCALLBACK_
#define _SYNCCALLBACK_

class CHndlrMsg;
class CThreadMsgProxy;


class COfflineSynchronizeCallback: public ISyncMgrSynchronizeCallback ,
                                   public IOldSyncMgrSynchronizeCallback, // OLD IDL
                                   CLockHandler
{
public:
    COfflineSynchronizeCallback(CHndlrMsg *pHndlrMsg,
                            CLSID CLSIDServer,DWORD dwSyncFlags,BOOL fAllowModeless);
    ~COfflineSynchronizeCallback();

    //IUnknown methods
    STDMETHODIMP            QueryInterface(REFIID, LPVOID FAR *);
    STDMETHODIMP_(ULONG)    AddRef();
    STDMETHODIMP_(ULONG)    Release();

    // Callback methods.
    STDMETHODIMP Progress(REFSYNCMGRITEMID ItemID,LPSYNCMGRPROGRESSITEM lpSyncProgressItem);
    STDMETHODIMP PrepareForSyncCompleted(HRESULT hr);
    STDMETHODIMP SynchronizeCompleted(HRESULT hr);

    STDMETHODIMP EnableModeless(BOOL fEnable);
    STDMETHODIMP LogError(DWORD dwErrorLevel,const WCHAR *lpcErrorText,LPSYNCMGRLOGERRORINFO lpSyncLogError);
    STDMETHODIMP DeleteLogError(REFSYNCMGRERRORID ErrorID,DWORD dwReserved);
    STDMETHODIMP EstablishConnection( WCHAR const * lpwszConnection, DWORD dwReserved);

    // new callback methods
    STDMETHODIMP ShowPropertiesCompleted(HRESULT hr);
    STDMETHODIMP ShowErrorCompleted(HRESULT hr,ULONG cbNumItems,SYNCMGRITEMID *pItemIDs);


    // called by hndlrMsg
    void SetHndlrMsg(CHndlrMsg *pHndlrMsg,BOOL fForceKilled);
    void SetEnableModeless(BOOL fAllowModeless);

private:
    void CallCompletionRoutine(DWORD dwThreadMsg,HRESULT hCallResult,ULONG cbNumItems,SYNCMGRITEMID *pItemIDs);

    CHndlrMsg *m_pHndlrMsg;
    ULONG m_cRef;
    BOOL m_fSynchronizeCompleted;
    DWORD m_dwSyncFlags;
    BOOL m_fAllowModeless;
    BOOL m_fForceKilled;
    CLSID m_CLSIDServer;

};



#endif // _SYNCCALLBACK_