X-Git-Url: https://git.stderr.nl/gitweb?a=blobdiff_plain;f=player%2Fpreferences.c;h=b457c1ef5e37e0731f78fac8570f7d8033f75e20;hb=HEAD;hp=504cbd6227e31fb5ad70089c35f82fd49beb76ee;hpb=06f2cc3823e21032a016dfdfd3e53ba558cea69f;p=projects%2Fchimara%2Fchimara.git diff --git a/player/preferences.c b/player/preferences.c index 504cbd6..b457c1e 100644 --- a/player/preferences.c +++ b/player/preferences.c @@ -30,6 +30,7 @@ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#include #include #include #include @@ -40,15 +41,108 @@ GObject *load_object(const gchar *name); static GtkTextTag *current_tag; +static GtkListStore *preferred_list; static void style_tree_select_callback(GtkTreeSelection *selection, ChimaraGlk *glk); +/* Internal functions to convert from human-readable names in the config file +to enums and back. Later: replace with plugin functions. */ +static ChimaraIFFormat +parse_format(const char *format) +{ + if(strcmp(format, "z5") == 0) + return CHIMARA_IF_FORMAT_Z5; + if(strcmp(format, "z6") == 0) + return CHIMARA_IF_FORMAT_Z6; + if(strcmp(format, "z8") == 0) + return CHIMARA_IF_FORMAT_Z8; + if(strcmp(format, "zblorb") == 0) + return CHIMARA_IF_FORMAT_Z_BLORB; + if(strcmp(format, "glulx") == 0) + return CHIMARA_IF_FORMAT_GLULX; + if(strcmp(format, "gblorb") == 0) + return CHIMARA_IF_FORMAT_GLULX_BLORB; + return CHIMARA_IF_FORMAT_NONE; +} + +static const char *format_strings[CHIMARA_IF_NUM_FORMATS] = { + "z5", "z6", "z8", "zblorb", "glulx", "gblorb" +}; + +static const char *format_to_string(ChimaraIFFormat format) +{ + if(format >= 0 && format < CHIMARA_IF_NUM_FORMATS) + return format_strings[format]; + return "unknown"; +} + +static const char *format_display_strings[CHIMARA_IF_NUM_FORMATS] = { + N_("Z-machine version 5"), + N_("Z-machine version 6"), + N_("Z-machine version 8"), + N_("Z-machine Blorb file"), + N_("Glulx"), + N_("Glulx Blorb file") +}; + +static const char * +format_to_display_string(ChimaraIFFormat format) +{ + if(format >= 0 && format < CHIMARA_IF_NUM_FORMATS) + return gettext(format_display_strings[format]); + return _("Unknown"); +} + +static ChimaraIFInterpreter +parse_interpreter(const char *interp) +{ + if(strcmp(interp, "frotz") == 0) + return CHIMARA_IF_INTERPRETER_FROTZ; + if(strcmp(interp, "nitfol") == 0) + return CHIMARA_IF_INTERPRETER_NITFOL; + if(strcmp(interp, "glulxe") == 0) + return CHIMARA_IF_INTERPRETER_GLULXE; + if(strcmp(interp, "git") == 0) + return CHIMARA_IF_INTERPRETER_GIT; + if(strcmp(interp, "bocfel") == 0) + return CHIMARA_IF_INTERPRETER_BOCFEL; + return CHIMARA_IF_INTERPRETER_NONE; +} + +static const char *interpreter_strings[CHIMARA_IF_NUM_INTERPRETERS] = { + "frotz", "nitfol", "glulxe", "git", "bocfel" +}; + +static const char * +interpreter_to_string(ChimaraIFInterpreter interp) +{ + if(interp >= 0 && interp < CHIMARA_IF_NUM_INTERPRETERS) + return interpreter_strings[interp]; + return "unknown"; +} + +static const char *interpreter_display_strings[CHIMARA_IF_NUM_INTERPRETERS] = { + N_("Frotz"), + N_("Nitfol"), + N_("Glulxe"), + N_("Git"), + N_("Bocfel") +}; + +static const char * +interpreter_to_display_string(ChimaraIFInterpreter interp) +{ + if(interp >= 0 && interp < CHIMARA_IF_NUM_INTERPRETERS) + return gettext(interpreter_display_strings[interp]); + return _("Unknown"); +} + /* Create the preferences dialog. */ void preferences_create(ChimaraGlk *glk) { /* Initialize the tree of style names */ - GtkTreeStore *style_list = gtk_tree_store_new(1, G_TYPE_STRING); + GtkTreeStore *style_list = GTK_TREE_STORE( load_object("style-list") ); GtkTreeIter buffer, grid, buffer_child, grid_child; gtk_tree_store_append(style_list, &buffer, NULL); @@ -57,8 +151,8 @@ preferences_create(ChimaraGlk *glk) gtk_tree_store_set(style_list, &grid, 0, "Text grid", -1); int i; - gint num_tags = chimara_glk_get_num_tag_names(glk); - const gchar **tag_names = chimara_glk_get_tag_names(glk); + unsigned int num_tags; + const gchar **tag_names = chimara_glk_get_tag_names(glk, &num_tags); for(i=0; i