#include #include "xml.h" #include "config.h" #include "spritedrawingarea.h" #include "action.h" #include "errors.h" #include "file.h" #include "buffer.h" #include "xmlsetup.h" #include "drawfuncs.h" #include "main.h" #include void intr_updated (Interactor *interactor) { gtk_widget_queue_draw (d_area); gtk_tool_button_set_icon_name ( GTK_TOOL_BUTTON (tbtn_play), interactor_loop_running (interactor) ? "media-playback-pause" : "media-playback-start" ); if (interactor != NULL) { gboolean result; gint hp; gchar *id, *name; buffer_mark_line ( interactor_get_line_no (interactor) - 1 ); result = interactor_get_action_hp_and_name ( interactor, &hp, &name ); if (!result) return; id = get_action_id (hp, name); gtk_combo_box_set_active_id (cb_actions, id); g_free (id); gtk_combo_box_set_active_id ( GTK_COMBO_BOX (cb_directions), interactor_get_animation_direction (interactor) ); } else buffer_mark_line (-1); } void release_context () { xml_setup_clear (); if (interactor != NULL) { interactor_free (interactor); interactor = NULL; intr_updated (interactor); } gtk_combo_box_text_remove_all (cb_directions); gtk_list_store_clear (store_actions); if (context != NULL) { sprite_context_free (context); context = NULL; } } void update_window_title () { gchar *title, *data_folder, *file_name; const gchar *opened_file_name; gboolean modified = buffer_get_modified (); data_folder = config_keys_get_data_folder_path (); opened_file_name = get_opened_file_name (); if ( opened_file_name != NULL && g_str_has_prefix (opened_file_name, data_folder) ) { file_name = g_strconcat ( "", opened_file_name + strlen (data_folder), NULL ); } else { file_name = g_strdup (opened_file_name); } if (file_name == NULL) { file_name = g_strdup ("New animation"); } title = g_strconcat ( modified ? "*" : "", file_name, NULL ); gtk_window_set_title (GTK_WINDOW (main_window), title); g_free (title); g_free (file_name); } void setup_source_view (GtkSourceView *source_view) { GtkSourceLanguageManager *langman; GtkSourceMarkAttributes *attrs; langman = gtk_source_language_manager_get_default(); gtk_source_buffer_set_language ( GTK_SOURCE_BUFFER ( gtk_text_view_get_buffer ( GTK_TEXT_VIEW (source_view) ) ), gtk_source_language_manager_get_language (langman, "xml") ); attrs = gtk_source_mark_attributes_new (); gtk_source_mark_attributes_set_icon_name (attrs, "media-record"); gtk_source_view_set_mark_attributes ( source_view, "active-line", attrs, 0 ); gtk_widget_show_all (GTK_WIDGET (source_view)); } GtkWidget * gtk_builder_get_widget ( GtkBuilder *builder, const gchar *name ) { return GTK_WIDGET ( gtk_builder_get_object (builder, name) ); } gboolean window_main_delete_event_cb ( GtkWidget *widget, GdkEvent *event, gpointer user_data ) { return show_unsaved_changes_dialog (); } int main (int argc, char *argv[]) { GtkBuilder *builder; gchar *path; gtk_init (&argc, &argv); builder = gtk_builder_new (); gtk_builder_add_from_file (builder, "iface.ui", NULL); gtk_builder_connect_signals (builder, NULL); main_window = gtk_builder_get_widget (builder, "window-main"); tf_view = gtk_builder_get_widget (builder, "treefolderview-main"); d_area = gtk_builder_get_widget (builder, "drawingarea-main"); source_view = gtk_builder_get_widget (builder, "sourceview-main"); tbtn_play = gtk_builder_get_widget (builder, "button-anim-play"); cb_actions = GTK_COMBO_BOX ( gtk_builder_get_widget (builder, "cbox-actions") ); cb_directions = GTK_COMBO_BOX_TEXT ( gtk_builder_get_widget (builder, "cboxtext-directions") ); store_actions = GTK_LIST_STORE ( gtk_builder_get_object (builder, "liststore-actions") ); zoom_adj = GTK_ADJUSTMENT ( gtk_builder_get_object (builder, "zoom-adjustment") ); g_object_unref (builder); setup_source_view (GTK_SOURCE_VIEW (source_view)); update_window_title (); path = config_keys_get_data_folder_path (); tree_folder_view_set_filename ( TREE_FOLDER_VIEW (tf_view), path ); g_free (path); sprite_drawing_area_add_layer ( SPRITE_DRAWING_AREA (d_area), sda_layer_new (interactor_sprite_layer_draw_func, &interactor) ); tile_grid_layer = sda_layer_new ( tile_grid_layer_draw_func, NULL ); sda_layer_set_z_index (tile_grid_layer, 512); sprite_drawing_area_add_layer ( SPRITE_DRAWING_AREA (d_area), tile_grid_layer ); pixel_grid_layer = sda_layer_new ( pixel_grid_layer_draw_func, NULL ); sda_layer_set_z_index (pixel_grid_layer, 512 + 1); sda_layer_set_visible (pixel_grid_layer, FALSE); sprite_drawing_area_add_layer ( SPRITE_DRAWING_AREA (d_area), pixel_grid_layer ); gtk_widget_show_all (main_window); gtk_main(); return 0; }