//+---------------------------------------------------------------------------
//
//  Microsoft Windows
//  Copyright (c) Microsoft Corporation. All rights reserved.
//
//  File:       recobj.idl
//
//  Contents:   IDL definition for IReconcilableObject interface
//
//  Classes:
//
//  Functions:
//
//  History:    12-12-94   SethuR   Created from DavidDi's specs.
//
//  Notes:      There are a couple of issues regarding this interface that
//              needs to be ironed out.
//
//              1) How do we deal with Remote Invocation/execution if we have
//              HWND's as part of the arguments ?
//
//              2) How do we prevent having to know about the global topology
//              in the case of IReplicaNotify interface ?
//
//----------------------------------------------------------------------------

#include "idlmulti.h"

interface IReconcileInitiator;

REMOTED_INTERFACE(99180162-DA16-101A-935C-444553540000)
interface IReconcilableObject : IUnknown
{
    typedef enum _reconcilef
    {
       // interaction with the user is allowed

       RECONCILEF_MAYBOTHERUSER         = 0x0001,

       //
       // hwndProgressFeedback may be used to provide reconciliation progress
       // feedback to the user.
       //

       RECONCILEF_FEEDBACKWINDOWVALID   = 0x0002,           // BUGBUG

       // residue support not required

       RECONCILEF_NORESIDUESOK          = 0x0004,

       // caller not interested in callee's residues

       RECONCILEF_OMITSELFRESIDUE       = 0x0008,

       //
       // Reconcile() call resuming after a previous Reconcile() call returned
       // REC_E_NOTCOMPLETE
       //

       RECONCILEF_RESUMERECONCILIATION  = 0x0010,

       // Object may perform all updates.

       RECONCILEF_YOUMAYDOTHEUPDATES    = 0x0020,

       // Only this object has been changed.

       RECONCILEF_ONLYYOUWERECHANGED    = 0x0040,

       // flag combinations

       ALL_RECONCILE_FLAGS              = (RECONCILEF_MAYBOTHERUSER |
                                           RECONCILEF_FEEDBACKWINDOWVALID |
                                           RECONCILEF_NORESIDUESOK |
                                           RECONCILEF_OMITSELFRESIDUE |
                                           RECONCILEF_RESUMERECONCILIATION |
                                           RECONCILEF_YOUMAYDOTHEUPDATES |
                                           RECONCILEF_ONLYYOUWERECHANGED)
    } RECONCILEF;

    HRESULT Reconcile(
        [in] IReconcileInitiator               *pInitiator,
        [in] DWORD                             dwFlags,
        [in] HWND                              hwndOwner,
        [in] HWND                              hwndProgressFeedback,
        [in] ULONG                             cInput,
        [in,unique,size_is(cInput,)] LPMONIKER *rgpmkOtherInput,
        [out] LONG                             *plOutIndex,
        [in,unique] IStorage                   *pstgNewResidues,
        [in,unique] ULONG                      *pvReserved);

    HRESULT GetProgressFeedbackMaxEstimate(
        [out] ULONG *pulProgressMax);
}

