2007-06-14 Murray Cumming <murrayc@murrayc.com>
[modest] / src / widgets / modest-header-view.h
index 265f0fb..ac213ff 100644 (file)
 #define __MODEST_HEADER_VIEW_H__
 
 #include <tny-folder.h>
+#include <tny-folder-change.h>
 #include <tny-gtk-account-list-model.h>
 #include <tny-msg.h>
 #include <tny-header.h>
 #include <tny-gtk-header-list-model.h>
+#include "modest-mail-operation.h"
 
 G_BEGIN_DECLS
 
@@ -55,25 +57,31 @@ struct _ModestHeaderView {
 };
 
 #define MODEST_HEADER_VIEW_COLUMN    "header-view-column"
+#define MODEST_HEADER_VIEW_FLAG_SORT "header-view-flags-sort"
 
 typedef enum _ModestHeaderViewColumn {
-       MODEST_HEADER_VIEW_COLUMN_FROM            = 0,
-       MODEST_HEADER_VIEW_COLUMN_TO,
-       MODEST_HEADER_VIEW_COLUMN_SUBJECT,
-       MODEST_HEADER_VIEW_COLUMN_SENT_DATE,
-       MODEST_HEADER_VIEW_COLUMN_RECEIVED_DATE,
-       MODEST_HEADER_VIEW_COLUMN_MSGTYPE,
-       MODEST_HEADER_VIEW_COLUMN_ATTACH,
+       MODEST_HEADER_VIEW_COLUMN_FROM                  = 0,
+       MODEST_HEADER_VIEW_COLUMN_TO                    = 1,
+       MODEST_HEADER_VIEW_COLUMN_SUBJECT               = 2,
+       MODEST_HEADER_VIEW_COLUMN_SENT_DATE             = 3,
+       MODEST_HEADER_VIEW_COLUMN_RECEIVED_DATE         = 4,
+       MODEST_HEADER_VIEW_COLUMN_MSGTYPE               = 5,
+       MODEST_HEADER_VIEW_COLUMN_ATTACH                = 6,
+       MODEST_HEADER_VIEW_COLUMN_SIZE                  = 7,
+       MODEST_HEADER_VIEW_COLUMN_STATUS                = 8,
 
        /*
         * these two are for compact display on small devices,
         * with two line display with all relevant headers
         */
-       MODEST_HEADER_VIEW_COLUMN_COMPACT_HEADER_IN,  /* incoming mail */
-       MODEST_HEADER_VIEW_COLUMN_COMPACT_HEADER_OUT, /* outgoing mail */
-       
-       MODEST_HEADER_VIEW_COLUMN_NUM
+       MODEST_HEADER_VIEW_COLUMN_COMPACT_FLAG          = 9, /* priority and attachments */
+       MODEST_HEADER_VIEW_COLUMN_COMPACT_HEADER_IN     = 10, /* incoming mail */
+       MODEST_HEADER_VIEW_COLUMN_COMPACT_HEADER_OUT    = 11,/* outgoing mail */
+       MODEST_HEADER_VIEW_COLUMN_COMPACT_SENT_DATE     = 12,
+       MODEST_HEADER_VIEW_COLUMN_COMPACT_RECEIVED_DATE = 13,
 
+       MODEST_HEADER_VIEW_COLUMN_NUM
+       
 } ModestHeaderViewColumn;
 
 /*
@@ -81,8 +89,10 @@ typedef enum _ModestHeaderViewColumn {
  * to make a small-device specific display
  */
 typedef enum _ModestHeaderViewStyle {
-       MODEST_HEADER_VIEW_STYLE_SHOW_HEADERS = 0x01,
-       MODEST_HEADER_VIEW_STYLE_NORMAL       = 0x02,
+       MODEST_HEADER_VIEW_STYLE_DETAILS   = 0, /* many columns, single line, col headers visible */
+       MODEST_HEADER_VIEW_STYLE_TWOLINES  = 1, /* two-line headers, col headers invisible */
+       
+       MODEST_HEADER_VIEW_STYLE_NUM    
 } ModestHeaderViewStyle;
 
 typedef enum _ModestItemType {
@@ -92,15 +102,6 @@ typedef enum _ModestItemType {
 } ModestItemType;
 
 
-typedef enum _ModestHeaderViewState {
-       MODEST_HEADER_VIEW_STATE_IS_EMPTY               = 0x01,
-       MODEST_HEADER_VIEW_STATE_HAS_CURSOR             = 0x02,
-       MODEST_HEADER_VIEW_STATE_HAS_SELECTION          = 0x04,
-       MODEST_HEADER_VIEW_STATE_HAS_MULTIPLE_SELECTION = 0x08,
-       MODEST_HEADER_VIEW_STATE_AT_FIRST_ITEM          = 0x0f,
-       MODEST_HEADER_VIEW_STATE_AT_LAST_ITEM           = 0x10
-} ModestHeaderViewState;
-
 struct _ModestHeaderViewClass {
        GtkTreeViewClass parent_class;
 
@@ -111,13 +112,15 @@ struct _ModestHeaderViewClass {
        void (*item_not_found) (ModestHeaderView* self,
                                ModestItemType type,
                                gpointer user_data);
-       
-       /* msg == NULL implies that the operation is finished, ie.
-        * the progress indictation can be hidden */
-       void (*status_update) (ModestHeaderView* self,
-                              const gchar* msg,
-                              gint num, gint total,
-                              gpointer user_data);
+
+       void (*header_activated) (ModestHeaderView* self,
+                                 TnyHeader *header,
+                                 gpointer user_data);
+
+       void (*msg_count_changed) (ModestHeaderView* self,
+                                  TnyFolder *folder,
+                                  TnyFolderChange *change,
+                                  gpointer user_data);
 };
 
 /**
@@ -133,7 +136,6 @@ GType        modest_header_view_get_type    (void) G_GNUC_CONST;
 /**
  * modest_header_view_new:
  * @folder: a TnyMsgFolder object
- * @columns: a list of ModestHeaderViewColumn
  * @style: a ModestHeaderViewColumn with the style of this listview
  *  (  MODEST_HEADER_VIEW_STYLE_NORMAL or MODEST_HEADER_VIEW_STYLE_COMPACT)
  * 
@@ -142,7 +144,6 @@ GType        modest_header_view_get_type    (void) G_GNUC_CONST;
  * Returns: a new GtkWidget (a GtkTreeView-subclass)
  */
 GtkWidget*   modest_header_view_new        (TnyFolder *folder,
-                                           const GList *columns,
                                            ModestHeaderViewStyle style);
 
 /**
@@ -151,14 +152,11 @@ GtkWidget*   modest_header_view_new        (TnyFolder *folder,
  * @folder: a TnyFolder object
  * 
  * set the folder for this ModestHeaderView
- *  
- * Returns: TRUE if it succeeded, FALSE otherwise
  */
-gboolean     modest_header_view_set_folder (ModestHeaderView *self,
-                                           TnyFolder *folder);
-
-
-
+void         modest_header_view_set_folder (ModestHeaderView *self,
+                                           TnyFolder *folder,
+                                           RefreshAsyncUserCallback callback,
+                                           gpointer user_data);
 
 /**
  * modest_header_view_get_folder:
@@ -174,14 +172,16 @@ TnyFolder *modest_header_view_get_folder (ModestHeaderView *self);
 /**
  * modest_header_view_set_columns:
  * @self: a ModestHeaderView instance
- * @columns: a list of ModestHeaderViewColumn
+ * @columns: a list of gint ModestHeaderViewColumn column IDs, using GINT_TO_POINTER() and GPOINTER_TO_INT().
+ * @type: #TnyFolderType type
  * 
  * set the columns for this ModestHeaderView.
  *  
  * Returns: TRUE if it succeeded, FALSE otherwise
  */
 gboolean modest_header_view_set_columns (ModestHeaderView *self,
-                                        const GList *columns);
+                                        const GList *columns,
+                                        TnyFolderType type);
 /**
  * modest_header_view_get_columns:
  * @self: a ModestHeaderView instance
@@ -191,24 +191,10 @@ gboolean modest_header_view_set_columns (ModestHeaderView *self,
  * with g_object_get_data MODEST_HEADER_VIEW_COLUMN (#define),
  * and which contains the corresponding ModestHeaderViewColumn
  *  
- * Returns: newly allocated list of column ids, or NULL in case of no columns or error
+ * Returns: newly allocated list of #GtkTreeViewColumns objects, or NULL in case of no columns or error
  * You must free the list with g_list_free
  */
 GList*  modest_header_view_get_columns (ModestHeaderView *self);
-       
-
-
-/**
- * modest_header_view_get_state
- * @self: a ModestHeaderView instance
- * 
- * get the state for this header view; see the ModestHeaderViewState enum
- * for possible values.
- * 
- * Returns: the state for this header view
- */
-ModestHeaderViewState modest_header_view_get_state (ModestHeaderView *self);
-
 
 
 /**
@@ -233,13 +219,12 @@ gboolean   modest_header_view_set_style (ModestHeaderView *self,
  */
 ModestHeaderViewStyle   modest_header_view_get_style (ModestHeaderView *self);
 
-
-
 /**
  * modest_header_view_get_selected_headers:
  * @self: a ModestHeaderView instance
  * 
- * get the list of the currently selected TnyHeader's
+ * get the list of the currently selected TnyHeader's. The list and
+ * the headers should be freed by the caller
  *  
  * Returns: the list with the currently selected headers
  */
@@ -247,12 +232,35 @@ TnyList* modest_header_view_get_selected_headers (ModestHeaderView *self);
 
 
 /**
+ * modest_header_view_is_empty:
+ * @self: a valid ModestHeaderView instance
+ * 
+ * see if this header view is empty; use this function instead of
+ * using the GtkTreeView parent directly, as 'empty' in this case
+ * may mean that there is one "This is empty"-message, and of course
+ * GtkTreeView then thinks it is *not* empty
+ *  
+ * Returns: TRUE if the header view is empty, FALSE otherwise
+ */
+gboolean  modest_header_view_is_empty (ModestHeaderView *self);
+
+
+
+/**
  * modest_header_view_select_next:
  * @self: a #ModestHeaderView
  * 
  * Selects the header next to the current selected one
  **/
-void     modest_header_view_select_next          (ModestHeaderView *self);
+void         modest_header_view_select_next          (ModestHeaderView *self);
+
+/**
+ * modest_header_view_select_prev:
+ * @self: a #ModestHeaderView
+ * 
+ * Selects the previous header of the current selected one
+ **/
+void         modest_header_view_select_prev          (ModestHeaderView *self);
 
 
 /* PROTECTED method. It's useful when we want to force a given
@@ -263,8 +271,66 @@ void
 _modest_header_view_change_selection (GtkTreeSelection *selection,
                                      gpointer user_data);
 
+/**
+ * modest_header_view_get_sort_column_id:
+ * @self: a #ModestHeaderView
+ * @type: #TnyFolderType type
+ * 
+ * Gets the selected logical columnd id for sorting.
+ **/
+gint
+modest_header_view_get_sort_column_id (ModestHeaderView *self, TnyFolderType type);
+
+/**
+ * modest_header_view_get_sort_type:
+ * @self: a #ModestHeaderView
+ * @type: #TnyFolderType type
+ * 
+ * Gets the selected sort type.
+ **/
+GtkSortType
+modest_header_view_get_sort_type (ModestHeaderView *self, TnyFolderType type);
+
+/**
+ * modest_header_view_set_sort_params:
+ * @self: a #ModestHeaderView
+ * @sort_colid: logical column id to sort
+ * @sort_type: #GtkSortType sort type
+ * @type: #TnyFolderType type
+ * 
+ * Sets the logical columnd id and sort type for sorting operations.
+ **/
+void
+modest_header_view_set_sort_params (ModestHeaderView *self, guint sort_colid, GtkSortType sort_type, TnyFolderType type);
+
+/**
+ * modest_header_view_set_sort_params:
+ * @self: a #ModestHeaderView
+ * @sort_colid: logical column id to sort
+ * @sort_type: #GtkSortType sort type
+ * 
+ * Sorts headers treeview by logical column id, @sort_colid, using a 
+ * @sort_type sorting method. In addition, new headder settings will be 
+ * stored in @self object. 
+ **/
+void
+modest_header_view_sort_by_column_id (ModestHeaderView *self, 
+                                     guint sort_colid,
+                                     GtkSortType sort_type);
+
+/**
+ * modest_header_view_clear:
+ * @self: a #ModestHeaderView
+ *
+ * Clear the contents of a header view. It internally calls the
+ * set_folder function with last three arguments as NULL
+ **/
+void
+modest_header_view_clear (ModestHeaderView *self);
+
 G_END_DECLS
 
 
+
 #endif /* __MODEST_HEADER_VIEW_H__ */