* Add two new columns to show compact Sent/Received date. This change
[modest] / src / widgets / modest-header-view.h
index da23d72..d753de0 100644 (file)
 #ifndef __MODEST_HEADER_VIEW_H__
 #define __MODEST_HEADER_VIEW_H__
 
-#include <gtk/gtk.h>
-#include <tny-folder-iface.h>
-#include <tny-account-tree-model.h>
-#include <tny-msg-iface.h>
-#include <tny-header-iface.h>
-#include <tny-header-list-model.h>
+#include <tny-folder.h>
+#include <tny-gtk-account-list-model.h>
+#include <tny-msg.h>
+#include <tny-header.h>
+#include <tny-gtk-header-list-model.h>
 
 G_BEGIN_DECLS
 
@@ -55,55 +54,73 @@ struct _ModestHeaderView {
        /* insert public members, if any */
 };
 
-typedef enum _ModestItemType ModestItemType;
+#define MODEST_HEADER_VIEW_COLUMN    "header-view-column"
 
-struct _ModestHeaderViewClass {
-       GtkTreeViewClass parent_class;
-
-       void (*message_selected) (ModestHeaderView* self,
-                                 TnyMsgIface *msg,
-                                 gpointer user_data);
-
-       void (*message_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 status,
-                              gpointer user_data);
-};
-
-
-enum _ModestHeaderViewColumn {
-       MODEST_HEADER_VIEW_COLUMN_FROM,
+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_COMPACT_HEADER,
+       MODEST_HEADER_VIEW_COLUMN_SIZE,
+       MODEST_HEADER_VIEW_COLUMN_STATUS,
+
+       /*
+        * these two are for compact display on small devices,
+        * with two line display with all relevant headers
+        */
+       MODEST_HEADER_VIEW_COLUMN_COMPACT_FLAG,       /* priority and attachments */
+       MODEST_HEADER_VIEW_COLUMN_COMPACT_HEADER_IN,  /* incoming mail */
+       MODEST_HEADER_VIEW_COLUMN_COMPACT_HEADER_OUT, /* outgoing mail */
+       MODEST_HEADER_VIEW_COLUMN_COMPACT_SENT_DATE,
+       MODEST_HEADER_VIEW_COLUMN_COMPACT_RECEIVED_DATE,
 
        MODEST_HEADER_VIEW_COLUMN_NUM
-};
-typedef enum _ModestHeaderViewColumn ModestHeaderViewColumn;
 
-enum _ModestHeaderViewStyle {
-       MODEST_HEADER_VIEW_STYLE_NORMAL,
-       MODEST_HEADER_VIEW_STYLE_COMPACT,
-       MODEST_HEADER_VIEW_STYLE_NUM
-};
-typedef enum _ModestHeaderViewStyle ModestHeaderViewStyle;
+} ModestHeaderViewColumn;
 
-enum _ModestItemType {
+/*
+ * this can be extended with more style thingies,
+ * to make a small-device specific display
+ */
+typedef enum _ModestHeaderViewStyle {
+       MODEST_HEADER_VIEW_STYLE_DETAILS, /* many columns, single line, col headers visible */
+       MODEST_HEADER_VIEW_STYLE_TWOLINES, /* two-line headers, col headers invisible */
+
+       MODEST_HEADER_VIEW_STYLE_NUM    
+} ModestHeaderViewStyle;
+
+typedef enum _ModestItemType {
        MODEST_ITEM_TYPE_MESSAGE,
        MODEST_ITEM_TYPE_FOLDER,
        MODEST_ITEM_TYPE_NUM
-};
+} ModestItemType;
+
+
+struct _ModestHeaderViewClass {
+       GtkTreeViewClass parent_class;
 
+       void (*header_selected) (ModestHeaderView* self,
+                                TnyHeader *header,
+                                gpointer user_data);
+
+       void (*item_not_found) (ModestHeaderView* self,
+                               ModestItemType type,
+                               gpointer user_data);
+
+       void (*header_activated) (ModestHeaderView* self,
+                                 TnyHeader *header,
+                                 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);
+};
 
 /**
  * modest_header_view_get_type:
@@ -117,8 +134,7 @@ GType        modest_header_view_get_type    (void) G_GNUC_CONST;
 
 /**
  * modest_header_view_new:
- * @folder: a TnyMsgFolderIface object
- * @columns: a list of ModestHeaderViewColumn
+ * @folder: a TnyMsgFolder object
  * @style: a ModestHeaderViewColumn with the style of this listview
  *  (  MODEST_HEADER_VIEW_STYLE_NORMAL or MODEST_HEADER_VIEW_STYLE_COMPACT)
  * 
@@ -126,21 +142,28 @@ GType        modest_header_view_get_type    (void) G_GNUC_CONST;
  *   
  * Returns: a new GtkWidget (a GtkTreeView-subclass)
  */
-GtkWidget*   modest_header_view_new        (TnyFolderIface *folder,
-                                           GSList *columns,
+GtkWidget*   modest_header_view_new        (TnyFolder *folder,
                                            ModestHeaderViewStyle style);
 
 /**
  * modest_header_view_set_folder:
  * @self: a ModestHeaderView instance
- * @folder: a TnyFolderIface object
+ * @folder: a TnyFolder object
  * 
  * set the folder for this ModestHeaderView
+ */
+void         modest_header_view_set_folder (ModestHeaderView *self,
+                                           TnyFolder *folder);
+
+/**
+ * modest_header_view_get_folder:
+ * @self: a ModestHeaderView instance
+ * 
+ * get the folder in this ModestHeaderView
  *  
- * Returns: TRUE if it succeeded, FALSE otherwise
+ * Returns: the tny folder instance or NULL if there is none
  */
-gboolean     modest_header_view_set_folder (ModestHeaderView *self,
-                                           TnyFolderIface *folder);
+TnyFolder *modest_header_view_get_folder (ModestHeaderView *self);
 
 
 /**
@@ -148,30 +171,33 @@ gboolean     modest_header_view_set_folder (ModestHeaderView *self,
  * @self: a ModestHeaderView instance
  * @columns: a list of ModestHeaderViewColumn
  * 
- * set the columns for this ModestHeaderView
+ * set the columns for this ModestHeaderView.
  *  
  * Returns: TRUE if it succeeded, FALSE otherwise
  */
-gboolean     modest_header_view_set_columns (ModestHeaderView *self,
-                                            GSList *columns);
+gboolean modest_header_view_set_columns (ModestHeaderView *self,
+                                        const GList *columns);
 /**
  * modest_header_view_get_columns:
  * @self: a ModestHeaderView instance
- * @folder: a TnyFolderIface object
  * 
- * get the columns for this ModestHeaderView
+ * get the GtkTreeColumns for this ModestHeaderView. Each one of the
+ * tree columns will have property  than can be retrieved
+ * with g_object_get_data MODEST_HEADER_VIEW_COLUMN (#define),
+ * and which contains the corresponding ModestHeaderViewColumn
  *  
- * Returns: list of columms, or NULL in case of no columns or error
+ * Returns: newly allocated list of column ids, or NULL in case of no columns or error
+ * You must free the list with g_list_free
  */
-const GSList*   modest_header_view_get_columns (ModestHeaderView *self);
-       
+GList*  modest_header_view_get_columns (ModestHeaderView *self);
+
 
 /**
  * modest_header_view_set_style:
  * @self: a ModestHeaderView instance
  * @style: the style for this tree view
  * 
- * set the style this ModestHeaderView
+ * set the style for this ModestHeaderView
  *  
  * Returns: TRUE if it succeeded, FALSE otherwise
  */
@@ -188,6 +214,57 @@ 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
+ *  
+ * Returns: the list with the currently selected headers
+ */
+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);
+
+/**
+ * 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
+   selection to reload a msg. For example if we have selected a header
+   in offline mode, when Modest become online, we want to reload the
+   message automatically without an user click over the header */
+void 
+_modest_header_view_change_selection (GtkTreeSelection *selection,
+                                     gpointer user_data);
+
 G_END_DECLS