summaryrefslogtreecommitdiff
path: root/window_config.c
diff options
context:
space:
mode:
authorJon Bergli Heier <snakebite@jvnv.net>2010-03-21 00:19:02 +0100
committerJon Bergli Heier <snakebite@jvnv.net>2010-03-21 00:19:02 +0100
commit5ebed0cd5dc2eb2f71e18b24148903f3c10ebf69 (patch)
tree8da511b975aea9f8e8eb081993a761031a1996e2 /window_config.c
parentb6b63a3c51eab072483ac0c7ad07f107bb790788 (diff)
Implemented a very basic configuration dialog.
This code is a bit hackish, all configuration options should be collected in a single place (eg. a config struct) in order to easily keep track of all configuration options.
Diffstat (limited to 'window_config.c')
-rw-r--r--window_config.c100
1 files changed, 100 insertions, 0 deletions
diff --git a/window_config.c b/window_config.c
new file mode 100644
index 0000000..a8de897
--- /dev/null
+++ b/window_config.c
@@ -0,0 +1,100 @@
+#include "window_config.h"
+#include "config_ui.h"
+#include "walls_conf.h"
+#include "preload.h"
+#include "wallpapers.h"
+
+struct window_config_t *window_config_new(GtkWindow *parent) {
+ GtkBuilder *builder;
+ GtkDialog *dialog;
+ GtkComboBox *interp_combo;
+ GtkHScale *preload_scale;
+ GtkListStore *liststore;
+ GtkTreeIter iter;
+ GError *error = NULL;
+ GtkCellRenderer *cell;
+ struct window_config_t *wct;
+
+ int interp_mode = conf_get_int("walls", "interpolation_mode", GDK_INTERP_NEAREST);
+ int max_preload = conf_get_int("walls", "max_preload", 2);
+
+ builder = gtk_builder_new();
+ if(!gtk_builder_add_from_string(builder, config_ui_string, -1, &error)) {
+ g_warning("%s", error->message);
+ g_error_free(error);
+ return NULL;
+ }
+
+ interp_combo = GTK_COMBO_BOX(gtk_builder_get_object(builder, "interp_combo"));
+ liststore = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_INT);
+
+ gtk_list_store_append(liststore, &iter);
+ gtk_list_store_set(liststore, &iter, 0, "Nearest", 1, GDK_INTERP_NEAREST, -1);
+
+ gtk_list_store_append(liststore, &iter);
+ gtk_list_store_set(liststore, &iter, 0, "Tiles", 1, GDK_INTERP_TILES, -1);
+
+ gtk_list_store_append(liststore, &iter);
+ gtk_list_store_set(liststore, &iter, 0, "Bilinear", 1, GDK_INTERP_BILINEAR, -1);
+
+ gtk_list_store_append(liststore, &iter);
+ gtk_list_store_set(liststore, &iter, 0, "Hyper", 1, GDK_INTERP_HYPER, -1);
+
+ gtk_combo_box_set_model(interp_combo, GTK_TREE_MODEL(liststore));
+ g_object_unref(liststore);
+
+ cell = gtk_cell_renderer_text_new();
+ gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(interp_combo), cell, TRUE);
+ gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(interp_combo), cell, "text", 0, NULL);
+
+ switch(interp_mode) {
+ case GDK_INTERP_TILES:
+ gtk_combo_box_set_active(interp_combo, 1);
+ break;
+ case GDK_INTERP_BILINEAR:
+ gtk_combo_box_set_active(interp_combo, 2);
+ break;
+ case GDK_INTERP_HYPER:
+ gtk_combo_box_set_active(interp_combo, 3);
+ break;
+ default:
+ gtk_combo_box_set_active(interp_combo, 0);
+ }
+
+ preload_scale = GTK_HSCALE(gtk_builder_get_object(builder, "preload_scale"));
+ gtk_range_set_value(GTK_RANGE(preload_scale), max_preload);
+
+ dialog = GTK_DIALOG(gtk_builder_get_object(builder, "config_dialog"));
+ gtk_window_set_transient_for(GTK_WINDOW(dialog), parent);
+ gtk_builder_connect_signals(builder, dialog);
+ g_object_unref(G_OBJECT(builder));
+
+ wct = g_malloc(sizeof(struct window_config_t));
+ wct->dialog = dialog;
+ wct->interp_combo = interp_combo;
+ wct->preload_scale = GTK_RANGE(preload_scale);
+
+ return wct;
+}
+
+void window_config_save(struct window_config_t *wct) {
+ GValue value = {0};
+
+ int interp_mode = GDK_INTERP_NEAREST;
+ int max_preload = 2;
+
+ GtkListStore *liststore = GTK_LIST_STORE(gtk_combo_box_get_model(wct->interp_combo));
+ GtkTreeIter iter;
+ gtk_combo_box_get_active_iter(wct->interp_combo, &iter);
+ gtk_tree_model_get_value(GTK_TREE_MODEL(liststore), &iter, 1, &value);
+ interp_mode = g_value_get_int(&value);
+ g_value_unset(&value);
+
+ max_preload = gtk_range_get_value(wct->preload_scale);
+
+ g_key_file_set_integer(keyfile, "walls", "interpolation_mode", interp_mode);
+ interp_type = interp_mode;
+
+ g_key_file_set_integer(keyfile, "walls", "max_preload", max_preload);
+ preload_max = max_preload;
+}