/* Copyright 1997 Acorn Computers Ltd
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
/****************************************************************************
 * This source file was written by Acorn Computers Limited. It is part of   *
 * the toolbox library for writing desktop applications in C. It may be     *
 * used freely in the creation of programs for RISC OS.                     *
 *                                                                          *
 * Copyright  Acorn Computers Ltd, 1994                                    *
 *                                                                          *
 ***************************************************************************/



/*
 * Name        : saveas.h
 * Description : C veneers to the Methods provided by the saveas class
 */



#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
 *               const char *filename
 * Out         : None
 * Returns     : pointer to error block
 */

extern _kernel_oserror *saveas_file_save_completed ( unsigned int flags,
                                                     ObjectId saveas,
                                                     const 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
 *               const char *file_name
 * Out         : None
 * Returns     : pointer to error block
 */

extern _kernel_oserror *saveas_set_file_name ( unsigned int flags,
                                               ObjectId saveas,
                                               const 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
 *               const char *title
 * Out         : None
 * Returns     : pointer to error block
 */

extern _kernel_oserror *saveas_set_title ( unsigned int flags,
                                           ObjectId saveas,
                                           const 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
