enlightenment/src/modules/vkbd/e_kbd_cfg.c

206 lines
6.6 KiB
C

#include "e.h"
#include "e_mod_main.h"
#include "e_kbd_cfg.h"
#include "e_kbd_buf.h"
static E_Kbd_Int *cfg_kbd = NULL;
static Eina_List *dicts = NULL;
static Evas_Object *win = NULL;
static void
_cb_close(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
e_kbd_cfg_hide(cfg_kbd);
}
static void
_cb_del(void *data EINA_UNUSED, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
char *s;
EINA_LIST_FREE(dicts, s) eina_stringshare_del(s);
win = NULL;
cfg_kbd = NULL;
}
static void
_cb_size(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
double v = elm_slider_value_get(obj);
il_kbd_cfg->size = v;
e_kbd_int_update(cfg_kbd);
e_config_save_queue();
}
static void
_cb_fill_mode(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
il_kbd_cfg->fill_mode = (int)(uintptr_t)data;
if (il_kbd_cfg->fill_mode == 0) elm_object_text_set(obj, _("Shrink"));
else if (il_kbd_cfg->fill_mode == 1) elm_object_text_set(obj, _("Stretch"));
else if (il_kbd_cfg->fill_mode == 2) elm_object_text_set(obj, _("Fill"));
else if (il_kbd_cfg->fill_mode == 3) elm_object_text_set(obj, _("Float"));
e_kbd_int_update(cfg_kbd);
e_config_save_queue();
}
static void
_cb_dict(void *data, Evas_Object *li EINA_UNUSED, void *event_info EINA_UNUSED)
{
char *s = data;
eina_stringshare_replace(&il_kbd_cfg->dict, s);
e_kbd_buf_dict_set(cfg_kbd->kbuf, il_kbd_cfg->dict);
e_kbd_buf_clear(cfg_kbd->kbuf);
e_config_save_queue();
}
EAPI void
e_kbd_cfg_show(E_Kbd_Int *ki)
{
Evas_Object *o, *box, *fr, *li, *tb;
Elm_Object_Item *it;
Eina_List *files;
char buf[PATH_MAX], *p, *f;
const char *p2;
if (cfg_kbd) return;
cfg_kbd = ki;
win = e_elm_win_util_dialog_add(NULL, "vkbd_config",
_("Virtual Keyboard Settings"));
evas_object_event_callback_add(win, EVAS_CALLBACK_DEL, _cb_del, NULL);
elm_win_autodel_set(win, EINA_TRUE);
o = fr = elm_frame_add(win);
E_EXPAND(o);
E_FILL(o);
elm_object_style_set(o, "pad_large");
evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0.0);
evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_win_resize_object_add(win, o);
evas_object_show(o);
box = o = elm_box_add(win);
E_EXPAND(o);
E_FILL(o);
elm_object_content_set(fr, o);
evas_object_show(o);
o = fr = elm_frame_add(win);
evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0.0);
evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_layout_text_set(o, NULL, _("Layout Mode"));
elm_box_pack_end(box, o);
evas_object_show(o);
o = elm_hoversel_add(win);
evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0.0);
evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_hoversel_auto_update_set(o, EINA_TRUE);
elm_hoversel_hover_parent_set(o, win);
if (il_kbd_cfg->fill_mode == 0) elm_object_text_set(o, _("Shrink"));
else if (il_kbd_cfg->fill_mode == 1) elm_object_text_set(o, _("Stretch"));
else if (il_kbd_cfg->fill_mode == 2) elm_object_text_set(o, _("Fill"));
else if (il_kbd_cfg->fill_mode == 3) elm_object_text_set(o, _("Float"));
elm_hoversel_item_add(o, _("Shrink"), NULL, ELM_ICON_NONE, _cb_fill_mode, (void *)(uintptr_t)0);
elm_hoversel_item_add(o, _("Stretch"), NULL, ELM_ICON_NONE, _cb_fill_mode, (void *)(uintptr_t)1);
elm_hoversel_item_add(o, _("Fill"), NULL, ELM_ICON_NONE, _cb_fill_mode, (void *)(uintptr_t)2);
elm_hoversel_item_add(o, _("Float"), NULL, ELM_ICON_NONE, _cb_fill_mode, (void *)(uintptr_t)3);
elm_object_content_set(fr, o);
evas_object_show(o);
o = fr = elm_frame_add(win);
E_EXPAND(o);
E_FILL(o);
elm_layout_text_set(o, NULL, _("Dictionary"));
elm_box_pack_end(box, o);
evas_object_show(o);
o = tb = elm_table_add(win);
E_EXPAND(o);
E_FILL(o);
elm_object_content_set(fr, o);
evas_object_show(o);
o = evas_object_rectangle_add(evas_object_evas_get(win));
E_EXPAND(o);
E_FILL(o);
evas_object_color_set(o, 0, 0, 0, 0);
evas_object_size_hint_min_set(o,
elm_config_scale_get() * 80,
elm_config_scale_get() * 80);
elm_table_pack(tb, o, 0, 0, 1, 1);
o = li = elm_list_add(win);
E_EXPAND(o);
E_FILL(o);
snprintf(buf, sizeof(buf), "%s/dicts", ki->syskbds);
files = ecore_file_ls(buf);
EINA_LIST_FREE(files, f)
{
strncpy(buf, f, sizeof(buf) - 1);
buf[sizeof(buf) - 1] = 0;
p = strrchr(buf, '.');
if ((p) && (!strcasecmp(p, ".dic")))
{
p2 = eina_stringshare_add(buf);
dicts = eina_list_append(dicts, p2);
*p = 0;
it = elm_list_item_append(li, buf, NULL, NULL, _cb_dict, p2);
if (!strcasecmp(p2, il_kbd_cfg->dict))
elm_list_item_selected_set(it, EINA_TRUE);
}
free(f);
}
elm_list_go(o);
elm_table_pack(tb, o, 0, 0, 1, 1);
evas_object_show(o);
o = fr = elm_frame_add(win);
evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0.0);
evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_layout_text_set(o, NULL, _("Sizing"));
elm_box_pack_end(box, o);
evas_object_show(o);
o = elm_slider_add(win);
evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0.0);
evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_slider_unit_format_set(o, "%1.1f");
elm_slider_step_set(o, 0.2);
elm_slider_span_size_set(o, 240);
elm_slider_min_max_set(o, 1.0, 9.0);
elm_slider_value_set(o, il_kbd_cfg->size);
evas_object_smart_callback_add(o, "changed", _cb_size, NULL);
elm_object_content_set(fr, o);
evas_object_show(o);
o = elm_separator_add(win);
elm_separator_horizontal_set(o, EINA_TRUE);
evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0.0);
evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_box_pack_end(box, o);
evas_object_show(o);
o = elm_button_add(win);
evas_object_size_hint_weight_set(o, EVAS_HINT_EXPAND, 0.0);
evas_object_size_hint_align_set(o, EVAS_HINT_FILL, EVAS_HINT_FILL);
elm_object_text_set(o, _("Close"));
evas_object_smart_callback_add(o, "clicked", _cb_close, NULL);
elm_box_pack_end(box, o);
evas_object_show(o);
evas_object_show(win);
evas_smart_objects_calculate(evas_object_evas_get(win));
elm_win_center(win, 1, 1);
}
EAPI void
e_kbd_cfg_hide(E_Kbd_Int *ki)
{
if (!ki) return;
if (cfg_kbd != ki) return;
if (win) evas_object_del(win);
cfg_kbd = NULL;
}