yoz pushed a commit to branch master.

http://git.enlightenment.org/misc/entrance.git/commit/?id=7607e486adb9dee02f5aaefd2ba36398504efe01

commit 7607e486adb9dee02f5aaefd2ba36398504efe01
Author: Michael Bouchaud <y...@efl.so>
Date:   Thu Mar 20 00:40:12 2014 +0000

    entrance: first step to split configuration panel code, create a generic 
interface to build config panel
---
 src/bin/entrance_conf.c | 877 ++++++++++++------------------------------------
 1 file changed, 210 insertions(+), 667 deletions(-)

diff --git a/src/bin/entrance_conf.c b/src/bin/entrance_conf.c
index 56e49be..4d0623f 100644
--- a/src/bin/entrance_conf.c
+++ b/src/bin/entrance_conf.c
@@ -1,745 +1,215 @@
 #include "entrance_client.h"
 
-typedef struct Entrance_Conf_Background_
+
+typedef struct Entrance_Conf_Module_
 {
-   const char *path;
-   const char *group;
-   const char *name;
-} Entrance_Conf_Background;
+   const char *label;
+   Entrance_Conf_Begin begin;
+   Entrance_Conf_End end;
+   Entrance_Conf_Build build;
+   Entrance_Conf_Check check;
+   Entrance_Conf_Apply apply;
+   Elm_Object_Item *item;
+} Entrance_Conf_Module;
 
 typedef struct Entrance_Int_Conf_
 {
-   struct
-     {
-        Evas_Object *preview;
-        const char *path;
-        const char *group;
-     } bg;
-   const char *theme;
-   const char *elm_profile;
-   Eina_Bool vkbd_enabled : 1;
-   double scale;
-   Eina_Bool update : 1;
-
-   struct
-     {
-        Entrance_Login *orig;
-        struct
-          {
-             Evas_Object *preview;
-             const char *path;
-             const char *group;
-          } bg;
-        struct
-          {
-             const char *path;
-             const char *group;
-          } image;
-        const char *lsess;
-        Eina_Bool remember_session : 1;
-        Eina_Bool update : 1;
-     } user;
-
-   struct
-     {
-        Evas_Object *btn_ok;
-        Evas_Object *btn_apply;
-     } gui;
+   Evas_Object *btn_ok;
+   Evas_Object *btn_apply;
+   Eina_List *modules;
+   Entrance_Conf_Module *current;
+   Entrance_Fill *background_fill;
 } Entrance_Int_Conf;
 
-
-static void _entrance_conf_init(void);
-static void _entrance_conf_shutdown(void);
+static void _entrance_conf_build(Evas_Object *naviframe, Evas_Object *segment);
+static void _entrance_conf_apply(void);
+static void _entrance_conf_end(Evas_Object *win);
+static void _entrance_conf_promote(Entrance_Conf_Module *conf);
+static void _entrance_conf_control_changed(void *data, Evas_Object *obj, void 
*event);
+static void _entrance_conf_ok_clicked(void *data, Evas_Object *obj, void 
*event);
+static void _entrance_conf_apply_clicked(void *data, Evas_Object *obj, void 
*event);
+static void _entrance_conf_close_clicked(void *data, Evas_Object *obj, void 
*event);
 static char *_entrance_conf_bg_text_get(void *data, Evas_Object *obj, const 
char *part);
 static Evas_Object *_entrance_conf_bg_content_get(void *data, Evas_Object 
*obj, const char *part);
-static Eina_Bool _entrance_conf_bg_state_get(void *data, Evas_Object *obj, 
const char *part);
-static void _entrance_conf_bg_sel(void *data, Evas_Object *obj, void 
*event_info);
-static Eina_Bool _entrance_conf_bg_fill_cb(void *data, Elm_Object_Item *it);
-static Eina_Bool _entrance_conf_user_bg_fill_cb(void *data, Elm_Object_Item 
*it);
-static void _entrance_conf_user_bg_sel(void *data, Evas_Object *obj, void 
*event_info);
-static void _entrance_conf_changed(void);
-static void _entrance_conf_apply(void);
-static Evas_Object *_entrance_conf_user_build(Evas_Object *obj);
-static void _entrance_conf_user_build_cb(Evas_Object *t, Entrance_Login *eu);
-
-static Entrance_Fill *_entrance_background_fill = NULL;
-static Entrance_Fill *_entrance_session_fill = NULL;
-static Entrance_Int_Conf *_entrance_int_conf = NULL;
+static void _entrance_conf_bg_del(void *data, Evas_Object *obj);
 
-static char *
-_entrance_conf_bg_text_get(void *data, Evas_Object *obj EINA_UNUSED, const 
char *part EINA_UNUSED)
-{
-   Entrance_Conf_Background *cbg;
-   cbg = data;
-   return strdup(cbg->name);
-}
 
-static Evas_Object *
-_entrance_conf_bg_content_get(void *data, Evas_Object *obj, const char *part)
-{
-   Entrance_Conf_Background *cbg;
-   Evas_Object *o = NULL;
-   cbg = data;
-   if (part && !strcmp("elm.swallow.icon", part))
-     {
-        o = elm_image_add(obj);
-        elm_image_file_set(o, cbg->path, cbg->group);
-        elm_image_smooth_set(o, EINA_FALSE);
-        evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND,
-                                         EVAS_HINT_EXPAND);
-        evas_object_show(o);
-     }
-   return o;
-}
 
-static Eina_Bool
-_entrance_conf_bg_state_get(void *data EINA_UNUSED, Evas_Object *obj 
EINA_UNUSED, const char *part EINA_UNUSED)
-{
-   return EINA_FALSE;
-}
+static Entrance_Int_Conf *_entrance_conf = NULL;
 
 static void
-_entrance_conf_bg_del(void *data, Evas_Object *obj EINA_UNUSED)
+_entrance_conf_build(Evas_Object *naviframe, Evas_Object *segment)
 {
-   Entrance_Conf_Background *cbg;
-   cbg = data;
-   eina_stringshare_del(cbg->name);
-   eina_stringshare_del(cbg->path);
-   eina_stringshare_del(cbg->group);
-   free(cbg);
-}
-
-static void
-_entrance_conf_bg_sel(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, 
void *event_info)
-{
-   Entrance_Conf_Background *cbg;
-   cbg = elm_object_item_data_get(event_info);
-   if (!elm_layout_file_set(_entrance_int_conf->bg.preview,
-                           cbg->path, cbg->group))
-     {
-        PT("Error on loading ");
-        fprintf(stderr, "%s %s\n", cbg->path, cbg->group);
-     }
-   _entrance_int_conf->bg.path = cbg->path;
-   _entrance_int_conf->bg.group = cbg->group;
-   _entrance_conf_changed();
-}
-
-static Eina_Bool
-_entrance_conf_bg_fill_cb(void *data, Elm_Object_Item *it)
-{
-   Entrance_Conf_Background *cbg;
-   const char *bg_path, *bg_group;
-   cbg = data;
+   Entrance_Conf_Module *conf;
+   Eina_List *l;
+   Evas_Object *o;
+   Elm_Object_Item *it, *itc;
 
-   entrance_gui_background_get(&bg_path, &bg_group);
-   if ((cbg->path)
-       && (cbg->group)
-       && (bg_path)
-       && (bg_group)
-       && (!strcmp(cbg->path, bg_path))
-       && (!strcmp(cbg->group, bg_group)))
+   EINA_LIST_FOREACH(_entrance_conf->modules, l, conf)
      {
-        elm_genlist_item_selected_set(it, EINA_TRUE);
-        return EINA_TRUE;
+        o = conf->build(naviframe);
+        it = elm_naviframe_item_simple_push(naviframe, o);
+        itc = elm_segment_control_item_add(segment, NULL, conf->label);
+        conf->item = it;
+        elm_object_item_data_set(itc, conf);
+        if (!_entrance_conf->current)
+          _entrance_conf_promote(conf);
      }
-   return EINA_FALSE;
 }
 
 static void
-_entrance_conf_user_bg_sel(void *data EINA_UNUSED, Evas_Object *obj 
EINA_UNUSED, void *event_info)
-{
-   Entrance_Conf_Background *cbg;
-   cbg = elm_object_item_data_get(event_info);
-   if (!elm_layout_file_set(_entrance_int_conf->user.bg.preview,
-                           cbg->path, cbg->group))
-     {
-        PT("Error on loading ");
-        fprintf(stderr, "%s %s\n", cbg->path, cbg->group);
-     }
-   _entrance_int_conf->user.bg.path = cbg->path;
-   _entrance_int_conf->user.bg.group = cbg->group;
-   _entrance_conf_changed();
-}
-
-static Eina_Bool
-_entrance_conf_user_bg_fill_cb(void *data, Elm_Object_Item *it)
-{
-   Entrance_Conf_Background *cbg;
-   const char *bg_path, *bg_group;
-   cbg = data;
-
-   bg_path = _entrance_int_conf->user.orig->bg.path;
-   bg_group = _entrance_int_conf->user.orig->bg.group;
-   if ((cbg->path)
-       && (cbg->group)
-       && (bg_path)
-       && (bg_group)
-       && (!strcmp(cbg->path, bg_path))
-       && (!strcmp(cbg->group, bg_group)))
-     {
-        elm_genlist_item_selected_set(it, EINA_TRUE);
-        return EINA_TRUE;
-     }
-   return EINA_FALSE;
-}
-static char *
-_entrance_conf_session_text_get(void *data EINA_UNUSED, Evas_Object *obj 
EINA_UNUSED, const char *part EINA_UNUSED)
-{
-   return NULL;
-}
-
-static Evas_Object *
-_entrance_conf_session_content_get(void *data EINA_UNUSED, Evas_Object *obj 
EINA_UNUSED, const char *part EINA_UNUSED)
-{
-   return NULL;
-}
-
-static Eina_Bool
-_entrance_conf_session_state_get(void *data EINA_UNUSED, Evas_Object *obj 
EINA_UNUSED, const char *part EINA_UNUSED)
+_entrance_conf_apply(void)
 {
-   return EINA_FALSE;
+   _entrance_conf->current->apply();
 }
 
 static void
-_entrance_conf_session_del(void *data EINA_UNUSED, Evas_Object *obj 
EINA_UNUSED)
+_entrance_conf_end(Evas_Object *win)
 {
+   Entrance_Conf_Module *conf;
+   Eina_List *l;
+
+   PT("Delete config panel\n");
+   evas_object_del(win);
+   EINA_LIST_FOREACH(_entrance_conf->modules, l, conf)
+      conf->end();
+   _entrance_conf->current = NULL;
 }
 
-/* vkbd */
 static void
-_entrance_conf_vkbd_changed(void *data EINA_UNUSED, Evas_Object *obj, void 
*event EINA_UNUSED)
+_entrance_conf_promote(Entrance_Conf_Module *conf)
 {
-   Elm_Actionslider_Pos p;
-
-   PT("User change vkbd state\n");
-
-   p = elm_actionslider_indicator_pos_get(obj);
-   _entrance_int_conf->vkbd_enabled = !!(p == ELM_ACTIONSLIDER_RIGHT);
-   _entrance_conf_changed();
+   elm_naviframe_item_promote(conf->item);
+   _entrance_conf->current = conf;
 }
-
-/* scale */
 static void
-_entrance_conf_scale_changed(void *data EINA_UNUSED, Evas_Object *obj, void 
*event EINA_UNUSED)
+_entrance_conf_control_changed(void *data EINA_UNUSED, Evas_Object *obj 
EINA_UNUSED, void *event)
 {
-   _entrance_int_conf->scale = elm_spinner_value_get(obj);
-   _entrance_conf_changed();
+   Elm_Object_Item *it;
+   it = event;
+   _entrance_conf_promote(elm_object_item_data_get(it));
 }
 
-/* Buttons Cb */
 static void
 _entrance_conf_ok_clicked(void *data, Evas_Object *obj EINA_UNUSED, void 
*event EINA_UNUSED)
 {
    _entrance_conf_apply();
-   evas_object_del(data);
-   _entrance_conf_shutdown();
+   _entrance_conf_end(data);
 }
 
 static void
 _entrance_conf_apply_clicked(void *data EINA_UNUSED, Evas_Object *obj 
EINA_UNUSED, void *event EINA_UNUSED)
 {
    _entrance_conf_apply();
-   _entrance_conf_changed();
+   entrance_conf_changed();
 }
 
 static void
 _entrance_conf_close_clicked(void *data, Evas_Object *obj EINA_UNUSED, void 
*event EINA_UNUSED)
 {
-   evas_object_del(data);
-   _entrance_conf_shutdown();
+   _entrance_conf_end(data);
 }
 
-
-static Eina_List *
-_entrance_conf_backgrounds_get(Evas_Object *obj, const char *user)
+static char *
+_entrance_conf_bg_text_get(void *data, Evas_Object *obj EINA_UNUSED, const 
char *part EINA_UNUSED)
 {
-   Evas_Object *o, *edj;
-   Eina_List *list, *l, *nl = NULL;
    Entrance_Conf_Background *cbg;
-   const char *str;
-   const char *path;
-   char buf[PATH_MAX];
-   Eina_Iterator *it;
-
-   o = entrance_gui_theme_get(obj, "entrance/background");
-   edj = elm_layout_edje_get(o);
-   edje_object_file_get(edj, &path, NULL);
-   list = entrance_gui_stringlist_get(edje_object_data_get(edj, "items"));
-   EINA_LIST_FOREACH(list, l, str)
-     {
-        cbg = calloc(1, sizeof(Entrance_Conf_Background));
-        snprintf(buf, sizeof(buf),
-                 "entrance/background/%s", str);
-
-        cbg->path = eina_stringshare_add(path);
-        cbg->group = eina_stringshare_add(buf);
-        cbg->name = eina_stringshare_add(str);
-        nl = eina_list_append(nl, cbg);
-     }
-   entrance_gui_stringlist_free(list);
-   evas_object_del(o);
-
-   it = eina_file_ls(PACKAGE_DATA_DIR"/backgrounds");
-   EINA_ITERATOR_FOREACH(it, str)
-     {
-        int len;
-        len = strlen(str);
-        if (len < 4) continue;
-        if (!strcmp(&str[len-4], ".edj"))
-          {
-             cbg = calloc(1, sizeof(Entrance_Conf_Background));
-             snprintf(buf, sizeof(buf),
-                      "entrance/background/%s", str);
-             cbg->path = str;
-             /* TODO use entrance/desktop/background or e/desktop/background */
-             cbg->group = eina_stringshare_add("e/desktop/background");
-               {
-                  char *name, *p;
-                  name = strrchr(str, '/');
-                  if (name)
-                    {
-                       name++;
-                       name = strdupa(name);
-                       p = strrchr(name, '.');
-                       if (p) *p = '\0';
-                    }
-                  cbg->name = eina_stringshare_add(name);
-               }
-             nl = eina_list_append(nl, cbg);
-          }
-        else
-          eina_stringshare_del(str);
-     }
-   eina_iterator_free(it);
-
-   return nl;
-}
-
-static void
-_entrance_conf_apply(void)
-{
-   Entrance_Conf_Gui_Event conf;
-
-   conf.bg.path = _entrance_int_conf->bg.path;
-   conf.bg.group = _entrance_int_conf->bg.group;
-   conf.vkbd_enabled = _entrance_int_conf->vkbd_enabled;
-
-   if (_entrance_int_conf->update)
-     {
-        if (_entrance_int_conf->scale != elm_config_scale_get())
-          {
-             elm_config_scale_set(_entrance_int_conf->scale);
-             elm_config_all_flush();
-             elm_config_save();
-          }
-        if (_entrance_int_conf->theme != entrance_gui_theme_name_get())
-          {
-             entrance_gui_theme_name_set(_entrance_int_conf->theme);
-          }
-        entrance_gui_conf_set(&conf);
-        entrance_connect_conf_gui_send(&conf);
-     }
-
-   if (_entrance_int_conf->user.update)
-     {
-        Entrance_Login *eu;
-        eu = _entrance_int_conf->user.orig;
-        if (eu->bg.path != _entrance_int_conf->user.bg.path)
-          eina_stringshare_replace(&eu->bg.path,
-                                   _entrance_int_conf->user.bg.path);
-        if (eu->bg.group != _entrance_int_conf->user.bg.group)
-          eina_stringshare_replace(&eu->bg.group,
-                                   _entrance_int_conf->user.bg.group);
-        if (eu->image.path != _entrance_int_conf->user.image.path)
-          eina_stringshare_replace(&eu->image.path,
-                                   _entrance_int_conf->user.image.path);
-        if (eu->image.group != _entrance_int_conf->user.image.group)
-          eina_stringshare_replace(&eu->image.group,
-                                   _entrance_int_conf->user.image.group);
-        if (eu->remember_session != _entrance_int_conf->user.remember_session)
-          eu->remember_session = _entrance_int_conf->user.remember_session;
-        if (eu->lsess != _entrance_int_conf->user.lsess)
-          eina_stringshare_replace(&eu->lsess, _entrance_int_conf->user.lsess);
-        entrance_connect_conf_user_send(eu);
-        /*
-        printf("%s | %s\n%s | %s\n%s | %s\n%s | %s\n%d | %d\n%s | %s\n",
-               eu->bg.path, _entrance_int_conf->user.bg.path,
-               eu->bg.group, _entrance_int_conf->user.bg.group,
-               eu->image.path, _entrance_int_conf->user.image.path,
-               eu->image.group, _entrance_int_conf->user.image.group,
-               eu->remember_session, _entrance_int_conf->user.remember_session,
-               eu->lsess, _entrance_int_conf->user.lsess);
-               */
-     }
+   cbg = data;
+   return strdup(cbg->name);
 }
 
-/* Build it */
 static Evas_Object *
-_entrance_conf_build(Evas_Object *obj)
-{
-   Evas_Object *t, *bx, *hbx, *o, *gl;
-   Eina_List *l;
-   int j = 0;
-
-   t = elm_table_add(obj);
-   elm_table_padding_set(t, 5 , 5);
-   evas_object_size_hint_weight_set(t, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-
-   /* Background */
-   o = elm_label_add(t);
-   elm_object_text_set(o, "Background");
-   evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0);
-   evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
-   elm_table_pack(t, o, 0, j, 1, 1);
-   evas_object_show(o);
-   ++j;
-
-   hbx = elm_box_add(t);
-   elm_box_horizontal_set(hbx, EINA_TRUE);
-   elm_table_pack(t, hbx, 0, j, 2, 3);
-   evas_object_size_hint_weight_set(hbx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-   evas_object_size_hint_align_set(hbx, EVAS_HINT_FILL, EVAS_HINT_FILL);
-   gl = elm_genlist_add(hbx);
-   elm_scroller_bounce_set(gl, EINA_FALSE, EINA_TRUE);
-   evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-   evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL);
-   elm_box_pack_end(hbx, gl);
-   evas_object_show(gl);
-   bx = elm_box_add(hbx);
-   elm_box_pack_end(hbx, bx);
-   evas_object_show(bx);
-   o = elm_layout_add(hbx);
-   _entrance_int_conf->bg.preview = o;
-   elm_box_pack_end(bx, o);
-   evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-   evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
-   evas_object_show(o);
-   o = evas_object_rectangle_add(hbx);
-   evas_object_color_set(o, 0, 0, 0, 0);
-   evas_object_size_hint_min_set(o, 256, 0);
-   elm_box_pack_end(bx, o);
-   evas_object_show(o);
-   evas_object_show(hbx);
-   j += 3;
-   l = _entrance_conf_backgrounds_get(gl, NULL);
-   entrance_fill(gl, _entrance_background_fill,
-                 l, _entrance_conf_bg_fill_cb, _entrance_conf_bg_sel, o);
-   eina_list_free(l);
-
-   /* Touch Screen */
-   o = elm_label_add(t);
-   elm_object_text_set(o, "Use a virtual keyboard");
-   evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0);
-   evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
-   elm_table_pack(t, o, 0, j, 1, 1);
-   evas_object_show(o);
-   o = elm_actionslider_add(t);
-   elm_object_style_set(o, "bar");
-   evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
-   elm_object_part_text_set(o, "left", "Disabled");
-   elm_object_part_text_set(o, "right", "Enabled");
-
-   elm_actionslider_magnet_pos_set(o, ELM_ACTIONSLIDER_LEFT);
-   elm_actionslider_enabled_pos_set(o, ELM_ACTIONSLIDER_LEFT |
-                                    ELM_ACTIONSLIDER_RIGHT);
-   evas_object_smart_callback_add(o, "selected",
-                                  _entrance_conf_vkbd_changed, NULL);
-   if (_entrance_int_conf->vkbd_enabled)
-     elm_actionslider_indicator_pos_set(o, ELM_ACTIONSLIDER_RIGHT);
-   else
-     elm_actionslider_indicator_pos_set(o, ELM_ACTIONSLIDER_LEFT);
-   elm_table_pack(t, o, 1, j, 1, 1);
-   evas_object_show(o);
-   ++j;
-
-   /* Elementary Profile */
-   o = elm_label_add(t);
-   elm_object_text_set(o, "elementary profile");
-   evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0);
-   evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
-   elm_table_pack(t, o, 0, j, 1, 1);
-   evas_object_show(o);
-   o = elm_hoversel_add(t);
-   elm_object_text_set(o, _entrance_int_conf->elm_profile);
-   evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0);
-   evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
-   elm_table_pack(t, o, 1, j, 1, 1);
-   evas_object_show(o);
-   ++j;
-
-   /* Scaling */
-   o = elm_label_add(t);
-   elm_object_text_set(o, "Scaling");
-   evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0);
-   evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
-   elm_table_pack(t, o, 0, j, 1, 1);
-   evas_object_show(o);
-   o = elm_spinner_add(t);
-   evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0);
-   evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
-   evas_object_smart_callback_add(o, "changed",
-                                  _entrance_conf_scale_changed, NULL);
-   elm_spinner_value_set(o, _entrance_int_conf->scale);
-   elm_spinner_min_max_set(o, 0.25, 5.0);
-   elm_spinner_step_set(o, 0.15);
-   elm_spinner_label_format_set(o, "%.2f");
-
-   elm_table_pack(t, o, 1, j, 1, 1);
-   evas_object_show(o);
-   ++j;
-
-   o = evas_object_rectangle_add(o);
-   evas_object_color_set(o, 0, 0, 0, 0);
-   evas_object_size_hint_min_set(o, 128, 0);
-   elm_table_pack(t, o, 1, j, 1, 1);
-
-   evas_object_show(t);
-   return t;
-}
-
-static void
-_entrance_conf_user_auth(void *data, const char *user, Eina_Bool granted)
+_entrance_conf_bg_content_get(void *data, Evas_Object *obj, const char *part)
 {
-   Evas_Object *t;
-   const Eina_List *users, *l;
-   Entrance_Login *eu;
-
-   if (granted)
+   Entrance_Conf_Background *cbg;
+   Evas_Object *o = NULL;
+   cbg = data;
+   if (part && !strcmp("elm.swallow.icon", part))
      {
-        t = elm_object_part_content_get(data, "entrance.conf");
-        users = entrance_gui_users_get();
-        EINA_LIST_FOREACH(users, l, eu)
-          {
-             if (!strcmp(eu->login, user))
-               {
-                  _entrance_int_conf->user.orig = eu;
-                  _entrance_int_conf->user.bg.path = eu->bg.path;
-                  _entrance_int_conf->user.bg.group = eu->bg.group;
-                  _entrance_int_conf->user.image.path = eu->image.path;
-                  _entrance_int_conf->user.image.group = eu->image.group;
-                  _entrance_int_conf->user.lsess = eu->lsess;
-                  _entrance_int_conf->user.remember_session
-                     = eu->remember_session;
-                  /*
-                  printf("init %s %s | %s %s | %s | %d\n",
-                         _entrance_int_conf->user.bg.path,
-                         _entrance_int_conf->user.bg.group,
-                         _entrance_int_conf->user.image.path,
-                         _entrance_int_conf->user.image.group,
-                         _entrance_int_conf->user.lsess,
-                         _entrance_int_conf->user.remember_session);
-                         */
-                  break;
-               }
-          }
-        if (eu)
-          {
-             _entrance_conf_user_build_cb(t, eu);
-             elm_object_signal_emit(data, "entrance,conf_user,enabled", "");
-          }
+        o = elm_image_add(obj);
+        elm_image_file_set(o, cbg->path, cbg->group);
+        elm_image_smooth_set(o, EINA_FALSE);
+        evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND,
+                                         EVAS_HINT_EXPAND);
+        evas_object_show(o);
      }
+   return o;
 }
 
-
-static Evas_Object *
-_entrance_conf_user_build(Evas_Object *obj)
-{
-   Evas_Object *t, *o, *ly;
-
-   ly = entrance_gui_theme_get(obj, "entrance/conf/login");
-   evas_object_size_hint_align_set(ly, EVAS_HINT_FILL, EVAS_HINT_FILL);
-   evas_object_show(ly);
-
-   o = entrance_login_add(ly, _entrance_conf_user_auth, ly);
-   entrance_login_open_session_set(o, EINA_FALSE);
-   elm_object_part_content_set(ly, "entrance.login", o);
-   evas_object_show(o);
-   t = elm_table_add(obj);
-   elm_object_part_content_set(ly, "entrance.conf", t);
-   evas_object_size_hint_weight_set(t, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-   elm_table_padding_set(t, 5 , 5);
-
-   return ly;
-}
-
-static void
-_entrance_conf_user_build_cb(Evas_Object *t, Entrance_Login *eu)
-{
-   Evas_Object *o, *gl, *bx, *hbx;
-   Eina_List *l;
-   int j = 0;
-
-   /* Background */
-   o = elm_label_add(t);
-   elm_object_text_set(o, "Background");
-   evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0);
-   evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
-   elm_table_pack(t, o, 0, j, 1, 1);
-   evas_object_show(o);
-   ++j;
-   hbx = elm_box_add(t);
-   elm_box_horizontal_set(hbx, EINA_TRUE);
-   elm_table_pack(t, hbx, 0, j, 2, 1);
-   ++j;
-   evas_object_size_hint_weight_set(hbx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-   evas_object_size_hint_align_set(hbx, EVAS_HINT_FILL, EVAS_HINT_FILL);
-   gl = elm_genlist_add(hbx);
-   elm_scroller_bounce_set(gl, EINA_FALSE, EINA_TRUE);
-   evas_object_size_hint_weight_set(gl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-   evas_object_size_hint_align_set(gl, EVAS_HINT_FILL, EVAS_HINT_FILL);
-   elm_box_pack_end(hbx, gl);
-   evas_object_show(gl);
-   bx = elm_box_add(hbx);
-   elm_box_pack_end(hbx, bx);
-   evas_object_show(bx);
-   o = elm_layout_add(hbx);
-   _entrance_int_conf->user.bg.preview = o;
-   elm_box_pack_end(bx, o);
-   evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
-   evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
-   evas_object_show(o);
-   o = evas_object_rectangle_add(hbx);
-   evas_object_color_set(o, 0, 0, 0, 0);
-   evas_object_size_hint_min_set(o, 256, 0);
-   elm_box_pack_end(bx, o);
-   evas_object_show(o);
-   evas_object_show(hbx);
-   l = _entrance_conf_backgrounds_get(o, eu->login);
-   entrance_fill(gl, _entrance_background_fill,
-                 l, _entrance_conf_user_bg_fill_cb,
-                 _entrance_conf_user_bg_sel, o);
-   eina_list_free(l);
-
-   /* Icon */
-
-   /* Session to autoselect */
-   o = elm_label_add(t);
-   elm_object_text_set(o, "Session to use");
-   evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0);
-   evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
-   elm_table_pack(t, o, 0, j, 1, 1);
-   evas_object_show(o);
-   o = elm_hoversel_add(t);
-   evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
-   elm_object_text_set(o, "Session");
-   elm_table_pack(t, o, 1, j, 1, 1);
-   evas_object_show(o);
-   ++j;
-
-   /* Remember last session */
-   o = elm_label_add(t);
-   elm_object_text_set(o, "Remember last session");
-   evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0);
-   evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
-   elm_table_pack(t, o, 0, j, 1, 1);
-   evas_object_show(o);
-   o = elm_actionslider_add(t);
-   evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
-   elm_object_part_text_set(o, "left", "Enabled");
-   elm_object_part_text_set(o, "right", "Disabled");
-   elm_table_pack(t, o, 1, j, 1, 1);
-   evas_object_show(o);
-   ++j;
-
-   evas_object_show(t);
-}
-
-
-static void
-_entrance_conf_control_changed(void *data EINA_UNUSED, Evas_Object *obj 
EINA_UNUSED, void *event)
+static Eina_Bool
+_entrance_conf_bg_state_get(void *data EINA_UNUSED, Evas_Object *obj 
EINA_UNUSED, const char *part EINA_UNUSED)
 {
-   Elm_Object_Item *it;
-   it = event;
-   elm_naviframe_item_promote(elm_object_item_data_get(it));
+   return EINA_FALSE;
 }
 
-
-////////////////////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////////////////////////////////////
-////////////////////////////////////////////////////////////////////////////////
 static void
-_entrance_conf_changed(void)
+_entrance_conf_bg_del(void *data, Evas_Object *obj EINA_UNUSED)
 {
-   const char *bg_path;
-   const char *bg_group;
-
-   entrance_gui_background_get(&bg_path, &bg_group);
-   _entrance_int_conf->update =
-      !!((_entrance_int_conf->theme != entrance_gui_theme_name_get())
-         || (_entrance_int_conf->bg.path != bg_path)
-         || (_entrance_int_conf->bg.group != bg_group)
-         || (_entrance_int_conf->scale != elm_config_scale_get())
-         || (_entrance_int_conf->elm_profile != elm_config_profile_get())
-         || (_entrance_int_conf->vkbd_enabled != 
entrance_gui_vkbd_enabled_get()));
-
-   if (_entrance_int_conf->user.orig)
-     _entrance_int_conf->user.update =
-        !!((_entrance_int_conf->user.orig->bg.path != 
_entrance_int_conf->user.bg.path)
-           || (_entrance_int_conf->user.orig->bg.group != 
_entrance_int_conf->user.bg.group)
-           || (_entrance_int_conf->user.orig->image.path != 
_entrance_int_conf->user.image.path)
-           || (_entrance_int_conf->user.orig->image.group != 
_entrance_int_conf->user.image.group)
-           || (_entrance_int_conf->user.orig->remember_session != 
_entrance_int_conf->user.remember_session)
-           || (_entrance_int_conf->user.orig->lsess != 
_entrance_int_conf->user.lsess));
-   if (_entrance_int_conf->update || _entrance_int_conf->user.update)
-     {
-        elm_object_disabled_set(_entrance_int_conf->gui.btn_ok, EINA_FALSE);
-        elm_object_disabled_set(_entrance_int_conf->gui.btn_apply, EINA_FALSE);
-     }
-   else
-     {
-        elm_object_disabled_set(_entrance_int_conf->gui.btn_ok, EINA_TRUE);
-        elm_object_disabled_set(_entrance_int_conf->gui.btn_apply, EINA_TRUE);
-     }
+   Entrance_Conf_Background *cbg;
+   cbg = data;
+   eina_stringshare_del(cbg->name);
+   eina_stringshare_del(cbg->path);
+   eina_stringshare_del(cbg->group);
+   free(cbg);
 }
 
 
-static void
-_entrance_conf_init(void)
+void
+entrance_conf_init(void)
 {
    PT("conf init\n");
-   _entrance_background_fill =
+   _entrance_conf = calloc(1, sizeof(Entrance_Int_Conf));
+   _entrance_conf->background_fill =
       entrance_fill_new("default",
                         _entrance_conf_bg_text_get,
                         _entrance_conf_bg_content_get,
                         _entrance_conf_bg_state_get,
                         _entrance_conf_bg_del);
-   _entrance_session_fill =
-      entrance_fill_new("default",
-                        _entrance_conf_session_text_get,
-                        _entrance_conf_session_content_get,
-                        _entrance_conf_session_state_get,
-                        _entrance_conf_session_del);
-
-   _entrance_int_conf = calloc(1, sizeof(Entrance_Int_Conf));
-   _entrance_int_conf->theme = entrance_gui_theme_name_get();
-   entrance_gui_background_get(&(_entrance_int_conf->bg.path),
-                               &(_entrance_int_conf->bg.group));
-   _entrance_int_conf->vkbd_enabled = entrance_gui_vkbd_enabled_get();
-   _entrance_int_conf->scale = elm_config_scale_get();
-   _entrance_int_conf->elm_profile = elm_config_profile_get();
+
+   entrance_conf_main_init();
+   entrance_conf_user_init();
 }
 
-static void
-_entrance_conf_shutdown(void)
+void
+entrance_conf_shutdown(void)
 {
+   Entrance_Conf_Module *conf;
+
    PT("conf shutdown\n");
-   entrance_fill_del(_entrance_background_fill);
-   entrance_fill_del(_entrance_session_fill);
-   free(_entrance_int_conf);
+   entrance_conf_user_shutdown();
+   entrance_conf_main_shutdown();
+   EINA_LIST_FREE(_entrance_conf->modules, conf)
+     {
+        eina_stringshare_del(conf->label);
+        free(conf);
+     }
+   free(_entrance_conf);
 }
 
+void
+entrance_conf_module_register(const char *label, Entrance_Conf_Begin begin, 
Entrance_Conf_End end, Entrance_Conf_Build build, Entrance_Conf_Check check, 
Entrance_Conf_Apply apply)
+{
+   Entrance_Conf_Module *conf;
+   conf = calloc(1, sizeof(Entrance_Conf_Module));
+   conf->label = eina_stringshare_add(label);
+   conf->begin = begin;
+   conf->end = end;
+   conf->build = build;
+   conf->check = check;
+   conf->apply = apply;
+   _entrance_conf->modules = eina_list_append(_entrance_conf->modules, conf);
+}
 
 void
 entrance_conf_begin(Evas_Object *obj, Evas_Object *parent)
 {
    PT("Build config panel\n");
    Evas_Object *win, *bg, *bx, *hbx, *sc, *nf, *o;
-   Elm_Object_Item *it, *itc;
-   Elm_Object_Item *itu, *ituc;
-
-   _entrance_conf_init();
+   Entrance_Conf_Module *conf;
+   Eina_List *l;
 
+   EINA_LIST_FOREACH(_entrance_conf->modules, l, conf)
+      conf->begin();
    win = elm_hover_add(obj);
    elm_hover_parent_set(win, parent);
 //   win = elm_popup_add(obj);
@@ -779,7 +249,7 @@ entrance_conf_begin(Evas_Object *obj, Evas_Object *parent)
                                   _entrance_conf_ok_clicked, win);
    evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
    elm_box_pack_end(hbx, o);
-   _entrance_int_conf->gui.btn_ok = o;
+   _entrance_conf->btn_ok = o;
    evas_object_show(o);
 
    o = elm_button_add(hbx);
@@ -789,7 +259,7 @@ entrance_conf_begin(Evas_Object *obj, Evas_Object *parent)
                                   _entrance_conf_apply_clicked, NULL);
    evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
    elm_box_pack_end(hbx, o);
-   _entrance_int_conf->gui.btn_apply = o;
+   _entrance_conf->btn_apply = o;
    evas_object_show(o);
 
    o = elm_button_add(hbx);
@@ -801,20 +271,7 @@ entrance_conf_begin(Evas_Object *obj, Evas_Object *parent)
    evas_object_show(o);
 
    /* Build configuration panel */
-   /* main */
-   o = _entrance_conf_build(nf);
-   it = elm_naviframe_item_simple_push(nf, o);
-   itc = elm_segment_control_item_add(sc, NULL, "General");
-   elm_object_item_data_set(itc, it);
-
-   /* user */
-   o = _entrance_conf_user_build(nf);
-   itu = elm_naviframe_item_simple_push(nf, o);
-   ituc = elm_segment_control_item_add(sc, NULL, "User");
-   elm_object_item_data_set(ituc, itu);
-
-
-   elm_segment_control_item_selected_set(itc, EINA_TRUE);
+   _entrance_conf_build(nf, sc);
 
      {
         Evas_Coord xx, yy, ww, hh, x, y, w, h;
@@ -833,3 +290,89 @@ entrance_conf_begin(Evas_Object *obj, Evas_Object *parent)
    evas_object_freeze_events_set(win, EINA_TRUE);
 }
 
+void
+entrance_conf_changed(void)
+{
+   if (_entrance_conf->current && _entrance_conf->current->check())
+     {
+        elm_object_disabled_set(_entrance_conf->btn_ok, EINA_FALSE);
+        elm_object_disabled_set(_entrance_conf->btn_apply, EINA_FALSE);
+     }
+   else
+     {
+        elm_object_disabled_set(_entrance_conf->btn_ok, EINA_TRUE);
+        elm_object_disabled_set(_entrance_conf->btn_apply, EINA_TRUE);
+     }
+}
+
+Eina_List *
+entrance_conf_backgrounds_get(Evas_Object *obj, const char *user)
+{
+   Evas_Object *o, *edj;
+   Eina_List *list, *l, *nl = NULL;
+   Entrance_Conf_Background *cbg;
+   const char *str;
+   const char *path;
+   char buf[PATH_MAX];
+   Eina_Iterator *it;
+
+   o = entrance_gui_theme_get(obj, "entrance/background");
+   edj = elm_layout_edje_get(o);
+   edje_object_file_get(edj, &path, NULL);
+   list = entrance_gui_stringlist_get(edje_object_data_get(edj, "items"));
+   EINA_LIST_FOREACH(list, l, str)
+     {
+        cbg = calloc(1, sizeof(Entrance_Conf_Background));
+        snprintf(buf, sizeof(buf),
+                 "entrance/background/%s", str);
+
+        cbg->path = eina_stringshare_add(path);
+        cbg->group = eina_stringshare_add(buf);
+        cbg->name = eina_stringshare_add(str);
+        nl = eina_list_append(nl, cbg);
+     }
+   entrance_gui_stringlist_free(list);
+   evas_object_del(o);
+
+   it = eina_file_ls(PACKAGE_DATA_DIR"/backgrounds");
+   EINA_ITERATOR_FOREACH(it, str)
+     {
+        int len;
+        len = strlen(str);
+        if (len < 4) continue;
+        if (!strcmp(&str[len-4], ".edj"))
+          {
+             cbg = calloc(1, sizeof(Entrance_Conf_Background));
+             snprintf(buf, sizeof(buf),
+                      "entrance/background/%s", str);
+             cbg->path = str;
+             /* TODO use entrance/desktop/background or e/desktop/background */
+             cbg->group = eina_stringshare_add("e/desktop/background");
+               {
+                  char *name, *p;
+                  name = strrchr(str, '/');
+                  if (name)
+                    {
+                       name++;
+                       name = strdupa(name);
+                       p = strrchr(name, '.');
+                       if (p) *p = '\0';
+                    }
+                  cbg->name = eina_stringshare_add(name);
+               }
+             nl = eina_list_append(nl, cbg);
+          }
+        else
+          eina_stringshare_del(str);
+     }
+   eina_iterator_free(it);
+
+   return nl;
+}
+
+Entrance_Fill *
+entrance_conf_background_fill_get(void)
+{
+   return _entrance_conf->background_fill;
+}
+

-- 


Reply via email to