Enlightenment CVS committal

Author  : codewarrior
Project : e17
Module  : apps/e_utils

Dir     : e17/apps/e_utils/src/bin/ethemes


Modified Files:
        E_Preview.h Makefile.am e_preview.c main.c 


Log Message:
patch from Chady Leviathan Kassouf for various fixes and new scrollbar 
integration
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e_utils/src/bin/ethemes/E_Preview.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- E_Preview.h 12 Oct 2005 14:56:41 -0000      1.1
+++ E_Preview.h 14 Nov 2005 10:42:46 -0000      1.2
@@ -23,5 +23,36 @@
 void e_preview_theme_set(Evas_Object *object, const char * theme);
 
 
+int e_preview_is_theme(Evas * evas, const char * theme);
+
+/**
+ * initialize thumb generation.
+ */
+int e_preview_thumb_init(void);
+
+/**
+ * Get the full path of the thumbnail
+ */
+char * e_preview_thumb_file_get(const char * theme);
+
+/**
+ * Check the validity of the thumbnail
+ * @theme - the name of the theme file.
+ */
+int e_preview_thumb_check(const char * theme);
+
+/**
+ * Create a thumbnail for the current theme
+ * @theme - the name of the theme file.
+ */
+int e_preview_thumb_generate(const char * theme);
+
+/**
+ * Set an evas object's data to the thumbnail's image
+ * @theme - the name of the theme file
+ * @obj - the evas image object
+ */
+int e_preview_thumb_image(const char * theme, Evas_Object * obj);
+
 #endif
 
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e_utils/src/bin/ethemes/Makefile.am,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -3 -r1.3 -r1.4
--- Makefile.am 23 Oct 2005 11:51:18 -0000      1.3
+++ Makefile.am 14 Nov 2005 10:42:46 -0000      1.4
@@ -9,6 +9,7 @@
        @ECORE_CFLAGS@ \
        @EVAS_CFLAGS@ \
        @ESMART_CFLAGS@ \
+       @[EMAIL PROTECTED]
        @EDJE_CFLAGS@ \
        @ENLIGHTENMENT_CFLAGS@
 
@@ -26,6 +27,7 @@
        @EDJE_LIBS@ \
        @ESMART_LIBS@ \
        -lesmart_container \
+       @EET_LIBS@ \
        @ENLIGHTENMENT_LIBS@
 
 EXTRA_DIST = \
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e_utils/src/bin/ethemes/e_preview.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- e_preview.c 24 Oct 2005 10:51:19 -0000      1.2
+++ e_preview.c 14 Nov 2005 10:42:46 -0000      1.3
@@ -4,12 +4,13 @@
 #include <limits.h>
 #include <Edje.h>
 #include <Evas.h>
+#include <Ecore_Evas.h>
+#include <Eet.h>
 #include <E_Lib.h>
 #include <sys/stat.h>
 
 #include "E_Preview.h"
 
-
 typedef struct _e_preview E_Preview; 
 struct _e_preview {
 
@@ -34,19 +35,13 @@
 static void _e_preview_redraw(Evas_Object *);
 static void _e_preview_add(Evas_Object *);
 static void _e_preview_del(Evas_Object *);
-static void _e_preview_layer_set(Evas_Object *, int);
-static void _e_preview_raise(Evas_Object *);
-static void _e_preview_lower(Evas_Object *);
-static void _e_preview_stack_above(Evas_Object *, Evas_Object *);
-static void _e_preview_stack_below(Evas_Object *, Evas_Object *);
 static void _e_preview_move(Evas_Object *, Evas_Coord, Evas_Coord);
 static void _e_preview_resize(Evas_Object *, Evas_Coord, Evas_Coord);
 static void _e_preview_show(Evas_Object *);
 static void _e_preview_hide(Evas_Object *);
-static void _e_preview_color_set(Evas_Object *, int, int, int, int);
 static void _e_preview_clip_set(Evas_Object *, Evas_Object *);
-static void _e_preview_clip_unset(Evas_Object *);
 
+static char * _e_thumb_file_id(char *file);
 
 
 Evas_Object * e_preview_new(Evas *evas) {
@@ -86,18 +81,14 @@
                        "e_preview",
                        _e_preview_add,
                        _e_preview_del,
-                       _e_preview_layer_set,
-                       _e_preview_raise,
-                       _e_preview_lower,
-                       _e_preview_stack_above,
-                       _e_preview_stack_below,
+                       NULL, NULL, NULL, NULL, NULL,
                        _e_preview_move,
                        _e_preview_resize,
                        _e_preview_show,
                        _e_preview_hide,
-                       _e_preview_color_set,
+                       NULL, 
                        _e_preview_clip_set,
-                       _e_preview_clip_unset,
+                       NULL,
                        NULL
                        );
        return smart;
@@ -151,77 +142,6 @@
        }
 }
 
-static void _e_preview_layer_set(Evas_Object *o, int l) {
-       E_Preview * data;
-
-       if ((data = evas_object_smart_data_get(o))) {
-               evas_object_layer_set(data->wallpaper, l);
-               evas_object_layer_set(data->window, l);
-               evas_object_layer_set(data->clock, l);
-               evas_object_layer_set(data->start, l);
-               evas_object_layer_set(data->pager[0], l);
-               evas_object_layer_set(data->pager[1], l);
-               evas_object_layer_set(data->pager[2], l);
-       }
-}
-
-static void _e_preview_raise(Evas_Object *o) {
-       E_Preview * data;
-
-       if ((data = evas_object_smart_data_get(o))) {
-               evas_object_raise(data->wallpaper);
-               evas_object_raise(data->window);
-               evas_object_raise(data->clock);
-               evas_object_raise(data->start);
-               evas_object_raise(data->pager[0]);
-               evas_object_raise(data->pager[1]);
-               evas_object_raise(data->pager[2]);
-       }
-}
-
-static void _e_preview_lower(Evas_Object *o) {
-       E_Preview * data;
-
-       if ((data = evas_object_smart_data_get(o))) {
-               evas_object_lower(data->wallpaper);
-               evas_object_lower(data->window);
-               evas_object_lower(data->clock);
-               evas_object_lower(data->start);
-               evas_object_lower(data->pager[0]);
-               evas_object_lower(data->pager[1]);
-               evas_object_lower(data->pager[2]);
-       }
-}
-
-static void _e_preview_stack_above(Evas_Object *o, Evas_Object * above) {
-       E_Preview * data;
-
-       if ((data = evas_object_smart_data_get(o))) {
-               evas_object_stack_above(data->wallpaper, above);
-               evas_object_stack_above(data->window, above);
-               evas_object_stack_above(data->clock, above);
-               evas_object_stack_above(data->start, above);
-               evas_object_stack_above(data->pager[0], above);
-               evas_object_stack_above(data->pager[1], above);
-               evas_object_stack_above(data->pager[2], above);
-       }
-}
-       
-static void _e_preview_stack_below(Evas_Object *o, Evas_Object * below) {
-       E_Preview * data;
-
-       if ((data = evas_object_smart_data_get(o))) {
-               evas_object_stack_below(data->wallpaper, below);
-               evas_object_stack_below(data->window, below);
-               evas_object_stack_below(data->clock, below);
-               evas_object_stack_below(data->start, below);
-               evas_object_stack_below(data->pager[0], below);
-               evas_object_stack_below(data->pager[1], below);
-               evas_object_stack_below(data->pager[2], below);
-       }
-}
-
-
 static void _e_preview_move(Evas_Object *o, Evas_Coord x, Evas_Coord y) {
        E_Preview *data;
 
@@ -273,9 +193,27 @@
        }
 }
 
+int e_preview_is_theme(Evas * evas, const char * theme) {
+
+       char * file = malloc(sizeof(char) * PATH_MAX);
+       snprintf(file, PATH_MAX, "%s/.e/e/themes/%s", getenv("HOME"), theme);
+
+       Evas_Object * o = NULL;
+       o = edje_object_add(evas);
+       edje_object_file_set(o, file, "widgets/border/default/border");
+       if (edje_object_part_exists(o, "widgets/border/default/border")) 
+               return 1;
+
+       return 0;
+                        
+}
+
 void e_preview_theme_set(Evas_Object *object, const char * theme) {
 
        E_Preview *data;
+       Evas * evas = NULL;
+       
+       evas = evas_object_evas_get(object);
 
        if ((data = evas_object_smart_data_get(object))) {
 
@@ -309,27 +247,22 @@
                                     data->theme,
                                     "widgets/border/default/border");
                
-               edje_object_file_set(data->clock,
-                                    data->theme,
-                                    "modules/clock/main");
-
-               edje_object_file_set(data->clock,
-                                    data->theme,
-                                    "modules/clock/main");
+               if (! data->clock ) data->clock = edje_object_add(evas);
+               if (! edje_object_file_set(data->clock, data->theme, 
"modules/clock/main")) {
+                       evas_object_del(data->clock);
+                       data->clock = NULL;
+               }
 
-               edje_object_file_set(data->start,
-                                    data->theme,
-                                    "modules/start/main");
+               if (! data->start ) data->start = edje_object_add(evas);
+               if (! edje_object_file_set(data->start, data->theme, 
"modules/start/main")) {
+                       evas_object_del(data->start);
+                       data->start = NULL;
+               }
 
-               edje_object_file_set(data->pager[0],
-                                    data->theme,
-                                    "modules/pager/main");
-               edje_object_file_set(data->pager[1],
-                                    data->theme,
-                                    "modules/pager/desk");
-               edje_object_file_set(data->pager[2],
-                                    data->theme,
-                                    "modules/pager/window");
+               if (edje_object_file_set(data->pager[0], data->theme, 
"modules/pager/main")) {
+                       edje_object_file_set(data->pager[1], data->theme, 
"modules/pager/desk");
+                       edje_object_file_set(data->pager[2], data->theme, 
"modules/pager/window");
+               }
 
                e_preview_init(object);
        }
@@ -394,19 +327,23 @@
                                data->h * 0.75);
 
                /* clock */
-               evas_object_move(data->clock, 
+               if (data->clock) {
+                       evas_object_move(data->clock, 
                                data->x + (data->w * 0.9),
                                data->y + (data->h * 0.9));
-               evas_object_resize(data->clock,
+                       evas_object_resize(data->clock,
                                data->w * 0.1,
                                data->h * 0.1);
-
+               }
+               
                /* start */
-               evas_object_move(data->start,
+               if (data->start) {
+                       evas_object_move(data->start,
                                data->x, data->y + (data->h * 0.9));
-               evas_object_resize(data->start,
+                       evas_object_resize(data->start,
                                data->w * 0.1, data->h * 0.1);
-
+               }
+               
                /* pager */
                evas_object_move(data->pager[0], 
                                data->x + (data->w * 0.3),
@@ -418,22 +355,146 @@
        }
 }
 
+int e_preview_thumb_image(const char * thumb, Evas_Object * obj) {
+
 
+       Eet_File * ef;
+       ef = eet_open(thumb, EET_FILE_MODE_READ);
+       if (ef) {
+               int * pixels;
+               pixels = (int *) eet_data_image_read(ef, "/thumbnail/data", 
+                               NULL, NULL, NULL, NULL, NULL, NULL);
+               evas_object_image_data_set(obj, pixels);
+               eet_close(ef);
+       }
 
-static void _e_preview_color_set(Evas_Object *o, 
-               int r, int g, int b, int a) {}
+       return 1;
+
+}
+
+int e_preview_thumb_init(void) {
+
+       char  path[PATH_MAX];
+       snprintf(path, sizeof(path), "%s/.e/e/fileman/thumbnails", 
getenv("HOME"));
+       if (!ecore_file_exists(path))
+               ecore_file_mkpath(path);
+       else
+               return 0;
+       
+       return 1;
+
+}
+
+int e_preview_thumb_check(const char * theme) {
+
+       struct stat themestatus;
+       struct stat thumbstatus;
+       char themefile[PATH_MAX];
+       snprintf(themefile, PATH_MAX, "%s/.e/e/themes/%s", getenv("HOME"), 
theme);
+
+       char * thumb = e_preview_thumb_file_get(theme);
+
+       if (stat(themefile, &themestatus) == 0)
+               if (stat(thumb, &thumbstatus) == 0) {
+                       if (themestatus.st_mtime > thumbstatus.st_mtime) /* not 
uptodate */
+                               return 1;
+               } else {
+                       return 1;
+               }
+               
+
+       
+       return 0;
+}
+
+char * e_preview_thumb_file_get(const char * theme) {
+
+       char * file = (char *)malloc(sizeof(char) * PATH_MAX);
+       snprintf(file, PATH_MAX, "%s/.e/e/themes/%s", getenv("HOME"), theme);
+       
+       char * thumb = (char *)malloc(sizeof(char) * PATH_MAX);
+       snprintf(thumb, PATH_MAX, "%s/.e/e/fileman/thumbnails/%s", 
getenv("HOME"), _e_thumb_file_id(file));
+
+       return thumb;
+}
+
+int e_preview_thumb_generate(const char * theme) {
+
+       printf("Generating thumb.\n");
+       Ecore_Evas *ee = NULL;
+       Evas *e = NULL;
+       Evas_Object * preview;
+       
+       ee = ecore_evas_buffer_new(640, 480);
+       e = ecore_evas_get(ee);
+       preview = e_preview_new(e);
+       e_preview_theme_set(preview, theme);
+       evas_object_move(preview, 0, 0);
+       evas_object_resize(preview, 640, 480);
+       evas_object_show(preview);
+
+       const int *pixels;
+       pixels = ecore_evas_buffer_pixels_get(ee);
+       char * out = e_preview_thumb_file_get(theme);
+       
+       Eet_File * ef;
+       ef = eet_open(out, EET_FILE_MODE_WRITE);
+       if (ef) {
+               char path[PATH_MAX];
+               snprintf(path, PATH_MAX, "%s/.e/e/themes/%s", getenv("HOME"), 
theme);
+               eet_write(ef, "/thumbnail/orig_path", path, strlen(path), 1);
+               eet_data_image_write(ef, "/thumbnail/data", (void *) pixels, 
640, 480, 1, 0, 91, 1);
+               eet_close(ef);
+       }
+       
+       return 1;
+}
 
 static void _e_preview_clip_set(Evas_Object *o, Evas_Object *clip){
        E_Preview *data;
        if ((data = evas_object_smart_data_get(o))) {
                evas_object_clip_set(data->wallpaper, clip);
-
        }
-
-
 }
 
-static void _e_preview_clip_unset(Evas_Object *o) {}
-
 
+/* return hash for a file  (from E) */
+static char * _e_thumb_file_id(char *file) {
+   char                s[256], *sp;
+   const char         *chmap =
+     "0123456789abcdef"
+     "ghijklmnopqrstuv"
+     "[EMAIL PROTECTED]&*()"
+     "[];',.{}<>?-=_+|";
+   unsigned int        id[4], i;
+   struct stat         st;
+
+   if (stat(file, &st) < 0)
+     return NULL;
+
+   id[0] = st.st_ino;
+   id[1] = st.st_dev;
+   id[2] = (st.st_size & 0xffffffff);
+   id[3] = (st.st_mtime & 0xffffffff);
+
+   sp = s;
+   for (i = 0; i < 4; i++)
+     {
+        unsigned int t, tt;
+        int j;
+
+        t = id[i];
+        j = 32;
+        while (j > 0)
+          {
+             tt = t & ((1 << 6) - 1);
+             *sp = chmap[tt];
+             t >>= 6;
+             j -= 6;
+             sp++;
+          }
+     }
+   *sp = 0;
+   return strdup(s);
+}
 
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e_utils/src/bin/ethemes/main.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -3 -r1.7 -r1.8
--- main.c      23 Oct 2005 11:51:18 -0000      1.7
+++ main.c      14 Nov 2005 10:42:46 -0000      1.8
@@ -21,22 +21,92 @@
 const int HEIGHT = 500;
 const int container_height = 400;
 
-char * selected_theme;
-char * current_theme;
-
 Evas_List * themes;
 
-Evas_Object * label;
-
 Evas_Object * container_outer;
 Evas_Object * container;
-Evas_Object * scrollbar;
 
-Evas_Object ** buttons;
+Evas_Object * b_default,
+           * b_apply,
+           * b_exit;
+
 Evas_Object * preview;
 Evas_Object * preview_clip;
 Evas_Object * background;
 
+Evas_Object * last_button;
+
+char * default_theme;
+char * selected_theme;
+
+typedef struct {
+       Evas_Object * thumb;
+       Evas_Object * button;
+       char * theme;
+       char * label;
+       char * thumbpath;
+} Etheme_Object;
+
+
+static void _preview_theme(void *data, Evas_Object *obj, const char *emission, 
const char *source);
+
+Etheme_Object * etheme_new(const char * t) {
+
+       Etheme_Object * o;
+       o = (Etheme_Object *) malloc(sizeof(Etheme_Object));
+
+       o->theme = (char *) strdup(t);
+       o->thumbpath = e_preview_thumb_file_get(t);
+
+
+       int size = strlen(t) - 4; /* without .edj */
+
+       o->label = malloc(sizeof(char) * size);
+       o->label = strncpy(o->label, t, size);
+       o->label[size] = 0;
+               
+       o->button = edje_object_add(evas);
+
+       edje_object_file_set(o->button, default_theme, "fileman/icon_normal");
+       evas_object_resize(o->button, 100, 120);
+       edje_object_part_text_set(o->button, "icon_title" , o->label);
+               
+       esmart_container_element_append(container, o->button);
+       
+       if (e_preview_thumb_check(t))
+               e_preview_thumb_generate(t);
+               
+       o->thumb = evas_object_image_add(evas);
+       evas_object_image_size_set(o->thumb, 640, 480);
+       evas_object_image_fill_set(o->thumb, 0, 0, 85, 85);
+       e_preview_thumb_image(o->thumbpath, o->thumb);
+
+       edje_object_part_swallow(o->button, "icon_swallow", o->thumb);
+
+       evas_object_show(o->button);
+
+       edje_object_signal_callback_add(o->button, "mouse,up,1", "icon_event",
+                               _preview_theme, o);
+               
+       
+       return o;
+
+}
+
+void etheme_free(Etheme_Object * o) {
+
+       if (!o) return;
+
+       if (o->theme) free(o->theme);
+       if (o->thumbpath) free(o->thumbpath);
+       if (o->label) free(o->label);
+       
+       evas_object_del(o->thumb);
+       evas_object_del(o->button);
+
+       free(o);
+}
+
 
 void _resize_cb(Ecore_Evas * ee) {
 
@@ -52,30 +122,47 @@
        evas_object_move(background, 0, 0);
        evas_object_resize(background, barwidth, h);
        evas_object_show(background);
+               
+       evas_object_resize(container_outer, barwidth, h - 100);
 
        int length = (int) esmart_container_elements_length_get(container);
-       if (length > h - 100) {
-               evas_object_resize(container_outer, barwidth - 19, h - 100);
-               evas_object_show(scrollbar);
-       } else {
-               evas_object_resize(container_outer, barwidth, h - 100);
-               evas_object_hide(scrollbar);
-       }
 
-       int n = evas_list_count(themes);
-       evas_object_move(buttons[n], 0, h - 100 + 10);
-       evas_object_move(buttons[n+1], 0, h - 100 + 40);
-       evas_object_move(buttons[n+2], 0, h - 100 + 60);
-       evas_object_resize(scrollbar, 16, h - 100);
+       double size;
+       size = (double)(h - 100) / (double)length;
+
+       edje_object_part_drag_size_set(container_outer, "vbar_bar", 1.0, size);
+
+       if (length > h - 100)
+               edje_object_signal_emit(container_outer, "vbar", "show");
+       else
+               edje_object_signal_emit(container_outer, "vbar", "hide");
+
+       evas_object_move(b_default, 0, h - 100 + 10);
+       evas_object_move(b_apply, 0, h - 100 + 40);
+       evas_object_move(b_exit, 0, h - 100 + 60);
 
        
 }
 
-static void _preview_theme(void *data, Evas_Object *o, const char *emission, 
const char *source) {
+static void _preview_theme(void *data, Evas_Object *obj, const char *emission, 
const char *source) {
 
-       selected_theme = (char *) data;
+       Etheme_Object * o;
+       o = (Etheme_Object *) data;
+
+       if (!o)
+               selected_theme = (char *)strdup("default.edj");
+       else
+               selected_theme = o->theme;
 
        e_preview_theme_set(preview, selected_theme);
+
+       if (last_button)
+               edje_object_signal_emit(last_button, "unclicked", "");
+       if (o) {
+               edje_object_signal_emit(o->button, "clicked", "");
+               last_button = o->button;
+       }
+       
        _resize_cb(ee);
 
 }
@@ -97,31 +184,15 @@
 
 }
 
-static void _scrollup(void *data, Evas_Object *o, const char *emission, const 
char *source) { 
-       esmart_container_scroll_start(container, 1);
-}
-
-static void _scrolldown(void *data, Evas_Object *o, const char *emission, 
const char *source) { 
-       esmart_container_scroll_start(container, -1);
-}
-
 static void _scrolldrag(void *data, Evas_Object *o, const char *emission, 
const char *source) { 
                
-       double x, y;
-       edje_object_part_drag_value_get(scrollbar, "drag", &x, &y);
+       double y;
+       edje_object_part_drag_value_get(container_outer, "vbar_bar", NULL,  &y);
        esmart_container_scroll_percent_set(container, y);
 
 }
 
-static void _scrollstop(void *data, Evas_Object *o, const char *emission, 
const char *source) { 
-       esmart_container_scroll_stop(container);
-       double s;
-       s = esmart_container_scroll_percent_get(container);
-       edje_object_part_drag_value_set(scrollbar, "drag", 1, s);
-
-}
-
-void read_theme_list() {
+void get_theme_list() {
 
        char * path;
        path = malloc(sizeof(char) * PATH_MAX);
@@ -133,10 +204,13 @@
        ecore_list_goto_first(list);
        char * data;
        themes = NULL;
-       while ((data = (char *)ecore_list_next(list)))
+       while (data = (char *)ecore_list_next(list))
                if (strstr(data, ".edj") != NULL) {
                        char * file = (char *) strdup(data);
-                       themes = evas_list_append(themes, file);
+                       Etheme_Object * o;
+                       o = etheme_new(file);
+                       themes = evas_list_append(themes, o);
+                       free(file);
                }
        
        ecore_list_destroy(list);
@@ -146,74 +220,42 @@
 
 void create_buttons() {
 
-       int n = evas_list_count(themes);
-       
-       buttons = calloc(n + 3, sizeof(Evas_Object *));
        
        container_outer = edje_object_add(evas);
-       edje_object_file_set(container_outer, current_theme, 
"modules/ibar/main");
+       edje_object_file_set(container_outer, default_theme, 
"widgets/scrollframe");
        evas_object_move(container_outer, 0, 0);
+       edje_object_signal_emit(container_outer, "hbar", "hide");
        evas_object_resize(container_outer, barwidth - 19, container_height);
        evas_object_show(container_outer);
 
-       scrollbar = edje_object_add(evas);
-       edje_object_file_set(scrollbar, current_theme, "widgets/vscrollbar");
-       evas_object_move(scrollbar, barwidth - 19, 0);
-       evas_object_resize(scrollbar, 16, container_height);
-       evas_object_show(scrollbar);
-
-       edje_object_signal_callback_add(scrollbar, "scroll_top_start", "", 
_scrollup, NULL);
-       edje_object_signal_callback_add(scrollbar, "scroll_bottom_start", "", 
_scrolldown, NULL);
-       edje_object_signal_callback_add(scrollbar, "scroll_top_stop", "", 
_scrollstop, NULL);
-       edje_object_signal_callback_add(scrollbar, "scroll_bottom_stop", "", 
_scrollstop, NULL);
-       edje_object_signal_callback_add(scrollbar, "drag", "*", _scrolldrag, 
NULL);
+       edje_object_signal_callback_add(container_outer, "drag*", "vbar_bar", 
_scrolldrag, NULL);
        
        container = esmart_container_new(evas);
-       edje_object_part_swallow(container_outer, "items", container);
+       edje_object_part_swallow(container_outer, "item", container);
        esmart_container_direction_set(container, CONTAINER_DIRECTION_VERTICAL);
        
+       get_theme_list();
 
-#define BUTTON_EVENTS(A, B, C)\
-       edje_object_signal_callback_add(buttons[A], "click", "", B, C);
-       
-#define ADD_BUTTON(A, B, C, D)\
-       buttons[A] = edje_object_add(evas);\
-       edje_object_file_set(buttons[A], current_theme, "widgets/button");\
-       evas_object_resize(buttons[A], D, 24);\
-       edje_object_part_text_set(buttons[A], "label", C);\
-       evas_object_show(buttons[A]);
-       
-       int i;
-       for (i=0; i<n; i++) {
-                       
-               char * n;
-               n = evas_list_nth(themes, i);
-               char * name;
-               int size = strlen(n) - 4; /* without .edj */
-               name = malloc(sizeof(char) * size);
-               name = strncpy(name, n, size);
-               name[size] = 0;
-               
-               ADD_BUTTON(i, 20, name, 100);
-               esmart_container_element_append(container, buttons[i]);
-               BUTTON_EVENTS(i, _preview_theme, evas_list_nth(themes, i));
-               
-       }
-       
-       ADD_BUTTON(n, 40, "Default Theme", 120);
-       evas_object_move(buttons[n], 5, container_height + 10);
-       BUTTON_EVENTS(n, _preview_theme, "default.edj");
+#define ADD_BUTTON(A, B, C)\
+       A = edje_object_add(evas);\
+       edje_object_file_set(A, default_theme, "widgets/button");\
+       evas_object_resize(A, 120, 24);\
+       edje_object_part_text_set(A, "label", C);\
+       evas_object_show(A);
+       
+       ADD_BUTTON(b_default, 40, "Default Theme");
+       evas_object_move(b_default, 5, container_height + 10);
+       edje_object_signal_callback_add(b_default, "click", "", _preview_theme, 
NULL);
         
-       ADD_BUTTON(n + 1, 60, "Apply", 120);
-       evas_object_move(buttons[n+1], 5, container_height + 40);
-       BUTTON_EVENTS(n + 1, _set_theme, NULL);
-       
-       ADD_BUTTON(n + 2, 80, "Exit", 120);
-       evas_object_move(buttons[n+2], 5, container_height + 60);
-       BUTTON_EVENTS(n + 2, _ethemes_exit, NULL);
+       ADD_BUTTON(b_apply, 60, "Apply");
+       evas_object_move(b_apply, 5, container_height + 40);
+       edje_object_signal_callback_add(b_apply, "click", "", _set_theme, NULL);
+       
+       ADD_BUTTON(b_exit, 80, "Exit");
+       evas_object_move(b_exit, 5, container_height + 60);
+       edje_object_signal_callback_add(b_exit, "click", "", _ethemes_exit, 
NULL);
        
 
-#undef BUTTON_EVENTS
 #undef ADD_BUTTON
 }
 
@@ -222,17 +264,9 @@
        E_Response_Theme_Get *e;
        e = ev;
        
-/* for now, I'll only use the default e17 theme cause it's the only one that 
- * is guaranteed to work.
- 
-       current_theme = malloc(sizeof(char) * PATH_MAX);
-       snprintf(current_theme, PATH_MAX, "%s/.e/e/themes/%s", getenv("HOME"),
-                       e->file);
-*/
-       
-       current_theme = E17PREFIX 
"/share/enlightenment/data/themes/default.edj";
+       default_theme = (char *) strdup(E17PREFIX 
"/share/enlightenment/data/themes/default.edj");
 
-       edje_object_file_set(background, current_theme, 
"widgets/menu/default/background");
+       edje_object_file_set(background, default_theme, 
"widgets/menu/default/background");
 
        selected_theme = (char *)strdup(e->file);
        e_preview_theme_set(preview, selected_theme);
@@ -273,6 +307,8 @@
        evas_object_resize(background, barwidth, HEIGHT);
        evas_object_show(background);
 
+       e_preview_thumb_init();
+
        preview = e_preview_new(evas);
        
        preview_clip = evas_object_rectangle_add(evas);
@@ -280,8 +316,8 @@
        evas_object_resize(preview_clip, WIDTH - barwidth, HEIGHT);
        evas_object_show(preview_clip);
        evas_object_clip_set (preview, preview_clip);
-       
-       read_theme_list();
+
+       last_button = NULL;
 
        ecore_evas_callback_resize_set(ee, _resize_cb);
                
@@ -290,7 +326,28 @@
                        
        ecore_main_loop_begin();
 
+       /* free ethemes */
+       int n = evas_list_count(themes);
+       for ( n -= 1; n>=0; n--) {
+               Etheme_Object * o;
+               o = evas_list_nth(themes, n);
+               etheme_free(o);
+       }
+       evas_list_free(themes);
 
+       /* free canvas objects */
+       evas_object_free(container);
+       evas_object_free(container_outer);
+       evas_object_free(b_apply);
+       evas_object_free(b_default);
+       evas_object_free(b_exit);
+       evas_object_free(background);
+       evas_object_free(preview);
+       evas_object_free(preview_clip);
+       
+       if (selected_theme) free(selected_theme);
+       if (default_theme) free(default_theme);
+       
        edje_shutdown();
        ecore_shutdown();
 
@@ -298,4 +355,3 @@
 }
 
 
-




-------------------------------------------------------
SF.Net email is sponsored by:
Tame your development challenges with Apache's Geronimo App Server. Download
it for free - -and be entered to win a 42" plasma tv or your very own
Sony(tm)PSP.  Click here to play: http://sourceforge.net/geronimo.php
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to