From e8cb9b654edff98a0ccdc2aa2de519ee1eaee343 Mon Sep 17 00:00:00 2001 From: Vasily_Makarov Date: Tue, 18 Oct 2011 23:53:36 +0400 Subject: Edit interface code. Add GtkBuilder interface file --- saedit/interface.h | 251 +++-------------------- saedit/interface.h.old | 310 +++++++++++++++++++++++++++++ saedit/interface.ui | 531 +++++++++++++++++++++++++++++++++++++++++++++++++ saedit/main.c | 10 +- saedit/main.h | 69 ++++--- 5 files changed, 915 insertions(+), 256 deletions(-) create mode 100644 saedit/interface.h.old create mode 100644 saedit/interface.ui diff --git a/saedit/interface.h b/saedit/interface.h index e0e5519..c2a4e2f 100644 --- a/saedit/interface.h +++ b/saedit/interface.h @@ -9,6 +9,8 @@ | | \*=======================================*/ +#include "main.h" + GtkWidget *reload_menu_item = NULL; void find_menu_item_activate_callback(GtkWidget *menuitem, gpointer user_data) { @@ -58,240 +60,45 @@ void file_new() { } void set_up_interface() { - GtkWidget *button = NULL; - GtkWidget *hbox = NULL; - GtkWidget *vbox = NULL; - GtkWidget *vbbox = NULL; - GtkWidget *text = NULL; - GtkWidget *label = NULL; - GtkWidget *menubar = NULL; - GtkWidget *menuitem = NULL; - GtkWidget *menu = NULL; - GtkWidget *vpaned = NULL; - GtkWidget *scrolled_window = NULL; - GtkWidget *fcdialog = NULL; - - GtkSourceLanguageManager *langman = gtk_source_language_manager_get_default(); - - source_buffer = gtk_source_buffer_new_with_language(gtk_source_language_manager_get_language(langman, "xml")); - text = gtk_source_view_new_with_buffer(source_buffer); - source_view = text; - - win = gtk_window_new(GTK_WINDOW_TOPLEVEL); - gtk_window_set_title(GTK_WINDOW(win), "Sprite Animation Editor"); - gtk_window_set_position(GTK_WINDOW(win), GTK_WIN_POS_CENTER); - gtk_window_set_icon(GTK_WINDOW(win), icon); - gtk_widget_realize(win); - g_signal_connect(win, "destroy", G_CALLBACK(save_config_and_quit), NULL); - gtk_widget_set_size_request(win, MIN_WIDTH, MIN_HEIGHT); - GtkAccelGroup *ag = gtk_accel_group_new(); - gtk_window_add_accel_group(win, ag); - - fcdialog = gtk_file_chooser_dialog_new(_("Open file"), win, GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL); - - vbox = gtk_vbox_new(FALSE, 0); - gtk_container_add(GTK_CONTAINER(win), vbox); - - //Menubar setup - menubar = gtk_menu_bar_new(); - gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, TRUE, 0); - - //File menu - menu = gtk_menu_new(); - gtk_menu_set_accel_group(menu, ag); - - menuitem = gtk_menu_item_new_with_label(_("New")); - g_signal_connect(menuitem, "activate", G_CALLBACK(file_new), NULL); - gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); - - gtk_menu_item_set_accel_path(GTK_MENU_ITEM(menuitem), "/File/New"); - gtk_accel_map_change_entry("/File/New", gdk_keyval_from_name("N"), GDK_CONTROL_MASK, TRUE); - - menuitem = gtk_menu_item_new_with_label(_("Open...")); - g_signal_connect(menuitem, "activate", open_menu_item_activate, fcdialog); - gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); - - gtk_menu_item_set_accel_path(GTK_MENU_ITEM(menuitem), "/File/Open"); - gtk_accel_map_change_entry("/File/Open", gdk_keyval_from_name("O"), GDK_CONTROL_MASK, TRUE); - - menuitem = gtk_menu_item_new_with_label(_("Reload")); - gtk_widget_set_sensitive(menuitem, FALSE); - g_signal_connect(menuitem, "activate", G_CALLBACK(open_xml_file), source_buffer); - gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); - - gtk_menu_item_set_accel_path(GTK_MENU_ITEM(menuitem), "/File/Reload"); - gtk_accel_map_change_entry("/File/Reload", gdk_keyval_from_name("R"), GDK_CONTROL_MASK, TRUE); - - reload_menu_item = menuitem; - - gtk_menu_shell_append(GTK_MENU_SHELL(menu), gtk_separator_menu_item_new()); - - menuitem = gtk_menu_item_new_with_label(_("Save")); - g_signal_connect(menuitem, "activate", G_CALLBACK(save_menu_item_activate_callback), NULL); - gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); - - gtk_menu_item_set_accel_path(GTK_MENU_ITEM(menuitem), "/File/Save"); - gtk_accel_map_change_entry("/File/Save", gdk_keyval_from_name("S"), GDK_CONTROL_MASK, TRUE); - - menuitem = gtk_menu_item_new_with_label(_("Save as...")); - g_signal_connect(menuitem, "activate", G_CALLBACK(save_dialog_show), NULL); - gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); - - gtk_menu_item_set_accel_path(GTK_MENU_ITEM(menuitem), "/File/SaveAs"); - gtk_accel_map_change_entry("/File/SaveAs", gdk_keyval_from_name("S"), GDK_CONTROL_MASK + GDK_SHIFT_MASK, TRUE); - - menuitem = gtk_menu_item_new_with_label(_("File")); - gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), menu); - gtk_menu_shell_append(GTK_MENU_SHELL(menubar), menuitem); - - //Search menu - menu = gtk_menu_new(); - gtk_menu_set_accel_group(menu, ag); - - menuitem = gtk_menu_item_new_with_label(_("Find...")); - g_signal_connect(menuitem, "activate", find_menu_item_activate_callback, NULL); - gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); - - gtk_menu_item_set_accel_path(GTK_MENU_ITEM(menuitem), "/Search/Find"); - gtk_accel_map_change_entry("/Search/Find", gdk_keyval_from_name("F"), GDK_CONTROL_MASK, TRUE); - menuitem = gtk_menu_item_new_with_label(_("Find next")); - g_signal_connect(menuitem, "activate", search_find_next, NULL); - gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); + GtkBuilder *builder = gtk_builder_new(); + gtk_builder_add_from_file(builder, "interface.ui", NULL); + gtk_builder_connect_signals(builder, NULL); - gtk_menu_item_set_accel_path(GTK_MENU_ITEM(menuitem), "/Search/FindNext"); - gtk_accel_map_change_entry("/Search/FindNext", gdk_keyval_from_name("F3"), 0, TRUE); + win = GTK_WIDGET(gtk_builder_get_object(builder, "win_main")); - menuitem = gtk_menu_item_new_with_label(_("Search")); - gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), menu); - gtk_menu_shell_append(GTK_MENU_SHELL(menubar), menuitem); - - //View menu - menu = gtk_menu_new(); - gtk_menu_set_accel_group(menu, ag); - - menuitem = gtk_check_menu_item_new_with_label(_("Show grid")); - gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); - - g_signal_connect(menuitem, "toggled", show_grid_menu_item_toggled, NULL); - - gtk_menu_item_set_accel_path(menuitem, "/View/ShowGrid"); - gtk_accel_map_change_entry("/View/ShowGrid", gdk_keyval_from_name("G"), GDK_CONTROL_MASK, TRUE); - - show_grid_menu_item = menuitem; - - menuitem = gtk_menu_item_new_with_label(_("Imageset preview")); - gtk_widget_set_sensitive(menuitem, FALSE); - g_signal_connect(G_OBJECT(menuitem), "activate", G_CALLBACK(show_imageset_dialog), NULL); - gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); - - gtk_menu_item_set_accel_path(menuitem, "/View/ImagesetPreview"); - gtk_accel_map_change_entry("/View/ImagesetPreview", gdk_keyval_from_name("I"), GDK_CONTROL_MASK, TRUE); - - imageset_preview_menu_item = menuitem; - - menuitem = gtk_menu_item_new_with_label(_("View")); - gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), menu); - gtk_menu_shell_append(GTK_MENU_SHELL(menubar), menuitem); - - //Help menu - menu = gtk_menu_new(); - menuitem = gtk_menu_item_new_with_label(_("About")); - g_signal_connect(menuitem, "activate", show_about_dialog, NULL); - gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); - - menuitem = gtk_menu_item_new_with_label(_("Help")); - gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), menu); - gtk_menu_shell_append(GTK_MENU_SHELL(menubar), menuitem); - - hbox = gtk_hbox_new(FALSE, 0); - gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0); - - //Left part setup - vbbox = gtk_vbutton_box_new(); - gtk_button_box_set_layout(GTK_BUTTON_BOX(vbbox), GTK_BUTTONBOX_START); - gtk_button_box_set_child_size(GTK_BUTTON_BOX(vbbox), 180, 0); - gtk_box_pack_start(GTK_BOX(hbox), vbbox, FALSE, TRUE, 0); - - label = gtk_label_new(""); - gtk_label_set_markup(GTK_LABEL(label), markup_bold(_("Clientdata folder"))); - gtk_box_pack_start(GTK_BOX(vbbox), label, TRUE, TRUE, 0); - - data_folder_chooser_button = gtk_file_chooser_button_new(_("Clientdata folder"), 0); - gtk_box_pack_start(GTK_BOX(vbbox), data_folder_chooser_button, TRUE, TRUE, 0); - gtk_file_chooser_set_action(GTK_FILE_CHOOSER(data_folder_chooser_button), GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER); - g_signal_connect(data_folder_chooser_button, "selection-changed", G_CALLBACK(data_folder_set_callback), NULL); - - label = gtk_label_new(""); - gtk_label_set_markup(GTK_LABEL(label), markup_bold(_("XML source file"))); - gtk_box_pack_start(GTK_BOX(vbbox), label, TRUE, TRUE, 0); - - xml_file_chooser_button = gtk_file_chooser_button_new_with_dialog(fcdialog); - gtk_box_pack_start(GTK_BOX(vbbox), xml_file_chooser_button, TRUE, TRUE, 0); - g_signal_connect(xml_file_chooser_button, "file-set", G_CALLBACK(open_xml_file), source_buffer); - - xml_file_open_button = gtk_button_new_from_stock(GTK_STOCK_OPEN); - gtk_widget_set_sensitive(xml_file_open_button, FALSE); - gtk_box_pack_start(GTK_BOX(vbbox), xml_file_open_button, TRUE, TRUE, 0); - g_signal_connect(xml_file_open_button, "clicked", G_CALLBACK(open_xml_file), source_buffer); - - xml_file_save_button = gtk_button_new_from_stock(GTK_STOCK_SAVE); - gtk_widget_set_sensitive(xml_file_save_button, FALSE); - gtk_box_pack_start(GTK_BOX(vbbox), xml_file_save_button, TRUE, TRUE, 0); - g_signal_connect(xml_file_save_button, "clicked", G_CALLBACK(xml_file_save_button_callback), NULL); - gtk_widget_set_accel_path(xml_file_save_button, "/SaveXMLBuffer", ag); - //gtk_accel_map_change_entry("/SaveXMLBuffer", gdk_keyval_from_name("S"), GDK_CONTROL_MASK, TRUE); - - button = gtk_button_new_with_label(_("Parse XML buffer")); - gtk_box_pack_start(GTK_BOX(vbbox), button, TRUE, TRUE, 0); - g_signal_connect(button, "clicked", G_CALLBACK(parse_xml_buffer), source_buffer); - gtk_widget_set_accel_path(button, "/ParseXMLBuffer", ag); - gtk_accel_map_change_entry("/ParseXMLBuffer", gdk_keyval_from_name("P"), GDK_CONTROL_MASK, TRUE); - - label = gtk_label_new(""); - gtk_label_set_markup(GTK_LABEL(label), markup_bold(_("Imagesets"))); - gtk_box_pack_start(GTK_BOX(vbbox), label, TRUE, TRUE, 0); - - gen_sae_info->imagesets_combo_box = gtk_combo_box_new_text(); - g_signal_connect(gen_sae_info->imagesets_combo_box, "changed", G_CALLBACK(imagesets_combo_box_changed_callback), NULL); - gtk_box_pack_start(GTK_BOX(vbbox), gen_sae_info->imagesets_combo_box, TRUE, TRUE, 0); - - label = gtk_label_new(""); - gtk_label_set_markup(GTK_LABEL(label), markup_bold(_("Actions"))); - gtk_box_pack_start(GTK_BOX(vbbox), label, TRUE, TRUE, 0); + //Setup GtkSourceView + GtkSourceLanguageManager *langman = gtk_source_language_manager_get_default(); + source_buffer = gtk_source_buffer_new_with_language(gtk_source_language_manager_get_language(langman, "xml")); - gen_sae_info->actions_combo_box = gtk_combo_box_new_text(); - g_signal_connect(gen_sae_info->actions_combo_box, "changed", G_CALLBACK(actions_combo_box_changed_callback), NULL); - gtk_box_pack_start(GTK_BOX(vbbox), gen_sae_info->actions_combo_box, TRUE, TRUE, 0); + source_view = GTK_WIDGET(gtk_builder_get_object(builder, "source_view")); + gtk_text_view_set_buffer(GTK_TEXT_VIEW(source_view), GTK_TEXT_BUFFER(source_buffer)); - label = gtk_label_new(""); - gtk_label_set_markup(GTK_LABEL(label), markup_bold(_("Directions"))); - gtk_box_pack_start(GTK_BOX(vbbox), label, TRUE, TRUE, 0); + //Setup ScrolledWindow + GtkWidget *scrolled_window = NULL; + scrolled_window = GTK_WIDGET(gtk_builder_get_object(builder, "scrolledwindow1")); + gtk_scrolled_window_set_hadjustment(GTK_SCROLLED_WINDOW(scrolled_window), + gtk_text_view_get_hadjustment(GTK_TEXT_VIEW(source_view))); + gtk_scrolled_window_set_vadjustment(GTK_SCROLLED_WINDOW(scrolled_window), + gtk_text_view_get_vadjustment(GTK_TEXT_VIEW(source_view))); - gen_sae_info->animations_combo_box = gtk_combo_box_new_text(); - g_signal_connect(gen_sae_info->animations_combo_box, "changed", G_CALLBACK(animations_combo_box_changed_callback), NULL); - gtk_box_pack_start(GTK_BOX(vbbox), gen_sae_info->animations_combo_box, TRUE, TRUE, 0); + //Setup GtkDrawingArea + darea = GTK_WIDGET(gtk_builder_get_object(builder, "darea1")); - //Right part setup - vpaned = gtk_vpaned_new(); - gtk_box_pack_end(GTK_BOX(hbox), vpaned, TRUE, TRUE, 0); - darea = gtk_drawing_area_new(); - gtk_paned_pack1(GTK_PANED(vpaned), darea, FALSE, FALSE); - gtk_widget_set_size_request(darea, -1, 120); - g_signal_connect(darea, "expose-event", G_CALLBACK(darea_expose_event), gen_sae_info); + reload_menu_item = GTK_WIDGET(gtk_builder_get_object(builder, "menuitem6")); + show_grid_menu_item = GTK_WIDGET(gtk_builder_get_object(builder, "menuitem11")); + imageset_preview_menu_item = GTK_WIDGET(gtk_builder_get_object(builder, "menuitem12")); - source_view = text; - gtk_source_view_set_show_line_numbers(GTK_SOURCE_VIEW(text), TRUE); + data_folder_chooser_button = GTK_WIDGET(gtk_builder_get_object(builder, "datafcbutton")); + xml_file_chooser_button = GTK_WIDGET(gtk_builder_get_object(builder, "xmlfcbutton")); - scrolled_window = gtk_scrolled_window_new(gtk_text_view_get_hadjustment(text), gtk_text_view_get_vadjustment(text)); - gtk_paned_pack2(GTK_PANED(vpaned), scrolled_window, TRUE, FALSE); - gtk_widget_set_size_request(scrolled_window, -1, 50); + gen_sae_info->imagesets_combo_box = GTK_WIDGET(gtk_builder_get_object(builder, "imagesetscbox")); + gen_sae_info->actions_combo_box = GTK_WIDGET(gtk_builder_get_object(builder, "actionscbox")); + gen_sae_info->animations_combo_box = GTK_WIDGET(gtk_builder_get_object(builder, "animationscbox")); file_new(); - gtk_container_add(scrolled_window, text); - gtk_widget_show_all(win); - gtk_widget_show_all(text); + gtk_widget_show_all(source_view); } diff --git a/saedit/interface.h.old b/saedit/interface.h.old new file mode 100644 index 0000000..925d5cb --- /dev/null +++ b/saedit/interface.h.old @@ -0,0 +1,310 @@ +/*=======================================*\ +| ____ ____ | +| / \ /\ | | +| \____ / \ |____ | +| \ /____\ | | +| \____/prite / \nimation |____ditor | +| | +| Copyleft Vasily_Makarov 2011 | +| | +\*=======================================*/ + +#include "main.h" + +GtkWidget *reload_menu_item = NULL; + +void find_menu_item_activate_callback(GtkWidget *menuitem, gpointer user_data) { + search_find_dialog_show(win, source_view); +} + +void save_dialog_response_callback(GtkWidget *dialog, gint response_id, gpointer user_data) { + if (response_id == GTK_RESPONSE_ACCEPT) { + gchar *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); + if (filename != NULL) { + save_to_xml_file(filename); + gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(xml_file_chooser_button), filename); + } + } + gtk_widget_destroy(dialog); +} + +void save_dialog_show() { + GtkDialog *dialog = gtk_file_chooser_dialog_new(_("Save file as..."), win, GTK_FILE_CHOOSER_ACTION_SAVE, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, NULL); + g_signal_connect(dialog, "response", G_CALLBACK(save_dialog_response_callback), NULL); + gtk_dialog_run(dialog); +} + +void save_menu_item_activate_callback(GtkWidget *menuitem, GtkWidget *fsdialog) { + gchar *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(xml_file_chooser_button)); + if (filename != NULL) + save_to_xml_file(filename); + else + save_dialog_show(); +} + +void xml_file_save_button_callback(GtkWidget *button, gpointer user_data) { + gchar *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(xml_file_chooser_button)); + if (filename != NULL) + save_to_xml_file(filename); +} + +void file_new() { + GtkTextIter start, end; + gtk_text_buffer_get_bounds(source_buffer, &start, &end); + gtk_text_buffer_delete(source_buffer, &start, &end); + gchar *temp; + if (g_file_get_contents(FILE_TEMPLATE, &temp, NULL, NULL)) + gtk_text_buffer_set_text(GTK_TEXT_BUFFER(source_buffer), temp, -1); + gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(xml_file_chooser_button), ""); + gtk_widget_set_sensitive(reload_menu_item, FALSE); +} + +void set_up_interface() { + + GtkBuilder *builder = gtk_builder_new(); + gtk_builder_add_from_file(builder, "interface.ui", NULL); + gtk_builder_connect_signals(builder, NULL); + + GtkWindow *win1 = GTK_WIDGET(gtk_builder_get_object(builder, "win_main")); + + GtkWidget *button = NULL; + GtkWidget *hbox = NULL; + GtkWidget *vbox = NULL; + GtkWidget *vbbox = NULL; + GtkWidget *text = NULL; + GtkWidget *label = NULL; + GtkWidget *menubar = NULL; + GtkWidget *menuitem = NULL; + GtkWidget *menu = NULL; + GtkWidget *vpaned = NULL; + GtkWidget *scrolled_window = NULL; + GtkWidget *fcdialog = NULL; + + GtkSourceLanguageManager *langman = gtk_source_language_manager_get_default(); + + source_buffer = gtk_source_buffer_new_with_language(gtk_source_language_manager_get_language(langman, "xml")); + text = gtk_source_view_new_with_buffer(source_buffer); + source_view = text; + + win = gtk_window_new(GTK_WINDOW_TOPLEVEL); + gtk_window_set_title(GTK_WINDOW(win), "Sprite Animation Editor"); + gtk_window_set_position(GTK_WINDOW(win), GTK_WIN_POS_CENTER); + gtk_window_set_icon(GTK_WINDOW(win), icon); + gtk_widget_realize(win); + g_signal_connect(win, "destroy", G_CALLBACK(save_config_and_quit), NULL); + gtk_widget_set_size_request(win, MIN_WIDTH, MIN_HEIGHT); + GtkAccelGroup *ag = gtk_accel_group_new(); + gtk_window_add_accel_group(win, ag); + + fcdialog = gtk_file_chooser_dialog_new(_("Open file"), win, GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL); + + vbox = gtk_vbox_new(FALSE, 0); + gtk_container_add(GTK_CONTAINER(win), vbox); + + //Menubar setup + menubar = gtk_menu_bar_new(); + gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, TRUE, 0); + + //File menu + menu = gtk_menu_new(); + gtk_menu_set_accel_group(menu, ag); + + menuitem = gtk_menu_item_new_with_label(_("New")); + g_signal_connect(menuitem, "activate", G_CALLBACK(file_new), NULL); + gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); + + gtk_menu_item_set_accel_path(GTK_MENU_ITEM(menuitem), "/File/New"); + gtk_accel_map_change_entry("/File/New", gdk_keyval_from_name("N"), GDK_CONTROL_MASK, TRUE); + + menuitem = gtk_menu_item_new_with_label(_("Open...")); + g_signal_connect(menuitem, "activate", open_menu_item_activate, fcdialog); + gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); + + gtk_menu_item_set_accel_path(GTK_MENU_ITEM(menuitem), "/File/Open"); + gtk_accel_map_change_entry("/File/Open", gdk_keyval_from_name("O"), GDK_CONTROL_MASK, TRUE); + + menuitem = gtk_menu_item_new_with_label(_("Reload")); + gtk_widget_set_sensitive(menuitem, FALSE); + g_signal_connect(menuitem, "activate", G_CALLBACK(open_xml_file), NULL); + gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); + + gtk_menu_item_set_accel_path(GTK_MENU_ITEM(menuitem), "/File/Reload"); + gtk_accel_map_change_entry("/File/Reload", gdk_keyval_from_name("R"), GDK_CONTROL_MASK, TRUE); + + reload_menu_item = menuitem; + + gtk_menu_shell_append(GTK_MENU_SHELL(menu), gtk_separator_menu_item_new()); + + menuitem = gtk_menu_item_new_with_label(_("Save")); + g_signal_connect(menuitem, "activate", G_CALLBACK(save_menu_item_activate_callback), NULL); + gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); + + gtk_menu_item_set_accel_path(GTK_MENU_ITEM(menuitem), "/File/Save"); + gtk_accel_map_change_entry("/File/Save", gdk_keyval_from_name("S"), GDK_CONTROL_MASK, TRUE); + + menuitem = gtk_menu_item_new_with_label(_("Save as...")); + g_signal_connect(menuitem, "activate", G_CALLBACK(save_dialog_show), NULL); + gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); + + gtk_menu_item_set_accel_path(GTK_MENU_ITEM(menuitem), "/File/SaveAs"); + gtk_accel_map_change_entry("/File/SaveAs", gdk_keyval_from_name("S"), GDK_CONTROL_MASK + GDK_SHIFT_MASK, TRUE); + + menuitem = gtk_menu_item_new_with_label(_("File")); + gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), menu); + gtk_menu_shell_append(GTK_MENU_SHELL(menubar), menuitem); + + //Search menu + menu = gtk_menu_new(); + gtk_menu_set_accel_group(menu, ag); + + menuitem = gtk_menu_item_new_with_label(_("Find...")); + g_signal_connect(menuitem, "activate", find_menu_item_activate_callback, NULL); + gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); + + gtk_menu_item_set_accel_path(GTK_MENU_ITEM(menuitem), "/Search/Find"); + gtk_accel_map_change_entry("/Search/Find", gdk_keyval_from_name("F"), GDK_CONTROL_MASK, TRUE); + + menuitem = gtk_menu_item_new_with_label(_("Find next")); + g_signal_connect(menuitem, "activate", search_find_next, NULL); + gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); + + gtk_menu_item_set_accel_path(GTK_MENU_ITEM(menuitem), "/Search/FindNext"); + gtk_accel_map_change_entry("/Search/FindNext", gdk_keyval_from_name("F3"), 0, TRUE); + + menuitem = gtk_menu_item_new_with_label(_("Search")); + gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), menu); + gtk_menu_shell_append(GTK_MENU_SHELL(menubar), menuitem); + + //View menu + menu = gtk_menu_new(); + gtk_menu_set_accel_group(menu, ag); + + menuitem = gtk_check_menu_item_new_with_label(_("Show grid")); + gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); + + g_signal_connect(menuitem, "toggled", show_grid_menu_item_toggled, NULL); + + gtk_menu_item_set_accel_path(menuitem, "/View/ShowGrid"); + gtk_accel_map_change_entry("/View/ShowGrid", gdk_keyval_from_name("G"), GDK_CONTROL_MASK, TRUE); + + show_grid_menu_item = menuitem; + + menuitem = gtk_menu_item_new_with_label(_("Imageset preview")); + gtk_widget_set_sensitive(menuitem, FALSE); + g_signal_connect(G_OBJECT(menuitem), "activate", G_CALLBACK(show_imageset_dialog), NULL); + gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); + + gtk_menu_item_set_accel_path(menuitem, "/View/ImagesetPreview"); + gtk_accel_map_change_entry("/View/ImagesetPreview", gdk_keyval_from_name("I"), GDK_CONTROL_MASK, TRUE); + + imageset_preview_menu_item = menuitem; + + menuitem = gtk_menu_item_new_with_label(_("View")); + gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), menu); + gtk_menu_shell_append(GTK_MENU_SHELL(menubar), menuitem); + + //Help menu + menu = gtk_menu_new(); + menuitem = gtk_menu_item_new_with_label(_("About")); + g_signal_connect(menuitem, "activate", show_about_dialog, NULL); + gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem); + + menuitem = gtk_menu_item_new_with_label(_("Help")); + gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), menu); + gtk_menu_shell_append(GTK_MENU_SHELL(menubar), menuitem); + + hbox = gtk_hbox_new(FALSE, 0); + gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0); + + //Left part setup + vbbox = gtk_vbutton_box_new(); + gtk_button_box_set_layout(GTK_BUTTON_BOX(vbbox), GTK_BUTTONBOX_START); + gtk_button_box_set_child_size(GTK_BUTTON_BOX(vbbox), 180, 0); + gtk_box_pack_start(GTK_BOX(hbox), vbbox, FALSE, TRUE, 0); + + label = gtk_label_new(""); + gtk_label_set_markup(GTK_LABEL(label), markup_bold(_("Clientdata folder"))); + gtk_box_pack_start(GTK_BOX(vbbox), label, TRUE, TRUE, 0); + + data_folder_chooser_button = gtk_file_chooser_button_new(_("Clientdata folder"), 0); + gtk_box_pack_start(GTK_BOX(vbbox), data_folder_chooser_button, TRUE, TRUE, 0); + gtk_file_chooser_set_action(GTK_FILE_CHOOSER(data_folder_chooser_button), GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER); + g_signal_connect(data_folder_chooser_button, "selection-changed", G_CALLBACK(data_folder_set_callback), NULL); + + label = gtk_label_new(""); + gtk_label_set_markup(GTK_LABEL(label), markup_bold(_("XML source file"))); + gtk_box_pack_start(GTK_BOX(vbbox), label, TRUE, TRUE, 0); + + xml_file_chooser_button = gtk_file_chooser_button_new_with_dialog(fcdialog); + gtk_box_pack_start(GTK_BOX(vbbox), xml_file_chooser_button, TRUE, TRUE, 0); + g_signal_connect(xml_file_chooser_button, "file-set", G_CALLBACK(open_xml_file), NULL); + + xml_file_open_button = gtk_button_new_from_stock(GTK_STOCK_OPEN); + gtk_widget_set_sensitive(xml_file_open_button, FALSE); + gtk_box_pack_start(GTK_BOX(vbbox), xml_file_open_button, TRUE, TRUE, 0); + g_signal_connect(xml_file_open_button, "clicked", G_CALLBACK(open_xml_file), NULL); + + xml_file_save_button = gtk_button_new_from_stock(GTK_STOCK_SAVE); + gtk_widget_set_sensitive(xml_file_save_button, FALSE); + gtk_box_pack_start(GTK_BOX(vbbox), xml_file_save_button, TRUE, TRUE, 0); + g_signal_connect(xml_file_save_button, "clicked", G_CALLBACK(xml_file_save_button_callback), NULL); + gtk_widget_set_accel_path(xml_file_save_button, "/SaveXMLBuffer", ag); + //gtk_accel_map_change_entry("/SaveXMLBuffer", gdk_keyval_from_name("S"), GDK_CONTROL_MASK, TRUE); + + button = gtk_button_new_with_label(_("Parse XML buffer")); + gtk_box_pack_start(GTK_BOX(vbbox), button, TRUE, TRUE, 0); + g_signal_connect(button, "clicked", G_CALLBACK(parse_xml_buffer), NULL); + gtk_widget_set_accel_path(button, "/ParseXMLBuffer", ag); + gtk_accel_map_change_entry("/ParseXMLBuffer", gdk_keyval_from_name("P"), GDK_CONTROL_MASK, TRUE); + + label = gtk_label_new(""); + gtk_label_set_markup(GTK_LABEL(label), markup_bold(_("Imagesets"))); + gtk_box_pack_start(GTK_BOX(vbbox), label, TRUE, TRUE, 0); + + gen_sae_info->imagesets_combo_box = GTK_WIDGET(gtk_builder_get_object(builder, "imagesetscbox")); + /*gen_sae_info->imagesets_combo_box = gtk_combo_box_new_text(); + g_signal_connect(gen_sae_info->imagesets_combo_box, "changed", G_CALLBACK(imagesets_combo_box_changed_callback), NULL); + gtk_box_pack_start(GTK_BOX(vbbox), gen_sae_info->imagesets_combo_box, TRUE, TRUE, 0);*/ + + label = gtk_label_new(""); + gtk_label_set_markup(GTK_LABEL(label), markup_bold(_("Actions"))); + gtk_box_pack_start(GTK_BOX(vbbox), label, TRUE, TRUE, 0); + + gen_sae_info->actions_combo_box = GTK_WIDGET(gtk_builder_get_object(builder, "actionscbox")); + /*gen_sae_info->actions_combo_box = gtk_combo_box_new_text(); + g_signal_connect(gen_sae_info->actions_combo_box, "changed", G_CALLBACK(actions_combo_box_changed_callback), NULL); + gtk_box_pack_start(GTK_BOX(vbbox), gen_sae_info->actions_combo_box, TRUE, TRUE, 0);*/ + + label = gtk_label_new(""); + gtk_label_set_markup(GTK_LABEL(label), markup_bold(_("Directions"))); + gtk_box_pack_start(GTK_BOX(vbbox), label, TRUE, TRUE, 0); + + gen_sae_info->animations_combo_box = GTK_WIDGET(gtk_builder_get_object(builder, "animationscbox")); + /*gen_sae_info->animations_combo_box = gtk_combo_box_new_text(); + g_signal_connect(gen_sae_info->animations_combo_box, "changed", G_CALLBACK(animations_combo_box_changed_callback), NULL); + gtk_box_pack_start(GTK_BOX(vbbox), gen_sae_info->animations_combo_box, TRUE, TRUE, 0);*/ + + //Right part setup + vpaned = gtk_vpaned_new(); + gtk_box_pack_end(GTK_BOX(hbox), vpaned, TRUE, TRUE, 0); + + darea = gtk_drawing_area_new(); + gtk_paned_pack1(GTK_PANED(vpaned), darea, FALSE, FALSE); + gtk_widget_set_size_request(darea, -1, 120); + g_signal_connect(darea, "expose-event", G_CALLBACK(darea_expose_event), gen_sae_info); + + source_view = text; + gtk_source_view_set_show_line_numbers(GTK_SOURCE_VIEW(text), TRUE); + + scrolled_window = gtk_scrolled_window_new(gtk_text_view_get_hadjustment(text), gtk_text_view_get_vadjustment(text)); + gtk_paned_pack2(GTK_PANED(vpaned), scrolled_window, TRUE, FALSE); + gtk_widget_set_size_request(scrolled_window, -1, 50); + + file_new(); + + gtk_container_add(scrolled_window, text); + + gtk_widget_show_all(win); + gtk_widget_show_all(win1); + gtk_widget_show_all(text); +} diff --git a/saedit/interface.ui b/saedit/interface.ui new file mode 100644 index 0000000..594c111 --- /dev/null +++ b/saedit/interface.ui @@ -0,0 +1,531 @@ + + + + + + + False + 5 + Open file + dialog + + + True + False + 2 + + + True + False + end + + + gtk-open + True + True + True + False + True + + + False + False + 0 + + + + + gtk-cancel + True + True + True + False + True + + + False + False + 1 + + + + + False + True + end + 0 + + + + + + + + + button1 + button2 + + + + + + + + + + 600 + 600 + False + Sprite Animation Editor + center + 600 + 600 + icon.svg + + + + True + False + + + True + False + + + True + False + False + _File + True + + + True + False + + + True + False + False + _New + True + + + + + + True + False + False + _Open... + True + + + + + + True + False + False + _Reload + True + + + + + + True + False + False + + + + + True + False + False + _Save + True + + + + + + True + False + False + Save _As... + True + + + + + + + + + + True + False + False + _Search + True + + + True + False + + + True + False + False + _Find... + True + + + + + + True + False + False + Find _Next + True + + + + + + + + + + True + False + False + _View + True + + + True + False + + + True + False + False + Show _Grid + True + + + + + + True + False + False + False + _Imageset view + True + + + + + + + + + + True + False + False + _Help + True + + + True + False + + + True + False + False + _About + True + + + + + + + + + + False + True + 0 + + + + + True + False + + + True + False + start + + + True + False + Clientdata folder + + + + + + False + False + 0 + + + + + True + False + select-folder + Clientdata folder + + + + False + False + 1 + + + + + True + False + XML source file + + + + + + False + False + 2 + + + + + True + False + fcdialog1 + Select XML file + + + + False + False + 4 + + + + + gtk-open + True + True + True + False + True + + + + False + False + 5 + + + + + gtk-save + True + True + True + False + True + + + + False + False + 5 + + + + + Parse XML Buffer + True + True + True + False + + + + False + False + 7 + + + + + True + False + Imagesets + + + + + + False + False + 7 + + + + + True + False + liststore1 + 0 + + + + False + False + 9 + + + + + True + False + Actions + + + + + + False + False + 9 + + + + + True + False + 0 + + + + False + False + 11 + + + + + True + False + Directions + + + + + + False + False + 11 + + + + + True + False + 0 + + + + False + False + 34 + + + + + False + False + 0 + + + + + True + True + + + 120 + True + False + + + + True + True + + + + + True + True + automatic + automatic + + + True + True + 2 + 2 + True + 4 + True + False + + + + + True + True + + + + + True + True + 1 + + + + + True + True + 1 + + + + + + diff --git a/saedit/main.c b/saedit/main.c index c18b901..5c771b1 100644 --- a/saedit/main.c +++ b/saedit/main.c @@ -58,6 +58,9 @@ cairo_surface_t *get_grid_surface(int w, int h) { } gboolean darea_expose_event(GtkWidget *widget, GdkEventExpose *event, SAEInfo *sae_info) { + if (sae_info == NULL) + sae_info = gen_sae_info; + int width = widget->allocation.width, height = widget->allocation.height; @@ -102,14 +105,14 @@ void format_src_string(gchar *src) { strncpy(str, "\0", 1); } -void open_xml_file(GtkButton *button, gpointer buffer) { +void open_xml_file(GtkButton *button) { gtk_widget_set_sensitive(xml_file_open_button, TRUE); gtk_widget_set_sensitive(reload_menu_item, TRUE); gchar *buf; size_t len; g_file_get_contents(gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(xml_file_chooser_button)), &buf, &len, NULL); if (g_utf8_validate(buf, len, NULL)) { - gtk_text_buffer_set_text((GtkTextBuffer *)buffer, buf, len); + gtk_text_buffer_set_text(source_buffer, buf, len); gtk_widget_set_sensitive(xml_file_save_button, TRUE); } else { gtk_file_chooser_unselect_all(GTK_FILE_CHOOSER(xml_file_chooser_button)); @@ -416,6 +419,9 @@ void parse_xml_text(gchar *text, SAEInfo *sae_info) { } void parse_xml_buffer(GtkWidget *button, GtkSourceBuffer *buffer) { + if (buffer == NULL) + buffer = source_buffer; + player = NULL; load_options(); diff --git a/saedit/main.h b/saedit/main.h index 5ef398b..99340cc 100644 --- a/saedit/main.h +++ b/saedit/main.h @@ -9,6 +9,9 @@ | | \*=======================================*/ +#ifndef MAIN_H +#define MAIN_H + const int MIN_WIDTH = 600; const int MIN_HEIGHT = 600; @@ -40,36 +43,38 @@ GdkPixbuf *icon = NULL; Options *paths; Keys *config; -static gchar *markup_bold(gchar *str); -static void format_src_string(gchar *src); -static void open_xml_file(GtkButton *button, gpointer buffer); -static void free_imagesets(SAEInfo *sae_info); -static void free_actions(SAEInfo *sae_info); -static void save_to_xml_file(gchar *filename); -static void data_folder_set_callback(GtkFileChooserButton *widget, gpointer data); -static void show_wrong_source_buffer_dialog(); -static void set_sprite_by_index(size_t index, SAEInfo *sae_info); -static void set_up_actions_by_imageset_name(gchar *imageset_name, SAEInfo *sae_info); -static gboolean set_up_imagesets(SAEInfo *sae_info); -static gboolean show_general_animation(SAEInfo *sae_info); -static gboolean set_up_action_by_name(const gchar *name, SAEInfo *sae_info); -static void actions_combo_box_changed_callback(GtkComboBox *widget, gpointer user_data); -static void animations_combo_box_changed_callback(GtkComboBox *widget, gpointer user_data); -static void set_up_imageset_by_name(const gchar* name, SAEInfo *sae_info); -static void imagesets_combo_box_changed_callback(GtkComboBox *widget, gpointer user_data); -static void parse_xml_buffer(GtkWidget *button, GtkSourceBuffer *buffer); -static void set_up_interface(); -static void show_about_dialog(); -static void show_imageset_dialog(); -static gboolean frame_image_button_press_event(GtkWidget *widget, GdkEventButton *button, int index); -static cairo_surface_t *get_grid_surface(int w, int h); -static gboolean darea_expose_event(GtkWidget *widget, GdkEventExpose *event, SAEInfo *sae_info); -static void load_config(); -static void save_config_and_quit(); -static void load_options(); -static void free_imageset(); -static void show_grid_menu_item_toggled(GtkCheckMenuItem *checkmenuitem, gpointer user_data); -static void open_menu_item_activate(GtkMenuItem *menuitem, GtkFileChooserDialog *fcdialog); -static void parse_xml_text(gchar *text, SAEInfo *sae_info); -static void show_animation(SAEInfo *sae_info); +gchar *markup_bold(gchar *str); +void format_src_string(gchar *src); +void open_xml_file(GtkButton *button); +void free_imagesets(SAEInfo *sae_info); +void free_actions(SAEInfo *sae_info); +void save_to_xml_file(gchar *filename); +void data_folder_set_callback(GtkFileChooserButton *widget, gpointer data); +void show_wrong_source_buffer_dialog(); +void set_sprite_by_index(size_t index, SAEInfo *sae_info); +void set_up_actions_by_imageset_name(gchar *imageset_name, SAEInfo *sae_info); +gboolean set_up_imagesets(SAEInfo *sae_info); +gboolean show_general_animation(SAEInfo *sae_info); +gboolean set_up_action_by_name(const gchar *name, SAEInfo *sae_info); +void actions_combo_box_changed_callback(GtkComboBox *widget, gpointer user_data); +void animations_combo_box_changed_callback(GtkComboBox *widget, gpointer user_data); +void set_up_imageset_by_name(const gchar* name, SAEInfo *sae_info); +void imagesets_combo_box_changed_callback(GtkComboBox *widget, gpointer user_data); +void parse_xml_buffer(GtkWidget *button, GtkSourceBuffer *buffer); +void set_up_interface(); +void show_about_dialog(); +void show_imageset_dialog(); +gboolean frame_image_button_press_event(GtkWidget *widget, GdkEventButton *button, int index); +cairo_surface_t *get_grid_surface(int w, int h); +gboolean darea_expose_event(GtkWidget *widget, GdkEventExpose *event, SAEInfo *sae_info); +void load_config(); +void save_config_and_quit(); +void load_options(); +void free_imageset(); +void show_grid_menu_item_toggled(GtkCheckMenuItem *checkmenuitem, gpointer user_data); +void open_menu_item_activate(GtkMenuItem *menuitem, GtkFileChooserDialog *fcdialog); +void parse_xml_text(gchar *text, SAEInfo *sae_info); +void show_animation(SAEInfo *sae_info); void free_animations(SAEInfo *sae_info); + +#endif -- cgit v1.2.3-70-g09d2 From 580c082d81b21c34886ab59905239eb64449378f Mon Sep 17 00:00:00 2001 From: Vasily_Makarov Date: Wed, 19 Oct 2011 20:35:03 +0400 Subject: Edit interface, edit code structure --- saedit/config.c | 4 - saedit/config.h | 5 ++ saedit/interface.c | 117 +++++++++++++++++++++++++++ saedit/interface.h | 104 ------------------------ saedit/interface.ui | 176 ++++++++++++++++++++++++++++++++++------ saedit/main.c | 226 +++++++++++++++++++++++++--------------------------- saedit/main.h | 51 +++++++++--- saedit/sae.c | 4 - saedit/sae.h | 5 ++ saedit/search.c | 34 ++++---- saedit/search.h | 10 ++- saedit/xml.c | 3 - saedit/xml.h | 4 + 13 files changed, 458 insertions(+), 285 deletions(-) create mode 100644 saedit/interface.c delete mode 100644 saedit/interface.h diff --git a/saedit/config.c b/saedit/config.c index c514e26..98a1325 100644 --- a/saedit/config.c +++ b/saedit/config.c @@ -9,10 +9,6 @@ | | \*=======================================*/ -#include -#include -#include "common.h" -#include "xml.h" #include "config.h" Options *config_options_new() { diff --git a/saedit/config.h b/saedit/config.h index c8904d5..e7c5fb5 100644 --- a/saedit/config.h +++ b/saedit/config.h @@ -12,6 +12,11 @@ #ifndef CONFIG_H #define CONFIG_H +#include +#include +#include "common.h" +#include "xml.h" + #define OPTION_SPRITES_DEFAULT "graphics/sprites/" #define KEY_SHOW_GRID_DEFAULT TRUE diff --git a/saedit/interface.c b/saedit/interface.c new file mode 100644 index 0000000..8238416 --- /dev/null +++ b/saedit/interface.c @@ -0,0 +1,117 @@ +/*=======================================*\ +| ____ ____ | +| / \ /\ | | +| \____ / \ |____ | +| \ /____\ | | +| \____/prite / \nimation |____ditor | +| | +| Copyleft Vasily_Makarov 2011 | +| | +\*=======================================*/ + +GtkWidget *reload_menu_item = NULL; +GtkWidget *find_dialog = NULL; + +void find_menu_item_activate_callback(GtkWidget *menuitem, gpointer user_data) { + gtk_dialog_run(GTK_DIALOG(find_dialog)); +} + +void save_dialog_response_callback(GtkWidget *dialog, gint response_id, gpointer user_data) { + if (response_id == GTK_RESPONSE_ACCEPT) { + gchar *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); + if (filename != NULL) { + save_to_xml_file(filename); + gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(xml_file_chooser_button), filename); + } + } + gtk_widget_destroy(dialog); +} + +void save_dialog_show() { + GtkDialog *dialog = gtk_file_chooser_dialog_new(_("Save file as..."), win, GTK_FILE_CHOOSER_ACTION_SAVE, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, NULL); + g_signal_connect(dialog, "response", G_CALLBACK(save_dialog_response_callback), NULL); + gtk_dialog_run(dialog); +} + +void save_menu_item_activate_callback(GtkWidget *menuitem, GtkWidget *fsdialog) { + gchar *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(xml_file_chooser_button)); + if (filename != NULL) + save_to_xml_file(filename); + else + save_dialog_show(); +} + +void xml_file_save_button_callback(GtkWidget *button, gpointer user_data) { + gchar *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(xml_file_chooser_button)); + if (filename != NULL) + save_to_xml_file(filename); +} + +void file_new() { + GtkTextIter start, end; + gtk_text_buffer_get_bounds(source_buffer, &start, &end); + gtk_text_buffer_delete(source_buffer, &start, &end); + gchar *temp; + if (g_file_get_contents(FILE_TEMPLATE, &temp, NULL, NULL)) + gtk_text_buffer_set_text(GTK_TEXT_BUFFER(source_buffer), temp, -1); + gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(xml_file_chooser_button), ""); + gtk_widget_set_sensitive(reload_menu_item, FALSE); + + free_lists(gen_sae_info); +} + +void set_up_interface() { + + GtkBuilder *builder = gtk_builder_new(); + gtk_builder_add_from_file(builder, "interface.ui", NULL); + gtk_builder_connect_signals(builder, NULL); + + //Setup main window + win = GTK_WIDGET(gtk_builder_get_object(builder, "win_main")); + + //Setup GtkSourceView + GtkSourceLanguageManager *langman = gtk_source_language_manager_get_default(); + source_buffer = gtk_source_buffer_new_with_language(gtk_source_language_manager_get_language(langman, "xml")); + + source_view = GTK_WIDGET(gtk_builder_get_object(builder, "source_view")); + gtk_text_view_set_buffer(GTK_TEXT_VIEW(source_view), GTK_TEXT_BUFFER(source_buffer)); + search_init(source_view); + + //Setup GtkScrolledWindow + GtkWidget *scrolled_window = NULL; + scrolled_window = GTK_WIDGET(gtk_builder_get_object(builder, "scrolledwindow1")); + gtk_scrolled_window_set_hadjustment(GTK_SCROLLED_WINDOW(scrolled_window), + gtk_text_view_get_hadjustment(GTK_TEXT_VIEW(source_view))); + gtk_scrolled_window_set_vadjustment(GTK_SCROLLED_WINDOW(scrolled_window), + gtk_text_view_get_vadjustment(GTK_TEXT_VIEW(source_view))); + + //Setup GtkDrawingArea + darea = GTK_WIDGET(gtk_builder_get_object(builder, "darea1")); + + reload_menu_item = GTK_WIDGET(gtk_builder_get_object(builder, "menuitem6")); + show_grid_menu_item = GTK_WIDGET(gtk_builder_get_object(builder, "menuitem11")); + imageset_preview_menu_item = GTK_WIDGET(gtk_builder_get_object(builder, "menuitem12")); + + data_folder_chooser_button = GTK_WIDGET(gtk_builder_get_object(builder, "datafcbutton")); + xml_file_chooser_button = GTK_WIDGET(gtk_builder_get_object(builder, "xmlfcbutton")); + xml_file_open_button = GTK_WIDGET(gtk_builder_get_object(builder, "xmlfobutton")); + xml_file_save_button = GTK_WIDGET(gtk_builder_get_object(builder, "xmlfsbutton")); + + gen_sae_info->imagesets_combo_box = GTK_WIDGET(gtk_builder_get_object(builder, "imagesetscbox")); + gen_sae_info->actions_combo_box = GTK_WIDGET(gtk_builder_get_object(builder, "actionscbox")); + gen_sae_info->animations_combo_box = GTK_WIDGET(gtk_builder_get_object(builder, "animationscbox")); + + //Setup GtkAboutDialog + about_dialog = GTK_WIDGET(gtk_builder_get_object(builder, "about_dialog")); + + //Setup Find dialog + find_dialog = GTK_WIDGET(gtk_builder_get_object(builder, "find_dialog")); + gtk_widget_hide(find_dialog); + + file_new(); + + gtk_widget_show_all(win); + gtk_widget_show_all(source_view); + + g_object_unref(builder); +} diff --git a/saedit/interface.h b/saedit/interface.h deleted file mode 100644 index c2a4e2f..0000000 --- a/saedit/interface.h +++ /dev/null @@ -1,104 +0,0 @@ -/*=======================================*\ -| ____ ____ | -| / \ /\ | | -| \____ / \ |____ | -| \ /____\ | | -| \____/prite / \nimation |____ditor | -| | -| Copyleft Vasily_Makarov 2011 | -| | -\*=======================================*/ - -#include "main.h" - -GtkWidget *reload_menu_item = NULL; - -void find_menu_item_activate_callback(GtkWidget *menuitem, gpointer user_data) { - search_find_dialog_show(win, source_view); -} - -void save_dialog_response_callback(GtkWidget *dialog, gint response_id, gpointer user_data) { - if (response_id == GTK_RESPONSE_ACCEPT) { - gchar *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); - if (filename != NULL) { - save_to_xml_file(filename); - gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(xml_file_chooser_button), filename); - } - } - gtk_widget_destroy(dialog); -} - -void save_dialog_show() { - GtkDialog *dialog = gtk_file_chooser_dialog_new(_("Save file as..."), win, GTK_FILE_CHOOSER_ACTION_SAVE, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, NULL); - g_signal_connect(dialog, "response", G_CALLBACK(save_dialog_response_callback), NULL); - gtk_dialog_run(dialog); -} - -void save_menu_item_activate_callback(GtkWidget *menuitem, GtkWidget *fsdialog) { - gchar *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(xml_file_chooser_button)); - if (filename != NULL) - save_to_xml_file(filename); - else - save_dialog_show(); -} - -void xml_file_save_button_callback(GtkWidget *button, gpointer user_data) { - gchar *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(xml_file_chooser_button)); - if (filename != NULL) - save_to_xml_file(filename); -} - -void file_new() { - GtkTextIter start, end; - gtk_text_buffer_get_bounds(source_buffer, &start, &end); - gtk_text_buffer_delete(source_buffer, &start, &end); - gchar *temp; - if (g_file_get_contents(FILE_TEMPLATE, &temp, NULL, NULL)) - gtk_text_buffer_set_text(GTK_TEXT_BUFFER(source_buffer), temp, -1); - gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(xml_file_chooser_button), ""); - gtk_widget_set_sensitive(reload_menu_item, FALSE); -} - -void set_up_interface() { - - GtkBuilder *builder = gtk_builder_new(); - gtk_builder_add_from_file(builder, "interface.ui", NULL); - gtk_builder_connect_signals(builder, NULL); - - win = GTK_WIDGET(gtk_builder_get_object(builder, "win_main")); - - //Setup GtkSourceView - GtkSourceLanguageManager *langman = gtk_source_language_manager_get_default(); - source_buffer = gtk_source_buffer_new_with_language(gtk_source_language_manager_get_language(langman, "xml")); - - source_view = GTK_WIDGET(gtk_builder_get_object(builder, "source_view")); - gtk_text_view_set_buffer(GTK_TEXT_VIEW(source_view), GTK_TEXT_BUFFER(source_buffer)); - - //Setup ScrolledWindow - GtkWidget *scrolled_window = NULL; - scrolled_window = GTK_WIDGET(gtk_builder_get_object(builder, "scrolledwindow1")); - gtk_scrolled_window_set_hadjustment(GTK_SCROLLED_WINDOW(scrolled_window), - gtk_text_view_get_hadjustment(GTK_TEXT_VIEW(source_view))); - gtk_scrolled_window_set_vadjustment(GTK_SCROLLED_WINDOW(scrolled_window), - gtk_text_view_get_vadjustment(GTK_TEXT_VIEW(source_view))); - - //Setup GtkDrawingArea - darea = GTK_WIDGET(gtk_builder_get_object(builder, "darea1")); - - - reload_menu_item = GTK_WIDGET(gtk_builder_get_object(builder, "menuitem6")); - show_grid_menu_item = GTK_WIDGET(gtk_builder_get_object(builder, "menuitem11")); - imageset_preview_menu_item = GTK_WIDGET(gtk_builder_get_object(builder, "menuitem12")); - - data_folder_chooser_button = GTK_WIDGET(gtk_builder_get_object(builder, "datafcbutton")); - xml_file_chooser_button = GTK_WIDGET(gtk_builder_get_object(builder, "xmlfcbutton")); - - gen_sae_info->imagesets_combo_box = GTK_WIDGET(gtk_builder_get_object(builder, "imagesetscbox")); - gen_sae_info->actions_combo_box = GTK_WIDGET(gtk_builder_get_object(builder, "actionscbox")); - gen_sae_info->animations_combo_box = GTK_WIDGET(gtk_builder_get_object(builder, "animationscbox")); - - file_new(); - - gtk_widget_show_all(win); - gtk_widget_show_all(source_view); -} diff --git a/saedit/interface.ui b/saedit/interface.ui index 594c111..73193ee 100644 --- a/saedit/interface.ui +++ b/saedit/interface.ui @@ -3,6 +3,44 @@ + + False + 5 + center + icon.svg + dialog + win_main + Sprite Animation Editor + ⍺0.1.1 + Copyleft ↄ Vasily_Makarov 2011 + Sprite Animation Editor could be used to edit animations from Evol and The Mana World projects + Dan "Vasily_Makarov" Sagunov <danilka.pro@gmail.com> +Reid Yaro <reidyaro@gmail.com> + icon.svg + + + True + False + 2 + + + True + False + end + + + False + True + end + 0 + + + + + + + + False 5 @@ -66,6 +104,94 @@ button2 + + 240 + 80 + False + 5 + Find + False + True + dialog + True + True + False + win_main + + + + True + False + 2 + + + True + False + end + + + gtk-find + True + True + True + False + True + + + False + False + 0 + + + + + gtk-cancel + True + True + True + False + True + + + False + False + 1 + + + + + False + True + end + 0 + + + + + True + True + + False + False + True + True + + + True + True + 1 + + + + + + + + + button4 + button5 + + @@ -118,7 +244,7 @@ False _Open... True - + @@ -215,7 +341,7 @@ False Show _Grid True - + @@ -329,7 +455,7 @@ False False - 4 + 3 @@ -345,7 +471,7 @@ False False - 5 + 4 @@ -364,6 +490,21 @@ 5 + + + True + False + Imagesets + + + + + + False + False + 7 + + Parse XML Buffer @@ -380,10 +521,10 @@ - + True False - Imagesets + Actions @@ -391,7 +532,7 @@ False False - 7 + 9 @@ -409,10 +550,10 @@ - + True False - Actions + Directions @@ -420,7 +561,7 @@ False False - 9 + 11 @@ -436,21 +577,6 @@ 11 - - - True - False - Directions - - - - - - False - False - 11 - - True diff --git a/saedit/main.c b/saedit/main.c index 5c771b1..8385f60 100644 --- a/saedit/main.c +++ b/saedit/main.c @@ -9,22 +9,10 @@ | | \*=======================================*/ -#include -#include -#include -#include -#include -#include -#include -#include - -#include "common.h" -#include "xml.h" -#include "config.h" -#include "sae.h" #include "main.h" -#include "search.h" -#include "interface.h" +#include "interface.c" + +//Cairo functions cairo_surface_t *get_grid_surface(int w, int h) { cairo_surface_t *surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, (w + 2) * GRID_SIZE, (h + 2) * GRID_SIZE); @@ -93,6 +81,8 @@ gboolean darea_expose_event(GtkWidget *widget, GdkEventExpose *event, SAEInfo *s return FALSE; } +//String functions (common) + gchar *markup_bold(gchar *str) { gchar *buffer[255]; g_sprintf(buffer, "%s", str); @@ -105,6 +95,8 @@ void format_src_string(gchar *src) { strncpy(str, "\0", 1); } +//File working + void open_xml_file(GtkButton *button) { gtk_widget_set_sensitive(xml_file_open_button, TRUE); gtk_widget_set_sensitive(reload_menu_item, TRUE); @@ -117,8 +109,19 @@ void open_xml_file(GtkButton *button) { } else { gtk_file_chooser_unselect_all(GTK_FILE_CHOOSER(xml_file_chooser_button)); } + + free_lists(gen_sae_info); +} + +void save_to_xml_file(gchar *filename) { + GtkTextIter start, end; + gtk_text_buffer_get_start_iter(source_buffer, &start); + gtk_text_buffer_get_end_iter(source_buffer, &end); + g_file_set_contents(filename, gtk_text_buffer_get_text(source_buffer, &start, &end, NULL), -1, NULL); } +//SAEInfo functions (must be ported to sae.c) + void free_imagesets(SAEInfo *sae_info) { free_imageset(sae_info); sae_info->imagesets = NULL; @@ -137,19 +140,32 @@ void free_actions(SAEInfo *sae_info) { gtk_list_store_clear(GTK_LIST_STORE(gtk_combo_box_get_model(GTK_COMBO_BOX(sae_info->actions_combo_box)))); } -void save_to_xml_file(gchar *filename) { - GtkTextIter start, end; - gtk_text_buffer_get_start_iter(source_buffer, &start); - gtk_text_buffer_get_end_iter(source_buffer, &end); - g_file_set_contents(filename, gtk_text_buffer_get_text(source_buffer, &start, &end, NULL), -1, NULL); +void free_animations(SAEInfo *sae_info) { + sae_info->animations = NULL; + + if (sae_info->animations_combo_box != NULL) + gtk_list_store_clear(GTK_LIST_STORE(gtk_combo_box_get_model(GTK_COMBO_BOX(sae_info->animations_combo_box)))); + + kill_timeout(sae_info->anim_tag); + sae_info->anim_tag = 0; + sae_info->sprite = frame_new(-1, 0, 0, 0); + set_sprite_by_index(0, sae_info); } +void free_lists(SAEInfo *sae_info) { + free_imagesets(sae_info); + free_actions(sae_info); + free_animations(sae_info); +} + +//Callbacks + void data_folder_set_callback(GtkFileChooserButton *widget, gpointer data) { config->clientdata_folder = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(data_folder_chooser_button)); gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(xml_file_chooser_button), gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(widget))); } -void show_grid_menu_item_toggled(GtkCheckMenuItem *checkmenuitem, gpointer user_data) { +void show_grid_menu_item_toggled_callback(GtkCheckMenuItem *checkmenuitem, gpointer user_data) { config->show_grid = gtk_check_menu_item_get_active(checkmenuitem); gtk_widget_queue_draw(darea); } @@ -165,6 +181,77 @@ void show_wrong_source_buffer_dialog() { gtk_widget_show_all(dialog); } +void actions_combo_box_changed_callback(GtkComboBox *widget, gpointer user_data) { + if (player != NULL) + set_up_action_by_name(gtk_combo_box_get_active_text(widget), player); + set_up_action_by_name(gtk_combo_box_get_active_text(widget), gen_sae_info); +} + +void animations_combo_box_changed_callback(GtkComboBox *widget, gpointer user_data) { + set_up_animation_by_direction(gen_sae_info, gtk_combo_box_get_active_text(widget)); + if (player != NULL) { + set_up_animation_by_direction(player, gtk_combo_box_get_active_text(widget)); + show_animation(player); + } + show_animation(gen_sae_info); +} + +void imagesets_combo_box_changed_callback(GtkComboBox *widget, gpointer user_data) { + if (gtk_combo_box_get_active_text(widget) != NULL) + set_up_imageset_by_name(gtk_combo_box_get_active_text(widget), gen_sae_info); +} + +gboolean frame_image_button_press_event_callback(GtkWidget *widget, GdkEventButton *button, int index) { + gchar buf[10]; + gint len = g_sprintf(buf, "%d", index); + gtk_text_buffer_insert_at_cursor(GTK_TEXT_BUFFER(source_buffer), buf, len); + return FALSE; +} + +void open_menu_item_activate_callback(GtkMenuItem *menuitem, GtkFileChooserDialog *fcdialog) { + gtk_dialog_run(fcdialog); +} + +//Dialogs + +void show_about_dialog() { + gtk_dialog_run(about_dialog); + gtk_widget_hide(about_dialog); +} + +void show_imageset_dialog() { + if (gen_sae_info->imageset->spriteset == NULL) return; + GtkWidget *dialog = gtk_dialog_new(); + GtkWidget *content_area = gtk_dialog_get_content_area(GTK_DIALOG(dialog)); + gtk_window_set_title(GTK_WINDOW(dialog), _("Imageset preview")); + gtk_window_set_transient_for(dialog, GTK_WINDOW(win)); + + int w = gen_sae_info->imageset->spriteset_width / gen_sae_info->imageset->width; + int h = gen_sae_info->imageset->spriteset_height / gen_sae_info->imageset->height; + + GtkWidget *hbox = NULL; + GtkWidget *image = NULL; + GtkWidget *event_box = NULL; + + int x, y; + for (y = 0; y < h; y++) { + hbox = gtk_hbox_new(TRUE, 0); + gtk_container_add(content_area, hbox); + for (x = 0; x < w; x++) { + event_box = gtk_event_box_new(); + g_signal_connect(G_OBJECT(event_box), "button-press-event", G_CALLBACK(frame_image_button_press_event_callback), w * y + x); + gtk_box_pack_start(GTK_BOX(hbox), event_box, TRUE, TRUE, 0); + + image = gtk_image_new_from_pixbuf(get_sprite_by_index(w * y + x, gen_sae_info)); + gtk_widget_add_events(image, GDK_BUTTON_PRESS_MASK); + gtk_container_add(GTK_CONTAINER(event_box), image); + } + } + gtk_widget_show_all(dialog); +} + +//Main functions + void set_sprite_by_index(size_t index, SAEInfo *sae_info) { sae_info->sprite->pixbuf = get_sprite_by_index(index, sae_info); gtk_widget_queue_draw(darea); @@ -197,9 +284,7 @@ void set_up_actions_by_imageset_name(gchar *imageset_name, SAEInfo *sae_info) { gboolean set_up_imagesets(SAEInfo *sae_info) { GList *_imagesets_list = NULL; - free_imagesets(sae_info); - free_actions(sae_info); - free_animations(sae_info); + free_lists(sae_info); GList *list = sae_info->root->sub_nodes; XMLNode *node = NULL; while (TRUE) { @@ -278,21 +363,6 @@ gboolean set_up_action_by_name(const gchar *name, SAEInfo *sae_info) { return TRUE; } -void actions_combo_box_changed_callback(GtkComboBox *widget, gpointer user_data) { - if (player != NULL) - set_up_action_by_name(gtk_combo_box_get_active_text(widget), player); - set_up_action_by_name(gtk_combo_box_get_active_text(widget), gen_sae_info); -} - -void animations_combo_box_changed_callback(GtkComboBox *widget, gpointer user_data) { - set_up_animation_by_direction(gen_sae_info, gtk_combo_box_get_active_text(widget)); - if (player != NULL) { - set_up_animation_by_direction(player, gtk_combo_box_get_active_text(widget)); - show_animation(player); - } - show_animation(gen_sae_info); -} - void set_up_imageset_by_name(const gchar *name, SAEInfo *sae_info) { free_imageset(sae_info); free_actions(sae_info); @@ -370,11 +440,6 @@ void set_up_imageset_by_name(const gchar *name, SAEInfo *sae_info) { set_sprite_by_index(0, sae_info); } -void imagesets_combo_box_changed_callback(GtkComboBox *widget, gpointer user_data) { - if (gtk_combo_box_get_active_text(widget) != NULL) - set_up_imageset_by_name(gtk_combo_box_get_active_text(widget), gen_sae_info); -} - void load_options() { gchar *datapath = config->clientdata_folder; gchar *path = g_strjoin(SEPARATOR_SLASH, datapath, "paths.xml", NULL); @@ -382,9 +447,7 @@ void load_options() { } void parse_xml_text(gchar *text, SAEInfo *sae_info) { - free_imagesets(sae_info); - free_actions(sae_info); - free_animations(sae_info); + free_lists(sae_info); XMLNode *_root_node = ibus_xml_parse_buffer(text); sae_info->root = _root_node; @@ -431,62 +494,6 @@ void parse_xml_buffer(GtkWidget *button, GtkSourceBuffer *buffer) { parse_xml_text(gtk_text_iter_get_text(&beg, &end), gen_sae_info); } -void show_about_dialog() { - gchar *authors[] = {"Dan Sagunov ", - "Reid Yaro ", - NULL}; - gtk_show_about_dialog(GTK_WINDOW(win), - "authors", authors, - "comments", _("Sprite Animation Editor could be used to edit animations from Evol and The Mana World projects"), - "copyright", "Copyleft \u2184 Vasily_Makarov 2011", - "program-name", "Sprite Animation Editor", - "version", "0.1 prealpha", - "logo", icon, - NULL); -} - -void open_menu_item_activate(GtkMenuItem *menuitem, GtkFileChooserDialog *fcdialog) { - gtk_dialog_run(fcdialog); -} - -gboolean frame_image_button_press_event(GtkWidget *widget, GdkEventButton *button, int index) { - gchar buf[10]; - gint len = g_sprintf(buf, "%d", index); - gtk_text_buffer_insert_at_cursor(GTK_TEXT_BUFFER(source_buffer), buf, len); - return FALSE; -} - -void show_imageset_dialog() { - if (gen_sae_info->imageset->spriteset == NULL) return; - GtkWidget *dialog = gtk_dialog_new(); - GtkWidget *content_area = gtk_dialog_get_content_area(GTK_DIALOG(dialog)); - gtk_window_set_title(GTK_WINDOW(dialog), _("Imageset preview")); - gtk_window_set_transient_for(dialog, GTK_WINDOW(win)); - - int w = gen_sae_info->imageset->spriteset_width / gen_sae_info->imageset->width; - int h = gen_sae_info->imageset->spriteset_height / gen_sae_info->imageset->height; - - GtkWidget *hbox = NULL; - GtkWidget *image = NULL; - GtkWidget *event_box = NULL; - - int x, y; - for (y = 0; y < h; y++) { - hbox = gtk_hbox_new(TRUE, 0); - gtk_container_add(content_area, hbox); - for (x = 0; x < w; x++) { - event_box = gtk_event_box_new(); - g_signal_connect(G_OBJECT(event_box), "button-press-event", G_CALLBACK(frame_image_button_press_event), w * y + x); - gtk_box_pack_start(GTK_BOX(hbox), event_box, TRUE, TRUE, 0); - - image = gtk_image_new_from_pixbuf(get_sprite_by_index(w * y + x, gen_sae_info)); - gtk_widget_add_events(image, GDK_BUTTON_PRESS_MASK); - gtk_container_add(GTK_CONTAINER(event_box), image); - } - } - gtk_widget_show_all(dialog); -} - void load_config() { config_keys_load(config); gtk_file_chooser_select_filename(GTK_FILE_CHOOSER(data_folder_chooser_button), config->clientdata_folder); @@ -498,19 +505,6 @@ void save_config_and_quit() { gtk_main_quit(); } - -void free_animations(SAEInfo *sae_info) { - sae_info->animations = NULL; - - if (sae_info->animations_combo_box != NULL) - gtk_list_store_clear(GTK_LIST_STORE(gtk_combo_box_get_model(GTK_COMBO_BOX(sae_info->animations_combo_box)))); - - kill_timeout(sae_info->anim_tag); - sae_info->anim_tag = 0; - sae_info->sprite = frame_new(-1, 0, 0, 0); - set_sprite_by_index(0, sae_info); -} - int main(int argc, char *argv[]) { gtk_init(&argc, &argv); diff --git a/saedit/main.h b/saedit/main.h index 99340cc..163a685 100644 --- a/saedit/main.h +++ b/saedit/main.h @@ -12,6 +12,20 @@ #ifndef MAIN_H #define MAIN_H +#include +#include +#include +#include +#include +#include +#include + +#include "common.h" +#include "xml.h" +#include "config.h" +#include "sae.h" +#include "search.h" + const int MIN_WIDTH = 600; const int MIN_HEIGHT = 600; @@ -32,6 +46,7 @@ GtkWidget *xml_file_save_button = NULL; GtkWidget *imageset_preview_menu_item = NULL; GtkWidget *show_grid_menu_item = NULL; GtkWidget *source_view = NULL; +GtkWidget *about_dialog = NULL; GtkSourceBuffer *source_buffer = NULL; @@ -43,38 +58,50 @@ GdkPixbuf *icon = NULL; Options *paths; Keys *config; +//Cairo functions +cairo_surface_t *get_grid_surface(int w, int h); +gboolean darea_expose_event(GtkWidget *widget, GdkEventExpose *event, SAEInfo *sae_info); + +//String functions (common) gchar *markup_bold(gchar *str); void format_src_string(gchar *src); + +//File working void open_xml_file(GtkButton *button); +void save_to_xml_file(gchar *filename); + +//SAEInfo functions void free_imagesets(SAEInfo *sae_info); void free_actions(SAEInfo *sae_info); -void save_to_xml_file(gchar *filename); +void free_animations(SAEInfo *sae_info); +void free_imageset(SAEInfo *sae_info); + +//Callbacks void data_folder_set_callback(GtkFileChooserButton *widget, gpointer data); void show_wrong_source_buffer_dialog(); +void show_grid_menu_item_toggled_callback(GtkCheckMenuItem *checkmenuitem, gpointer user_data); +void actions_combo_box_changed_callback(GtkComboBox *widget, gpointer user_data); +void imagesets_combo_box_changed_callback(GtkComboBox *widget, gpointer user_data); +void open_menu_item_activate_callback(GtkMenuItem *menuitem, GtkFileChooserDialog *fcdialog); +gboolean frame_image_button_press_event_callback(GtkWidget *widget, GdkEventButton *button, int index); + +//Dialogs +void show_imageset_dialog(); +void show_about_dialog(); + void set_sprite_by_index(size_t index, SAEInfo *sae_info); void set_up_actions_by_imageset_name(gchar *imageset_name, SAEInfo *sae_info); gboolean set_up_imagesets(SAEInfo *sae_info); gboolean show_general_animation(SAEInfo *sae_info); gboolean set_up_action_by_name(const gchar *name, SAEInfo *sae_info); -void actions_combo_box_changed_callback(GtkComboBox *widget, gpointer user_data); void animations_combo_box_changed_callback(GtkComboBox *widget, gpointer user_data); void set_up_imageset_by_name(const gchar* name, SAEInfo *sae_info); -void imagesets_combo_box_changed_callback(GtkComboBox *widget, gpointer user_data); void parse_xml_buffer(GtkWidget *button, GtkSourceBuffer *buffer); void set_up_interface(); -void show_about_dialog(); -void show_imageset_dialog(); -gboolean frame_image_button_press_event(GtkWidget *widget, GdkEventButton *button, int index); -cairo_surface_t *get_grid_surface(int w, int h); -gboolean darea_expose_event(GtkWidget *widget, GdkEventExpose *event, SAEInfo *sae_info); void load_config(); void save_config_and_quit(); void load_options(); -void free_imageset(); -void show_grid_menu_item_toggled(GtkCheckMenuItem *checkmenuitem, gpointer user_data); -void open_menu_item_activate(GtkMenuItem *menuitem, GtkFileChooserDialog *fcdialog); void parse_xml_text(gchar *text, SAEInfo *sae_info); void show_animation(SAEInfo *sae_info); -void free_animations(SAEInfo *sae_info); #endif diff --git a/saedit/sae.c b/saedit/sae.c index 17027ea..736e90d 100644 --- a/saedit/sae.c +++ b/saedit/sae.c @@ -9,10 +9,6 @@ | | \*=======================================*/ -#include -#include -#include "common.h" -#include "xml.h" #include "sae.h" void kill_timeout(guint tag) { diff --git a/saedit/sae.h b/saedit/sae.h index e89db25..b6867e3 100644 --- a/saedit/sae.h +++ b/saedit/sae.h @@ -12,6 +12,11 @@ #ifndef SAE_H #define SAE_H +#include +#include +#include "common.h" +#include "xml.h" + void kill_timeout(guint tag); typedef struct { diff --git a/saedit/search.c b/saedit/search.c index 041d972..f98063f 100644 --- a/saedit/search.c +++ b/saedit/search.c @@ -9,12 +9,9 @@ | | \*=======================================*/ -#include -#include "common.h" #include "search.h" GtkWidget *search_text_view = NULL; -GtkWidget *search_find_dialog_entry = NULL; gchar *search_last_text = NULL; gboolean search_find_text(gchar *text) { @@ -28,11 +25,11 @@ gboolean search_find_text(gchar *text) { GtkTextIter m_start, m_end, start; gtk_text_buffer_get_selection_bounds(text_buffer, NULL, &start); - found = gtk_source_iter_forward_search(&start, text, 0, &m_start, &m_end, NULL); + found = gtk_source_iter_forward_search(&start, text, GTK_SOURCE_SEARCH_CASE_INSENSITIVE, &m_start, &m_end, NULL); if (!found) { gtk_text_buffer_get_start_iter(text_buffer, &start); - found = gtk_source_iter_forward_search(&start, text, 0, &m_start, &m_end, NULL); + found = gtk_source_iter_forward_search(&start, text, GTK_SOURCE_SEARCH_CASE_INSENSITIVE, &m_start, &m_end, NULL); } if (found) { @@ -54,17 +51,25 @@ gboolean search_find_next() { search_find_text(search_last_text); } -void search_find_dialog_response_callback(GtkDialog *dialog, +void search_find_dialog_response_callback(GtkWidget *dialog, gint response_id, - gpointer user_data) { - if (response_id != GTK_RESPONSE_ACCEPT) - return; + gpointer entry) { - if (!GTK_IS_TEXT_VIEW(search_text_view)) - return; + if (response_id == GTK_RESPONSE_CANCEL || response_id == GTK_RESPONSE_DELETE_EVENT) + gtk_widget_hide(dialog); + else { - if (GTK_IS_ENTRY(search_find_dialog_entry)) - search_find_text(g_strdup(gtk_entry_get_text(GTK_ENTRY(search_find_dialog_entry)))); + g_return_if_fail(response_id == GTK_RESPONSE_ACCEPT); + g_return_if_fail(GTK_IS_TEXT_VIEW(search_text_view)); + g_return_if_fail(GTK_IS_ENTRY(GTK_ENTRY(entry))); + + search_find_text(g_strdup(gtk_entry_get_text(GTK_ENTRY(entry)))); + + } +} + +void search_init(GtkWidget *text_view) { + search_text_view = text_view; } void search_find_dialog_show(GtkWindow *parent, @@ -91,10 +96,9 @@ void search_find_dialog_show(GtkWindow *parent, g_signal_connect(dialog, "response", G_CALLBACK(search_find_dialog_response_callback), - NULL); + entry); search_text_view = text_view; - search_find_dialog_entry = entry; gtk_dialog_run(dialog); } diff --git a/saedit/search.h b/saedit/search.h index 5d2b5ff..350bc70 100644 --- a/saedit/search.h +++ b/saedit/search.h @@ -12,9 +12,15 @@ #ifndef SEARCH_H #define SEARCH_H +#include +#include +#include "common.h" + +void search_init(GtkWidget *text_view); gboolean search_find_text(gchar *text); gboolean search_find_next(); -void search_find_dialog_show(GtkWindow *parent, - GtkWidget *text_view); +void search_find_dialog_response_callback(GtkWidget *dialog, + gint response_id, + gpointer entry); #endif diff --git a/saedit/xml.c b/saedit/xml.c index 6120d5c..2968082 100644 --- a/saedit/xml.c +++ b/saedit/xml.c @@ -9,9 +9,6 @@ | | \*=======================================*/ -#include -#include -#include "common.h" #include "xml.h" gchar **xml_attr_new(gchar *name, gchar *value) { diff --git a/saedit/xml.h b/saedit/xml.h index 02bd207..2a8875e 100644 --- a/saedit/xml.h +++ b/saedit/xml.h @@ -11,6 +11,10 @@ #ifndef XML_H #define XML_H +#include +#include +#include "common.h" + gchar **xml_attr_new(gchar *name, gchar *value); gchar *xml_node_get_attr_value(XMLNode *node, gchar *attr_name); gint xml_node_compare_with_name_func(gconstpointer a, gconstpointer b); -- cgit v1.2.3-70-g09d2 From 95213c9cdb04d1791d55c231331467edce9ab722 Mon Sep 17 00:00:00 2001 From: Vasily_Makarov Date: Wed, 19 Oct 2011 23:49:08 +0400 Subject: Correct config loading/saving --- saedit/config.c | 11 +++++++---- saedit/config.h | 7 ++++++- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/saedit/config.c b/saedit/config.c index 98a1325..f28ab54 100644 --- a/saedit/config.c +++ b/saedit/config.c @@ -56,10 +56,13 @@ void config_keys_save(Keys *keys) { POSTFIX_FOLDER, NULL)); g_key_file_set_boolean(key_file, "General", "ShowGrid", keys->show_grid); - g_file_set_contents(KEYS_CONFIG_FILE, - g_key_file_to_data(key_file, NULL, NULL), - -1, - NULL); + + mkdir(KEYS_CONFIG_DIR, S_IRWXU); + int fd = g_creat(KEYS_CONFIG_FILE, S_IREAD | S_IWRITE); + gchar *buf = g_key_file_to_data(key_file, NULL, NULL); + write(fd, buf, strlen(buf), NULL); + close(fd); + g_key_file_free(key_file); } diff --git a/saedit/config.h b/saedit/config.h index e7c5fb5..e8e064a 100644 --- a/saedit/config.h +++ b/saedit/config.h @@ -14,6 +14,10 @@ #include #include +#include +#include +#include +#include #include "common.h" #include "xml.h" @@ -21,7 +25,8 @@ #define KEY_SHOW_GRID_DEFAULT TRUE #define KEY_CLIENTDATA_FOLDER_DEFAULT "" -#define KEYS_CONFIG_FILE g_strjoin(SEPARATOR_SLASH, g_get_user_config_dir(), "saedit/config.ini", NULL) +#define KEYS_CONFIG_DIR g_strjoin(SEPARATOR_SLASH, g_get_user_config_dir(), "saedit", NULL) +#define KEYS_CONFIG_FILE g_strjoin(SEPARATOR_SLASH, KEYS_CONFIG_DIR, "config.ini", NULL) typedef struct { gchar *sprites; -- cgit v1.2.3-70-g09d2 From 97911ac99f187a7c2c3eb4324b04cbb39b8e9bee Mon Sep 17 00:00:00 2001 From: Vasily_Makarov Date: Thu, 20 Oct 2011 09:18:58 +0400 Subject: Correct freeing info after opening new file or creating new --- saedit/interface.c | 2 +- saedit/interface.ui | 46 +++++++++++++++++++++++----------------------- saedit/main.c | 7 ++++++- saedit/main.h | 3 +++ 4 files changed, 33 insertions(+), 25 deletions(-) diff --git a/saedit/interface.c b/saedit/interface.c index 8238416..cda7493 100644 --- a/saedit/interface.c +++ b/saedit/interface.c @@ -57,7 +57,7 @@ void file_new() { gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(xml_file_chooser_button), ""); gtk_widget_set_sensitive(reload_menu_item, FALSE); - free_lists(gen_sae_info); + free_current_info(); } void set_up_interface() { diff --git a/saedit/interface.ui b/saedit/interface.ui index 73193ee..59127fd 100644 --- a/saedit/interface.ui +++ b/saedit/interface.ui @@ -471,7 +471,7 @@ Reid Yaro <reidyaro@gmail.com> False False - 4 + 5 @@ -490,21 +490,6 @@ Reid Yaro <reidyaro@gmail.com> 5 - - - True - False - Imagesets - - - - - - False - False - 7 - - Parse XML Buffer @@ -517,14 +502,14 @@ Reid Yaro <reidyaro@gmail.com> False False - 7 + 6 - + True False - Actions + Imagesets @@ -532,7 +517,7 @@ Reid Yaro <reidyaro@gmail.com> False False - 9 + 7 @@ -550,10 +535,10 @@ Reid Yaro <reidyaro@gmail.com> - + True False - Directions + Actions @@ -561,7 +546,7 @@ Reid Yaro <reidyaro@gmail.com> False False - 11 + 9 @@ -577,6 +562,21 @@ Reid Yaro <reidyaro@gmail.com> 11 + + + True + False + Directions + + + + + + False + False + 11 + + True diff --git a/saedit/main.c b/saedit/main.c index 8385f60..bf5b5e4 100644 --- a/saedit/main.c +++ b/saedit/main.c @@ -110,7 +110,7 @@ void open_xml_file(GtkButton *button) { gtk_file_chooser_unselect_all(GTK_FILE_CHOOSER(xml_file_chooser_button)); } - free_lists(gen_sae_info); + free_current_info(); } void save_to_xml_file(gchar *filename) { @@ -158,6 +158,11 @@ void free_lists(SAEInfo *sae_info) { free_animations(sae_info); } +void free_current_info() { + free_lists(gen_sae_info); + player = NULL; +} + //Callbacks void data_folder_set_callback(GtkFileChooserButton *widget, gpointer data) { diff --git a/saedit/main.h b/saedit/main.h index 163a685..af78d8f 100644 --- a/saedit/main.h +++ b/saedit/main.h @@ -75,6 +75,9 @@ void free_imagesets(SAEInfo *sae_info); void free_actions(SAEInfo *sae_info); void free_animations(SAEInfo *sae_info); void free_imageset(SAEInfo *sae_info); +void free_lists(SAEInfo *sae_info); + +void free_current_info(); //Callbacks void data_folder_set_callback(GtkFileChooserButton *widget, gpointer data); -- cgit v1.2.3-70-g09d2