aboutsummaryrefslogtreecommitdiffstats
path: root/mail/folder-browser.h
blob: 12d21cd5268e375bca08f26707616c95718bf921 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */


#ifndef _FOLDER_BROWSER_H_
#define _FOLDER_BROWSER_H_

#include <gtk/gtktable.h>
#include "camel/camel-stream.h"
#include <bonobo/bonobo-property-bag.h>
#include <bonobo/bonobo-ui-component.h>
#include <widgets/misc/e-filter-bar.h>
#include "widgets/menus/gal-view-menus.h"
#include "filter/filter-rule.h"
#include "filter/filter-context.h" /*eek*/
#include "message-list.h"
#include "mail-display.h"
#include "mail-types.h"
#include "shell/Evolution.h"

#define FOLDER_BROWSER_TYPE        (folder_browser_get_type ())
#define FOLDER_BROWSER(o)          (G_TYPE_CHECK_INSTANCE_CAST ((o), FOLDER_BROWSER_TYPE, FolderBrowser))
#define FOLDER_BROWSER_CLASS(k)    (G_TYPE_CHECK_CLASS_CAST ((k), FOLDER_BROWSER_TYPE, FolderBrowserClass))
#define IS_FOLDER_BROWSER(o)       (G_TYPE_CHECK_INSTANCE_TYPE ((o), FOLDER_BROWSER_TYPE))
#define IS_FOLDER_BROWSER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), FOLDER_BROWSER_TYPE))

#define FB_DEFAULT_CHARSET _("Default")

#define FOLDER_BROWSER_IS_DESTROYED(fb) (!fb || !fb->message_list || !fb->mail_display || !fb->folder)

typedef enum _FolderBrowserSelectionState {
    FB_SELSTATE_NONE,
    FB_SELSTATE_SINGLE,
    FB_SELSTATE_MULTIPLE,
    FB_SELSTATE_UNDEFINED
} FolderBrowserSelectionState;

struct  _FolderBrowser {
    GtkTable parent;
    
    BonoboPropertyBag *properties;
    
    GNOME_Evolution_Shell shell;
    GNOME_Evolution_ShellView shell_view;
    
    BonoboUIComponent *uicomp;
    
    /*
     * The current URI being displayed by the FolderBrowser
     */
    char        *uri;
    CamelFolder *folder;
    int          unread_count; /* last known unread message count */
    
    /* async loading stuff */
    char        *loading_uid;  /* what uid am i loading now */
    char        *pending_uid;  /* what uid should i load next */
    char        *new_uid;      /* place to save the next uid during idle timeout */
    char        *loaded_uid;   /* what we have loaded */
    guint        loading_id;
    guint        seen_id;
    
    gulong       paned_resize_id;
    
    /* a folder we are expunging, dont use other than to compare the pointer value */
    CamelFolder *expunging;
    int expunge_mlfocussed; /* true if the ml was focussed before we expunged */

    MessageList *message_list;
    MailDisplay *mail_display;
    GtkWidget   *vpaned;
    
    EFilterBar  *search;
    FilterRule  *search_full; /* if we have a full search active */

    struct _EMeta *meta;    /* various per-folder meta-data */
    
    guint32 preview_shown  : 1;
    guint32 threaded       : 1;
    guint32 pref_master    : 1;
    
    FolderBrowserSelectionState selection_state;
    GSList *sensitize_changes;
    GHashTable *sensitise_state; /* the last sent sensitise state, to avoid much bonobo overhead */
    int sensitize_timeout_id;
    int update_status_bar_idle_id;
    
    /* View instance and the menu handler object */
    GalViewInstance *view_instance;
    GalViewMenus *view_menus;
    
    GtkWidget *invisible;
    GByteArray *clipboard_selection;
    
    /* for async events */
    struct _MailAsyncEvent *async_event;
    
    int get_id;     /* for getting folder op */
    
    /* info used by popup for filter/vfolder */
    struct _popup_filter_data *popup;
};

typedef struct {
    GtkTableClass parent_class;
    
    /* signals */
    void (*folder_loaded)  (FolderBrowser *fb, const char *uri);
    void (*message_loaded) (FolderBrowser *fb, const char *uid);
} FolderBrowserClass;

struct fb_ondemand_closure {
    FilterRule *rule;
    FolderBrowser *fb;
    gchar *path;
};

GtkType    folder_browser_get_type             (void);
GtkWidget *folder_browser_new                  (const GNOME_Evolution_Shell  shell,
                        const char *uri);

void       folder_browser_set_folder           (FolderBrowser *fb, CamelFolder *folder, const char *uri);

void       folder_browser_set_ui_component     (FolderBrowser *fb, BonoboUIComponent *uicomp);
void       folder_browser_set_shell_view       (FolderBrowser *fb, GNOME_Evolution_ShellView shell_view);

void       folder_browser_set_message_preview  (FolderBrowser         *folder_browser,
                        gboolean               show_message_preview);
void       folder_browser_clear_search         (FolderBrowser         *fb);

void       folder_browser_cut                  (GtkWidget *widget, FolderBrowser *fb);
void       folder_browser_copy                 (GtkWidget *widget, FolderBrowser *fb);
void       folder_browser_paste                (GtkWidget *widget, FolderBrowser *fb);

void       folder_browser_reload               (FolderBrowser *fb);

/* callbacks for functions on the folder-browser */
void vfolder_subject   (GtkWidget *w, FolderBrowser *fb);
void vfolder_sender    (GtkWidget *w, FolderBrowser *fb);
void vfolder_recipient (GtkWidget *w, FolderBrowser *fb);
void vfolder_mlist     (GtkWidget *w, FolderBrowser *fb);

void filter_subject    (GtkWidget *w, FolderBrowser *fb);
void filter_sender     (GtkWidget *w, FolderBrowser *fb);
void filter_recipient  (GtkWidget *w, FolderBrowser *fb);
void filter_mlist      (GtkWidget *w, FolderBrowser *fb);

void hide_read(GtkWidget *w, FolderBrowser *fb);
void hide_deleted(GtkWidget *w, FolderBrowser *fb);
void hide_selected(GtkWidget *w, FolderBrowser *fb);
void hide_none(GtkWidget *w, FolderBrowser *fb);
void hide_subject(GtkWidget *w, FolderBrowser *fb);
void hide_sender(GtkWidget *w, FolderBrowser *fb);

void folder_browser_toggle_preview (BonoboUIComponent           *component,
                    const char                  *path,
                    Bonobo_UIComponent_EventType type,
                    const char                  *state,
                    gpointer                     user_data);

void folder_browser_toggle_threads (BonoboUIComponent           *component,
                    const char                  *path,
                    Bonobo_UIComponent_EventType type,
                    const char                  *state,
                    gpointer                     user_data);

void folder_browser_toggle_hide_deleted (BonoboUIComponent           *component,
                     const char                  *path,
                     Bonobo_UIComponent_EventType type,
                     const char                  *state,
                     gpointer                     user_data);

void folder_browser_toggle_caret_mode (BonoboUIComponent           *component,
                       const char                  *path,
                       Bonobo_UIComponent_EventType type,
                       const char                  *state,
                       gpointer                     user_data);

void folder_browser_set_message_display_style (BonoboUIComponent           *component,
                           const char                  *path,
                           Bonobo_UIComponent_EventType type,
                           const char                  *state,
                           gpointer                     user_data);

void folder_browser_charset_changed (BonoboUIComponent *component,
                     const char *path,
                     Bonobo_UIComponent_EventType type,
                     const char *state,
                     gpointer user_data);

gboolean folder_browser_is_drafts (FolderBrowser *fb);
gboolean folder_browser_is_sent   (FolderBrowser *fb);
gboolean folder_browser_is_outbox (FolderBrowser *fb);

#endif /* _FOLDER_BROWSER_H_ */