////////////////////////////////////////////////////////////////////////////////
//
// libhppar.h -   Hot-
//
////////////////////////////////////////////////////////////////////////////////
#ifndef __LIBHPPAR_H
#define __LIBHPPAR_H


//-------------------------------------------------------------------------------
// 
// ---
struct HotPointDescription 
{
  //      
  double    x;
  double    y;
  //   (),   hot point'
  // !!!   .
  //                    
  //                
  char    * text;
  //       
  int       cursorId;
  HINSTANCE cursorInst;
};


//-------------------------------------------------------------------------------
// 
// ---
#ifndef BEGIN_INTERFACE
#define BEGIN_INTERFACE
#endif


//-------------------------------------------------------------------------------
// 
// ---
DEFINE_GUID(IID_ILibHPObject,       0x234EBFE0L, 0x477B, 0x11D4, 0xA8, 0x40, 0x00, 0x50, 0x4E, 0x05, 0xBD, 0x01);
DEFINE_GUID(IID_ILibExternalObject, 0x234EBFE0L, 0x477B, 0x11D4, 0xA8, 0x41, 0x00, 0x50, 0x4E, 0x05, 0xBD, 0x01);


//-------------------------------------------------------------------------------
// 
// ---
#undef  INTERFACE
#define INTERFACE ILibHPObject
DECLARE_INTERFACE_(INTERFACE, IUnknown)
{
BEGIN_INTERFACE
  /* IUnknown methods */
  STDMETHOD(                QueryInterface)(THIS_ REFIID riid, void FAR* FAR* ppvObj) PURE;
  STDMETHOD_(unsigned long, AddRef)(THIS) PURE;
  STDMETHOD_(unsigned long, Release)(THIS) PURE;

  /* ILibHPObject methods */
  //       hot point(Mouse L Btn Down)
  STDMETHOD_(BOOL, LibHotPnt_Prepare)(THIS_ int index ) PURE;

  //      hot point (Mouse L Btn Up  )
  // success = TRUE  -   
  //         = FALSE -     [Esc]
  STDMETHOD_(BOOL, LibHotPnt_Complete)(THIS_ int index, BOOL success ) PURE;

  //    hot point
  // !!! 1.        ( 
  //                index),    false
  //             2.      
  //                  
  STDMETHOD_(BOOL, LibHotPnt_Get)(THIS_ HotPointDescription* point, int index) PURE;

  //   hot point'
  // !!! 1.     (x, y),
  //                   
  //             2.        
  STDMETHOD_(BOOL, LibHotPnt_Set)(THIS_ HotPointDescription* point, int index ) PURE;

  //     
  // !!!     ,
  //                 .
  STDMETHOD_(BOOL, LibHotPnt_GetCursorText)(THIS_ int index, char** text ) PURE;

  //  popup-     
  // !!!      .
  //                   DestroyMenu()
  //    -   HMENU
  STDMETHOD_(int, LibHotPnt_GetMenu)(THIS) PURE;

  //    ,   LibHotPnt_GetMenu()
  // return = TRUE  -        UNDO   Hot point'
  //        = FALSE -   
  STDMETHOD_(BOOL, LibHotPnt_ExecuteCommand)(THIS_ int id )PURE;
};

typedef ILibHPObject FAR * LPLIBHPOBJECT;


//-------------------------------------------------------------------------------
// 
// ---
#undef  INTERFACE
#define INTERFACE ILibExternalObject
DECLARE_INTERFACE_(INTERFACE, IUnknown)
{
BEGIN_INTERFACE
  /* IUnknown methods */
  STDMETHOD(                QueryInterface)(THIS_ REFIID riid, void FAR* FAR* ppvObj) PURE;
  STDMETHOD_(unsigned long, AddRef)(THIS) PURE;
  STDMETHOD_(unsigned long, Release)(THIS) PURE;

  /* ILibExternalObject methods */
  STDMETHOD_(BOOL, Lib_Move)(THIS)PURE;
  STDMETHOD_(BOOL, Lib_Rotate)(THIS)PURE;
  STDMETHOD_(BOOL, Lib_Transform)(THIS)PURE;

  STDMETHOD_(BOOL, Lib_Delete)(THIS)PURE;
  STDMETHOD_(BOOL, Lib_Restore)(THIS)PURE;
  STDMETHOD_(BOOL, Lib_Deform)(THIS)PURE;
  STDMETHOD_(BOOL, Lib_AddToModel)(THIS)PURE;

};

typedef ILibExternalObject FAR * LPLIBEXTERNALOBJECT;


//-------------------------------------------------------------------------------
// 
// ---
struct LibTransData 
{
  REFIID        riid;        // ID  
  void        * locData;     //    
  LPUNKNOWN     object;      //  
  bool          loadedForMe; //              
  unsigned char libConnect;  //  ,       ( 0 -   )
  LibTransData ( REFIID  _riid,
                 void      * _locData,
                 LPUNKNOWN   _object,
                 bool        _loadedForMe )
        : riid        ( _riid        ),
          locData     ( _locData     ),
          object      ( _object      ),
          libConnect  ( 0            ),
          loadedForMe ( _loadedForMe ) {}
};

#endif // !defined(__LIBHPPAR_H)


