Updated ui, added toolbar, moved editor buttons to the toolbar, added editor menu

This commit is contained in:
Jesse van den Kieboom 2006-03-31 20:15:53 +00:00
parent eba43bed5d
commit b71bb729c9
11 changed files with 287 additions and 139 deletions

View File

@ -1,3 +1,14 @@
2006-31-03 Jesse van den Kieboom <jesse@icecrew.nl>
* ui/gm-ui.xml:
* ui/gm-world-properties.glade:
* gnoemoe/widgets/gm-editor-view.[ch]:
* gnoemoe/widgets/gm-app-view.[ch]:
* gnoemoe/gm-ui.h:
* gnoemoe/dialogs/gm-world-properties-dialog.[ch]:
* gnoemoe/mcp/gm-mcp-icecrew-serverinfo.c:
updated ui, added toolbar, moved editor buttons to the toolbar,
added an editor menu
2006-30-03 Jesse van den Kieboom <jesse@icecrew.nl>
* gnoemoe/widgets/gm-app-view.c: added position saving when hiding
with the notification icon

View File

@ -394,6 +394,23 @@ gm_world_properties_dialog_run_new(GmWorld *world) {
gm_world_properties_dialog_run_priv(world, TRUE);
}
void
gm_world_properties_dialog_run_triggers(GmWorld *world) {
GmWorldPropertiesDialog *dialog;
GtkWidget *widget;
GtkNotebook *notebook;
gm_world_properties_dialog_run_priv(world, FALSE);
dialog = gm_world_properties_dialog_find(world);
widget = gm_world_properties_dialog_widget(dialog, "hbox_triggers");
notebook = GTK_NOTEBOOK(gm_world_properties_dialog_widget(dialog,
"notebook_main"));
gtk_notebook_set_current_page(notebook, gtk_notebook_page_num(notebook,
widget));
}
gchar *
gm_world_properties_dialog_get_charset(gchar *charset) {
gchar *ch;

View File

@ -11,5 +11,6 @@ typedef struct _encoding {
void gm_world_properties_dialog_run(GmWorld *world);
void gm_world_properties_dialog_run_new(GmWorld *world);
void gm_world_properties_dialog_run_triggers(GmWorld *world);
#endif /* __GM_WORLD_PROPERTIES_DIALOG__ */

View File

@ -8,6 +8,7 @@
#include <gtk/gtk.h>
#include "widgets/gm-app-view.h"
#include "gm-support.h"
#include "gm-pixbuf.h"
G_BEGIN_DECLS
@ -41,11 +42,29 @@ static const GtkActionEntry gm_sensitive_menu_entries[] =
N_("About this application"), G_CALLBACK(on_gm_app_view_help_about)}
};
static const GtkActionEntry gm_editor_entries[] =
{
{"Editor", NULL, N_("E_ditor")},
/* Editor toolbar */
{"EditorSave", GTK_STOCK_SAVE, N_("Save"), "<control>S",
N_("Save editor contents"),
G_CALLBACK(on_gm_app_view_editor_save)},
{"EditorSaveClose", GM_STOCK_SAVE_CLOSE, N_("Save and close"), NULL,
N_("Save editor contents and close editor"),
G_CALLBACK(on_gm_app_view_editor_save_close)},
{"EditorParse", GTK_STOCK_EXECUTE, N_("Check code"), "<control><shift>P",
N_("Check code for warnings and errors"),
G_CALLBACK(on_gm_app_view_editor_parse)},
{"EditorClose", GTK_STOCK_CLOSE, N_("Close"), NULL,
N_("Close current editor"),
G_CALLBACK(on_gm_app_view_editor_close)}
};
static const GtkActionEntry gm_menu_entries[] =
{
/* File menu */
{"WorldConnect", GTK_STOCK_NETWORK, N_("Connect"), "<control><shift>C",
N_("Connect or disconnect the current world"),
{"WorldConnect", GTK_STOCK_CONNECT, N_("Connect"), "<control><shift>C",
N_("Connect the current world"),
G_CALLBACK(on_gm_app_view_world_connect)},
{"WorldClose", GTK_STOCK_CLOSE, NULL, NULL,
N_("Close current world"), G_CALLBACK(on_gm_app_view_world_close)},
@ -54,7 +73,7 @@ static const GtkActionEntry gm_menu_entries[] =
G_CALLBACK(on_gm_app_view_world_logs)},
{"WorldInfo", GTK_STOCK_INFO, N_("In_fo"), NULL,
N_("View current world info"), NULL},
/* Edit menu */
{"EditCut", GTK_STOCK_CUT, NULL, "<control>X",
N_("Cut the selection"), G_CALLBACK(on_gm_app_view_edit_cut)},
@ -66,13 +85,21 @@ static const GtkActionEntry gm_menu_entries[] =
N_("Edit the current world"),
G_CALLBACK(on_gm_app_view_edit_world)},
{"EditFind", GTK_STOCK_FIND, NULL, "<control>F",
N_("_Find..."), G_CALLBACK(on_gm_app_view_edit_find)},
N_("Search for text"), G_CALLBACK(on_gm_app_view_edit_find)},
{"EditFindNext", GTK_STOCK_FIND, N_("Find Ne_xt"), "<control>G",
N_("Find next occurence"),
N_("Search forwards for the same text"),
G_CALLBACK(on_gm_app_view_edit_find_next)},
{"EditReplace", GTK_STOCK_FIND_AND_REPLACE, N_("_Replace..."), "<control>R",
N_("Search for and replace text"),
G_CALLBACK(on_gm_app_view_edit_replace)}
G_CALLBACK(on_gm_app_view_edit_replace)},
/* Toolbar */
{"WorldTriggers", GTK_STOCK_INDEX, N_("Triggers"), NULL,
N_("Edit the current world triggers"),
G_CALLBACK(on_gm_app_view_edit_triggers)},
{"WorldProperties", GTK_STOCK_PROPERTIES, N_("Properties"), NULL,
N_("Edit the current world"),
G_CALLBACK(on_gm_app_view_edit_world)}
};
G_END_DECLS

View File

@ -307,11 +307,11 @@ gm_mcp_icecrew_serverinfo_view_set_sensitive(GmMcpIcecrewServerinfoView *view,
GtkAction *action = gm_app_view_action(view->view,
"/MenuBar/WorldMenu/WorldInfoMenu");
if (gtk_action_get_sensitive(action) == sensitive) {
if (gtk_action_get_visible(action) == sensitive) {
return;
}
gtk_action_set_sensitive(action, sensitive);
gtk_action_set_visible(action, sensitive);
if (sensitive) {
g_signal_connect(action, "activate",

View File

@ -27,6 +27,7 @@
#include "dialogs/gm-scripts-dialog.h"
#include "dialogs/gm-preferences-dialog.h"
#include "gm-world-tab.h"
#include "gm-editor-view.h"
#include "mcp/gm-mcp-session.h"
#include "mcp/gm-mcp-package.h"
#include "gm-searchable.h"
@ -119,12 +120,14 @@ struct _GmAppViewPrivate {
GtkActionGroup *sensitive_action_group;
GtkActionGroup *action_group;
GtkActionGroup *worlds_action_group;
GtkActionGroup *editor_action_group;
GHashTable *world_menu_items;
GmTray *tray;
GtkNotebook *notebook;
GmWorld *active_world;
GtkMenuBar *menu;
GtkToolbar *toolbar;
GtkLabel *label_replace;
GtkExpander *expander_replace;
@ -293,10 +296,11 @@ gm_app_view_class_init(GmAppViewClass *klass) {
g_type_class_add_private(object_class, sizeof(GmAppViewPrivate));
}
GtkWidget *
gm_app_view_create_menu(GmAppView *view) {
void
gm_app_view_create_ui(GmAppView *view) {
GError *error = NULL;
GtkActionGroup *action_group;
GtkAction *action;
view->priv->manager = gtk_ui_manager_new();
@ -309,8 +313,13 @@ gm_app_view_create_menu(GmAppView *view) {
if (error) {
gm_debug_msg(DEBUG_ALWAYS, "Could not merge UI file");
g_error_free(error);
g_object_unref(view->priv->manager);
view->priv->manager = NULL;
return;
}
/* World sensitive actions */
action_group = gtk_action_group_new("GmAppViewSensitiveActions");
gtk_action_group_set_translation_domain(action_group,
GETTEXT_PACKAGE);
@ -322,6 +331,7 @@ gm_app_view_create_menu(GmAppView *view) {
gtk_action_group_set_sensitive(action_group, TRUE);
/* World insensitive actions */
action_group = gtk_action_group_new("GmAppViewActions");
gtk_action_group_set_translation_domain(action_group,
GETTEXT_PACKAGE);
@ -333,19 +343,32 @@ gm_app_view_create_menu(GmAppView *view) {
gtk_action_group_set_sensitive(action_group, FALSE);
/* Worlds list action group */
view->priv->worlds_action_group =
gtk_action_group_new("GmAppViewWorldsActions");
gtk_action_group_set_translation_domain(view->priv->worlds_action_group,
GETTEXT_PACKAGE);
gtk_ui_manager_insert_action_group(view->priv->manager,
view->priv->worlds_action_group, 0);
/* Editor action group */
view->priv->editor_action_group =
gtk_action_group_new("GmAppViewEditorActions");
gtk_action_group_set_translation_domain(view->priv->editor_action_group,
GETTEXT_PACKAGE);
gtk_action_group_add_actions(view->priv->editor_action_group,
gm_editor_entries, G_N_ELEMENTS(gm_editor_entries), view);
gtk_ui_manager_insert_action_group(view->priv->manager,
view->priv->editor_action_group, 0);
gtk_action_group_set_visible(view->priv->editor_action_group, FALSE);
#ifndef HAVE_RUBY
gtk_widget_set_sensitive(gtk_ui_manager_get_widget(view->priv->manager,
"/MenuBar/ViewMenu/EditScriptsMenu"), FALSE);
gtk_action_set_sensitive(gm_app_view_action(view,
"/MenuBar/EditMenu/EditScriptsMenu"), FALSE);
#endif
return gtk_ui_manager_get_widget(view->priv->manager, "/MenuBar");
action = gm_app_view_action(view, "/MenuBar/WorldMenu/WorldOpenMenu");
g_object_set(action, "short-label", _("Open"), NULL);
}
GtkWidget *
@ -559,7 +582,8 @@ gm_app_view_create_tray(GmAppView *view) {
static void
gm_app_view_init(GmAppView *view) {
GtkWidget *menu;
GtkWidget *menu = NULL;
GtkWidget *toolbar = NULL;
GtkWidget *search;
GtkWidget *vbox;
GtkWidget *note;
@ -570,10 +594,23 @@ gm_app_view_init(GmAppView *view) {
gtk_widget_show(vbox);
gtk_container_add(GTK_CONTAINER(view), vbox);
menu = gm_app_view_create_menu(view);
gm_app_view_create_ui(view);
gtk_widget_show(menu);
gtk_box_pack_start(GTK_BOX(vbox), menu, FALSE, TRUE, 0);
if (view->priv->manager) {
menu = gtk_ui_manager_get_widget(view->priv->manager, "/MenuBar");
if (menu) {
gtk_widget_show(menu);
gtk_box_pack_start(GTK_BOX(vbox), menu, FALSE, TRUE, 0);
}
toolbar = gtk_ui_manager_get_widget(view->priv->manager, "/ToolBar");
if (toolbar) {
gtk_widget_show(toolbar);
gtk_box_pack_start(GTK_BOX(vbox), toolbar, FALSE, TRUE, 0);
}
}
search = gm_app_view_create_search_box(view);
gtk_box_pack_start(GTK_BOX(vbox), search, FALSE, TRUE, 0);
@ -588,6 +625,7 @@ gm_app_view_init(GmAppView *view) {
gm_app_view_create_keybindings(view);
view->priv->menu = GTK_MENU_BAR(menu);
view->priv->toolbar = GTK_TOOLBAR(toolbar);
view->priv->notebook = GTK_NOTEBOOK(note);
gtk_window_set_title(GTK_WINDOW(view), "GnoeMoe");
@ -711,7 +749,7 @@ gm_app_view_set_sensitivity(GmAppView *view, gboolean sens) {
gtk_action_group_set_sensitive(view->priv->action_group, sens);
if (sens == TRUE) {
gtk_action_set_sensitive(gtk_action_group_get_action(
gtk_action_set_visible(gtk_action_group_get_action(
view->priv->action_group, "WorldInfo"), FALSE);
}
@ -771,26 +809,20 @@ gm_app_view_action(GmAppView *view, gchar const *path) {
return action;
}
void
gm_app_view_update_connect_button(GmAppView *view, gboolean connected) {
GtkImageMenuItem *img = GTK_IMAGE_MENU_ITEM(
gtk_ui_manager_get_widget(view->priv->manager,
"/MenuBar/WorldMenu/WorldConnectMenu"));
GtkLabel *label = GTK_LABEL(gm_container_item(GTK_CONTAINER(img),
GTK_TYPE_LABEL));
GtkWidget *im;
GtkAction *action = gm_app_view_action(view,
"/MenuBar/WorldMenu/WorldConnectMenu");
if (!connected) {
im = gtk_image_new_from_stock("gtk-network", GTK_ICON_SIZE_MENU);
gtk_label_set_text(label, _("Connect"));
g_object_set(action, "stock-id", GTK_STOCK_CONNECT, NULL);
g_object_set(action, "label", _("Connect"), NULL);
g_object_set(action, "tooltip", _("Connect the current world"), NULL);
} else {
im = gtk_image_new_from_stock("gtk-stop", GTK_ICON_SIZE_MENU);
gtk_label_set_text(label, _("Disconnect"));
g_object_set(action, "stock-id", GTK_STOCK_DISCONNECT, NULL);
g_object_set(action, "label", _("Disconnect"), NULL);
g_object_set(action, "tooltip", _("Disconnect the current world"), NULL);
}
gtk_image_menu_item_set_image(img, im);
gtk_widget_show(im);
}
void
@ -1491,8 +1523,9 @@ on_gm_app_view_notebook_button_release(GtkNotebook *notebook,
void
on_gm_app_view_world_view_notebook_switch_page(GtkNotebook *notebook,
GtkNotebookPage * page, guint page_num, GmAppView *view) {
GtkNotebookPage * p, guint page_num, GmAppView *view) {
GmWorldView *world_view = GM_WORLD_VIEW(notebook);
GtkWidget *page;
gboolean direction;
gboolean can_replace;
gboolean can_find;
@ -1520,7 +1553,7 @@ on_gm_app_view_world_view_notebook_switch_page(GtkNotebook *notebook,
FALSE);
} else {
gtk_widget_set_sensitive(GTK_WIDGET(view->priv->expander_replace),
TRUE);
TRUE);
}
if (page_num == 0) {
@ -1535,6 +1568,18 @@ on_gm_app_view_world_view_notebook_switch_page(GtkNotebook *notebook,
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(
view->priv->check_button_search_direction), direction);
view->priv->ignore_toggling = FALSE;
/* Enable/disable editor toolbar */
page = gtk_notebook_get_nth_page(GTK_NOTEBOOK(world_view), page_num);
gtk_action_group_set_visible(view->priv->editor_action_group,
GM_IS_EDITOR_VIEW(page));
if (GM_IS_EDITOR_VIEW(page)) {
gtk_action_set_sensitive(gm_app_view_action(view,
"/ToolBar/EditorParseTool"), gm_editor_is_code(
gm_editor_view_editor(GM_EDITOR_VIEW(page))));
}
}
void
@ -1674,6 +1719,46 @@ on_gm_app_view_edit_scripts(GtkMenuItem * menuitem, GmAppView *view) {
#endif
}
void
on_gm_app_view_edit_triggers(GtkAction *action, GmAppView *view) {
GmWorld *active = gm_app_view_active_world(view);
gm_world_properties_dialog_run_triggers(active);
}
GmEditorView *
gm_app_view_active_editor_view(GmAppView *view) {
GmWorldView *world_view = gm_app_view_active_world_view(view);
gint page = gtk_notebook_get_current_page(GTK_NOTEBOOK(world_view));
return GM_EDITOR_VIEW(gtk_notebook_get_nth_page(GTK_NOTEBOOK(world_view),
page));
}
void
on_gm_app_view_editor_save(GtkAction *action, GmAppView *view) {
gm_editor_view_save(gm_app_view_active_editor_view(view));
}
void
on_gm_app_view_editor_save_close(GtkAction *action, GmAppView *view) {
GmEditorView *editor_view = gm_app_view_active_editor_view(view);
gm_editor_view_save(editor_view);
gm_editor_close(gm_editor_view_editor(editor_view));
}
void
on_gm_app_view_editor_parse(GtkAction *action, GmAppView *view) {
gm_editor_view_check_syntax(gm_app_view_active_editor_view(view));
}
void
on_gm_app_view_editor_close(GtkAction *action, GmAppView *view) {
gm_editor_close(gm_editor_view_editor(
gm_app_view_active_editor_view(view)));
}
void
on_gm_app_view_world_logs(GtkMenuItem *menuitem, GmAppView *view) {
GtkDialog *dlg;

View File

@ -61,6 +61,12 @@ void on_gm_app_view_world_logs(GtkMenuItem * menuitem, GmAppView *view);
void on_gm_app_view_world_close(GtkMenuItem * menuitem, GmAppView *view);
void on_gm_app_view_world_quit(GtkMenuItem * menuitem, GmAppView *view);
void on_gm_app_view_editor_save(GtkAction *action, GmAppView *view);
void on_gm_app_view_editor_save_close(GtkAction *action, GmAppView *view);
void on_gm_app_view_editor_parse(GtkAction *action, GmAppView *view);
void on_gm_app_view_editor_close(GtkAction *action, GmAppView *view);
void on_gm_app_view_edit_triggers(GtkAction *action, GmAppView *view);
void on_gm_app_view_edit_cut(GtkMenuItem * menuitem, GmAppView *view);
void on_gm_app_view_edit_copy(GtkMenuItem * menuitem, GmAppView *view);
void on_gm_app_view_edit_paste(GtkMenuItem * menuitem, GmAppView *view);

View File

@ -24,10 +24,10 @@
struct _GmEditorViewPrivate {
GmWorld *world;
GmEditor *editor;
GtkWidget *tool_execute;
GtkExpander *expander;
GtkWidget *message_area;
GtkWidget *error_area;
GtkWidget *error_label;
GtkWidget *warning_label;
GtkWidget *error_frame;
@ -204,8 +204,6 @@ gm_editor_view_create_source_view(GmEditorView *view) {
} else {
gtk_source_buffer_set_highlight(GTK_SOURCE_BUFFER(buffer), FALSE);
gtk_source_buffer_set_check_brackets(GTK_SOURCE_BUFFER(buffer), FALSE);
gtk_widget_set_sensitive(view->priv->tool_execute, FALSE);
}
gtk_text_buffer_create_tag(buffer, "gm_error", "underline",
@ -248,17 +246,22 @@ gm_editor_view_message_area_style_set(GtkWidget *widget, GtkStyle *prev,
gtk_widget_ensure_style(tooltips->tip_window);
style = gtk_widget_get_style(tooltips->tip_window);
style->bg[GTK_STATE_PRELIGHT] = style->bg[GTK_STATE_NORMAL];
view->priv->set_style = TRUE;
gtk_widget_set_style(widget, style);
gtk_widget_set_style(GTK_WIDGET(view->priv->expander), style);
view->priv->set_style = FALSE;
g_object_unref(tooltips);
}
static void
gm_editor_view_create_message_area(GmEditorView *view) {
GtkWidget *message_area = gtk_vbox_new(FALSE, 6);
GtkWidget *message_area = gtk_vbox_new(FALSE, 0);
GtkWidget *align;
GtkWidget *lbl;
GtkWidget *expander;
gtk_container_set_border_width(GTK_CONTAINER(message_area), 10);
g_signal_connect(message_area, "expose_event",
@ -268,6 +271,24 @@ gm_editor_view_create_message_area(GmEditorView *view) {
view->priv->message_area = message_area;
align = gtk_alignment_new(0.0, 1.0, 0.0, 0.0);
expander = gtk_expander_new(NULL);
g_signal_connect(expander, "notify::expanded",
G_CALLBACK(on_gm_editor_view_expander), view);
gtk_container_add(GTK_CONTAINER(align), expander);
gtk_box_pack_start(GTK_BOX(message_area), align, FALSE, FALSE, 0);
view->priv->expander = GTK_EXPANDER(expander);
g_signal_connect(expander, "style-set",
G_CALLBACK(gm_editor_view_message_area_style_set), view);
gtk_widget_show(expander);
gtk_widget_show(align);
view->priv->error_area = gtk_vbox_new(FALSE, 0);
gtk_box_pack_start(GTK_BOX(message_area), view->priv->error_area, TRUE,
TRUE, 0);
lbl = gtk_label_new(NULL);
gtk_label_set_markup(GTK_LABEL(lbl), _("<b>Errors</b>"));
view->priv->error_frame = gtk_frame_new(NULL);
@ -283,8 +304,8 @@ gm_editor_view_create_message_area(GmEditorView *view) {
gtk_container_add(GTK_CONTAINER(align), view->priv->error_label);
gtk_container_add(GTK_CONTAINER(view->priv->error_frame), align);
gtk_box_pack_start(GTK_BOX(message_area), view->priv->error_frame, TRUE,
TRUE, 0);
gtk_box_pack_start(GTK_BOX(view->priv->error_area),
view->priv->error_frame, TRUE, TRUE, 0);
lbl = gtk_label_new(NULL);
gtk_label_set_markup(GTK_LABEL(lbl), _("<b>Warnings</b>"));
@ -300,61 +321,17 @@ gm_editor_view_create_message_area(GmEditorView *view) {
gtk_container_add(GTK_CONTAINER(align), view->priv->warning_label);
gtk_container_add(GTK_CONTAINER(view->priv->warning_frame), align);
gtk_box_pack_start(GTK_BOX(message_area), view->priv->warning_frame, TRUE, TRUE, 0);
gtk_box_pack_start(GTK_BOX(view->priv->error_area),
view->priv->warning_frame, TRUE, TRUE, 0);
}
static void
gm_editor_view_init(GmEditorView *obj) {
GtkWidget *toolbar, *item, *expander, *tmp;
obj->priv = GM_EDITOR_VIEW_GET_PRIVATE(obj);
gtk_box_set_spacing(GTK_BOX(obj), 0);
gtk_box_set_homogeneous(GTK_BOX(obj), FALSE);
toolbar = gtk_toolbar_new();
item = GTK_WIDGET(gtk_tool_button_new_from_stock(GTK_STOCK_SAVE));
g_signal_connect(item, "clicked",
G_CALLBACK(on_gm_editor_view_save_clicked), obj);
gtk_container_add(GTK_CONTAINER(toolbar), item);
item = GTK_WIDGET(gtk_tool_button_new(gtk_image_new_from_pixbuf(
gm_pixbuf_get("saveclose.xpm")), _("Save&close")));
g_signal_connect(item, "clicked",
G_CALLBACK(on_gm_editor_view_saveclose_clicked), obj);
gtk_container_add(GTK_CONTAINER(toolbar), item);
item = GTK_WIDGET(gtk_tool_button_new_from_stock(GTK_STOCK_CLOSE));
g_signal_connect(item, "clicked",
G_CALLBACK(on_gm_editor_view_close_clicked), obj);
gtk_container_add(GTK_CONTAINER(toolbar), item);
item = GTK_WIDGET(gtk_tool_button_new_from_stock(GTK_STOCK_EXECUTE));
g_signal_connect(item, "clicked",
G_CALLBACK(on_gm_editor_view_execute_clicked), obj);
gtk_container_add(GTK_CONTAINER(toolbar), item);
obj->priv->tool_execute = item;
item = GTK_WIDGET(gtk_separator_tool_item_new());
gtk_container_add(GTK_CONTAINER(toolbar), item);
item = GTK_WIDGET(gtk_tool_item_new());
tmp = gtk_alignment_new(0.0, 1.0, 0.0, 0.0);
expander = gtk_expander_new(NULL);
g_signal_connect(expander, "notify::expanded",
G_CALLBACK(on_gm_editor_view_expander), obj);
gtk_container_add(GTK_CONTAINER(tmp), expander);
gtk_container_add(GTK_CONTAINER(item), tmp);
gtk_container_add(GTK_CONTAINER(toolbar), item);
gtk_box_pack_start(GTK_BOX(obj), toolbar, FALSE, FALSE, 0);
gtk_widget_show_all(toolbar);
gtk_widget_hide(expander);
obj->priv->expander = GTK_EXPANDER(expander);
gm_editor_view_create_message_area(obj);
gtk_box_pack_start(GTK_BOX(obj), obj->priv->message_area, FALSE, FALSE, 0);
}
@ -410,7 +387,7 @@ gm_editor_view_save(GmEditorView *view) {
gboolean
gm_editor_view_no_errors(GmEditorView *view) {
gtk_widget_hide(GTK_WIDGET(view->priv->expander));
gtk_widget_hide(view->priv->message_area);
return FALSE;
}
@ -553,25 +530,29 @@ gm_editor_view_parse(GmEditorView *view) {
gtk_widget_set_sensitive(GTK_WIDGET(view->priv->expander), TRUE);
gtk_expander_set_label(view->priv->expander, lbl->str);
g_string_free(lbl, TRUE);
gtk_widget_show(GTK_WIDGET(view->priv->expander));
gtk_widget_show(view->priv->message_area);
if (view->priv->was_expanded &&
!gtk_expander_get_expanded(view->priv->expander)) {
view->priv->expanding = TRUE;
gtk_expander_set_expanded(view->priv->expander, TRUE);
view->priv->expanding = FALSE;
}
gtk_widget_queue_draw(view->priv->message_area);
} else {
gtk_expander_set_label(view->priv->expander, _("There are no errors"));
view->priv->expanding = TRUE;
gtk_expander_set_expanded(view->priv->expander, FALSE);
view->priv->expanding = FALSE;
gtk_widget_set_sensitive(GTK_WIDGET(view->priv->expander), FALSE);
gtk_widget_hide(view->priv->message_area);
gtk_widget_hide(view->priv->error_area);
view->priv->hide_error_handler = g_timeout_add(3000,
(GSourceFunc)gm_editor_view_no_errors, view);
gtk_widget_queue_draw(view->priv->message_area);
}
gm_parser_result_free(result);
@ -581,6 +562,23 @@ gm_editor_view_parse(GmEditorView *view) {
return ret;
}
void
gm_editor_view_check_syntax(GmEditorView *view) {
int ret = gm_editor_view_parse(view);
if (ret == SYNTAX_OK) {
gtk_expander_set_expanded(view->priv->expander, FALSE);
gtk_widget_hide(view->priv->message_area);
gm_info_dialog(_("No errors are found"),
GTK_WINDOW(gm_find_parent(GTK_WIDGET(view), GTK_TYPE_WINDOW)));
} else {
gtk_expander_set_expanded(view->priv->expander, TRUE);
gtk_widget_show(view->priv->message_area);
gtk_widget_show(view->priv->error_area);
gtk_widget_queue_draw(view->priv->message_area);
}
}
/* Callbacks */
void
@ -603,41 +601,6 @@ on_gm_editor_view_editor_saved(GmEditor *editor, GmEditorView *view) {
view->priv->source_view)), FALSE);
}
void
on_gm_editor_view_save_clicked(GtkToolButton *button,
GmEditorView *view) {
gm_editor_view_save(view);
}
void
on_gm_editor_view_saveclose_clicked(GtkToolButton *button,
GmEditorView *view) {
gm_editor_view_save(view);
gm_editor_close(view->priv->editor);
}
void
on_gm_editor_view_close_clicked(GtkToolButton *button,
GmEditorView *view) {
gm_editor_close(view->priv->editor);
}
void
on_gm_editor_view_execute_clicked(GtkToolButton *button,
GmEditorView *view) {
int ret = gm_editor_view_parse(view);
if (ret == SYNTAX_OK) {
gtk_expander_set_expanded(view->priv->expander, FALSE);
gtk_widget_hide(view->priv->message_area);
gm_info_dialog(_("No errors are found"), NULL);
} else {
gtk_expander_set_expanded(view->priv->expander, TRUE);
gtk_widget_show_all(view->priv->message_area);
}
}
void
on_gm_editor_view_modified_changed(GtkTextBuffer *buffer,
GmEditorView *view) {
@ -674,12 +637,14 @@ on_gm_editor_view_expander(GObject *object, GParamSpec *param_spec,
view->priv->was_expanded = TRUE;
}
gtk_widget_show(view->priv->message_area);
gtk_widget_show(view->priv->error_area);
} else {
if (!view->priv->expanding) {
view->priv->was_expanded = FALSE;
}
gtk_widget_hide(view->priv->message_area);
gtk_widget_hide(view->priv->error_area);
}
gtk_widget_queue_draw(view->priv->message_area);
}

View File

@ -55,6 +55,8 @@ struct _GmEditorViewClass {
GType gm_editor_view_get_type(void) G_GNUC_CONST;
GmEditorView *gm_editor_view_new(GmWorld *world, GmEditor *editor);
GmEditor *gm_editor_view_editor(GmEditorView *view);
void gm_editor_view_save(GmEditorView *view);
void gm_editor_view_check_syntax(GmEditorView *view);
G_END_DECLS
#endif /* __GM_EDITOR_VIEW_H__ */

View File

@ -1,5 +1,4 @@
<ui>
<menubar name="MenuBar">
<menu name="WorldMenu" action="World">
<menuitem name="WorldNewMenu" action="WorldNew"/>
@ -13,9 +12,9 @@
<separator/>
<menuitem name="WorldCloseMenu" action="WorldClose"/>
<menuitem name="WorldQuitMenu" action="WorldQuit"/>
</menu>
</menu>
<menu name="EditMenu" action="Edit">
<menu name="EditMenu" action="Edit">
<menuitem name="EditCutMenu" action="EditCut"/>
<menuitem name="EditCopyMenu" action="EditCopy"/>
<menuitem name="EditPasteMenu" action="EditPaste"/>
@ -30,10 +29,45 @@
<menuitem name="EditScriptsMenu" action="EditScripts"/>
<separator/>
<menuitem name="EditPreferencesMenu" action="EditPreferences"/>
</menu>
<menu name="HelpMenu" action="Help">
<menuitem name="HelpAboutMenu" action="HelpAbout"/>
</menu>
</menubar>
</menu>
<menu name="EditorMenu" action="Editor">
<menuitem name="EditorSaveMenu" action="EditorSave"/>
<menuitem name="EditorSaveCloseMenu" action="EditorSaveClose"/>
<menuitem name="EditorParseMenu" action="EditorParse"/>
<separator/>
<menuitem name="EditorCloseMenu" action="EditorClose"/>
</menu>
<menu name="HelpMenu" action="Help">
<menuitem name="HelpAboutMenu" action="HelpAbout"/>
</menu>
</menubar>
<toolbar name="ToolBar">
<separator/>
<placeholder name="ToolOps_1"/>
<toolitem name="WorldOpenTool" action="WorldOpen"/>
<separator/>
<toolitem name="EditorSaveTool" action="EditorSave"/>
<toolitem name="EditorSaveCloseTool" action="EditorSaveClose"/>
<toolitem name="EditorParseTool" action="EditorParse"/>
<separator/>
<placeholder name="ToolOps_2"/>
<separator/>
<toolitem name="WorldConnectTool" action="WorldConnect"/>
<toolitem name="WorldPropertiesTool" action="WorldProperties"/>
<toolitem name="WorldLogsTool" action="WorldLogs"/>
<toolitem name="WorldTriggersTool" action="WorldTriggers"/>
<separator/>
<placeholder name="ToolOps_3"/>
<separator/>
<toolitem name="EditCutTool" action="EditCut"/>
<toolitem name="EditCopyTool" action="EditCopy"/>
<toolitem name="EditPasteTool" action="EditPaste"/>
<separator/>
<placeholder name="ToolOps_3"/>
<separator/>
<toolitem name="EditFindTool" action="EditFind"/>
<toolitem name="EditReplaceTool" action="EditReplace"/>
<separator/>
<placeholder name="ToolOps_4"/>
</toolbar>
</ui>

View File

@ -731,7 +731,7 @@
</child>
<child>
<widget class="GtkHBox" id="hbox1">
<widget class="GtkHBox" id="hbox_triggers">
<property name="border_width">6</property>
<property name="visible">True</property>
<property name="homogeneous">False</property>