#include "main.h" #include "errors.h" #include "config.h" #include "file.h" #include "buffer.h" #include void store_append_action (const Action *action, gpointer user_data) { int hp; gchar *name; GtkTreeIter iter; action_get_hp_and_name (action, &hp, &name); gtk_list_store_append (store_actions, &iter); gtk_list_store_set ( store_actions, &iter, 0, name, 1, hp, 2, get_action_id (hp, name), -1 ); } void parse_buffer_clicked_cb ( GtkToolButton *button, gpointer user_data ) { gchar *buffer_text; GError *error = NULL; GList *actions; release_context (); buffer_text = buffer_get_text (); context = sprite_context_new ( config_keys_get_data_folder_path () ); interactor = interactor_new (context); sprite_context_add_sprite ( context, xml_parse_buffer (buffer_text, &error), -1 ); if (error != NULL) { post_error ("XML parser", error->message); g_error_free (error); } g_free (buffer_text); interactor_set_updated_callback (interactor, intr_updated); actions = sprite_context_get_actions (context); g_list_foreach (actions, (GFunc) store_append_action, NULL); g_list_free (actions); gtk_widget_queue_draw (d_area); } void append_direction (const gchar *direction, gpointer user_data) { gchar *display; g_return_if_fail (direction != NULL); if (strlen (direction) == 0) display = g_strdup (""); else display = g_strdup (direction); gtk_combo_box_text_append ( cb_directions, direction, display ); g_free (display); } void action_changed_cb (GtkComboBox *cbox, gpointer user_data) { GList *directions; GtkTreeIter iter; gint hp; gchar *name; const Action *action; gboolean w_run; g_return_if_fail (cbox == cb_actions); if (interactor == NULL) return; if (!gtk_combo_box_get_active_iter (cbox, &iter)) return; gtk_tree_model_get ( GTK_TREE_MODEL (store_actions), &iter, 0, &name, 1, &hp, -1 ); w_run = interactor_loop_running (interactor); if (w_run) interactor_loop_stop (interactor); gtk_combo_box_text_remove_all (cb_directions); action = sprite_context_get_action (context, hp, name); g_return_if_fail (action != NULL); directions = action_get_directions (action); g_list_foreach (directions, (GFunc) append_direction, NULL); g_list_free (directions); interactor_set_action (interactor, hp, name); if (w_run) interactor_loop_start (interactor, 10, 10); } void direction_changed_cb (GtkComboBox *cbox, gpointer user_data) { gchar *active_text; g_return_if_fail (cbox == GTK_COMBO_BOX (cb_directions)); if (interactor == NULL) return; active_text = gtk_combo_box_text_get_active_text (cb_directions); if (active_text == NULL) return; interactor_set_direction ( interactor, active_text ); } void play_pause_clicked_cb ( GtkToolButton *button, gpointer user_data ) { if (interactor == NULL) return; if (interactor_loop_running (interactor)) interactor_loop_stop (interactor); else interactor_loop_start (interactor, 10, 10); } void next_frame_clicked_cb ( GtkToolButton *button, gpointer user_data ) { if (interactor == NULL) return; interactor_skip_current_frame (interactor); } void first_frame_clicked_cb ( GtkToolButton *button, gpointer user_data ) { if (interactor == NULL) return; interactor_loop_stop (interactor); interactor_reset_animation (interactor); } void choose_df_activated_cb ( GtkMenuItem *item, gpointer user_data ) { TreeFolderView *tfview; GtkWidget *dialog; gint res; gchar *filename; g_return_if_fail (IS_TREE_FOLDER_VIEW (user_data)); tfview = TREE_FOLDER_VIEW (user_data); dialog = gtk_file_chooser_dialog_new ( "Choose data folder", GTK_WINDOW (main_window), GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, "Cancel", GTK_RESPONSE_CANCEL, "Open", GTK_RESPONSE_ACCEPT, NULL ); gtk_file_chooser_set_filename ( GTK_FILE_CHOOSER (dialog), tree_folder_view_get_filename (tfview) ); res = gtk_dialog_run (GTK_DIALOG (dialog)); if (res == GTK_RESPONSE_ACCEPT) { filename = gtk_file_chooser_get_filename ( GTK_FILE_CHOOSER (dialog) ); config_keys_set_data_folder_path (filename); config_keys_save (); tree_folder_view_set_filename ( tfview, filename ); g_free (filename); } gtk_widget_destroy (dialog); } void open_file_activated_cb ( GtkMenuItem *item, gpointer user_data ) { GtkWidget *dialog; GtkFileChooser *chooser; gint res; gchar *data_folder; dialog = gtk_file_chooser_dialog_new ( NULL, GTK_WINDOW (main_window), GTK_FILE_CHOOSER_ACTION_OPEN, "_Cancel", GTK_RESPONSE_CANCEL, "_Open", GTK_RESPONSE_ACCEPT, NULL ); data_folder = config_keys_get_data_folder_path (); chooser = GTK_FILE_CHOOSER (dialog); gtk_file_chooser_set_current_folder ( chooser, data_folder ); res = gtk_dialog_run (GTK_DIALOG (dialog)); if (res == GTK_RESPONSE_ACCEPT) { gchar *filename = gtk_file_chooser_get_filename (chooser); open_file (filename); g_free (filename); } gtk_widget_destroy (dialog); g_free (data_folder); } void save_file_as_activated_cb ( GtkMenuItem *item, gpointer user_data ) { GtkWidget *dialog; GtkFileChooser *chooser; gint res; gchar *data_folder; dialog = gtk_file_chooser_dialog_new ( NULL, GTK_WINDOW (main_window), GTK_FILE_CHOOSER_ACTION_SAVE, "_Cancel", GTK_RESPONSE_CANCEL, "_Save", GTK_RESPONSE_ACCEPT, NULL ); data_folder = config_keys_get_data_folder_path (); chooser = GTK_FILE_CHOOSER (dialog); gtk_file_chooser_set_do_overwrite_confirmation (chooser, TRUE); if (get_opened_file_name () != NULL) { gtk_file_chooser_set_current_name ( chooser, get_opened_file_name () ); } else { gtk_file_chooser_set_current_folder ( chooser, data_folder ); } res = gtk_dialog_run (GTK_DIALOG (dialog)); if (res == GTK_RESPONSE_ACCEPT) { gchar *filename = gtk_file_chooser_get_filename (chooser); save_file (filename); g_free (filename); } gtk_widget_destroy (dialog); g_free (data_folder); } void save_file_activated_cb ( GtkMenuItem *item, gpointer user_data ) { const gchar *filename; filename = get_opened_file_name (); if (filename == NULL) { save_file_as_activated_cb (item, user_data); return; } save_file (NULL); } void zoom_adjustment_value_changed_cb ( GtkAdjustment *adjustment, gpointer user_data ) { sprite_drawing_area_set_scale_factor ( SPRITE_DRAWING_AREA (user_data), gtk_adjustment_get_value (adjustment) ); gtk_widget_queue_draw (GTK_WIDGET (user_data)); } void tfview_file_activated_cb ( TreeFolderView *tfview, gchar *filename, gpointer user_data ) { open_file (filename); } void sourceview_buffer_modified_changed_cb ( GtkTextBuffer *textbuffer, gpointer user_data ) { update_window_title (); } void new_file_activated_cb ( GtkMenuItem *item, gpointer user_data ) { open_file (NULL); } void view_reset_to_center_activate_cb ( GtkMenuItem *item, gpointer user_data ) { sprite_drawing_area_set_center ( SPRITE_DRAWING_AREA (d_area), 0, 0 ); gtk_widget_queue_draw (d_area); } void show_tile_grid_toggled_cb ( GtkCheckMenuItem *item, gpointer user_data ) { sda_layer_set_visible ( tile_grid_layer, gtk_check_menu_item_get_active (item) ); gtk_widget_queue_draw (d_area); } void show_pixel_grid_toggled_cb ( GtkCheckMenuItem *item, gpointer user_data ) { sda_layer_set_visible ( pixel_grid_layer, gtk_check_menu_item_get_active (item) ); gtk_widget_queue_draw (d_area); } void menuitem_about_activate_cb ( GtkMenuItem *item, gpointer user_data ) { gtk_dialog_run (GTK_DIALOG (user_data)); } void about_dialog_response_cb ( GtkDialog *dialog, gint response_id, gpointer user_data ) { if (response_id == GTK_RESPONSE_DELETE_EVENT) { gtk_widget_hide (GTK_WIDGET (dialog)); } }