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,70 +1,114 @@ #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 void _entrance_conf_bg_del(void *data, Evas_Object *obj); -static Entrance_Fill *_entrance_background_fill = NULL; -static Entrance_Fill *_entrance_session_fill = NULL; -static Entrance_Int_Conf *_entrance_int_conf = NULL; + + +static Entrance_Int_Conf *_entrance_conf = NULL; + +static void +_entrance_conf_build(Evas_Object *naviframe, Evas_Object *segment) +{ + Entrance_Conf_Module *conf; + Eina_List *l; + Evas_Object *o; + Elm_Object_Item *it, *itc; + + EINA_LIST_FOREACH(_entrance_conf->modules, l, conf) + { + 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); + } +} + +static void +_entrance_conf_apply(void) +{ + _entrance_conf->current->apply(); +} + +static void +_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; +} + +static void +_entrance_conf_promote(Entrance_Conf_Module *conf) +{ + elm_naviframe_item_promote(conf->item); + _entrance_conf->current = conf; +} +static void +_entrance_conf_control_changed(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event) +{ + Elm_Object_Item *it; + it = event; + _entrance_conf_promote(elm_object_item_data_get(it)); +} + +static void +_entrance_conf_ok_clicked(void *data, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED) +{ + _entrance_conf_apply(); + _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(); +} + +static void +_entrance_conf_close_clicked(void *data, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED) +{ + _entrance_conf_end(data); +} static char * _entrance_conf_bg_text_get(void *data, Evas_Object *obj EINA_UNUSED, const char *part EINA_UNUSED) @@ -109,150 +153,160 @@ _entrance_conf_bg_del(void *data, Evas_Object *obj EINA_UNUSED) free(cbg); } -static void -_entrance_conf_bg_sel(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) + +void +entrance_conf_init(void) { - 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("conf init\n"); + _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_conf_main_init(); + entrance_conf_user_init(); +} + +void +entrance_conf_shutdown(void) +{ + Entrance_Conf_Module *conf; + + PT("conf shutdown\n"); + entrance_conf_user_shutdown(); + entrance_conf_main_shutdown(); + EINA_LIST_FREE(_entrance_conf->modules, conf) { - PT("Error on loading "); - fprintf(stderr, "%s %s\n", cbg->path, cbg->group); + eina_stringshare_del(conf->label); + free(conf); } - _entrance_int_conf->bg.path = cbg->path; - _entrance_int_conf->bg.group = cbg->group; - _entrance_conf_changed(); + free(_entrance_conf); } -static Eina_Bool -_entrance_conf_bg_fill_cb(void *data, Elm_Object_Item *it) +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_Background *cbg; - const char *bg_path, *bg_group; - cbg = data; + 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; + 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); + bg = elm_bg_add(win); + bx = elm_box_add(win); + evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bx, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_object_content_set(win, bx); + + sc = elm_segment_control_add(bx); + evas_object_size_hint_weight_set(sc, EVAS_HINT_EXPAND, 0); + evas_object_size_hint_align_set(sc, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_box_pack_end(bx, sc); + evas_object_smart_callback_add(sc, "changed", + _entrance_conf_control_changed, NULL); + evas_object_show(sc); + + nf = elm_naviframe_add(bx); + evas_object_size_hint_weight_set(nf, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(nf, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_box_pack_end(bx, nf); + evas_object_show(nf); + + /* Ok Apply Close */ + hbx = elm_box_add(bx); + elm_box_horizontal_set(hbx, EINA_TRUE); + elm_box_homogeneous_set(hbx, EINA_TRUE); + evas_object_size_hint_weight_set(hbx, EVAS_HINT_EXPAND, 0); + evas_object_size_hint_align_set(hbx, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_box_pack_end(bx, hbx); + evas_object_show(hbx); + + o = elm_button_add(hbx); + elm_object_text_set(o, "Ok"); + elm_object_disabled_set(o, EINA_TRUE); + evas_object_smart_callback_add(o, "clicked", + _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_conf->btn_ok = o; + evas_object_show(o); + + o = elm_button_add(hbx); + elm_object_text_set(o, "Apply"); + elm_object_disabled_set(o, EINA_TRUE); + evas_object_smart_callback_add(o, "clicked", + _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_conf->btn_apply = o; + evas_object_show(o); + + o = elm_button_add(hbx); + elm_object_text_set(o, "Close"); + evas_object_smart_callback_add(o, "clicked", + _entrance_conf_close_clicked, win); + evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_box_pack_end(hbx, o); + evas_object_show(o); + + /* Build configuration panel */ + _entrance_conf_build(nf, sc); - 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))) { - elm_genlist_item_selected_set(it, EINA_TRUE); - return EINA_TRUE; + Evas_Coord xx, yy, ww, hh, x, y, w, h; + evas_object_geometry_get(obj, &x, &y, &w, &h); + evas_object_geometry_get(bx, NULL, NULL, &ww, &hh); + xx = 50;//x + (w / 2) - (ww / 2); + yy = 50;//y + (y / 2) - (hh / 2); + evas_object_move(bg, xx, yy); + evas_object_resize(bg, w - 100, h - 100); + evas_object_move(bx, xx, yy); + evas_object_resize(bx, w - 100, h - 100); } - return EINA_FALSE; + evas_object_show(bg); + evas_object_show(bx); + evas_object_show(win); + evas_object_freeze_events_set(win, EINA_TRUE); } -static void -_entrance_conf_user_bg_sel(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) +void +entrance_conf_changed(void) { - 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)) + if (_entrance_conf->current && _entrance_conf->current->check()) { - PT("Error on loading "); - fprintf(stderr, "%s %s\n", cbg->path, cbg->group); + elm_object_disabled_set(_entrance_conf->btn_ok, EINA_FALSE); + elm_object_disabled_set(_entrance_conf->btn_apply, EINA_FALSE); } - _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))) + else { - elm_genlist_item_selected_set(it, EINA_TRUE); - return EINA_TRUE; + elm_object_disabled_set(_entrance_conf->btn_ok, EINA_TRUE); + elm_object_disabled_set(_entrance_conf->btn_apply, 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) -{ - return EINA_FALSE; -} - -static void -_entrance_conf_session_del(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED) -{ -} - -/* vkbd */ -static void -_entrance_conf_vkbd_changed(void *data EINA_UNUSED, Evas_Object *obj, void *event EINA_UNUSED) -{ - 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(); -} - -/* scale */ -static void -_entrance_conf_scale_changed(void *data EINA_UNUSED, Evas_Object *obj, void *event EINA_UNUSED) -{ - _entrance_int_conf->scale = elm_spinner_value_get(obj); - _entrance_conf_changed(); -} - -/* 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(); -} - -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(); -} - -static void -_entrance_conf_close_clicked(void *data, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED) -{ - evas_object_del(data); - _entrance_conf_shutdown(); -} - - -static Eina_List * -_entrance_conf_backgrounds_get(Evas_Object *obj, const char *user) +Eina_List * +entrance_conf_backgrounds_get(Evas_Object *obj, const char *user) { Evas_Object *o, *edj; Eina_List *list, *l, *nl = NULL; @@ -316,520 +370,9 @@ _entrance_conf_backgrounds_get(Evas_Object *obj, const char *user) return nl; } -static void -_entrance_conf_apply(void) +Entrance_Fill * +entrance_conf_background_fill_get(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); - */ - } -} - -/* 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) -{ - Evas_Object *t; - const Eina_List *users, *l; - Entrance_Login *eu; - - if (granted) - { - 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", ""); - } - } -} - - -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) -{ - Elm_Object_Item *it; - it = event; - elm_naviframe_item_promote(elm_object_item_data_get(it)); -} - - -//////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////////////// -static void -_entrance_conf_changed(void) -{ - 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); - } -} - - -static void -_entrance_conf_init(void) -{ - PT("conf init\n"); - _entrance_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(); -} - -static void -_entrance_conf_shutdown(void) -{ - PT("conf shutdown\n"); - entrance_fill_del(_entrance_background_fill); - entrance_fill_del(_entrance_session_fill); - free(_entrance_int_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(); - - win = elm_hover_add(obj); - elm_hover_parent_set(win, parent); -// win = elm_popup_add(obj); - bg = elm_bg_add(win); - bx = elm_box_add(win); - evas_object_size_hint_weight_set(bx, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - evas_object_size_hint_align_set(bx, EVAS_HINT_FILL, EVAS_HINT_FILL); - elm_object_content_set(win, bx); - - sc = elm_segment_control_add(bx); - evas_object_size_hint_weight_set(sc, EVAS_HINT_EXPAND, 0); - evas_object_size_hint_align_set(sc, EVAS_HINT_FILL, EVAS_HINT_FILL); - elm_box_pack_end(bx, sc); - evas_object_smart_callback_add(sc, "changed", - _entrance_conf_control_changed, NULL); - evas_object_show(sc); - - nf = elm_naviframe_add(bx); - evas_object_size_hint_weight_set(nf, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - evas_object_size_hint_align_set(nf, EVAS_HINT_FILL, EVAS_HINT_FILL); - elm_box_pack_end(bx, nf); - evas_object_show(nf); - - /* Ok Apply Close */ - hbx = elm_box_add(bx); - elm_box_horizontal_set(hbx, EINA_TRUE); - elm_box_homogeneous_set(hbx, EINA_TRUE); - evas_object_size_hint_weight_set(hbx, EVAS_HINT_EXPAND, 0); - evas_object_size_hint_align_set(hbx, EVAS_HINT_FILL, EVAS_HINT_FILL); - elm_box_pack_end(bx, hbx); - evas_object_show(hbx); - - o = elm_button_add(hbx); - elm_object_text_set(o, "Ok"); - elm_object_disabled_set(o, EINA_TRUE); - evas_object_smart_callback_add(o, "clicked", - _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; - evas_object_show(o); - - o = elm_button_add(hbx); - elm_object_text_set(o, "Apply"); - elm_object_disabled_set(o, EINA_TRUE); - evas_object_smart_callback_add(o, "clicked", - _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; - evas_object_show(o); - - o = elm_button_add(hbx); - elm_object_text_set(o, "Close"); - evas_object_smart_callback_add(o, "clicked", - _entrance_conf_close_clicked, win); - evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL); - elm_box_pack_end(hbx, o); - 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); - - { - Evas_Coord xx, yy, ww, hh, x, y, w, h; - evas_object_geometry_get(obj, &x, &y, &w, &h); - evas_object_geometry_get(bx, NULL, NULL, &ww, &hh); - xx = 50;//x + (w / 2) - (ww / 2); - yy = 50;//y + (y / 2) - (hh / 2); - evas_object_move(bg, xx, yy); - evas_object_resize(bg, w - 100, h - 100); - evas_object_move(bx, xx, yy); - evas_object_resize(bx, w - 100, h - 100); - } - evas_object_show(bg); - evas_object_show(bx); - evas_object_show(win); - evas_object_freeze_events_set(win, EINA_TRUE); + return _entrance_conf->background_fill; }