* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include <modest-widget-memory.h>
+#include <modest-icon-factory.h>
+
#include "modest-main-window.h"
#include "modest-account-view-window.h"
-#include "modest-msg-window.h"
+#include "modest-edit-msg-window.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);
static void modest_main_window_finalize (GObject *obj);
+static void restore_sizes (ModestMainWindow *self);
+static void save_sizes (ModestMainWindow *self);
+
/* list my signals */
enum {
/* MY_SIGNAL_1, */
typedef struct _ModestMainWindowPrivate ModestMainWindowPrivate;
struct _ModestMainWindowPrivate {
+
GtkWidget *toolbar;
GtkWidget *menubar;
- GtkWidget *progress_bar;
- GtkWidget *status_bar;
+
GtkWidget *folder_paned;
GtkWidget *msg_paned;
-
+ GtkWidget *main_paned;
+
ModestWidgetFactory *widget_factory;
ModestConf *conf;
+ ModestAccountMgr *account_mgr;
ModestHeaderView *header_view;
ModestFolderView *folder_view;
sizeof(ModestMainWindow),
1, /* n_preallocs */
(GInstanceInitFunc) modest_main_window_init,
+ NULL
};
my_type = g_type_register_static (GTK_TYPE_WINDOW,
"ModestMainWindow",
priv = MODEST_MAIN_WINDOW_GET_PRIVATE(obj);
priv->widget_factory = NULL;
+ priv->conf = NULL;
+ priv->account_mgr = NULL;
}
static void
modest_main_window_finalize (GObject *obj)
{
- ModestMainWindowPrivate *priv;
-
+ 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->conf) {
+ 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);
}
on_menu_about (GtkWidget *widget, gpointer data)
{
GtkWidget *about;
-
+ const gchar *authors[] = {
+ "Dirk-Jan C. Binnema <dirk-jan.binnema@nokia.com>",
+ NULL
+ };
about = gtk_about_dialog_new ();
gtk_about_dialog_set_name (GTK_ABOUT_DIALOG(about), PACKAGE_NAME);
gtk_about_dialog_set_version (GTK_ABOUT_DIALOG(about),PACKAGE_VERSION);
_("Copyright (c) 2006, Nokia Corporation\n"
"All rights reserved."));
gtk_about_dialog_set_comments ( GTK_ABOUT_DIALOG(about),
- _("a modest e-mail client"));
+ _("a modest e-mail client\n\n"
+ "design and implementation: Dirk-Jan C. Binnema\n"
+ "contributions from the fine people at KernelConcepts\n\n"
+ "uses the tinymail email framework written by Philip van Hoof"));
+ gtk_about_dialog_set_authors (GTK_ABOUT_DIALOG(about), authors);
+ gtk_about_dialog_set_website (GTK_ABOUT_DIALOG(about), "http://modest.garage.maemo.org");
+
gtk_dialog_run (GTK_DIALOG (about));
gtk_widget_destroy(about);
}
g_return_if_fail (self);
priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self);
- account_win = modest_account_view_window_new (priv->conf,
+ account_win = modest_account_view_window_new (priv->account_mgr,
priv->widget_factory);
+
+ gtk_window_set_transient_for (GTK_WINDOW(account_win),
+ GTK_WINDOW(self));
+
gtk_widget_show (account_win);
}
on_menu_new_message (ModestMainWindow *self, guint action, GtkWidget *widget)
{
GtkWidget *msg_win;
+ ModestMainWindowPrivate *priv;
- msg_win = modest_msg_window_new (MODEST_MSG_WINDOW_TYPE_NEW,
- NULL);
+ priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self);
+ msg_win = modest_edit_msg_window_new (priv->conf,
+ MODEST_EDIT_TYPE_NEW,
+ NULL);
gtk_widget_show (msg_win);
}
+static void
+on_menu_quit (ModestMainWindow *self, guint action, GtkWidget *widget)
+{
+ gtk_main_quit ();
+}
+
/* Our menu, an array of GtkItemFactoryEntry structures that defines each menu item */
{ "/File/_Save", "<control>S", NULL, 0, "<StockItem>", GTK_STOCK_SAVE },
{ "/File/Save _As", NULL, NULL, 0, "<Item>" },
{ "/File/sep1", NULL, NULL, 0, "<Separator>" },
- { "/File/_Quit", "<CTRL>Q", gtk_main_quit, 0, "<StockItem>", GTK_STOCK_QUIT },
+ { "/File/_Quit", "<CTRL>Q", on_menu_quit, 0, "<StockItem>", GTK_STOCK_QUIT },
{ "/_Edit", NULL, NULL, 0, "<Branch>" },
{ "/Edit/_Undo", "<CTRL>Z", NULL, 0, "<StockItem>", GTK_STOCK_UNDO },
ModestHeaderViewColumn cols[] = {
MODEST_HEADER_VIEW_COLUMN_MSGTYPE,
MODEST_HEADER_VIEW_COLUMN_ATTACH,
- MODEST_HEADER_VIEW_COLUMN_FROM,
- MODEST_HEADER_VIEW_COLUMN_SUBJECT,
- MODEST_HEADER_VIEW_COLUMN_RECEIVED_DATE
+ MODEST_HEADER_VIEW_COLUMN_COMPACT_HEADER
};
priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self);
static void
-set_sizes (ModestMainWindow *self)
+restore_sizes (ModestMainWindow *self)
{
ModestMainWindowPrivate *priv;
-
- int win_x,win_y;
- int fol_x,fol_pos;
- int msg_x,msg_pos;
priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self);
+
+ modest_widget_memory_restore_settings (priv->conf,GTK_WIDGET(self),
+ "modest-main-window");
+ modest_widget_memory_restore_settings (priv->conf, GTK_WIDGET(priv->folder_paned),
+ "modest-folder-paned");
+ modest_widget_memory_restore_settings (priv->conf, GTK_WIDGET(priv->msg_paned),
+ "modest-msg-paned");
+ modest_widget_memory_restore_settings (priv->conf, GTK_WIDGET(priv->main_paned),
+ "modest-main-paned");
+
+}
- /* size of the whole window */
- win_x = modest_conf_get_int_or_default (priv->conf,
- MODEST_MAIN_WINDOW_WIDTH,
- MODEST_MAIN_WINDOW_WIDTH_DEFAULT);
- win_y = modest_conf_get_int_or_default (priv->conf,
- MODEST_MAIN_WINDOW_HEIGHT,
- MODEST_MAIN_WINDOW_HEIGHT_DEFAULT);
- gtk_window_set_default_size (GTK_WINDOW(self), win_x, win_y);
+
+static void
+save_sizes (ModestMainWindow *self)
+{
+ ModestMainWindowPrivate *priv;
- /* size of the folder pane */
- fol_x = modest_conf_get_int_or_default (priv->conf,
- MODEST_FOLDER_PANED_WIDTH,
- MODEST_FOLDER_PANED_WIDTH_DEFAULT);
- fol_pos = modest_conf_get_int_or_default (priv->conf,
- MODEST_FOLDER_PANED_DIVIDER_POS,
- MODEST_FOLDER_PANED_DIVIDER_POS_DEFAULT);
- if (1 > fol_x || fol_x > win_x || 1 > fol_pos || fol_pos > win_y) {
- g_printerr ("modest: folder paned <x,pos> out of range: <%d,%d>\n",
- fol_x, fol_pos);
- } else {
- /* slightly off... */
- gtk_widget_set_size_request (priv->folder_paned, fol_x, win_y);
- gtk_paned_set_position (GTK_PANED(priv->folder_paned),
- fol_pos);
- }
+ priv = MODEST_MAIN_WINDOW_GET_PRIVATE(self);
+
+ modest_widget_memory_save_settings (priv->conf,GTK_WIDGET(self),
+ "modest-main-window");
+ modest_widget_memory_save_settings (priv->conf, GTK_WIDGET(priv->folder_paned),
+ "modest-folder-paned");
+ modest_widget_memory_save_settings (priv->conf, GTK_WIDGET(priv->msg_paned),
+ "modest-msg-paned");
+ modest_widget_memory_save_settings (priv->conf, GTK_WIDGET(priv->main_paned),
+ "modest-main-paned");
+
- /* size of the folder pane */
- msg_x = modest_conf_get_int_or_default (priv->conf,
- MODEST_MSG_PANED_WIDTH,
- MODEST_MSG_PANED_WIDTH_DEFAULT);
- msg_pos = modest_conf_get_int_or_default (priv->conf,
- MODEST_MSG_PANED_DIVIDER_POS,
- MODEST_MSG_PANED_DIVIDER_POS_DEFAULT);
- if (1 > msg_x || msg_x > win_x || 1 > msg_pos || msg_pos > win_y) {
- g_printerr ("modest: msg paned <x,pos> out of range: <%d,%d>\n",
- msg_x, msg_pos);
- } else {
- /* slightly off... */
- gtk_widget_set_size_request (priv->msg_paned,
- fol_x, win_y);
- gtk_paned_set_position (GTK_PANED(priv->msg_paned),
- msg_pos);
- }
-}
+}
static GtkWidget*
return win;
}
+
+static gboolean
+on_delete_event (GtkWidget *widget, GdkEvent *event, ModestMainWindow *self)
+{
+ save_sizes (self);
+ gtk_widget_destroy (GTK_WIDGET(self));
+
+ return TRUE;
+}
+
+
+
+
GtkWidget*
-modest_main_window_new (ModestWidgetFactory *factory, ModestConf *conf)
+modest_main_window_new (ModestConf *conf, ModestAccountMgr *account_mgr,
+ ModestWidgetFactory *factory)
{
GObject *obj;
ModestMainWindowPrivate *priv;
GtkWidget *main_vbox;
- GtkWidget *main_paned;
GtkWidget *status_hbox;
GtkWidget *header_win, *folder_win;
g_object_ref (conf);
priv->conf = conf;
+
+ g_object_ref (account_mgr);
+ priv->account_mgr = account_mgr;
+
/* widgets from factory */
priv->folder_view = modest_widget_factory_get_folder_view (factory);
/* paned */
priv->folder_paned = gtk_vpaned_new ();
priv->msg_paned = gtk_vpaned_new ();
- main_paned = gtk_hpaned_new ();
- gtk_paned_add1 (GTK_PANED(main_paned), priv->folder_paned);
- gtk_paned_add2 (GTK_PANED(main_paned), priv->msg_paned);
- gtk_paned_add1 (GTK_PANED(priv->folder_paned),
- gtk_label_new (_("Favorites")));
+ priv->main_paned = gtk_hpaned_new ();
+ gtk_paned_add1 (GTK_PANED(priv->main_paned), priv->folder_paned);
+ gtk_paned_add2 (GTK_PANED(priv->main_paned), priv->msg_paned);
+// gtk_paned_add1 (GTK_PANED(priv->folder_paned),
+// gtk_label_new (_("Favorites")));
gtk_paned_add2 (GTK_PANED(priv->folder_paned), folder_win);
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));
-
- /* status bar / progress */
- priv->status_bar = gtk_statusbar_new ();
- priv->progress_bar = gtk_progress_bar_new ();
- status_hbox = gtk_hbox_new (TRUE, 5);
- gtk_box_pack_start (GTK_BOX(status_hbox), priv->progress_bar, FALSE, TRUE, 5);
- gtk_box_pack_start (GTK_BOX(status_hbox), priv->status_bar, FALSE, TRUE, 5);
+ gtk_tree_view_columns_autosize (GTK_TREE_VIEW(priv->header_view));
+
+ /* status bar / progress */
+ status_hbox = gtk_hbox_new (FALSE, 0);
+ gtk_box_pack_start (GTK_BOX(status_hbox),
+ modest_widget_factory_get_status_bar(factory),
+ TRUE, TRUE, 0);
+ gtk_box_pack_start (GTK_BOX(status_hbox),
+ modest_widget_factory_get_progress_bar(factory),
+ FALSE, FALSE, 0);
+ gtk_box_pack_start (GTK_BOX(status_hbox),
+ modest_widget_factory_get_online_toggle(factory),
+ FALSE, FALSE, 0);
+
/* putting it all together... */
- main_vbox = gtk_vbox_new (FALSE, 2);
- gtk_box_pack_start (GTK_BOX(main_vbox), priv->menubar, FALSE, FALSE, 2);
- gtk_box_pack_start (GTK_BOX(main_vbox), priv->toolbar, FALSE, TRUE, 5);
- gtk_box_pack_start (GTK_BOX(main_vbox), main_paned, TRUE, TRUE, 2);
- gtk_box_pack_start (GTK_BOX(main_vbox), status_hbox, FALSE, FALSE, 5);
+ 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);
- gtk_window_set_title (GTK_WINDOW(obj), "Modest");
-
- set_sizes (MODEST_MAIN_WINDOW(obj));
+ g_signal_connect (G_OBJECT(obj), "delete-event",
+ G_CALLBACK(on_delete_event), obj);
+
return GTK_WIDGET(obj);
}