mp_play.png \
mp_prev.png \
mp_rewind.png \
-mp_stop.png
+mp_stop.png \
+access_glow.png
default.edj: Makefile $(EXTRA_DIST)
$(EDJE_CC) $(EDJE_FLAGS) \
}
}
}
+
+///////////////////////////////////////////////////////////////////////////////
+ group { name: "elm/access/base/default";
+ images {
+ image: "access_glow.png" LOSSY 85;
+ }
+ parts {
+ part { name: "block1"; type: RECT;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ color: 0 0 0 200;
+ rel1 { to: "base";
+ relative: 0.0 0.0;
+ offset: -100000 -100000;
+ }
+ rel2 { to: "base";
+ relative: 1.0 0.0;
+ offset: 100000 96;
+ }
+ }
+ }
+ part { name: "block2"; type: RECT;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ color: 0 0 0 200;
+ rel1 { to: "base";
+ relative: 0.0 1.0;
+ offset: -100000 -97;
+ }
+ rel2 { to: "base";
+ relative: 1.0 1.0;
+ offset: 100000 100000;
+ }
+ }
+ }
+ part { name: "block3"; type: RECT;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ color: 0 0 0 200;
+ rel1 { to: "block1";
+ relative: 0.0 1.0;
+ offset: 0 0;
+ }
+ rel2 { to_x: "base"; to_y: "block2";
+ relative: 0.0 0.0;
+ offset: 96 -1;
+ }
+ }
+ }
+ part { name: "block4"; type: RECT;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ color: 0 0 0 200;
+ rel1 { to_x: "base"; to_y: "block1";
+ relative: 1.0 1.0;
+ offset: -97 0;
+ }
+ rel2 { to: "block2";
+ relative: 1.0 0.0;
+ offset: -1 -1;
+ }
+ }
+ }
+ part { name: "base";
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ image.normal: "access_glow.png";
+ image.border: 112 112 112 112;
+ rel1.offset: -102 -102;
+ rel2.offset: 101 101;
+ fill.smooth: 0;
+ }
+ }
+ }
+ }
+
#include "widgets/bg.edc"
#include "widgets/scroller.edc"
#include "widgets/label.edc"
if (!ac) return EINA_FALSE;
if (_elm_config->access_mode != ELM_ACCESS_MODE_OFF)
{
+ _elm_access_object_hilight(data);
_elm_access_read(ac, ELM_ACCESS_CANCEL, data, NULL);
_elm_access_read(ac, ELM_ACCESS_TYPE, data, NULL);
_elm_access_read(ac, ELM_ACCESS_INFO, data, NULL);
{
Elm_Access_Info *ac = evas_object_data_get(data, "_elm_access");
if (!ac) return;
+ _elm_access_object_unhilight(data);
if (ac->delay_timer)
{
ecore_timer_del(ac->delay_timer);
{
if (ai->type == type)
{
- if (ai->func) return ai->func(ai->data, obj, item);
+ if (ai->func) return ai->func((void *)(ai->data), obj, item);
else if (ai->data) return strdup(ai->data);
return NULL;
}
}
EAPI void
-_elm_access_object_hilight(Evas_Object *win, Evas_Object *obj)
+_elm_access_object_hilight(Evas_Object *obj)
{
- // if hilight obj doens exist - create and attach to window
+ Evas_Object *o;
+
+ o = evas_object_name_find(evas_object_evas_get(obj), "_elm_access_disp");
+ if (!o)
+ {
+ o = edje_object_add(evas_object_evas_get(obj));
+ evas_object_name_set(o, "_elm_access_disp");
+ evas_object_layer_set(o, ELM_OBJECT_LAYER_TOOLTIP);
+ }
+ else
+ {
+ Evas_Object *ptarget = evas_object_data_get(o, "_elm_access_target");
+ if (ptarget)
+ {
+ evas_object_data_del(o, "_elm_access_target");
+ // FIXME: delete move/resize/del callbacks from ptarget
+ }
+ }
+ evas_object_data_set(o, "_elm_access_target", obj);
+ // FIXME: track obj pos/size until hilight removed
+ _elm_theme_object_set(obj, o, "access", "base", "default");
+ evas_object_raise(o);
+
+ {
+ Evas_Coord x, y, w, h;
+ evas_object_geometry_get(obj, &x, &y, &w, &h);
+ evas_object_move(o, x, y);
+ evas_object_resize(o, w, h);
+ }
+
+ evas_object_show(o);
+ // if hilight obj doesnt exist - create and attach to window
// make sure its on a high layer
// show it and emit signal
// if exists, move and resize to obj object location
}
EAPI void
-_elm_access_object_unhilight(Evas_Object *win)
+_elm_access_object_unhilight(Evas_Object *obj)
{
- // hide highlight obj is there, emit hide and then del when done
+ Evas_Object *o, *ptarget;
+
+ o = evas_object_name_find(evas_object_evas_get(obj), "_elm_access_disp");
+ if (!o) return;
+ ptarget = evas_object_data_get(o, "_elm_access_target");
+ if (ptarget == obj) evas_object_del(o);
}
EAPI void
}
static char *
-_access_info_cb(const void *data __UNUSED__, Evas_Object *obj, Elm_Widget_Item *item __UNUSED__)
+_access_info_cb(void *data __UNUSED__, Evas_Object *obj, Elm_Widget_Item *item __UNUSED__)
{
char *txt = (char *)elm_widget_access_info_get(obj);
if (!txt) txt = (char *)_elm_button_label_get(obj, NULL);
}
static char *
-_access_state_cb(const void *data __UNUSED__, Evas_Object *obj, Elm_Widget_Item *item __UNUSED__)
+_access_state_cb(void *data __UNUSED__, Evas_Object *obj, Elm_Widget_Item *item __UNUSED__)
{
if (elm_widget_disabled_get(obj))
return strdup(E_("State: Disabled"));
{
Widget_Data *wd = elm_widget_data_get(obj);
if (!wd) return;
- wd->state = !wd->state;
- if (wd->statep) *wd->statep = wd->state;
- if (wd->state)
- edje_object_signal_emit(wd->chk, "elm,state,check,on", "elm");
- else
- edje_object_signal_emit(wd->chk, "elm,state,check,off", "elm");
- evas_object_smart_callback_call(obj, SIG_CHANGED, NULL);
+ if ((_elm_config->access_mode == ELM_ACCESS_MODE_OFF) ||
+ (_elm_access_2nd_click_timeout(obj)))
+ {
+ if (_elm_config->access_mode != ELM_ACCESS_MODE_OFF)
+ wd->state = !wd->state;
+ if (wd->statep) *wd->statep = wd->state;
+ if (wd->state)
+ {
+ edje_object_signal_emit(wd->chk, "elm,state,check,on", "elm");
+ _elm_access_say(E_("State: On"));
+ }
+ else
+ {
+ edje_object_signal_emit(wd->chk, "elm,state,check,off", "elm");
+ _elm_access_say(E_("State: Off"));
+ }
+ evas_object_smart_callback_call(obj, SIG_CHANGED, NULL);
+ }
}
static void
return wd->label;
}
+static char *
+_access_info_cb(void *data __UNUSED__, Evas_Object *obj, Elm_Widget_Item *item __UNUSED__)
+{
+ char *txt = (char *)elm_widget_access_info_get(obj);
+ if (!txt) txt = (char *)_elm_check_label_get(obj, NULL);
+ if (txt) return strdup(txt);
+ return txt;
+}
+
+static char *
+_access_state_cb(void *data, Evas_Object *obj, Elm_Widget_Item *item __UNUSED__)
+{
+ Evas_Object *o = data;
+ Widget_Data *wd = elm_widget_data_get(o);
+ if (!wd) return NULL;
+ if (elm_widget_disabled_get(obj))
+ return strdup(E_("State: Disabled"));
+ if (wd->state)
+ return strdup(E_("State: On"));
+ return strdup(E_("State: Off"));
+}
+
EAPI Evas_Object *
elm_check_add(Evas_Object *parent)
{
// TODO: convert Elementary to subclassing of Evas_Smart_Class
// TODO: and save some bytes, making descriptions per-class and not instance!
evas_object_smart_callbacks_descriptions_set(obj, _signals);
+
+ _elm_access_object_register(obj, wd->chk);
+ _elm_access_text_set(_elm_access_object_get(obj),
+ ELM_ACCESS_TYPE, E_("Check"));
+ _elm_access_callback_set(_elm_access_object_get(obj),
+ ELM_ACCESS_INFO, _access_info_cb, obj);
+ _elm_access_callback_set(_elm_access_object_get(obj),
+ ELM_ACCESS_STATE, _access_state_cb, obj);
return obj;
}
#define ELM_ACCESS_DONE -1 // sentence done - send done event here
#define ELM_ACCESS_CANCEL -2 // stop reading immediately
-typedef char *(*Elm_Access_Content_Cb)(const void *data, Evas_Object *obj, Elm_Widget_Item *item);
+typedef char *(*Elm_Access_Content_Cb)(void *data, Evas_Object *obj, Elm_Widget_Item *item);
struct _Elm_Access_Item
{
EAPI void _elm_access_read(Elm_Access_Info *ac, int type, Evas_Object *obj, Elm_Widget_Item *item);
EAPI void _elm_access_say(const char *txt);
EAPI Elm_Access_Info *_elm_access_object_get(Evas_Object *obj);
+EAPI void _elm_access_object_hilight(Evas_Object *obj);
+EAPI void _elm_access_object_unhilight(Evas_Object *obj);
EAPI void _elm_access_object_register(Evas_Object *obj, Evas_Object *hoverobj);
EAPI Eina_Bool _elm_access_2nd_click_timeout(Evas_Object *obj);