Elm map : * do not display a bubble if the content is empty

* use a different temp dir for each map



SVN revision: 44634
This commit is contained in:
Jonathan Atton 2009-12-21 17:01:19 +00:00
parent 4193c1bb7b
commit 4af4c79d48
1 changed files with 23 additions and 17 deletions

View File

@ -53,7 +53,7 @@ typedef struct _Marker_Group Marker_Group;
#define SOURCE_PATH "http://tile.openstreetmap.org/%d/%d/%d.png"
#define DEST_DIR_ZOOM_PATH "/tmp/elm_map/%d/"
#define DEST_DIR_ZOOM_PATH "/tmp/elm_map/%d/%d/"
#define DEST_DIR_PATH DEST_DIR_ZOOM_PATH"%d/"
#define DEST_FILE_PATH "%s%d.png"
@ -251,7 +251,7 @@ static void _group_bubble_create(Marker_Group *group);
static void _group_bubble_free(Marker_Group *group);
static void _group_bubble_place(Marker_Group *group);
static void _group_bubble_content_update(Marker_Group *group);
static int _group_bubble_content_update(Marker_Group *group);
static void _group_bubble_content_free(Marker_Group *group);
static void marker_place(Evas_Object *obj, Grid *g, Evas_Coord px, Evas_Coord py, Evas_Coord ox, Evas_Coord oy, Evas_Coord ow, Evas_Coord oh);
static void _bubble_sc_hits_changed_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
@ -512,7 +512,7 @@ grid_clear(Evas_Object *obj, Grid *g)
Eina_Iterator *it = eina_matrixsparse_iterator_new(g->grid);
Eina_Matrixsparse_Cell *cell;
snprintf(buf, PATH_MAX, DEST_DIR_ZOOM_PATH, g->zoom);
snprintf(buf, PATH_MAX, DEST_DIR_ZOOM_PATH, obj, g->zoom);
ecore_file_recursive_rm(buf);
EINA_ITERATOR_FOREACH(it, cell)
@ -773,7 +773,7 @@ grid_load(Evas_Object *obj, Grid *g)
gi->want = EINA_TRUE;
snprintf(buf, PATH_MAX, DEST_DIR_PATH, g->zoom, x);
snprintf(buf, PATH_MAX, DEST_DIR_PATH, obj, g->zoom, x);
if(!ecore_file_exists(buf))
ecore_file_mkpath(buf);
@ -1407,7 +1407,12 @@ _group_bubble_create(Marker_Group *group)
elm_widget_sub_object_add(group->wd->obj, group->bubble);
_group_bubble_content_free(group);
_group_bubble_content_update(group);
if(!_group_bubble_content_update(group))
{
//no content, we can delete the bubble
_group_bubble_free(group);
return ;
}
group->rect = evas_object_rectangle_add(evas_object_evas_get(group->obj));
evas_object_color_set(group->rect, 0, 0, 0, 0);
@ -1426,14 +1431,14 @@ static void _bubble_sc_hits_changed_cb(void *data, Evas *e, Evas_Object *obj, vo
_group_bubble_place(data);
}
static void
static int
_group_bubble_content_update(Marker_Group *group)
{
Eina_List *l;
Elm_Map_Marker *marker;
int i = 0;
if(!group->bubble) return ;
if(!group->bubble) return 1;
if(!group->sc)
{
@ -1470,9 +1475,13 @@ _group_bubble_content_update(Marker_Group *group)
elm_box_unpack(group->bx, marker->content);
if(marker->content)
elm_box_pack_end(group->bx, marker->content);
i++;
{
elm_box_pack_end(group->bx, marker->content);
i++;
}
}
return i;
}
static void
@ -2467,21 +2476,18 @@ elm_map_markers_list_show(Eina_List *markers)
lat = (m_max_lat->latitude - m_min_lat->latitude) / 2. + m_min_lat->latitude;
elm_smart_scroller_child_viewport_size_get(wd->scr, &rw, &rh);
for (zoom = 18; zoom>=0; zoom--)
for (zoom = 18; zoom>0; zoom--)
{
Evas_Coord size = pow(2.0, zoom)*wd->tsize;
elm_map_utils_convert_geo_into_coord(lon, lat, size, &xc, &yc);
if(m_min_lon->x[zoom] - wd->marker_max_w > xc-rw/2
&& m_min_lat->y[zoom] - wd->marker_max_h > yc-rh/2
&& m_max_lon->x[zoom] + wd->marker_max_w < xc+rw/2
&& m_max_lat->y[zoom] + wd->marker_max_h < yc+rh/2)
if(m_min_lon->x[zoom] - wd->marker_max_w >= xc-rw/2
&& m_min_lat->y[zoom] - wd->marker_max_h >= yc-rh/2
&& m_max_lon->x[zoom] + wd->marker_max_w <= xc+rw/2
&& m_max_lat->y[zoom] + wd->marker_max_h <= yc+rh/2)
break;
}
if(zoom<0)
zoom = 0;
elm_map_geo_region_show(wd->obj, lon, lat);
elm_map_zoom_set(wd->obj, zoom);
}