/* @(#) 1.20 com/src/storage/idl/Link.idl, oddataxfer, od96nt, odnt9712d 10/31/96 07:56:42 [3/21/97 16:48:47] */


#ifndef _LINK_
#define _LINK_

#ifndef _LINKB_
#include "LinkB.idl"
#endif

#ifdef _PLATFORM_OS2_
  #ifndef _IODDEFS_
  #include <IODDefs.idl>
  #endif
#endif

//==============================================================================
// Theory of Operation (Copied from Feb-13 build)
//==============================================================================

/*
  This class is used to represent the destination side of OpenDoc links.
  ODDrafts create and own these links. The source ODPart will ask the draft
  to create an ODLinkSource and an ODLink pair, and return the ODLink
  object to the the destination part.  The destination part uses the ODLink
  object to extract the contents of the link.
*/

//==============================================================================
// Classes defined in this interface
//==============================================================================

interface  ODLink;

//==============================================================================
// Classes used by this interface
//==============================================================================

interface       ODStorageUnit;
interface       ODLinkSource;


//==============================================================================
// ODLink
//==============================================================================

interface ODLink : ODBaseLink
{
#ifdef _PLATFORM_OS2_
        void SetDescription (in ODLinkDescription Desc);
           // called by target Part to set its description.

        void GetDescription (out ODLinkDescription Desc);
           // called by target Part to retrieve the description of itself.

        ODBoolean IsRegistered();
           // Returns whether of not this LinkTarget is registered to receive automatic updates.

#endif // _PLATFORM_OS2_

#ifdef __SOMIDL__
#if defined(_PLATFORM_MACINTOSH_) || defined(_PLATFORM_WIN32_) || defined(_PLATFORM_OS2_) || defined(_PLATFORM_AIX_)
        implementation
        {
                majorversion = 1; minorversion = 0;

                functionprefix = ODLink;

                override:
                        somUninit,
                        Release,
                        Externalize,
                        ReleaseAll,
                #if defined(_PLATFORM_MACINTOSH_) || defined(_PLATFORM_WIN32_)
                        ShowLinkDestinationInfo,
                #endif
                        CloneInto;

                releaseorder:
                #ifdef _PLATFORM_OS2_
                        SetDescription,
                        GetDescription,
                        IsRegistered,
                #endif
                        reserved1,
                        reserved2,
                        reserved3,
                        reserved4,
                        reserved5,
                        reserved6,
                        reserved7,
                        reserved8,
                        reserved9,
                        reserved10;

                        passthru C_xh = ""
                                                        "#ifdef _PLATFORM_OS2_"
                                                        "#ifndef _ODTYPESB_"
                                                        "#include <ODTypesB.xh>"
                                                        "#endif"
                                                        "#endif"
                                                        "";
        };
#endif 
#endif 
};

#endif // _LINK_
