Add code to grid for catching key down and mouse events

Signed-off-by: Chris Michael <devilhorns@comcast.net>
This commit is contained in:
Chris Michael 2014-01-04 14:47:44 +00:00
parent 4bf995e5ec
commit ec853e9a25
1 changed files with 100 additions and 22 deletions

View File

@ -39,8 +39,10 @@ struct _Grid
} cursor;
Evas_Object *o_event;
Ecore_Animator *anim;
const char *name;
int scroll;
Eina_Bool noreqsize : 1;
@ -476,8 +478,10 @@ _smart_apply(Evas_Object *obj)
ch1, y, ch2 - ch1 + 1, 1);
}
/* TODO: test scrolling */
evas_object_show(sd->cursor.obj);
if (sd->scroll != 0)
evas_object_hide(sd->cursor.obj);
else
evas_object_show(sd->cursor.obj);
evas_object_move(sd->cursor.obj,
ox + (sd->cursor.x * sd->font.chw),
@ -539,23 +543,6 @@ _smart_cb_delayed_size(void *data)
return EINA_FALSE;
}
/* static Eina_Bool */
/* _smart_cb_change(void *data) */
/* { */
/* Evas_Object *obj; */
/* Grid *sd; */
/* obj = data; */
/* if (!(sd = evas_object_smart_data_get(obj))) return EINA_FALSE; */
/* _smart_apply(obj); */
/* evas_object_smart_callback_call(obj, "changed", NULL); */
/* return EINA_FALSE; */
/* } */
static void
_smart_cb_cursor_move(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event EINA_UNUSED)
{
@ -575,7 +562,6 @@ _smart_cb_focus_in(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UNU
if (!(sd = evas_object_smart_data_get(data))) return;
edje_object_signal_emit(sd->cursor.obj, "focus,in", "express");
evas_object_show(sd->cursor.obj);
/* TODO: finish */
}
@ -592,6 +578,89 @@ _smart_cb_focus_out(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UN
/* TODO: finish */
}
static void
_smart_cb_mouse_down(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event)
{
Grid *sd;
Evas_Event_Mouse_Down *ev;
ev = event;
if (!(sd = evas_object_smart_data_get(data))) return;
if (ev->button == 3)
{
elm_object_focus_set(data, EINA_TRUE);
evas_object_smart_callback_call(data, "options", NULL);
}
}
static Eina_Bool
_smart_cb_change(void *data)
{
Evas_Object *obj;
Grid *sd;
if (!(obj = data)) return EINA_FALSE;
if (!(sd = evas_object_smart_data_get(obj))) return EINA_FALSE;
sd->anim = NULL;
_smart_apply(obj);
evas_object_smart_callback_call(obj, "changed", NULL);
return EINA_FALSE;
}
static void
_smart_update_queue(Evas_Object *obj, Grid *sd)
{
if (sd->anim) return;
sd->anim = ecore_animator_add(_smart_cb_change, obj);
}
static void
_smart_cb_mouse_wheel(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event)
{
Grid *sd;
Evas_Event_Mouse_Wheel *ev;
ev = event;
if (!(sd = evas_object_smart_data_get(data))) return;
sd->scroll -= (ev->z * 4);
if (sd->scroll < 0) sd->scroll = 0;
_smart_update_queue(data, sd);
}
static void
_smart_cb_key_down(void *data, Evas *evas EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event)
{
Grid *sd;
Evas_Event_Key_Down *ev;
ev = event;
if (!(sd = evas_object_smart_data_get(data))) return;
if ((!evas_key_modifier_is_set(ev->modifiers, "Alt")) &&
(evas_key_modifier_is_set(ev->modifiers, "Control")) &&
(!evas_key_modifier_is_set(ev->modifiers, "Shift")))
{
if ((!strcmp(ev->key, "Prior")) || (!strcmp(ev->key, "Right")))
{
evas_object_smart_callback_call(data, "prev", NULL);
goto end;
}
else if ((!strcmp(ev->key, "Next")) || (!strcmp(ev->key, "Left")))
{
evas_object_smart_callback_call(data, "next", NULL);
goto end;
}
}
/* TODO: finish */
end:
edje_object_signal_emit(sd->cursor.obj, "key,down", "express");
}
static void
_smart_calculate(Evas_Object *obj)
{
@ -656,16 +725,23 @@ _smart_add(Evas_Object *obj)
sd->sel.theme = edje_object_add(sd->evas);
evas_object_smart_member_add(sd->sel.theme, obj);
/* TODO: callbacks */
/* TODO: selection callbacks */
/* create event object */
sd->o_event = evas_object_rectangle_add(sd->evas);
evas_object_repeat_events_set(sd->o_event, EINA_TRUE);
evas_object_color_set(sd->o_event, 255, 0, 0,32);
evas_object_color_set(sd->o_event, 0, 0, 0, 0);
evas_object_smart_member_add(sd->o_event, obj);
evas_object_show(sd->o_event);
evas_object_event_callback_add(obj, EVAS_CALLBACK_MOUSE_DOWN,
_smart_cb_mouse_down, obj);
evas_object_event_callback_add(obj, EVAS_CALLBACK_MOUSE_WHEEL,
_smart_cb_mouse_wheel, obj);
/* TODO: Finish callbacks & imf */
evas_object_event_callback_add(obj, EVAS_CALLBACK_KEY_DOWN,
_smart_cb_key_down, obj);
evas_object_event_callback_add(obj, EVAS_CALLBACK_FOCUS_IN,
_smart_cb_focus_in, obj);
evas_object_event_callback_add(obj, EVAS_CALLBACK_FOCUS_OUT,
@ -689,6 +765,8 @@ _smart_del(Evas_Object *obj)
if (sd->sel.theme) evas_object_del(sd->sel.theme);
if (sd->grid.obj) evas_object_del(sd->grid.obj);
if (sd->font.name) eina_stringshare_del(sd->font.name);
if (sd->anim) ecore_animator_del(sd->anim);
/* TODO: finish */
_parent_sc.del(obj);