/*
 * Name        : saveas.h
 * Description : C veneers to the Methods provided by the saveas class
 * Copyright   :  Pace Micro Technology, 1994-2000
 */



#ifndef __saveas_h
#define __saveas_h


#ifndef __kernel_h
#include "kernel.h"
#endif

#ifndef __toolbox_h
#include "toolbox.h"
#endif

#ifndef __window_h
#include "window.h"
#endif


/****************************************************************************
 * SaveAs Templates                                                         *
 ****************************************************************************/

/*-- flags --*/

#define SaveAs_GenerateShowEvent             0x00000001
#define SaveAs_GenerateHideEvent             0x00000002
#define SaveAs_ExcludeSelectionButton        0x00000004
#define SaveAs_AutomaticRAMTransfer          0x00000008
#define SaveAs_ClientSupportsRAMTransfer     0x00000010


/*-- templates --*/

typedef struct
{
  unsigned int  flags;
  char          *filename;
  int           filetype;
  char          *title;
  int           max_title;
  char          *window;
} SaveAsTemplate;


/****************************************************************************
 * SaveAs SWI Calls                                                         *
 ****************************************************************************/

#define SaveAs_SWIChunkBase    0x82bc0
#define SaveAs_ObjectClass     SaveAs_SWIChunkBase
#define SaveAs_ClassSWI        (SaveAs_SWIChunkBase + 0)
#define SaveAs_PostFilter      (SaveAs_SWIChunkBase + 1)
#define SaveAs_PreFilter       (SaveAs_SWIChunkBase + 2)

/****************************************************************************
 * SaveAs SWI constants                                                     *
 ****************************************************************************/

#define SaveAs_Directory                0x1000
#define SaveAs_Application              0x2000
#define SaveAs_OnlySaveSelection        0x00000001
#define SaveAs_SuccessfulSave           0x00000001

/****************************************************************************
 * SaveAs Methods                                                           *
 ****************************************************************************/

#define SaveAs_GetWindowId             0
#define SaveAs_SetTitle                1
#define SaveAs_GetTitle                2
#define SaveAs_SetFileName             3
#define SaveAs_GetFileName             4
#define SaveAs_SetFileType             5
#define SaveAs_GetFileType             6
#define SaveAs_SetFileSize             7
#define SaveAs_GetFileSize             8
#define SaveAs_SelectionAvailable      9
#define SaveAs_SetDataAddress         10
#define SaveAs_BufferFilled           11
#define SaveAs_FileSaveCompleted      12


/****************************************************************************
 * SaveAs Toolbox Events                                                    *
 ****************************************************************************/

#define SaveAs_AboutToBeShown     SaveAs_SWIChunkBase
#define SaveAs_DialogueCompleted  (SaveAs_SWIChunkBase + 1)
#define SaveAs_SaveToFile         (SaveAs_SWIChunkBase + 2)
#define SaveAs_FillBuffer         (SaveAs_SWIChunkBase + 3)
#define SaveAs_SaveCompleted      (SaveAs_SWIChunkBase + 4)


typedef struct
{
  ToolboxEventHeader hdr;
  int                show_type;
  union
  {
    TopLeft               pos;
    WindowShowObjectBlock full;
  } info;
} SaveAsAboutToBeShownEvent;


typedef struct
{
  ToolboxEventHeader  hdr;
} SaveAsDialogueCompletedEvent;

typedef struct
{
  ToolboxEventHeader  hdr;
  char                filename [212];
} SaveAsSaveToFileEvent;


typedef struct
{
  ToolboxEventHeader  hdr;
  int                 size;
  char                *address;
  int                 no_bytes;
} SaveAsFillBufferEvent;

#define SaveAs_SelectionBeingSaved      0x00000001

typedef struct
{
  ToolboxEventHeader  hdr;
  int                 wimp_message_no;
  char                filename [208];
} SaveAsSaveCompletedEvent;

#define SaveAs_SelectionSaved           0x00000001
#define SaveAs_DestinationSafe          0x00000002


/****************************************************************************
 * The following functions provide veneers to the methods that are          *
 * associated with this particular class.  Please read the User Interface   *
 * Toolbox manual for more detailed information on their functionality.     *
 ****************************************************************************/



#ifdef __cplusplus
  extern "C" {
#endif


/*
 * Name        : saveas_file_save_completed
 * Description : Confirms whether a file save was completed successfully for the saveas object 
 * In          : unsigned int flags
 *               ObjectId saveas
 *               char *filename
 * Out         : None
 * Returns     : pointer to error block
 */

extern _kernel_oserror *saveas_file_save_completed ( unsigned int flags,
                                                     ObjectId saveas,
                                                     char *filename
                                                   );


/*
 * Name        : saveas_buffer_filled
 * Description : Confirms that a buffer has been filled for the saveas object 
 * In          : unsigned int flags
 *               ObjectId saveas
 *               void *buffer
 *               int bytes_written
 * Out         : None
 * Returns     : pointer to error block
 */

extern _kernel_oserror *saveas_buffer_filled ( unsigned int flags,
                                               ObjectId saveas,
                                               void *buffer,
                                               int bytes_written
                                             );


/*
 * Name        : saveas_set_data_address
 * Description : Sets the address of the data (and selection) for the saveas object 
 * In          : unsigned int flags
 *               ObjectId saveas
 *               void *data
 *               int data_size
 *               void *selection
 *               int selection_size
 * Out         : None
 * Returns     : pointer to error block
 */

extern _kernel_oserror *saveas_set_data_address ( unsigned int flags,
                                                  ObjectId saveas,
                                                  void *data,
                                                  int data_size,
                                                  void *selection,
                                                  int selection_size
                                                );


/*
 * Name        : saveas_selection_available
 * Description : Indicates whether there is a selection available for the saveas object 
 * In          : unsigned int flags
 *               ObjectId saveas
 *               int selection
 * Out         : None
 * Returns     : pointer to error block
 */

extern _kernel_oserror *saveas_selection_available ( unsigned int flags,
                                                     ObjectId saveas,
                                                     int selection
                                                   );


/*
 * Name        : saveas_get_file_size
 * Description : Gets the estimated file size for the specified  
 * In          : unsigned int flags
 *               ObjectId saveas
 * Out         : int *file_size
 * Returns     : pointer to error block
 */

extern _kernel_oserror *saveas_get_file_size ( unsigned int flags,
                                               ObjectId saveas,
                                               int *file_size
                                             );


/*
 * Name        : saveas_set_file_size
 * Description : Sets the estimated file size for the specified saveas object 
 * In          : unsigned int flags
 *               ObjectId saveas
 *               int file_size
 * Out         : None
 * Returns     : pointer to error block
 */

extern _kernel_oserror *saveas_set_file_size ( unsigned int flags,
                                               ObjectId saveas,
                                               int file_size
                                             );


/*
 * Name        : saveas_get_file_type
 * Description : Gets the filetype for the specified saveas object 
 * In          : unsigned int flags
 *               ObjectId saveas
 * Out         : int *file_type
 * Returns     : pointer to error block
 */

extern _kernel_oserror *saveas_get_file_type ( unsigned int flags,
                                               ObjectId saveas,
                                               int *file_type
                                             );


/*
 * Name        : saveas_set_file_type
 * Description : Sets the filetype for the specified saveas object 
 * In          : unsigned int flags
 *               ObjectId saveas
 *               int file_type
 * Out         : None
 * Returns     : pointer to error block
 */

extern _kernel_oserror *saveas_set_file_type ( unsigned int flags,
                                               ObjectId saveas,
                                               int file_type
                                             );


/*
 * Name        : saveas_get_file_name
 * Description : Gets the filename for the specified saveas object 
 * In          : unsigned int flags
 *               ObjectId saveas
 *               char *buffer
 *               int buff_size
 * Out         : int *nbytes
 * Returns     : pointer to error block
 */

extern _kernel_oserror *saveas_get_file_name ( unsigned int flags,
                                               ObjectId saveas,
                                               char *buffer,
                                               int buff_size,
                                               int *nbytes
                                             );


/*
 * Name        : saveas_set_file_name
 * Description : Sets the filename for the specified saveas object 
 * In          : unsigned int flags
 *               ObjectId saveas
 *               char *file_name
 * Out         : None
 * Returns     : pointer to error block
 */

extern _kernel_oserror *saveas_set_file_name ( unsigned int flags,
                                               ObjectId saveas,
                                               char *file_name
                                             );


/*
 * Name        : saveas_get_title
 * Description : Gets the title for the specified saveas object 
 * In          : unsigned int flags
 *               ObjectId saveas
 *               char *buffer
 *               int buff_size
 * Out         : int *nbytes
 * Returns     : pointer to error block
 */

extern _kernel_oserror *saveas_get_title ( unsigned int flags,
                                           ObjectId saveas,
                                           char *buffer,
                                           int buff_size,
                                           int *nbytes
                                         );


/*
 * Name        : saveas_set_title
 * Description : Sets the title for the specified saveas object 
 * In          : unsigned int flags
 *               ObjectId saveas
 *               char *title
 * Out         : None
 * Returns     : pointer to error block
 */

extern _kernel_oserror *saveas_set_title ( unsigned int flags,
                                           ObjectId saveas,
                                           char *title
                                         );


/*
 * Name        : saveas_get_window_id
 * Description : Gets the id of the underlying window of object for the saveas object 
 * In          : unsigned int flags
 *               ObjectId saveas
 * Out         : ObjectId *window
 * Returns     : pointer to error block
 */

extern _kernel_oserror *saveas_get_window_id ( unsigned int flags,
                                               ObjectId saveas,
                                               ObjectId *window
                                             );


#ifdef __cplusplus
  }
#endif


#endif
