
// ---------------------------------------------------------------------
//
// QTOle.h - OLE Server - QuickTime for Windows
//
//           Version 1.0
//
//           (c) 1988-1992 Apple Computer, Inc. All Rights Reserved.
//
// ---------------------------------------------------------------------

 
// Prevent multiple inclusion
// --------------------------
   #ifndef QTOLE_H
      #define QTOLE_H

   #include <qtw.h>

// defines
// -------
   #ifndef MAX_PATH_LEN
   #define MAX_PATH_LEN      256
   #endif

   #ifndef MAX_TEXT_LEN
   #define MAX_TEXT_LEN       64
   #endif

     // Object type ids. Application can support one or the other
   #define MOVIE_OBJECT     0x0001
   #define PICTURE_OBJECT   0x0002

   #define VERSION_1             1
   #define DEFAULT_RATE       MAKELFIXED( 1, 0 )

   #define QTOLE_API     CALLBACK __loadds


// typedefs
// ----------   
   typedef LONG    QTOLE_ERR;
   typedef struct  _tagQTOLE_OPTIONS    FAR *LPQTOLE_OPTIONS;

   typedef QTOLE_ERR (CALLBACK *QTOLEPROC) (UINT, WPARAM, LPARAM, LPQTOLE_OPTIONS);

   typedef struct _tagQTOLE_INIT
      {DWORD              lStructSize;
       LONG               lVersion;
       HINSTANCE          hInstance;
       HINSTANCE          hResources;
       LPSTR              lpCmdLine;
       LPCSTR             lpClassName;
       LPCSTR             lpServerCaption;
       LPINT              lpnCmdShow;
       WORD               wIDFirstString;
       WORD               wIDFirstDlg;
       BOOL               bMultipleObjectServer;               
       QTOLEPROC          fpServerCallBack; 

      } QTOLE_INIT;
   typedef QTOLE_INIT FAR *LPQTOLE_INIT;


   typedef struct _tagQTOLE_OLEDATA
      {DWORD              lStructSize;
       LONG               lVersion;
       WORD               wObjectType;
       LPVOID             lpqtoleServer;

      } QTOLE_OLEDATA;
   typedef QTOLE_OLEDATA FAR *LPQTOLE_OLEDATA;


   typedef struct _tagQTOLE_OPENWND
      {DWORD              lStructSize;
       LONG               lVersion;
       WORD               wObjectType;
       HWND               hwndObject;
       LPCSTR             lpObjectPath;
       LPCSTR             lpObjectName;
      } QTOLE_OPENWND;
   typedef QTOLE_OPENWND FAR *LPQTOLE_OPENWND;


   typedef struct _tagQTOLE_OPTIONS
      {DWORD              lStructSize;
       LONG               lVersion;
       WORD               wObjectType;
       HWND               hwndObject;
      } QTOLE_OPTIONS;

   typedef struct _tagQTOLE_OPTIONSMOVIE
      {DWORD              lStructSize;
       LONG               lVersion;
       WORD               wObjectType;
       HWND               hwndObject;
            // movie handle
       Movie              mMovie;
       LFIXED             lfxRate;
       BOOL               bSoundOnlyMovie;
            // movie copy options
       BOOL               bCopyCurrentFrame;
       BOOL               bCopyIcon;
       BOOL               bShowTitleBar;
       TimeValue          tvDisplayFrame;
            // looping options
       BOOL               bLoop;
       BOOL               bLoopPalindrome;
            // play selection option
       BOOL               bPlaySelectionOnly;
            // size data
       SIZE               sizeNormal;
       SIZE               sizeCurrent;
            // size options
       BOOL               bSizeHalf;
       BOOL               bSizeNormal;
       BOOL               bSizeDouble;
            // miscellaneous options
       BOOL               bShowMovieController;
       BOOL               bUseMoviePalette;
       BOOL               bDrawWindowFrame;
            // caption data
       char               szCaption[MAX_TEXT_LEN];
            // selection and duration data
       TimeRecord         trSelStart;
       TimeRecord         trSelDuration;
       TimeValue          tvMovieDuration;

      } QTOLE_OPTIONSMOVIE;
   typedef QTOLE_OPTIONSMOVIE FAR *LPQTOLE_OPTIONSMOVIE;


   typedef struct _tagQTOLE_OPTIONSPICTURE
      {DWORD              lStructSize;
       LONG               lVersion;
       WORD               wObjectType;
       HWND               hwndObject;
            // Picture handle
       PicHandle          phPicture;
            // Picture copy options
       BOOL               bCopyIcon;
       BOOL               bShowTitleBar;
       RECT               rcSelection;
            // size data
       WORD               wZoomCurrent;    // 100 is 1 x 1, 200 is 2 x expansion, etc
            // size options
       BOOL               bZoomHalf;
       BOOL               bZoomNormal;
       BOOL               bZoomDouble;
            // miscellaneous options
       BOOL               bShowPictureControls;
       BOOL               bUsePicturePalette;
       BOOL               bDrawWindowFrame;
            // caption data
       char               szCaption[MAX_TEXT_LEN];

      } QTOLE_OPTIONSPICTURE;
   typedef QTOLE_OPTIONSPICTURE FAR *LPQTOLE_OPTIONSPICTURE;


// Callback function message IDS
// -----------------------------
   #define QTOLE_MSG_OPENOBJECT        0x0100   
   #define QTOLE_MSG_SHOWOBJECT        0x0101   
   #define QTOLE_MSG_OPENOPTIONSDLG    0x0102
   #define QTOLE_MSG_PLAYOBJECT        0x0103
   #define QTOLE_MSG_FILEOPEN          0x0104   

// Localized string id offsets
// ---------------------------
   #define QTOLE_STR_OFFSET_READABLENAME       0
   #define QTOLE_STR_OFFSET_PLAY               1
   #define QTOLE_STR_OFFSET_EDIT               2
   #define QTOLE_STR_OFFSET_OPTIONS            3
   #define QTOLE_STR_OFFSET_UPDATA             4
   #define QTOLE_STR_OFFSET_ALREADYINSERTING   5
   #define QTOLE_STR_OFFSET_WHEREFILE          6
   #define QTOLE_STR_OFFSET_UPDATEPATH         7
   #define QTOLE_STR_OFFSET_NOTFILESIZE        8
   #define QTOLE_STR_OFFSET_NOTFILENAME        9
   #define QTOLE_STR_OFFSET_SEARCHDIRS        10
   #define QTOLE_STR_OFFSET_FILENOTFOUND      11

// Localized dialog template id offsets
// ---------------------------
   #define QTOLE_DLG_OFFSET_SEARCHDLG       0


// Error Codes
// -----------
   enum
      {QTOLE_OK                  =   0L,
       QTOLE_GEN_ERROR           =   1L,
       QTOLE_INSTALL_ONLY        =   2L,
       QTOLE_CMDLINE_SYNTAX      =   3L,
       QTOLE_SERVERWRONGVERSION  =   4L,
       QTOLE_NATIVEWRONGVERSION  =   5L,
       QTOLE_NOMEMORY            =   6L,
       QTOLE_OLEINITFAILURE      =   7L,
       QTOLE_BAD_INPUT_FOR_REG   =   8L,
       QTOLE_REGFAILED           =   9L,
       QTOLE_NOSERVERDATA        =  10L,
       QTOLE_COPYFAILED          =  11L, 
       QTOLE_INVALIDDATAREF      =  12L,
       QTOLE_NEWMOVIEERR         =  13L,
       QTOLE_NOVIDEOINFO         =  14L,
       QTOLE_NOCONTROLLER        =  15L

      };

// Interface Prototypes
// --------------------
       // Call before application CreateWindow in startup code
   QTOLE_ERR  QTOLE_API QTOLE_Initialize          (LPQTOLE_OLEDATA, LPQTOLE_INIT);  

       // Call after application CreateWindow returns an hwnd
   VOID       QTOLE_API QTOLE_SetApplicationHwnd  (LPQTOLE_OLEDATA, HWND);
   
       // Call during creation of object window. This may or may not be the main app
       // window
   QTOLE_ERR  QTOLE_API QTOLE_OpeningNewObjectWnd (LPQTOLE_OLEDATA, LPQTOLE_OPENWND);

       // Call during Edit-Copy processing
   QTOLE_ERR  QTOLE_API QTOLE_Copy                (LPQTOLE_OLEDATA, LPQTOLE_OPTIONS);
 
       // Used to open an object wnd in response to the QTOLE_MSG_PLAYOBJECT 
       // call in the server callback function.  The server must post a message
       // to itself to call this function.  
   QTOLE_ERR  QTOLE_API QTOLE_PlayObject          ( LPQTOLE_OLEDATA, LPARAM );

       // Called after closing Options dlg when it is opened as a result of
       // QTOle.dll sending message 
   VOID       QTOLE_API QTOLE_ClosedOptionsDlg    (LPQTOLE_OLEDATA, 
                                                              LPQTOLE_OPTIONS, BOOL);

       // Call during document WM_CLOSE or WM_DESTROY processing
   BOOL       QTOLE_API QTOLE_ClosingDocWnd       (LPQTOLE_OLEDATA, LPQTOLE_OPTIONS);

       // Called during File menu popup initialization
   BOOL       QTOLE_API QTOLE_IsActiveObjectWnd   (LPQTOLE_OLEDATA, HWND, LPSTR);


       // Call during server WM_CLOSE or WM_DESTROY processing
   BOOL       QTOLE_API QTOLE_ClosingServerWnd    (LPQTOLE_OLEDATA, UINT); 

       // Call after exiting message loop
   QTOLE_ERR  QTOLE_API QTOLE_OLECleanUp          (LPQTOLE_OLEDATA);  

   #endif
