From f1b72d5f734e71f6b6c2feba1d0d0bbc3f6683f6 Mon Sep 17 00:00:00 2001 From: VladiMihaylenko Date: Fri, 8 Apr 2016 16:36:01 +0300 Subject: [PATCH] [omim] Added localized street name. --- indexer/editable_map_object.cpp | 8 ++++---- indexer/editable_map_object.hpp | 20 ++++++++++++++------ indexer/osm_editor.cpp | 6 +++--- map/framework.cpp | 20 ++++++++++++-------- 4 files changed, 33 insertions(+), 21 deletions(-) diff --git a/indexer/editable_map_object.cpp b/indexer/editable_map_object.cpp index 132fe6f764..7525191bd3 100644 --- a/indexer/editable_map_object.cpp +++ b/indexer/editable_map_object.cpp @@ -36,7 +36,7 @@ vector EditableMapObject::GetLocalizedNames() const return result; } -vector const & EditableMapObject::GetNearbyStreets() const { return m_nearbyStreets; } +vector const & EditableMapObject::GetNearbyStreets() const { return m_nearbyStreets; } string const & EditableMapObject::GetHouseNumber() const { return m_houseNumber; } string EditableMapObject::GetPostcode() const @@ -85,9 +85,9 @@ void EditableMapObject::SetType(uint32_t featureType) } void EditableMapObject::SetID(FeatureID const & fid) { m_featureID = fid; } -void EditableMapObject::SetStreet(string const & street) { m_street = street; } +void EditableMapObject::SetStreet(LocalizedStreet const & st) { m_street = st; } -void EditableMapObject::SetNearbyStreets(vector && streets) +void EditableMapObject::SetNearbyStreets(vector && streets) { m_nearbyStreets = move(streets); } @@ -193,7 +193,7 @@ void EditableMapObject::SetBuildingLevels(string const & buildingLevels) m_metadata.Set(feature::Metadata::FMD_BUILDING_LEVELS, buildingLevels); } -string const & EditableMapObject::GetStreet() const { return m_street; } +LocalizedStreet const & EditableMapObject::GetStreet() const { return m_street; } void EditableMapObject::SetCuisines(vector const & cuisine) { diff --git a/indexer/editable_map_object.hpp b/indexer/editable_map_object.hpp index 5f63cdd994..8b0e826ca1 100644 --- a/indexer/editable_map_object.hpp +++ b/indexer/editable_map_object.hpp @@ -43,6 +43,14 @@ struct LocalizedName string const m_name; }; +struct LocalizedStreet +{ + string m_defaultName; + string m_localizedName; + + bool operator==(LocalizedStreet const & st) const { return m_defaultName == st.m_defaultName; } +}; + class EditableMapObject : public MapObject { public: @@ -55,8 +63,8 @@ public: StringUtf8Multilang const & GetName() const; vector GetLocalizedNames() const; - string const & GetStreet() const; - vector const & GetNearbyStreets() const; + LocalizedStreet const & GetStreet() const; + vector const & GetNearbyStreets() const; string const & GetHouseNumber() const; string GetPostcode() const; string GetWikipedia() const; @@ -69,8 +77,8 @@ public: void SetType(uint32_t featureType); void SetID(FeatureID const & fid); // void SetTypes(feature::TypesHolder const & types); - void SetStreet(string const & street); - void SetNearbyStreets(vector && streets); + void SetStreet(LocalizedStreet const & st); + void SetNearbyStreets(vector && streets); /// @returns false if house number fails validation. static bool ValidateHouseNumber(string const & houseNumber); void SetHouseNumber(string const & houseNumber); @@ -95,8 +103,8 @@ public: private: string m_houseNumber; - string m_street; - vector m_nearbyStreets; + LocalizedStreet m_street; + vector m_nearbyStreets; EditableProperties m_editableProperties; }; } // namespace osm diff --git a/indexer/osm_editor.cpp b/indexer/osm_editor.cpp index a5554c9ce5..b90dccd4c2 100644 --- a/indexer/osm_editor.cpp +++ b/indexer/osm_editor.cpp @@ -406,14 +406,14 @@ Editor::SaveResult Editor::SaveEditedFeature(EditableMapObject const & emo) fti.m_feature.ReplaceBy(emo); bool const sameAsInMWM = featureStatus != FeatureStatus::Created && AreFeaturesEqualButStreet(fti.m_feature, *m_getOriginalFeatureFn(fid)) && - emo.GetStreet() == m_getOriginalFeatureStreetFn(fti.m_feature); + emo.GetStreet().m_defaultName == m_getOriginalFeatureStreetFn(fti.m_feature); if (featureStatus != FeatureStatus::Untouched) { // A feature was modified and equals to the one in editor. auto const & editedFeatureInfo = m_features[fid.m_mwmId][fid.m_index]; if (AreFeaturesEqualButStreet(fti.m_feature, editedFeatureInfo.m_feature) && - emo.GetStreet() == editedFeatureInfo.m_street) + emo.GetStreet().m_defaultName == editedFeatureInfo.m_street) { return NothingWasChanged; } @@ -448,7 +448,7 @@ Editor::SaveResult Editor::SaveEditedFeature(EditableMapObject const & emo) // TODO: What if local client time is absolutely wrong? fti.m_modificationTimestamp = time(nullptr); - fti.m_street = emo.GetStreet(); + fti.m_street = emo.GetStreet().m_defaultName; // Reset upload status so already uploaded features can be uploaded again after modification. fti.m_uploadStatus = {}; diff --git a/map/framework.cpp b/map/framework.cpp index 1c618cd827..9509dfdf03 100644 --- a/map/framework.cpp +++ b/map/framework.cpp @@ -2448,21 +2448,23 @@ bool Framework::ParseEditorDebugCommand(search::SearchParams const & params) namespace { -vector FilterNearbyStreets(vector const & streets, - string const & exactFeatureStreet = "") +vector FilterNearbyStreets(vector const & streets, + string const & exactFeatureStreet = "") { - vector results; + vector results; // Exact feature street always goes first in Editor UI street list. + + // TODO: Push into result LocalizedStreet object with default and localized street name. if (!exactFeatureStreet.empty()) - results.push_back(exactFeatureStreet); + results.push_back({exactFeatureStreet, ""}); // Reasonable number of different nearby street names to display in UI. constexpr size_t kMaxNumberOfNearbyStreetsToDisplay = 8; for (auto const & street : streets) { - auto const e = results.end(); - if (e == find(results.begin(), e, street.m_name)) + osm::LocalizedStreet const st{street.m_name, ""}; + if (find(results.begin(), results.end(), st) == results.end()) { - results.push_back(street.m_name); + results.push_back(st); if (results.size() >= kMaxNumberOfNearbyStreetsToDisplay) break; } @@ -2518,10 +2520,12 @@ bool Framework::GetEditableMapObject(FeatureID const & fid, osm::EditableMapObje street = streets.first[streets.second].m_name; emo.SetNearbyStreets(FilterNearbyStreets(streets.first, street)); } - emo.SetStreet(street); + //TODO: We have to set default and localized name if last one exists. + emo.SetStreet({street, ""}); return true; } + osm::Editor::SaveResult Framework::SaveEditedMapObject(osm::EditableMapObject const & emo) { if (!m_lastTapEvent)