/* $Id: def_messages.h,v 1.15 2006/04/09 07:37:36 hurtta Exp $ */

/******************************************************************************
 *  The Elm (ME+) Mail System  -  $Revision: 1.15 $   $State: Exp $
 *
 *  Author: Kari Hurtta <hurtta+elm@posti.FMI.FI>
 *****************************************************************************/

#include "headers.h"
#include "misclib.h"
#include "mboxlib.h"
#include "mailerlib.h"
#include "me.h"

#if ANSI_C
struct MailboxView;
#endif

typedef void mt_init_mailbox P_((struct MailboxView *mbx));
typedef void mt_free_mailbox P_((struct MailboxView *mbx));
typedef void mt_add_mailbox_storage P_((struct MailboxView *mailbox,
					struct current_storage *storage));

/* Return 1 if redraw required */
typedef int mt_update_view_mailbox P_((struct MailboxView *mailbox));

typedef struct folder_info * mt_get_main_mailbox_folder P_((struct MailboxView *mailbox));

/* Can be called from signal handler */
typedef struct current_storage * mt_get_mailbox_storage P_((struct MailboxView *mailbox,
							    int i));

/* Can be called from signal handler */
typedef int mt_get_mailbox_storage_count P_((struct MailboxView *mailbox));

typedef struct header_rec * mt_give_header_mailbox P_((struct MailboxView *mailbox,
						       int index, 
						       struct folder_view *v));

typedef void mt_sort_mailbox_view P_((struct MailboxView *mailbox,
				      hdr_compare_func   *func));

/* Return 1 if succeed, 0 is fails --
   seeks to {header}->offset   (if ret_F set)
*/
typedef int mt_give_message_data_mailbox P_((struct MailboxView *mailbox,
					     int index,
					     struct header_rec **ret_header,
					     FILE              **ret_F,
					     struct counter_data *counter,
					     parse_mime_callback *parse_mime,
					     struct folder_view *v));


typedef void mt_write_mailbox_info P_((FILE *fp, struct MailboxView *mailbox,
				       int s, int cur_idx));
typedef struct string * mt_mailbox_title P_((struct MailboxView *mailbox));
typedef void mt_make_mailbox_view P_((struct MailboxView *mailbox));

typedef void mt_add_mailbox_digest P_((struct MailboxView *mailbox,
				       mime_t *list,
				       time_t received_time,
				       char *env_from,
				       FILE *F,
				       charset_t defcharset));


#define MAILBOXTYPE_magic       0xF502

struct mailbox_type {
    unsigned short            magic;      /* MAILBOXTYPE_magic */

    mt_init_mailbox                * mt_init_it;
    mt_free_mailbox                * mt_free_it;
    mt_add_mailbox_storage         * mt_add_it_storage;
    mt_update_view_mailbox         * mt_update_view_it;
    mt_get_main_mailbox_folder     * mt_get_main_it_folder;
    mt_get_mailbox_storage         * mt_get_it_storage;
    mt_get_mailbox_storage_count   * mt_get_it_storage_count;
    mt_give_header_mailbox         * mt_give_header_it;
    mt_sort_mailbox_view           * mt_sort_it_view;
    mt_give_message_data_mailbox   * mt_give_message_data_it;
    mt_write_mailbox_info          * mt_write_it_info;
    mt_mailbox_title               * mt_it_title;
    mt_make_mailbox_view           * mt_make_it_view;
    mt_add_mailbox_digest          * mt_add_it_digest;
};

#define STATUSTYPE_magic	0xF508

typedef char * mt_show_status_message P_((struct MailboxView *mailbox,
					  int index, 
					  struct folder_view *v));
typedef int   mt_ison_status_message  P_((struct MailboxView *mailbox,
					  int index, 
					  struct folder_view *v,
					  enum status_x t, int mask));
typedef int   mt_setf_status_message  P_((struct MailboxView *mailbox,
					  int index, 
					  struct folder_view *v,
					  enum status_x t, int mask));
typedef int   mt_clearf_status_message  P_((struct MailboxView *mailbox,
					    int index, 
					    struct folder_view *v,
					    enum status_x t, int mask));


extern struct status_type {
    unsigned short            magic;      /* STATUSTYPE_magic */


    mt_show_status_message   * mt_show_status_it;
    mt_ison_status_message   * mt_ison_status_it;
    mt_setf_status_message   * mt_setf_status_it;
    mt_clearf_status_message * mt_clearf_status_it;

} status_common;

#define MAILBOXVIEW_magic	0xF500

struct MailboxView {
    unsigned short            magic;      /* MAILBOXVIEW_magic */
    struct mailbox_type     * mailbox_type;
    struct status_type      * status_type;

    union {
	struct mv_storage           * storage;

	struct mv_digest            * digest;
	
	struct mv_partial           * partial;

	struct mv_canceldir         * canceldir;

	struct mv_duplicate         * duplicate;

	struct mv_thread            * one_thread;

	void                        * dummy;                      
    } u;

    struct folder_view      * view;
    int                       view_len;

    struct ThreadView       * thread_view;

    /* Values set by caller */
    int        current;
    int        selected;
    struct string           * mailbox_title;
};

extern void free_thread_view P_((struct ThreadView **thread_view));


typedef struct header_rec * sdt_give_header_s P_((struct sort_data *s,
						  struct folder_view *v));

#define SORTDATATYPE_magic      0xF503

struct sort_data_type {
    unsigned short            magic;      /* SORTDATATYPE_magic */

    sdt_give_header_s       * sdt_give_header;
};

/* Needed extra structure for sorting so passing of
   global data is not needed
*/
struct sort_data {
    struct sort_data_type  * sort_data_type;
    struct folder_view       w;
    struct ThreadView      * t;
    union {
	struct current_storage *mbx;
	struct current_digest  *dgt;
	struct partial_sort    *part;
	struct mv_canceldir    *canceldir;
	struct duplicate_sort  * dup;
	struct one_thread_sort * thread;
	void                   *dummy;
    } u;
};

extern struct MailboxView *give_canceldir P_((void));

/* messages.c */

extern struct MailboxView * malloc_view P_((struct mailbox_type *t));

/* status_common.c */

extern char *show_message_status P_((struct header_rec *hdr));

/*
 * Local Variables:
 *  mode:c
 *  c-basic-offset:4
 *  buffer-file-coding-system: iso-8859-1
 * End:
 */


syntax highlighted by Code2HTML, v. 0.9.1