X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Fmodest-widget-factory.c;h=d50159984836b7c2cce96d4416c4c70f0f52ae22;hb=64f330406ee211787d0965b7ae2d75657eb6f696;hp=d6b8d7f84a4f68fed0cf67c4fef58bf831fed800;hpb=4c17eac51757809148b84e229bede6323aac270a;p=modest diff --git a/src/modest-widget-factory.c b/src/modest-widget-factory.c index d6b8d7f..d501599 100644 --- a/src/modest-widget-factory.c +++ b/src/modest-widget-factory.c @@ -28,12 +28,20 @@ */ #include +#include #include "modest-widget-factory.h" +#include #include +#include +#include #include #include +#include + #include "modest-tny-platform-factory.h" #include "modest-account-mgr.h" +#include "modest-mail-operation.h" + /* 'private'/'protected' functions */ static void modest_widget_factory_class_init (ModestWidgetFactoryClass *klass); @@ -42,13 +50,16 @@ static void modest_widget_factory_finalize (GObject *obj); /* callbacks */ -static void on_folder_selected (ModestFolderView *folder_view, - TnyFolder *folder, - ModestWidgetFactory *self); +static void on_folder_selection_changed (ModestFolderView *folder_view, + TnyFolder *folder, gboolean selected, + ModestWidgetFactory *self); +static void on_folder_key_press_event (ModestFolderView *header_view, + GdkEventKey *event, + gpointer user_data); static void on_message_selected (ModestHeaderView *header_view, TnyMsg *msg, ModestWidgetFactory *self); static void on_header_status_update (ModestHeaderView *header_view, const gchar *msg, - gint status_id, ModestWidgetFactory *self); + gint num, gint total, 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, @@ -77,20 +88,20 @@ enum { typedef struct _ModestWidgetFactoryPrivate ModestWidgetFactoryPrivate; struct _ModestWidgetFactoryPrivate { - TnyPlatformFactory *fact; - TnyAccountStore *account_store; - ModestProtocolMgr *proto_mgr; + TnyPlatformFactory *fact; + ModestProtocolMgr *proto_mgr; + TnyAccountStore *account_store; - ModestHeaderView *header_view; - ModestFolderView *folder_view; - ModestMsgView *msg_preview; - ModestToolbar *main_toolbar, *edit_toolbar; + ModestHeaderView *header_view; + ModestFolderView *folder_view; + ModestMsgView *msg_preview; + ModestToolbar *main_toolbar, *edit_toolbar; - GtkWidget *progress_bar; - GtkWidget *status_bar; - GtkWidget *folder_info_label; + GtkWidget *progress_bar; + GtkWidget *status_bar; + GtkWidget *folder_info_label; - GtkWidget *online_toggle; + GtkWidget *online_toggle; }; #define MODEST_WIDGET_FACTORY_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), \ MODEST_TYPE_WIDGET_FACTORY, \ @@ -143,7 +154,7 @@ modest_widget_factory_init (ModestWidgetFactory *obj) ModestWidgetFactoryPrivate *priv; priv = MODEST_WIDGET_FACTORY_GET_PRIVATE(obj); - priv->fact = modest_tny_platform_factory_get_instance (); + priv->fact = modest_tny_platform_factory_get_instance (); priv->account_store = tny_platform_factory_new_account_store (priv->fact); priv->proto_mgr = modest_protocol_mgr_new (); @@ -155,6 +166,7 @@ modest_widget_factory_init (ModestWidgetFactory *obj) FALSE); } + static void modest_widget_factory_finalize (GObject *obj) { @@ -165,22 +177,26 @@ modest_widget_factory_finalize (GObject *obj) g_object_unref (G_OBJECT(priv->proto_mgr)); priv->proto_mgr = NULL; } + + G_OBJECT_CLASS(parent_class)->finalize (obj); } +/* FIXME: uninit these as well */ static void init_signals (ModestWidgetFactory *self) { - TnyDevice *device; ModestWidgetFactoryPrivate *priv; priv = MODEST_WIDGET_FACTORY_GET_PRIVATE(self); /* folder view */ - g_signal_connect (G_OBJECT(priv->folder_view), "folder_selected", - G_CALLBACK(on_folder_selected), self); + g_signal_connect (G_OBJECT(priv->folder_view), "folder_selection_changed", + G_CALLBACK(on_folder_selection_changed), self); + g_signal_connect (G_OBJECT(priv->folder_view), "key-press-event", + G_CALLBACK(on_folder_key_press_event), self); /* header view */ g_signal_connect (G_OBJECT(priv->header_view), "status_update", @@ -222,15 +238,20 @@ static gboolean init_widgets (ModestWidgetFactory *self) { ModestWidgetFactoryPrivate *priv; + TnyFolderStoreQuery *query; priv = MODEST_WIDGET_FACTORY_GET_PRIVATE(self); /* folder view */ + query = tny_folder_store_query_new (); + tny_folder_store_query_add_item (query, NULL, TNY_FOLDER_STORE_QUERY_OPTION_SUBSCRIBED); if (!(priv->folder_view = - MODEST_FOLDER_VIEW(modest_folder_view_new (MODEST_TNY_ACCOUNT_STORE (priv->account_store))))) { + MODEST_FOLDER_VIEW(modest_folder_view_new (MODEST_TNY_ACCOUNT_STORE (priv->account_store), + query)))) { g_printerr ("modest: cannot instantiate folder view\n"); return FALSE; } + g_object_unref (G_OBJECT (query)); /* header view */ if (!(priv->header_view = @@ -267,7 +288,6 @@ modest_widget_factory_new (void) { GObject *obj; ModestWidgetFactoryPrivate *priv; - ModestAccountMgr *account_mgr; obj = g_object_new (MODEST_TYPE_WIDGET_FACTORY, NULL); priv = MODEST_WIDGET_FACTORY_GET_PRIVATE(obj); @@ -362,8 +382,8 @@ get_transports (ModestWidgetFactory *self) data = modest_account_mgr_get_account_data (account_mgr, account_name); if (data && data->transport_account) { gchar *display_name = g_strdup_printf ("%s (%s)", data->email, account_name); - ModestPair *pair = modest_pair_new ((gpointer)account_name, - (gpointer)display_name , TRUE); + ModestPair *pair = modest_pair_new ((gpointer) data, + (gpointer) display_name , TRUE); transports = g_slist_append (transports, pair); } /* don't free account name; it's freed when the transports list is freed */ @@ -461,31 +481,79 @@ modest_widget_factory_get_edit_toolbar (ModestWidgetFactory *self, static void -on_folder_selected (ModestFolderView *folder_view, TnyFolder *folder, - ModestWidgetFactory *self) +on_folder_selection_changed (ModestFolderView *folder_view, TnyFolder *folder, + gboolean selected, + ModestWidgetFactory *self) { ModestWidgetFactoryPrivate *priv; - gchar *txt; + gchar *txt; priv = MODEST_WIDGET_FACTORY_GET_PRIVATE(self); - - modest_header_view_set_folder (priv->header_view, folder); - - if (folder) { - guint num, unread; - - num = tny_folder_get_all_count (folder); - unread = tny_folder_get_unread_count (folder); - txt = g_strdup_printf (_("%d %s, %d unread"), - num, num==1 ? _("item") : _("items"), unread); + if (folder) { + ModestConf *conf; - gtk_label_set_label (GTK_LABEL(priv->folder_info_label), txt); - g_free (txt); + conf = modest_tny_platform_factory_get_modest_conf_instance (priv->fact); + + if (!selected) { /* the folder was unselected; save it's settings */ + modest_widget_memory_save (conf, G_OBJECT (priv->header_view), + "header-view"); + } else { /* the folder was selected */ + guint num, unread; + num = tny_folder_get_all_count (folder); + unread = tny_folder_get_unread_count (folder); + + txt = g_strdup_printf (_("%d %s, %d unread"), + num, num==1 ? _("item") : _("items"), unread); + gtk_label_set_label (GTK_LABEL(priv->folder_info_label), txt); + g_free (txt); + + modest_header_view_set_folder (priv->header_view, folder); + modest_widget_memory_restore (conf, G_OBJECT(priv->header_view), + "header-view"); + } } else - gtk_label_set_label (GTK_LABEL(priv->folder_info_label), ""); + gtk_label_set_label (GTK_LABEL(priv->folder_info_label), ""); } +/*********************** Test code ********************/ +static void +on_folder_key_press_event (ModestFolderView *folder_view, GdkEventKey *event, gpointer user_data) +{ + GtkTreeSelection *selection; + GtkTreeModel *model; + GtkTreeIter iter; + TnyFolderStore *folder; + gint type; + ModestMailOperation *mail_op; + + selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (folder_view)); + gtk_tree_selection_get_selected (selection, &model, &iter); + + gtk_tree_model_get (model, &iter, + TNY_GTK_FOLDER_STORE_TREE_MODEL_TYPE_COLUMN, &type, + TNY_GTK_FOLDER_STORE_TREE_MODEL_INSTANCE_COLUMN, &folder, + -1); + + mail_op = modest_mail_operation_new (); + + if (event->keyval == GDK_C || event->keyval == GDK_c) { + if (type != TNY_FOLDER_TYPE_ROOT) + modest_mail_operation_create_folder (mail_op, folder, "New"); + } else if (event->keyval == GDK_D || event->keyval == GDK_d) { + if (type != TNY_FOLDER_TYPE_ROOT) + modest_mail_operation_remove_folder (mail_op, TNY_FOLDER (folder), FALSE); + } else if (event->keyval == GDK_N || event->keyval == GDK_n) { + if (type != TNY_FOLDER_TYPE_ROOT) + modest_mail_operation_rename_folder (mail_op, TNY_FOLDER (folder), "New Name"); + } else if (event->keyval == GDK_T || event->keyval == GDK_t) { + if (type != TNY_FOLDER_TYPE_ROOT) + modest_mail_operation_remove_folder (mail_op, TNY_FOLDER (folder), TRUE); + } + + g_object_unref (G_OBJECT (mail_op)); +} +/****************************************************/ static void on_message_selected (ModestHeaderView *folder_view, TnyMsg *msg, @@ -551,13 +619,18 @@ statusbar_push (ModestWidgetFactory *self, guint context_id, const gchar *msg) static void on_header_status_update (ModestHeaderView *header_view, const gchar *msg, - gint status_id, ModestWidgetFactory *self) + gint num, gint total, ModestWidgetFactory *self) { ModestWidgetFactoryPrivate *priv; priv = MODEST_WIDGET_FACTORY_GET_PRIVATE(self); - - gtk_progress_bar_pulse (GTK_PROGRESS_BAR(priv->progress_bar)); + + if (total != 0) + gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR(priv->progress_bar), + (gdouble)num/(gdouble)total); + else + gtk_progress_bar_pulse (GTK_PROGRESS_BAR(priv->progress_bar)); + statusbar_push (self, 0, msg); } @@ -632,8 +705,9 @@ on_online_toggle_toggled (GtkToggleButton *toggle, ModestWidgetFactory *self) } -static void on_item_not_found (ModestHeaderView* header_view, ModestItemType type, - ModestWidgetFactory *self) +static void +on_item_not_found (ModestHeaderView* header_view, ModestItemType type, + ModestWidgetFactory *self) { /* FIXME ==> ask from UI... */ GtkWidget *dialog; @@ -689,7 +763,7 @@ on_password_requested (ModestTnyAccountStore *account_store, const gchar* accoun gchar **password, gboolean *cancel, ModestWidgetFactory *self) { gchar *txt; - GtkWidget *dialog, *entry; + GtkWidget *dialog, *entry, *remember_pass_check; dialog = gtk_dialog_new_with_buttons (_("Password requested"), NULL, @@ -703,7 +777,7 @@ on_password_requested (ModestTnyAccountStore *account_store, const gchar* accoun txt = g_strdup_printf (_("Please enter your password for %s"), account_name); gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), gtk_label_new(txt), FALSE, FALSE, 0); - g_free (txt); + g_free (txt); entry = gtk_entry_new_with_max_length (40); gtk_entry_set_visibility (GTK_ENTRY(entry), FALSE); @@ -711,16 +785,20 @@ on_password_requested (ModestTnyAccountStore *account_store, const gchar* accoun gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), entry, TRUE, FALSE, 0); - + + remember_pass_check = gtk_check_button_new_with_label (_("Remember password")); + gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), remember_pass_check, + TRUE, FALSE, 0); + gtk_widget_show_all (GTK_WIDGET(GTK_DIALOG(dialog)->vbox)); if (gtk_dialog_run (GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) { - *password = g_strdup(gtk_entry_get_text (GTK_ENTRY(entry))); + *password = g_strdup (gtk_entry_get_text (GTK_ENTRY(entry))); *cancel = FALSE; } else { *password = NULL; *cancel = TRUE; - } + } gtk_widget_destroy (dialog); }