[editor] Correctly store edited house number in passed feature.

This commit is contained in:
Alex Zolotarev 2016-01-23 19:06:55 +03:00 committed by Sergey Yershov
parent 1f3107e0ca
commit 6c00a57752
2 changed files with 16 additions and 19 deletions

View file

@ -432,28 +432,17 @@ void Editor::DeleteFeature(FeatureType const & feature)
//}
//} // namespace
void Editor::EditFeature(FeatureType const & editedFeature, string const & editedStreet,
string const & editedHouseNumber)
void Editor::EditFeature(FeatureType & editedFeature, string const & editedStreet, string const & editedHouseNumber)
{
FeatureID const fid = editedFeature.GetID();
auto const originalFeaturePtr = m_getOriginalFeatureFn(fid);
FeatureTypeInfo & fti = m_features[fid.m_mwmId][fid.m_index];
fti.m_status = FeatureStatus::Modified;
fti.m_feature = editedFeature;
// TODO: What if local client time is absolutely wrong?
fti.m_modificationTimestamp = time(nullptr);
fti.m_street = editedStreet;
// Check house number for validity.
if (editedHouseNumber.empty() || feature::IsHouseNumber(editedHouseNumber))
fti.m_feature.SetHouseNumber(editedHouseNumber);
editedFeature.SetHouseNumber(editedHouseNumber);
// TODO(AlexZ): Store edited house number as house name if feature::IsHouseNumber() returned false.
if (AreFeaturesEqualButStreet(fti.m_feature, *originalFeaturePtr) &&
FeatureID const fid = editedFeature.GetID();
if (AreFeaturesEqualButStreet(editedFeature, *m_getOriginalFeatureFn(fid)) &&
m_getOriginalFeatureStreetFn(editedFeature) == editedStreet)
{
// We always have a feature with fid.m_mwmId, fid.m_index at the point.
// Either it was set previously or just now on quering m_features. See code above.
RemoveFeatureFromStorage(fid.m_mwmId, fid.m_index);
// TODO(AlexZ): Synchronize Save call/make it on a separate thread.
Save(GetEditorFilePath());
@ -461,6 +450,14 @@ void Editor::EditFeature(FeatureType const & editedFeature, string const & edite
return;
}
FeatureTypeInfo fti;
fti.m_status = FeatureStatus::Modified;
fti.m_feature = editedFeature;
// TODO: What if local client time is absolutely wrong?
fti.m_modificationTimestamp = time(nullptr);
fti.m_street = editedStreet;
m_features[fid.m_mwmId][fid.m_index] = move(fti);
// TODO(AlexZ): Synchronize Save call/make it on a separate thread.
Save(GetEditorFilePath());
Invalidate();

View file

@ -80,9 +80,9 @@ public:
/// @param outFeatureStreet is valid only if true was returned.
bool GetEditedFeatureStreet(FeatureType const & feature, string & outFeatureStreet) const;
/// 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,
/// Editor checks internally if any feature params were actually edited.
/// House number is correctly updated for editedFeature (if it's valid).
void EditFeature(FeatureType & editedFeature,
string const & editedStreet = "",
string const & editedHouseNumber = "");