Exemplo n.º 1
0
// for _any we must return one by one
static int
point_attr_get(void *priv_data, enum attr_type attr_type, struct attr *attr)
{
    struct gobject *g = priv_data;
    struct map_rect_priv *mr = g->priv_data;
    int rc;
    switch (attr_type) {
    case attr_any:
        if (g != mr->last_oattr) {
            mr->last_oattr = g;
            mr->last_attr = 0;
        }
        switch(mr->last_attr) {
        case 0:
            mr->last_attr++;
            attr->type = attr_label;
            rc = garmin_object_label(g, attr);
            if (rc)
                return rc;
        case 1:
            mr->last_attr++;
            attr->type = attr_debug;
            rc = garmin_object_debug(g, attr);
            if (rc)
                return rc;
        default:
            return 0;
        }
        break;
    case attr_label:
        attr->type = attr_label;
        return garmin_object_label(g, attr);
    case attr_limit:
        return 0;
    default:
        dlog(1, "Dont know about attribute %d[%04X]=%s yet\n", attr_type,attr_type, attr_to_name(attr_type));
    }

    return 0;
}
Exemplo n.º 2
0
static int 
search_attr_get(void *priv_data, enum attr_type attr_type, struct attr *attr)
{
	struct gobject *g = priv_data;
	struct map_rect_priv *mr = g->priv_data;
	int rc;
	switch (attr_type) {
	case attr_any:
			if (g != mr->last_oattr) {
				mr->last_oattr = g;
				mr->last_attr = 0;
			}
			switch(mr->last_attr) {
				case 0:
					mr->last_attr++;
					attr->type = attr_label;
					rc = garmin_object_label(g, attr);
					if (rc)
						return rc;
				case 1:
					mr->last_attr++;
					attr->type = attr_debug;
					rc = garmin_object_debug(g, attr);
					if (rc)
						return rc;
				case 2:
					mr->last_attr++;
					if (g->type == GO_POLYLINE) {
						attr->type = attr_street_name;
						rc = garmin_object_label(g, attr);
						if (rc)
							return rc;
					}
				case 3:
					mr->last_attr++;
					attr->type = attr_flags;
					attr->u.num = 0;
					rc = gar_object_flags(g);
					if (rc & F_ONEWAY)
						attr->u.num |= AF_ONEWAY;
					if (rc & F_SEGMENTED)
						attr->u.num |= AF_SEGMENTED;
					return 1;
				default:
					return 0;
			}
			break;
	case attr_label:
		attr->type = attr_label;
		return garmin_object_label(g, attr);
	case attr_town_name:
		attr->type = attr_town_name;
		if (mr->label)
			free(mr->label);
		mr->label = gar_srch_get_city(g);
		attr->u.str = mr->label;
		if (attr->u.str)
			return 1;
		return 0;
	case attr_town_id:
		rc = gar_srch_get_cityid(g);
		if (rc) {
			attr->type = attr_town_id;
			attr->u.num = rc;
			return 1;
		}
		return 0;
	case attr_town_postal:
		attr->type = attr_town_postal;
		attr->u.str = gar_srch_get_zip(g);
		if (attr->u.str)
			return 1;
		return 0;
	case attr_street_name:
		attr->type = attr_street_name;
		if (mr->label)
			free(mr->label);
		mr->label = gar_srch_get_roadname(g);
		attr->u.str = mr->label;
		if (attr->u.str)
			return 1;
		return 0;
	case attr_street_id:
		attr->type = attr_street_id;
		attr->u.num = gar_srch_get_roadid(g);
		if (attr->u.num)
			return 1;
		return 0;
	case attr_flags:
		attr->type = attr_flags;
		attr->u.num = 0;
		rc = gar_object_flags(g);
		if (rc & F_ONEWAY)
			attr->u.num |= AF_ONEWAY;
		if (rc & F_SEGMENTED)
			attr->u.num |= AF_SEGMENTED;
		return 1;
	case attr_country_id:
		rc = gar_srch_get_countryid(g);
		if (rc) {
			attr->type = attr_country_id;
			attr->u.num = rc;
			return 1;
		}
		return 0;
	case attr_country_name:
		attr->type = attr_country_name;
		attr->u.str = gar_srch_get_country(g);
		if (attr->u.str)
			return 1;
		return 0;
	case attr_district_id:
		rc = gar_srch_get_regionid(g);
		if (rc) {
			attr->type = attr_district_id;
			attr->u.num = rc;
			return 1;
		}
		return 0;
	case attr_district_name:
		attr->type = attr_district_name;
		attr->u.str = gar_srch_get_region(g);
		if (attr->u.str)
			return 1;
		return 0;
	case attr_town_streets_item:
		return 0;
	default:
		dlog(1, "Dont know about attribute %d[%04X]=%s yet\n", attr_type,attr_type, attr_to_name(attr_type));
	}

	return 0;
}
Exemplo n.º 3
0
// for _any we must return one by one 
static int 
point_attr_get(void *priv_data, enum attr_type attr_type, struct attr *attr)
{
	struct gobject *g = priv_data;
	struct map_rect_priv *mr = g->priv_data;
	int rc;
	switch (attr_type) {
	case attr_any:
			if (g != mr->last_oattr) {
				mr->last_oattr = g;
				mr->last_attr = 0;
			}
			switch(mr->last_attr) {
				case 0:
					mr->last_attr++;
					attr->type = attr_label;
					rc = garmin_object_label(g, attr);
					if (rc)
						return rc;
				case 1:
					mr->last_attr++;
					attr->type = attr_debug;
					rc = garmin_object_debug(g, attr);
					if (rc)
						return rc;
				case 2:
					mr->last_attr++;
					if (g->type == GO_POLYLINE) {
						attr->type = attr_street_name;
						rc = garmin_object_label(g, attr);
						if (rc)
							return rc;
					}
				case 3:
					mr->last_attr++;
					attr->type = attr_flags;
					attr->u.num = 0;
					rc = gar_object_flags(g);
					if (rc & F_ONEWAY)
						attr->u.num |= AF_ONEWAY;
					if (rc & F_SEGMENTED)
						attr->u.num |= AF_SEGMENTED;
					return 1;
				default:
					return 0;
			}
			break;
	case attr_label:
		attr->type = attr_label;
		return garmin_object_label(g, attr);
	case attr_town_name:
		attr->type = attr_town_name;
		return garmin_object_label(g, attr);
	case attr_street_name:
		attr->type = attr_street_name;
		return garmin_object_label(g, attr);
	case attr_flags:
		attr->type = attr_flags;
		attr->u.num = 0;
		rc = gar_object_flags(g);
		if (rc & F_ONEWAY)
			attr->u.num |= AF_ONEWAY;
		if (rc & F_SEGMENTED)
			attr->u.num |= AF_SEGMENTED;
		return 1;
	default:
		dlog(1, "Dont know about attribute %d[%04X]=%s yet\n", attr_type,attr_type, attr_to_name(attr_type));
	}

	return 0;
}