/* called when search job has been processed and result has been parsed */ static void _lib_location_search_finish(gpointer user_data) { dt_lib_module_t *self = (dt_lib_module_t *)user_data; dt_lib_location_t *lib = (dt_lib_location_t *)self->data; /* check if search gave us some result */ if (!lib->places) return; /* for each location found populate the result list */ GList *item = lib->places; do { _lib_location_result_t *place = (_lib_location_result_t *)item->data; gtk_box_pack_start(GTK_BOX(lib->result), _lib_location_place_widget_new(place), TRUE, TRUE, 2); gtk_widget_show(lib->result); } while ((item = g_list_next(item)) != NULL); /* if we only got one search result back lets set center location and zoom based on place type */ if (g_list_length(lib->places) == 1) { int32_t zoom = 0; _lib_location_result_t *item = (_lib_location_result_t*)lib->places->data; zoom = _lib_location_place_get_zoom(item); dt_view_map_center_on_location(darktable.view_manager, item->lon, item->lat, zoom); } }
gboolean _lib_location_result_item_activated(GtkButton *button, GdkEventButton *ev, gpointer user_data) { _lib_location_result_t *p = (_lib_location_result_t *)user_data; int32_t zoom = _lib_location_place_get_zoom(p); fprintf(stderr, "zoom to: %d\n", zoom); dt_view_map_center_on_location(darktable.view_manager, p->lon, p->lat, zoom); return TRUE; }
static void _show_location(dt_lib_location_t *lib, _lib_location_result_t *p) { if(isnan(p->bbox_lon1) || isnan(p->bbox_lat1) || isnan(p->bbox_lon2) || isnan(p->bbox_lat2)) { int32_t zoom = _lib_location_place_get_zoom(p); dt_view_map_center_on_location(darktable.view_manager, p->lon, p->lat, zoom); } else { dt_view_map_center_on_bbox(darktable.view_manager, p->bbox_lon1, p->bbox_lat1, p->bbox_lon2, p->bbox_lat2); } _clear_markers(lib); lib->marker = dt_view_map_add_marker(darktable.view_manager, p->marker_type, p->marker_points); lib->marker_type = p->marker_type; lib->selected_location = p; }