feat(market): explain why the portfolio Save button is disabled
Hovering the disabled Save button now shows which requirement is missing
(name / at least one address / a manual price above 0), mirroring the
send-tab disabled-submit tooltip idiom (IsItemHovered(AllowWhenDisabled)).
The hint only appears for a validation gap — not the self-evident "nothing
changed" case.
Adds portfolio_save_need_{name,address,price} to the English source and all
eight translations; rebuilds the CJK subset font for the new JA/KO/ZH glyphs.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Binary file not shown.
@@ -829,6 +829,9 @@
|
||||
"portfolio_remove_from": "Aus Portfolio entfernen",
|
||||
"portfolio_revert": "Zurücksetzen",
|
||||
"portfolio_save": "Speichern",
|
||||
"portfolio_save_need_address": "Fügen Sie mindestens eine Adresse hinzu, um zu speichern.",
|
||||
"portfolio_save_need_name": "Geben Sie einen Namen ein, um diese Gruppe zu speichern.",
|
||||
"portfolio_save_need_price": "Geben Sie einen manuellen Preis über 0 ein, um zu speichern.",
|
||||
"portfolio_search": "Adressen durchsuchen…",
|
||||
"portfolio_search_icons": "Symbole suchen…",
|
||||
"portfolio_select_all": "Alle",
|
||||
|
||||
@@ -829,6 +829,9 @@
|
||||
"portfolio_remove_from": "Quitar del portafolio",
|
||||
"portfolio_revert": "Revertir",
|
||||
"portfolio_save": "Guardar",
|
||||
"portfolio_save_need_address": "Añade al menos una dirección para guardar.",
|
||||
"portfolio_save_need_name": "Introduce un nombre para guardar este grupo.",
|
||||
"portfolio_save_need_price": "Introduce un precio manual mayor que 0 para guardar.",
|
||||
"portfolio_search": "Buscar direcciones…",
|
||||
"portfolio_search_icons": "Buscar iconos…",
|
||||
"portfolio_select_all": "Todos",
|
||||
|
||||
@@ -829,6 +829,9 @@
|
||||
"portfolio_remove_from": "Retirer du portefeuille d'actifs",
|
||||
"portfolio_revert": "Annuler",
|
||||
"portfolio_save": "Enregistrer",
|
||||
"portfolio_save_need_address": "Ajoutez au moins une adresse pour enregistrer.",
|
||||
"portfolio_save_need_name": "Saisissez un nom pour enregistrer ce groupe.",
|
||||
"portfolio_save_need_price": "Saisissez un prix manuel supérieur à 0 pour enregistrer.",
|
||||
"portfolio_search": "Rechercher des adresses\\xE2\\x80\\xA6",
|
||||
"portfolio_search_icons": "Rechercher des icônes\\xE2\\x80\\xA6",
|
||||
"portfolio_select_all": "Tout",
|
||||
|
||||
@@ -829,6 +829,9 @@
|
||||
"portfolio_remove_from": "ポートフォリオから削除",
|
||||
"portfolio_revert": "元に戻す",
|
||||
"portfolio_save": "保存",
|
||||
"portfolio_save_need_address": "保存するにはアドレスを1つ以上追加してください。",
|
||||
"portfolio_save_need_name": "このグループを保存するには名前を入力してください。",
|
||||
"portfolio_save_need_price": "保存するには0より大きい手動価格を入力してください。",
|
||||
"portfolio_search": "アドレスを検索…",
|
||||
"portfolio_search_icons": "アイコンを検索…",
|
||||
"portfolio_select_all": "すべて",
|
||||
|
||||
@@ -829,6 +829,9 @@
|
||||
"portfolio_remove_from": "포트폴리오에서 제거",
|
||||
"portfolio_revert": "되돌리기",
|
||||
"portfolio_save": "저장",
|
||||
"portfolio_save_need_address": "저장하려면 주소를 하나 이상 추가하세요.",
|
||||
"portfolio_save_need_name": "이 그룹을 저장하려면 이름을 입력하세요.",
|
||||
"portfolio_save_need_price": "저장하려면 0보다 큰 수동 가격을 입력하세요.",
|
||||
"portfolio_search": "주소 검색…",
|
||||
"portfolio_search_icons": "아이콘 검색\\xE2\\x80\\xA6",
|
||||
"portfolio_select_all": "전체",
|
||||
|
||||
@@ -829,6 +829,9 @@
|
||||
"portfolio_remove_from": "Remover do portfólio",
|
||||
"portfolio_revert": "Reverter",
|
||||
"portfolio_save": "Salvar",
|
||||
"portfolio_save_need_address": "Adicione pelo menos um endereço para salvar.",
|
||||
"portfolio_save_need_name": "Insira um nome para salvar este grupo.",
|
||||
"portfolio_save_need_price": "Insira um preço manual acima de 0 para salvar.",
|
||||
"portfolio_search": "Pesquisar endereços…",
|
||||
"portfolio_search_icons": "Pesquisar ícones\\xE2\\x80\\xA6",
|
||||
"portfolio_select_all": "Todos",
|
||||
|
||||
@@ -829,6 +829,9 @@
|
||||
"portfolio_remove_from": "Удалить из портфеля",
|
||||
"portfolio_revert": "Отменить изменения",
|
||||
"portfolio_save": "Сохранить",
|
||||
"portfolio_save_need_address": "Добавьте хотя бы один адрес, чтобы сохранить.",
|
||||
"portfolio_save_need_name": "Введите имя, чтобы сохранить эту группу.",
|
||||
"portfolio_save_need_price": "Введите ручную цену больше 0, чтобы сохранить.",
|
||||
"portfolio_search": "Поиск адресов…",
|
||||
"portfolio_search_icons": "Поиск иконок…",
|
||||
"portfolio_select_all": "Все",
|
||||
|
||||
@@ -829,6 +829,9 @@
|
||||
"portfolio_remove_from": "从投资组合中移除",
|
||||
"portfolio_revert": "还原",
|
||||
"portfolio_save": "保存",
|
||||
"portfolio_save_need_address": "添加至少一个地址以保存。",
|
||||
"portfolio_save_need_name": "输入名称以保存此分组。",
|
||||
"portfolio_save_need_price": "输入大于 0 的手动价格以保存。",
|
||||
"portfolio_search": "搜索地址…",
|
||||
"portfolio_search_icons": "搜索图标…",
|
||||
"portfolio_select_all": "全部",
|
||||
|
||||
@@ -1042,6 +1042,13 @@ static void RenderPortfolioEditor(App* app)
|
||||
if (material::TactileButton(TR("portfolio_save"), ImVec2(bw, addH))) pfCommitIfNeeded(app);
|
||||
ImGui::EndDisabled();
|
||||
ImGui::EndDisabled();
|
||||
// Explain why Save is disabled — but only for a validation gap, not the "nothing changed"
|
||||
// (!selDirty) case, which is self-evident. Priority mirrors pfWorkingValid's checks.
|
||||
if (!pfWorkingValid() && ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenDisabled)) {
|
||||
if (pfEditLabel().empty()) material::Tooltip("%s", TR("portfolio_save_need_name"));
|
||||
else if (s_pfEdit.addrs.empty()) material::Tooltip("%s", TR("portfolio_save_need_address"));
|
||||
else material::Tooltip("%s", TR("portfolio_save_need_price"));
|
||||
}
|
||||
}
|
||||
}
|
||||
ImGui::EndChild(); // ##pfDetail
|
||||
|
||||
@@ -1405,6 +1405,9 @@ void I18n::loadBuiltinEnglish()
|
||||
strings_["portfolio_cancel"] = "Cancel";
|
||||
strings_["portfolio_revert"] = "Revert";
|
||||
strings_["portfolio_close"] = "Close";
|
||||
strings_["portfolio_save_need_name"] = "Enter a name to save this group.";
|
||||
strings_["portfolio_save_need_address"] = "Add at least one address to save.";
|
||||
strings_["portfolio_save_need_price"] = "Enter a manual price above 0 to save.";
|
||||
strings_["portfolio_untitled"] = "Untitled";
|
||||
strings_["portfolio_detail_empty"] = "Select a group on the left, or add one, to edit it.";
|
||||
strings_["portfolio_add_to"] = "Add to portfolio";
|
||||
|
||||
Reference in New Issue
Block a user