Kaydet (Commit) 204b62d0 authored tarafından Enrico Tröger's avatar Enrico Tröger

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.

git-svn-id: https://geany.svn.sourceforge.net/svnroot/geany/trunk@3479 ea778897-0a13-0410-b9d1-a72fbfd435f5
üst 525678b4
...@@ -16,6 +16,11 @@ ...@@ -16,6 +16,11 @@
Properly fix parsing of compiler error messages. Properly fix parsing of compiler error messages.
* data/filetypes.nsis: * data/filetypes.nsis:
Update keywords lists. 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> 2009-01-16 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com>
......
...@@ -13,7 +13,6 @@ Note: features included in brackets have lower priority. ...@@ -13,7 +13,6 @@ Note: features included in brackets have lower priority.
o configurable filetype and project make commands (e.g. using o configurable filetype and project make commands (e.g. using
bud for D) bud for D)
o recent projects menu o recent projects menu
o improve Compile toolbar button for Make (drop down radio list?)
o MRU documents switching o MRU documents switching
o (support for adding plugin filetypes - SCI_LOADLEXERLIBRARY?) o (support for adding plugin filetypes - SCI_LOADLEXERLIBRARY?)
o (selectable menu of arguments to use for Make, from Make Custom) o (selectable menu of arguments to use for Make, from Make Custom)
......
...@@ -3391,6 +3391,9 @@ Redo Redo the last modification ...@@ -3391,6 +3391,9 @@ Redo Redo the last modification
NavBack Navigate back a location NavBack Navigate back a location
NavFor Navigate forward a location NavFor Navigate forward a location
Compile Compile the current file 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 Run Run or view the current file
Color Open a color chooser dialog, to interactively pick colors from a palette Color Open a color chooser dialog, to interactively pick colors from a palette
ZoomIn Zoom in the text ZoomIn Zoom in the text
......
...@@ -57,6 +57,7 @@ ...@@ -57,6 +57,7 @@
#include "editor.h" #include "editor.h"
#include "win32.h" #include "win32.h"
#include "toolbar.h" #include "toolbar.h"
#include "geanymenubuttonaction.h"
GeanyBuildInfo build_info = {GBO_COMPILE, 0, NULL, GEANY_FILETYPES_NONE, NULL}; GeanyBuildInfo build_info = {GBO_COMPILE, 0, NULL, GEANY_FILETYPES_NONE, NULL};
...@@ -83,6 +84,8 @@ enum ...@@ -83,6 +84,8 @@ enum
LATEX_CMD_VIEW_PDF LATEX_CMD_VIEW_PDF
}; };
static GeanyBuildType last_toolbutton_action = GBO_BUILD;
static BuildMenuItems default_menu_items = static BuildMenuItems default_menu_items =
{NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}; {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL};
static BuildMenuItems latex_menu_items = static BuildMenuItems latex_menu_items =
...@@ -93,6 +96,13 @@ static struct ...@@ -93,6 +96,13 @@ static struct
{ {
GtkWidget *run_button; GtkWidget *run_button;
GtkWidget *compile_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; widgets;
...@@ -960,31 +970,24 @@ static void add_menu_accel(GeanyKeyGroup *group, guint kb_id, ...@@ -960,31 +970,24 @@ static void add_menu_accel(GeanyKeyGroup *group, guint kb_id,
static void create_build_menu_gen(BuildMenuItems *menu_items) 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(); 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); GeanyKeyGroup *group = g_ptr_array_index(keybinding_groups, GEANY_KEY_GROUP_BUILD);
menu = gtk_menu_new(); menu = gtk_menu_new();
/* compile the code */ /* 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_widget_show(item);
gtk_container_add(GTK_CONTAINER(menu), 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); 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); g_signal_connect(item, "activate", G_CALLBACK(on_build_compile_activate), NULL);
menu_items->item_compile = item; menu_items->item_compile = item;
/* build the code */ /* 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_widget_show(item);
gtk_container_add(GTK_CONTAINER(menu), 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); GEANY_ADD_WIDGET_ACCEL(GEANY_KEYS_BUILD_LINK, item);
g_signal_connect(item, "activate", G_CALLBACK(on_build_build_activate), NULL); g_signal_connect(item, "activate", G_CALLBACK(on_build_build_activate), NULL);
menu_items->item_link = item; menu_items->item_link = item;
...@@ -997,8 +1000,6 @@ static void create_build_menu_gen(BuildMenuItems *menu_items) ...@@ -997,8 +1000,6 @@ static void create_build_menu_gen(BuildMenuItems *menu_items)
item = gtk_image_menu_item_new_with_mnemonic(_("_Make All")); item = gtk_image_menu_item_new_with_mnemonic(_("_Make All"));
gtk_widget_show(item); gtk_widget_show(item);
gtk_container_add(GTK_CONTAINER(menu), 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); GEANY_ADD_WIDGET_ACCEL(GEANY_KEYS_BUILD_MAKE, item);
g_signal_connect(item, "activate", G_CALLBACK(on_build_make_activate), g_signal_connect(item, "activate", G_CALLBACK(on_build_make_activate),
GINT_TO_POINTER(GBO_MAKE_ALL)); GINT_TO_POINTER(GBO_MAKE_ALL));
...@@ -1009,8 +1010,6 @@ static void create_build_menu_gen(BuildMenuItems *menu_items) ...@@ -1009,8 +1010,6 @@ static void create_build_menu_gen(BuildMenuItems *menu_items)
gtk_widget_show(item); gtk_widget_show(item);
GEANY_ADD_WIDGET_ACCEL(GEANY_KEYS_BUILD_MAKEOWNTARGET, item); GEANY_ADD_WIDGET_ACCEL(GEANY_KEYS_BUILD_MAKEOWNTARGET, item);
gtk_container_add(GTK_CONTAINER(menu), 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), g_signal_connect(item, "activate", G_CALLBACK(on_build_make_activate),
GINT_TO_POINTER(GBO_MAKE_CUSTOM)); GINT_TO_POINTER(GBO_MAKE_CUSTOM));
menu_items->item_make_custom = item; menu_items->item_make_custom = item;
...@@ -1020,8 +1019,6 @@ static void create_build_menu_gen(BuildMenuItems *menu_items) ...@@ -1020,8 +1019,6 @@ static void create_build_menu_gen(BuildMenuItems *menu_items)
gtk_widget_show(item); gtk_widget_show(item);
GEANY_ADD_WIDGET_ACCEL(GEANY_KEYS_BUILD_MAKEOBJECT, item); GEANY_ADD_WIDGET_ACCEL(GEANY_KEYS_BUILD_MAKEOBJECT, item);
gtk_container_add(GTK_CONTAINER(menu), 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), g_signal_connect(item, "activate", G_CALLBACK(on_build_make_activate),
GINT_TO_POINTER(GBO_MAKE_OBJECT)); GINT_TO_POINTER(GBO_MAKE_OBJECT));
menu_items->item_make_object = item; menu_items->item_make_object = item;
...@@ -1053,7 +1050,6 @@ static void create_build_menu_gen(BuildMenuItems *menu_items) ...@@ -1053,7 +1050,6 @@ static void create_build_menu_gen(BuildMenuItems *menu_items)
item = gtk_image_menu_item_new_from_stock("gtk-execute", accel_group); item = gtk_image_menu_item_new_from_stock("gtk-execute", accel_group);
gtk_widget_show(item); gtk_widget_show(item);
gtk_container_add(GTK_CONTAINER(menu), 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); GEANY_ADD_WIDGET_ACCEL(GEANY_KEYS_BUILD_RUN, item);
g_signal_connect(item, "activate", G_CALLBACK(on_build_execute_activate), NULL); g_signal_connect(item, "activate", G_CALLBACK(on_build_execute_activate), NULL);
menu_items->item_exec = item; menu_items->item_exec = item;
...@@ -1064,16 +1060,10 @@ static void create_build_menu_gen(BuildMenuItems *menu_items) ...@@ -1064,16 +1060,10 @@ static void create_build_menu_gen(BuildMenuItems *menu_items)
gtk_widget_set_sensitive(separator, FALSE); gtk_widget_set_sensitive(separator, FALSE);
/* arguments */ /* 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); gtk_widget_show(item);
GEANY_ADD_WIDGET_ACCEL(GEANY_KEYS_BUILD_OPTIONS, item); GEANY_ADD_WIDGET_ACCEL(GEANY_KEYS_BUILD_OPTIONS, item);
gtk_container_add(GTK_CONTAINER(menu), 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); g_signal_connect(item, "activate", G_CALLBACK(on_build_arguments_activate), NULL);
menu_items->item_set_args = item; menu_items->item_set_args = item;
...@@ -1084,35 +1074,26 @@ static void create_build_menu_gen(BuildMenuItems *menu_items) ...@@ -1084,35 +1074,26 @@ static void create_build_menu_gen(BuildMenuItems *menu_items)
static void create_build_menu_tex(BuildMenuItems *menu_items) 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(); 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); GeanyKeyGroup *group = g_ptr_array_index(keybinding_groups, GEANY_KEY_GROUP_BUILD);
menu = gtk_menu_new(); menu = gtk_menu_new();
/* DVI */ /* 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_widget_show(item);
gtk_container_add(GTK_CONTAINER(menu), 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); 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_signal_connect(item, "activate",
G_CALLBACK(on_build_tex_activate), GINT_TO_POINTER(LATEX_CMD_TO_DVI)); G_CALLBACK(on_build_tex_activate), GINT_TO_POINTER(LATEX_CMD_TO_DVI));
menu_items->item_compile = item; menu_items->item_compile = item;
/* PDF */ /* 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_widget_show(item);
gtk_container_add(GTK_CONTAINER(menu), 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); 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_signal_connect(item, "activate",
G_CALLBACK(on_build_tex_activate), GINT_TO_POINTER(LATEX_CMD_TO_PDF)); G_CALLBACK(on_build_tex_activate), GINT_TO_POINTER(LATEX_CMD_TO_PDF));
menu_items->item_link = item; menu_items->item_link = item;
...@@ -1125,8 +1106,6 @@ static void create_build_menu_tex(BuildMenuItems *menu_items) ...@@ -1125,8 +1106,6 @@ static void create_build_menu_tex(BuildMenuItems *menu_items)
item = gtk_image_menu_item_new_with_mnemonic(_("_Make All")); item = gtk_image_menu_item_new_with_mnemonic(_("_Make All"));
gtk_widget_show(item); gtk_widget_show(item);
gtk_container_add(GTK_CONTAINER(menu), 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); GEANY_ADD_WIDGET_ACCEL(GEANY_KEYS_BUILD_MAKE, item);
g_signal_connect(item, "activate", G_CALLBACK(on_build_make_activate), g_signal_connect(item, "activate", G_CALLBACK(on_build_make_activate),
GINT_TO_POINTER(GBO_MAKE_ALL)); GINT_TO_POINTER(GBO_MAKE_ALL));
...@@ -1137,8 +1116,6 @@ static void create_build_menu_tex(BuildMenuItems *menu_items) ...@@ -1137,8 +1116,6 @@ static void create_build_menu_tex(BuildMenuItems *menu_items)
gtk_widget_show(item); gtk_widget_show(item);
GEANY_ADD_WIDGET_ACCEL(GEANY_KEYS_BUILD_MAKEOWNTARGET, item); GEANY_ADD_WIDGET_ACCEL(GEANY_KEYS_BUILD_MAKEOWNTARGET, item);
gtk_container_add(GTK_CONTAINER(menu), 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), g_signal_connect(item, "activate", G_CALLBACK(on_build_make_activate),
GINT_TO_POINTER(GBO_MAKE_CUSTOM)); GINT_TO_POINTER(GBO_MAKE_CUSTOM));
menu_items->item_make_custom = item; menu_items->item_make_custom = item;
...@@ -1168,27 +1145,19 @@ static void create_build_menu_tex(BuildMenuItems *menu_items) ...@@ -1168,27 +1145,19 @@ static void create_build_menu_tex(BuildMenuItems *menu_items)
/* DVI view */ /* DVI view */
#define LATEX_VIEW_DVI_LABEL _("_View DVI File") /* used later again */ #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_widget_show(item);
gtk_container_add(GTK_CONTAINER(menu), item); gtk_container_add(GTK_CONTAINER(menu), item);
GEANY_ADD_WIDGET_ACCEL(GEANY_KEYS_BUILD_RUN, 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_signal_connect(item, "activate",
G_CALLBACK(on_build_execute_activate), GINT_TO_POINTER(LATEX_CMD_VIEW_DVI)); G_CALLBACK(on_build_execute_activate), GINT_TO_POINTER(LATEX_CMD_VIEW_DVI));
menu_items->item_exec = item; menu_items->item_exec = item;
/* PDF view */ /* 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_widget_show(item);
gtk_container_add(GTK_CONTAINER(menu), item); gtk_container_add(GTK_CONTAINER(menu), item);
GEANY_ADD_WIDGET_ACCEL(GEANY_KEYS_BUILD_RUN2, 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_signal_connect(item, "activate",
G_CALLBACK(on_build_execute_activate), GINT_TO_POINTER(LATEX_CMD_VIEW_PDF)); G_CALLBACK(on_build_execute_activate), GINT_TO_POINTER(LATEX_CMD_VIEW_PDF));
menu_items->item_exec2 = item; menu_items->item_exec2 = item;
...@@ -1200,15 +1169,10 @@ static void create_build_menu_tex(BuildMenuItems *menu_items) ...@@ -1200,15 +1169,10 @@ static void create_build_menu_tex(BuildMenuItems *menu_items)
gtk_widget_set_sensitive(separator, FALSE); gtk_widget_set_sensitive(separator, FALSE);
/* arguments */ /* 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); gtk_widget_show(item);
GEANY_ADD_WIDGET_ACCEL(GEANY_KEYS_BUILD_OPTIONS, item); GEANY_ADD_WIDGET_ACCEL(GEANY_KEYS_BUILD_OPTIONS, item);
gtk_container_add(GTK_CONTAINER(menu), 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_signal_connect(item, "activate",
G_CALLBACK(on_build_arguments_activate), filetypes[GEANY_FILETYPES_LATEX]); G_CALLBACK(on_build_arguments_activate), filetypes[GEANY_FILETYPES_LATEX]);
menu_items->item_set_args = item; menu_items->item_set_args = item;
...@@ -1589,20 +1553,24 @@ void build_menu_update(GeanyDocument *doc) ...@@ -1589,20 +1553,24 @@ void build_menu_update(GeanyDocument *doc)
GeanyFiletype *ft; GeanyFiletype *ft;
gboolean have_path, can_build, can_make, can_run, can_stop, can_set_args, have_errors; gboolean have_path, can_build, can_make, can_run, can_stop, can_set_args, have_errors;
BuildMenuItems *menu_items; 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) if (doc == NULL)
doc = document_get_current(); doc = document_get_current();
if (doc == NULL || if (doc == NULL ||
(FILETYPE_ID(doc->file_type) == GEANY_FILETYPES_NONE && doc->file_name == 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_widget_set_sensitive(menubar_build_menu, FALSE);
gtk_menu_item_remove_submenu(GTK_MENU_ITEM(ui_lookup_widget(main_widgets.window, "menu_build1"))); gtk_menu_item_remove_submenu(GTK_MENU_ITEM(menubar_build_menu));
ui_widget_set_sensitive(widgets.compile_button, FALSE); ui_widget_set_sensitive(widgets.compile_button, FALSE);
ui_widget_set_sensitive(widgets.build_button, FALSE);
ui_widget_set_sensitive(widgets.run_button, FALSE); ui_widget_set_sensitive(widgets.run_button, FALSE);
return; return;
} }
else 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; ft = doc->file_type;
g_return_if_fail(ft != NULL); g_return_if_fail(ft != NULL);
...@@ -1610,7 +1578,7 @@ void build_menu_update(GeanyDocument *doc) ...@@ -1610,7 +1578,7 @@ void build_menu_update(GeanyDocument *doc)
menu_items = build_get_menu_items(ft->id); menu_items = build_get_menu_items(ft->id);
/* Note: don't remove the submenu first because it can now cause an X hang if /* 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(). */ * 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); menu_items->menu);
have_path = (doc->file_name != NULL); have_path = (doc->file_name != NULL);
...@@ -1657,7 +1625,14 @@ void build_menu_update(GeanyDocument *doc) ...@@ -1657,7 +1625,14 @@ void build_menu_update(GeanyDocument *doc)
if (menu_items->item_set_args) if (menu_items->item_set_args)
gtk_widget_set_sensitive(menu_items->item_set_args, can_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.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); ui_widget_set_sensitive(widgets.run_button, can_run || can_stop);
/* show the stop command if a program is running, otherwise show run command */ /* show the stop command if a program is running, otherwise show run command */
...@@ -1811,7 +1786,7 @@ on_build_build_activate (GtkMenuItem *menuitem, ...@@ -1811,7 +1786,7 @@ on_build_build_activate (GtkMenuItem *menuitem,
{ {
GeanyDocument *doc = document_get_current(); GeanyDocument *doc = document_get_current();
if (doc == NULL) if (doc == NULL || doc->file_type == NULL || ! doc->file_type->actions->can_link)
return; return;
if (doc->changed) if (doc->changed)
...@@ -1824,6 +1799,15 @@ on_build_build_activate (GtkMenuItem *menuitem, ...@@ -1824,6 +1799,15 @@ on_build_build_activate (GtkMenuItem *menuitem,
} }
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 static void
on_make_custom_input_response(const gchar *input) on_make_custom_input_response(const gchar *input)
{ {
...@@ -1884,6 +1868,15 @@ on_build_make_activate (GtkMenuItem *menuitem, ...@@ -1884,6 +1868,15 @@ on_build_make_activate (GtkMenuItem *menuitem,
} }
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) static gboolean use_html_builtin(GeanyDocument *doc, GeanyFiletype *ft)
{ {
gboolean use_builtin = FALSE; gboolean use_builtin = FALSE;
...@@ -2013,6 +2006,70 @@ on_build_previous_error (GtkMenuItem *menuitem, ...@@ -2013,6 +2006,70 @@ on_build_previous_error (GtkMenuItem *menuitem,
void build_init() 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.compile_button = toolbar_get_widget_by_name("Compile");
widgets.run_button = toolbar_get_widget_by_name("Run"); 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));
}
...@@ -74,5 +74,8 @@ void build_menu_update(GeanyDocument *doc); ...@@ -74,5 +74,8 @@ void build_menu_update(GeanyDocument *doc);
BuildMenuItems *build_get_menu_items(gint filetype_idx); BuildMenuItems *build_get_menu_items(gint filetype_idx);
void build_toolbutton_build_clicked(GtkAction *action, gpointer user_data);
#endif #endif
...@@ -868,3 +868,348 @@ static const guint8 close_all_inline[] = ...@@ -868,3 +868,348 @@ static const guint8 close_all_inline[] =
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"}; "\0\0\0\0\0\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"};
...@@ -34,6 +34,7 @@ ...@@ -34,6 +34,7 @@
#include "utils.h" #include "utils.h"
#include "dialogs.h" #include "dialogs.h"
#include "document.h" #include "document.h"
#include "build.h"
#include "geanymenubuttonaction.h" #include "geanymenubuttonaction.h"
#include "geanyentryaction.h" #include "geanyentryaction.h"
...@@ -167,6 +168,7 @@ GtkWidget *toolbar_init(void) ...@@ -167,6 +168,7 @@ GtkWidget *toolbar_init(void)
GtkBox *box; GtkBox *box;
GtkAction *action_new; GtkAction *action_new;
GtkAction *action_open; GtkAction *action_open;
GtkAction *action_build;
GtkAction *action_searchentry; GtkAction *action_searchentry;
GtkAction *action_gotoentry; GtkAction *action_gotoentry;
GError *error = NULL; GError *error = NULL;
...@@ -188,6 +190,12 @@ GtkWidget *toolbar_init(void) ...@@ -188,6 +190,12 @@ GtkWidget *toolbar_init(void)
g_signal_connect(action_open, "button-clicked", G_CALLBACK(on_toolbutton_open_clicked), NULL); g_signal_connect(action_open, "button-clicked", G_CALLBACK(on_toolbutton_open_clicked), NULL);
gtk_action_group_add_action(group, action_open); 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( action_searchentry = geany_entry_action_new(
"SearchEntry", _("Search"), _("Find the entered text in the current file"), FALSE); "SearchEntry", _("Search"), _("Find the entered text in the current file"), FALSE);
g_signal_connect(action_searchentry, "entry-activate", g_signal_connect(action_searchentry, "entry-activate",
......
...@@ -821,6 +821,11 @@ GdkPixbuf *ui_new_pixbuf_from_inline(gint img) ...@@ -821,6 +821,11 @@ GdkPixbuf *ui_new_pixbuf_from_inline(gint img)
return gdk_pixbuf_new_from_inline(-1, close_all_inline, FALSE, NULL); return gdk_pixbuf_new_from_inline(-1, close_all_inline, FALSE, NULL);
break; break;
} }
case GEANY_IMAGE_BUILD:
{
return gdk_pixbuf_new_from_inline(-1, build_inline, FALSE, NULL);
break;
}
default: default:
return NULL; return NULL;
} }
...@@ -831,6 +836,8 @@ static GdkPixbuf *ui_new_pixbuf_from_stock(const gchar *stock_id) ...@@ -831,6 +836,8 @@ static GdkPixbuf *ui_new_pixbuf_from_stock(const gchar *stock_id)
{ {
if (utils_str_equal(stock_id, GEANY_STOCK_CLOSE_ALL)) if (utils_str_equal(stock_id, GEANY_STOCK_CLOSE_ALL))
return ui_new_pixbuf_from_inline(GEANY_IMAGE_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)) else if (utils_str_equal(stock_id, GEANY_STOCK_SAVE_ALL))
return ui_new_pixbuf_from_inline(GEANY_IMAGE_SAVE_ALL); return ui_new_pixbuf_from_inline(GEANY_IMAGE_SAVE_ALL);
...@@ -1593,7 +1600,8 @@ static void add_stock_items(void) ...@@ -1593,7 +1600,8 @@ static void add_stock_items(void)
GtkStockItem items[] = GtkStockItem items[] =
{ {
{ GEANY_STOCK_SAVE_ALL, _("Save All"), 0, 0, GETTEXT_PACKAGE }, { 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); len = G_N_ELEMENTS(items);
......
...@@ -140,11 +140,14 @@ GeanyUIEditorFeatures; ...@@ -140,11 +140,14 @@ GeanyUIEditorFeatures;
#define GEANY_STOCK_SAVE_ALL "geany-save-all" #define GEANY_STOCK_SAVE_ALL "geany-save-all"
#define GEANY_STOCK_CLOSE_ALL "geany-close-all" #define GEANY_STOCK_CLOSE_ALL "geany-close-all"
#define GEANY_STOCK_BUILD "geany-build"
enum enum
{ {
GEANY_IMAGE_LOGO, GEANY_IMAGE_LOGO,
GEANY_IMAGE_SAVE_ALL, GEANY_IMAGE_SAVE_ALL,
GEANY_IMAGE_CLOSE_ALL GEANY_IMAGE_CLOSE_ALL,
GEANY_IMAGE_BUILD
}; };
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment