X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fmodest-widget-factory.c;h=35bbafe2c4f519dd120ee6f148f87725fd004be7;hp=5708a7a8737a2aa13331deaa91db2f31f46ef150;hb=863ef6ddca26d35008666611cb12b8266c8c305f;hpb=7ca06f21277f7658b81bafbfde6807ee8b353dd7 diff --git a/src/modest-widget-factory.c b/src/modest-widget-factory.c index 5708a7a..35bbafe 100644 --- a/src/modest-widget-factory.c +++ b/src/modest-widget-factory.c @@ -35,10 +35,21 @@ static void modest_widget_factory_class_init (ModestWidgetFactoryClass *klass static void modest_widget_factory_init (ModestWidgetFactory *obj); static void modest_widget_factory_finalize (GObject *obj); -static void on_folder_clicked (ModestTnyFolderTreeView *folder_view, TnyMsgFolderIface *folder, - ModestWidgetFactory *self); -static void on_message_selected (ModestTnyFolderTreeView *folder_view, TnyMsgIface *msg, - ModestWidgetFactory *self); + +/* callbacks */ +static void on_folder_selected (ModestFolderView *folder_view, + TnyMsgFolderIface *folder, + ModestWidgetFactory *self); +static void on_message_selected (ModestHeaderView *header_view, TnyMsgIface *msg, + ModestWidgetFactory *self); +static void on_header_status_update (ModestHeaderView *header_view, const gchar *msg, + gint status_id, ModestWidgetFactory *self); +static void on_msg_link_hover (ModestMsgView *msgview, const gchar* link, + ModestWidgetFactory *self); +static void on_msg_link_clicked (ModestMsgView *msgview, const gchar* link, + ModestWidgetFactory *self); +static void on_msg_attachment_clicked (ModestMsgView *msgview, int index, + ModestWidgetFactory *self); /* list my signals */ enum { @@ -47,6 +58,16 @@ enum { LAST_SIGNAL }; + +enum _StatusID { + STATUS_ID_HEADER, + STATUS_ID_FOLDER, + STATUS_ID_MESSAGE, + + STATUS_ID_NUM +}; +typedef enum _StatusID StatusID; + typedef struct _ModestWidgetFactoryPrivate ModestWidgetFactoryPrivate; struct _ModestWidgetFactoryPrivate { @@ -54,12 +75,17 @@ struct _ModestWidgetFactoryPrivate { ModestAccountMgr *account_mgr; ModestConf *conf; - ModestTnyHeaderTreeView *header_view; - ModestTnyFolderTreeView *folder_view; - ModestTnyMsgView *msg_preview; - ModestAccountView *account_view; + ModestHeaderView *header_view; + ModestFolderView *folder_view; + ModestMsgView *msg_preview; + + GtkWidget *progress_bar; + GtkWidget *status_bar; + + gboolean auto_connect; - gboolean auto_connect; + StatusID status_bar_ctx[STATUS_ID_NUM]; + }; #define MODEST_WIDGET_FACTORY_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), \ MODEST_TYPE_WIDGET_FACTORY, \ @@ -121,6 +147,23 @@ modest_widget_factory_init (ModestWidgetFactory *obj) priv->conf = NULL; priv->account_mgr = NULL; priv->account_store = NULL; + + priv->progress_bar = gtk_progress_bar_new (); + gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR(priv->progress_bar), + 1.0); + priv->status_bar = gtk_statusbar_new (); + gtk_statusbar_set_has_resize_grip (GTK_STATUSBAR(priv->status_bar), + FALSE); + + priv->status_bar_ctx[STATUS_ID_HEADER] = + gtk_statusbar_get_context_id (GTK_STATUSBAR(priv->status_bar), + "header"); + priv->status_bar_ctx[STATUS_ID_MESSAGE] = + gtk_statusbar_get_context_id (GTK_STATUSBAR(priv->status_bar), + "message"); + priv->status_bar_ctx[STATUS_ID_FOLDER] = + gtk_statusbar_get_context_id (GTK_STATUSBAR(priv->status_bar), + "folder"); } static void @@ -145,6 +188,54 @@ modest_widget_factory_finalize (GObject *obj) } } + +static gboolean +init_widgets (ModestWidgetFactory *self) +{ + ModestWidgetFactoryPrivate *priv; + priv = MODEST_WIDGET_FACTORY_GET_PRIVATE(self); + + /* folder view */ + if (!(priv->folder_view = + MODEST_FOLDER_VIEW(modest_folder_view_new + (TNY_ACCOUNT_STORE_IFACE(priv->account_store))))) { + g_printerr ("modest: cannot instantiate folder view\n"); + return FALSE; + } + + /* header view */ + if (!(priv->header_view = + MODEST_HEADER_VIEW(modest_header_view_new + (NULL, NULL,MODEST_HEADER_VIEW_STYLE_NORMAL)))) { + g_printerr ("modest: cannot instantiate header view\n"); + return FALSE; + } + + /* msg preview */ + if (!(priv->msg_preview = MODEST_MSG_VIEW(modest_msg_view_new (NULL)))) { + g_printerr ("modest: cannot instantiate header view\n"); + return FALSE; + } + + if (priv->auto_connect) { + g_signal_connect (G_OBJECT(priv->header_view), "message_selected", + G_CALLBACK(on_message_selected), self); + g_signal_connect (G_OBJECT(priv->folder_view), "folder_selected", + G_CALLBACK(on_folder_selected), self); + g_signal_connect (G_OBJECT(priv->header_view), "status_update", + G_CALLBACK(on_header_status_update), self); + g_signal_connect (G_OBJECT(priv->msg_preview), "link_clicked", + G_CALLBACK(on_msg_link_clicked), self); + g_signal_connect (G_OBJECT(priv->msg_preview), "link_hover", + G_CALLBACK(on_msg_link_hover), self); + g_signal_connect (G_OBJECT(priv->msg_preview), "attachment_clicked", + G_CALLBACK(on_msg_attachment_clicked), self); + } + + return TRUE; +} + + ModestWidgetFactory* modest_widget_factory_new (ModestConf *conf, ModestTnyAccountStore *account_store, @@ -171,6 +262,12 @@ modest_widget_factory_new (ModestConf *conf, g_object_ref (G_OBJECT(account_store)); priv->account_store = account_store; + + if (!init_widgets (MODEST_WIDGET_FACTORY(obj))) { + g_printerr ("modest: widget factory failed to init widgets\n"); + g_object_unref (obj); + return NULL; + } return MODEST_WIDGET_FACTORY(obj); } @@ -178,114 +275,147 @@ modest_widget_factory_new (ModestConf *conf, -ModestTnyFolderTreeView* -modest_widget_factory_get_folder_tree_widget (ModestWidgetFactory *self) +ModestFolderView* +modest_widget_factory_get_folder_view (ModestWidgetFactory *self) { - ModestWidgetFactoryPrivate *priv; - g_return_val_if_fail (self, NULL); + return MODEST_WIDGET_FACTORY_GET_PRIVATE(self)->folder_view; +} - priv = MODEST_WIDGET_FACTORY_GET_PRIVATE(self); - if (!priv->folder_view) { - priv->folder_view = - MODEST_TNY_FOLDER_TREE_VIEW(modest_tny_folder_tree_view_new - (TNY_ACCOUNT_STORE_IFACE(priv->account_store))); - if (priv->folder_view && priv->auto_connect) - g_signal_connect (G_OBJECT(priv->folder_view), "folder_selected", - G_CALLBACK(on_folder_clicked), self); - } - - if (!priv->folder_view) - g_printerr ("modest: cannot instantiate folder view\n"); - - return priv->folder_view; +ModestHeaderView* +modest_widget_factory_get_header_view (ModestWidgetFactory *self) +{ + g_return_val_if_fail (self, NULL); + return MODEST_WIDGET_FACTORY_GET_PRIVATE(self)->header_view; } -ModestTnyHeaderTreeView* -modest_widget_factory_get_header_tree_widget (ModestWidgetFactory *self) +ModestMsgView* +modest_widget_factory_get_msg_preview (ModestWidgetFactory *self) { - ModestWidgetFactoryPrivate *priv; - g_return_val_if_fail (self, NULL); + return MODEST_WIDGET_FACTORY_GET_PRIVATE(self)->msg_preview; +} - priv = MODEST_WIDGET_FACTORY_GET_PRIVATE(self); - if (!priv->header_view) { - priv->header_view = - MODEST_TNY_HEADER_TREE_VIEW(modest_tny_header_tree_view_new - (NULL, NULL, - MODEST_TNY_HEADER_TREE_VIEW_STYLE_NORMAL)); - if (priv->header_view && priv->auto_connect) - g_signal_connect (G_OBJECT(priv->header_view), "message_selected", - G_CALLBACK(on_message_selected), self); - } - - if (!priv->header_view) - g_printerr ("modest: cannot instantiate header view\n"); +ModestAccountView* +modest_widget_factory_get_account_view (ModestWidgetFactory *self) +{ + ModestWidgetFactoryPrivate *priv; - return priv->header_view; + g_return_val_if_fail (self, NULL); + + return modest_account_view_new (priv->account_mgr); } -ModestTnyMsgView* -modest_widget_factory_get_msg_preview_widget (ModestWidgetFactory *self) + +GtkWidget* +modest_widget_factory_get_progress_bar (ModestWidgetFactory *self) { - ModestWidgetFactoryPrivate *priv; - g_return_val_if_fail (self, NULL); + return MODEST_WIDGET_FACTORY_GET_PRIVATE(self)->progress_bar; +} - priv = MODEST_WIDGET_FACTORY_GET_PRIVATE(self); - if (!priv->msg_preview) - priv->msg_preview = - MODEST_TNY_MSG_VIEW(modest_tny_msg_view_new (NULL)); - - if (!priv->msg_preview) - g_printerr ("modest: cannot instantiate header view\n"); - - return priv->msg_preview; +GtkWidget* +modest_widget_factory_get_status_bar (ModestWidgetFactory *self) +{ + g_return_val_if_fail (self, NULL); + return MODEST_WIDGET_FACTORY_GET_PRIVATE(self)->status_bar; } static void -on_folder_clicked (ModestTnyFolderTreeView *folder_view, TnyMsgFolderIface *folder, - ModestWidgetFactory *self) +on_folder_selected (ModestFolderView *folder_view, TnyMsgFolderIface *folder, + ModestWidgetFactory *self) { ModestWidgetFactoryPrivate *priv; priv = MODEST_WIDGET_FACTORY_GET_PRIVATE(self); - modest_tny_header_tree_view_set_folder (priv->header_view, folder); + modest_header_view_set_folder (priv->header_view, folder); } static void -on_message_selected (ModestTnyFolderTreeView *folder_view, TnyMsgIface *msg, +on_message_selected (ModestHeaderView *folder_view, TnyMsgIface *msg, ModestWidgetFactory *self) { ModestWidgetFactoryPrivate *priv; priv = MODEST_WIDGET_FACTORY_GET_PRIVATE(self); - - modest_tny_msg_view_set_message (priv->msg_preview, msg); + + modest_msg_view_set_message (priv->msg_preview, msg); } -ModestAccountView* -modest_widget_factory_get_account_view_widget (ModestWidgetFactory *self) +static void +on_header_status_update (ModestHeaderView *header_view, const gchar *msg, + gint status_id, ModestWidgetFactory *self) { ModestWidgetFactoryPrivate *priv; + priv = MODEST_WIDGET_FACTORY_GET_PRIVATE(self); - g_return_val_if_fail (self, NULL); + if (msg && status_id) { + gchar *msg = g_strdup_printf ("%s", msg); + gtk_progress_bar_pulse (GTK_PROGRESS_BAR(priv->progress_bar)); + gtk_statusbar_push (GTK_STATUSBAR(priv->status_bar), + priv->status_bar_ctx[STATUS_ID_HEADER], + msg); + g_free (msg); + } else { + gtk_statusbar_pop (GTK_STATUSBAR(priv->status_bar), + priv->status_bar_ctx[STATUS_ID_HEADER]); + gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR(priv->progress_bar), + 1.0); + } +} + + +static void +on_msg_link_hover (ModestMsgView *msgview, const gchar* link, + ModestWidgetFactory *self) +{ + ModestWidgetFactoryPrivate *priv; + priv = MODEST_WIDGET_FACTORY_GET_PRIVATE(self); + if (link) + gtk_statusbar_push (GTK_STATUSBAR(priv->status_bar), + priv->status_bar_ctx[STATUS_ID_MESSAGE], + link); + else + gtk_statusbar_pop (GTK_STATUSBAR(priv->status_bar), + priv->status_bar_ctx[STATUS_ID_MESSAGE]); + +} + + +static void +on_msg_link_clicked (ModestMsgView *msgview, const gchar* link, + ModestWidgetFactory *self) +{ + ModestWidgetFactoryPrivate *priv; priv = MODEST_WIDGET_FACTORY_GET_PRIVATE(self); - if (!priv->account_view) - priv->account_view = - MODEST_ACCOUNT_VIEW(modest_account_view_new (priv->account_mgr)); + if (link) { + gchar *msg = g_strdup_printf (_("Opening %s..."), link); + gtk_statusbar_push (GTK_STATUSBAR(priv->status_bar), + priv->status_bar_ctx[STATUS_ID_MESSAGE], + msg); + g_free (msg); + } +} - if (!priv->account_view) - g_printerr ("modest: cannot create account view widget\n"); +static void +on_msg_attachment_clicked (ModestMsgView *msgview, int index, + ModestWidgetFactory *self) +{ + ModestWidgetFactoryPrivate *priv; + priv = MODEST_WIDGET_FACTORY_GET_PRIVATE(self); - return priv->account_view; + gchar *msg = g_strdup_printf (_("Opening attachment %d..."), index); + gtk_statusbar_push (GTK_STATUSBAR(priv->status_bar), + priv->status_bar_ctx[STATUS_ID_MESSAGE], + msg); + g_free (msg); }