Added new filter in folder view to hide mandatory folders.
[modest] / src / widgets / modest-folder-view.h
1 /* Copyright (c) 2006, Nokia Corporation
2  * All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions are
6  * met:
7  *
8  * * Redistributions of source code must retain the above copyright
9  *   notice, this list of conditions and the following disclaimer.
10  * * Redistributions in binary form must reproduce the above copyright
11  *   notice, this list of conditions and the following disclaimer in the
12  *   documentation and/or other materials provided with the distribution.
13  * * Neither the name of the Nokia Corporation nor the names of its
14  *   contributors may be used to endorse or promote products derived from
15  *   this software without specific prior written permission.
16  *
17  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
18  * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
19  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
20  * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
21  * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
22  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
23  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
24  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
25  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
26  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28  */
29
30 #ifndef __MODEST_FOLDER_VIEW_H__
31 #define __MODEST_FOLDER_VIEW_H__
32
33 #include <glib-object.h>
34 #include <tny-gtk-account-list-model.h>
35 #include <tny-account-store.h>
36 #include <modest-tny-account-store.h>
37
38 G_BEGIN_DECLS
39
40 /* convenience macros */
41 #define MODEST_TYPE_FOLDER_VIEW             (modest_folder_view_get_type())
42 #define MODEST_FOLDER_VIEW(obj)             (G_TYPE_CHECK_INSTANCE_CAST((obj),MODEST_TYPE_FOLDER_VIEW,ModestFolderView))
43 #define MODEST_FOLDER_VIEW_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST((klass),MODEST_TYPE_FOLDER_VIEW,ModestFolderViewClass))
44 #define MODEST_IS_FOLDER_VIEW(obj)          (G_TYPE_CHECK_INSTANCE_TYPE((obj),MODEST_TYPE_FOLDER_VIEW))
45 #define MODEST_IS_FOLDER_VIEW_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE((klass),MODEST_TYPE_FOLDER_VIEW))
46 #define MODEST_FOLDER_VIEW_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS((obj),MODEST_TYPE_FOLDER_VIEW,ModestFolderViewClass))
47
48 typedef enum _ModestFolderViewStyle {
49         MODEST_FOLDER_VIEW_STYLE_SHOW_ALL,
50         MODEST_FOLDER_VIEW_STYLE_SHOW_ONE
51 } ModestFolderViewStyle;
52
53 typedef enum _ModestFolderViewCellStyle {
54         MODEST_FOLDER_VIEW_CELL_STYLE_DEFAULT,
55         MODEST_FOLDER_VIEW_CELL_STYLE_COMPACT
56 } ModestFolderViewCellStyle;
57
58 typedef enum _ModestFolderViewFilter {
59         MODEST_FOLDER_VIEW_FILTER_NONE = 0,
60         MODEST_FOLDER_VIEW_FILTER_CAN_HAVE_FOLDERS = 1 << 0,
61         MODEST_FOLDER_VIEW_FILTER_HIDE_MANDATORY_FOLDERS = 1 << 1,
62 } ModestFolderViewFilter;
63
64 typedef struct _ModestFolderView      ModestFolderView;
65 typedef struct _ModestFolderViewClass ModestFolderViewClass;
66
67 struct _ModestFolderView {
68          GtkTreeView parent;
69         /* insert public members, if any */
70 };
71
72 struct _ModestFolderViewClass {
73         GtkTreeViewClass parent_class;
74
75         /* emitted when a folder is selected or unselected */
76         void     (*folder_selection_changed) (ModestFolderView* self,
77                                               TnyFolderStore *folder,
78                                               gboolean selected,
79                                               gpointer user_data);
80
81         void     (*folder_display_name_changed) (ModestFolderView* self,
82                                                  const gchar *display_name,
83                                                  gpointer user_data);
84
85         void     (*folder_activated) (ModestFolderView *self,
86                                       TnyFolderStore *folder,
87                                       gpointer userdata);
88 };
89
90 /**
91  * modest_folder_view_get_type:
92  * 
93  * get the GType for ModestFolderView
94  *  
95  * Returns: the GType
96  */
97 GType        modest_folder_view_get_type        (void) G_GNUC_CONST;
98
99
100
101 /**
102  * modest_folder_view_new:
103  * @query: a #TnyFolderStoreQuery that specifies the folders to show
104  * 
105  * create a new #ModestFolderView instance
106  *  
107  * Returns: a new #GtkWidget (a #GtkTreeView subclass)
108  */
109 GtkWidget*    modest_folder_view_new            (TnyFolderStoreQuery *query);
110
111 /**
112  * modest_folder_view_set_title:
113  * @self: a ModestFolderView instance
114  * @title: the new title
115  * 
116  * set the title for the folder view; if title is NULL, the title column
117  * header will be hidden
118  */
119 void          modest_folder_view_set_title       (ModestFolderView *self, 
120                                                   const gchar *title);
121
122
123 /**
124  * modest_folder_view_get_selected:
125  * @self: a #ModestFolderView
126  * 
127  * gets a new reference to the #TnyFolderStore that is already
128  * selected. The caller must free this reference
129  * 
130  * Returns: the selected #TnyFolderStore or NULL if none is selected
131  **/
132 TnyFolderStore*    modest_folder_view_get_selected    (ModestFolderView *self);
133
134
135 /**
136  * modest_folder_view_update_model:
137  * @self: a #ModestFolderView
138  * 
139  * refresh the current model
140  * 
141  * Returns: TRUE if the model was succesfully updated
142  **/
143 gboolean      modest_folder_view_update_model    (ModestFolderView *self,
144                                                   TnyAccountStore *account_store);
145
146 /**
147  * modest_folder_view_set_style:
148  * @self: a #ModestFolderView
149  * @style: a #ModestFolderViewStyle
150  * 
151  * Sets the folder view style. There are currently two available,
152  * MODEST_FOLDER_VIEW_STYLE_SHOW_ALL shows all the active accounts,
153  * and MODEST_FOLDER_VIEW_STYLE_SHOW_ONE (Maemo style) shows the local
154  * account the mmc and only one of the available active server
155  * accounts
156
157  **/
158 void         modest_folder_view_set_style         (ModestFolderView *self,
159                                                    ModestFolderViewStyle style);
160
161 /**
162  * modest_folder_view_set_account_id_of_visible_server_account:
163  * @self: a #ModestFolderView
164  * @account_id: the remote server account id
165  * 
166  * sets the server account id (value returned by tny_account_get_id())
167  * to the string passed as argument. The remote server with the
168  * specified id will be the unique visible account if the folder view
169  * is configured in MODEST_FOLDER_VIEW_STYLE_SHOW_ONE
170  **/
171 void         modest_folder_view_set_account_id_of_visible_server_account (ModestFolderView *self,
172                                                                           const gchar *account_id);
173
174 /**
175  * modest_folder_view_get_account_id_of_visible_server_account:
176  * @self: a #ModestFolderView
177  * 
178  * gets the account id of the currently visible server account id
179  * 
180  * Return value: the visible server account id or NULL if none set
181  **/
182 const gchar* modest_folder_view_get_account_id_of_visible_server_account (ModestFolderView *self);
183
184
185 void         modest_folder_view_select_first_inbox_or_local  (ModestFolderView *self);
186
187 /**
188  * modest_folder_view_copy_selection:
189  * @self: a #ModestFolderView
190  * 
191  * Stores a #TnyList of selected folders in the own clibpoard of 
192  * @self folder view.
193  **/
194 void modest_folder_view_copy_selection (ModestFolderView *folder_view);
195
196 /**
197  * modest_folder_view_cut_selection:
198  * @self: a #ModestFolderView
199  * 
200  * Stores a #TnyList of selected folders in the own clibpoard of 
201  * @self folder view and filter them into folders tree model to
202  * hide these rows in treeview.
203  **/
204 void modest_folder_view_cut_selection (ModestFolderView *folder_view);
205
206
207 /**
208  * modest_folder_view_select_folder
209  * @self: a #ModestFolderView
210  * @folder: a #TnyFolder
211  * @after_change: should we select first change to the view (TRUE), or just now (FALSE)
212  *
213  * select the given TnyFolder in the folder;
214  * return TRUE if it succeeded, FALSE otherwise.
215  **/
216 gboolean modest_folder_view_select_folder (ModestFolderView *self, TnyFolder *folder, gboolean after_change);
217
218 /**
219  * modest_folder_view_paste_selection:
220  * @self: a #ModestFolderView
221  * @folders: ouput parameter with a #TnyList of folders which will be returned.
222  * @delete: output parameter with indication about delete or not the selected folders. 
223  * 
224  * Gets the selected folders to copy/cut.
225  **/
226 void modest_folder_view_paste_selection (ModestFolderView *folder_view, TnyList **folders, gboolean *delete);
227
228 /*
229  * modest_folder_view_show_non_move_folders:
230  * @self: a #ModestFolderView
231  * @show: show or hide the folders
232  * 
233  * Whether to show folders where no messages can be moved to 
234  **/
235 void modest_folder_view_show_non_move_folders (ModestFolderView *folder_view, gboolean show);
236
237 /*
238  * modest_folder_view_copy_model:
239  * @folder_view_src: a #ModestFolderView
240  * @folder_view_dst: a #ModestFolderView
241  * 
242  * Get model from @folder_view_src and builds a new 
243  * #GtkTreeFilterModel object for that model. This copied
244  * model will be asigned to @folder_view_dst. 
245  **/
246 void modest_folder_view_copy_model (ModestFolderView *folder_view_src, ModestFolderView *folder_view_dst);
247
248 /*
249  * modest_folder_disable_next_folder_selection:
250  * @folder_view: a #ModestFolderView
251  * 
252  * Checks if folder_to_select private field is set and 
253  * unref it in this case, assigning it to NULL to avoid 
254  * next call to on_row_inserted_maybe_select_folder does 
255  * not select any folder.
256  * 
257  **/
258 void modest_folder_view_disable_next_folder_selection (ModestFolderView *self);
259
260 /**
261  * modest_folder_view_set_cell_style:
262  * @self: a #ModestFolderView
263  * @cell_style: a #ModestFolderViewCellStyle
264  *
265  * Sets the way cells are shown
266  */
267 void modest_folder_view_set_cell_style (ModestFolderView *self,
268                                         ModestFolderViewCellStyle cell_style);
269
270 /**
271  * modest_folder_view_filter:
272  * @self: a #ModestFolderView
273  * @filter: a filter mask to be applied to files
274  *
275  * sets the special filter to be applied (affects visibility of items).
276  * It's a mask, and filters applied are applied with an AND.
277  */
278 void modest_folder_view_set_filter (ModestFolderView *self,
279                                     ModestFolderViewFilter filter);
280
281 G_END_DECLS
282
283 #endif /* __MODEST_FOLDER_VIEW_H__ */