diff options
Diffstat (limited to 'saedit')
-rw-r--r-- | saedit/main.c | 30 | ||||
-rw-r--r-- | saedit/main.h | 9 |
2 files changed, 35 insertions, 4 deletions
diff --git a/saedit/main.c b/saedit/main.c index 8577745..51acc87 100644 --- a/saedit/main.c +++ b/saedit/main.c @@ -391,7 +391,32 @@ void imagesets_combo_box_changed_handler(GtkComboBox *widget, gpointer user_data set_up_imageset_by_node(list->data); } +void load_options() { + paths->sprites = NULL; + gchar *datapath = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(data_folder_chooser_button)); + gchar *path = g_strjoin(SLASH_SEPARATOR, datapath, "paths.xml", NULL); + XMLNode *node = ibus_xml_parse_file(path); + if (node != NULL) { + GList *list = node->sub_nodes; + while (TRUE) { + list = g_list_find_custom(list, "option", xml_node_compare_with_name); + if (list == NULL) + break; + gchar *name_attr = xml_node_get_attr_value(list->data, "name"); + if (name_attr != NULL) { + if (g_strcmp0(name_attr, "sprites") == 0) + paths->sprites = xml_node_get_attr_value(list->data, "value"); + } + list = list->next; + } + } + if (paths->sprites == NULL) paths->sprites = OPTION_SPRITES_DEFAULT; + paths->sprites = g_strjoin(SLASH_SEPARATOR, datapath, paths->sprites, NULL); +} + void parse_xml_buffer(GtkWidget *button, GtkSourceBuffer *buffer) { + load_options(); + GtkTextIter beg, end; gtk_text_buffer_get_start_iter(GTK_TEXT_BUFFER(buffer), &beg); gtk_text_buffer_get_end_iter(GTK_TEXT_BUFFER(buffer), &end); @@ -402,13 +427,13 @@ void parse_xml_buffer(GtkWidget *button, GtkSourceBuffer *buffer) { return; } - gchar *spritespath = g_strjoin(SLASH_SEPARATOR, gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(data_folder_chooser_button)), SPRITES_PATH, NULL); + printf("%s", paths->sprites); GList *list = g_list_find_custom(root->sub_nodes, "include", xml_node_compare_with_name); while (list != NULL) { XMLNode *node = list->data; gchar *file_attr = xml_node_get_attr_value(node, "file"); if (file_attr != NULL) { - file_attr = g_strjoin(NULL, spritespath, file_attr, NULL); + file_attr = g_strjoin(NULL, paths->sprites, file_attr, NULL); gchar *buf; if (g_file_get_contents(file_attr, &buf, NULL, NULL)) g_list_concat(root->sub_nodes, ibus_xml_parse_buffer(buf)->sub_nodes); @@ -639,6 +664,7 @@ int main(int argc, char *argv[]) { icon = gdk_pixbuf_new_from_file(ICON_FILE, NULL); + paths = g_new0(options, 1); current_sprite = sprite_info_new(-1, 0, 0); imageset = imageset_info_new(); diff --git a/saedit/main.h b/saedit/main.h index 56ac08a..00ba08c 100644 --- a/saedit/main.h +++ b/saedit/main.h @@ -27,7 +27,7 @@ const gchar *ICON_FILE = "icon.svg"; const gchar *CONFIG_FILE = "/saedit/config.ini"; const gchar *FOLDER_POSTFIX = "/..."; const gchar *SLASH_SEPARATOR = "/"; -const gchar *SPRITES_PATH = "graphics/sprites/"; +const gchar *OPTION_SPRITES_DEFAULT = "graphics/sprites/"; typedef struct { @@ -44,6 +44,10 @@ typedef struct { static sprite_info *sprite_info_new(int index, int offsetX, int offsetY); typedef struct { + gchar *sprites; +} options; + +typedef struct { XMLNode *node; int offsetX; int offsetY; @@ -80,9 +84,9 @@ GdkPixbuf *icon = NULL; XMLNode *root = NULL; imageset_info *imageset = NULL; - sprite_info *current_sprite; guint running_animation = 0; +options *paths; static gboolean show_animation_by_sub_nodes (GList *sub_nodes); static gchar *markup_bold(gchar *str); @@ -119,3 +123,4 @@ static cairo_surface_t *get_grid_surface(int w, int h); static gboolean darea_expose_event(GtkWidget *widget, GdkEventExpose *event, gpointer data); static void load_config(); static void save_config_and_quit(); +static void load_options(); |