seoz pushed a commit to branch master.

http://git.enlightenment.org/tools/elm-theme-viewer.git/commit/?id=de406e5b380f8fa5d07bce7dae9679d81f8fa7ad

commit de406e5b380f8fa5d07bce7dae9679d81f8fa7ad
Author: Daniel Juyung Seo <seojuyu...@gmail.com>
Date:   Thu Mar 20 03:21:43 2014 +0900

    widget_style, theme, gui: Saved more information about each style.
    
    Save group name, manipulated style, and real style name on theme load.
---
 src/bin/gui.c          | 17 ++++++++---------
 src/bin/theme.c        | 33 +++++++++++++++++++++++++--------
 src/bin/widget.h       |  8 ++++++++
 src/bin/widget_style.c | 10 +++++-----
 src/bin/widget_style.h |  4 ++--
 5 files changed, 48 insertions(+), 24 deletions(-)

diff --git a/src/bin/gui.c b/src/bin/gui.c
index 1d8bbb1..01a19c8 100644
--- a/src/bin/gui.c
+++ b/src/bin/gui.c
@@ -524,10 +524,10 @@ _style_list_sel_cb(void *data EINA_UNUSED, Evas_Object 
*obj EINA_UNUSED,
 {
    Style_Data *sd = data;
 
-   if (!data || !sd->widget_type || !sd->style) return;
-   INF("%s %s", widget_name_get_by_type(sd->widget_type), sd->style);
+   if (!data || !sd->widget_type || !sd->wds->style) return;
+   INF("%s %s", widget_name_get_by_type(sd->widget_type), sd->wds->style);
 
-   _preview_create(sd->widget_type, sd->style);
+   _preview_create(sd->widget_type, sd->wds->style);
    widget_option_content_update(sd->widget_type);
 }
 
@@ -601,24 +601,23 @@ _gui_widget_style_load(Evas_Object *parent, Widget_Type 
type)
 {
    Evas_Object *o = NULL;
    Eina_List *styles = NULL, *l = NULL;
-   const char *style = NULL;
+   Widget_Data_Style *wds = NULL;
    Style_Data *sd = NULL;
 
    // widget styles list
    o = elm_list_add(parent);
    elm_list_select_mode_set(o, ELM_OBJECT_SELECT_MODE_ALWAYS);
    styles = theme_widget_styles_get(type);
-   EINA_LIST_FOREACH(styles, l, style)
+   EINA_LIST_FOREACH(styles, l, wds)
      {
-        if (_gui_widget_style_exclude_check(type, style))
+        if (_gui_widget_style_exclude_check(type, wds->style))
           continue;
 
         // TODO: sd needs to be freed properly
         sd = (Style_Data *)calloc(1, sizeof(Style_Data));
         sd->widget_type = type;
-        sd->style = style;
-        style = widget_style_filter(sd);
-        elm_list_item_append(o, style, NULL, NULL, _style_list_sel_cb, sd);
+        sd->wds = wds;
+        elm_list_item_append(o, wds->style, NULL, NULL, _style_list_sel_cb, 
sd);
      }
 
    // add additional hacky custom styles for special reasons
diff --git a/src/bin/theme.c b/src/bin/theme.c
index 9d02abf..4e2f12a 100644
--- a/src/bin/theme.c
+++ b/src/bin/theme.c
@@ -27,12 +27,16 @@ void
 theme_shutdown(void)
 {
    Widget_Data *wd = NULL;
-   char *style = NULL;
+   Widget_Data_Style *wds = NULL;
 
    EINA_LIST_FREE(widget_list, wd)
      {
-        EINA_LIST_FREE(wd->styles, style)
-          eina_stringshare_del(style);
+        EINA_LIST_FREE(wd->styles, wds)
+          {
+             eina_stringshare_del(wds->group);
+             eina_stringshare_del(wds->style);
+             eina_stringshare_del(wds->simple);
+          }
         free(wd);
      }
 }
@@ -56,6 +60,15 @@ theme_unset(const char *edje_file)
    elm_theme_free(th);
 }
 
+static int
+_style_compare_cb(const void *data1, const void *data2)
+{
+   const Widget_Data_Style *wds1 = data1;
+   const Widget_Data_Style *wds2 = data2;
+
+   return strcmp(wds1->style, wds2->style);
+}
+
 void
 theme_load(const char *edje_file)
 {
@@ -64,7 +77,8 @@ theme_load(const char *edje_file)
    char *style = NULL;
    char buf[PATH_MAX] = {0, };
    Widget_Data *wd = NULL;
-   Eina_Compare_Cb cmp_func = (Eina_Compare_Cb)strcmp;
+   Widget_Data_Style *wds = NULL;
+   Eina_Compare_Cb cmp_func = (Eina_Compare_Cb)_style_compare_cb;
 
    if (!edje_file) return;
 
@@ -105,10 +119,13 @@ theme_load(const char *edje_file)
         style++;
 
         //INF("%s %s %p", group, style, wd);
-        wd->styles = eina_list_sorted_insert(
-           wd->styles,
-           cmp_func,
-           eina_stringshare_add(style));
+        wds = (Widget_Data_Style *)calloc(1, sizeof(Widget_Data_Style));
+        wds->group = eina_stringshare_add(group);
+        wds->style = eina_stringshare_add(style);
+        wds->simple = eina_stringshare_add(
+           widget_style_filter(wd->type, style));
+
+        wd->styles = eina_list_sorted_insert(wd->styles, cmp_func, wds);
      }
 
    edje_file_collection_list_free(groups);
diff --git a/src/bin/widget.h b/src/bin/widget.h
index d6e0bdc..0fcb4cb 100644
--- a/src/bin/widget.h
+++ b/src/bin/widget.h
@@ -73,6 +73,14 @@ struct _Widget
    const char *desc;
 };
 
+typedef struct _Widget_Data_Style Widget_Data_Style;
+struct _Widget_Data_Style
+{
+   Eina_Stringshare *group; // original group name ex) elm/button/base/default
+   Eina_Stringshare *style; // manipulated style name ex) base/default
+   Eina_Stringshare *simple; // real style name ex) default
+};
+
 typedef struct _Widget_Data Widget_Data;
 struct _Widget_Data
 {
diff --git a/src/bin/widget_style.c b/src/bin/widget_style.c
index afca72b..5b7aae7 100644
--- a/src/bin/widget_style.c
+++ b/src/bin/widget_style.c
@@ -56,11 +56,11 @@ _split_style(const char *style EINA_UNUSED, const char 
**style1 EINA_UNUSED, con
 
 
 const char *
-widget_style_filter(const Style_Data *sd)
+widget_style_filter(Widget_Type type, const char *orig_style)
 {
    const char *style = NULL;
 
-   switch (sd->widget_type)
+   switch (type)
      {
       case ETV_ID_ACTIONSLIDER:
       case ETV_ID_BG:
@@ -88,7 +88,7 @@ widget_style_filter(const Style_Data *sd)
       case ETV_ID_THUMB:
       case ETV_ID_TOOLTIP:
       case ETV_ID_VIDEO:
-         style = sd->style + strlen("base/");
+         style = orig_style + strlen("base/");
          break;
 
       case ETV_ID_BUBBLE:
@@ -120,12 +120,12 @@ widget_style_filter(const Style_Data *sd)
       case ETV_ID_TOOLBAR: // base, item, more, object, separator
       case ETV_ID_WIN: // base, inwin
       default:
-         //style = _style_split_2(sd->style);
+         //style = _style_split_2(orig_style);
          break;
      }
 
    if (style)
      return style;
    else
-     return sd->style;
+     return orig_style;
 }
diff --git a/src/bin/widget_style.h b/src/bin/widget_style.h
index 5ab9a28..f17fa28 100644
--- a/src/bin/widget_style.h
+++ b/src/bin/widget_style.h
@@ -5,11 +5,11 @@ typedef struct _Style_Data Style_Data;
 struct _Style_Data
 {
    Widget_Type widget_type;
-   const char *style;
+   Widget_Data_Style *wds;
 };
 
 void _style_split_1(const char *orig_style, char style[PATH_MAX]);
 const char * _style_split_2(const char *orig_style);
-const char * widget_style_filter(const Style_Data *sd);
+const char * widget_style_filter(Widget_Type type, const char *orig_style);
 
 #endif

-- 


Reply via email to