From 99f189642f6c5ae0139cc36ba5ba5106680d9de5 Mon Sep 17 00:00:00 2001 From: Arsentiy Milchakov Date: Wed, 20 Jul 2016 22:51:27 +0300 Subject: [PATCH] review fixes --- android/res/layout/localized_name.xml | 2 +- .../maps/editor/EditorFragment.java | 21 +-- .../maps/editor/EditorHostFragment.java | 5 +- .../maps/editor/MultilanguageAdapter.java | 12 +- .../maps/editor/data/NamesDataSource.java | 37 +++--- .../multilang_utf8_string_test.cpp | 15 +++ coding/multilang_utf8_string.cpp | 11 ++ coding/multilang_utf8_string.hpp | 2 + indexer/editable_map_object.cpp | 86 ++++++------ indexer/editable_map_object.hpp | 19 +-- .../editable_map_object_test.cpp | 123 +++++++++--------- indexer/osm_editor.cpp | 9 +- indexer/osm_editor.hpp | 4 +- map/framework.cpp | 4 +- map/framework.hpp | 2 +- qt/editor_dialog.cpp | 2 +- 16 files changed, 184 insertions(+), 170 deletions(-) diff --git a/android/res/layout/localized_name.xml b/android/res/layout/localized_name.xml index 26471aa0ef..124d9c151b 100644 --- a/android/res/layout/localized_name.xml +++ b/android/res/layout/localized_name.xml @@ -45,4 +45,4 @@ android:text="@string/add_language" android:textAppearance="@style/MwmTextAppearance.Button" /> - \ No newline at end of file + diff --git a/android/src/com/mapswithme/maps/editor/EditorFragment.java b/android/src/com/mapswithme/maps/editor/EditorFragment.java index 160d009c6c..3c8ea0e36b 100644 --- a/android/src/com/mapswithme/maps/editor/EditorFragment.java +++ b/android/src/com/mapswithme/maps/editor/EditorFragment.java @@ -81,8 +81,8 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe private MultilanguageAdapter mNamesAdapter; private TextView mNamesCaption; - private TextView mAddLanguage; - private TextView mMoreLanguages; + private TextView mAddLanguage; + private TextView mMoreLanguages; private TextView mStreet; private EditText mHouseNumber; @@ -329,10 +329,13 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe { mNamesCaption = (TextView) view.findViewById(R.id.show_additional_names); mNamesCaption.setOnClickListener(this); + mAddLanguage = (TextView) view.findViewById(R.id.add_langs); mAddLanguage.setOnClickListener(this); + mMoreLanguages = (TextView) view.findViewById(R.id.more_names); mMoreLanguages.setOnClickListener(this); + mNamesView = (RecyclerView) view.findViewById(R.id.recycler); mNamesView.setNestedScrollingEnabled(false); mNamesView.setLayoutManager(new LinearLayoutManager(getActivity())); @@ -505,23 +508,23 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe private void refreshNamesCaption() { if (mNamesAdapter.getNamesCount() <= mNamesAdapter.getMandatoryNamesCount()) - setNamesArrowDrawable(0); + setNamesArrow(0 /* arrowResourceId */); // bind arrow with empty resource (do not draw arrow) else if (mNamesAdapter.areAdditionalLanguagesShown()) - setNamesArrowDrawable(R.drawable.ic_expand_less); + setNamesArrow(R.drawable.ic_expand_less); else - setNamesArrowDrawable(R.drawable.ic_expand_more); + setNamesArrow(R.drawable.ic_expand_more); boolean showAddLanguage = mNamesAdapter.getNamesCount() <= mNamesAdapter.getMandatoryNamesCount() || mNamesAdapter.areAdditionalLanguagesShown(); UiUtils.showIf(showAddLanguage, mAddLanguage); UiUtils.showIf(!showAddLanguage, mMoreLanguages); - } - private void setNamesArrowDrawable(@DrawableRes int right) + // Bind arrow in the top right corner of names caption with needed resource. + private void setNamesArrow(@DrawableRes int arrowResourceId) { - if(0 == right) + if (arrowResourceId == 0) { mNamesCaption.setCompoundDrawablesWithIntrinsicBounds(null, null, null, null); return; @@ -530,7 +533,7 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe mNamesCaption.setCompoundDrawablesWithIntrinsicBounds( null, null, - Graphics.tint(getActivity(), right, R.attr.iconTint), + Graphics.tint(getActivity(), arrowResourceId, R.attr.iconTint), null); } diff --git a/android/src/com/mapswithme/maps/editor/EditorHostFragment.java b/android/src/com/mapswithme/maps/editor/EditorHostFragment.java index d05dbc1a39..fec816accc 100644 --- a/android/src/com/mapswithme/maps/editor/EditorHostFragment.java +++ b/android/src/com/mapswithme/maps/editor/EditorHostFragment.java @@ -73,9 +73,7 @@ public class EditorHostFragment extends BaseMwmToolbarFragment sNames.clear(); for (LocalizedName name : names) { - if (name.code == LocalizedName.DEFAULT_LANG_CODE) - continue; - sNames.add(name); + addName(name); } } @@ -160,6 +158,7 @@ public class EditorHostFragment extends BaseMwmToolbarFragment case OPENING_HOURS: case STREET: case CUISINE: + case LANGUAGE: editMapObject(); break; default: diff --git a/android/src/com/mapswithme/maps/editor/MultilanguageAdapter.java b/android/src/com/mapswithme/maps/editor/MultilanguageAdapter.java index 7118b66ef3..3b8e9ce611 100644 --- a/android/src/com/mapswithme/maps/editor/MultilanguageAdapter.java +++ b/android/src/com/mapswithme/maps/editor/MultilanguageAdapter.java @@ -64,18 +64,18 @@ public class MultilanguageAdapter extends RecyclerView.Adapter const & mwmLanguages, vector & result) +size_t PushMwmLanguages(StringUtf8Multilang const & names, vector const & mwmLanguages, + vector & result) { size_t count = 0; - auto langCode = StringUtf8Multilang::kUnsupportedLanguageCode; static size_t const kMaxCountMwmLanguages = 2; - - for (auto const & language : mwmLanguages) + + for (size_t i = 0; i < mwmLanguages.size() && count < kMaxCountMwmLanguages; ++i) { - langCode = StringUtf8Multilang::GetLangIndex(language); - if (ExtractName(names, langCode, result)) + if (ExtractName(names, mwmLanguages[i], result)) ++count; - - if (count >= kMaxCountMwmLanguages) - return count; } return count; } -} +} // namespace namespace osm { @@ -100,37 +96,42 @@ StringUtf8Multilang const & EditableMapObject::GetName() const { return m_name; NamesDataSource EditableMapObject::GetNamesDataSource() const { - return GetNamesDataSource(m_name, GetMwmLanguages(), languages::GetCurrentNorm()); + const auto mwmInfo = GetID().m_mwmId.GetInfo(); + + if (!mwmInfo) + return NamesDataSource(); + + vector mwmLanguages; + mwmInfo->GetRegionData().GetLanguages(mwmLanguages); + + auto const userLangCode = StringUtf8Multilang::GetLangIndex(languages::GetCurrentNorm()); + + return GetNamesDataSource(m_name, mwmLanguages, userLangCode); } // static NamesDataSource EditableMapObject::GetNamesDataSource(StringUtf8Multilang const & source, - vector const & nativeMwmLanguages, - string const & userLanguage) + vector const & mwmLanguages, + int8_t const userLangCode) { NamesDataSource result; auto & names = result.names; auto & mandatoryCount = result.mandatoryNamesCount; // Push Mwm languages. - mandatoryCount = PushMwmLanguages(source, nativeMwmLanguages, names); + mandatoryCount = PushMwmLanguages(source, mwmLanguages, names); // Push user's language. - auto const langCode = StringUtf8Multilang::GetLangIndex(userLanguage); - if (ExtractName(source, langCode, names)) - ++mandatoryCount; - - // Push international language. - if (ExtractName(source, StringUtf8Multilang::kInternationalCode, names)) + if (ExtractName(source, userLangCode, names)) ++mandatoryCount; // Push other languages. - source.ForEach([&names, mandatoryCount](int8_t code, string const & name) -> bool { + source.ForEach([&names, mandatoryCount](int8_t const code, string const & name) -> bool { // Exclude default name. if (StringUtf8Multilang::kDefaultCode == code) return true; auto const mandatoryNamesEnd = names.begin() + mandatoryCount; - // Exclude languages which already in container (languages with top priority). + // Exclude languages which are already in container (languages with top priority). auto const it = find_if( names.begin(), mandatoryNamesEnd, [code](LocalizedName const & localizedName) { return localizedName.m_code == code; }); @@ -171,44 +172,37 @@ void EditableMapObject::SetName(string name, int8_t langCode) return; ASSERT_NOT_EQUAL(StringUtf8Multilang::kDefaultCode, langCode, - ("You trying to set ", name, - " as default, but direct editing of default name is deprecated.")); + ("Direct editing of default name is deprecated.")); - if (!Editor::Instance().WasDefaultNameSaved(GetID()) && - CanUseAsDefaultName(langCode, m_name, GetMwmLanguages())) + if (!Editor::Instance().OriginalFeatureHasDefaultName(GetID())) { - m_name.AddString(StringUtf8Multilang::kDefaultCode, name); + const auto mwmInfo = GetID().m_mwmId.GetInfo(); + + if (mwmInfo) + { + vector mwmLanguages; + mwmInfo->GetRegionData().GetLanguages(mwmLanguages); + + if (CanUseAsDefaultName(langCode, mwmLanguages)) + m_name.AddString(StringUtf8Multilang::kDefaultCode, name); + } } m_name.AddString(langCode, name); } // static -bool EditableMapObject::CanUseAsDefaultName(int8_t const langCode, StringUtf8Multilang const & name, - vector const & nativeMwmLanguages) +bool EditableMapObject::CanUseAsDefaultName(int8_t const lang, vector const & mwmLanguages) { - auto index = StringUtf8Multilang::kUnsupportedLanguageCode; - string unused; - - // Languages priority: 1. Mwm languages 2. International language. - for (auto const & language : nativeMwmLanguages) + for (auto const & mwmLang : mwmLanguages) { - index = StringUtf8Multilang::GetLangIndex(language); + if (StringUtf8Multilang::kUnsupportedLanguageCode == mwmLang) + continue; - if (StringUtf8Multilang::kUnsupportedLanguageCode == index) - return false; - - if (langCode == index) + if (lang == mwmLang) return true; - - // A name with a higher priority was added already. - if (name.GetString(index, unused)) - return false; } - if (langCode == StringUtf8Multilang::kInternationalCode) - return true; - return false; } diff --git a/indexer/editable_map_object.hpp b/indexer/editable_map_object.hpp index e89aa543ad..d033bc3d04 100644 --- a/indexer/editable_map_object.hpp +++ b/indexer/editable_map_object.hpp @@ -49,8 +49,7 @@ struct LocalizedName // Class which contains vector of localized names with following priority: // 1. Names for Mwm languages // 2. User`s language name -// 3. International name -// 4. Other names +// 3. Other names // and mandatoryNamesCount - count of names which should be always shown. struct NamesDataSource { @@ -130,23 +129,13 @@ public: static bool ValidateWebsite(string const & site); static bool ValidateEmail(string const & email); - // TODO dummy, should be removed. - static vector const & GetMwmLanguages() - { - static vector const kNativelanguagesForMwm = {"de", "fr"}; - - return kNativelanguagesForMwm; - } - // TODO dummy, should be removed. - // Check whether langCode can be used as default name. - static bool CanUseAsDefaultName(int8_t const langCode, StringUtf8Multilang const & name, - vector const & nativeMwmLanguages); + static bool CanUseAsDefaultName(int8_t const langCode, vector const & nativeMwmLanguages); // See comment for NamesDataSource class. static NamesDataSource GetNamesDataSource(StringUtf8Multilang const & source, - vector const & nativeMwmLanguages, - string const & userLanguage); + vector const & nativeMwmLanguages, + int8_t const userLanguage); private: string m_houseNumber; diff --git a/indexer/indexer_tests/editable_map_object_test.cpp b/indexer/indexer_tests/editable_map_object_test.cpp index d281221726..cfad66817d 100644 --- a/indexer/indexer_tests/editable_map_object_test.cpp +++ b/indexer/indexer_tests/editable_map_object_test.cpp @@ -6,6 +6,11 @@ namespace { using osm::EditableMapObject; +int8_t const GetLangCode(char const * ch) +{ + return StringUtf8Multilang::GetLangIndex(ch); +} + UNIT_TEST(EditableMapObject_SetWebsite) { EditableMapObject emo; @@ -129,100 +134,94 @@ UNIT_TEST(EditableMapObject_ValidateEmail) UNIT_TEST(EditableMapObject_CanUseAsDefaultName) { EditableMapObject emo; - - TEST(EditableMapObject::CanUseAsDefaultName(StringUtf8Multilang::GetLangIndex("de"), emo.GetName(), {"de", "fr"}), - ("Check possibility to use Mwm language code")); - TEST(EditableMapObject::CanUseAsDefaultName(StringUtf8Multilang::GetLangIndex("fr"), emo.GetName(), {"de", "fr"}), - ("Check possibility to use Mwm language code")); - TEST(EditableMapObject::CanUseAsDefaultName(StringUtf8Multilang::GetLangIndex("int_name"), emo.GetName(), {"de", "fr"}), - ("Check possibility to use international language code")); + vector const nativeMwmLanguages {GetLangCode("de"), GetLangCode("fr")}; - TEST(!EditableMapObject::CanUseAsDefaultName(100, emo.GetName(), {"de", "fr"}), + TEST(EditableMapObject::CanUseAsDefaultName(GetLangCode("de"), nativeMwmLanguages), + ("Check possibility to use Mwm language code")); + TEST(EditableMapObject::CanUseAsDefaultName(GetLangCode("fr"), nativeMwmLanguages), + ("Check possibility to use Mwm language code")); + TEST(!EditableMapObject::CanUseAsDefaultName(GetLangCode("int_name"), nativeMwmLanguages), + ("Check possibility to use international language code")); + TEST(!EditableMapObject::CanUseAsDefaultName(100, nativeMwmLanguages), ("Incorrect language code is not supported")); - TEST(!EditableMapObject::CanUseAsDefaultName(StringUtf8Multilang::GetLangIndex("en"), emo.GetName(), {"abcd"}), + TEST(!EditableMapObject::CanUseAsDefaultName(GetLangCode("en"), {GetLangCode("abcd")}), ("Incorrect Mwm language name is not supported")); - TEST(!EditableMapObject::CanUseAsDefaultName(StringUtf8Multilang::GetLangIndex("en"), emo.GetName(), {"de", "fr"}), + TEST(!EditableMapObject::CanUseAsDefaultName(GetLangCode("en"), nativeMwmLanguages), ("Can not to use language which not Mwm language or international")); - TEST(!EditableMapObject::CanUseAsDefaultName(StringUtf8Multilang::GetLangIndex("ru"), emo.GetName(), {"de", "fr"}), + TEST(!EditableMapObject::CanUseAsDefaultName(GetLangCode("ru"), nativeMwmLanguages), ("Check possibility to use user`s language code")); // Trying to use language codes in reverse priority. StringUtf8Multilang names; - names.AddString(StringUtf8Multilang::GetLangIndex("int_name"), "international name"); + names.AddString(GetLangCode("fr"), "second mwm language"); emo.SetName(names); - TEST(EditableMapObject::CanUseAsDefaultName(StringUtf8Multilang::GetLangIndex("int_name"), emo.GetName(), {"de", "fr"}), - ("It is possible to fix typo for international language")); - - names.AddString(StringUtf8Multilang::GetLangIndex("fr"), "second mwm language"); - emo.SetName(names); - - TEST(EditableMapObject::CanUseAsDefaultName(StringUtf8Multilang::GetLangIndex("fr"), emo.GetName(), {"de", "fr"}), + TEST(EditableMapObject::CanUseAsDefaultName(GetLangCode("fr"), nativeMwmLanguages), ("It is possible to fix typo")); - TEST(!EditableMapObject::CanUseAsDefaultName(StringUtf8Multilang::GetLangIndex("int_name"), emo.GetName(), {"de", "fr"}), - ("Name on language with high priority was already entered")); - names.AddString(StringUtf8Multilang::GetLangIndex("de"), "first mwm language"); + names.AddString(GetLangCode("de"), "first mwm language"); emo.SetName(names); - TEST(EditableMapObject::CanUseAsDefaultName(StringUtf8Multilang::GetLangIndex("de"), emo.GetName(), {"de", "fr"}), + TEST(EditableMapObject::CanUseAsDefaultName(GetLangCode("de"), nativeMwmLanguages), + ("It is possible to fix typo")); + TEST(EditableMapObject::CanUseAsDefaultName(GetLangCode("fr"), nativeMwmLanguages), ("It is possible to fix typo")); - TEST(!EditableMapObject::CanUseAsDefaultName(StringUtf8Multilang::GetLangIndex("fr"), emo.GetName(), {"de", "fr"}), - ("Name on language with high priority was already entered")); - TEST(!EditableMapObject::CanUseAsDefaultName(StringUtf8Multilang::GetLangIndex("int_name"), emo.GetName(), {"de", "fr"}), - ("Name on language with high priority was already entered")); } UNIT_TEST(EditableMapObject_GetNamesDataSource) { EditableMapObject emo; StringUtf8Multilang names; - names.AddString(0, "Default name"); - names.AddString(1, "Eng name"); - names.AddString(7, "Int name"); - names.AddString(6, "De name"); - names.AddString(8, "Ru name"); - names.AddString(9, "Sv name"); - names.AddString(12, "By name"); - names.AddString(14, "Ko name"); - names.AddString(20, "It name"); + + names.AddString(GetLangCode("default"), "Default name"); + names.AddString(GetLangCode("en"), "Eng name"); + names.AddString(GetLangCode("int_name"), "Int name"); + names.AddString(GetLangCode("de"), "De name"); + names.AddString(GetLangCode("ru"), "Ru name"); + names.AddString(GetLangCode("sv"), "Sv name"); + names.AddString(GetLangCode("be"), "By name"); + names.AddString(GetLangCode("ko"), "Ko name"); + names.AddString(GetLangCode("it"), "It name"); emo.SetName(names); - auto const namesDataSource = - EditableMapObject::GetNamesDataSource(emo.GetName(), {"de", "fr"}, "ko"); + vector nativeMwmLanguages = {GetLangCode("de"), GetLangCode("fr")}; - TEST(namesDataSource.names.size() == 9, ("All names except the default should be pushed into " + auto const namesDataSource = + EditableMapObject::GetNamesDataSource(emo.GetName(), nativeMwmLanguages, GetLangCode("ko")); + + TEST_EQUAL(namesDataSource.names.size(), 9, ("All names except the default should be pushed into " "data source plus empty mandatory names")); - TEST(namesDataSource.mandatoryNamesCount == 4, - ("Mandatory names count should be equal == Mwm languages + user`s language + international " - "language")); - TEST(namesDataSource.names[0].m_code == 6 /*de*/, - ("Deutsch name should be first as first language in Mwm")); - TEST(namesDataSource.names[1].m_code == 3 /*fr*/, - ("French name should be second as second language in Mwm")); - TEST(namesDataSource.names[2].m_code == 14 /*ko*/, - ("Korean name should be third because user`s language should be followed by Mwm languages")); - TEST(namesDataSource.names[3].m_code == 7 /*int*/, - ("International name should be fourth because International language should be followed by " - "user`s language")); + TEST_EQUAL(namesDataSource.mandatoryNamesCount, 3, + ("Mandatory names count should be equal == Mwm languages + user`s language")); + TEST_EQUAL(namesDataSource.names[0].m_code, GetLangCode("de"), + ("Deutsch name should be first as first language in Mwm")); + TEST_EQUAL(namesDataSource.names[1].m_code, GetLangCode("fr"), + ("French name should be second as second language in Mwm")); + TEST_EQUAL(namesDataSource.names[2].m_code, GetLangCode("ko"), + ("Korean name should be third because user`s language should be followed by Mwm languages")); { + vector nativeMwmLanguages = {GetLangCode("de"), GetLangCode("fr")}; + auto const namesDataSource = - EditableMapObject::GetNamesDataSource(emo.GetName(), {"int_name"}, "int_name"); - TEST(namesDataSource.names.size() == 8, - ("All names except the default should be pushed into data source")); - TEST(namesDataSource.mandatoryNamesCount == 1, - ("Mandatory names count should be equal == Mwm languages + user`s language + " - "international language. Excluding repetiton")); + EditableMapObject::GetNamesDataSource(emo.GetName(), nativeMwmLanguages, GetLangCode("fr")); + TEST_EQUAL(namesDataSource.names.size(), 9, + ("All names except the default should be pushed into data source")); + TEST_EQUAL(namesDataSource.mandatoryNamesCount, 2, + ("Mandatory names count should be equal == Mwm languages + user`s language. " + "Excluding repetiton")); } { + vector nativeMwmLanguages = {GetLangCode("fr"), GetLangCode("fr")}; + auto const namesDataSource = - EditableMapObject::GetNamesDataSource(emo.GetName(), {"fr", "fr"}, "fr"); - TEST(namesDataSource.names.size() == 9, ("All names except the default should be pushed into " + EditableMapObject::GetNamesDataSource(emo.GetName(), nativeMwmLanguages, GetLangCode("fr")); + TEST_EQUAL(namesDataSource.names.size(), 9, + ("All names except the default should be pushed into " "data source plus empty mandatory names")); - TEST(namesDataSource.mandatoryNamesCount == 2, - ("Mandatory names count should be equal == Mwm languages + user`s language + " - "international language. Excluding repetiton")); + TEST_EQUAL(namesDataSource.mandatoryNamesCount, 1, + ("Mandatory names count should be equal == Mwm languages + user`s language. " + "Excluding repetiton")); } } } // namespace diff --git a/indexer/osm_editor.cpp b/indexer/osm_editor.cpp index 6c9ac30912..549cef66ea 100644 --- a/indexer/osm_editor.cpp +++ b/indexer/osm_editor.cpp @@ -426,14 +426,11 @@ bool Editor::IsCreatedFeature(FeatureID const & fid) return fid.m_index >= kStartIndexForCreatedFeatures; } -bool Editor::WasDefaultNameSaved(FeatureID const & fid) const +bool Editor::OriginalFeatureHasDefaultName(FeatureID const & fid) const { if (IsCreatedFeature(fid)) return false; - if (FeatureStatus::Created == GetFeatureStatus(fid)) - return false; - auto const originalFeaturePtr = m_getOriginalFeatureFn(fid); if (!originalFeaturePtr) { @@ -442,7 +439,9 @@ bool Editor::WasDefaultNameSaved(FeatureID const & fid) const return false; } - return originalFeaturePtr->HasName(); + auto const & names = originalFeaturePtr->GetNames(); + + return names.HasString(StringUtf8Multilang::kDefaultCode); } /// Several cases should be handled while saving changes: diff --git a/indexer/osm_editor.hpp b/indexer/osm_editor.hpp index d11ff810be..d107e05333 100644 --- a/indexer/osm_editor.hpp +++ b/indexer/osm_editor.hpp @@ -167,8 +167,8 @@ public: // Use GetFeatureStatus(fid) instead. This function is used when a feature is // not yet saved and we have to know if it was modified or created. static bool IsCreatedFeature(FeatureID const & fid); - // Returns true in case when original feature from mwm has default name - bool WasDefaultNameSaved(FeatureID const & fid) const; + // Returns true if the original feature has default name. + bool OriginalFeatureHasDefaultName(FeatureID const & fid) const; private: // TODO(AlexZ): Synchronize Save call/make it on a separate thread. diff --git a/map/framework.cpp b/map/framework.cpp index 3b37cce69d..5043931968 100644 --- a/map/framework.cpp +++ b/map/framework.cpp @@ -3007,7 +3007,7 @@ void Framework::CreateNote(ms::LatLon const & latLon, FeatureID const & fid, DeactivateMapSelection(true /* notifyUI */); } -bool Framework::WasDefaultNameSaved(FeatureID const & fid) const +bool Framework::OriginalFeatureHasDefaultName(FeatureID const & fid) const { - return osm::Editor::Instance().WasDefaultNameSaved(fid); + return osm::Editor::Instance().OriginalFeatureHasDefaultName(fid); } diff --git a/map/framework.hpp b/map/framework.hpp index eae9ec20a8..5f3940c480 100644 --- a/map/framework.hpp +++ b/map/framework.hpp @@ -716,7 +716,7 @@ private: //@} public: - bool WasDefaultNameSaved(FeatureID const & fid) const; + bool OriginalFeatureHasDefaultName(FeatureID const & fid) const; private: DECLARE_THREAD_CHECKER(m_threadChecker); diff --git a/qt/editor_dialog.cpp b/qt/editor_dialog.cpp index 61856dbc16..bc29764e54 100644 --- a/qt/editor_dialog.cpp +++ b/qt/editor_dialog.cpp @@ -62,7 +62,7 @@ EditorDialog::EditorDialog(QWidget * parent, osm::EditableMapObject & emo) auto const namesDataSource = emo.GetNamesDataSource(); - for (osm::LocalizedName const & ln : namesDataSource.names) + for (auto const & ln : namesDataSource.names) { if (ln.m_code == StringUtf8Multilang::kDefaultCode) {