#define COUNT_PIN 4
#define PADDING_PIN 14
#define WIDTH_PIN 64
+#define KEY_PIN "pin"
enum input_handler_type {
INPUT_HANDLER_TYPE_PIN
}
}
-static void _unfocused(int id, void *data, Evas_Object *obj,
- Elm_Object_Item *item)
-{
- switch (id) {
- case INPUT_HANDLER_TYPE_PIN:
- elm_object_signal_emit(obj, SIG_UNSELECT, SRC_ELM);
- break;
- default:
- return;
- }
-}
-
static void _key_down(int id, void *data, Evas *e, Evas_Object *obj,
- Evas_Event_Key_Down *ev)
-{
- switch (id) {
- case INPUT_HANDLER_TYPE_PIN:
- if (!strcmp(ev->keyname, KEY_BACK) ||
- !strcmp(ev->keyname, KEY_BACK_REMOTE)) {
- viewmgr_hide_view(VIEW_PIN);
- }
- break;
- default:
- return;
- }
-}
+ Evas_Event_Key_Down *ev);
static input_handler handler = {
.focused = _focused,
- .unfocused = _unfocused,
.key_down = _key_down
};
-static bool _add_pins(Evas_Object *base, struct _priv *priv)
+static bool _check_valid_pin(struct _priv *priv)
+{
+ /* It should be implemented later */
+
+ return false;
+}
+
+static void _unload_pins(struct _priv *priv)
+{
+ int i;
+
+ elm_box_clear(priv->box);
+ evas_object_del(priv->box);
+ priv->box = NULL;
+
+ for (i = 0 ; i < COUNT_PIN; i++) {
+ inputmgr_remove_callback(priv->pin[i], &handler);
+ evas_object_del(priv->pin[i]);
+ }
+
+ memset(priv->pin, 0x00, sizeof(priv->pin));
+}
+
+static bool _load_pins(struct _priv *priv)
{
Evas_Object *box, *pin;
Elm_Entry_Filter_Limit_Size pin_size = {
};
int i;
- box = utils_add_box(base, true);
+ box = utils_add_box(priv->base, true);
if (!box) {
_ERR("failed to add box");
return false;
}
elm_box_padding_set(box, PADDING_PIN, 0);
- elm_object_part_content_set(base, PART_PIN, box);
+ elm_object_part_content_set(priv->base, PART_PIN, box);
for (i = 0; i < COUNT_PIN; i++) {
pin = utils_add_entry(box, true, false, NULL, STYLE_INPUT_PIN);
elm_box_pack_end(box, pin);
elm_object_focus_next_object_set(pin, pin, ELM_FOCUS_DOWN);
elm_object_focus_next_object_set(pin, pin, ELM_FOCUS_UP);
+ elm_object_focus_next_object_set(pin, pin, ELM_FOCUS_RIGHT);
+ elm_object_focus_next_object_set(pin, pin, ELM_FOCUS_LEFT);
inputmgr_add_callback(pin, INPUT_HANDLER_TYPE_PIN, &handler,
priv);
priv->pin[i] = pin;
+ evas_object_data_set(pin, KEY_PIN, (void *)i);
+ if (i != 0)
+ elm_object_focus_allow_set(pin, EINA_FALSE);
+ else
+ elm_object_focus_set(pin, EINA_TRUE);
}
priv->box = box;
return true;
}
+static void _selected(void *data, Evas_Object *obj)
+{
+ struct _priv *priv;
+ int i;
+
+ if (!data || !obj) {
+ _ERR("Invalid argument");
+ return;
+ }
+
+ priv = data;
+ i = (int)evas_object_data_get(obj, KEY_PIN);
+
+ if (i < COUNT_PIN - 1) {
+ elm_object_focus_allow_set(obj, EINA_FALSE);
+ elm_object_signal_emit(obj, SIG_DISABLE, SRC_ELM);
+ elm_object_focus_allow_set(priv->pin[i + 1], EINA_TRUE);
+ elm_object_focus_set(priv->pin[i + 1], EINA_TRUE);
+ } else {
+ if (!_check_valid_pin(priv)) {
+ elm_object_signal_emit(priv->base, SIG_SHOW, SRC_PROG);
+ _unload_pins(priv);
+ _load_pins(priv);
+ } else
+ viewmgr_hide_view(VIEW_PIN);
+ }
+}
+
+static void _key_down(int id, void *data, Evas *e, Evas_Object *obj,
+ Evas_Event_Key_Down *ev)
+{
+ switch (id) {
+ case INPUT_HANDLER_TYPE_PIN:
+ if (!strcmp(ev->keyname, KEY_BACK) ||
+ !strcmp(ev->keyname, KEY_BACK_REMOTE)) {
+ viewmgr_hide_view(VIEW_PIN);
+ } else if (!strcmp(ev->keyname, KEY_0) ||
+ !strcmp(ev->keyname, KEY_1) ||
+ !strcmp(ev->keyname, KEY_2) ||
+ !strcmp(ev->keyname, KEY_3) ||
+ !strcmp(ev->keyname, KEY_4) ||
+ !strcmp(ev->keyname, KEY_5) ||
+ !strcmp(ev->keyname, KEY_6) ||
+ !strcmp(ev->keyname, KEY_7) ||
+ !strcmp(ev->keyname, KEY_8) ||
+ !strcmp(ev->keyname, KEY_9)) {
+ _selected(data, obj);
+ }
+ break;
+ default:
+ return;
+ }
+}
+
static Evas_Object *_create(Evas_Object *win, void *data)
{
struct _priv *priv;
evas_object_show(priv->base);
- if (!_add_pins(priv->base, priv)) {
- _ERR("failed to add pins");
- return;
- }
-
- if (priv->pin[0])
- elm_object_focus_set(priv->pin[0], EINA_TRUE);
+ _load_pins(priv);
}
static void _hide(void *data)
{
struct _priv *priv;
- int i;
if (!data) {
_ERR("Invalid argument");
evas_object_hide(priv->base);
- elm_box_clear(priv->box);
- evas_object_del(priv->box);
- priv->box = NULL;
-
- for (i = 0 ; i < COUNT_PIN; i++) {
- inputmgr_remove_callback(priv->pin[i], &handler);
- evas_object_del(priv->pin[i]);
- }
-
- memset(priv->pin, 0x00, sizeof(priv->pin));
+ _unload_pins(priv);
}
static void _destroy(void *data)