bool StyleData::parse(const Value& v, unsigned long projectId) { std::string typeStr = getJSONString(v, "type"); type = _getType(typeStr); zoom_level_min = atoi(getJSONString(v, "zoom_level_min", "2").c_str()); zoom_level_max = atoi(getJSONString(v, "zoom_level_max", "20").c_str()); icon = getJSONString(v, "icon-mobile", "point"); transform = getJSONString(v, "transform", ""); transormValid = _parseTransform(transform); dasharray = getJSONString(v, "dasharray", ""); if(dasharray.empty()) dasharray = getJSONString(v, "outline-dasharray", ""); color = _parseColor( getJSONString(v, "color"), colorValid ); color.v[3] = atof(getJSONString(v, "opacity", "1.0").c_str()); size = atof(getJSONString(v, "size", "0").c_str()); outline_color = _parseColor( getJSONString(v, "outline-color"), outlineColorValid ); outline_color.v[3] = atof(getJSONString(v, "outline-opacity", "1.0").c_str()); outline_size = atof(getJSONString(v, "outline-size", "0").c_str()); filter = getJSONString(v, "filter"); filter_hash = getJSONString(v, "filter_hash"); // Font style field_name = getJSONString(v, "field-name"); font_name = getJSONString(v, "font-name"); font_filename = getJSONString(v, "font-filename"); font_size = atof(getJSONString(v, "font-size", "0").c_str()); font_opacity = atof(getJSONString(v, "font-opacity", "1").c_str()); font_color = _parseColor( getJSONString(v, "font-color"), fontColorValid); font_halo_color = _parseColor( getJSONString(v, "font-halo-color"), fontHaloColorValid); font_halo_size = atof(getJSONString(v, "font-halo-size", "0").c_str()); offset_x = atof(getJSONString(v, "offset-x", "0").c_str()); offset_y = atof(getJSONString(v, "offset-y", "0").c_str()); mode = getJSONString(v, "mode"); modeType = _getType(mode); allow_overlap = getJSONBool(v, "allow-overlap", false); if(type==ICON) { fullIconPath = SupportFiles::getFullPath(projectId) + icon; } return true; }
void OptionManager::callOptionHandler (const char* name, const char* value) { if (!typeMap.find(name)) throw Error("Property \"%s\" not defined", name); OPTION_TYPE type = typeMap.at(name); int x = 0, y = 0; float f = 0, r = 0, g = 0, b = 0; switch (type) { case OPTION_STRING: stringSetters.at(name)(value); break; case OPTION_INT: if (_parseInt(value, x) < 0) throw Error("Cannot recognize \"%s\" as an integer value", value); intSetters.at(name)(x); break; case OPTION_BOOL: if (_parseBool(value, x) < 0) throw Error("Cannot recognize \"%s\" as a boolean value", value); boolSetters.at(name)(x); break; case OPTION_FLOAT: if (_parseFloat(value, f) < 0) throw Error("Cannot recognize \"%s\" as a float value", value); floatSetters.at(name)(f); break; case OPTION_COLOR: if (_parseColor(value, r, g, b) < 0) throw Error("Cannot recognize \"%s\" as a color value", value); colorSetters.at(name)(r, g, b); break; case OPTION_XY: if (_parseSize(value, x, y) < 0) throw Error("Cannot recognize \"%s\" as a pair of integers", value); xySetters.at(name)(x, y); break; default: throw Error("Option type not supported"); } }