Enlightenment CVS committal

Author  : dj2
Project : e17
Module  : libs/ewl

Dir     : e17/libs/ewl/tools/ewl_config


Modified Files:
        Makefile.am ewl_config.c 


Log Message:
- add saving abilities to ewl_config data
- convert ewl_config to edit/save ewl's config data. should be able to save
  system data if you have permissions, otherwise saves into your home
  directory.
  - should do everything except colour classes

===================================================================
RCS file: /cvs/e/e17/libs/ewl/tools/ewl_config/Makefile.am,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -3 -r1.7 -r1.8
--- Makefile.am 30 Oct 2005 07:41:05 -0000      1.7
+++ Makefile.am 1 Oct 2006 07:27:11 -0000       1.8
@@ -1,11 +1,11 @@
-AUTOMAKE_OPTIONS = 1.4 foreign
 MAINTAINERCLEANFILES = Makefile.in
 
-AM_CFLAGS              =       -W -Wall -Wno-implicit
-INCLUDES               =       -I$(top_srcdir)/src @edje_cflags@ 
@ecore_cflags@ @evas_cflags@ -I/usr/X11R6/include
+INCLUDES = -I$(top_srcdir)/src/lib -I$(top_builddir)/src/lib
+AM_CFLAGS = -W -Wall -Wno-implicit
 
-bin_PROGRAMS                   =       ewl_config
+bin_PROGRAMS = ewl_config
+
+ewl_config_DEPENDENCIES = $(top_builddir)/src/lib/libewl.la
+ewl_config_SOURCES = ewl_config.c
+ewl_config_LDADD = $(top_builddir)/src/lib/libewl.la
 
-ewl_config_DEPENDENCIES                =       $(top_builddir)/src/libewl.la
-ewl_config_SOURCES             =       ewl_config.c
-ewl_config_LDADD                       = $(top_builddir)/src/libewl.la 
@edje_libs@ @ecore_libs@ @evas_libs@ @emotion_libs@
===================================================================
RCS file: /cvs/e/e17/libs/ewl/tools/ewl_config/ewl_config.c,v
retrieving revision 1.28
retrieving revision 1.29
diff -u -3 -r1.28 -r1.29
--- ewl_config.c        24 Mar 2004 05:20:19 -0000      1.28
+++ ewl_config.c        1 Oct 2006 07:27:11 -0000       1.29
@@ -1,559 +1,806 @@
 #include <Ewl.h>
-#include <ewl-config.h>
+#include "ewl_private.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+#include <dirent.h>
+
+#define EC_WIN_ABOUT "ec/window/about"
+#define EC_EWL_THEME "ec/ewl/theme"
+#define EC_ICON_THEME "ec/icon/theme"
+#define EC_ICON_SIZE "ec/icon/size"
+#define EC_SAVE_SYSTEM  "ec/save/system"
+#define EC_ENGINE_NAME "ec/engine/name"
+#define EC_EVAS_IMAGE_CACHE "ec/evas/image/cache"
+#define EC_EVAS_FONT_CACHE "ec/evas/font/cache"
+#define EC_DEBUG_ENABLE "ec/debug/enable"
+#define EC_DEBUG_LEVEL "ec/debug/level"
+#define EC_DEBUG_SEGV "ec/debug/segv"
+#define EC_DEBUG_BACKTRACE "ec/debug/backtrace"
+#define EC_DEBUG_EVAS_RENDER "ec/debug/evas/render"
+#define EC_DEBUG_GARBAGE "ec/debug/garbage"
+#define EC_THEME_KEYS "ec/theme/keys"
+#define EC_THEME_SIGNALS "ec/theme/signals"
+
+static void usage(void);
+static void ec_main_win(int save_system);
+
+static void ec_menubar_setup(Ewl_Menubar *m);
+static void ec_theme_page_setup(Ewl_Notebook *n);
+static void ec_engine_page_setup(Ewl_Notebook *n);
+static void ec_debug_page_setup(Ewl_Notebook *n);
+
+static void ec_cb_delete_window(Ewl_Widget *w, void *ev, void *data);
+static void ec_cb_about(Ewl_Widget *w, void *ev, void *data);
+static void ec_cb_apply(Ewl_Widget *w, void *ev, void *data);
+static void ec_cb_revert(Ewl_Widget *w, void *ev, void *data);
+static void ec_cb_win_hide(Ewl_Widget *w, void *ev, void *data);
+
+typedef struct Ec_Gui_Menu_Item Ec_Gui_Menu_Item;
+struct Ec_Gui_Menu_Item
+{
+       char *name; 
+       void (*cb)(Ewl_Widget *w, void *ev, void *data);
+};             
+                
+typedef struct Ec_Gui_Menu Ec_Gui_Menu;
+struct Ec_Gui_Menu 
+{                      
+       char *name;
+       Ec_Gui_Menu_Item *items;
+};  
 
-struct _ewl_config_main
-{
-       Ewl_Widget *main_win;
-       Ewl_Widget *main_vbox;
-       Ewl_Widget *button_hbox;
-       Ewl_Widget *button_save;
-       Ewl_Widget *button_restore;
-       Ewl_Widget *button_defaults;
-       Ewl_Widget *button_exit;
-       Ewl_Widget *notebook;
-
-       Ewl_Widget *page_evas_label;
-       Ewl_Widget *page_evas;
-       Ewl_Widget *render_method_label;
-       Ewl_Widget *render_method_software_x11;
-       Ewl_Widget *render_method_gl_x11;
-       Ewl_Widget *font_cache_label;
-       Ewl_Widget *font_cache;
-       Ewl_Widget *image_cache_label;
-       Ewl_Widget *image_cache;
-
-       Ewl_Widget *page_debug_label;
-       Ewl_Widget *page_debug;
-       Ewl_Widget *enable_debug;
-       Ewl_Widget *debug_level_label;
-       Ewl_Widget *debug_level;
-
-       Ewl_Widget *page_fx_label;
-       Ewl_Widget *page_fx;
-       Ewl_Widget *global_label;
-       Ewl_Widget *fx_separator1;
-       Ewl_Widget *plugins_label;
-       Ewl_Widget *effects_table;
-
-       Ewl_Widget *page_theme_label;
-       Ewl_Widget *page_theme;
-       Ewl_Widget *theme_name_label;
-       Ewl_Widget *theme_name;
-       Ewl_Widget *theme_cache_label;
-       Ewl_Widget *theme_cache;
-}
-e_conf;
-
-struct _confirm_win
-{
-       Ewl_Widget *win;
-       Ewl_Widget *main_vbox, *button_hbox;
-       Ewl_Widget *text;
-       Ewl_Widget *button_save, *button_exit, *button_cancel;
-}
-confirm;
-
-Ewl_Config user_settings;
-Ewl_Config init_settings;
-Ewl_Config default_settings;
-
-void ewl_config_read_configs(void);
-int ewl_config_read_config(Ewl_Config * conf);
-void ewl_set_settings(Ewl_Config * c);
-Ewl_Config *ewl_get_settings(void);
-void ewl_save_user_config(Ewl_Config * c);
-
-void ewl_config_save_cb(Ewl_Widget * w, void *ev_data, void *user_data);
-void ewl_config_restore_cb(Ewl_Widget * w, void *ev_data, void *user_data);
-void ewl_config_defaults_cb(Ewl_Widget * w, void *ev_data, void *user_data);
-void ewl_config_exit_cb(Ewl_Widget * w, void *ev_data, void *user_data);
-void ewl_config_create_confirm_dialog(void);
-void ewl_config_destroy_confirm_dialog(Ewl_Widget * w, void *ev_data,
-                                      void *user_data);
-int
-main(int argc, char **argv)
-{
-
-       memset(&e_conf, 0, sizeof(struct _ewl_config_main));
-       memset(&confirm, 0, sizeof(struct _confirm_win));
-
-       ewl_init(&argc, argv);
-
-       ewl_config_read_configs();
-
-       e_conf.main_win = ewl_window_new();
-       ewl_window_set_title(EWL_WINDOW(e_conf.main_win),
-                       "EWL Configuration Program");
-       ewl_callback_append(e_conf.main_win, EWL_CALLBACK_DELETE_WINDOW,
-                           ewl_config_exit_cb, NULL);
-       ewl_widget_show(e_conf.main_win);
-
-       e_conf.main_vbox = ewl_vbox_new();
-       ewl_box_set_spacing(EWL_BOX(e_conf.main_vbox), 10);
-       ewl_container_append_child(EWL_CONTAINER(e_conf.main_win),
-                                  e_conf.main_vbox);
-       ewl_widget_show(e_conf.main_vbox);
-
-       e_conf.notebook = ewl_notebook_new();
-       ewl_container_append_child(EWL_CONTAINER(e_conf.main_vbox),
-                                  e_conf.notebook);
-       ewl_widget_show(e_conf.notebook);
-
-       e_conf.button_hbox = ewl_hbox_new();
-       ewl_box_set_spacing(EWL_BOX(e_conf.button_hbox), 5);
-       ewl_object_set_alignment(EWL_OBJECT(e_conf.button_hbox),
-                                EWL_FLAG_ALIGN_CENTER);
-       ewl_object_set_fill_policy(EWL_OBJECT(e_conf.button_hbox),
-                                  EWL_FLAG_FILL_NORMAL);
-       ewl_container_append_child(EWL_CONTAINER(e_conf.main_vbox),
-                                  e_conf.button_hbox);
-       ewl_widget_show(e_conf.button_hbox);
-
-       e_conf.button_save = ewl_button_new("Save");
-       ewl_container_append_child(EWL_CONTAINER(e_conf.button_hbox),
-                                  e_conf.button_save);
-       ewl_callback_append(e_conf.button_save, EWL_CALLBACK_CLICKED,
-                           ewl_config_save_cb, NULL);
-       ewl_widget_show(e_conf.button_save);
-
-       e_conf.button_restore = ewl_button_new("Restore");
-       ewl_container_append_child(EWL_CONTAINER(e_conf.button_hbox),
-                                  e_conf.button_restore);
-       ewl_callback_append(e_conf.button_restore, EWL_CALLBACK_CLICKED,
-                           ewl_config_restore_cb, NULL);
-       ewl_widget_show(e_conf.button_restore);
-
-       e_conf.button_defaults = ewl_button_new("Defaults");
-       ewl_container_append_child(EWL_CONTAINER(e_conf.button_hbox),
-                                  e_conf.button_defaults);
-       ewl_callback_append(e_conf.button_defaults, EWL_CALLBACK_CLICKED,
-                           ewl_config_defaults_cb, NULL);
-       ewl_widget_show(e_conf.button_defaults);
-
-       e_conf.button_exit = ewl_button_new("Exit");
-       ewl_container_append_child(EWL_CONTAINER(e_conf.button_hbox),
-                                  e_conf.button_exit);
-       ewl_callback_append(e_conf.button_exit, EWL_CALLBACK_CLICKED,
-                           ewl_config_exit_cb, NULL);
-       ewl_widget_show(e_conf.button_exit);
-
-       /* Evas Page */
-
-       e_conf.page_evas_label = ewl_text_new("Evas Settings");
-       ewl_widget_show(e_conf.page_evas_label);
-
-       e_conf.page_evas = ewl_vbox_new();
-       ewl_box_set_spacing(EWL_BOX(e_conf.page_evas), 5);
-       ewl_widget_show(e_conf.page_evas);
-
-       e_conf.render_method_label = ewl_text_new("Render Method");
-       ewl_container_append_child(EWL_CONTAINER(e_conf.page_evas),
-                                  e_conf.render_method_label);
-       ewl_widget_show(e_conf.render_method_label);
-
-       e_conf.render_method_software_x11 =
-               ewl_radiobutton_new("Software X11 Engine");
-       ewl_container_append_child(EWL_CONTAINER(e_conf.page_evas),
-                                  e_conf.render_method_software_x11);
-       ewl_widget_show(e_conf.render_method_software_x11);
-
-       e_conf.render_method_gl_x11 = ewl_radiobutton_new("GL X11 Engine");
-       ewl_radiobutton_set_chain(EWL_RADIOBUTTON(e_conf.render_method_gl_x11),
-                                 
EWL_RADIOBUTTON(e_conf.render_method_software_x11));
-       ewl_container_append_child(EWL_CONTAINER(e_conf.page_evas),
-                                  e_conf.render_method_gl_x11);
-       ewl_widget_show(e_conf.render_method_gl_x11);
-
-       e_conf.font_cache_label = ewl_text_new("Font Cache (kB)");
-       ewl_container_append_child(EWL_CONTAINER(e_conf.page_evas),
-                                  e_conf.font_cache_label);
-       ewl_widget_show(e_conf.font_cache_label);
-
-       e_conf.font_cache = ewl_spinner_new();
-       ewl_spinner_set_min_val(EWL_SPINNER(e_conf.font_cache), (1024.0 * 0.5));
-       ewl_spinner_set_max_val(EWL_SPINNER(e_conf.font_cache), (1024.0 * 256));
-       ewl_spinner_set_digits(EWL_SPINNER(e_conf.font_cache), 0);
-       ewl_spinner_set_step(EWL_SPINNER(e_conf.font_cache), 1.0);
-       ewl_container_append_child(EWL_CONTAINER(e_conf.page_evas),
-                                  e_conf.font_cache);
-       ewl_widget_show(e_conf.font_cache);
-
-       e_conf.image_cache_label = ewl_text_new("Image Cache (kB)");
-       ewl_container_append_child(EWL_CONTAINER(e_conf.page_evas),
-                                  e_conf.image_cache_label);
-       ewl_widget_show(e_conf.image_cache_label);
-
-       e_conf.image_cache = ewl_spinner_new();
-       ewl_spinner_set_min_val(EWL_SPINNER(e_conf.image_cache),
-                       (1024.0 * 0.5));
-       ewl_spinner_set_max_val(EWL_SPINNER(e_conf.image_cache),
-                       (1024.0 * 256));
-       ewl_spinner_set_digits(EWL_SPINNER(e_conf.image_cache), 0);
-       ewl_spinner_set_step(EWL_SPINNER(e_conf.image_cache), 1.0);
-       ewl_container_append_child(EWL_CONTAINER(e_conf.page_evas),
-                                  e_conf.image_cache);
-       ewl_widget_show(e_conf.image_cache);
-
-       ewl_notebook_append_page(EWL_NOTEBOOK(e_conf.notebook),
-                       e_conf.page_evas_label, e_conf.page_evas);
-
-       /* Debug Page */
-
-       e_conf.page_debug_label = ewl_text_new("Debug Settings");
-       ewl_widget_show(e_conf.page_debug_label);
-
-       e_conf.page_debug = ewl_vbox_new();
-       ewl_box_set_spacing(EWL_BOX(e_conf.page_debug), 5);
-       ewl_widget_show(e_conf.page_debug);
-
-       e_conf.enable_debug = ewl_checkbutton_new("Enable Debug ?");
-       ewl_container_append_child(EWL_CONTAINER(e_conf.page_debug),
-                                  e_conf.enable_debug);
-       ewl_widget_show(e_conf.enable_debug);
-
-       e_conf.debug_level_label = ewl_text_new("Debug Level");
-       ewl_container_append_child(EWL_CONTAINER(e_conf.page_debug),
-                                  e_conf.debug_level_label);
-       ewl_widget_show(e_conf.debug_level_label);
-
-       e_conf.debug_level = ewl_spinner_new();
-       ewl_spinner_set_min_val(EWL_SPINNER(e_conf.debug_level), 0.0);
-       ewl_spinner_set_max_val(EWL_SPINNER(e_conf.debug_level), 20.0);
-       ewl_spinner_set_digits(EWL_SPINNER(e_conf.debug_level), 0);
-       ewl_spinner_set_step(EWL_SPINNER(e_conf.debug_level), 1);
-       ewl_container_append_child(EWL_CONTAINER(e_conf.page_debug),
-                                  e_conf.debug_level);
-       ewl_widget_show(e_conf.debug_level);
-
-       ewl_notebook_append_page(EWL_NOTEBOOK(e_conf.notebook),
-                       e_conf.page_debug_label, e_conf.page_debug);
-
-       /* Theme Page */
-       e_conf.page_theme_label = ewl_text_new("Theme Settings");
-       ewl_widget_show(e_conf.page_theme_label);
-
-       e_conf.page_theme = ewl_vbox_new();
-       ewl_box_set_spacing(EWL_BOX(e_conf.page_theme), 5);
-       ewl_widget_show(e_conf.page_theme);
-
-
-       e_conf.theme_name_label = ewl_text_new("Theme Name");
-       ewl_container_append_child(EWL_CONTAINER(e_conf.page_theme),
-                                  e_conf.theme_name_label);
-       ewl_widget_show(e_conf.theme_name_label);
-
-       e_conf.theme_name = ewl_entry_new(NULL);
-       ewl_container_append_child(EWL_CONTAINER(e_conf.page_theme),
-                                  e_conf.theme_name);
-       ewl_widget_show(e_conf.theme_name);
-
-       e_conf.theme_cache = ewl_checkbutton_new("Cache Theme Data?");
-       ewl_container_append_child(EWL_CONTAINER(e_conf.page_theme),
-                                  e_conf.theme_cache);
-       ewl_widget_show(e_conf.theme_cache);
-
-       ewl_notebook_append_page(EWL_NOTEBOOK(e_conf.notebook),
-                       e_conf.page_theme_label, e_conf.page_theme);
-
-       ewl_set_settings(&init_settings);
-
-       ewl_main();
-
-       exit(1);
-}
-
-void
-ewl_config_read_configs(void)
-{
-       int user_read;
-
-       user_read = ewl_config_read_config(&user_settings);
-
-       if (user_read != -1)
-               ewl_config_read_config(&init_settings);
-       else if (user_read == -1)
-         {
-                 printf("Couldnt open user config, please check 
permissions\n");
-                 exit(-1);
-         }
-}
 
 int
-ewl_config_read_config(Ewl_Config * conf)
+main(int argc, char ** argv)
 {
-       if (!conf)
-               return -1;
-
-       /* Evas stuff */
-       conf->evas.render_method =
-               ewl_config_get_str("system", "/evas/render_method");
-       if (!conf->evas.render_method)
-               conf->evas.render_method = strdup("software_x11");
-
-       conf->evas.font_cache =
-               ewl_config_get_int("system", "/evas/font_cache");
-       if (!conf->evas.font_cache)
-               conf->evas.font_cache = 1024.0 * 1024.0 * 2.0;
-
-       conf->evas.image_cache =
-               ewl_config_get_int("system", "/evas/image_cache");
-       if (!conf->evas.image_cache)
-               conf->evas.image_cache = 1024.0 * 1024.0 * 8.0;
-
-       /* Debug stuff */
-       conf->debug.enable = ewl_config_get_int("system", "/debug/enable");
-
-       conf->debug.level = ewl_config_get_int("system", "/debug/level");
-       if (!conf->debug.level)
-               conf->debug.level = 0;
-
-       /* Theme stuff */
-       conf->theme.name = ewl_config_get_str("system", "/theme/name");
-       if (!conf->theme.name)
-               conf->theme.name = strdup("default");
-
-       conf->theme.cache = ewl_config_get_int("system", "/theme/cache");
-
-       return 1;
-}
+       int ret = 1, i, did_something = 0, save_system = 0;
 
-void
-ewl_set_settings(Ewl_Config * c)
-{
-       if (c->evas.render_method
-           && !strncasecmp(c->evas.render_method, "software_x11", 8))
-               ewl_radiobutton_set_checked(e_conf.render_method_software_x11, 
1);
-       else if (c->evas.render_method
-                && !strncasecmp(c->evas.render_method, "gl_x11", 8))
-               ewl_radiobutton_set_checked(e_conf.render_method_gl_x11, 1);
+       if (!ewl_init(&argc, argv))
+       {
+               fprintf(stderr, "Unable to init ewl.\n");
+               goto EXIT;
+       }
+
+       for (i = 1; i < argc; i++)
+       {
+               if ((!strncmp(argv[i], "-s", 2)) 
+                               || (!strncmp(argv[i], "-set", 4)))
+               {
+                       if (++i < argc)
+                       {
+                               char *t, *key, *val;
+
+                               t = strdup(argv[i]);
+                               key = t;
+                               val = strchr(t, '=');
+
+                               if (!val)
+                               {
+                                       usage();
+                                       goto EWL_SHUTDOWN;
+                               }
+
+                               *val = '\0';
+                               val++;
+
+                               ewl_config_string_set(ewl_config, key, val, 
+                                                       EWL_STATE_PERSISTENT);
+                               free(t);
+
+                               did_something = 1;
+                       }
+                       else
+                       {
+                               usage();
+                               goto EWL_SHUTDOWN;
+                       }
+               }
+               else if ((!strncmp(argv[i], "-g", 2)) 
+                               || (!strncmp(argv[i], "-get", 4)))
+               {
+                       if (++i < argc)
+                       {
+                               const char *val;
+
+                               val = ewl_config_string_get(ewl_config, 
argv[i]);
+                               printf("%s = %s\n", argv[i], val);
+
+                               did_something = 1;
+                       }
+                       else
+                       {
+                               usage();
+                               goto EWL_SHUTDOWN;
+                       }
+               }
+               else if (!strncmp(argv[i], "-r", 2))
+               {
+                       if (!ewl_config_can_save_system(ewl_config))
+                       {
+                               fprintf(stderr, "Insufficient permission to 
save "
+                                               "system configuration.\n");
+                               goto EWL_SHUTDOWN;
+                       }
+                       save_system = 1;
+               }
+               else if ((!strncmp(argv[i], "-h", 2))
+                               || (!strncasecmp(argv[i], "--help", 6)))
+               {
+                       usage();
+                       ret = 0;
+                       goto EWL_SHUTDOWN;
+               }
+       }
+
+       if (did_something)
+       {
+               if (save_system)
+                       ewl_config_system_save(ewl_config);
+               else
+                       ewl_config_user_save(ewl_config);
+       }
        else
-               ewl_radiobutton_set_checked(e_conf.render_method_software_x11, 
1);
-
-       ewl_spinner_set_value(EWL_SPINNER(e_conf.font_cache),
-                             (double) (c->evas.font_cache) / 1024.0);
-       ewl_spinner_set_value(EWL_SPINNER(e_conf.image_cache),
-                             (double) (c->evas.image_cache) / 1024.0);
-
-       ewl_checkbutton_set_checked(EWL_CHECKBUTTON(e_conf.enable_debug),
-                       c->debug.enable);
-       ewl_spinner_set_value(EWL_SPINNER(e_conf.debug_level),
-                       (double) (c->debug.level));
-
-       ewl_entry_set_text(EWL_ENTRY(e_conf.theme_name), c->theme.name);
-
-       ewl_checkbutton_set_checked(EWL_CHECKBUTTON(e_conf.theme_cache),
-                       c->theme.cache);
-}
-
-Ewl_Config *
-ewl_get_settings(void)
-{
-       Ewl_Config *c;
-
-       c = NEW(Ewl_Config, 1);
-       memset(c, 0, sizeof(Ewl_Config));
-
-       if (ewl_radiobutton_is_checked(e_conf.render_method_software_x11))
-               c->evas.render_method = strdup("software_x11");
-       else if (ewl_radiobutton_is_checked(e_conf.render_method_gl_x11))
-               c->evas.render_method = strdup("gl_x11");
-
-       c->evas.font_cache =
-               (float)(ewl_spinner_get_value(EWL_SPINNER(e_conf.font_cache)))
-               * 1024.0;
-       c->evas.image_cache =
-               (float)(ewl_spinner_get_value(EWL_SPINNER(e_conf.image_cache)))
-               * 1024.0;
-
-       if (ewl_checkbutton_is_checked(EWL_CHECKBUTTON(e_conf.enable_debug)))
-               c->debug.enable = 1;
-       else
-         {
-                 c->debug.enable = 0;
-                 c->debug.level = 0;
-         }
-
-       if (c->debug.enable)
-               c->debug.level =
-                       
(int)(ewl_spinner_get_value(EWL_SPINNER(e_conf.debug_level)));
-
-       c->theme.name = ewl_entry_get_text(EWL_ENTRY(e_conf.theme_name));
-
-       if (!c->theme.name)
-               c->theme.name = strdup("default");
-
-       c->theme.cache = 
ewl_checkbutton_is_checked(EWL_CHECKBUTTON(e_conf.theme_cache));
-
-       return c;
-}
-
-void
-ewl_save_config(Ewl_Config * c)
-{
-       if (!c)
+       {
+               ec_main_win(save_system);
+               ewl_main();
+       }
+
+       ret = 0;
+
+EWL_SHUTDOWN:
+       ewl_shutdown();
+EXIT:
+       return ret;
+}
+
+static void
+usage(void)
+{
+       printf("\n"
+               "ewl_config [OPTIONS] [-set key=value] [-get key]\n"
+               " OPTIONS\n"
+               "  -r                    \t - Save the system configuration 
file\n"
+               "  -h|--help             \t - Print help information\n"
+               "\n");
+}
+
+static void
+ec_main_win(int save_system)
+{
+       Ewl_Widget *box, *o2, *o;
+
+       o = ewl_window_new();
+       ewl_window_title_set(EWL_WINDOW(o), "EWL Config");
+       ewl_window_class_set(EWL_WINDOW(o), "ewl_config");
+       ewl_window_name_set(EWL_WINDOW(o), "ewl_config");
+       ewl_object_size_request(EWL_OBJECT(o), 450, 250);
+       ewl_callback_append(o, EWL_CALLBACK_DELETE_WINDOW, 
+                                       ec_cb_delete_window, NULL);
+       ewl_widget_show(o);
+
+       box = ewl_vbox_new();
+       ewl_container_child_append(EWL_CONTAINER(o), box);
+       ewl_widget_show(box);
+
+       o = ewl_hmenubar_new();
+       ewl_container_child_append(EWL_CONTAINER(box), o);
+       ec_menubar_setup(EWL_MENUBAR(o));
+       ewl_object_fill_policy_set(EWL_OBJECT(o), 
+                       EWL_FLAG_FILL_HFILL | EWL_FLAG_FILL_VSHRINK);
+       ewl_widget_show(o);
+
+       o = ewl_notebook_new();
+       ewl_container_child_append(EWL_CONTAINER(box), o);
+       ewl_notebook_tabbar_alignment_set(EWL_NOTEBOOK(o), EWL_FLAG_ALIGN_LEFT);
+       ewl_widget_show(o);
+
+       ec_theme_page_setup(EWL_NOTEBOOK(o));
+       ec_engine_page_setup(EWL_NOTEBOOK(o));
+       ec_debug_page_setup(EWL_NOTEBOOK(o));
+
+       o2 = ewl_hbox_new();
+       ewl_container_child_append(EWL_CONTAINER(box), o2);
+       ewl_object_fill_policy_set(EWL_OBJECT(o2), 
+                       EWL_FLAG_FILL_HFILL | EWL_FLAG_FILL_VSHRINK);
+       ewl_widget_show(o2);
+
+       o = ewl_button_new();
+       ewl_button_stock_type_set(EWL_BUTTON(o), EWL_STOCK_APPLY);
+       ewl_container_child_append(EWL_CONTAINER(o2), o);
+       ewl_callback_append(o, EWL_CALLBACK_CLICKED, ec_cb_apply, NULL);
+       ewl_object_fill_policy_set(EWL_OBJECT(o), EWL_FLAG_FILL_SHRINK);
+       ewl_widget_show(o);
+
+       o = ewl_button_new();
+       ewl_button_label_set(EWL_BUTTON(o), "Revert");
+       ewl_button_image_set(EWL_BUTTON(o), 
+                       ewl_icon_theme_icon_path_get(EWL_ICON_DIALOG_CANCEL, 
+                                                       EWL_ICON_SIZE_MEDIUM),
+                       EWL_ICON_DIALOG_CANCEL);
+       ewl_container_child_append(EWL_CONTAINER(o2), o);
+       ewl_callback_append(o, EWL_CALLBACK_CLICKED, ec_cb_revert, NULL);
+       ewl_object_fill_policy_set(EWL_OBJECT(o), EWL_FLAG_FILL_SHRINK);
+       ewl_widget_show(o);
+
+       o = ewl_button_new();
+       ewl_button_stock_type_set(EWL_BUTTON(o), EWL_STOCK_QUIT);
+       ewl_container_child_append(EWL_CONTAINER(o2), o);
+       ewl_callback_append(o, EWL_CALLBACK_CLICKED, ec_cb_delete_window, NULL);
+       ewl_object_fill_policy_set(EWL_OBJECT(o), EWL_FLAG_FILL_SHRINK);
+       ewl_widget_show(o);
+
+       o = ewl_spacer_new();
+       ewl_container_child_append(EWL_CONTAINER(o2), o);
+       ewl_widget_show(o);
+
+       o = ewl_checkbutton_new();
+       ewl_container_child_append(EWL_CONTAINER(o2), o);
+       ewl_checkbutton_checked_set(EWL_CHECKBUTTON(o), save_system);
+       ewl_checkbutton_label_position_set(EWL_CHECKBUTTON(o), 
EWL_POSITION_RIGHT);
+       ewl_button_label_set(EWL_BUTTON(o), "Save as system config");
+       ewl_widget_name_set(o, EC_SAVE_SYSTEM);
+       ewl_widget_show(o);
+
+       if (!ewl_config_can_save_system(ewl_config))
+               ewl_widget_disable(o);
+}
+
+static void
+ec_cb_delete_window(Ewl_Widget *w __UNUSED__, void *ev __UNUSED__, 
+                                       void *data __UNUSED__)
+{
+       ewl_main_quit();
+}
+
+static void
+ec_menubar_setup(Ewl_Menubar *m)
+{
+       Ewl_Widget *menu, *o;
+       int i;
+
+       Ec_Gui_Menu_Item file_menu[] = {
+       {"save", ec_cb_apply},
+       {"revert", ec_cb_revert},
+               {"quit", ec_cb_delete_window},
+               {NULL, NULL}
+       };
+
+       Ec_Gui_Menu_Item help_menu[] = {
+       {"about", ec_cb_about},
+               {NULL, NULL}
+       };
+
+       Ec_Gui_Menu menus[] = {
+               {"file", file_menu},
+       {"help", help_menu},
+               {NULL, NULL}
+       };
+
+       for (i = 0; menus[i].name != NULL; i++)
+       {
+               int k;
+
+               /* pack in a spacer before the help text */
+               if (menus[i + 1].name == NULL)
+               {
+                       o = ewl_spacer_new();
+                       ewl_container_child_append(EWL_CONTAINER(m), o);
+                       ewl_object_fill_policy_set(EWL_OBJECT(o), 
EWL_FLAG_FILL_FILL);
+                       ewl_widget_show(o);
+               }
+
+               menu = ewl_menu_new();
+               ewl_button_label_set(EWL_BUTTON(menu), menus[i].name);
+               ewl_container_child_append(EWL_CONTAINER(m), menu);
+               ewl_object_fill_policy_set(EWL_OBJECT(menu),
+                               EWL_FLAG_FILL_HSHRINK | EWL_FLAG_FILL_VFILL);
+               ewl_widget_show(menu);
+
+               for (k = 0; menus[i].items[k].name != NULL; k++)
+               {
+                       o = ewl_menu_item_new();
+                       ewl_button_label_set(EWL_BUTTON(o), 
menus[i].items[k].name);
+                       ewl_container_child_append(EWL_CONTAINER(menu), o);
+                       ewl_callback_append(o, EWL_CALLBACK_CLICKED,
+                                                       menus[i].items[k].cb, 
NULL);
+                       ewl_widget_show(o);
+               }
+       }
+}
+
+static void
+ec_theme_page_setup(Ewl_Notebook *n)
+{
+       Ewl_Widget *box, *o, *o2, *o3;
+       DIR *rep;
+       struct dirent *file;
+       Ecore_List *list;
+       const char *v;
+       int i = 0, sel = 0;
+
+       box = ewl_hbox_new();
+       ewl_container_child_append(EWL_CONTAINER(n), box);
+       ewl_notebook_page_tab_text_set(EWL_NOTEBOOK(n), box, "Theme");
+       ewl_widget_show(box);
+
+       o2 = ewl_border_new();
+       ewl_border_text_set(EWL_BORDER(o2), "EWL Theme");
+       ewl_container_child_append(EWL_CONTAINER(box), o2);
+       ewl_widget_show(o2);
+
+       o3 = ewl_scrollpane_new();
+       ewl_container_child_append(EWL_CONTAINER(o2), o3);
+       ewl_widget_show(o3);
+
+       o = ewl_list_new();
+       list = ecore_list_new();
+       ewl_widget_name_set(o, EC_EWL_THEME);
+       ewl_container_child_append(EWL_CONTAINER(o3), o);
+       ewl_mvc_model_set(EWL_MVC(o), ewl_model_ecore_list_get());
+       ewl_mvc_view_set(EWL_MVC(o), ewl_label_view_get());
+       ewl_mvc_data_set(EWL_MVC(o), list);
+       ewl_widget_show(o);
+
+       i = 0;
+       v = ewl_config_string_get(ewl_config, EWL_CONFIG_THEME_NAME);
+       rep = opendir(PACKAGE_DATA_DIR "/themes");
+       while ((file = readdir(rep)))
+       {          
+               int len;
+                               
+               len = strlen(file->d_name);
+               if ((len >= 4) && (!strcmp(file->d_name + len - 4, ".edj")))
+               {
+                       char *t;
+
+                       t = strdup(file->d_name);
+                       *(t + len - 4) = '\0';
+
+                       if (!strcmp(t, v)) sel = i;
+
+                       ecore_list_append(list, t);
+                       i++;
+               }
+       }
+       closedir(rep);
+
+       ewl_list_selected_index_set(EWL_LIST(o), sel);
+       ewl_mvc_dirty_set(EWL_MVC(o), TRUE);
+
+       o2 = ewl_border_new();
+       ewl_border_text_set(EWL_BORDER(o2), "Icon Theme");
+       ewl_container_child_append(EWL_CONTAINER(box), o2);
+       ewl_widget_show(o2);
+
+       box = ewl_table_new(2, 2, NULL);
+       ewl_container_child_append(EWL_CONTAINER(o2), box);
+       ewl_table_homogeneous_set(EWL_TABLE(box), FALSE);
+       ewl_widget_show(box);
+
+       o = ewl_label_new();
+       ewl_label_text_set(EWL_LABEL(o), "Theme name");
+       ewl_table_add(EWL_TABLE(box), o, 0, 0, 0, 0);
+       ewl_widget_show(o);
+
+       o = ewl_entry_new();
+       ewl_widget_name_set(o, EC_ICON_THEME);
+       ewl_table_add(EWL_TABLE(box), o, 1, 1, 0, 0);
+       ewl_text_text_set(EWL_TEXT(o), 
+               ewl_config_string_get(ewl_config, EWL_CONFIG_THEME_ICON_THEME));
+       ewl_widget_show(o);
+
+       o = ewl_label_new();
+       ewl_label_text_set(EWL_LABEL(o), "Icon Size");
+       ewl_table_add(EWL_TABLE(box), o, 0, 0, 1, 1);
+       ewl_widget_show(o);
+
+       list = ecore_list_new();
+       ecore_list_append(list, EWL_ICON_SIZE_SMALL);
+       ecore_list_append(list, EWL_ICON_SIZE_MEDIUM);
+       ecore_list_append(list, EWL_ICON_SIZE_LARGE);
+
+       v = ewl_config_string_get(ewl_config, EWL_CONFIG_THEME_ICON_SIZE);
+       sel = 0;
+
+       if (!strcmp(v, EWL_ICON_SIZE_MEDIUM))
+               sel = 1;
+
+       else if (!strcmp(v, EWL_ICON_SIZE_LARGE))
+               sel = 2;
+
+       o = ewl_combo_new();
+       ewl_widget_name_set(o, EC_ICON_SIZE);
+       ewl_mvc_model_set(EWL_MVC(o), ewl_model_ecore_list_get());
+       ewl_mvc_view_set(EWL_MVC(o), ewl_label_view_get());
+       ewl_mvc_data_set(EWL_MVC(o), list);
+       ewl_table_add(EWL_TABLE(box), o, 1, 1, 1, 1);
+       ewl_combo_selected_set(EWL_COMBO(o), sel);
+       ewl_widget_show(o);
+}
+
+static void
+ec_engine_page_setup(Ewl_Notebook *n)
+{
+       Ewl_Widget *box, *o, *o2;
+
+       box = ewl_vbox_new();
+       ewl_container_child_append(EWL_CONTAINER(n), box);
+       ewl_notebook_page_tab_text_set(EWL_NOTEBOOK(n), box, "Engine");
+       ewl_widget_show(box);
+
+       o2 = ewl_table_new(2, 3, NULL);
+       ewl_container_child_append(EWL_CONTAINER(box), o2);
+       ewl_widget_show(o2);
+
+       o = ewl_label_new();
+       ewl_label_text_set(EWL_LABEL(o), "Engine name");
+       ewl_table_add(EWL_TABLE(o2), o, 0, 0, 0, 0);
+       ewl_widget_show(o);
+
+       o = ewl_entry_new();
+       ewl_widget_name_set(o, EC_ENGINE_NAME);
+       ewl_text_text_set(EWL_TEXT(o),
+               ewl_config_string_get(ewl_config, EWL_CONFIG_ENGINE_NAME));
+       ewl_table_add(EWL_TABLE(o2), o, 1, 1, 0, 0);
+       ewl_widget_show(o);
+
+       o = ewl_label_new();
+       ewl_label_text_set(EWL_LABEL(o), "Evas font cache size");
+       ewl_table_add(EWL_TABLE(o2), o, 0, 0, 1, 1);
+       ewl_widget_show(o);
+
+       o = ewl_entry_new();
+       ewl_widget_name_set(o, EC_EVAS_FONT_CACHE);
+       ewl_text_text_set(EWL_TEXT(o),
+               ewl_config_string_get(ewl_config, EWL_CONFIG_CACHE_EVAS_FONT));
+       ewl_table_add(EWL_TABLE(o2), o, 1, 1, 1, 1);
+       ewl_widget_show(o);
+
+       o = ewl_label_new();
+       ewl_label_text_set(EWL_LABEL(o), "Evas image cache size");
+       ewl_table_add(EWL_TABLE(o2), o, 0, 0, 2, 2);
+       ewl_widget_show(o);
+
+       o = ewl_entry_new();
+       ewl_widget_name_set(o, EC_EVAS_IMAGE_CACHE);
+       ewl_text_text_set(EWL_TEXT(o),
+               ewl_config_string_get(ewl_config, EWL_CONFIG_CACHE_EVAS_IMAGE));
+       ewl_table_add(EWL_TABLE(o2), o, 1, 1, 2, 2);
+       ewl_widget_show(o);
+}
+
+static void
+ec_debug_page_setup(Ewl_Notebook *n)
+{
+       Ewl_Widget *box, *o2;
+       int i, row = 0;
+
+       struct 
+       {
+               char *label;
+               char *key;
+               char *name;
+               int spinner;
+       } buttons[] = {
+               {"Enabled", EWL_CONFIG_DEBUG_ENABLE, EC_DEBUG_ENABLE, 0},
+               {"Level", EWL_CONFIG_DEBUG_LEVEL, EC_DEBUG_LEVEL, 1},
+               {"Segv", EWL_CONFIG_DEBUG_SEGV, EC_DEBUG_SEGV, 0},
+               {"Backtrace", EWL_CONFIG_DEBUG_BACKTRACE, EC_DEBUG_BACKTRACE, 
0},
+               {"Evas rendering", EWL_CONFIG_DEBUG_EVAS_RENDER, 
EC_DEBUG_EVAS_RENDER, 0},
+               {"Garbage Collection", EWL_CONFIG_DEBUG_GC_REAP, 
EC_DEBUG_GARBAGE, 0},
+               {"Print theme keys", EWL_CONFIG_THEME_PRINT_KEYS, 
EC_THEME_KEYS, 0},
+               {"Print theme signals", EWL_CONFIG_THEME_PRINT_SIGNALS, 
EC_THEME_SIGNALS, 0},
+               {NULL, NULL, NULL, 0}
+       };
+
+       box = ewl_vbox_new();
+       ewl_container_child_append(EWL_CONTAINER(n), box);
+       ewl_notebook_page_tab_text_set(EWL_NOTEBOOK(n), box, "Debug");
+       ewl_widget_show(box);
+
+       o2 = ewl_table_new(2, 8, NULL);
+       ewl_container_child_append(EWL_CONTAINER(box), o2);
+       ewl_widget_show(o2);
+
+       for (i = 0; buttons[i].label != NULL; i++)
+       {
+               Ewl_Widget *o;
+
+               if (buttons[i].spinner)
+               {
+                       Ewl_Widget *s;
+
+                       o = ewl_hbox_new();
+                       ewl_widget_show(o);
+
+                       s = ewl_label_new();
+                       ewl_label_text_set(EWL_LABEL(s), buttons[i].label);
+                       ewl_container_child_append(EWL_CONTAINER(o), s);
+                       ewl_widget_show(s);
+
+                       s = ewl_spinner_new();
+                       ewl_widget_name_set(s, buttons[i].name);
+                       ewl_spinner_digits_set(EWL_SPINNER(s), 0);
+                       ewl_range_minimum_value_set(EWL_RANGE(s), 0);
+                       ewl_range_maximum_value_set(EWL_RANGE(s), 100);
+                       ewl_range_step_set(EWL_RANGE(s), 1);
+                       ewl_range_value_set(EWL_RANGE(s),
+                               ewl_config_int_get(ewl_config, buttons[i].key));
+                       ewl_container_child_append(EWL_CONTAINER(o), s);
+                       ewl_widget_show(s);
+               }
+               else
+               {
+                       o = ewl_checkbutton_new();
+                       ewl_widget_name_set(o, buttons[i].name);
+                       ewl_button_label_set(EWL_BUTTON(o), buttons[i].label);
+                       ewl_checkbutton_checked_set(EWL_CHECKBUTTON(o),
+                               ewl_config_int_get(ewl_config, buttons[i].key));
+                       ewl_widget_show(o);
+               }
+               ewl_table_add(EWL_TABLE(o2), o, i % 2, i % 2, row, row);
+
+               if ((i != 0) && (((i + 1) % 2) == 0)) row ++;
+       }
+}
+
+static void
+ec_cb_about(Ewl_Widget *w __UNUSED__, void *ev __UNUSED__, 
+                                       void *data __UNUSED__)
+{
+       Ewl_Widget *about, *box, *o;
+
+       about = ewl_widget_name_find(EC_WIN_ABOUT);
+       if (about)
+       {
+               ewl_widget_show(about);
                return;
+       }
 
-       ewl_config_set_int("system", "/evas/font_cache", c->evas.font_cache);
-       ewl_config_set_int("system", "/evas/image_cache",
-                          c->evas.image_cache);
-       ewl_config_set_str("system", "/evas/render_method",
-                          c->evas.render_method);
-       ewl_config_set_int("system", "/debug/enable", c->debug.enable);
-       ewl_config_set_int("system", "/debug/level", c->debug.level);
-
-       ewl_config_set_str("system", "/theme/name", c->theme.name);
-       ewl_config_set_int("system", "/theme/cache", c->theme.cache);
-}
-
-void
-ewl_config_save_cb(Ewl_Widget * w, void *ev_data, void *user_data)
-{
-       Ewl_Config *c;
-       char *home;
-       char pe[1024];
-
-       home = getenv("HOME");
-
-       if (!home)
-         {
-                 printf("ERROR: Environment variable $HOME was not found.\n"
-                        "Try export HOME in a bash-like environment\n"
-                        "or setenv HOME in a sh like environment.\n");
-                 exit(-1);
-         }
-
-       snprintf(pe, 1024, "%s/.e", home);
-       mkdir(pe, 0755);
-       snprintf(pe, 1024, "%s/.e/ewl", home);
-       mkdir(pe, 0755);
-       snprintf(pe, 1024, "%s/.e/ewl/config", home);
-       mkdir(pe, 0755);
-
-       c = ewl_get_settings();
-
-       ewl_save_config(c);
-
-       FREE(c->evas.render_method);
-       FREE(c->theme.name);
-       FREE(c);
-
-       return;
-       w = NULL;
-       ev_data = NULL;
-       user_data = NULL;
-}
-
-void
-ewl_config_restore_cb(Ewl_Widget * w, void *ev_data, void *user_data)
-{
-       ewl_set_settings(&init_settings);
-
-       return;
-       w = NULL;
-       ev_data = NULL;
-       user_data = NULL;
-}
-
-void
-ewl_config_defaults_cb(Ewl_Widget * w, void *ev_data, void *user_data)
-{
-       return;
-       w = NULL;
-       ev_data = NULL;
-       user_data = NULL;
+       about = ewl_window_new();
+       ewl_window_title_set(EWL_WINDOW(about), "EWL Config");
+       ewl_window_name_set(EWL_WINDOW(about), "ewl_config");
+       ewl_window_class_set(EWL_WINDOW(about), "ewl_config");
+       ewl_widget_name_set(about, EC_WIN_ABOUT);
+       ewl_object_size_request(EWL_OBJECT(about), 210, 140);
+       ewl_callback_append(about, EWL_CALLBACK_DELETE_WINDOW,
+                                                       ec_cb_win_hide, about);
+       ewl_widget_show(about);
+
+       box = ewl_vbox_new();
+       ewl_container_child_append(EWL_CONTAINER(about), box);
+       ewl_widget_show(box);
+
+       o = ewl_text_new();
+       ewl_container_child_append(EWL_CONTAINER(box), o);
+       ewl_widget_show(o);
+
+       ewl_text_wrap_set(EWL_TEXT(o), EWL_TEXT_WRAP_WORD);
+
+       ewl_text_font_size_set(EWL_TEXT(o), 25);
+       ewl_text_font_set(EWL_TEXT(o), "Vera/Bold");
+       ewl_text_align_set(EWL_TEXT(o), EWL_FLAG_ALIGN_CENTER);
+       ewl_text_styles_set(EWL_TEXT(o), EWL_TEXT_STYLE_SOFT_SHADOW);
+       ewl_text_text_set(EWL_TEXT(o), "EWL Config\n");
+
+       ewl_text_font_size_set(EWL_TEXT(o), 10);
+       ewl_text_font_set(EWL_TEXT(o), "Vera");
+       ewl_text_align_set(EWL_TEXT(o), EWL_FLAG_ALIGN_LEFT);
+       ewl_text_styles_set(EWL_TEXT(o), EWL_TEXT_STYLE_NONE);
+       ewl_text_text_append(EWL_TEXT(o), "\n");
+       ewl_text_text_append(EWL_TEXT(o), "Configure your EWL install.\n");
+       ewl_text_text_append(EWL_TEXT(o), "\n");
+
+       o = ewl_button_new();
+       ewl_container_child_append(EWL_CONTAINER(box), o);
+       ewl_button_stock_type_set(EWL_BUTTON(o), EWL_STOCK_OK);
+       ewl_object_fill_policy_set(EWL_OBJECT(o), EWL_FLAG_FILL_SHRINK);
+       ewl_callback_append(o, EWL_CALLBACK_CLICKED, ec_cb_win_hide, about);
+       ewl_object_alignment_set(EWL_OBJECT(o), EWL_FLAG_ALIGN_CENTER);
+       ewl_widget_show(o);
+}
+
+static void
+ec_cb_win_hide(Ewl_Widget *w __UNUSED__, void *ev __UNUSED__, void *data)
+{
+       ewl_widget_hide(EWL_WIDGET(data));
+}
+
+static void
+ec_cb_revert(Ewl_Widget *w __UNUSED__, void *ev __UNUSED__, 
+                                       void *data __UNUSED__)
+{
+       Ewl_Widget *o;
+       Ecore_List *list;
+       const char *val, *lval;
+       int sel = 0;
+
+       struct
+       {
+               char *name;
+               char *key;
+       } checks[] = {
+               {EC_DEBUG_ENABLE, EWL_CONFIG_DEBUG_ENABLE},
+               {EC_DEBUG_SEGV, EWL_CONFIG_DEBUG_SEGV},
+               {EC_DEBUG_BACKTRACE, EWL_CONFIG_DEBUG_BACKTRACE},
+               {EC_DEBUG_EVAS_RENDER, EWL_CONFIG_DEBUG_EVAS_RENDER},
+               {EC_DEBUG_GARBAGE, EWL_CONFIG_DEBUG_GC_REAP},
+               {EC_THEME_KEYS, EWL_CONFIG_THEME_PRINT_KEYS},
+               {EC_THEME_SIGNALS, EWL_CONFIG_THEME_PRINT_SIGNALS},
+               {NULL, NULL}
+       };
+
+       struct
+       {
+               char *name;
+               char *key;
+       } strings[] = {
+               {EC_ICON_THEME, EWL_CONFIG_THEME_ICON_THEME},
+               {EC_ENGINE_NAME, EWL_CONFIG_ENGINE_NAME},
+               {EC_EVAS_IMAGE_CACHE, EWL_CONFIG_CACHE_EVAS_IMAGE},
+               {EC_EVAS_FONT_CACHE, EWL_CONFIG_CACHE_EVAS_FONT},
+               {NULL, NULL}
+       };
+
+       o = ewl_widget_name_find(EC_EWL_THEME);
+       list = ewl_mvc_data_get(EWL_MVC(o));
+       val = ewl_config_string_get(ewl_config, EWL_CONFIG_THEME_NAME);
+
+       ecore_list_goto_first(list);
+       while ((lval = ecore_list_next(list)))
+       {
+               if (!strcmp(val, lval))
+                       break;
+               sel++;
+       }
+       ewl_list_selected_index_set(EWL_LIST(o), sel);
+
+       o = ewl_widget_name_find(EC_ICON_SIZE);
+       list = ewl_mvc_data_get(EWL_MVC(o));
+       val = ewl_config_string_get(ewl_config, EWL_CONFIG_THEME_ICON_SIZE);
+
+       sel = 0;
+       ecore_list_goto_first(list);
+       while ((lval = ecore_list_next(list)))
+       {
+               if (!strcmp(val, lval))
+                       break;
+               sel ++;
+       }
+       ewl_combo_selected_set(EWL_COMBO(o), sel);
+
+       for (sel = 0; strings[sel].name != NULL; sel++)
+       {
+               o = ewl_widget_name_find(strings[sel].name);
+               ewl_text_text_set(EWL_TEXT(o),
+                       ewl_config_string_get(ewl_config, strings[sel].key));
+       }
+
+       o = ewl_widget_name_find(EC_DEBUG_LEVEL);
+       ewl_range_value_set(EWL_RANGE(o),
+               ewl_config_int_get(ewl_config, EWL_CONFIG_DEBUG_LEVEL));
+
+       for (sel = 0; checks[sel].name != NULL; sel++)
+       {
+               o = ewl_widget_name_find(checks[sel].name);
+               ewl_checkbutton_checked_set(EWL_CHECKBUTTON(o),
+                       ewl_config_int_get(ewl_config, checks[sel].key));
+       }
+}
+
+static void
+ec_cb_apply(Ewl_Widget *w __UNUSED__, void *ev __UNUSED__, 
+                                       void *data __UNUSED__)
+{
+       Ewl_Widget *o;
+       Ecore_List *list;
+       char *val;
+       int i;
+
+       struct
+       {
+               char *name;
+               char *key;
+       } checks[] = {
+               {EC_DEBUG_ENABLE, EWL_CONFIG_DEBUG_ENABLE},
+               {EC_DEBUG_SEGV, EWL_CONFIG_DEBUG_SEGV},
+               {EC_DEBUG_BACKTRACE, EWL_CONFIG_DEBUG_BACKTRACE},
+               {EC_DEBUG_EVAS_RENDER, EWL_CONFIG_DEBUG_EVAS_RENDER},
+               {EC_DEBUG_GARBAGE, EWL_CONFIG_DEBUG_GC_REAP},
+               {EC_THEME_KEYS, EWL_CONFIG_THEME_PRINT_KEYS},
+               {EC_THEME_SIGNALS, EWL_CONFIG_THEME_PRINT_SIGNALS},
+               {NULL, NULL}
+       };
+
+       struct
+       {
+               char *name;
+               char *key;
+       } strings[] = {
+               {EC_ICON_THEME, EWL_CONFIG_THEME_ICON_THEME},
+               {EC_ENGINE_NAME, EWL_CONFIG_ENGINE_NAME},
+               {EC_EVAS_IMAGE_CACHE, EWL_CONFIG_CACHE_EVAS_IMAGE},
+               {EC_EVAS_FONT_CACHE, EWL_CONFIG_CACHE_EVAS_FONT},
+               {NULL, NULL}
+       };
+
+       for (i = 0; checks[i].name != NULL; i++)
+       {
+               o = ewl_widget_name_find(checks[i].name);
+               if (ewl_checkbutton_is_checked(EWL_CHECKBUTTON(o)) != 
+                               ewl_config_int_get(ewl_config, checks[i].key))
+                       ewl_config_int_set(ewl_config, checks[i].key, 
+                                       
ewl_checkbutton_is_checked(EWL_CHECKBUTTON(o)),
+                                       EWL_STATE_PERSISTENT);
+       }
+
+       for (i = 0; strings[i].name != NULL; i++)
+       {
+               char *new;
+
+               o = ewl_widget_name_find(strings[i].name);
+               new = ewl_text_text_get(EWL_TEXT(o));
+               if (strcmp(new, ewl_config_string_get(ewl_config, 
+                                               strings[i].key)))
+               {
+                       ewl_config_string_set(ewl_config, 
+                                       strings[i].key, new,
+                                       EWL_STATE_PERSISTENT);
+               }
+       }
+
+       o = ewl_widget_name_find(EC_DEBUG_LEVEL);
+       if (ewl_range_value_get(EWL_RANGE(o)) != 
+                       ewl_config_int_get(ewl_config, EWL_CONFIG_DEBUG_LEVEL))
+       {
+               ewl_config_int_set(ewl_config, EWL_CONFIG_DEBUG_LEVEL, 
+                                       ewl_range_value_get(EWL_RANGE(o)),
+                                       EWL_STATE_PERSISTENT);
+       }
+
+       o = ewl_widget_name_find(EC_ICON_SIZE);
+       list = ewl_mvc_data_get(EWL_MVC(o));
+       i = ewl_combo_selected_get(EWL_COMBO(o));
+
+       ecore_list_goto_index(list, i);
+       val = ecore_list_current(list);
+       if (strcmp(val, ewl_config_string_get(ewl_config,
+                                       EWL_CONFIG_THEME_ICON_SIZE)))
+       {
+               ewl_config_string_set(ewl_config, 
+                               EWL_CONFIG_THEME_ICON_SIZE, val,
+                               EWL_STATE_PERSISTENT);
+       }
+
+       o = ewl_widget_name_find(EC_EWL_THEME);
+       list = ewl_mvc_data_get(EWL_MVC(o));
+       i = ewl_list_selected_index_get(EWL_LIST(o));
+       if (i > -1)
+       {
+               ecore_list_goto_index(list, i);
+               val = ecore_list_current(list);
+
+               if (strcmp(val, ewl_config_string_get(ewl_config,
+                                               EWL_CONFIG_THEME_NAME)))
+               {
+                       ewl_config_string_set(ewl_config,
+                                       EWL_CONFIG_THEME_NAME, val,
+                                       EWL_STATE_PERSISTENT);
+               }
+       }
+
+       o = ewl_widget_name_find(EC_SAVE_SYSTEM);
+       if (ewl_checkbutton_is_checked(EWL_CHECKBUTTON(o)))
+       {
+               if (!ewl_config_can_save_system(ewl_config))
+                       fprintf(stderr, "Cannot save system config.\n");
+               else
+                       ewl_config_system_save(ewl_config);
+       }
+       else
+               ewl_config_user_save(ewl_config);
 }
 
-void
-ewl_config_exit_cb(Ewl_Widget * w, void *user_data, void *ev_data)
-{
-       Ewl_Config *nc, oc;
-
-       nc = ewl_get_settings();
-       ewl_config_read_config(&oc);
 
-       if ((nc->debug.enable != oc.debug.enable ||
-            nc->debug.level != oc.debug.level ||
-            nc->evas.font_cache != oc.evas.font_cache ||
-            nc->evas.image_cache != oc.evas.image_cache ||
-            strcasecmp(nc->evas.render_method, oc.evas.render_method) ||
-            strcmp(nc->theme.name, oc.theme.name) ||
-            nc->theme.cache != oc.theme.cache) &&
-                       !confirm.win)
-               ewl_config_create_confirm_dialog();
-       else
-         {
-                 ewl_widget_destroy(e_conf.main_win);
-
-                 ewl_main_quit();
-         }
-       return;
-       w = NULL;
-       ev_data = NULL;
-       user_data = NULL;
-}
-
-void
-ewl_config_create_confirm_dialog(void)
-{
-       confirm.win = ewl_window_new();
-       ewl_widget_show(confirm.win);
-
-       confirm.main_vbox = ewl_vbox_new();
-       ewl_container_append_child(EWL_CONTAINER(confirm.win),
-                                  confirm.main_vbox);
-       ewl_widget_show(confirm.main_vbox);
-
-       confirm.text = ewl_text_new("You have made modifications."
-                       "What would you like to do?");
-       ewl_object_set_alignment(EWL_OBJECT(confirm.text),
-                                EWL_FLAG_ALIGN_CENTER);
-       ewl_container_append_child(EWL_CONTAINER(confirm.main_vbox),
-                                  confirm.text);
-       ewl_widget_show(confirm.text);
-
-       confirm.button_hbox = ewl_hbox_new();
-       ewl_box_set_spacing(EWL_BOX(confirm.button_hbox), 5);
-       ewl_object_set_alignment(EWL_OBJECT(confirm.button_hbox),
-                                EWL_FLAG_ALIGN_CENTER);
-       ewl_container_append_child(EWL_CONTAINER(confirm.main_vbox),
-                                  confirm.button_hbox);
-       ewl_widget_show(confirm.button_hbox);
-
-       confirm.button_save = ewl_button_new("Save & Exit");
-       ewl_container_append_child(EWL_CONTAINER(confirm.button_hbox),
-                                  confirm.button_save);
-       ewl_callback_append(confirm.button_save, EWL_CALLBACK_CLICKED,
-                           ewl_config_save_cb, NULL);
-       ewl_callback_append(confirm.button_save, EWL_CALLBACK_CLICKED,
-                           ewl_config_exit_cb, NULL);
-       ewl_widget_show(confirm.button_save);
-
-       confirm.button_exit = ewl_button_new("Exit without saving");
-       ewl_container_append_child(EWL_CONTAINER(confirm.button_hbox),
-                                  confirm.button_exit);
-       ewl_callback_append(confirm.button_exit, EWL_CALLBACK_CLICKED,
-                           ewl_config_exit_cb, NULL);
-       ewl_widget_show(confirm.button_exit);
-
-       confirm.button_cancel = ewl_button_new("Cancel");
-       ewl_container_append_child(EWL_CONTAINER(confirm.button_hbox),
-                                  confirm.button_cancel);
-       ewl_callback_append(confirm.button_cancel, EWL_CALLBACK_CLICKED,
-                           ewl_config_destroy_confirm_dialog, NULL);
-       ewl_widget_show(confirm.button_cancel);
-}
-
-void
-ewl_config_destroy_confirm_dialog(Ewl_Widget * w, void *ev_data,
-                                 void *user_data)
-{
-       if (confirm.win)
-               ewl_widget_destroy(confirm.win);
-
-       confirm.win = NULL;
-
-       return;
-       w = NULL;
-       ev_data = NULL;
-       user_data = NULL;
-}



-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys -- and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to