feat(ui): implement UI/UX audit — i18n, HiDPI, theme, destructive-action & overflow fixes
Implements all 26 confirmed UI/UX audit findings plus the 4 dashboard/timeline tile labels. Verified across full-node + Lite + Windows builds (ctest green) and an adversarial diff review (one market-tab delete regression caught + fixed). i18n coverage: - Balance hero/quick-actions/toasts + dashboard & timeline tiles (Total Balance, Shielded, Transparent, Quick Send, Quick Receive, Click to open, Market) - Send: Review Send / Cancel / Paste / view-only tooltip / memo byte counter - Settings: Lite lifecycle errors, plaintext-RPC security warning, 8 toasts - Mining pool-payout tooltip - Resolve daemon_update_title double-assignment collision (new daemon_update_prompt_title) - 23 new keys translated into all 8 locales; CJK subset font rebuilt HiDPI: DPI-scale the Send amount bar, mining thread-tile clamp bounds, receive loading skeleton, and sidebar notification-badge insets. Light theme: theme-aware material::SurfaceOverlay() for balance bar tracks and row-hover highlights; contacts active-pill foreground uses OnPrimary(). Destructive actions: arm/confirm for portfolio-group delete, saved pool/worker remove, and avatar-image delete. Interaction/overflow: route balance star/eye buttons and the console fold-toggle through popup-safe guards; clip peer addr/subver; truncate the balance custom label; measure Settings tool-button widths; mining stepper disabled-state feedback; +/- stepper buttons restyled to match the thread tiles. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -823,7 +823,7 @@ void I18n::loadBuiltinEnglish()
|
||||
strings_["confirm_reinstall_daemon_title"] = "Install Bundled Daemon";
|
||||
strings_["confirm_reinstall_daemon_msg"] = "This stops the daemon, overwrites the installed dragonxd (and dragonx-cli/dragonx-tx) with the versions bundled in this wallet build, then restarts the node. Use this to recover or update the node binary.";
|
||||
strings_["confirm_reinstall_daemon_safe"] = "Your wallet, keys and blockchain data are not touched — only the daemon program files are replaced.";
|
||||
strings_["daemon_update_title"] = "Update the node daemon?";
|
||||
strings_["daemon_update_prompt_title"] = "Update the node daemon?";
|
||||
strings_["daemon_update_body"] = "This wallet build bundles a newer DragonX node than the one currently installed. Updating replaces the installed dragonxd (and dragonx-cli/dragonx-tx), then stops and restarts the node so the new version takes effect. Recommended — a newer node can add features (e.g. seed-phrase support) the old one lacks.";
|
||||
strings_["daemon_update_safe"] = "Your wallet, keys and blockchain data are not touched — only the daemon program files are replaced. If you deliberately run a custom node, choose Keep current.";
|
||||
strings_["daemon_update_now"] = "Update now";
|
||||
@@ -855,6 +855,10 @@ void I18n::loadBuiltinEnglish()
|
||||
strings_["lite_passphrase_label"] = "Passphrase";
|
||||
strings_["lite_validate"] = "Validate";
|
||||
strings_["lite_working"] = "Working…";
|
||||
strings_["lite_enter_wallet_path"] = "Enter a wallet path";
|
||||
strings_["lite_enter_all_seed_words"] = "Enter all 24 seed words to restore (got %d)";
|
||||
strings_["lite_could_not_start"] = "Could not start the operation";
|
||||
strings_["lite_backend_unavailable"] = "Lite wallet backend unavailable";
|
||||
strings_["lite_wallet_ready"] = "Wallet ready";
|
||||
strings_["lite_backup_keys"] = "Backup & keys";
|
||||
strings_["lite_show_seed"] = "Show seed";
|
||||
@@ -1101,6 +1105,14 @@ void I18n::loadBuiltinEnglish()
|
||||
strings_["balance_history_collecting"] = "Balance history — collecting data...";
|
||||
strings_["balance_shielded_fmt"] = "Shielded: %.8f";
|
||||
strings_["balance_transparent_fmt"] = "Transparent: %.8f";
|
||||
strings_["total_balance_label"] = "Total Balance";
|
||||
strings_["balance_syncing_pct"] = "Syncing %.1f%%";
|
||||
strings_["balance_mining_rate"] = "Mining %s";
|
||||
strings_["balance_layout_switched"] = "Layout: %s";
|
||||
strings_["byte_count_fmt"] = "%zu / %zu bytes";
|
||||
strings_["quick_send"] = "Quick Send";
|
||||
strings_["quick_receive"] = "Quick Receive";
|
||||
strings_["tile_click_to_open"] = "Click to open";
|
||||
strings_["your_addresses"] = "Your Addresses";
|
||||
strings_["z_addresses"] = "Z-Addresses";
|
||||
strings_["t_addresses"] = "T-Addresses";
|
||||
@@ -1428,9 +1440,18 @@ void I18n::loadBuiltinEnglish()
|
||||
strings_["loading_stall_body"] = "The daemon has been initializing for %.0fs. This can be normal after an update or on first launch (loading the block index or rescanning) — it will connect automatically once ready.";
|
||||
strings_["loading_stall_hint"] = "Still stuck? Open Settings and use Restart Daemon, or check the Console for details.";
|
||||
strings_["sb_plaintext_remote_blocked"] = "Refusing to send RPC credentials over plaintext to a remote host. Add rpcallowplaintext=1 to DRAGONX.conf to allow it, or enable TLS with rpctls=1.";
|
||||
strings_["rpc_plaintext_remote_warning"] = "Remote RPC is using plaintext HTTP. Add rpctls=1 to DRAGONX.conf if your daemon supports TLS.";
|
||||
strings_["settings_open_log_folder"] = "Open log folder";
|
||||
strings_["settings_copy_diagnostics"] = "Copy diagnostics";
|
||||
strings_["settings_diagnostics_copied"] = "Diagnostics copied to clipboard";
|
||||
strings_["settings_rpc_ok"] = "RPC connection OK";
|
||||
strings_["settings_rpc_error_prefix"] = "RPC error: ";
|
||||
strings_["settings_not_connected"] = "Not connected to daemon";
|
||||
strings_["settings_theme_refreshed"] = "Theme list refreshed";
|
||||
strings_["settings_saved"] = "Settings saved";
|
||||
strings_["settings_reloaded"] = "Settings reloaded from disk";
|
||||
strings_["settings_ztx_cleared"] = "Z-transaction history cleared";
|
||||
strings_["settings_ztx_not_found"] = "No history file found";
|
||||
strings_["tt_open_log_folder"] = "Open the folder containing the debug and crash logs";
|
||||
strings_["tt_copy_diagnostics"] = "Copy a support snapshot (version, daemon/wallet/log state — no secrets) to the clipboard";
|
||||
strings_["sb_dragonxd_running"] = "dragonxd running";
|
||||
@@ -1886,6 +1907,7 @@ void I18n::loadBuiltinEnglish()
|
||||
strings_["mining_payout_invalid"] = "Not a valid DragonX address — fix it before starting, or mining rewards are lost.";
|
||||
strings_["mining_est_daily_pool_sub"] = "rough solo-equivalent, before pool fee";
|
||||
strings_["mining_generate_z_address_hint"] = "Generate a Z address in the Receive tab to use as your payout address";
|
||||
strings_["mining_pool_needs_payout_tooltip"] = "Enter a payout address first (generate a Z address)";
|
||||
strings_["mining_pool"] = "Pool";
|
||||
strings_["mining_payout_foreign"] = "⚠ This payout address isn't in your current wallet — mined rewards would go to a different wallet. Update it if you switched wallets.";
|
||||
strings_["mining_pool_hashrate"] = "Pool Hashrate";
|
||||
@@ -2155,6 +2177,7 @@ void I18n::loadBuiltinEnglish()
|
||||
strings_["send_tooltip_not_connected"] = "Not connected to daemon";
|
||||
strings_["send_tooltip_select_source"] = "Select a source address first";
|
||||
strings_["send_tooltip_syncing"] = "Wait for blockchain to sync";
|
||||
strings_["send_tooltip_view_only"] = "View-only address — no spending key, cannot send";
|
||||
strings_["send_total"] = "Total";
|
||||
strings_["send_tx_failed"] = "Transaction failed";
|
||||
strings_["send_tx_sent"] = "Transaction sent!";
|
||||
|
||||
Reference in New Issue
Block a user