X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fgtk%2Fmodest-main-window.c;h=c88cee245b6409a424dd753193557e994bc85fc4;hp=e0a27308185e78f471d1be6f6233805e7ca4b633;hb=f6ae525c79d3665c68a050b4037ea8105b490f05;hpb=731439d31b823a63eb2e26ba330fac487f240dc4 diff --git a/src/gtk/modest-main-window.c b/src/gtk/modest-main-window.c index e0a2730..c88cee2 100644 --- a/src/gtk/modest-main-window.c +++ b/src/gtk/modest-main-window.c @@ -1,61 +1,57 @@ -/* modest-main-window.c */ - -/* insert (c)/licensing information) */ -#include -#include - - -#ifdef HAVE_CONFIG_H -#include -#endif /*HAVE_CONFIG_H*/ +/* Copyright (c) 2006, Nokia Corporation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the Nokia Corporation nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER + * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ #include -#include "modest-main-window.h" - - - -#include "../modest-tny-account-store.h" -#include "../modest-tny-folder-tree-view.h" -#include "../modest-tny-header-tree-view.h" -#include "../modest-tny-msg-view.h" - +#include +#include "modest-main-window.h" +#include "modest-widget-factory.h" +#include "modest-widget-memory.h" +#include "modest-icon-factory.h" +#include "modest-ui.h" +#include "modest-main-window-ui.h" +#include "modest-account-view-window.h" +#include "modest-account-mgr.h" +#include "modest-conf.h" +#include "modest-edit-msg-window.h" +#include "modest-tny-platform-factory.h" +#include "modest-tny-msg-actions.h" +#include "modest-mail-operation.h" +#include "modest-icon-names.h" /* 'private'/'protected' functions */ -static void modest_main_window_class_init (ModestMainWindowClass *klass); -static void modest_main_window_init (ModestMainWindow *obj, - ModestConf *conf, - ModestAccountMgr *modest_acc_mgr); -static void modest_main_window_finalize (GObject *obj); - - -static GtkWidget* modest_main_window_folder_tree (ModestAccountMgr *modest_acc_mgr); -static GtkWidget* modest_main_window_header_tree (TnyMsgFolderIface *folder); - -static GtkWidget* modest_main_window_toolbar (void); -static GtkWidget* modest_main_window_favorite_folder_list (void); -static GtkWidget* modest_main_window_message_preview (void); -static GtkWidget * modest_main_window_get_ui (ModestTnyFolderTreeView *folder_view, - ModestTnyHeaderTreeView *header_view, - ModestTnyMsgView *message_view); -static void on_newmail_clicked (GtkToolButton *button, gpointer data); -static void on_refresh_clicked (GtkToolButton *button, gpointer data); -static void on_reply_clicked (GtkToolButton *button, gpointer data); -static void on_forward_clicked (GtkToolButton *button, gpointer data); -static void on_delmail_clicked (GtkToolButton *button, gpointer data); -static void on_cut_clicked (GtkToolButton *button, gpointer data); -static void on_copy_clicked (GtkToolButton *button, gpointer data); -static void on_paste_clicked (GtkToolButton *button, gpointer data); -static void on_quit_clicked (GtkToolButton *button, gpointer data); - -static void on_folder_clicked (ModestTnyFolderTreeView *self, - TnyMsgFolderIface *folder, - gpointer data); -static void on_message_clicked (ModestTnyFolderTreeView *folder_tree, - TnyMsgIface *message, - gpointer data); - +static void modest_main_window_class_init (ModestMainWindowClass *klass); +static void modest_main_window_init (ModestMainWindow *obj); +static void modest_main_window_finalize (GObject *obj); +static void restore_sizes (ModestMainWindow *self); +static void save_sizes (ModestMainWindow *self); /* list my signals */ enum { @@ -67,18 +63,39 @@ enum { typedef struct _ModestMainWindowPrivate ModestMainWindowPrivate; struct _ModestMainWindowPrivate { - ModestConf *modest_conf; - ModestAccountMgr *modest_acc_mgr; + GtkUIManager *ui_manager; + ModestWidgetFactory *widget_factory; + TnyPlatformFactory *factory; + TnyAccountStore *account_store; + + GtkWidget *toolbar; + GtkWidget *menubar; - ModestTnyFolderTreeView *folder_view; - ModestTnyHeaderTreeView *header_view; - ModestTnyMsgView *message_view; + GtkWidget *folder_paned; + GtkWidget *msg_paned; + GtkWidget *main_paned; + + ModestHeaderView *header_view; + ModestFolderView *folder_view; + ModestMsgView *msg_preview; }; + + #define MODEST_MAIN_WINDOW_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), \ MODEST_TYPE_MAIN_WINDOW, \ ModestMainWindowPrivate)) + +typedef struct _GetMsgAsyncHelper { + ModestMainWindowPrivate *main_window_private; + guint action; + ModestMailOperationReplyType reply_type; + ModestMailOperationForwardType forward_type; + gchar *from; + TnyIterator *iter; +} GetMsgAsyncHelper; + /* globals */ -static GtkWidgetClass *parent_class = NULL; +static GtkWindowClass *parent_class = NULL; /* uncomment the following if you have defined any signals */ /* static guint signals[LAST_SIGNAL] = {0}; */ @@ -98,6 +115,7 @@ modest_main_window_get_type (void) sizeof(ModestMainWindow), 1, /* n_preallocs */ (GInstanceInitFunc) modest_main_window_init, + NULL }; my_type = g_type_register_static (GTK_TYPE_WINDOW, "ModestMainWindow", @@ -125,408 +143,273 @@ modest_main_window_class_init (ModestMainWindowClass *klass) /* etc. */ } -static GtkWidget* -wrapped_in_scrolled_win (GtkWidget *child) +static void +modest_main_window_init (ModestMainWindow *obj) { - GtkWidget *scrolled_win; - - scrolled_win = gtk_scrolled_window_new (NULL, NULL); - gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW(scrolled_win), - GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); - gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW(scrolled_win), - GTK_SHADOW_IN); - gtk_container_add (GTK_CONTAINER(scrolled_win), child); - return scrolled_win; -} + ModestMainWindowPrivate *priv; + priv = MODEST_MAIN_WINDOW_GET_PRIVATE(obj); - -static void -modest_main_window_init (ModestMainWindow *obj, ModestConf *modest_conf, - ModestAccountMgr *modest_acc_mgr) -{ + priv->factory = modest_tny_platform_factory_get_instance (); + priv->widget_factory = NULL; + priv->ui_manager = NULL; + priv->account_store = NULL; } - - - - static void modest_main_window_finalize (GObject *obj) { - ModestMainWindowPrivate *priv = MODEST_MAIN_WINDOW_GET_PRIVATE (obj); + ModestMainWindowPrivate *priv; + priv = MODEST_MAIN_WINDOW_GET_PRIVATE(obj); + if (priv->widget_factory) { + g_object_unref (G_OBJECT(priv->widget_factory)); + priv->widget_factory = NULL; + } + if (priv->ui_manager) { + g_object_unref (G_OBJECT(priv->ui_manager)); + priv->ui_manager = NULL; + } + if (priv->account_store) { + g_object_unref (G_OBJECT(priv->account_store)); + priv->account_store = NULL; + } - priv->modest_conf = NULL; - priv->modest_acc_mgr = NULL; + G_OBJECT_CLASS(parent_class)->finalize (obj); } - -GtkWidget* -modest_main_window_new (ModestConf *modest_conf, ModestAccountMgr *modest_acc_mgr) +static ModestHeaderView* +header_view_new (ModestMainWindow *self) { + int i; + GList *columns = NULL; + ModestHeaderView *header_view; + ModestMainWindowPrivate *priv; + 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 + }; + priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self); - GtkWidget *ui; - ModestMainWindow *self = - MODEST_MAIN_WINDOW(g_object_new(MODEST_TYPE_MAIN_WINDOW, NULL)); - ModestMainWindowPrivate *priv = MODEST_MAIN_WINDOW_GET_PRIVATE (self); - - priv->modest_conf = modest_conf; - priv->modest_acc_mgr = modest_acc_mgr; - - priv->header_view = MODEST_TNY_HEADER_TREE_VIEW(modest_main_window_header_tree (NULL)); - g_signal_connect (priv->header_view, "message_selected", - G_CALLBACK(on_message_clicked), - self); - - priv->folder_view = MODEST_TNY_FOLDER_TREE_VIEW(modest_main_window_folder_tree - (modest_acc_mgr)); - g_signal_connect (priv->folder_view, "folder_selected", - G_CALLBACK(on_folder_clicked), - self); + for (i = 0 ; i != sizeof(cols) / sizeof(ModestHeaderViewColumn); ++i) + columns = g_list_append (columns, GINT_TO_POINTER(cols[i])); - priv->message_view = MODEST_TNY_MSG_VIEW (modest_main_window_message_preview()); - - ui = modest_main_window_get_ui(priv->folder_view, - priv->header_view, - priv->message_view); - gtk_container_add (GTK_CONTAINER(self), ui); + header_view = modest_widget_factory_get_header_view (priv->widget_factory); + modest_header_view_set_columns (header_view, columns); + g_list_free (columns); - return GTK_WIDGET(self); + return header_view; } - - - -static GtkWidget * -modest_main_window_get_ui (ModestTnyFolderTreeView *folder_view, - ModestTnyHeaderTreeView *header_view, - ModestTnyMsgView *message_view) +static void +restore_sizes (ModestMainWindow *self) { - GtkWidget *vbox; - GtkWidget *msg_vpaned,*folder_vpaned, *folder_msg_hpaned; - GtkWidget *toolbar, *fav_folder_list; - GtkWidget *status_bar; - GtkWidget *swin_msg_list,*swin_folder_list, *swin_favfolder_list; - GtkWidget *folder_label, *message_label; - GtkWidget *folder_vbox, *message_vbox; - - toolbar = modest_main_window_toolbar (); - fav_folder_list = modest_main_window_favorite_folder_list (); - vbox = gtk_vbox_new (FALSE,2); - - folder_vbox = gtk_vbox_new (FALSE,2); - message_vbox = gtk_vbox_new (FALSE,2); - - msg_vpaned = gtk_vpaned_new (); - folder_vpaned = gtk_vpaned_new (); - folder_msg_hpaned = gtk_hpaned_new (); - - swin_msg_list = wrapped_in_scrolled_win (GTK_WIDGET(header_view)); - swin_folder_list = wrapped_in_scrolled_win (GTK_WIDGET(folder_view)); - swin_favfolder_list = wrapped_in_scrolled_win (fav_folder_list); - - folder_label = gtk_label_new (_("Folders")); - gtk_label_set_justify (GTK_LABEL(folder_label), GTK_JUSTIFY_LEFT); - - gtk_paned_add1 (GTK_PANED(folder_vpaned), swin_favfolder_list); - gtk_paned_add2 (GTK_PANED(folder_vpaned), swin_folder_list); - gtk_box_pack_start (GTK_BOX(folder_vbox), folder_label, FALSE, TRUE, 0); - gtk_box_pack_start (GTK_BOX(folder_vbox), folder_vpaned, TRUE, TRUE, 0); - - message_label= gtk_label_new (_("Inbox")); - gtk_label_set_justify (GTK_LABEL(message_label), GTK_JUSTIFY_LEFT); - gtk_paned_add1 (GTK_PANED(msg_vpaned), swin_msg_list); - gtk_paned_add2 (GTK_PANED(msg_vpaned), GTK_WIDGET(message_view)); - gtk_box_pack_start (GTK_BOX(message_vbox), message_label, FALSE, TRUE, 0); - gtk_box_pack_start (GTK_BOX(message_vbox), msg_vpaned, TRUE, TRUE, 0); - - - gtk_paned_add1 (GTK_PANED(folder_msg_hpaned), folder_vbox); - gtk_paned_add2 (GTK_PANED(folder_msg_hpaned), message_vbox); - - gtk_box_pack_start (GTK_BOX(vbox), toolbar, FALSE, TRUE, 0); - gtk_box_pack_start (GTK_BOX(vbox), folder_msg_hpaned, TRUE, TRUE, 0); - - status_bar = gtk_statusbar_new (); - gtk_box_pack_start (GTK_BOX(vbox), status_bar, FALSE, FALSE, 0); + ModestConf *conf; + ModestMainWindowPrivate *priv; - gtk_widget_show_all (GTK_WIDGET(vbox)); - return vbox; + priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self); + conf = modest_tny_platform_factory_get_modest_conf_instance (priv->factory); + + modest_widget_memory_restore (conf, G_OBJECT(priv->folder_paned), + "modest-folder-paned"); + modest_widget_memory_restore (conf, G_OBJECT(priv->msg_paned), + "modest-msg-paned"); + modest_widget_memory_restore (conf, G_OBJECT(priv->main_paned), + "modest-main-paned"); + modest_widget_memory_restore (conf, G_OBJECT(priv->header_view), + "header-view"); + modest_widget_memory_restore (conf,G_OBJECT(self), + "modest-main-window"); } - -static GtkWidget* -modest_main_window_header_tree (TnyMsgFolderIface *folder) +static void +save_sizes (ModestMainWindow *self) { -int i; - GSList *columns = NULL; - GtkWidget *header_tree; - ModestTnyHeaderTreeViewColumn cols[] = { - MODEST_TNY_HEADER_TREE_VIEW_COLUMN_FROM, - MODEST_TNY_HEADER_TREE_VIEW_COLUMN_TO, - MODEST_TNY_HEADER_TREE_VIEW_COLUMN_SUBJECT, - MODEST_TNY_HEADER_TREE_VIEW_COLUMN_SENT_DATE, - MODEST_TNY_HEADER_TREE_VIEW_COLUMN_RECEIVED_DATE, - MODEST_TNY_HEADER_TREE_VIEW_COLUMN_MSGTYPE, - MODEST_TNY_HEADER_TREE_VIEW_COLUMN_ATTACH - }; + ModestMainWindowPrivate *priv; + ModestConf *conf; - for (i = 0 ; i != sizeof(cols)/sizeof(ModestTnyHeaderTreeViewColumn); ++i) - columns = g_slist_append (columns, GINT_TO_POINTER(cols[i])); + priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self); + conf = modest_tny_platform_factory_get_modest_conf_instance (priv->factory); - header_tree = GTK_WIDGET(modest_tny_header_tree_view_new(folder, columns, - MODEST_TNY_HEADER_TREE_VIEW_STYLE_NORMAL)); - g_slist_free (columns); - - if (!header_tree) { - g_warning ("could not create header tree"); - return NULL; - } - - return GTK_WIDGET(header_tree); + modest_widget_memory_save (conf,G_OBJECT(self), "modest-main-window"); + modest_widget_memory_save (conf, G_OBJECT(priv->folder_paned), + "modest-folder-paned"); + modest_widget_memory_save (conf, G_OBJECT(priv->msg_paned), + "modest-msg-paned"); + modest_widget_memory_save (conf, G_OBJECT(priv->main_paned), + "modest-main-paned"); + modest_widget_memory_save (conf, G_OBJECT(priv->header_view), "header-view"); } - - static GtkWidget* -modest_main_window_folder_tree (ModestAccountMgr *modest_acc_mgr) +wrapped_in_scrolled_window (GtkWidget *widget, gboolean needs_viewport) { - GtkTreeViewColumn *column; - GtkCellRenderer *renderer = gtk_cell_renderer_text_new (); - GtkWidget *folder_tree; - TnyAccountStoreIface *account_store_iface = - TNY_ACCOUNT_STORE_IFACE(modest_tny_account_store_new (modest_acc_mgr)); - if (!account_store_iface) { - g_warning ("could not initialze ModestTnyAccountStore"); - return NULL; - } - - folder_tree = modest_tny_folder_tree_view_new (account_store_iface); - if (!folder_tree) { - g_warning ("could not create folder list"); - return NULL; - } - - column = gtk_tree_view_column_new_with_attributes(_("All Mail Folders"), - renderer,"text", - TNY_ACCOUNT_TREE_MODEL_NAME_COLUMN, - NULL); - gtk_tree_view_column_set_resizable (column, TRUE); - gtk_tree_view_append_column (GTK_TREE_VIEW(folder_tree), column); - - column = gtk_tree_view_column_new_with_attributes(_("Unread"), - renderer, "text", - TNY_ACCOUNT_TREE_MODEL_UNREAD_COLUMN, - NULL); - gtk_tree_view_column_set_resizable (column, TRUE); - gtk_tree_view_append_column (GTK_TREE_VIEW(folder_tree), column); + GtkWidget *win; + win = gtk_scrolled_window_new (NULL, NULL); + gtk_scrolled_window_set_policy + (GTK_SCROLLED_WINDOW (win),GTK_POLICY_NEVER, + GTK_POLICY_AUTOMATIC); - gtk_tree_view_set_headers_visible (GTK_TREE_VIEW(folder_tree), TRUE); - gtk_tree_view_set_headers_clickable (GTK_TREE_VIEW(folder_tree), TRUE); - - return folder_tree; + if (needs_viewport) + gtk_scrolled_window_add_with_viewport + (GTK_SCROLLED_WINDOW(win), widget); + else + gtk_container_add (GTK_CONTAINER(win), + widget); + + return win; } -static GtkWidget* -modest_main_window_favorite_folder_list (void) +static gboolean +on_delete_event (GtkWidget *widget, GdkEvent *event, ModestMainWindow *self) { - GtkWidget *folder_list; - GtkListStore *folder_store; - GtkTreeIter iter; - GtkCellRenderer *renderer = gtk_cell_renderer_text_new (); - - folder_store = gtk_list_store_new (1, G_TYPE_STRING); - folder_list = gtk_tree_view_new_with_model (GTK_TREE_MODEL(folder_store)); - - renderer = gtk_cell_renderer_text_new(); - - gtk_tree_view_insert_column (GTK_TREE_VIEW(folder_list), - gtk_tree_view_column_new_with_attributes(_("Favorite Folders"), - renderer, - "text", 0, - NULL), - 0); - gtk_list_store_insert_with_values (GTK_LIST_STORE(folder_store), - &iter, -1, 0, _("Stuff"), -1); - return folder_list; + save_sizes (self); + return FALSE; } -static GtkWidget* -modest_main_window_toolbar (void) +ModestWindow * +modest_main_window_new (ModestWidgetFactory *widget_factory, + TnyAccountStore *account_store) { - GtkWidget *toolbar; - GtkToolItem *newmail, *refresh, *reply, *forward, - *cut, *copy, *paste, *delmail, *quit; - - gpointer modest_ui = NULL; /* FIXME */ + GObject *obj; + ModestMainWindowPrivate *priv; + GtkWidget *main_vbox; + GtkWidget *status_hbox; + GtkWidget *header_win, *folder_win; + GtkActionGroup *action_group; + GError *error = NULL; - toolbar = gtk_toolbar_new (); + g_return_val_if_fail (widget_factory, NULL); - newmail = gtk_tool_button_new_from_stock (GTK_STOCK_NEW); - delmail = gtk_tool_button_new_from_stock (GTK_STOCK_DELETE); + obj = g_object_new(MODEST_TYPE_MAIN_WINDOW, NULL); + priv = MODEST_MAIN_WINDOW_GET_PRIVATE(obj); - reply = gtk_tool_button_new_from_stock (GTK_STOCK_MEDIA_PLAY); - forward = gtk_tool_button_new_from_stock (GTK_STOCK_MEDIA_FORWARD); + priv->widget_factory = g_object_ref (widget_factory); + priv->account_store = g_object_ref (account_store); - refresh = gtk_tool_button_new_from_stock (GTK_STOCK_REFRESH); - - cut = gtk_tool_button_new_from_stock (GTK_STOCK_CUT); - copy = gtk_tool_button_new_from_stock (GTK_STOCK_COPY); - paste = gtk_tool_button_new_from_stock (GTK_STOCK_PASTE); - - quit = gtk_tool_button_new_from_stock (GTK_STOCK_QUIT); - - g_signal_connect (newmail, "clicked", G_CALLBACK(on_newmail_clicked), - modest_ui); - g_signal_connect (refresh, "clicked", G_CALLBACK(on_refresh_clicked), - modest_ui); - g_signal_connect (reply, "clicked", G_CALLBACK(on_reply_clicked), - modest_ui); - g_signal_connect (forward, "clicked", G_CALLBACK(on_forward_clicked), - modest_ui); - g_signal_connect (cut, "clicked", G_CALLBACK(on_cut_clicked), - modest_ui); - g_signal_connect (copy, "clicked", G_CALLBACK(on_copy_clicked), - modest_ui); - g_signal_connect (paste, "clicked", G_CALLBACK(on_paste_clicked), - modest_ui); - g_signal_connect (delmail, "clicked", G_CALLBACK(on_delmail_clicked), - modest_ui); - g_signal_connect (quit, "clicked", G_CALLBACK(on_quit_clicked), - modest_ui); - - gtk_toolbar_insert (GTK_TOOLBAR(toolbar), GTK_TOOL_ITEM(newmail), -1); - gtk_toolbar_insert (GTK_TOOLBAR(toolbar), - GTK_TOOL_ITEM(gtk_separator_tool_item_new()), - -1); - gtk_toolbar_insert (GTK_TOOLBAR(toolbar), GTK_TOOL_ITEM(refresh), -1); - gtk_toolbar_insert (GTK_TOOLBAR(toolbar), - GTK_TOOL_ITEM(gtk_separator_tool_item_new()), - -1); - gtk_toolbar_insert (GTK_TOOLBAR(toolbar), GTK_TOOL_ITEM(reply), -1); - gtk_toolbar_insert (GTK_TOOLBAR(toolbar), GTK_TOOL_ITEM(forward), -1); - - gtk_toolbar_insert (GTK_TOOLBAR(toolbar), - GTK_TOOL_ITEM(gtk_separator_tool_item_new()), - -1); - - gtk_toolbar_insert (GTK_TOOLBAR(toolbar), GTK_TOOL_ITEM(cut), -1); - gtk_toolbar_insert (GTK_TOOLBAR(toolbar), GTK_TOOL_ITEM(copy), -1); - gtk_toolbar_insert (GTK_TOOLBAR(toolbar), GTK_TOOL_ITEM(paste), -1); - gtk_toolbar_insert (GTK_TOOLBAR(toolbar), GTK_TOOL_ITEM(delmail), -1); - - gtk_toolbar_insert (GTK_TOOLBAR(toolbar), - GTK_TOOL_ITEM(gtk_separator_tool_item_new()), - -1); - gtk_toolbar_insert (GTK_TOOLBAR(toolbar), GTK_TOOL_ITEM(quit), -1); + /* ***************** */ + priv->ui_manager = gtk_ui_manager_new(); + action_group = gtk_action_group_new ("ModestMainWindowActions"); - return toolbar; -} + /* Add common actions */ + gtk_action_group_add_actions (action_group, + modest_action_entries, + G_N_ELEMENTS (modest_action_entries), + obj); + gtk_ui_manager_insert_action_group (priv->ui_manager, action_group, 0); + g_object_unref (action_group); -static GtkWidget* -modest_main_window_message_preview () -{ - ModestTnyMsgView *msg_view; + /* Load the UI definition */ + gtk_ui_manager_add_ui_from_file (priv->ui_manager, MODEST_UIDIR "modest-ui.xml", &error); + if (error != NULL) { + g_warning ("Could not merge modest-ui.xml: %s", error->message); + g_error_free (error); + error = NULL; + } + /* *************** */ +/* priv->ui_manager = g_object_ref (ui_manager); */ - msg_view = MODEST_TNY_MSG_VIEW(modest_tny_msg_view_new (NULL)); - - return GTK_WIDGET(msg_view); -} + /* Add accelerators */ + gtk_window_add_accel_group (GTK_WINDOW (obj), + gtk_ui_manager_get_accel_group (priv->ui_manager)); -static void -on_newmail_clicked (GtkToolButton *button, gpointer data) -{ - g_warning (__FUNCTION__); -} + /* Toolbar / Menubar */ + priv->toolbar = gtk_ui_manager_get_widget (priv->ui_manager, "/ToolBar"); + priv->menubar = gtk_ui_manager_get_widget (priv->ui_manager, "/MenuBar"); -static void -on_refresh_clicked (GtkToolButton *button, gpointer data) -{ - g_warning (__FUNCTION__); -} -static void -on_reply_clicked (GtkToolButton *button, gpointer data) -{ - g_warning (__FUNCTION__); -} -static void -on_forward_clicked (GtkToolButton *button, gpointer data) -{ - g_warning (__FUNCTION__); -} -static void -on_delmail_clicked (GtkToolButton *button, gpointer data) -{ - g_warning (__FUNCTION__); -} + gtk_toolbar_set_tooltips (GTK_TOOLBAR (priv->toolbar), TRUE); -static void -on_cut_clicked (GtkToolButton *button, gpointer data) -{ - g_warning (__FUNCTION__); - -} -static void -on_copy_clicked (GtkToolButton *button, gpointer data) -{ - g_warning (__FUNCTION__); + /* widgets from 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 (widget_factory); + + folder_win = wrapped_in_scrolled_window (GTK_WIDGET(priv->folder_view), + FALSE); + header_win = wrapped_in_scrolled_window (GTK_WIDGET(priv->header_view), + FALSE); + + /* paned */ + priv->folder_paned = gtk_vpaned_new (); + priv->msg_paned = gtk_vpaned_new (); + priv->main_paned = gtk_hpaned_new (); + gtk_paned_add1 (GTK_PANED(priv->main_paned), folder_win); + gtk_paned_add2 (GTK_PANED(priv->main_paned), priv->msg_paned); + gtk_paned_add1 (GTK_PANED(priv->msg_paned), header_win); + gtk_paned_add2 (GTK_PANED(priv->msg_paned), GTK_WIDGET(priv->msg_preview)); + + gtk_widget_show (GTK_WIDGET(priv->header_view)); + gtk_tree_view_columns_autosize (GTK_TREE_VIEW(priv->header_view)); -} -static void -on_paste_clicked (GtkToolButton *button, gpointer data) -{ - g_warning (__FUNCTION__); -} + + /* 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 (widget_factory), + FALSE,FALSE, 6); + gtk_box_pack_start (GTK_BOX(status_hbox), + 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(widget_factory), + FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX(status_hbox), + modest_widget_factory_get_online_toggle(widget_factory), + FALSE, FALSE, 0); + + /* putting it all together... */ + main_vbox = gtk_vbox_new (FALSE, 6); + gtk_box_pack_start (GTK_BOX(main_vbox), priv->menubar, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX(main_vbox), priv->toolbar, FALSE, FALSE, 0); + gtk_box_pack_start (GTK_BOX(main_vbox), priv->main_paned, TRUE, TRUE,0); + gtk_box_pack_start (GTK_BOX(main_vbox), status_hbox, FALSE, FALSE, 0); + + gtk_container_add (GTK_CONTAINER(obj), main_vbox); + restore_sizes (MODEST_MAIN_WINDOW(obj)); + gtk_window_set_title (GTK_WINDOW(obj), _("Modest")); + gtk_window_set_icon (GTK_WINDOW(obj), + modest_icon_factory_get_icon (MODEST_APP_ICON)); + + gtk_widget_show_all (main_vbox); -static void -on_quit_clicked (GtkToolButton *button, gpointer data) -{ - g_warning (__FUNCTION__); + g_signal_connect (G_OBJECT(obj), "delete-event", + G_CALLBACK(on_delete_event), obj); + + return (ModestWindow *) obj; } - - -static void on_folder_clicked (ModestTnyFolderTreeView *folder_tree, - TnyMsgFolderIface *folder, - gpointer data) +ModestWidgetFactory * +modest_main_window_get_widget_factory (ModestMainWindow *main_window) { - ModestMainWindow *self; - ModestMainWindowPrivate *priv; - - g_return_if_fail (folder); - g_return_if_fail (data); + ModestMainWindowPrivate *priv; - self = MODEST_MAIN_WINDOW(data); - priv = MODEST_MAIN_WINDOW_GET_PRIVATE (self); - - modest_tny_header_tree_view_set_folder (priv->header_view, - folder); -} + g_return_val_if_fail (MODEST_IS_MAIN_WINDOW (main_window), NULL); + priv = MODEST_MAIN_WINDOW_GET_PRIVATE (main_window); + return g_object_ref (priv->widget_factory); +} -static void on_message_clicked (ModestTnyFolderTreeView *folder_tree, - TnyMsgIface *message, - gpointer data) +TnyAccountStore * +modest_main_window_get_account_store (ModestMainWindow *main_window) { - ModestMainWindow *self; - ModestMainWindowPrivate *priv; + ModestMainWindowPrivate *priv; + + g_return_val_if_fail (MODEST_IS_MAIN_WINDOW (main_window), NULL); - g_return_if_fail (message); - g_return_if_fail (data); + priv = MODEST_MAIN_WINDOW_GET_PRIVATE (main_window); - self = MODEST_MAIN_WINDOW(data); - priv = MODEST_MAIN_WINDOW_GET_PRIVATE (self); - - modest_tny_msg_view_set_message (priv->message_view, - message); + return g_object_ref (priv->account_store); }