diff --git a/src/app.cpp b/src/app.cpp index 40cc0ba..b4e0f5a 100644 --- a/src/app.cpp +++ b/src/app.cpp @@ -418,6 +418,9 @@ void App::update() // A wallet is open only after a successful backend init against the lite server, so this // is a non-blocking proxy for "lite backend operational". state_.connected = lite_wallet_->walletOpen(); + // Suppress the status bar's full-node connection-detail line in lite ("" and "Connected" + // are both hidden); the connected/no-wallet indicator + sync status convey lite state. + connection_status_ = state_.connected ? "Connected" : ""; wallet::LiteWalletAppRefreshModel liteModel; if (lite_wallet_->takeRefreshedModel(liteModel)) { @@ -1551,7 +1554,8 @@ void App::renderStatusBar() ImGui::TextColored(ImVec4(0.8f, 0.2f, 0.2f, dotOpacity), ICON_MD_CIRCLE); ImGui::PopFont(); ImGui::SameLine(0, sbIconTextGap); - ImGui::Text("%s", TR("disconnected")); + // Lite has no daemon connection; "disconnected" here means no wallet is open. + ImGui::Text("%s", TR(isLiteBuild() ? "lite_no_wallet_short" : "disconnected")); } // Block height @@ -1622,7 +1626,8 @@ void App::renderStatusBar() ImGui::TextColored(ImVec4(1.0f, 0.8f, 0.0f, 1.0f), TR("sb_syncing_basic"), state_.sync.verification_progress * 100.0, blocksLeft); } - } else if (state_.connected) { + } else if (state_.connected && !isLiteBuild()) { + // Lite has no P2P peers (the lite server isn't a peer set); skip the peer count. ImGui::Text(TR("sb_peers"), state_.peers.size()); } diff --git a/src/ui/windows/receive_tab.cpp b/src/ui/windows/receive_tab.cpp index f0a3dd2..373075f 100644 --- a/src/ui/windows/receive_tab.cpp +++ b/src/ui/windows/receive_tab.cpp @@ -190,7 +190,7 @@ static void RenderAddressDropdown(App* app, float width) { // Build preview string if (!app->isConnected()) { - s_source_preview = TR("not_connected"); + s_source_preview = TR(app->isLiteBuild() ? "lite_no_wallet_short" : "not_connected"); } else if (s_selected_address_idx >= 0 && s_selected_address_idx < (int)state.addresses.size()) { const auto& addr = state.addresses[s_selected_address_idx]; @@ -509,7 +509,7 @@ void RenderReceiveTab(App* app) DrawGlassPanel(dl, emptyMin, emptyMax, glassSpec); dl->AddText(sub1, sub1->LegacySize, ImVec2(emptyMin.x + Layout::spacingXl(), emptyMin.y + Layout::spacingXl()), - OnSurfaceDisabled(), TR("waiting_for_daemon")); + OnSurfaceDisabled(), TR(app->isLiteBuild() ? "lite_no_wallet" : "waiting_for_daemon")); dl->AddText(capFont, capFont->LegacySize, ImVec2(emptyMin.x + Layout::spacingXl(), emptyMin.y + Layout::spacingXl() + sub1->LegacySize + S.drawElement("tabs.receive", "empty-state-subtitle-gap").size), OnSurfaceDisabled(), TR("addresses_appear_here")); diff --git a/src/ui/windows/send_tab.cpp b/src/ui/windows/send_tab.cpp index 6088053..f103137 100644 --- a/src/ui/windows/send_tab.cpp +++ b/src/ui/windows/send_tab.cpp @@ -230,7 +230,7 @@ static void RenderSourceDropdown(App* app, float width) { // Build preview string for selected address if (!app->isConnected()) { - s_source_preview = TR("not_connected"); + s_source_preview = TR(app->isLiteBuild() ? "lite_no_wallet_short" : "not_connected"); } else if (s_selected_from_idx >= 0 && s_selected_from_idx < (int)state.addresses.size()) { const auto& addr = state.addresses[s_selected_from_idx]; @@ -890,7 +890,7 @@ static void RenderActionButtons(App* app, float width, float vScale, if (!can_send && ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenDisabled)) { if (!app->isConnected()) - ImGui::SetTooltip("%s", TR("send_tooltip_not_connected")); + ImGui::SetTooltip("%s", TR(app->isLiteBuild() ? "lite_no_wallet_short" : "send_tooltip_not_connected")); else if (state.sync.syncing) ImGui::SetTooltip("%s", TR("send_tooltip_syncing")); else if (s_from_address[0] == '\0') diff --git a/src/ui/windows/transactions_tab.cpp b/src/ui/windows/transactions_tab.cpp index 3624edd..b63af62 100644 --- a/src/ui/windows/transactions_tab.cpp +++ b/src/ui/windows/transactions_tab.cpp @@ -578,7 +578,8 @@ void RenderTransactionsTab(App* app) { if (!app->isConnected()) { ImGui::Dummy(ImVec2(0, 20)); - Type().textColored(TypeStyle::Caption, OnSurfaceDisabled(), TR("not_connected")); + Type().textColored(TypeStyle::Caption, OnSurfaceDisabled(), + TR(app->isLiteBuild() ? "lite_no_wallet" : "not_connected")); } else if (state.transactions.empty()) { ImGui::Dummy(ImVec2(0, 20)); if (txLoading) { diff --git a/src/util/i18n.cpp b/src/util/i18n.cpp index 7d83e18..b9b3862 100644 --- a/src/util/i18n.cpp +++ b/src/util/i18n.cpp @@ -575,7 +575,11 @@ void I18n::loadBuiltinEnglish() strings_["export_viewing_key"] = "Export Viewing Key"; strings_["show_qr_code"] = "Show QR Code"; strings_["not_connected"] = "Not connected to daemon..."; - + // Lite build: there is no daemon — these replace the daemon-centric "not connected" + // strings when no wallet is open (isConnected() tracks the lite wallet in lite builds). + strings_["lite_no_wallet"] = "No wallet open — create or open one in Settings"; + strings_["lite_no_wallet_short"] = "No wallet open"; + // Send Tab strings_["pay_from"] = "Pay From"; strings_["send_to"] = "Send To";