diff --git a/indexer/osm_editor.cpp b/indexer/osm_editor.cpp index d018104acd..a4843e9105 100644 --- a/indexer/osm_editor.cpp +++ b/indexer/osm_editor.cpp @@ -1,5 +1,6 @@ #include "indexer/classificator.hpp" #include "indexer/feature_decl.hpp" +#include "indexer/feature_impl.hpp" #include "indexer/feature_meta.hpp" #include "indexer/ftypes_matcher.hpp" #include "indexer/index.hpp" @@ -409,7 +410,8 @@ void Editor::DeleteFeature(FeatureType const & feature) //} //} // namespace -void Editor::EditFeature(FeatureType const & editedFeature, string const & editedStreet) +void Editor::EditFeature(FeatureType const & editedFeature, string const & editedStreet, + string const & editedHouseNumber) { // TODO(AlexZ): Check if feature has not changed and reset status. FeatureID const fid = editedFeature.GetID(); @@ -419,8 +421,12 @@ void Editor::EditFeature(FeatureType const & editedFeature, string const & edite // TODO: What if local client time is absolutely wrong? fti.m_modificationTimestamp = time(nullptr); - if (!editedStreet.empty()) - fti.m_street = editedStreet; + fti.m_street = editedStreet; + if (editedHouseNumber.empty()) + fti.m_feature.SetHouseNumber(string()); + else if (feature::IsHouseNumber(editedHouseNumber)) + fti.m_feature.SetHouseNumber(editedHouseNumber); + // else TODO(AlexZ): Store edited house number as house name. // TODO(AlexZ): Synchronize Save call/make it on a separate thread. Save(GetEditorFilePath()); diff --git a/indexer/osm_editor.hpp b/indexer/osm_editor.hpp index cfe17ce6c0..35b4deefde 100644 --- a/indexer/osm_editor.hpp +++ b/indexer/osm_editor.hpp @@ -69,7 +69,9 @@ public: /// Original feature with same FeatureID as newFeature is replaced by newFeature. /// Please pass editedStreet only if it was changed by user. - void EditFeature(FeatureType const & editedFeature, string const & editedStreet = ""); + void EditFeature(FeatureType const & editedFeature, + string const & editedStreet = "", + string const & editedHouseNumber = ""); vector EditableMetadataForType(FeatureType const & feature) const; bool IsNameEditable(FeatureType const & feature) const; diff --git a/iphone/Maps/Classes/MWMPlacePageEntity.mm b/iphone/Maps/Classes/MWMPlacePageEntity.mm index 7c50dba9bb..4b7b5ef579 100644 --- a/iphone/Maps/Classes/MWMPlacePageEntity.mm +++ b/iphone/Maps/Classes/MWMPlacePageEntity.mm @@ -339,7 +339,7 @@ void initFieldsMap() return; auto & metadata = feature->GetMetadata(); - string streetName; + string streetName, houseNumber; for (auto const & cell : cells) { switch (cell.first) @@ -378,7 +378,7 @@ void initFieldsMap() } case MWMPlacePageCellTypeBuilding: { - feature->SetHouseNumber(cell.second); + houseNumber = cell.second; break; } default: @@ -386,7 +386,7 @@ void initFieldsMap() break; } } - osm::Editor::Instance().EditFeature(*feature); + osm::Editor::Instance().EditFeature(*feature, streetName, houseNumber); } #pragma mark - Getters diff --git a/qt/draw_widget.cpp b/qt/draw_widget.cpp index 5c9a221702..f17c913519 100644 --- a/qt/draw_widget.cpp +++ b/qt/draw_widget.cpp @@ -475,10 +475,9 @@ void DrawWidget::ShowPOIEditor(FeatureType & feature) if (result == QDialog::Accepted) { feature.SetNames(dlg.GetEditedNames()); - feature.SetHouseNumber(dlg.GetEditedHouseNumber()); feature.SetMetadata(dlg.GetEditedMetadata()); // TODO(AlexZ): Check that street was actually changed/edited. - editor.EditFeature(feature, dlg.GetEditedStreet()); + editor.EditFeature(feature, dlg.GetEditedStreet(), dlg.GetEditedHouseNumber()); } else if (result == QDialogButtonBox::DestructiveRole) {