Incremental fetch of headers driven by user
authorJose Dapena Paz <jdapena@igalia.com>
Fri, 30 Oct 2009 11:30:04 +0000 (12:30 +0100)
committerJose Dapena Paz <jdapena@igalia.com>
Thu, 5 Nov 2009 11:02:47 +0000 (12:02 +0100)
src/hildon2/modest-header-window.c
src/widgets/modest-header-view.c
src/widgets/modest-header-view.h

index 16792f7..096b579 100644 (file)
@@ -177,6 +177,7 @@ static void on_header_view_model_destroyed (gpointer user_data,
 static gboolean on_key_press(GtkWidget *widget,
                                        GdkEventKey *event,
                                        gpointer user_data);
+static void modest_header_window_show_more (GtkAction *action, ModestWindow *win);
 
 /* globals */
 static GtkWindowClass *parent_class = NULL;
@@ -637,6 +638,7 @@ create_header_view (ModestWindow *self, TnyFolder *folder)
        ModestHeaderWindowPrivate *priv;
 
        header_view  = modest_header_view_new (NULL, MODEST_HEADER_VIEW_STYLE_TWOLINES);
+       modest_header_view_set_show_latest (MODEST_HEADER_VIEW (header_view), 50);
        priv = MODEST_HEADER_WINDOW_GET_PRIVATE (self);
        priv->notify_model = g_signal_connect ((GObject*) header_view, "notify::model",
                                               G_CALLBACK (on_header_view_model_changed), self);
@@ -935,6 +937,9 @@ static void setup_menu (ModestHeaderWindow *self)
        modest_hildon2_window_add_to_menu (MODEST_HILDON2_WINDOW (self), _("mcen_me_outbox_cancelsend"), NULL,
                                           APP_MENU_CALLBACK (modest_ui_actions_cancel_send),
                                           MODEST_DIMMING_CALLBACK (modest_ui_dimming_rules_on_cancel_sending_all));
+       modest_hildon2_window_add_to_menu (MODEST_HILDON2_WINDOW (self), _("TODO: show more"), NULL,
+                                          APP_MENU_CALLBACK (modest_header_window_show_more),
+                                          NULL);
 }
 
 static void 
@@ -1516,3 +1521,20 @@ on_key_press(GtkWidget *widget, GdkEventKey *event, gpointer user_data)
 
        return FALSE;
 }
+
+static void
+modest_header_window_show_more (GtkAction *action, ModestWindow *win)
+{
+       ModestHeaderWindow *self;
+       ModestHeaderWindowPrivate *priv = NULL;
+
+       self = MODEST_HEADER_WINDOW (win);
+       priv = MODEST_HEADER_WINDOW_GET_PRIVATE (self);
+       if (!priv->header_view)
+               return;
+       
+       if (modest_header_view_get_not_latest (MODEST_HEADER_VIEW (priv->header_view)) > 0) {
+               modest_header_view_set_show_latest (MODEST_HEADER_VIEW (priv->header_view),
+                                                   modest_header_view_get_show_latest (MODEST_HEADER_VIEW (priv->header_view)) + 50);
+       }
+}
index 2c47c9c..b08263c 100644 (file)
@@ -2520,3 +2520,29 @@ modest_header_view_get_show_latest (ModestHeaderView *header_view)
        priv = MODEST_HEADER_VIEW_GET_PRIVATE (header_view);
        return priv->show_latest;
 }
+
+gint
+modest_header_view_get_not_latest (ModestHeaderView *header_view)
+{
+       ModestHeaderViewPrivate *priv;
+       gint not_latest = 0;
+       GtkTreeModel *sortable, *filter, *model;
+
+       priv = MODEST_HEADER_VIEW_GET_PRIVATE (header_view);
+
+       if (priv->show_latest == 0)
+               return 0;
+
+       sortable = gtk_tree_view_get_model (GTK_TREE_VIEW (header_view));
+       if (GTK_IS_TREE_MODEL_SORT (sortable)) {
+               filter = gtk_tree_model_sort_get_model (GTK_TREE_MODEL_SORT (sortable));
+               if (GTK_IS_TREE_MODEL_FILTER (filter)) {
+                       model = gtk_tree_model_filter_get_model (GTK_TREE_MODEL_FILTER (filter));
+                       if (model) {
+                               not_latest = MAX (0, tny_list_get_length (TNY_LIST (model)) - priv->show_latest);
+                       }
+               }
+       }
+
+       return not_latest;
+}
index f620640..11a118f 100644 (file)
@@ -471,6 +471,7 @@ void modest_header_view_set_show_latest (ModestHeaderView *header_view,
                                         gint show_latest);
 
 gint modest_header_view_get_show_latest (ModestHeaderView *header_view);
+gint modest_header_view_get_not_latest (ModestHeaderView *header_view);
 
 G_END_DECLS