Added menu bar and About box. Fixed bug in ISO8601 date conversion.
This commit is contained in:
parent
ba81ad43a4
commit
65eb370e96
4 changed files with 114 additions and 4 deletions
|
|
@ -5,6 +5,34 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public class GearyApplication : YorbaApplication {
|
public class GearyApplication : YorbaApplication {
|
||||||
|
// TODO: replace static strings with const strings when gettext is integrated properly
|
||||||
|
public const string PROGRAM_NAME = "Geary";
|
||||||
|
public static string PROGRAM_DESCRIPTION = _("Email Client");
|
||||||
|
public const string VERSION = "0.0.1";
|
||||||
|
public const string COPYRIGHT = "Copyright 2011 Yorba Foundation";
|
||||||
|
public const string WEBSITE = "http://www.yorba.org";
|
||||||
|
public static string WEBSITE_LABEL = _("Visit the Yorba web site");
|
||||||
|
|
||||||
|
public const string[] AUTHORS = {
|
||||||
|
"Jim Nelson"
|
||||||
|
};
|
||||||
|
|
||||||
|
public const string LICENSE = """
|
||||||
|
Shotwell is free software; you can redistribute it and/or modify it under the
|
||||||
|
terms of the GNU Lesser General Public License as published by the Free
|
||||||
|
Software Foundation; either version 2.1 of the License, or (at your option)
|
||||||
|
any later version.
|
||||||
|
|
||||||
|
Shotwell is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||||
|
FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for
|
||||||
|
more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Lesser General Public License
|
||||||
|
along with Shotwell; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
""";
|
||||||
|
|
||||||
public static GearyApplication instance {
|
public static GearyApplication instance {
|
||||||
get {
|
get {
|
||||||
if (_instance == null)
|
if (_instance == null)
|
||||||
|
|
|
||||||
|
|
@ -5,14 +5,41 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public class MainWindow : Gtk.Window {
|
public class MainWindow : Gtk.Window {
|
||||||
|
private const string MAIN_MENU_XML = """
|
||||||
|
<ui>
|
||||||
|
<menubar name="MenuBar">
|
||||||
|
<menu name="FileMenu" action="FileMenu">
|
||||||
|
<menuitem name="Quit" action="FileQuit" />
|
||||||
|
</menu>
|
||||||
|
|
||||||
|
<menu name="HelpMenu" action="HelpMenu">
|
||||||
|
<menuitem name="About" action="HelpAbout" />
|
||||||
|
</menu>
|
||||||
|
</menubar>
|
||||||
|
</ui>
|
||||||
|
""";
|
||||||
|
|
||||||
private MessageListStore message_list_store = new MessageListStore();
|
private MessageListStore message_list_store = new MessageListStore();
|
||||||
private MessageListView message_list_view;
|
private MessageListView message_list_view;
|
||||||
|
private Gtk.UIManager ui = new Gtk.UIManager();
|
||||||
private Geary.Engine? engine = null;
|
private Geary.Engine? engine = null;
|
||||||
|
|
||||||
public MainWindow() {
|
public MainWindow() {
|
||||||
|
title = GearyApplication.PROGRAM_NAME;
|
||||||
set_default_size(800, 600);
|
set_default_size(800, 600);
|
||||||
|
|
||||||
|
try {
|
||||||
|
ui.add_ui_from_string(MAIN_MENU_XML, -1);
|
||||||
|
} catch (Error err) {
|
||||||
|
error("Unable to load main menu UI: %s", err.message);
|
||||||
|
}
|
||||||
|
|
||||||
|
Gtk.ActionGroup action_group = new Gtk.ActionGroup("MainMenuActionGroup");
|
||||||
|
action_group.add_actions(create_actions(), this);
|
||||||
|
|
||||||
|
ui.insert_action_group(action_group, 0);
|
||||||
|
add_accel_group(ui.get_accel_group());
|
||||||
|
|
||||||
message_list_view = new MessageListView(message_list_store);
|
message_list_view = new MessageListView(message_list_store);
|
||||||
|
|
||||||
create_layout();
|
create_layout();
|
||||||
|
|
@ -52,12 +79,65 @@ public class MainWindow : Gtk.Window {
|
||||||
base.destroy();
|
base.destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Gtk.ActionEntry[] create_actions() {
|
||||||
|
Gtk.ActionEntry[] entries = new Gtk.ActionEntry[0];
|
||||||
|
|
||||||
|
//
|
||||||
|
// File
|
||||||
|
//
|
||||||
|
|
||||||
|
Gtk.ActionEntry file_menu = { "FileMenu", null, TRANSLATABLE, null, null, null };
|
||||||
|
file_menu.label = _("_File");
|
||||||
|
entries += file_menu;
|
||||||
|
|
||||||
|
Gtk.ActionEntry quit = { "FileQuit", Gtk.Stock.QUIT, TRANSLATABLE, "<Ctrl>Q", null, on_quit };
|
||||||
|
quit.label = _("_Quit");
|
||||||
|
entries += quit;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Help
|
||||||
|
//
|
||||||
|
|
||||||
|
Gtk.ActionEntry help_menu = { "HelpMenu", null, TRANSLATABLE, null, null, null };
|
||||||
|
help_menu.label = _("_Help");
|
||||||
|
entries += help_menu;
|
||||||
|
|
||||||
|
Gtk.ActionEntry about = { "HelpAbout", Gtk.Stock.ABOUT, TRANSLATABLE, null, null, on_about };
|
||||||
|
about.label = _("_About");
|
||||||
|
entries += about;
|
||||||
|
|
||||||
|
return entries;
|
||||||
|
}
|
||||||
|
|
||||||
private void create_layout() {
|
private void create_layout() {
|
||||||
|
Gtk.VBox main_layout = new Gtk.VBox(false, 0);
|
||||||
|
|
||||||
|
// main menu
|
||||||
|
main_layout.pack_start(ui.get_widget("/MenuBar"), false, false, 0);
|
||||||
|
|
||||||
|
// message list
|
||||||
Gtk.ScrolledWindow message_list_scrolled = new Gtk.ScrolledWindow(null, null);
|
Gtk.ScrolledWindow message_list_scrolled = new Gtk.ScrolledWindow(null, null);
|
||||||
message_list_scrolled.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC);
|
message_list_scrolled.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC);
|
||||||
message_list_scrolled.add_with_viewport(message_list_view);
|
message_list_scrolled.add_with_viewport(message_list_view);
|
||||||
|
main_layout.pack_end(message_list_scrolled, true, true, 0);
|
||||||
|
|
||||||
add(message_list_scrolled);
|
add(main_layout);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void on_quit() {
|
||||||
|
GearyApplication.instance.exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void on_about() {
|
||||||
|
Gtk.show_about_dialog(this,
|
||||||
|
"program-name", GearyApplication.PROGRAM_NAME,
|
||||||
|
"authors", GearyApplication.AUTHORS,
|
||||||
|
"copyright", GearyApplication.COPYRIGHT,
|
||||||
|
"license", GearyApplication.LICENSE,
|
||||||
|
"version", GearyApplication.VERSION,
|
||||||
|
"website", GearyApplication.WEBSITE,
|
||||||
|
"website-label", GearyApplication.WEBSITE_LABEL
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,10 +5,12 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// TODO: This fakes internationalization support until fully integrated.
|
// TODO: This fakes internationalization support until fully integrated.
|
||||||
public string _(string text) {
|
public unowned string _(string text) {
|
||||||
return text;
|
return text;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public const string TRANSLATABLE = "TRANSLATABLE";
|
||||||
|
|
||||||
namespace Intl {
|
namespace Intl {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@ public class Geary.RFC822.Date : Geary.RFC822.MessageData, Geary.Common.MessageD
|
||||||
if (tm == 0)
|
if (tm == 0)
|
||||||
throw new ImapError.PARSE_ERROR("Unable to parse \"%s\": not ISO-8601 date", iso8601);
|
throw new ImapError.PARSE_ERROR("Unable to parse \"%s\": not ISO-8601 date", iso8601);
|
||||||
|
|
||||||
value = new DateTime.from_unix_utc(tm);
|
value = new DateTime.from_unix_local(tm);
|
||||||
original = iso8601;
|
original = iso8601;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue