* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include <glib/gi18n.h>
+#include <gtk/gtkaboutdialog.h>
+#include <gtk/gtktreeviewcolumn.h>
+
#include <modest-widget-memory.h>
#include <modest-icon-factory.h>
#include "modest-main-window.h"
#include "modest-account-view-window.h"
+#include "modest-account-mgr.h"
+#include "modest-conf.h"
#include "modest-edit-msg-window.h"
#include "modest-icon-names.h"
-
+#include "modest-tny-platform-factory.h"
+#include "modest-tny-msg-actions.h"
+#include "modest-mail-operation.h"
/* 'private'/'protected' functions */
static void modest_main_window_class_init (ModestMainWindowClass *klass);
GtkWidget *msg_paned;
GtkWidget *main_paned;
- ModestWidgetFactory *factory;
- ModestConf *conf;
- ModestAccountMgr *account_mgr;
-
+ ModestWidgetFactory *widget_factory;
+ TnyPlatformFactory *factory;
+
ModestHeaderView *header_view;
ModestFolderView *folder_view;
ModestMsgView *msg_preview;
ModestMainWindowPrivate *priv;
priv = MODEST_MAIN_WINDOW_GET_PRIVATE(obj);
-
- priv->factory = NULL;
- priv->conf = NULL;
- priv->account_mgr = NULL;
+
+ priv->factory = modest_tny_platform_factory_get_instance ();
}
static void
{
ModestMainWindowPrivate *priv;
priv = MODEST_MAIN_WINDOW_GET_PRIVATE(obj);
- if (priv->factory) {
- g_object_unref (G_OBJECT(priv->factory));
- priv->factory = NULL;
+ if (priv->widget_factory) {
+ g_object_unref (G_OBJECT(priv->widget_factory));
+ priv->widget_factory = NULL;
}
- if (priv->conf) {
- g_object_unref (G_OBJECT(priv->conf));
- priv->conf = NULL;
- }
-
- if (priv->account_mgr) {
- g_object_unref (G_OBJECT(priv->account_mgr));
- priv->account_mgr = NULL;
- }
G_OBJECT_CLASS(parent_class)->finalize (obj);
}
g_return_if_fail (self);
priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self);
- account_win = modest_account_view_window_new (priv->account_mgr,
- priv->factory);
+ account_win = modest_account_view_window_new (priv->widget_factory);
gtk_window_set_transient_for (GTK_WINDOW(account_win),
GTK_WINDOW(self));
GtkWidget *msg_win;
ModestMainWindowPrivate *priv;
- priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self);
+ priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self);
- msg_win = modest_edit_msg_window_new (priv->conf,
- priv->factory,
+ msg_win = modest_edit_msg_window_new (priv->widget_factory,
MODEST_EDIT_TYPE_NEW,
NULL);
gtk_widget_show (msg_win);
}
static void
+on_menu_reply_forward (ModestMainWindow *self, guint action, GtkWidget *widget)
+{
+ GtkWidget *msg_win;
+ ModestMainWindowPrivate *priv;
+ ModestHeaderView *header_view;
+ TnyList *header_list;
+ TnyIterator *iter;
+ const gchar *from;
+ gchar *reply_key, *forward_key;
+ ModestMailOperationReplyType reply_type;
+ ModestMailOperationForwardType forward_type;
+ ModestConf *conf;
+ GError *error;
+
+ priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self);
+ conf = modest_tny_platform_factory_get_modest_conf_instance (priv->factory);
+
+ header_view = modest_widget_factory_get_header_view (priv->widget_factory);
+ header_list = modest_header_view_get_selected_headers (header_view);
+
+ /* Get reply and forward types */
+ error = NULL;
+ reply_key = g_strdup_printf ("%s/%s", MODEST_CONF_NAMESPACE, MODEST_CONF_REPLY_TYPE);
+ reply_type = modest_conf_get_int (conf, reply_key, &error);
+ if (error) {
+ g_warning ("key %s not defined", reply_key);
+ reply_type = MODEST_MAIL_OPERATION_REPLY_TYPE_CITE;
+ g_error_free (error);
+ error = NULL;
+ }
+ g_free (reply_key);
+
+ forward_key = g_strdup_printf ("%s/%s", MODEST_CONF_NAMESPACE, MODEST_CONF_FORWARD_TYPE);
+ forward_type = modest_conf_get_int (conf, forward_key, NULL);
+ if (error) {
+ g_warning ("key %s not defined", forward_key);
+ reply_type = MODEST_MAIL_OPERATION_FORWARD_TYPE_INLINE;
+ g_error_free (error);
+ }
+ g_free (forward_key);
+
+ if (header_list) {
+ iter = tny_list_create_iterator (header_list);
+ do {
+ TnyHeader *header, *new_header;
+ TnyFolder *folder;
+ TnyMsg *msg, *new_msg;
+ ModestEditType edit_type;
+
+ /* Get msg from header */
+ header = TNY_HEADER (tny_iterator_get_current (iter));
+ folder = tny_header_get_folder (header);
+ msg = tny_folder_get_msg (folder, header);
+
+ from = modest_folder_view_get_selected_account (priv->folder_view);
+
+ /* FIXME: select proper action */
+ switch (action) {
+ case 1:
+ new_msg =
+ modest_mail_operation_create_reply_mail (msg, from, reply_type,
+ MODEST_MAIL_OPERATION_REPLY_MODE_SENDER);
+ edit_type = MODEST_EDIT_TYPE_REPLY;
+ break;
+ case 2:
+ new_msg =
+ modest_mail_operation_create_reply_mail (msg, from, reply_type,
+ MODEST_MAIL_OPERATION_REPLY_MODE_ALL);
+ edit_type = MODEST_EDIT_TYPE_REPLY;
+ break;
+ case 3:
+ new_msg =
+ modest_mail_operation_create_forward_mail (msg, from, forward_type);
+ edit_type = MODEST_EDIT_TYPE_FORWARD;
+ break;
+ default:
+ g_warning ("unexpected action type: %d", action);
+ }
+
+ /* Set from */
+ new_header = tny_msg_get_header (new_msg);
+ tny_header_set_from (new_header,
+ modest_folder_view_get_selected_account (priv->folder_view));
+
+ /* Show edit window */
+ msg_win = modest_edit_msg_window_new (priv->widget_factory,
+ edit_type,
+ new_msg);
+ gtk_widget_show (msg_win);
+
+ /* Clean and go on */
+ g_object_unref (new_msg);
+ tny_iterator_next (iter);
+
+ } while (!tny_iterator_is_done (iter));
+ }
+}
+
+static void
on_menu_quit (ModestMainWindow *self, guint action, GtkWidget *widget)
{
save_sizes (self);
gtk_widget_destroy (GTK_WIDGET(self));
}
+static void
+on_menu_delete (ModestMainWindow *self, guint action, GtkWidget *widget)
+{
+ ModestMainWindowPrivate *priv;
+ ModestHeaderView *header_view;
+ TnyList *header_list;
+ TnyIterator *iter;
+ GtkTreeModel *model;
+
+ priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self);
+
+ header_view = modest_widget_factory_get_header_view (priv->widget_factory);
+ header_list = modest_header_view_get_selected_headers (header_view);
+
+ if (header_list) {
+ iter = tny_list_create_iterator (header_list);
+ model = gtk_tree_view_get_model (GTK_TREE_VIEW (header_view));
+ if (GTK_IS_TREE_MODEL_SORT (model))
+ model = gtk_tree_model_sort_get_model (GTK_TREE_MODEL_SORT (model));
+ do {
+ TnyHeader *header;
+ ModestMailOperation *mail_op;
+
+ header = TNY_HEADER (tny_iterator_get_current (iter));
+ /* TODO: thick grain mail operation involving
+ a list of objects. Composite pattern ??? */
+ mail_op = modest_mail_operation_new ();
+
+ /* Move to trash */
+ modest_mail_operation_remove_msg (mail_op, header, TRUE);
+
+ /* Remove from tree model */
+ tny_list_remove (TNY_LIST (model), G_OBJECT (header));
+
+ g_object_unref (G_OBJECT (mail_op));
+ g_object_unref (header);
+ tny_iterator_next (iter);
+
+ } while (!tny_iterator_is_done (iter));
+ }
+}
+
/* Our menu, an array of GtkItemFactoryEntry structures that defines each menu item */
static GtkItemFactoryEntry menu_items[] = {
{ "/_Actions", NULL, NULL, 0, "<Branch>" ,NULL},
{ "/Actions/_New Message", NULL, on_menu_new_message, 0, "<Item>",NULL },
- { "/Actions/_Reply", NULL, NULL, 0, "<Item>" ,NULL},
- { "/Actions/_Forward", NULL, NULL, 0, "<Item>" ,NULL},
+ { "/Actions/_Reply", NULL, on_menu_reply_forward, 1, "<Item>" ,NULL},
+ { "/Actions/_Forward", NULL, on_menu_reply_forward, 3, "<Item>" ,NULL},
{ "/Actions/_Bounce", NULL, NULL, 0, "<Item>",NULL },
{ "/_Options", NULL, NULL, 0, "<Branch>" ,NULL},
ModestHeaderViewColumn cols[] = {
MODEST_HEADER_VIEW_COLUMN_MSGTYPE,
MODEST_HEADER_VIEW_COLUMN_ATTACH,
- MODEST_HEADER_VIEW_COLUMN_COMPACT_HEADER
-/* MODEST_HEADER_VIEW_COLUMN_FROM, */
-/* MODEST_HEADER_VIEW_COLUMN_SUBJECT, */
-/* MODEST_HEADER_VIEW_COLUMN_RECEIVED_DATE */
+/* MODEST_HEADER_VIEW_COLUMN_COMPACT_HEADER, */
+ MODEST_HEADER_VIEW_COLUMN_FROM,
+ MODEST_HEADER_VIEW_COLUMN_SUBJECT,
+ MODEST_HEADER_VIEW_COLUMN_RECEIVED_DATE
};
priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self);
for (i = 0 ; i != sizeof(cols) / sizeof(ModestHeaderViewColumn); ++i)
columns = g_slist_append (columns, GINT_TO_POINTER(cols[i]));
- header_view = modest_widget_factory_get_header_view (priv->factory);
+ header_view = modest_widget_factory_get_header_view (priv->widget_factory);
modest_header_view_set_columns (header_view, columns);
g_slist_free (columns);
on_menu_new_message (self, 0, NULL);
break;
case MODEST_TOOLBAR_BUTTON_REPLY:
+ on_menu_reply_forward (self, 1, NULL);
break;
case MODEST_TOOLBAR_BUTTON_REPLY_ALL:
+ on_menu_reply_forward (self, 2, NULL);
break;
case MODEST_TOOLBAR_BUTTON_FORWARD:
+ on_menu_reply_forward (self, 3, NULL);
break;
case MODEST_TOOLBAR_BUTTON_SEND_RECEIVE:
break;
case MODEST_TOOLBAR_BUTTON_DELETE:
+ on_menu_delete (self, 0, GTK_WIDGET (toolbar));
+ break;
default:
g_printerr ("modest: key %d pressed\n", button_id);
for (i = 0 ; i != sizeof(button_ids) / sizeof(ModestToolbarButton); ++i)
buttons = g_slist_append (buttons, GINT_TO_POINTER(button_ids[i]));
- toolbar = modest_widget_factory_get_main_toolbar (priv->factory, buttons);
+ toolbar = modest_widget_factory_get_main_toolbar (priv->widget_factory, buttons);
g_slist_free (buttons);
g_signal_connect (G_OBJECT(toolbar), "button_clicked",
static void
restore_sizes (ModestMainWindow *self)
{
- ModestMainWindowPrivate *priv;
- priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self);
+ ModestConf *conf;
+ ModestMainWindowPrivate *priv;
- modest_widget_memory_restore_settings (priv->conf,GTK_WIDGET(self),
+ priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self);
+ conf = modest_tny_platform_factory_get_modest_conf_instance (priv->factory);
+
+ modest_widget_memory_restore_settings (conf,GTK_WIDGET(self),
"modest-main-window");
- modest_widget_memory_restore_settings (priv->conf, GTK_WIDGET(priv->folder_paned),
+ modest_widget_memory_restore_settings (conf, GTK_WIDGET(priv->folder_paned),
"modest-folder-paned");
- modest_widget_memory_restore_settings (priv->conf, GTK_WIDGET(priv->msg_paned),
+ modest_widget_memory_restore_settings (conf, GTK_WIDGET(priv->msg_paned),
"modest-msg-paned");
- modest_widget_memory_restore_settings (priv->conf, GTK_WIDGET(priv->main_paned),
+ modest_widget_memory_restore_settings (conf, GTK_WIDGET(priv->main_paned),
"modest-main-paned");
}
save_sizes (ModestMainWindow *self)
{
ModestMainWindowPrivate *priv;
+ ModestConf *conf;
priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self);
+ conf = modest_tny_platform_factory_get_modest_conf_instance (priv->factory);
- modest_widget_memory_save_settings (priv->conf,GTK_WIDGET(self),
+ modest_widget_memory_save_settings (conf,GTK_WIDGET(self),
"modest-main-window");
- modest_widget_memory_save_settings (priv->conf, GTK_WIDGET(priv->folder_paned),
+ modest_widget_memory_save_settings (conf, GTK_WIDGET(priv->folder_paned),
"modest-folder-paned");
- modest_widget_memory_save_settings (priv->conf, GTK_WIDGET(priv->msg_paned),
+ modest_widget_memory_save_settings (conf, GTK_WIDGET(priv->msg_paned),
"modest-msg-paned");
- modest_widget_memory_save_settings (priv->conf, GTK_WIDGET(priv->main_paned),
+ modest_widget_memory_save_settings (conf, GTK_WIDGET(priv->main_paned),
"modest-main-paned");
}
GtkWidget*
-modest_main_window_new (ModestConf *conf, ModestAccountMgr *account_mgr,
- ModestWidgetFactory *factory)
+modest_main_window_new (ModestWidgetFactory *widget_factory)
{
GObject *obj;
ModestMainWindowPrivate *priv;
GtkWidget *status_hbox;
GtkWidget *header_win, *folder_win, *favorites_win;
- g_return_val_if_fail (factory, NULL);
- g_return_val_if_fail (conf, NULL);
+ g_return_val_if_fail (widget_factory, NULL);
obj = g_object_new(MODEST_TYPE_MAIN_WINDOW, NULL);
priv = MODEST_MAIN_WINDOW_GET_PRIVATE(obj);
- g_object_ref (factory);
- priv->factory = factory;
-
- g_object_ref (conf);
- priv->conf = conf;
-
- g_object_ref (account_mgr);
- priv->account_mgr = account_mgr;
+ g_object_ref (widget_factory);
+ priv->widget_factory = widget_factory;
/* widgets from factory */
- priv->folder_view = modest_widget_factory_get_folder_view (factory);
+ priv->folder_view = modest_widget_factory_get_folder_view (widget_factory);
priv->header_view = header_view_new (MODEST_MAIN_WINDOW(obj));
- priv->msg_preview = modest_widget_factory_get_msg_preview (factory);
+ priv->msg_preview = modest_widget_factory_get_msg_preview (widget_factory);
folder_win = wrapped_in_scrolled_window (GTK_WIDGET(priv->folder_view),
FALSE);
/* status bar / progress */
status_hbox = gtk_hbox_new (FALSE, 0);
gtk_box_pack_start (GTK_BOX(status_hbox),
- modest_widget_factory_get_folder_info_label (factory),
+ modest_widget_factory_get_folder_info_label (widget_factory),
FALSE,FALSE, 6);
gtk_box_pack_start (GTK_BOX(status_hbox),
- modest_widget_factory_get_status_bar(factory),
+ modest_widget_factory_get_status_bar(widget_factory),
TRUE, TRUE, 0);
gtk_box_pack_start (GTK_BOX(status_hbox),
- modest_widget_factory_get_progress_bar(factory),
+ modest_widget_factory_get_progress_bar(widget_factory),
FALSE, FALSE, 0);
gtk_box_pack_start (GTK_BOX(status_hbox),
- modest_widget_factory_get_online_toggle(factory),
+ modest_widget_factory_get_online_toggle(widget_factory),
FALSE, FALSE, 0);
/* putting it all together... */