diff --git a/tools/apps/hgjson/CDlgLang.cpp b/tools/apps/hgjson/CDlgLang.cpp index 88986f5..abdf578 100644 --- a/tools/apps/hgjson/CDlgLang.cpp +++ b/tools/apps/hgjson/CDlgLang.cpp @@ -498,9 +498,13 @@ void CDlgLang::add_2_list(void* lang_list, int id, bool unic) for (const auto& v : *data) { std::wstring text(L""); - int ind = list_.InsertItem(list_.GetItemCount(), std::to_wstring(list_.GetItemCount() + 1).c_str()); + int ind = find_list_item_by_ID(v.id); - list_.SetItemText(ind, 1, std::to_wstring(v.id).c_str()); + if (ind == -1) + { + ind = list_.InsertItem(list_.GetItemCount(), std::to_wstring(list_.GetItemCount() + 1).c_str()); + list_.SetItemText(ind, 1, std::to_wstring(v.id).c_str()); + } list_.SetItemText(ind, 2, v.unic.c_str()); } } @@ -511,9 +515,13 @@ void CDlgLang::add_2_list(void* lang_list, int id, bool unic) for (const auto& v : *data) { std::wstring text(L""); - int ind = list_.InsertItem(list_.GetItemCount(), std::to_wstring(list_.GetItemCount() + 1).c_str()); + int ind = find_list_item_by_ID(v.id); - list_.SetItemText(ind, 1, std::to_wstring(v.id).c_str()); + if (ind == -1) + { + ind = list_.InsertItem(list_.GetItemCount(), std::to_wstring(list_.GetItemCount() + 1).c_str()); + list_.SetItemText(ind, 1, std::to_wstring(v.id).c_str()); + } coding_util::utf8_2_unicode(v.utf8.c_str(), sdk_util::got_wstr, &text); list_.SetItemText(ind, 2, text.c_str()); } @@ -768,7 +776,7 @@ void CDlgLang::OnCbnSelchangeLanguage() GetDlgItem(IDC_BUTTON_ADD_FILE)->EnableWindow(cur_cp_ == 936); return; } - list_.DeleteAllItems(); + // list_.DeleteAllItems(); cur_cp_ = cp; add_2_list(&lans, cur_cp_, true); select_code_page(cur_cp_); @@ -935,11 +943,24 @@ void CDlgLang::OnBnClickedButtonAdd() HZMAP h; h.hz = dlg.value_.GetBuffer(); - h.id = sdk_util::make_string_id(h.hz.c_str(), &CDlgLang::find_repeat_in_list, &list_); dlg.value_.ReleaseBuffer(); - insert_item_2_list(h.hz.c_str(), h.id); - hz_.push_back(h); + h.id = find_hz_ID(h.hz.c_str()); + if (h.id == -1) + { + h.id = sdk_util::make_string_id(h.hz.c_str(), &CDlgLang::find_repeat_in_list, &list_); + + insert_item_2_list(h.hz.c_str(), h.id); + hz_.push_back(h); + } + else + { + MessageBox(TEXT("Existing already.")); + h.id = find_list_item_by_ID(h.id); + list_.EnsureVisible(h.id, FALSE); + list_.SetItemState(h.id, LVNI_FOCUSED | LVIS_SELECTED, LVNI_FOCUSED | LVIS_SELECTED); + GotoDlgCtrl(&list_); + } } } diff --git a/tools/solution/Release/hgjson.exe b/tools/solution/Release/hgjson.exe index 9ff9f7a..9d986dd 100644 Binary files a/tools/solution/Release/hgjson.exe and b/tools/solution/Release/hgjson.exe differ