geary/src/client/ui/main-window.vala

108 lines
4.4 KiB
Vala

/* Copyright 2011 Yorba Foundation
*
* This software is licensed under the GNU Lesser General Public License
* (version 2.1 or later). See the COPYING file in this distribution.
*/
public class MainWindow : Gtk.Window {
private const int MESSAGE_LIST_WIDTH = 250;
public FolderListStore folder_list_store { get; private set; default = new FolderListStore(); }
public MessageListStore message_list_store { get; private set; default = new MessageListStore(); }
public MainToolbar main_toolbar { get; private set; }
public MessageListView message_list_view { get; private set; }
public FolderListView folder_list_view { get; private set; }
public MessageViewer message_viewer { get; private set; default = new MessageViewer(); }
private int window_width;
private int window_height;
private bool window_maximized;
private Gtk.HPaned folder_paned = new Gtk.HPaned();
private Gtk.HPaned messages_paned = new Gtk.HPaned();
public MainWindow() {
title = GearyApplication.NAME;
message_list_view = new MessageListView(message_list_store);
folder_list_view = new FolderListView(folder_list_store);
add_accel_group(GearyApplication.instance.ui_manager.get_accel_group());
create_layout();
}
public override void show_all() {
set_default_size(GearyApplication.instance.config.window_width,
GearyApplication.instance.config.window_height);
if (GearyApplication.instance.config.window_maximize)
maximize();
folder_paned.set_position(GearyApplication.instance.config.folder_list_pane_position);
messages_paned.set_position(GearyApplication.instance.config.messages_pane_position);
base.show_all();
}
public override void destroy() {
// Save window dimensions.
GearyApplication.instance.config.window_width = window_width;
GearyApplication.instance.config.window_height = window_height;
GearyApplication.instance.config.window_maximize = window_maximized;
// Save pane positions.
GearyApplication.instance.config.folder_list_pane_position = folder_paned.get_position();
GearyApplication.instance.config.messages_pane_position = messages_paned.get_position();
GearyApplication.instance.exit();
base.destroy();
}
public override bool configure_event(Gdk.EventConfigure event) {
// Get window dimensions.
window_maximized = (get_window().get_state() == Gdk.WindowState.MAXIMIZED);
if (!window_maximized)
get_size(out window_width, out window_height);
return base.configure_event(event);
}
private void create_layout() {
Gtk.VBox main_layout = new Gtk.VBox(false, 0);
// Toolbar.
main_toolbar = new MainToolbar();
main_layout.pack_start(main_toolbar, false, false, 0);
// folder list
Gtk.ScrolledWindow folder_list_scrolled = new Gtk.ScrolledWindow(null, null);
folder_list_scrolled.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC);
folder_list_scrolled.add(folder_list_view);
// message list
Gtk.ScrolledWindow message_list_scrolled = new Gtk.ScrolledWindow(null, null);
message_list_scrolled.set_size_request(MESSAGE_LIST_WIDTH, -1);
message_list_scrolled.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC);
message_list_scrolled.add(message_list_view);
message_list_scrolled.resize_mode = Gtk.ResizeMode.IMMEDIATE;
// message viewer
Gtk.ScrolledWindow message_viewer_scrolled = new Gtk.ScrolledWindow(null, null);
message_viewer_scrolled.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC);
message_viewer_scrolled.add(message_viewer);
// three-pane display: message list left of current message on bottom separated by
// grippable
messages_paned.pack1(message_list_scrolled, false, false);
messages_paned.pack2(message_viewer_scrolled, true, true);
// three-pane display: folder list on left and messages on right separated by grippable
folder_paned.pack1(folder_list_scrolled, false, false);
folder_paned.pack2(messages_paned, true, false);
main_layout.pack_end(folder_paned, true, true, 0);
add(main_layout);
}
}