From: Bluezery <ohpowel@gmail.com>

Subject: [E-devel] [Patch][elm_map] Add New "loaded" signal

I want to add new "loaded" signal to elementary map. This signal
notify users when all map tiles are loaded. Timer is used for this signal.
Currently "tile,loaded" can be used for each separated tile.  So the
users are hard to know whether all tiles are loaded or not.
Please review this patch.



SVN revision: 71406
This commit is contained in:
Bluezery 2012-05-24 10:07:56 +00:00 committed by Carsten Haitzler
parent 725f0c62dd
commit bfff7d7836
4 changed files with 36 additions and 0 deletions

View File

@ -97,3 +97,7 @@
* Add ability to use cnp helper code on non-elm widget objects by
falling back to ecore-evas to get the window id.
2012-05-24 Tae-Hwan Kim (Bluezery)
* Add "loaded" signal for elm_map.

View File

@ -364,6 +364,12 @@ _map_zoom_change(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event
_bubble_parking_follow(obj);
}
static void
_map_loaded(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
{
printf("loaded\n");
}
static void
_map_tile_load(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
{
@ -1058,6 +1064,7 @@ test_map(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __
evas_object_smart_callback_add(map, "zoom,start", _map_zoom_start, map);
evas_object_smart_callback_add(map, "zoom,stop", _map_zoom_stop, map);
evas_object_smart_callback_add(map, "zoom,change", _map_zoom_change, map);
evas_object_smart_callback_add(map, "loaded", _map_loaded, map);
evas_object_smart_callback_add(map, "tile,load", _map_tile_load, map);
evas_object_smart_callback_add(map, "tile,loaded", _map_tile_loaded, map);
evas_object_smart_callback_add(map, "tile,loaded,fail", _map_tile_loaded_fail, map);

View File

@ -410,6 +410,8 @@ struct _Widget_Data
Ecore_Timer *zoom_timer;
Ecore_Animator *zoom_animator;
Ecore_Timer *loaded_timer;
int try_num;
int finish_num;
int download_num;
@ -513,6 +515,7 @@ static const char SIG_SCROLL_ANIM_STOP[] = "scroll,anim,stop";
static const char SIG_ZOOM_START[] = "zoom,start";
static const char SIG_ZOOM_STOP[] = "zoom,stop";
static const char SIG_ZOOM_CHANGE[] = "zoom,change";
static const char SIG_LOADED[] = "loaded";
static const char SIG_TILE_LOAD[] = "tile,load";
static const char SIG_TILE_LOADED[] = "tile,loaded";
static const char SIG_TILE_LOADED_FAIL[] = "tile,loaded,fail";
@ -536,6 +539,7 @@ static const Evas_Smart_Cb_Description _signals[] = {
{SIG_ZOOM_START, ""},
{SIG_ZOOM_STOP, ""},
{SIG_ZOOM_CHANGE, ""},
{SIG_LOADED, ""},
{SIG_TILE_LOAD, ""},
{SIG_TILE_LOADED, ""},
{SIG_TILE_LOADED_FAIL, ""},
@ -735,6 +739,18 @@ _grid_item_in_viewport(Grid_Item *gi)
return ELM_RECTS_INTERSECT(x, y, w, h, vx, vy, vw, vh);
}
static Eina_Bool
_loaded_timeout(void *data)
{
EINA_SAFETY_ON_NULL_RETURN_VAL(data, EINA_FALSE);
Widget_Data *wd = data;
wd->loaded_timer = NULL;
if (!(wd->download_num) && !(wd->download_idler))
evas_object_smart_callback_call(wd->obj, SIG_LOADED, NULL);
return ECORE_CALLBACK_CANCEL;
}
static void
_grid_item_update(Grid_Item *gi)
{
@ -761,6 +777,9 @@ _grid_item_update(Grid_Item *gi)
_obj_rotate(gi->wd, gi->img);
gi->file_have = EINA_TRUE;
}
if (gi->wd->loaded_timer) ecore_timer_del(gi->wd->loaded_timer);
gi->wd->loaded_timer = ecore_timer_add(0.25, _loaded_timeout, gi->wd);
}
static void
@ -3692,6 +3711,11 @@ _del_hook(Evas_Object *obj)
Widget_Data *wd = elm_widget_data_get(obj);
EINA_SAFETY_ON_NULL_RETURN(wd);
if (wd->loaded_timer)
{
ecore_timer_del(wd->loaded_timer);
wd->loaded_timer = NULL;
}
if (wd->map) evas_map_free(wd->map);
free(wd);
}

View File

@ -42,6 +42,7 @@
* - "name,loaded" - Name request ends.
* - "name,loaded,fail" - Name request fails.
* - "overlay,clicked" - A overlay is clicked.
* - "loaded" - when a map is finally loaded.
*
* Available style for map widget:
* - @c "default"