/*++

© 1998 Seagate Software, Inc.  All rights reserved.

Module Name:

    HsmAdmin.idl

Abstract:

    IDL source for HSM Admin SnapIn.

Author:

    Rohde Wakefield [rohde]   04-Mar-1997

Revision History:

--*/

// Standard types
import "oaidl.idl";
import "comcat.idl";
import "mmc.idl";

import "hsmeng.idl";
import "rmsint.idl";
import "fsaint.idl";

// Necessary for OLE Automation support
import "ocidl.idl";

interface ISakNode;
interface ISakWizard;

//
// Need a type to wrap MMC handles since these are in flux
//
typedef LONG_PTR RS_NOTIFY_HANDLE;
typedef LONG_PTR RS_WIN32_HANDLE;
typedef LONG_PTR RS_PCREATE_HANDLE;
typedef LONG_PTR RS_PRIVATE_DATA;


//------------------------------------------------------------------------
//
//                             ISakSnapAsk
//
//  This is an interface that any UI node can use to get information from
//  the snapin about high-level snapin stuff
//
//------------------------------------------------------------------------

    [
        object,
        uuid(4E769F52-5512-11d0-8F99-00A0C9190447)
    ]
    interface ISakSnapAsk : IUnknown
    {
        HRESULT GetNodeOfType([in] REFGUID nodetype, [out] ISakNode** ppNode);
        HRESULT RefreshNode([in] ISakNode* pUnkNode);
        HRESULT ShowPropertySheet([in] ISakNode* pUnkNode, [in] IDataObject *pDataObject, [in] int initialPage);
        HRESULT UpdateAllViews ([in] ISakNode* pUnkNode);
        HRESULT GetHsmServer([out] IHsmServer** ppHsmServer);
        HRESULT GetRmsServer([out] IRmsServer** ppRmsServer);
        HRESULT GetFsaServer([out] IFsaServer** ppFsaServer);
        HRESULT GetHsmName([out, string] OLECHAR ** pszName);
        HRESULT GetState();
        HRESULT Disable( [in] BOOL Disabled );
        HRESULT IsDisabled( );
        HRESULT CreateWizard( [in] ISakWizard * pWizard );
        HRESULT DetachFromNode( [in] ISakNode* pNode );

    };

//------------------------------------------------------------------------
//
//                             ISakNode
//
//------------------------------------------------------------------------

    [
        object,
        uuid(C4F67F02-119C-11D0-8070-00A0C905F098)
    ]
    interface ISakNode : IUnknown
    {
        HRESULT InitNode( [in] ISakSnapAsk* pSakSnapAsk, [in] IUnknown* pHsmObj, [in] ISakNode* pParent );
        HRESULT TerminateNode( void );
        HRESULT GetHsmObj( [out] IUnknown** ppHsmObj );
        HRESULT GetNodeType( [out] GUID *pGuid );
        HRESULT FindNodeOfType( [in] REFGUID nodetype, [out] ISakNode** ppNode );
        HRESULT GetPrivateData( [out] RS_PRIVATE_DATA* pData );
        HRESULT SetPrivateData( [in] RS_PRIVATE_DATA Data );
        HRESULT GetEnumState( [out] BOOL* pState );
        HRESULT SetEnumState( [in] BOOL EnumState );
        HRESULT GetScopeID( [out] HSCOPEITEM* pId );
        HRESULT SetScopeID( [in] HSCOPEITEM Id );
        HRESULT GetParent( [out] ISakNode ** ppParent );
        HRESULT IsContainer( );
        HRESULT CreateChildren( ); 
        HRESULT EnumChildren( [out] IEnumUnknown ** ppEnum );
        HRESULT DeleteChildren( ); 
        HRESULT DeleteAllChildren( ); 
        HRESULT ChildrenAreValid( );
        HRESULT InvalidateChildren( );
        HRESULT HasDynamicChildren( );
        HRESULT IsValid( );
        HRESULT EnumChildDisplayProps( [out] IEnumString ** ppEnum );
        HRESULT EnumChildDisplayTitles( [out] IEnumString ** ppEnum );
        HRESULT EnumChildDisplayPropWidths( [out] IEnumString ** ppEnum );
        HRESULT InvokeCommand( [in] SHORT sCmd, [in] IDataObject *pDataObject );
        HRESULT GetContextMenu( [in] BOOL bMultiSelect, [out] HMENU *phMenu);
        HRESULT GetMenuHelp( [in] LONG sCmd, [out] BSTR * szHelp );
        HRESULT SupportsProperties( [in] BOOL bMultiSelect );
        HRESULT SupportsPropertiesNoEngine( );
        HRESULT SupportsDelete( [in] BOOL bMultiSelect );
        HRESULT SupportsRefresh( [in] BOOL bMultiSelect );
        HRESULT SupportsRefreshNoEngine( );
        HRESULT AddPropertyPages([in]RS_PCREATE_HANDLE handle, [in] IUnknown* lpPropSheetCallback, [in] IEnumGUID* pEnumObjectId, [in] IEnumUnknown *pEnumUnkNode );
        HRESULT ActivateView( [in] OLE_HANDLE hWnd );
        HRESULT RefreshObject( );
        HRESULT DeleteObject( );
        HRESULT GetScopeOpenIcon            ([in] BOOL bOK, [out] int* pIconIndex);
        HRESULT GetScopeCloseIcon           ([in] BOOL bOK, [out] int* pIconIndex);
        HRESULT GetResultIcon               ([in] BOOL bOK, [out] int* pIconIndex);
        HRESULT GetObjectId                 ([out] GUID *objectId);
        HRESULT SetObjectId                 ([in] GUID objectId);
        HRESULT SetupToolbar                ([in] IToolbar *pToolbar );
        HRESULT HasToolbar                  ( );
        HRESULT OnToolbarButtonClick        ([in] IDataObject *pDataObject, [in] LONG cmdId );

};

//------------------------------------------------------------------------
//
//                             ISakNodeProp
//
//------------------------------------------------------------------------

    [
        object,
        uuid(C4F67F03-119C-11D0-8070-00A0C905F098),
        dual
    ]
    interface ISakNodeProp : IDispatch
    {
        [propget]
            HRESULT DisplayName( [out, retval, string] BSTR *pszName );

        [propput]
            HRESULT DisplayName( [in] BSTR pszName );

        [propget]
            HRESULT DisplayName_SortKey( [out, retval, string] BSTR *pszName );

        [propput]
            HRESULT DisplayName_SortKey( [in] BSTR pszName );

        [propget]
            HRESULT Type( [out, retval, string] BSTR *pszType );

        [propput]
            HRESULT Type( [in] BSTR pszType );

        [propget]
            HRESULT Type_SortKey( [out, retval, string] BSTR *pszType );

        [propget]
            HRESULT Description( [out, retval, string] BSTR *pszDesc );

        [propput]
            HRESULT Description( [in] BSTR pszDesc );

        [propget]
            HRESULT Description_SortKey( [out, retval, string] BSTR *pszName );

};

//------------------------------------------------------------------------
//
//                             IMsDataObject
//
//------------------------------------------------------------------------

    [
        object,
        uuid(374ba600-3aa0-11d1-b990-00a0c9190447)
    ]
    interface IMsDataObject : IUnknown
    {
        
        HRESULT AddNode                 ( [in] ISakNode *pNode );
        HRESULT GetNodeEnumerator       ( [out] IEnumUnknown ** ppEnum );
        HRESULT GetObjectIdEnumerator   ( [out] IEnumGUID ** ppEnumObjectId );
};

//------------------------------------------------------------------------
//
//                             ILibrary - keep this around as an example,
//                              allthough it is not currently used.
//
//------------------------------------------------------------------------

    [
        object,
        uuid(A00226E1-1B0D-11d0-8070-00A0C905F098),
        dual,
        pointer_default(unique)
    ]
    interface ICartridge : ISakNodeProp
    {

        [propget]
            HRESULT MediaTypeP( [out, retval, string] BSTR *pszValue );

        [propget]
            HRESULT CapacityP(  [out, retval, string] BSTR *pszValue );

        [propget]
            HRESULT CapacityP_SortKey(  [out, retval, string] BSTR *pszValue );

        [propget]
            HRESULT FreeSpaceP( [out, retval, string] BSTR *pszValue );

        [propget]
            HRESULT FreeSpaceP_SortKey( [out, retval, string] BSTR *pszValue );

        [propget]
            HRESULT StatusP(    [out, retval, string] BSTR *pszValue );

        [propget]
            HRESULT StatusP_SortKey(    [out, retval, string] BSTR *pszValue );

        [propget]
            HRESULT CopySet1P(  [out, retval, string] BSTR *pszValue );

        [propget]
            HRESULT CopySet1P_SortKey(  [out, retval, string] BSTR *pszValue );

        [propget]
            HRESULT CopySet2P(  [out, retval, string] BSTR *pszValue );

        [propget]
            HRESULT CopySet2P_SortKey(  [out, retval, string] BSTR *pszValue );

        [propget]
            HRESULT CopySet3P(  [out, retval, string] BSTR *pszValue );

        [propget]
            HRESULT CopySet3P_SortKey(  [out, retval, string] BSTR *pszValue );

    }

//------------------------------------------------------------------------
//
//                             IManVolProp
//
//------------------------------------------------------------------------

    [
        object,
        uuid(EAA46600-E736-11D0-B988-00A0C9190447),
        dual,
        pointer_default(unique)
    ]
    interface IManVolProp : ISakNodeProp
    {
        [propget]
            HRESULT DesiredFreeSpaceP( [out, retval, string] BSTR *pszValue );
        [propget]
            HRESULT DesiredFreeSpaceP_SortKey( [out, retval, string] BSTR *pszValue );
        [propget]
            HRESULT MinFileSizeKb( [out, retval, string] BSTR *pszValue );
        [propget]
            HRESULT AccessDays ( [out, retval, string]  BSTR *pszValue );
        [propget]
            HRESULT FreeSpaceP( [out, retval, string] BSTR *pszValue );
        [propget]
            HRESULT Capacity( [out, retval, string] BSTR *pszValue );
        [propget]
            HRESULT Capacity_SortKey( [out, retval, string] BSTR *pszValue );
        [propget]
            HRESULT FreeSpace( [out, retval, string] BSTR *pszValue );
        [propget]
            HRESULT FreeSpace_SortKey( [out, retval, string] BSTR *pszValue );
        [propget]
            HRESULT Premigrated( [out, retval, string] BSTR *pszValue );
        [propget]
            HRESULT Truncated( [out, retval, string] BSTR *pszValue );

    }

//------------------------------------------------------------------------
//
//                             ISakWizard
//
//  This is an interface that is used to create the a wizard
//
//
//------------------------------------------------------------------------

    [
        object,
        uuid(4E769F53-5512-11d0-8F99-00A0C9190447)
    ]
    interface ISakWizard : IUnknown
    {

        HRESULT AddWizardPages([in] RS_PCREATE_HANDLE Handle,
                               [in] IUnknown*         pPropSheetCallback,
                               [in] ISakSnapAsk*      pSakSnapAsk );

        HRESULT GetWatermarks([out] HBITMAP*   pWatermark,
                              [out] HBITMAP*   pHeader,
                              [out] HPALETTE*  pPalette,
                              [out] BOOL*      pStretch);

        HRESULT GetTitle( [out, string] OLECHAR ** pTitle );

    };

//------------------------------------------------------------------------
//
//                     LIBID_HSMADMINLib - Type Library
//
//  Necessary both for the dispatch interfaces (the generated .tlb file)
//  and for the class ids (in _i.c file). This section defines the type 
//  library, and all the COM objects that this library contains (nodes
//  in the HSM system.
//
//------------------------------------------------------------------------

 
[

    uuid(C4F67F00-119C-11D0-8070-00A0C905F098),
    version(1.0)
]
library HSMADMINLib
{
    importlib("stdole2.tlb");

    [
        uuid(0B9A3960-8C3E-11d0-B797-00A02488FCDE),
    ]
    coclass HsmAdminDataSnapin
    {
        [default] interface IUnknown;
    };

    [
        uuid(AB926900-77F8-11d1-B9A0-00A0C9190447),
    ]
    coclass HsmAdminDataExtension
    {
        [default] interface IUnknown;
    };

    [
        uuid(A6CB8422-7EB8-11d0-8FC3-00A0C9190447),
    ]
    coclass HsmAdmin
    {
        [default] interface IUnknown;
    };

    [
        uuid(F7974E22-6823-11d0-8FA3-00A0C9190447),
    ]
    coclass CUiCar
    {
        [default] interface ICartridge;
    };

    [
        uuid(DEAAB3B2-8AAB-11d0-8FCD-00A0C9190447),
    ]
    coclass CUiMedSet
    {
        [default] interface ISakNodeProp;
    };

    [
        uuid(F30A9FD3-1BC4-11d0-964E-00A0C905F099),
    ]
    coclass CUiManVolLst
    {
        [default] interface IManVolProp;
    };

    [
        uuid(D82438F1-1C60-11d0-964E-00A0C905F099),
    ]
    coclass CUiHsmCom
    {
        [default] interface ISakNodeProp;
    };

    [
        uuid(D82438F4-1C60-11d0-964E-00A0C905F099),
    ]
    coclass CUiManVol
    {
        [default] interface ISakNodeProp;
    };

    
    [
        uuid(E1141BAB-08F6-11D1-B98A-00A0C9190447),
        helpstring("About Class")
    ]
    coclass CAbout
    {
        [default] interface IUnknown;
    };

};