Revision: 3479 http://geany.svn.sourceforge.net/geany/?rev=3479&view=rev Author: eht16 Date: 2009-01-17 17:59:20 +0000 (Sat, 17 Jan 2009)
Log Message: ----------- Add 'Build' toolbar button with a submenu for Make actions. Make use of ui_image_menu_item_new() for some menu items. Remove tooltips from menu items.
Modified Paths: -------------- trunk/ChangeLog trunk/TODO trunk/doc/geany.txt trunk/src/build.c trunk/src/build.h trunk/src/images.c trunk/src/toolbar.c trunk/src/ui_utils.c trunk/src/ui_utils.h
Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2009-01-17 13:11:06 UTC (rev 3478) +++ trunk/ChangeLog 2009-01-17 17:59:20 UTC (rev 3479) @@ -16,6 +16,11 @@ Properly fix parsing of compiler error messages. * data/filetypes.nsis: Update keywords lists. + * doc/geany.txt, src/build.c, src/build.h, src/images.c, src/toolbar.c, + src/ui_utils.c, src/ui_utils.h: + Add 'Build' toolbar button with a submenu for Make actions. + Make use of ui_image_menu_item_new() for some menu items. + Remove tooltips from menu items.
2009-01-16 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com>
Modified: trunk/TODO =================================================================== --- trunk/TODO 2009-01-17 13:11:06 UTC (rev 3478) +++ trunk/TODO 2009-01-17 17:59:20 UTC (rev 3479) @@ -13,7 +13,6 @@ o configurable filetype and project make commands (e.g. using bud for D) o recent projects menu - o improve Compile toolbar button for Make (drop down radio list?) o MRU documents switching o (support for adding plugin filetypes - SCI_LOADLEXERLIBRARY?) o (selectable menu of arguments to use for Make, from Make Custom)
Modified: trunk/doc/geany.txt =================================================================== --- trunk/doc/geany.txt 2009-01-17 13:11:06 UTC (rev 3478) +++ trunk/doc/geany.txt 2009-01-17 17:59:20 UTC (rev 3479) @@ -3391,6 +3391,9 @@ NavBack Navigate back a location NavFor Navigate forward a location Compile Compile the current file +Build Build the current file, includes also a submenu for Make commands. Geany + remembers the last chosen action from the submenu and uses this as default + action when the button itself is clicked. Run Run or view the current file Color Open a color chooser dialog, to interactively pick colors from a palette ZoomIn Zoom in the text
Modified: trunk/src/build.c =================================================================== --- trunk/src/build.c 2009-01-17 13:11:06 UTC (rev 3478) +++ trunk/src/build.c 2009-01-17 17:59:20 UTC (rev 3479) @@ -57,6 +57,7 @@ #include "editor.h" #include "win32.h" #include "toolbar.h" +#include "geanymenubuttonaction.h"
GeanyBuildInfo build_info = {GBO_COMPILE, 0, NULL, GEANY_FILETYPES_NONE, NULL}; @@ -83,6 +84,8 @@ LATEX_CMD_VIEW_PDF };
+static GeanyBuildType last_toolbutton_action = GBO_BUILD; + static BuildMenuItems default_menu_items = {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}; static BuildMenuItems latex_menu_items = @@ -93,6 +96,13 @@ { GtkWidget *run_button; GtkWidget *compile_button; + GtkWidget *build_button; + + GtkWidget *toolitem_build; + GtkWidget *toolitem_make_all; + GtkWidget *toolitem_make_custom; + GtkWidget *toolitem_make_object; + GtkWidget *toolitem_set_args; } widgets;
@@ -960,31 +970,24 @@
static void create_build_menu_gen(BuildMenuItems *menu_items) { - GtkWidget *menu, *item = NULL, *image, *separator; + GtkWidget *menu, *item = NULL, *separator; GtkAccelGroup *accel_group = gtk_accel_group_new(); - GtkTooltips *tooltips = GTK_TOOLTIPS(ui_lookup_widget(main_widgets.window, "tooltips")); GeanyKeyGroup *group = g_ptr_array_index(keybinding_groups, GEANY_KEY_GROUP_BUILD);
menu = gtk_menu_new();
/* compile the code */ - item = gtk_image_menu_item_new_with_mnemonic(_("_Compile")); + item = ui_image_menu_item_new(GTK_STOCK_CONVERT, _("_Compile")); gtk_widget_show(item); gtk_container_add(GTK_CONTAINER(menu), item); - gtk_tooltips_set_tip(tooltips, item, _("Compiles the current file"), NULL); GEANY_ADD_WIDGET_ACCEL(GEANY_KEYS_BUILD_COMPILE, item); - image = gtk_image_new_from_stock("gtk-convert", GTK_ICON_SIZE_MENU); - gtk_widget_show(image); - gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), image); g_signal_connect(item, "activate", G_CALLBACK(on_build_compile_activate), NULL); menu_items->item_compile = item;
/* build the code */ - item = gtk_image_menu_item_new_with_mnemonic(_("_Build")); + item = ui_image_menu_item_new(GEANY_STOCK_BUILD, _("_Build")); gtk_widget_show(item); gtk_container_add(GTK_CONTAINER(menu), item); - gtk_tooltips_set_tip(tooltips, item, - _("Builds the current file (generate an executable file)"), NULL); GEANY_ADD_WIDGET_ACCEL(GEANY_KEYS_BUILD_LINK, item); g_signal_connect(item, "activate", G_CALLBACK(on_build_build_activate), NULL); menu_items->item_link = item; @@ -997,8 +1000,6 @@ item = gtk_image_menu_item_new_with_mnemonic(_("_Make All")); gtk_widget_show(item); gtk_container_add(GTK_CONTAINER(menu), item); - gtk_tooltips_set_tip(tooltips, item, _("Builds the current file with the " - "make tool and the default target"), NULL); GEANY_ADD_WIDGET_ACCEL(GEANY_KEYS_BUILD_MAKE, item); g_signal_connect(item, "activate", G_CALLBACK(on_build_make_activate), GINT_TO_POINTER(GBO_MAKE_ALL)); @@ -1009,8 +1010,6 @@ gtk_widget_show(item); GEANY_ADD_WIDGET_ACCEL(GEANY_KEYS_BUILD_MAKEOWNTARGET, item); gtk_container_add(GTK_CONTAINER(menu), item); - gtk_tooltips_set_tip(tooltips, item, _("Builds the current file with the " - "make tool and the specified target"), NULL); g_signal_connect(item, "activate", G_CALLBACK(on_build_make_activate), GINT_TO_POINTER(GBO_MAKE_CUSTOM)); menu_items->item_make_custom = item; @@ -1020,8 +1019,6 @@ gtk_widget_show(item); GEANY_ADD_WIDGET_ACCEL(GEANY_KEYS_BUILD_MAKEOBJECT, item); gtk_container_add(GTK_CONTAINER(menu), item); - gtk_tooltips_set_tip(tooltips, item, _("Compiles the current file using the " - "make tool"), NULL); g_signal_connect(item, "activate", G_CALLBACK(on_build_make_activate), GINT_TO_POINTER(GBO_MAKE_OBJECT)); menu_items->item_make_object = item; @@ -1053,7 +1050,6 @@ item = gtk_image_menu_item_new_from_stock("gtk-execute", accel_group); gtk_widget_show(item); gtk_container_add(GTK_CONTAINER(menu), item); - gtk_tooltips_set_tip(tooltips, item, _("Run or view the current file"), NULL); GEANY_ADD_WIDGET_ACCEL(GEANY_KEYS_BUILD_RUN, item); g_signal_connect(item, "activate", G_CALLBACK(on_build_execute_activate), NULL); menu_items->item_exec = item; @@ -1064,16 +1060,10 @@ gtk_widget_set_sensitive(separator, FALSE);
/* arguments */ - item = gtk_image_menu_item_new_with_mnemonic(_("_Set Includes and Arguments")); + item = ui_image_menu_item_new(GTK_STOCK_PREFERENCES, _("_Set Includes and Arguments")); gtk_widget_show(item); GEANY_ADD_WIDGET_ACCEL(GEANY_KEYS_BUILD_OPTIONS, item); gtk_container_add(GTK_CONTAINER(menu), item); - gtk_tooltips_set_tip(tooltips, item, - _("Sets the includes and library paths for the compiler and " - "the program arguments for execution"), NULL); - image = gtk_image_new_from_stock("gtk-preferences", GTK_ICON_SIZE_MENU); - gtk_widget_show(image); - gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), image); g_signal_connect(item, "activate", G_CALLBACK(on_build_arguments_activate), NULL); menu_items->item_set_args = item;
@@ -1084,35 +1074,26 @@
static void create_build_menu_tex(BuildMenuItems *menu_items) { - GtkWidget *menu, *item, *image, *separator; + GtkWidget *menu, *item, *separator; GtkAccelGroup *accel_group = gtk_accel_group_new(); - GtkTooltips *tooltips = GTK_TOOLTIPS(ui_lookup_widget(main_widgets.window, "tooltips")); GeanyKeyGroup *group = g_ptr_array_index(keybinding_groups, GEANY_KEY_GROUP_BUILD);
menu = gtk_menu_new();
/* DVI */ - item = gtk_image_menu_item_new_with_mnemonic(_("LaTeX -> _DVI")); + item = ui_image_menu_item_new(GTK_STOCK_CONVERT, _("LaTeX -> _DVI")); gtk_widget_show(item); gtk_container_add(GTK_CONTAINER(menu), item); - gtk_tooltips_set_tip(tooltips, item, _("Compiles the current file into a DVI file"), NULL); GEANY_ADD_WIDGET_ACCEL(GEANY_KEYS_BUILD_COMPILE, item); - image = gtk_image_new_from_stock("gtk-convert", GTK_ICON_SIZE_MENU); - gtk_widget_show(image); - gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), image); g_signal_connect(item, "activate", G_CALLBACK(on_build_tex_activate), GINT_TO_POINTER(LATEX_CMD_TO_DVI)); menu_items->item_compile = item;
/* PDF */ - item = gtk_image_menu_item_new_with_mnemonic(_("LaTeX -> _PDF")); + item = ui_image_menu_item_new(GEANY_STOCK_BUILD, _("LaTeX -> _PDF")); gtk_widget_show(item); gtk_container_add(GTK_CONTAINER(menu), item); - gtk_tooltips_set_tip(tooltips, item, _("Compiles the current file into a PDF file"), NULL); GEANY_ADD_WIDGET_ACCEL(GEANY_KEYS_BUILD_LINK, item); - image = gtk_image_new_from_stock("gtk-convert", GTK_ICON_SIZE_MENU); - gtk_widget_show(image); - gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), image); g_signal_connect(item, "activate", G_CALLBACK(on_build_tex_activate), GINT_TO_POINTER(LATEX_CMD_TO_PDF)); menu_items->item_link = item; @@ -1125,8 +1106,6 @@ item = gtk_image_menu_item_new_with_mnemonic(_("_Make All")); gtk_widget_show(item); gtk_container_add(GTK_CONTAINER(menu), item); - gtk_tooltips_set_tip(tooltips, item, _("Builds the current file with the " - "make tool and the default target"), NULL); GEANY_ADD_WIDGET_ACCEL(GEANY_KEYS_BUILD_MAKE, item); g_signal_connect(item, "activate", G_CALLBACK(on_build_make_activate), GINT_TO_POINTER(GBO_MAKE_ALL)); @@ -1137,8 +1116,6 @@ gtk_widget_show(item); GEANY_ADD_WIDGET_ACCEL(GEANY_KEYS_BUILD_MAKEOWNTARGET, item); gtk_container_add(GTK_CONTAINER(menu), item); - gtk_tooltips_set_tip(tooltips, item, _("Builds the current file with the " - "make tool and the specified target"), NULL); g_signal_connect(item, "activate", G_CALLBACK(on_build_make_activate), GINT_TO_POINTER(GBO_MAKE_CUSTOM)); menu_items->item_make_custom = item; @@ -1168,27 +1145,19 @@
/* DVI view */ #define LATEX_VIEW_DVI_LABEL _("_View DVI File") /* used later again */ - item = gtk_image_menu_item_new_with_mnemonic(LATEX_VIEW_DVI_LABEL); + item = ui_image_menu_item_new(GTK_STOCK_FIND, LATEX_VIEW_DVI_LABEL); gtk_widget_show(item); gtk_container_add(GTK_CONTAINER(menu), item); GEANY_ADD_WIDGET_ACCEL(GEANY_KEYS_BUILD_RUN, item); - gtk_tooltips_set_tip(tooltips, item, _("Compile and view the current file"), NULL); - image = gtk_image_new_from_stock("gtk-find", GTK_ICON_SIZE_MENU); - gtk_widget_show(image); - gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), image); g_signal_connect(item, "activate", G_CALLBACK(on_build_execute_activate), GINT_TO_POINTER(LATEX_CMD_VIEW_DVI)); menu_items->item_exec = item;
/* PDF view */ - item = gtk_image_menu_item_new_with_mnemonic(_("V_iew PDF File")); + item = ui_image_menu_item_new(GTK_STOCK_FIND, _("V_iew PDF File")); gtk_widget_show(item); gtk_container_add(GTK_CONTAINER(menu), item); GEANY_ADD_WIDGET_ACCEL(GEANY_KEYS_BUILD_RUN2, item); - gtk_tooltips_set_tip(tooltips, item, _("Compile and view the current file"), NULL); - image = gtk_image_new_from_stock("gtk-find", GTK_ICON_SIZE_MENU); - gtk_widget_show(image); - gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), image); g_signal_connect(item, "activate", G_CALLBACK(on_build_execute_activate), GINT_TO_POINTER(LATEX_CMD_VIEW_PDF)); menu_items->item_exec2 = item; @@ -1200,15 +1169,10 @@ gtk_widget_set_sensitive(separator, FALSE);
/* arguments */ - item = gtk_image_menu_item_new_with_mnemonic(_("_Set Arguments")); + item = ui_image_menu_item_new(GTK_STOCK_PREFERENCES, _("_Set Arguments")); gtk_widget_show(item); GEANY_ADD_WIDGET_ACCEL(GEANY_KEYS_BUILD_OPTIONS, item); gtk_container_add(GTK_CONTAINER(menu), item); - gtk_tooltips_set_tip(tooltips, item, - _("Sets the program paths and arguments"), NULL); - image = gtk_image_new_from_stock("gtk-preferences", GTK_ICON_SIZE_MENU); - gtk_widget_show(image); - gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), image); g_signal_connect(item, "activate", G_CALLBACK(on_build_arguments_activate), filetypes[GEANY_FILETYPES_LATEX]); menu_items->item_set_args = item; @@ -1589,20 +1553,24 @@ GeanyFiletype *ft; gboolean have_path, can_build, can_make, can_run, can_stop, can_set_args, have_errors; BuildMenuItems *menu_items; + static GtkWidget *menubar_build_menu = NULL;
+ if (menubar_build_menu == NULL) /* cache the build menu pointer */ + menubar_build_menu = ui_lookup_widget(main_widgets.window, "menu_build1"); if (doc == NULL) doc = document_get_current(); if (doc == NULL || (FILETYPE_ID(doc->file_type) == GEANY_FILETYPES_NONE && doc->file_name == NULL)) { - gtk_widget_set_sensitive(ui_lookup_widget(main_widgets.window, "menu_build1"), FALSE); - gtk_menu_item_remove_submenu(GTK_MENU_ITEM(ui_lookup_widget(main_widgets.window, "menu_build1"))); + gtk_widget_set_sensitive(menubar_build_menu, FALSE); + gtk_menu_item_remove_submenu(GTK_MENU_ITEM(menubar_build_menu)); ui_widget_set_sensitive(widgets.compile_button, FALSE); + ui_widget_set_sensitive(widgets.build_button, FALSE); ui_widget_set_sensitive(widgets.run_button, FALSE); return; } else - gtk_widget_set_sensitive(ui_lookup_widget(main_widgets.window, "menu_build1"), TRUE); + gtk_widget_set_sensitive(menubar_build_menu, TRUE);
ft = doc->file_type; g_return_if_fail(ft != NULL); @@ -1610,7 +1578,7 @@ menu_items = build_get_menu_items(ft->id); /* Note: don't remove the submenu first because it can now cause an X hang if * the menu is already open when called from build_exit_cb(). */ - gtk_menu_item_set_submenu(GTK_MENU_ITEM(ui_lookup_widget(main_widgets.window, "menu_build1")), + gtk_menu_item_set_submenu(GTK_MENU_ITEM(menubar_build_menu), menu_items->menu);
have_path = (doc->file_name != NULL); @@ -1657,7 +1625,14 @@ if (menu_items->item_set_args) gtk_widget_set_sensitive(menu_items->item_set_args, can_set_args);
+ gtk_widget_set_sensitive(widgets.toolitem_build, can_build && ft->actions->can_link); + gtk_widget_set_sensitive(widgets.toolitem_make_all, can_make); + gtk_widget_set_sensitive(widgets.toolitem_make_custom, can_make); + gtk_widget_set_sensitive(widgets.toolitem_make_object, can_make); + gtk_widget_set_sensitive(widgets.toolitem_set_args, can_set_args); + ui_widget_set_sensitive(widgets.compile_button, can_build && ft->actions->can_compile); + ui_widget_set_sensitive(widgets.build_button, can_make); ui_widget_set_sensitive(widgets.run_button, can_run || can_stop);
/* show the stop command if a program is running, otherwise show run command */ @@ -1811,7 +1786,7 @@ { GeanyDocument *doc = document_get_current();
- if (doc == NULL) + if (doc == NULL || doc->file_type == NULL || ! doc->file_type->actions->can_link) return;
if (doc->changed) @@ -1825,6 +1800,15 @@
static void +on_toolbutton_build_activate (GtkMenuItem *menuitem, + gpointer user_data) +{ + last_toolbutton_action = GPOINTER_TO_INT(user_data); + on_build_build_activate(menuitem, user_data); +} + + +static void on_make_custom_input_response(const gchar *input) { GeanyDocument *doc = document_get_current(); @@ -1884,6 +1868,15 @@ }
+static void +on_toolbutton_make_activate (GtkMenuItem *menuitem, + gpointer user_data) +{ + last_toolbutton_action = GPOINTER_TO_INT(user_data); + on_build_make_activate(menuitem, user_data); +} + + static gboolean use_html_builtin(GeanyDocument *doc, GeanyFiletype *ft) { gboolean use_builtin = FALSE; @@ -2013,6 +2006,70 @@
void build_init() { + GtkWidget *item; + GtkWidget *toolmenu = geany_menu_button_action_get_menu( + GEANY_MENU_BUTTON_ACTION(toolbar_get_action_by_name("Build"))); + + if (toolmenu != NULL) + { + /* build the code */ + item = ui_image_menu_item_new(GEANY_STOCK_BUILD, _("_Build")); + gtk_widget_show(item); + gtk_container_add(GTK_CONTAINER(toolmenu), item); + g_signal_connect(item, "activate", G_CALLBACK(on_toolbutton_build_activate), NULL); + widgets.toolitem_build = item; + + item = gtk_separator_menu_item_new(); + gtk_widget_show(item); + gtk_container_add(GTK_CONTAINER(toolmenu), item); + + /* build the code with make all */ + item = gtk_image_menu_item_new_with_mnemonic(_("_Make All")); + gtk_widget_show(item); + gtk_container_add(GTK_CONTAINER(toolmenu), item); + g_signal_connect(item, "activate", G_CALLBACK(on_toolbutton_make_activate), + GINT_TO_POINTER(GBO_MAKE_ALL)); + widgets.toolitem_make_all = item; + + /* build the code with make custom */ + item = gtk_image_menu_item_new_with_mnemonic(_("Make Custom _Target")); + gtk_widget_show(item); + gtk_container_add(GTK_CONTAINER(toolmenu), item); + g_signal_connect(item, "activate", G_CALLBACK(on_toolbutton_make_activate), + GINT_TO_POINTER(GBO_MAKE_CUSTOM)); + widgets.toolitem_make_custom = item; + + /* build the code with make object */ + item = gtk_image_menu_item_new_with_mnemonic(_("Make _Object")); + gtk_widget_show(item); + gtk_container_add(GTK_CONTAINER(toolmenu), item); + g_signal_connect(item, "activate", G_CALLBACK(on_toolbutton_make_activate), + GINT_TO_POINTER(GBO_MAKE_OBJECT)); + widgets.toolitem_make_object = item; + + item = gtk_separator_menu_item_new(); + gtk_widget_show(item); + gtk_container_add(GTK_CONTAINER(toolmenu), item); + + /* arguments */ + item = ui_image_menu_item_new(GTK_STOCK_PREFERENCES, _("_Set Includes and Arguments")); + gtk_widget_show(item); + gtk_container_add(GTK_CONTAINER(toolmenu), item); + g_signal_connect(item, "activate", G_CALLBACK(on_build_arguments_activate), NULL); + widgets.toolitem_set_args = item; + } + widgets.compile_button = toolbar_get_widget_by_name("Compile"); widgets.run_button = toolbar_get_widget_by_name("Run"); + widgets.build_button = toolbar_get_widget_by_name("Build"); } + + +void build_toolbutton_build_clicked(GtkAction *action, gpointer user_data) +{ + if (last_toolbutton_action == GBO_BUILD) + on_build_build_activate(NULL, user_data); + else + on_build_make_activate(NULL, GINT_TO_POINTER(last_toolbutton_action)); +} +
Modified: trunk/src/build.h =================================================================== --- trunk/src/build.h 2009-01-17 13:11:06 UTC (rev 3478) +++ trunk/src/build.h 2009-01-17 17:59:20 UTC (rev 3479) @@ -74,5 +74,8 @@
BuildMenuItems *build_get_menu_items(gint filetype_idx);
+void build_toolbutton_build_clicked(GtkAction *action, gpointer user_data);
+ + #endif
Modified: trunk/src/images.c =================================================================== --- trunk/src/images.c 2009-01-17 13:11:06 UTC (rev 3478) +++ trunk/src/images.c 2009-01-17 17:59:20 UTC (rev 3479) @@ -868,3 +868,348 @@ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"};
+/* Build icon, based on mattone_poroton_architet_01.png from openclipart.org. */ +/* GdkPixbuf RGBA C-Source image dump */ + +#ifdef __SUNPRO_C +#pragma align 4 (build_inline) +#endif +#ifdef __GNUC__ +static const guint8 build_inline[] __attribute__ ((__aligned__ (4))) = +#else +static const guint8 build_inline[] = +#endif +{ "" + /* Pixbuf magic (0x47646b50) */ + "GdkP" + /* length: header (24) + pixel_data (9216) */ + "\0\0$\30" + /* pixdata_type (0x1010002) */ + "\1\1\0\2" + /* rowstride (192) */ + "\0\0\0\300" + /* width (48) */ + "\0\0\0""0" + /* height (48) */ + "\0\0\0""0" + /* pixel_data: */ + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0.\0\0\0z\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377" + "\301B\0\377\277B\0\377[\37\0\376\0\0\0:\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\212\0\0\0\377\22\6\0\377\301" + "B\0\377\302C\0\377\311E\0\377\1\0\0\347\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377~+\0\377\302C\0\377\302" + "C\0\377\302C\0\377\305D\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\5\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "=\1\0\0\374\34\11\0\373\306D\0\377\277B\0\377\302C\0\377\277B\0\377\320" + "G\0\377\320G\0\377\302C\0\377\300B\0\377\24\6\0\375\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\332\0\0\0\377/\20\0\376\0\0\0\377" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0E\0\0\0\3777\23" + "\0\376\320H\0\377\301B\0\377\301C\0\377\311E\0\377{*\0\377\0\0\0\377" + "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\314F\0\377\302C\0\377\2263\0" + "\377\1\0\0\203\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\2\0\377\302C\0\377\302C\0\377" + "\301B\0\377\277B\0\377\22\6\0\376\0\0\0\370\0\0\0\37\0\0\0f\0\0\0\377" + "A\26\0\374\307D\0\377\300B\0\377\301B\0\377\305D\0\377}+\0\377\0\0\0" + "\377\1\0\0\377\0\0\0\377\5\2\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0" + "\0\377\2\0\0\377\313F\0\377\302C\0\377\313F\0\377\0\0\0\377\0\0\0\2\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\374\0\0\0\377\277B\0\377\301C\0\377\302C\0\377\301B\0\377" + "\275A\0\377\312E\0\377\301B\0\377\302C\0\377\277B\0\377\314F\0\377;\24" + "\0\377\0\0\0\377\0\0\0\377\0\0\0\377\1\0\0\377\0\0\0\377\0\0\0\377\0" + "\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" + "\275A\0\377\301B\0\377\301B\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\371\0\0\0\377" + "\0\0\0\377\300B\0\377\302C\0\377\302C\0\377\301B\0\377\301C\0\377\301" + "B\0\377\37\12\0\377\1\0\0\377\0\0\0\377\0\0\0\377*\17\0\3772\22\0\377" + "\0\0\0\377\4\1\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" + "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\277B\0\377\302C\0" + "\377\301B\0\377F\30\0\375\0\0\0\34\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\372\0\0\0\377\0\0\0\377\0\0\0\377\277" + "B\0\377\302C\0\377\302C\0\377\302C\0\377\0\0\0\377\0\0\0\377\0\0\0\377" + "!\14\0\377(\16\0\377\0\0\0\377\0\0\0\377\0\0\0\377\12\3\0\377\0\0\0\377" + "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\14\4\0\377" + "\263=\0\377\277B\0\377\301C\0\377\302C\0\377\302C\0\377\302C\0\377\277" + "A\0\377\2\0\0\312\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\373\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\301B\0\377\302C\0" + "\377\302B\0\377,\17\0\377\0\0\0\377\0\0\0\377\0\0\0\377\1\0\0\377\1\0" + "\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0" + "\0\0\3779\23\0\377\317G\0\377\301B\0\377\302C\0\377\302C\0\377\303C\0" + "\377\270\77\0\377\32\10\0\377=\24\0\377\314F\0\377\302C\0\377\305D\0" + "\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\373" + "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\306D\0\377\301C\0" + "\377\302C\0\377\2253\0\377\7\2\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0" + "\0\0\377/\20\0\377\0\0\0\377\0\0\0\3776\22\0\377\313F\0\377\301B\0\377" + "\301B\0\377\302C\0\377\302C\0\377\311E\0\377\0\0\0\377\1\0\0\377\0\0" + "\0\377\0\0\0\377\0\0\0\377\1\0\0\377\2201\0\377\302C\0\377\300B\0\377" + "\2\0\0\375\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\373\0\0\0\377\0" + "\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\313F\0\377\302B\0\377" + "\302C\0\377\2407\0\377\0\0\0\377\0\0\0\377\0\0\0\377\1\0\0\377\30\10" + "\0\377\310E\0\377\300B\0\377\301B\0\377\301C\0\377\301B\0\377\320H\0" + "\377\21\5\0\377\3\1\0\377\6\2\0\377$\15\0\377\0\0\0\377\0\0\0\377\0\0" + "\0\377\0\0\0\377\0\0\0\377\0\0\0\377N\32\0\377\302C\0\377\302C\0\377" + "u(\0\376\0\0\0W\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\373\0\0\0\377\0\0\0\377\17\5" + "\0\377\4\1\0\377\0\0\0\377\0\0\0\377\1\0\0\377\320G\0\377\302C\0\377" + "\302C\0\377\311E\0\377\262=\0\377\320G\0\377\300B\0\377\302B\0\377\302" + "C\0\377\301B\0\377\306D\0\377\23\6\0\377\2\0\0\377\13\3\0\377\0\0\0\377" + "\0\0\0\377\0\0\0\377\0\0\0\377\1\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" + "\0\0\0\377\0\0\0\377\0\0\0\377-\17\0\377\301B\0\377\301B\0\377\314F\0" + "\377\1\0\0\365\0\0\0\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\372\0\0\0\3771\21\0\377\0\0\0\377\0" + "\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\1\0\0\377\307D\0\377\302C\0\377" + "\301C\0\377\302C\0\377\302C\0\377\302C\0\377\307E\0\377\24\7\0\377\1" + "\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\1\0\0\377\0\0\0\377\0\0\0\377" + "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" + "\0\0\0\377\0\0\0\377\0\0\0\377\307D\0\377\301C\0\377\302C\0\377\303C" + "\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\371\0\0\0\377\1\0\0\377\1\0\0\377\0\0\0\377" + "\0\0\0\377\0\0\0\377#\14\0\377\0\0\0\377\0\0\0\377\255;\0\377\301B\0" + "\377\302C\0\377\301C\0\377\311E\0\377\1\0\0\377\0\0\0\377\0\0\0\377\0" + "\0\0\377\3\1\0\377\0\0\0\377\1\0\0\377\36\12\0\377\0\0\0\377\0\0\0\377" + "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\1\0\0\377" + "\0\0\0\377\312E\0\377\302C\0\377\301C\0\377\302C\0\377\301C\0\377\300" + "B\0\377\23\6\0\374\0\0\0\31\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\1\0\0\372=\26\0\377\13\4\0\377\17\5\0\377\12\3\0\377\0" + "\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\33\12\0\377\0\0\0\377\177,\0\377" + "\302C\0\377\301C\0\377\310E\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" + "\377\0\0\0\377\0\0\0\377\0\0\0\377\1\0\0\377:\25\0\377-\20\0\377\0\0" + "\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\2479\0\377\277B\0\377" + "\301B\0\377\301B\0\377\310E\0\377\2479\0\377K\32\0\377\302C\0\377\301" + "B\0\377\302C\0\377\212/\0\377\0\0\0\332\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0a#\0\373\2\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\32" + "\11\0\377\0\0\0\377\20\5\0\377\26\7\0\377\4\1\0\377\23\6\0\377\0\0\0" + "\377<\24\0\377\301B\0\377\302B\0\377\302C\0\377\0\0\0\377\0\0\0\377\4" + "\1\0\377\0\0\0\377!\14\0\377\40\13\0\377\0\0\0\377\5\1\0\377\35\12\0" + "\377\0\0\0\377\1\0\0\377\3\0\0\377\316G\0\377\301B\0\377\302B\0\377\301" + "B\0\377\317G\0\377\0\0\0\377\1\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" + "\0\0\0\377\307E\0\377\301B\0\377\320H\0\377\0\0\0\377\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0l&\0\374\0\0\0\377@\27\0\377\2204\0\377\0\0\0" + "\377\200.\0\377|,\0\377*\17\0\377\7\2\0\377)\16\0\377\0\0\0\377\15\5" + "\0\377\0\0\0\377\20\5\0\377\301B\0\377\302C\0\377\277B\0\377\0\0\0\377" + "\0\0\0\377\177-\0\377\24\6\0\377\0\0\0\377\0\0\0\377*\17\0\377\0\0\0" + "\377\2304\0\377\277B\0\377\301B\0\377\302C\0\377\277B\0\377\2437\0\377" + "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" + "\0\0\0\377\1\0\0\377\315F\0\377\301B\0\377\304C\0\377\0\0\0\374\0\0\0" + "\5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\2153\0\377\27\10\0\377\2050\0\377" + "\201.\0\377\2101\0\377\2060\0\377\2101\0\377\0\0\0\377\200.\0\377\0\0" + "\0\377\23\6\0\377\0\0\0\377\0\0\0\377\0\0\0\377\300B\0\377\302C\0\377" + "\302C\0\377\0\0\0\377\0\0\0\377\36\13\0\377\0\0\0\377N\32\0\377\303C" + "\0\377\301B\0\377\302C\0\377\301B\0\377\314F\0\377)\16\0\377\2\0\0\377" + "\0\0\0\377\0\0\0\377\4\1\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" + "\0\0\0\377\0\0\0\377\0\0\0\377\2\0\0\377\307D\0\377\302C\0\377\277B\0" + "\377\7\2\0\377\0\0\0\271\0\0\0\1\0\0\0\322Z\40\0\377\2050\0\377\202/" + "\0\377&\15\0\377k&\0\377\2101\0\377\1\0\0\377\2070\0\377\77\26\0\377" + "\26\10\0\377\2214\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0" + "\377\301B\0\377\302C\0\377\302C\0\377\306D\0\377\307E\0\377\300B\0\377" + "\301B\0\377\302C\0\377\302C\0\377\2325\0\377\0\0\0\377\0\0\0\377\0\0" + "\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0" + "\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" + "\304C\0\377\301C\0\377\301B\0\377t'\0\377\0\0\0\377\0\0\0\0\0\0\0\376" + "\2050\0\377;\25\0\377|-\0\3776\23\0\377\201.\0\377R\35\0\377\2060\0\377" + "\204/\0\377\2040\0\377\2071\0\377\0\0\0\377\0\0\0\377\34\12\0\377\0\0" + "\0\377\0\0\0\377\0\0\0\377\305D\0\377\301B\0\377\301B\0\377\302C\0\377" + "\302C\0\377\302C\0\377\207.\0\377\2\0\0\377\0\0\0\377\0\0\0\377\0\0\0" + "\377\0\0\0\377\0\0\0\377\0\0\0\377c#\0\377\0\0\0\377\0\0\0\377\0\0\0" + "\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\272" + "@\0\377\302C\0\377\301B\0\377\276A\0\377\177+\0\377\0\0\0\377\0\0\0\0" + "\0\0\0\25\3\0\0\376\2111\0\377\0\0\0\377X\37\0\377T\36\0\377\201.\0\377" + "\201.\0\377<\25\0\377\201.\0\377b#\0\377\2153\0\377\2071\0\377|,\0\377" + "#\14\0\377Z\40\0\377\0\0\0\377\0\0\0\377\316G\0\377\302C\0\377\302C\0" + "\377\302C\0\377\2438\0\377\0\0\0\377\0\0\0\377\0\0\0\377\11\3\0\377\0" + "\0\0\377\0\0\0\377\0\0\0\377\6\1\0\377*\17\0\3775\23\0\377\25\7\0\377" + "\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\312E\0\377\301B\0" + "\377\301B\0\377\305D\0\377L\32\0\377\2\0\0\377\0\0\0\377\0\0\0\377\0" + "\0\0\0\0\0\0\0\0\0\0\0\3\1\0\374\0\0\0\377\0\0\0\377\200.\0\377\201." + "\0\377\2111\0\377\2060\0\377\201.\0\377\200.\0\377\2050\0\377\2111\0" + "\377\0\0\0\377\10\2\0\377]!\0\377\0\0\0\377\0\0\0\377\1\0\0\377\314F" + "\0\377\302C\0\377\302C\0\377\316G\0\377\1\0\0\377\0\0\0\377\0\0\0\377" + "\4\1\0\377\0\0\0\377\0\0\0\377\0\0\0\377\1\0\0\377N\33\0\377\0\0\0\377" + "\1\0\0\377\0\0\0\377\0\0\0\377\11\3\0\377\310E\0\377\302C\0\377\301B" + "\0\377\304C\0\377#\13\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0" + "\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0,\17\0\374v*\0\377*\16\0\377" + "\2070\0\377\2050\0\377\202/\0\377\202/\0\377\2050\0\377\37\13\0\377\0" + "\0\0\377N\33\0\377,\20\0\377\7\2\0\377\1\0\0\377\1\0\0\377\0\0\0\377" + "\1\0\0\377\273@\0\377\301B\0\377\301C\0\377\315F\0\377\2\1\0\377\0\0" + "\0\377\0\0\0\377\0\0\0\377\1\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0" + "\0\0\377\3\1\0\377;\23\0\377\302C\0\377\301B\0\377\302C\0\377\315F\0" + "\377\5\1\0\377\13\4\0\377\34\11\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0" + "\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\23\7\0\375" + "O\34\0\377\27\10\0\377\201.\0\377\202/\0\377W\37\0\377\2050\0\377\201" + ".\0\3772\21\0\377\0\0\0\377x+\0\377\204/\0\377\200.\0\377>\26\0\377\1" + "\0\0\377\0\0\0\377\0\0\0\377\2366\0\377\302C\0\377\301C\0\377\303C\0" + "\377\0\0\0\377#\14\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0" + "\0\377{*\0\377\300B\0\377\301B\0\377\302C\0\377\321H\0\377\0\0\0\377" + "\0\0\0\377r)\0\377\2060\0\377k&\0\377S\36\0\377#\14\0\377\0\0\0\377\0" + "\0\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77" + "\27\0\375\204/\0\377\2070\0\377o(\0\377u*\0\377\204/\0\377\201.\0\377" + "U\36\0\377\2132\0\377V\36\0\377\204/\0\377\0\0\0\377v+\0\377Q\35\0\377" + "\0\0\0\377\0\0\0\377\0\0\0\377q&\0\377\302C\0\377\302B\0\377\300B\0\377" + "\4\1\0\377\0\0\0\377\0\0\0\377\0\0\0\377\306D\0\377\300B\0\377\302B\0" + "\377\301B\0\377\277A\0\377\0\0\0\3773\22\0\377}-\0\377\0\0\0\377\211" + "1\0\377\2101\0\377\0\0\0\377\25\10\0\377\0\0\0\377&\15\0\377\0\0\0\377" + "%\15\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4}-" + "\0\376N\34\0\377\201.\0\377\2122\0\377z,\0\377\2060\0\377\204/\0\377" + "\0\0\0\3776\23\0\377\2204\0\377\0\0\0\377G\31\0\377\3\1\0\377\0\0\0\377" + "\0\0\0\377\0\0\0\377\0\0\0\377N\32\0\377\302C\0\377\302C\0\377\302C\0" + "\377\277B\0\377\314F\0\377\302C\0\377\302C\0\377\301B\0\377\2274\0\377" + "\0\0\0\377H\32\0\377\203/\0\377\202/\0\377\2070\0\377\2060\0\377\203" + "/\0\377\2163\0\377D\30\0\3771\21\0\377\0\0\0\377@\26\0\377\2111\0\377" + "\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\5" + "\1\0\13\0\0\0\376l'\0\377Q\35\0\377\203/\0\377o(\0\377\10\2\0\377\177" + ".\0\377|,\0\377\0\0\0\377\2\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377A\27" + "\0\377\0\0\0\377\0\0\0\377\0\0\0\377;\23\0\377\301B\0\377\301B\0\377" + "\301B\0\377\302C\0\377\306D\0\377I\31\0\377\5\1\0\377\2060\0\377[!\0" + "\377\202/\0\377\202/\0\377T\36\0\377\202/\0\377\2070\0\377\2071\0\377" + "\2101\0\377k&\0\3772\22\0\377f%\0\377\6\1\0\377\7\2\0\377\15\5\0\377" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\32\22\6\0\377\2\0\0\377\2070\0\377\204/\0\377\201.\0\377\202/\0\377" + "\2070\0\377\2100\0\377\203/\0\377\0\0\0\377\0\0\0\377\16\5\0\377\0\0" + "\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377q&\0\377\302C\0\377\303" + "C\0\377\22\6\0\377\0\0\0\377\204/\0\377\202/\0\377\201.\0\377\202/\0" + "\377\202/\0\377\202/\0\377\2050\0\377\2101\0\377t*\0\377\201.\0\377\200" + ".\0\377M\33\0\377\201.\0\377\2101\0\377E\30\0\377\204/\0\377i&\0\377" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0*\0\0\0\377\2060\0\377\2122\0\377\201.\0\377U\36\0\377\206" + "0\0\377-\20\0\377\0\0\0\377\!\0\377P\34\0\377l'\0\377\0\0\0\377\0\0" + "\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\207" + "0\0\377\202/\0\377\202/\0\377\202/\0\377\203/\0\377\202/\0\377\202/\0" + "\377\203/\0\377\202/\0\377\2111\0\377\201.\0\377\10\3\0\377\200.\0\377" + "\31\11\0\377\201.\0\377N\34\0\377\2111\0\377t*\0\377\0\0\0\377\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0""6\0\0\0\377>\26\0\377<\25\0\377\202/\0\377\202/\0\377\202" + "/\0\377\177.\0\377E\30\0\3773\22\0\377\0\0\0\377\0\0\0\377\0\0\0\377" + "\0\0\0\377Z\40\0\377\0\0\0\377\0\0\0\377\26\7\0\377\202/\0\377\202/\0" + "\377\202/\0\377\202/\0\377\202.\0\377\201.\0\377\204/\0\377\202/\0\377" + "\202/\0\377\202/\0\377\2060\0\377\203/\0\377\202/\0\377\201/\0\377\202" + "/\0\377M\33\0\377\201.\0\377\202/\0\377\203/\0\377I\32\0\377\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0I\2071\0\377\2060\0\377\1\0\0\377]!\0\377E\30\0\377" + "\203/\0\377\0\0\0\377\202.\0\377\1\0\0\377\26\10\0\377&\15\0\377\6\2" + "\0\377]!\0\377\0\0\0\377\0\0\0\377\33\11\0\377\202.\0\377\202/\0\377" + "\202/\0\377\202.\0\377\202/\0\377\202/\0\377\201.\0\377\202/\0\377\202" + ".\0\3775\23\0\377\201.\0\377B\27\0\377\203/\0\377\201.\0\377`"\0\377" + "\201.\0\377~-\0\377\201.\0\377J\32\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\5\1\0^\2163\0\377j&\0\377\201.\0\377\202/\0\377Q\35\0\377" + "\16\5\0\377t)\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" + "\0\0\0\377\0\0\0\377\27\10\0\377\202/\0\377\202/\0\377P\35\0\377\200" + ".\0\377\202/\0\377\202/\0\377\202/\0\377\0\0\0\377\202/\0\377\202/\0" + "\377\202/\0\377\201.\0\377\201.\0\377`"\0\377\201.\0\377\201.\0\377" + "\2071\0\377\201.\0\377\202/\0\377\36\12\0\377\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\1\0\0o\2111\0\377\202/\0\377u*\0\377\201.\0\377\2060\0\377" + "\0\0\0\377-\20\0\377A\27\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377" + "\0\0\0\377!\14\0\377\202/\0\377\202/\0\377\201.\0\377\201.\0\377\203" + "/\0\377\202/\0\377\202/\0\377\202.\0\377\202/\0\377\202/\0\377.\20\0" + "\377\201.\0\377\202/\0\377\201.\0\377\201.\0\377\201.\0\377r)\0\377\201" + ".\0\377\2122\0\377\33\11\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\2\0\0\206\2132\0\377w*\0\377\2132\0\377|,\0\377r)\0\377\2111\0" + "\377\0\0\0\377L\33\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377+\17" + "\0\377\201.\0\377\202/\0\377\202/\0\377\201.\0\377\202/\0\377\202/\0" + "\377\201.\0\377\202/\0\377\201.\0\377\202/\0\377\202/\0\377\201.\0\377" + "\202/\0\377\202/\0\377\202/\0\377\203/\0\377w+\0\377\201.\0\377\202/" + "\0\377\21\6\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\237\2132\0\377X\37\0\377\201.\0\377~-\0\3777\23\0\377\7\2\0\377" + "G\31\0\377\0\0\0\377\0\0\0\377I\32\0\377\0\0\0\3776\23\0\377\202.\0\377" + "\202/\0\377\202.\0\377\202.\0\377\202/\0\377\2050\0\377z,\0\377\202." + "\0\377\202.\0\377\6\2\0\377\201.\0\377\202.\0\377\202/\0\377\202.\0\377" + "\202.\0\377\202.\0\377\201.\0\377\201.\0\377\2040\0\377\0\0\0\377\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\264\214" + "2\0\377\203/\0\377\11\3\0\377\2111\0\377\2101\0\377\0\0\0\377\1\0\0\377" + "\10\2\0\377\2\0\0\377\0\0\0\377C\30\0\377\201/\0\377\201/\0\377k&\0\377" + "\201.\0\377\202/\0\377\201.\0\377\201/\0\377\201.\0\377\201/\0\377\201" + "/\0\377\201.\0\377\201/\0\377\202/\0\377{,\0\377\201.\0\377\201.\0\377" + "\201.\0\3778\23\0\377\1\0\0\275\0\0\0\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\0\0\310\2121\0\377P\34\0\377" + "2\21\0\377\2111\0\377\10\2\0\377"\14\0\377\20\5\0\377\0\0\0\377\0\0" + "\0\377Q\35\0\377\201/\0\377\202/\0\377\200.\0\377\201.\0\377\202/\0\377" + "\201/\0\377\201/\0\377\201/\0\377\201/\0\377\2050\0\377\202/\0\377\201" + "/\0\377\202/\0\377\201/\0\377\201.\0\377j&\0\377\1\0\0\366\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\335\2122\0\377\201.\0\377\0\0\0\377\0\0" + "\0\377\0\0\0\377x+\0\377\0\0\0\377G\31\0\377^!\0\377\201.\0\377\202/" + "\0\377\201.\0\377\201.\0\377\202/\0\377\2050\0\377\2111\0\377\201.\0" + "\377\201.\0\377\201.\0\377\201.\0\377\201.\0\377\201.\0\377\2101\0\377" + "\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\351\3\1\0\377\0\0\0\377H\32\0\377\0\0\0\377\15\4\0\377\0\0\0\377" + "\0\0\0\377h%\0\377\201.\0\377\202/\0\377\202.\0\377\201.\0\377\202/\0" + "\377\202/\0\377\202/\0\377\202.\0\377\201.\0\377F\31\0\377\201.\0\377" + "\2122\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\372~-\0\377\0\0\0\377\0\0\0\377" + "\0\0\0\377\0\0\0\377\0\0\0\377k&\0\377\202/\0\377\202/\0\377\202/\0\377" + "\40\13\0\377\201.\0\377\202/\0\377\202/\0\377\202/\0\377\202/\0\377\206" + "0\0\377\7\2\0\377\0\0\0'\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\0\0\0\377\0\0\0" + "\377@\27\0\3777\24\0\377\0\0\0\377\0\0\0\377o(\0\377\202/\0\377\202/" + "\0\377\202/\0\377\202/\0\377\202/\0\377\202/\0\377\202/\0\377\202/\0" + "\377)\16\0\377\1\0\0\223\0\0\0\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\1\0\0\0\377\13\4\0\377\0\0\0\377\0\0\0\377\0\0\0\377r)\0\377\202" + "/\0\377\202/\0\377\202/\0\377\202/\0\377\202.\0\377\201.\0\377V\36\0" + "\377\1\0\0\357\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\3\0\0\0\377\24\7\0\377\0\0\0\377\0\0\0\377u*\0\377" + "\202/\0\377\202/\0\377\202/\0\377\201.\0\377|,\0\377\0\0\0\377\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\377\0\0\0\377y+\0\377\201" + ".\0\377\201.\0\377\2121\0\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\11\3\0\377|,\0\377\2101\0\377\0" + "\0\0\377\0\0\0\26\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\374\10\3\0\377\0\0\0Y\0\0\0\2\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" + "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"}; + +
Modified: trunk/src/toolbar.c =================================================================== --- trunk/src/toolbar.c 2009-01-17 13:11:06 UTC (rev 3478) +++ trunk/src/toolbar.c 2009-01-17 17:59:20 UTC (rev 3479) @@ -34,6 +34,7 @@ #include "utils.h" #include "dialogs.h" #include "document.h" +#include "build.h" #include "geanymenubuttonaction.h" #include "geanyentryaction.h"
@@ -167,6 +168,7 @@ GtkBox *box; GtkAction *action_new; GtkAction *action_open; + GtkAction *action_build; GtkAction *action_searchentry; GtkAction *action_gotoentry; GError *error = NULL; @@ -188,6 +190,12 @@ g_signal_connect(action_open, "button-clicked", G_CALLBACK(on_toolbutton_open_clicked), NULL); gtk_action_group_add_action(group, action_open);
+ action_build = geany_menu_button_action_new( + "Build", NULL, _("Build the current file"), GEANY_STOCK_BUILD); + g_signal_connect(action_build, "button-clicked", + G_CALLBACK(build_toolbutton_build_clicked), NULL); + gtk_action_group_add_action(group, action_build); + action_searchentry = geany_entry_action_new( "SearchEntry", _("Search"), _("Find the entered text in the current file"), FALSE); g_signal_connect(action_searchentry, "entry-activate",
Modified: trunk/src/ui_utils.c =================================================================== --- trunk/src/ui_utils.c 2009-01-17 13:11:06 UTC (rev 3478) +++ trunk/src/ui_utils.c 2009-01-17 17:59:20 UTC (rev 3479) @@ -821,6 +821,11 @@ return gdk_pixbuf_new_from_inline(-1, close_all_inline, FALSE, NULL); break; } + case GEANY_IMAGE_BUILD: + { + return gdk_pixbuf_new_from_inline(-1, build_inline, FALSE, NULL); + break; + } default: return NULL; } @@ -831,6 +836,8 @@ { if (utils_str_equal(stock_id, GEANY_STOCK_CLOSE_ALL)) return ui_new_pixbuf_from_inline(GEANY_IMAGE_CLOSE_ALL); + else if (utils_str_equal(stock_id, GEANY_STOCK_BUILD)) + return ui_new_pixbuf_from_inline(GEANY_IMAGE_BUILD); else if (utils_str_equal(stock_id, GEANY_STOCK_SAVE_ALL)) return ui_new_pixbuf_from_inline(GEANY_IMAGE_SAVE_ALL);
@@ -1593,7 +1600,8 @@ GtkStockItem items[] = { { GEANY_STOCK_SAVE_ALL, _("Save All"), 0, 0, GETTEXT_PACKAGE }, - { GEANY_STOCK_CLOSE_ALL, _("Close All"), 0, 0, GETTEXT_PACKAGE } + { GEANY_STOCK_CLOSE_ALL, _("Close All"), 0, 0, GETTEXT_PACKAGE }, + { GEANY_STOCK_BUILD, _("Build"), 0, 0, GETTEXT_PACKAGE } };
len = G_N_ELEMENTS(items);
Modified: trunk/src/ui_utils.h =================================================================== --- trunk/src/ui_utils.h 2009-01-17 13:11:06 UTC (rev 3478) +++ trunk/src/ui_utils.h 2009-01-17 17:59:20 UTC (rev 3479) @@ -140,11 +140,14 @@
#define GEANY_STOCK_SAVE_ALL "geany-save-all" #define GEANY_STOCK_CLOSE_ALL "geany-close-all" +#define GEANY_STOCK_BUILD "geany-build" + enum { GEANY_IMAGE_LOGO, GEANY_IMAGE_SAVE_ALL, - GEANY_IMAGE_CLOSE_ALL + GEANY_IMAGE_CLOSE_ALL, + GEANY_IMAGE_BUILD };
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.