enlightenment_my/src/modules/wizard/page_020.c

196 lines
5.1 KiB
C

/* Profile chooser */
#include "e_wizard.h"
#include "e_wizard_api.h"
static const char *profile = NULL;
static Evas_Object *textblock = NULL;
/*
E_API int
wizard_page_init(E_Wizard_Page *pg EINA_UNUSED, Eina_Bool *need_xdg_desktops EINA_UNUSED, Eina_Bool *need_xdg_icons EINA_UNUSED)
{
return 1;
}
E_API int
wizard_page_shutdown(E_Wizard_Page *pg EINA_UNUSED)
{
return 1;
}
*/
static Evas_Object *
_profile_content_get(char *prof, Evas_Object *obj, const char *part)
{
char buf[PATH_MAX + 100], buf2[PATH_MAX];
Evas_Object *ic;
Efreet_Desktop *desktop;
if (!eina_streq(part, "elm.swallow.icon")) return NULL;
e_prefix_data_snprintf(buf2, sizeof(buf2), "data/config/%s", prof);
snprintf(buf, sizeof(buf), "%s/profile.desktop", buf2);
desktop = efreet_desktop_new(buf);
snprintf(buf, sizeof(buf), "%s/icon.edj", buf2);
if (!ecore_file_exists(buf))
{
if (desktop && desktop->icon)
{
if (eina_str_has_extension(desktop->icon, "png"))
snprintf(buf, sizeof(buf), "%s/%s", buf2, desktop->icon);
else
snprintf(buf, sizeof(buf), "%s/%s.png", buf2, desktop->icon);
}
else
e_prefix_data_concat_static(buf, "data/images/enlightenment.png");
}
efreet_desktop_free(desktop);
ic = elm_icon_add(obj);
elm_image_file_set(ic, buf, NULL);
evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 20, 10);
return ic;
}
static char *
_profile_text_get(char *prof, Evas_Object *obj EINA_UNUSED, const char *part)
{
char *label;
char buf[PATH_MAX + 100], buf2[PATH_MAX];
Efreet_Desktop *desktop;
if (!eina_streq(part, "elm.text")) return NULL;
e_prefix_data_snprintf(buf2, sizeof(buf2), "data/config/%s", prof);
snprintf(buf, sizeof(buf), "%s/profile.desktop", buf2);
label = prof;
desktop = efreet_desktop_new(buf);
if (desktop && desktop->name) label = desktop->name;
label = strdup(label);
efreet_desktop_free(desktop);
return label;
}
static void
_profile_select(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
char buf[PATH_MAX + 100], buf2[PATH_MAX];
Efreet_Desktop *desk = NULL;
profile = data;
e_prefix_data_snprintf(buf2, sizeof(buf2), "data/config/%s", profile);
snprintf(buf, sizeof(buf), "%s/profile.desktop", buf2);
desk = efreet_desktop_new(buf);
if (desk)
{
elm_object_text_set(textblock, desk->comment);
efreet_desktop_free(desk);
}
else
elm_object_text_set(textblock, _("Unknown"));
// enable next once you choose a profile
api->wizard_button_next_enable_set(1);
}
E_API int
wizard_page_show(E_Wizard_Page *pg EINA_UNUSED)
{
Evas_Object *o, *of, *ob;
Eina_List *profiles;
char *prof;
void *sel_it = NULL;
static Elm_Genlist_Item_Class itc =
{
.item_style = "default",
.func =
{
.content_get = (Elm_Genlist_Item_Content_Get_Cb)_profile_content_get,
.text_get = (Elm_Genlist_Item_Text_Get_Cb)_profile_text_get,
},
.version = ELM_GENLIST_ITEM_CLASS_VERSION
};
api->wizard_title_set(_("Profile"));
of = elm_frame_add(e_comp->elm);
elm_object_text_set(of, _("Select one"));
o = elm_box_add(of);
elm_object_content_set(of, o);
ob = elm_genlist_add(o);
evas_object_show(ob);
elm_box_pack_end(o, ob);
E_EXPAND(ob);
E_FILL(ob);
elm_genlist_homogeneous_set(ob, 1);
elm_genlist_mode_set(ob, ELM_LIST_COMPRESS);
elm_scroller_bounce_set(ob, 0, 0);
profiles = e_config_profile_list();
EINA_LIST_FREE(profiles, prof)
{
char buf2[PATH_MAX];
void *it;
if (eina_streq(prof, e_config_profile_get()))
{
free(prof);
continue;
}
e_prefix_data_snprintf(buf2, sizeof(buf2), "data/config/%s", prof);
// if it's not a system profile - don't offer it
if (!ecore_file_is_dir(buf2))
{
free(prof);
continue;
}
it = elm_genlist_item_append(ob, &itc, prof, NULL, 0, _profile_select, prof);
if (eina_streq(prof, "standard")) sel_it = it;
}
ob = elm_label_add(o);
evas_object_show(ob);
elm_box_pack_end(o, ob);
E_WEIGHT(ob, EVAS_HINT_EXPAND, 0);
E_FILL(ob);
elm_object_style_set(ob, "marker");
elm_object_text_set(ob, _("Select a profile"));
textblock = ob;
if (sel_it)
{
elm_genlist_item_selected_set(sel_it, 1);
elm_genlist_item_show(sel_it, ELM_GENLIST_ITEM_SCROLLTO_MIDDLE);
}
evas_object_show(ob);
evas_object_show(of);
E_EXPAND(of);
E_FILL(of);
api->wizard_page_show(of);
// pg->data = o;
if (!sel_it)
api->wizard_button_next_enable_set(0);
return 1; /* 1 == show ui, and wait for user, 0 == just continue */
}
E_API int
wizard_page_hide(E_Wizard_Page *pg EINA_UNUSED)
{
// evas_object_del(pg->data);
// actually apply profile
if (!profile) profile = "standard";
e_config_profile_set(profile);
e_config_profile_del(e_config_profile_get());
e_config_load();
e_config_save();
return 1;
}
/*
E_API int
wizard_page_apply(E_Wizard_Page *pg EINA_UNUSED)
{
return 1;
}
*/