X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Fwidgets%2Fmodest-mail-header-view.c;h=edcf7b50c2973a72a834f5a25b3a9803ea36c057;hb=daf2ad7672a477f8172bf116c4949bf08ccfc815;hp=2ad2f5a122e2376ab821b63549f8fc511ccd5c1e;hpb=28a28a37ba619ce45b8725531cb86b85bc6c0891;p=modest diff --git a/src/widgets/modest-mail-header-view.c b/src/widgets/modest-mail-header-view.c index 2ad2f5a..edcf7b5 100644 --- a/src/widgets/modest-mail-header-view.c +++ b/src/widgets/modest-mail-header-view.c @@ -28,8 +28,7 @@ */ #include - -#include +//#include #include #include @@ -55,7 +54,8 @@ struct _ModestMailHeaderViewPriv GtkWidget *expander; GtkWidget *headers_vbox; GtkSizeGroup *labels_size_group; - gboolean is_sent; + gboolean is_outgoing; + gboolean is_draft; TnyHeader *header; }; @@ -65,6 +65,56 @@ struct _ModestMailHeaderViewPriv static guint signals[LAST_SIGNAL] = {0}; static void +add_date_time_header (ModestMailHeaderView *mail_header, const gchar *name, time_t date) +{ + const guint BUF_SIZE = 64; + gchar date_buf [BUF_SIZE]; + gchar time_buf [BUF_SIZE]; + + ModestMailHeaderViewPriv *priv = MODEST_MAIL_HEADER_VIEW_GET_PRIVATE (mail_header); + GtkWidget *hbox, *date_hbox, *time_hbox; + GtkWidget *label; + gchar *bolded_field = NULL; + + modest_text_utils_strftime (date_buf, BUF_SIZE, "%x", date); + modest_text_utils_strftime (time_buf, BUF_SIZE, "%X", date); + + hbox = gtk_hbox_new (FALSE, 48); + date_hbox = gtk_hbox_new (FALSE, 12); + time_hbox = gtk_hbox_new (FALSE, 12); + + label = gtk_label_new (NULL); + bolded_field = g_strconcat ("", name, "", NULL); + gtk_label_set_markup (GTK_LABEL (label), bolded_field); + g_free (bolded_field); + gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.0); + gtk_box_pack_start (GTK_BOX (date_hbox), label, FALSE, FALSE, 0); + gtk_size_group_add_widget (priv->labels_size_group, label); + + label = gtk_label_new(date_buf); + gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.0); + gtk_box_pack_start (GTK_BOX (date_hbox), label, TRUE, TRUE, 0); + + gtk_box_pack_start (GTK_BOX (hbox), date_hbox, FALSE, FALSE, 0); + + label = gtk_label_new(NULL); + gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.0); + bolded_field = g_strconcat ("", _("mail_va_time"), "", NULL); + gtk_label_set_markup (GTK_LABEL (label), bolded_field); + g_free (bolded_field); + gtk_box_pack_start (GTK_BOX (time_hbox), label, FALSE, FALSE, 0); + + label = gtk_label_new(time_buf); + gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.0); + gtk_box_pack_start (GTK_BOX (time_hbox), label, TRUE, TRUE, 0); + + gtk_box_pack_start (GTK_BOX (hbox), time_hbox, TRUE, TRUE, 0); + + gtk_box_pack_start (GTK_BOX (priv->headers_vbox), hbox, FALSE, FALSE, 0); + gtk_widget_show (hbox); +} + +static void activate_recpt (GtkWidget *recpt_view, const gchar *address, gpointer user_data) { ModestMailHeaderView * view = MODEST_MAIL_HEADER_VIEW (user_data); @@ -72,30 +122,39 @@ activate_recpt (GtkWidget *recpt_view, const gchar *address, gpointer user_data) g_signal_emit (G_OBJECT (view), signals[RECPT_ACTIVATED_SIGNAL], 0, address); } +#if 0 /* This function is not used. murrayc. */ static void add_header (ModestMailHeaderView *widget, const gchar *field, const gchar *value) { ModestMailHeaderViewPriv *priv = MODEST_MAIL_HEADER_VIEW_GET_PRIVATE (widget); GtkWidget *hbox; GtkWidget *label_field, *label_value; + GtkWidget *scroll_text; + GtkTextBuffer *text_buffer; + gchar *bolded_field = NULL; hbox = gtk_hbox_new (FALSE, 12); label_field = gtk_label_new (NULL); - gtk_label_set_markup (GTK_LABEL (label_field), field); + if (field) + bolded_field = g_strconcat ("", field, "", NULL); + gtk_label_set_markup (GTK_LABEL (label_field), bolded_field); + g_free (bolded_field); gtk_misc_set_alignment (GTK_MISC (label_field), 0.0, 0.0); - label_value = gtk_label_new (NULL); - gtk_label_set_text (GTK_LABEL (label_value), value); - gtk_label_set_selectable (GTK_LABEL (label_value), TRUE); - gtk_misc_set_alignment (GTK_MISC (label_value), 0.0, 0.0); + scroll_text = modest_scroll_text_new (NULL, 2); + label_value = (GtkWidget *) modest_scroll_text_get_text_view (MODEST_SCROLL_TEXT (scroll_text)); + text_buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (label_value)); + gtk_text_buffer_set_text (text_buffer, value, -1); gtk_box_pack_start (GTK_BOX (hbox), label_field, FALSE, FALSE, 0); - gtk_box_pack_start (GTK_BOX (hbox), label_value, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (hbox), scroll_text, TRUE, TRUE, 0); gtk_size_group_add_widget (priv->labels_size_group, label_field); gtk_box_pack_start (GTK_BOX (priv->headers_vbox), hbox, FALSE, FALSE, 0); gtk_widget_show (hbox); } +#endif + static void add_recpt_header (ModestMailHeaderView *widget, const gchar *field, const gchar *value) @@ -103,10 +162,14 @@ add_recpt_header (ModestMailHeaderView *widget, const gchar *field, const gchar ModestMailHeaderViewPriv *priv = MODEST_MAIL_HEADER_VIEW_GET_PRIVATE (widget); GtkWidget *hbox; GtkWidget *label_field, *label_value; + gchar *bolded_field = NULL; hbox = gtk_hbox_new (FALSE, 12); label_field = gtk_label_new (NULL); - gtk_label_set_markup (GTK_LABEL (label_field), field); + if (field != NULL) + bolded_field = g_strconcat ("", field, "", NULL); + gtk_label_set_markup (GTK_LABEL (label_field), bolded_field); + g_free (bolded_field); gtk_misc_set_alignment (GTK_MISC (label_field), 0.0, 0.0); label_value = modest_recpt_view_new (); modest_recpt_view_set_recipients (MODEST_RECPT_VIEW(label_value), value); @@ -141,12 +204,12 @@ modest_mail_header_view_set_header (TnyHeaderView *self, TnyHeader *header) } static void -modest_mail_header_view_update_is_sent (TnyHeaderView *self) +modest_mail_header_view_update_is_outgoing (TnyHeaderView *self) { ModestMailHeaderViewPriv *priv = MODEST_MAIL_HEADER_VIEW_GET_PRIVATE (self); TnyFolder *folder = NULL; - priv->is_sent = FALSE; + priv->is_outgoing = FALSE; if (priv->header == NULL) return; @@ -157,19 +220,20 @@ modest_mail_header_view_update_is_sent (TnyHeaderView *self) TnyFolderType folder_type; folder_type = tny_folder_get_folder_type (folder); if (folder_type == TNY_FOLDER_TYPE_NORMAL || folder_type == TNY_FOLDER_TYPE_UNKNOWN) { - gchar *fname = tny_folder_get_name (folder); + const gchar *fname = tny_folder_get_name (folder); folder_type = modest_tny_folder_guess_folder_type_from_name (fname); } switch (folder_type) { + case TNY_FOLDER_TYPE_DRAFTS: case TNY_FOLDER_TYPE_OUTBOX: case TNY_FOLDER_TYPE_SENT: - case TNY_FOLDER_TYPE_DRAFTS: - priv->is_sent = TRUE; + priv->is_outgoing = TRUE; break; default: - priv->is_sent = FALSE; + priv->is_outgoing = FALSE; } + priv->is_draft = (folder_type == TNY_FOLDER_TYPE_DRAFTS); g_object_unref (folder); } @@ -192,11 +256,12 @@ modest_mail_header_view_set_header_default (TnyHeaderView *self, TnyHeader *head if (header && G_IS_OBJECT (header)) { const gchar *to, *from, *subject, *bcc, *cc; + GtkWidget *subject_box, *subject_label; g_object_ref (G_OBJECT (header)); priv->header = header; - modest_mail_header_view_update_is_sent (self); + modest_mail_header_view_update_is_outgoing (self); to = tny_header_get_to (header); @@ -205,27 +270,55 @@ modest_mail_header_view_set_header_default (TnyHeaderView *self, TnyHeader *head cc = tny_header_get_cc (header); bcc = tny_header_get_bcc (header); + subject_box = gtk_hbox_new (FALSE, 12); + subject_label = gtk_label_new (NULL); if (subject) - add_header (MODEST_MAIL_HEADER_VIEW (self), _("Subject:"), subject); - if (priv->is_sent) { - gchar *sent = modest_text_utils_get_display_date (tny_header_get_date_sent (header)); - gtk_label_set_markup (GTK_LABEL (priv->fromto_label), _("To:")); + gtk_label_set_text (GTK_LABEL (subject_label), subject); + else + gtk_label_set_text (GTK_LABEL (subject_label), _("mail_va_no_subject")); + gtk_label_set_single_line_mode (GTK_LABEL (subject_label), TRUE); + gtk_label_set_ellipsize (GTK_LABEL (subject_label), PANGO_ELLIPSIZE_END); + gtk_label_set_selectable (GTK_LABEL (subject_label), TRUE); + gtk_misc_set_alignment (GTK_MISC (subject_label), 0.0, 0.0); + + /* TODO: code disabled until we can get real priority information from message */ +/* if (tny_header_get_flags (header) & TNY_HEADER_FLAG_PRIORITY) { */ +/* GtkWidget *priority_icon = gtk_image_new_from_icon_name ("qgn_list_messaging_high", GTK_ICON_SIZE_MENU); */ +/* gtk_box_pack_start (GTK_BOX (subject_box), priority_icon, FALSE, FALSE, 0); */ +/* } */ + gtk_box_pack_start (GTK_BOX (subject_box), subject_label, TRUE, TRUE, 0); + if (priv->is_outgoing) { + gchar *bolded_label = g_strconcat ("", _("mail_va_to"), "", NULL); + gtk_label_set_markup (GTK_LABEL (priv->fromto_label), bolded_label); + g_free (bolded_label); if (to) modest_recpt_view_set_recipients (MODEST_RECPT_VIEW (priv->fromto_contents), to); - add_header (MODEST_MAIL_HEADER_VIEW (self), _("Sent:"), sent); - g_free (sent); + if (cc) + add_recpt_header (MODEST_MAIL_HEADER_VIEW (self), _("mail_va_cc"), cc); + if (bcc) + add_recpt_header (MODEST_MAIL_HEADER_VIEW (self), _("mail_va_hotfix1"), bcc); + if (priv->is_draft&& from) + add_recpt_header (MODEST_MAIL_HEADER_VIEW (self), _("mail_va_from"), from); + modest_mail_header_view_add_custom_header (MODEST_MAIL_HEADER_VIEW (self), _("mail_va_subject"), subject_box, TRUE, TRUE); + if (priv->is_draft) + add_date_time_header (MODEST_MAIL_HEADER_VIEW (self), _("fixme_Last saved:"), tny_header_get_date_sent (header)); + else + add_date_time_header (MODEST_MAIL_HEADER_VIEW (self), _("fixme_Sent:"), tny_header_get_date_sent (header)); } else { - gchar *received = modest_text_utils_get_display_date (tny_header_get_date_received (header)); - gtk_label_set_markup (GTK_LABEL (priv->fromto_label), _("From:")); + gchar *bolded_label = g_strconcat ("", _("mail_va_from"), "", NULL); + gtk_label_set_markup (GTK_LABEL (priv->fromto_label), bolded_label); + g_free (bolded_label); if (from) modest_recpt_view_set_recipients (MODEST_RECPT_VIEW (priv->fromto_contents), from); - add_header (MODEST_MAIL_HEADER_VIEW (self), _("Received:"), received); - g_free (received); + if (cc) + add_recpt_header (MODEST_MAIL_HEADER_VIEW (self), _("mail_va_cc"), cc); + if (bcc) + add_recpt_header (MODEST_MAIL_HEADER_VIEW (self), _("mail_va_hotfix1"), bcc); + if (to) + add_recpt_header (MODEST_MAIL_HEADER_VIEW (self), _("mail_va_to"), to); + modest_mail_header_view_add_custom_header (MODEST_MAIL_HEADER_VIEW (self), _("mail_va_subject"), subject_box, TRUE, TRUE); + add_date_time_header (MODEST_MAIL_HEADER_VIEW (self), _("fixme_Received:"), tny_header_get_date_received (header)); } - if (cc) - add_recpt_header (MODEST_MAIL_HEADER_VIEW (self), _("Cc:"), cc); - if (bcc) - add_recpt_header (MODEST_MAIL_HEADER_VIEW (self), _("Bcc:"), bcc); } gtk_widget_show_all (GTK_WIDGET (self)); @@ -281,6 +374,46 @@ expander_activate (GtkWidget *expander, ModestMailHeaderView *header_view) gtk_widget_queue_draw (GTK_WIDGET (priv->expander)); } +const GtkWidget * +modest_mail_header_view_add_custom_header (ModestMailHeaderView *header_view, + const gchar *label, + GtkWidget *custom_widget, + gboolean with_expander, + gboolean start) +{ + ModestMailHeaderViewPriv *priv; + g_return_val_if_fail (MODEST_IS_MAIL_HEADER_VIEW (header_view), NULL); + GtkWidget *hbox; + GtkWidget *label_field; + gchar *bolded_field = NULL; + + priv = MODEST_MAIL_HEADER_VIEW_GET_PRIVATE (header_view); + hbox = gtk_hbox_new (FALSE, 12); + label_field = gtk_label_new (NULL); + if (label != NULL) + bolded_field = g_strconcat ("", label, "", NULL); + gtk_label_set_markup (GTK_LABEL (label_field), bolded_field); + g_free (bolded_field); + gtk_misc_set_alignment (GTK_MISC (label_field), 0.0, 0.0); + gtk_box_pack_start (GTK_BOX (hbox), label_field, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX (hbox), custom_widget, TRUE, TRUE, 0); + gtk_size_group_add_widget (priv->labels_size_group, label_field); + + if (with_expander) { + if (start) + gtk_box_pack_start (GTK_BOX (priv->headers_vbox), hbox, FALSE, FALSE, 0); + else + gtk_box_pack_end (GTK_BOX (priv->headers_vbox), hbox, FALSE, FALSE, 0); + } else { + if (start) + gtk_box_pack_start (GTK_BOX (priv->main_vbox), hbox, FALSE, FALSE, 0); + else + gtk_box_pack_end (GTK_BOX (priv->main_vbox), hbox, FALSE, FALSE, 0); + } + + return hbox; +} + /** * modest_mail_header_view_new: * @@ -333,7 +466,8 @@ modest_mail_header_view_instance_init (GTypeInstance *instance, gpointer g_class gtk_container_set_reallocate_redraws (GTK_CONTAINER (instance), TRUE); - priv->is_sent = FALSE; + priv->is_outgoing = FALSE; + priv->is_draft = FALSE; return; } @@ -389,7 +523,7 @@ modest_mail_header_view_class_init (ModestMailHeaderViewClass *klass) g_type_class_add_private (object_class, sizeof (ModestMailHeaderViewPriv)); signals[RECPT_ACTIVATED_SIGNAL] = - g_signal_new ("recpt-activated", + g_signal_new ("recpt_activated", G_TYPE_FROM_CLASS (object_class), G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, G_STRUCT_OFFSET(ModestMailHeaderViewClass, recpt_activated),