diff options
author | Alex Zolotarev <alex@maps.me> | 2016-02-12 23:28:16 +0300 |
---|---|---|
committer | Sergey Yershov <yershov@corp.mail.ru> | 2016-03-23 16:50:49 +0300 |
commit | 63d6d9ce2bb67e56f32be5ba3633bead88e68c67 (patch) | |
tree | b0e1b192489054244d8c6620a90df63ec83704c0 /indexer/editable_map_object.cpp | |
parent | bb6dc8f88bba8bd54f0fd95ac56b31966c5f8d90 (diff) |
Editable feature designed to connect UI and editor’s core.
Diffstat (limited to 'indexer/editable_map_object.cpp')
-rw-r--r-- | indexer/editable_map_object.cpp | 151 |
1 files changed, 151 insertions, 0 deletions
diff --git a/indexer/editable_map_object.cpp b/indexer/editable_map_object.cpp new file mode 100644 index 0000000000..8379dfc72d --- /dev/null +++ b/indexer/editable_map_object.cpp @@ -0,0 +1,151 @@ +#include "indexer/classificator.hpp" +#include "indexer/cuisines.hpp" +#include "indexer/editable_map_object.hpp" + +#include "base/macros.hpp" + +namespace osm +{ +bool EditableMapObject::IsNameEditable() const { return m_editableProperties.m_name; } +bool EditableMapObject::IsAddressEditable() const { return m_editableProperties.m_address; } +vector<Props> EditableMapObject::GetEditableProperties() const +{ + return MetadataToProps(m_editableProperties.m_metadata); +} + +vector<feature::Metadata::EType> const & EditableMapObject::GetEditableFields() const +{ + return m_editableProperties.m_metadata; +} + +StringUtf8Multilang const & EditableMapObject::GetName() const { return m_name; } +vector<LocalizedName> EditableMapObject::GetLocalizedNames() const +{ + vector<LocalizedName> result; + m_name.ForEach([&result](int8_t code, string const & name) -> bool + { + result.push_back({code, StringUtf8Multilang::GetLangByCode(code), + StringUtf8Multilang::GetLangNameByCode(code), name}); + return true; + }); + return result; +} + +vector<string> const & EditableMapObject::GetNearbyStreets() const { return m_nearbyStreets; } +string const & EditableMapObject::GetHouseNumber() const { return m_houseNumber; } +string EditableMapObject::GetPostcode() const +{ + return m_metadata.Get(feature::Metadata::FMD_POSTCODE); +} + +string EditableMapObject::GetWikipedia() const +{ + return m_metadata.Get(feature::Metadata::FMD_WIKIPEDIA); +} + +void EditableMapObject::SetEditableProperties(osm::EditableProperties const & props) +{ + m_editableProperties = props; +} + +void EditableMapObject::SetName(StringUtf8Multilang const & name) { m_name = name; } +void EditableMapObject::SetName(string const & name, int8_t langCode) +{ + if (!name.empty()) + m_name.AddString(langCode, name); +} + +void EditableMapObject::SetMercator(m2::PointD const & center) { m_mercator = center; } +void EditableMapObject::SetStreet(string const & street) { m_street = street; } +void EditableMapObject::SetNearbyStreets(vector<string> const & streets) +{ + m_nearbyStreets = streets; +} +void EditableMapObject::SetHouseNumber(string const & houseNumber) { m_houseNumber = houseNumber; } +void EditableMapObject::SetPostcode(string const & postcode) +{ + m_metadata.Set(feature::Metadata::FMD_POSTCODE, postcode); +} + +void EditableMapObject::SetPhone(string const & phone) +{ + m_metadata.Set(feature::Metadata::FMD_PHONE_NUMBER, phone); +} + +void EditableMapObject::SetFax(string const & fax) +{ + m_metadata.Set(feature::Metadata::FMD_FAX_NUMBER, fax); +} + +void EditableMapObject::SetEmail(string const & email) +{ + m_metadata.Set(feature::Metadata::FMD_EMAIL, email); +} + +void EditableMapObject::SetWebsite(string const & website) +{ + m_metadata.Set(feature::Metadata::FMD_WEBSITE, website); + m_metadata.Drop(feature::Metadata::FMD_URL); +} + +void EditableMapObject::SetInternet(Internet internet) +{ + m_metadata.Set(feature::Metadata::FMD_INTERNET, DebugPrint(internet)); +} + +void EditableMapObject::SetStars(int stars) +{ + if (stars > 0 && stars <= 7) + m_metadata.Set(feature::Metadata::FMD_STARS, strings::to_string(stars)); + else + LOG(LWARNING, ("Ignored invalid value to Stars:", stars)); +} + +void EditableMapObject::SetOperator(string const & op) +{ + m_metadata.Set(feature::Metadata::FMD_OPERATOR, op); +} + +void EditableMapObject::SetElevation(double ele) +{ + constexpr double kMaxElevationOnTheEarthInMeters = 10000; + constexpr double kMinElevationOnTheEarthInMeters = -15000; + if (ele < kMaxElevationOnTheEarthInMeters && ele > kMinElevationOnTheEarthInMeters) + m_metadata.Set(feature::Metadata::FMD_ELE, strings::to_string_dac(ele, 1)); + else + LOG(LWARNING, ("Ignored invalid value to Elevation:", ele)); +} + +void EditableMapObject::SetWikipedia(string const & wikipedia) +{ + m_metadata.Set(feature::Metadata::FMD_WIKIPEDIA, wikipedia); +} + +void EditableMapObject::SetFlats(string const & flats) +{ + m_metadata.Set(feature::Metadata::FMD_FLATS, flats); +} + +void EditableMapObject::SetBuildingLevels(string const & buildingLevels) +{ + m_metadata.Set(feature::Metadata::FMD_BUILDING_LEVELS, buildingLevels); +} + +string const & EditableMapObject::GetStreet() const { return m_street; } +void EditableMapObject::SetCuisines(vector<string> const & cuisine) +{ + m_metadata.Set(feature::Metadata::FMD_CUISINE, strings::JoinStrings(cuisine, ';')); +} + +void EditableMapObject::SetRawOSMCuisines(string const & cuisine) +{ + m_metadata.Set(feature::Metadata::FMD_CUISINE, cuisine); +} + +void EditableMapObject::SetOpeningHours(string const & openingHours) +{ + m_metadata.Set(feature::Metadata::FMD_OPEN_HOURS, openingHours); +} + +//feature::Metadata const & EditableMapObject::GetMetadata() const { return m_metadata; } +} // namespace osm |