X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Fhildon2%2Fmodest-header-window.c;h=a4f1ae178afa7009c7349b552aee19bcb8acfe5d;hb=fe9423b02aedbba7a1dac78dde60d53ff17dc9c2;hp=80a41c83fef531643b88ad6c0dc354812f01809d;hpb=480b03cf394d94b7dc00b11debf27b5d73d25931;p=modest diff --git a/src/hildon2/modest-header-window.c b/src/hildon2/modest-header-window.c index 80a41c8..a4f1ae1 100644 --- a/src/hildon2/modest-header-window.c +++ b/src/hildon2/modest-header-window.c @@ -31,6 +31,7 @@ #include #include #include +#include #include #include #include @@ -70,6 +71,7 @@ struct _ModestHeaderWindowPrivate { GtkWidget *empty_view; GtkWidget *contents_view; GtkWidget *top_vbox; + GtkWidget *new_message_button; /* state bar */ ContentsState contents_state; @@ -107,7 +109,7 @@ static void connect_signals (ModestHeaderWindow *self); static void modest_header_window_disconnect_signals (ModestWindow *self); static void setup_menu (ModestHeaderWindow *self); -static GtkWidget *create_empty_view (void); +static GtkWidget *create_empty_view (ModestWindow *self); static GtkWidget *create_header_view (ModestWindow *progress_window, TnyFolder *folder); @@ -163,9 +165,9 @@ static void update_sort_button (ModestHeaderWindow *self); static GtkWindowClass *parent_class = NULL; #define EMPTYVIEW_XALIGN 0.5 -#define EMPTYVIEW_YALIGN 0.0 +#define EMPTYVIEW_YALIGN 0.5 #define EMPTYVIEW_XSPACE 1.0 -#define EMPTYVIEW_YSPACE 0.0 +#define EMPTYVIEW_YSPACE 1.0 @@ -234,6 +236,7 @@ modest_header_window_init (ModestHeaderWindow *obj) priv->queue_change_handler = 0; priv->current_store_account = NULL; priv->sort_button = NULL; + priv->new_message_button = NULL; modest_window_mgr_register_help_id (modest_runtime_get_window_mgr(), GTK_WINDOW(obj), @@ -248,6 +251,8 @@ modest_header_window_finalize (GObject *obj) priv = MODEST_HEADER_WINDOW_GET_PRIVATE(obj); g_object_unref (priv->folder); + g_object_unref (priv->header_view); + g_object_unref (priv->empty_view); if (priv->current_store_account) { g_free (priv->current_store_account); @@ -342,15 +347,15 @@ connect_signals (ModestHeaderWindow *self) self); /* Mail Operation Queue */ - priv->queue_change_handler = - g_signal_connect (G_OBJECT (modest_runtime_get_mail_operation_queue ()), - "queue-changed", - G_CALLBACK (on_queue_changed), - self); priv->sighandlers = modest_signal_mgr_connect (priv->sighandlers, G_OBJECT (modest_runtime_get_window_mgr ()), "progress-list-changed", G_CALLBACK (on_progress_list_changed), self); + priv->sighandlers = + modest_signal_mgr_connect (priv->sighandlers, + G_OBJECT (priv->new_message_button), + "clicked", + G_CALLBACK (modest_ui_actions_on_new_msg), self); } static GtkWidget * @@ -370,19 +375,44 @@ create_header_view (ModestWindow *self, TnyFolder *folder) } static GtkWidget * -create_empty_view (void) +create_empty_view (ModestWindow *self) { GtkWidget *label = NULL; GtkWidget *align = NULL; + GtkWidget *vbox = NULL; + GtkWidget *button = NULL; + GdkPixbuf *new_message_pixbuf; + + vbox = gtk_vbox_new (0, FALSE); align = gtk_alignment_new(EMPTYVIEW_XALIGN, EMPTYVIEW_YALIGN, EMPTYVIEW_XSPACE, EMPTYVIEW_YSPACE); label = gtk_label_new (_("mcen_ia_nomessages")); + hildon_helper_set_logical_font (label, "LargeSystemFont"); + gtk_misc_set_alignment (GTK_MISC (label), 0.5, 0.5); gtk_widget_show (label); gtk_widget_show (align); gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_CENTER); gtk_container_add (GTK_CONTAINER (align), label); + gtk_box_pack_end (GTK_BOX (vbox), align, TRUE, TRUE, 0); - return align; + button = hildon_button_new (MODEST_EDITABLE_SIZE, + HILDON_BUTTON_ARRANGEMENT_HORIZONTAL); + + hildon_button_set_title (HILDON_BUTTON (button), _("mcen_ti_new_message")); + new_message_pixbuf = modest_platform_get_icon ("general_add", MODEST_ICON_SIZE_BIG); + hildon_button_set_image (HILDON_BUTTON (button), + gtk_image_new_from_pixbuf (new_message_pixbuf)); + g_object_unref (new_message_pixbuf); + gtk_widget_show_all (button); + gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0); + + gtk_widget_show (vbox); + + g_signal_connect (button, + "clicked", + G_CALLBACK (modest_ui_actions_on_new_msg), self); + + return vbox; } static void @@ -407,6 +437,9 @@ modest_header_window_new (TnyFolder *folder, const gchar *account_name) ModestAccountMgr *mgr; ModestAccountSettings *settings = NULL; ModestServerAccountSettings *store_settings = NULL; + GtkWidget *action_area_box; + GdkPixbuf *new_message_pixbuf; + GtkWidget *alignment; self = MODEST_HEADER_WINDOW(g_object_new(MODEST_TYPE_HEADER_WINDOW, NULL)); priv = MODEST_HEADER_WINDOW_GET_PRIVATE(self); @@ -414,18 +447,55 @@ modest_header_window_new (TnyFolder *folder, const gchar *account_name) priv->folder = g_object_ref (folder); priv->contents_view = hildon_pannable_area_new (); + alignment = gtk_alignment_new (0.0, 0.0, 1.0, 1.0); + gtk_alignment_set_padding (GTK_ALIGNMENT (alignment), + 0, 0, + HILDON_MARGIN_DOUBLE, HILDON_MARGIN_DOUBLE); + + /* We need to do this here to properly listen for mail + operations because create_header_view launches a mail + operation */ + priv->queue_change_handler = + g_signal_connect (G_OBJECT (modest_runtime_get_mail_operation_queue ()), + "queue-changed", + G_CALLBACK (on_queue_changed), + self); priv->header_view = create_header_view (MODEST_WINDOW (self), folder); - priv->empty_view = create_empty_view (); + priv->empty_view = create_empty_view (MODEST_WINDOW (self)); + + /* Transform the floating reference in a "hard" reference. We + need to do this because the widgets could be added/removed + to containers many times so we always need to keep a + reference. It could happen also that some widget is never + added to any container */ + g_object_ref_sink (priv->header_view); + g_object_ref_sink (priv->empty_view); + g_signal_connect (G_OBJECT (self), "edit-mode-changed", G_CALLBACK (edit_mode_changed), (gpointer) self); + + action_area_box = hildon_tree_view_get_action_area_box (GTK_TREE_VIEW (priv->header_view)); + priv->new_message_button = hildon_button_new (0, HILDON_BUTTON_ARRANGEMENT_HORIZONTAL); + + hildon_button_set_title (HILDON_BUTTON (priv->new_message_button), _("mcen_ti_new_message")); + new_message_pixbuf = modest_platform_get_icon ("general_add", MODEST_ICON_SIZE_BIG); + hildon_button_set_image (HILDON_BUTTON (priv->new_message_button), gtk_image_new_from_pixbuf (new_message_pixbuf)); + g_object_unref (new_message_pixbuf); + + gtk_box_pack_start (GTK_BOX (action_area_box), priv->new_message_button, TRUE, TRUE, 0); + gtk_widget_show_all (priv->new_message_button); + hildon_tree_view_set_action_area_visible (GTK_TREE_VIEW (priv->header_view), TRUE); + setup_menu (self); priv->top_vbox = gtk_vbox_new (FALSE, 0); - gtk_box_pack_end (GTK_BOX (priv->top_vbox), priv->contents_view, TRUE, TRUE, 0); + gtk_container_add (GTK_CONTAINER (alignment), priv->contents_view); + gtk_box_pack_end (GTK_BOX (priv->top_vbox), alignment, TRUE, TRUE, 0); gtk_container_add (GTK_CONTAINER (self), priv->top_vbox); + gtk_widget_show (alignment); gtk_widget_show (priv->contents_view); gtk_widget_show (priv->top_vbox); @@ -533,6 +603,7 @@ static void setup_menu (ModestHeaderWindow *self) hildon_button_set_title (HILDON_BUTTON (priv->sort_button), _("mcen_me_sort")); g_signal_connect (G_OBJECT (priv->sort_button), "clicked", G_CALLBACK (modest_ui_actions_on_sort), (gpointer) self); + hildon_button_set_style(HILDON_BUTTON (priv->sort_button), HILDON_BUTTON_STYLE_PICKER); modest_hildon2_window_add_button_to_menu (MODEST_HILDON2_WINDOW (self), GTK_BUTTON (priv->sort_button), modest_ui_dimming_rules_on_sort); modest_hildon2_window_add_to_menu (MODEST_HILDON2_WINDOW (self), _("mcen_me_inbox_sendandreceive"), NULL, @@ -621,7 +692,6 @@ set_contents_state (ModestHeaderWindow *self, break; } priv->contents_state = state; - } static void @@ -629,9 +699,9 @@ on_msg_count_changed (ModestHeaderView *header_view, TnyFolder *folder, TnyFolderChange *change, ModestHeaderWindow *header_window) -{ +{ g_return_if_fail (MODEST_IS_HEADER_WINDOW (header_window)); - + update_view (MODEST_HEADER_WINDOW (header_window), change); } @@ -811,8 +881,6 @@ update_progress_hint (ModestHeaderWindow *self) priv->progress_hint = TRUE; } - return; - if (!priv->progress_hint && priv->current_store_account) { priv->progress_hint = modest_window_mgr_has_progress_operation_on_account (modest_runtime_get_window_mgr (), @@ -956,6 +1024,7 @@ edit_mode_changed (ModestHeaderWindow *header_window, break; } + hildon_tree_view_set_action_area_visible (GTK_TREE_VIEW (priv->header_view), !enabled); if (enabled) { modest_header_view_set_filter (MODEST_HEADER_VIEW (priv->header_view), filter);