fix: sidebar nav text overflow for long translations
- Add text scaling for section labels (TOOLS, ADVANCED) in sidebar - Separate explorer_section key from explorer nav label to fix ALL CAPS - Shorten long sidebar translations: es/pt settings, pt overview, ru tools/advanced - Fix explorer translations from ALL CAPS to proper case in all languages
This commit is contained in:
48
src/app.cpp
48
src/app.cpp
@@ -1450,27 +1450,27 @@ void App::renderStatusBar()
|
||||
ImGui::SameLine(0, sbIconTextGap);
|
||||
// Show truncated warmup status (e.g. "Activating best chain... (Block 12345)")
|
||||
const char* warmupText = state_.warmup_status.empty()
|
||||
? "Warming up..." : state_.warmup_status.c_str();
|
||||
? TR("sb_warming_up") : state_.warmup_status.c_str();
|
||||
ImGui::TextColored(ImVec4(1.0f, 0.8f, 0.0f, 1.0f), "%s", warmupText);
|
||||
} else if (state_.connected) {
|
||||
ImGui::PushFont(ui::material::Type().iconSmall());
|
||||
ImGui::TextColored(ImVec4(0.2f, 0.8f, 0.2f, dotOpacity), ICON_MD_CIRCLE);
|
||||
ImGui::PopFont();
|
||||
ImGui::SameLine(0, sbIconTextGap);
|
||||
ImGui::Text("Connected");
|
||||
ImGui::Text("%s", TR("connected"));
|
||||
} else {
|
||||
ImGui::PushFont(ui::material::Type().iconSmall());
|
||||
ImGui::TextColored(ImVec4(0.8f, 0.2f, 0.2f, dotOpacity), ICON_MD_CIRCLE);
|
||||
ImGui::PopFont();
|
||||
ImGui::SameLine(0, sbIconTextGap);
|
||||
ImGui::Text("Disconnected");
|
||||
ImGui::Text("%s", TR("disconnected"));
|
||||
}
|
||||
|
||||
// Block height
|
||||
ImGui::SameLine(0, sbSectionGap);
|
||||
ImGui::TextDisabled("|");
|
||||
ImGui::SameLine(0, sbSeparatorGap);
|
||||
ImGui::Text("Block: %d", state_.sync.blocks);
|
||||
ImGui::Text(TR("sb_block"), state_.sync.blocks);
|
||||
|
||||
// Sync status or peer count
|
||||
ImGui::SameLine(0, sbSectionGap);
|
||||
@@ -1480,13 +1480,13 @@ void App::renderStatusBar()
|
||||
// Show rescan progress (takes priority over sync)
|
||||
// Use animated dots if progress is unknown (0%)
|
||||
if (state_.sync.rescan_progress > 0.01f) {
|
||||
ImGui::TextColored(ImVec4(0.6f, 0.8f, 1.0f, 1.0f), "Rescanning %.0f%%",
|
||||
ImGui::TextColored(ImVec4(0.6f, 0.8f, 1.0f, 1.0f), TR("sb_rescanning_pct"),
|
||||
state_.sync.rescan_progress * 100.0f);
|
||||
} else {
|
||||
// Animated "Rescanning..." with pulsing dots
|
||||
int dots = (int)(ImGui::GetTime() * 2.0f) % 4;
|
||||
const char* dotStr = (dots == 0) ? "." : (dots == 1) ? ".." : (dots == 2) ? "..." : "";
|
||||
ImGui::TextColored(ImVec4(0.6f, 0.8f, 1.0f, 1.0f), "Rescanning%s", dotStr);
|
||||
ImGui::TextColored(ImVec4(0.6f, 0.8f, 1.0f, 1.0f), "%s%s", TR("sb_rescanning"), dotStr);
|
||||
}
|
||||
} else if (state_.sync.syncing) {
|
||||
int chainTip = state_.longestchain > 0 ? state_.longestchain : state_.sync.headers;
|
||||
@@ -1528,14 +1528,14 @@ void App::renderStatusBar()
|
||||
snprintf(eta, sizeof(eta), "%dm %ds", eta_sec / 60, eta_sec % 60);
|
||||
else
|
||||
snprintf(eta, sizeof(eta), "%ds", eta_sec);
|
||||
ImGui::TextColored(ImVec4(1.0f, 0.8f, 0.0f, 1.0f), "Syncing %.1f%% (%d left, %.0f blk/s, ~%s)",
|
||||
ImGui::TextColored(ImVec4(1.0f, 0.8f, 0.0f, 1.0f), TR("sb_syncing_eta"),
|
||||
state_.sync.verification_progress * 100.0, blocksLeft, s_blocks_per_sec, eta);
|
||||
} else {
|
||||
ImGui::TextColored(ImVec4(1.0f, 0.8f, 0.0f, 1.0f), "Syncing %.1f%% (%d left)",
|
||||
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) {
|
||||
ImGui::Text("Peers: %zu", state_.peers.size());
|
||||
ImGui::Text(TR("sb_peers"), state_.peers.size());
|
||||
}
|
||||
|
||||
// Network hashrate (if connected and have data)
|
||||
@@ -1544,13 +1544,13 @@ void App::renderStatusBar()
|
||||
ImGui::TextDisabled("|");
|
||||
ImGui::SameLine(0, sbSeparatorGap);
|
||||
if (state_.mining.networkHashrate >= 1e9) {
|
||||
ImGui::Text("Net: %.2f GH/s", state_.mining.networkHashrate / 1e9);
|
||||
ImGui::Text(TR("sb_net_ghs"), state_.mining.networkHashrate / 1e9);
|
||||
} else if (state_.mining.networkHashrate >= 1e6) {
|
||||
ImGui::Text("Net: %.2f MH/s", state_.mining.networkHashrate / 1e6);
|
||||
ImGui::Text(TR("sb_net_mhs"), state_.mining.networkHashrate / 1e6);
|
||||
} else if (state_.mining.networkHashrate >= 1e3) {
|
||||
ImGui::Text("Net: %.2f KH/s", state_.mining.networkHashrate / 1e3);
|
||||
ImGui::Text(TR("sb_net_khs"), state_.mining.networkHashrate / 1e3);
|
||||
} else {
|
||||
ImGui::Text("Net: %.1f H/s", state_.mining.networkHashrate);
|
||||
ImGui::Text(TR("sb_net_hs"), state_.mining.networkHashrate);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1567,7 +1567,7 @@ void App::renderStatusBar()
|
||||
double displayHashrate = state_.pool_mining.xmrig_running
|
||||
? state_.pool_mining.hashrate_10s
|
||||
: state_.mining.localHashrate;
|
||||
ImGui::TextColored(ImVec4(0.3f, 0.8f, 0.3f, 1.0f), "%.1f H/s",
|
||||
ImGui::TextColored(ImVec4(0.3f, 0.8f, 0.3f, 1.0f), TR("sb_mining_hs"),
|
||||
displayHashrate);
|
||||
}
|
||||
|
||||
@@ -1583,7 +1583,7 @@ void App::renderStatusBar()
|
||||
ImGui::SameLine(0, sbIconTextGap);
|
||||
int dots = (int)(ImGui::GetTime() * 2.0f) % 4;
|
||||
const char* dotStr = (dots == 0) ? "." : (dots == 1) ? ".." : (dots == 2) ? "..." : "";
|
||||
ImGui::TextColored(ImVec4(0.6f, 0.8f, 1.0f, 1.0f), "Importing keys%s", dotStr);
|
||||
ImGui::TextColored(ImVec4(0.6f, 0.8f, 1.0f, 1.0f), "%s%s", TR("sb_importing_keys"), dotStr);
|
||||
}
|
||||
|
||||
// Right side: version always at far right, connection status to its left.
|
||||
@@ -1605,7 +1605,7 @@ void App::renderStatusBar()
|
||||
ImGui::SameLine(statusX);
|
||||
ImGui::TextDisabled("%s", connection_status_.c_str());
|
||||
} else if (!daemon_status_.empty() && daemon_status_.find("Error") != std::string::npos) {
|
||||
const char* errText = "Daemon not found";
|
||||
const char* errText = TR("sb_daemon_not_found");
|
||||
float statusW = ImGui::CalcTextSize(errText).x;
|
||||
float statusX = versionX - statusW - gap;
|
||||
ImGui::SameLine(statusX);
|
||||
@@ -2062,12 +2062,12 @@ bool App::startEmbeddedDaemon()
|
||||
// Try to extract embedded resources if available
|
||||
if (resources::hasEmbeddedResources()) {
|
||||
DEBUG_LOGF("Extracting embedded Sapling params...\n");
|
||||
daemon_status_ = "Extracting Sapling parameters...";
|
||||
daemon_status_ = TR("sb_extracting_sapling");
|
||||
resources::extractEmbeddedResources();
|
||||
|
||||
// Check again after extraction
|
||||
if (!rpc::Connection::verifySaplingParams()) {
|
||||
daemon_status_ = "Failed to extract Sapling parameters.";
|
||||
daemon_status_ = TR("sb_sapling_failed");
|
||||
DEBUG_LOGF("Sapling params still not found after extraction!\n");
|
||||
DEBUG_LOGF("Expected location: %s\n", rpc::Connection::getSaplingParamsDir().c_str());
|
||||
return false;
|
||||
@@ -2113,7 +2113,7 @@ bool App::startEmbeddedDaemon()
|
||||
if (copied && rpc::Connection::verifySaplingParams()) {
|
||||
DEBUG_LOGF("Sapling params copied from exe directory successfully\n");
|
||||
} else {
|
||||
daemon_status_ = "Sapling parameters not found. They should be in: " + rpc::Connection::getSaplingParamsDir();
|
||||
daemon_status_ = TR("sb_sapling_not_found");
|
||||
DEBUG_LOGF("Sapling params not found and no embedded resources available!\n");
|
||||
DEBUG_LOGF("Expected location: %s\n", rpc::Connection::getSaplingParamsDir().c_str());
|
||||
return false;
|
||||
@@ -2163,16 +2163,16 @@ bool App::startEmbeddedDaemon()
|
||||
embedded_daemon_->setStateCallback([this](daemon::EmbeddedDaemon::State state, const std::string& msg) {
|
||||
switch (state) {
|
||||
case daemon::EmbeddedDaemon::State::Starting:
|
||||
daemon_status_ = "Starting dragonxd...";
|
||||
daemon_status_ = TR("sb_starting_daemon");
|
||||
break;
|
||||
case daemon::EmbeddedDaemon::State::Running:
|
||||
daemon_status_ = "dragonxd running";
|
||||
daemon_status_ = TR("sb_dragonxd_running");
|
||||
break;
|
||||
case daemon::EmbeddedDaemon::State::Stopping:
|
||||
daemon_status_ = "Stopping dragonxd...";
|
||||
daemon_status_ = TR("sb_dragonxd_stopping");
|
||||
break;
|
||||
case daemon::EmbeddedDaemon::State::Stopped:
|
||||
daemon_status_ = "dragonxd stopped";
|
||||
daemon_status_ = TR("sb_dragonxd_stopped");
|
||||
break;
|
||||
case daemon::EmbeddedDaemon::State::Error:
|
||||
daemon_status_ = "Error: " + msg;
|
||||
@@ -3105,7 +3105,7 @@ void App::restartDaemon()
|
||||
}
|
||||
|
||||
DEBUG_LOGF("[App] Restarting embedded daemon...\n");
|
||||
connection_status_ = "Restarting daemon...";
|
||||
connection_status_ = TR("sb_restarting_daemon");
|
||||
|
||||
// Disconnect RPC so the loading overlay appears
|
||||
if (rpc_ && rpc_->isConnected()) {
|
||||
|
||||
@@ -40,6 +40,7 @@
|
||||
#include "default_banlist_embedded.h"
|
||||
#include "util/platform.h"
|
||||
#include "util/perf_log.h"
|
||||
#include "util/i18n.h"
|
||||
|
||||
#include <nlohmann/json.hpp>
|
||||
#include <curl/curl.h>
|
||||
@@ -95,7 +96,7 @@ void App::tryConnect()
|
||||
++connect_attempt;
|
||||
|
||||
connection_in_progress_ = true;
|
||||
connection_status_ = "Loading configuration...";
|
||||
connection_status_ = TR("sb_loading_config");
|
||||
|
||||
// Auto-detect configuration (file I/O — fast, safe on main thread)
|
||||
auto config = rpc::Connection::autoDetectConfig();
|
||||
@@ -109,23 +110,23 @@ void App::tryConnect()
|
||||
// If we already know an external daemon is on the port, just wait
|
||||
// for the config file to appear (the daemon creates it on first run).
|
||||
if (embedded_daemon_ && embedded_daemon_->externalDaemonDetected()) {
|
||||
connection_status_ = "Waiting for daemon config...";
|
||||
connection_status_ = TR("sb_waiting_config");
|
||||
VERBOSE_LOGF("[connect #%d] External daemon detected on port, waiting for config file to appear\n", connect_attempt);
|
||||
core_timer_ = CORE_INTERVAL_DEFAULT - 1.0f;
|
||||
return;
|
||||
}
|
||||
|
||||
connection_status_ = "No DRAGONX.conf found";
|
||||
connection_status_ = TR("sb_no_conf");
|
||||
|
||||
// Try to start embedded daemon if enabled
|
||||
if (use_embedded_daemon_ && !isEmbeddedDaemonRunning()) {
|
||||
connection_status_ = "Starting dragonxd...";
|
||||
connection_status_ = TR("sb_starting_daemon");
|
||||
if (startEmbeddedDaemon()) {
|
||||
// Will retry connection after daemon starts
|
||||
VERBOSE_LOGF("[connect #%d] Embedded daemon starting, will retry connection...\n", connect_attempt);
|
||||
core_timer_ = CORE_INTERVAL_DEFAULT - 1.0f;
|
||||
} else if (embedded_daemon_ && embedded_daemon_->externalDaemonDetected()) {
|
||||
connection_status_ = "Waiting for daemon config...";
|
||||
connection_status_ = TR("sb_waiting_config");
|
||||
VERBOSE_LOGF("[connect #%d] External daemon detected but no config yet, will retry...\n", connect_attempt);
|
||||
core_timer_ = CORE_INTERVAL_DEFAULT - 1.0f;
|
||||
} else {
|
||||
@@ -141,7 +142,7 @@ void App::tryConnect()
|
||||
return;
|
||||
}
|
||||
|
||||
connection_status_ = "Connecting to dragonxd...";
|
||||
connection_status_ = TR("sb_connecting_daemon");
|
||||
VERBOSE_LOGF("[connect #%d] Connecting to %s:%s (user=%s)\n",
|
||||
connect_attempt, config.host.c_str(), config.port.c_str(), config.rpcuser.c_str());
|
||||
|
||||
@@ -235,7 +236,7 @@ void App::tryConnect()
|
||||
onConnected();
|
||||
} else {
|
||||
state_.connected = false;
|
||||
connection_status_ = "Auth failed — check rpcuser/rpcpassword";
|
||||
connection_status_ = TR("sb_auth_failed");
|
||||
VERBOSE_LOGF("[connect #%d] .cookie auth also failed\n", attempt);
|
||||
ui::Notifications::instance().error(
|
||||
"RPC authentication failed (HTTP 401). "
|
||||
@@ -248,7 +249,7 @@ void App::tryConnect()
|
||||
}
|
||||
state_.connected = false;
|
||||
std::string confPath = rpc::Connection::getDefaultConfPath();
|
||||
connection_status_ = "Auth failed — check rpcuser/rpcpassword";
|
||||
connection_status_ = TR("sb_auth_failed");
|
||||
VERBOSE_LOGF("[connect #%d] HTTP 401 — rpcuser/rpcpassword in %s don't match the daemon. "
|
||||
"Edit the file or restart the daemon to regenerate credentials.\n",
|
||||
attempt, confPath.c_str());
|
||||
@@ -261,9 +262,10 @@ void App::tryConnect()
|
||||
// Show the actual RPC error alongside the waiting message so
|
||||
// auth mismatches and timeouts aren't silently hidden.
|
||||
if (!connectErr.empty()) {
|
||||
connection_status_ = "Waiting for dragonxd — " + connectErr;
|
||||
char buf[256]; snprintf(buf, sizeof(buf), TR("sb_waiting_daemon_err"), connectErr.c_str());
|
||||
connection_status_ = buf;
|
||||
} else {
|
||||
connection_status_ = "Waiting for dragonxd to start...";
|
||||
connection_status_ = TR("sb_waiting_daemon");
|
||||
}
|
||||
VERBOSE_LOGF("[connect #%d] RPC connection failed (%s) — daemon still starting, will retry...\n",
|
||||
attempt, connectErr.c_str());
|
||||
@@ -271,9 +273,10 @@ void App::tryConnect()
|
||||
} else if (externalDetected) {
|
||||
state_.connected = false;
|
||||
if (!connectErr.empty()) {
|
||||
connection_status_ = "Connecting to daemon — " + connectErr;
|
||||
char buf[256]; snprintf(buf, sizeof(buf), TR("sb_connecting_err"), connectErr.c_str());
|
||||
connection_status_ = buf;
|
||||
} else {
|
||||
connection_status_ = "Connecting to external daemon...";
|
||||
connection_status_ = TR("sb_connecting_external");
|
||||
}
|
||||
VERBOSE_LOGF("[connect #%d] External daemon detected but RPC failed (%s), will retry...\n",
|
||||
attempt, connectErr.c_str());
|
||||
@@ -285,15 +288,16 @@ void App::tryConnect()
|
||||
if (use_embedded_daemon_ && !isEmbeddedDaemonRunning()) {
|
||||
// Prevent infinite crash-restart loop
|
||||
if (embedded_daemon_ && embedded_daemon_->getCrashCount() >= 3) {
|
||||
connection_status_ = "Daemon crashed " + std::to_string(embedded_daemon_->getCrashCount()) + " times";
|
||||
{ char buf[128]; snprintf(buf, sizeof(buf), TR("sb_daemon_crashed"), embedded_daemon_->getCrashCount());
|
||||
connection_status_ = buf; }
|
||||
VERBOSE_LOGF("[connect #%d] Daemon crashed %d times — not restarting (use Settings > Restart Daemon to retry)\n",
|
||||
attempt, embedded_daemon_->getCrashCount());
|
||||
} else {
|
||||
connection_status_ = "Starting dragonxd...";
|
||||
connection_status_ = TR("sb_starting_daemon");
|
||||
if (startEmbeddedDaemon()) {
|
||||
VERBOSE_LOGF("[connect #%d] Embedded daemon starting, will retry connection...\n", attempt);
|
||||
} else if (embedded_daemon_ && embedded_daemon_->externalDaemonDetected()) {
|
||||
connection_status_ = "Connecting to daemon...";
|
||||
connection_status_ = TR("sb_connecting_generic");
|
||||
VERBOSE_LOGF("[connect #%d] External daemon detected, will connect via RPC...\n", attempt);
|
||||
} else {
|
||||
VERBOSE_LOGF("[connect #%d] Failed to start embedded daemon — lastError: %s\n",
|
||||
@@ -317,7 +321,7 @@ void App::tryConnect()
|
||||
void App::onConnected()
|
||||
{
|
||||
state_.connected = true;
|
||||
connection_status_ = "Connected";
|
||||
connection_status_ = TR("connected");
|
||||
|
||||
// Reset crash counter on successful connection
|
||||
if (embedded_daemon_) {
|
||||
@@ -597,7 +601,7 @@ void App::refreshCoreData()
|
||||
state_.warming_up = false;
|
||||
state_.warmup_status.clear();
|
||||
state_.warmup_description.clear();
|
||||
connection_status_ = "Connected";
|
||||
connection_status_ = TR("connected");
|
||||
VERBOSE_LOGF("[warmup] Daemon ready, warmup complete\n");
|
||||
// Parse initial info
|
||||
try {
|
||||
|
||||
@@ -1005,7 +1005,7 @@ unsigned char res_lang_de_json[] = {
|
||||
0x20, 0x20, 0x20, 0x22, 0x65, 0x78, 0x69, 0x74, 0x22, 0x3a, 0x20, 0x22,
|
||||
0x42, 0x65, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x22, 0x2c, 0x0a, 0x20, 0x20,
|
||||
0x20, 0x20, 0x22, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x22,
|
||||
0x3a, 0x20, 0x22, 0x45, 0x58, 0x50, 0x4c, 0x4f, 0x52, 0x45, 0x52, 0x22,
|
||||
0x3a, 0x20, 0x22, 0x45, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x22,
|
||||
0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x65, 0x78, 0x70, 0x6c, 0x6f,
|
||||
0x72, 0x65, 0x72, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x64, 0x65,
|
||||
0x74, 0x61, 0x69, 0x6c, 0x22, 0x3a, 0x20, 0x22, 0x42, 0x6c, 0x6f, 0x63,
|
||||
@@ -1057,6 +1057,9 @@ unsigned char res_lang_de_json[] = {
|
||||
0x22, 0x65, 0x78, 0x70, 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x5f, 0x73, 0x65,
|
||||
0x61, 0x72, 0x63, 0x68, 0x22, 0x3a, 0x20, 0x22, 0x53, 0x75, 0x63, 0x68,
|
||||
0x65, 0x6e, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x65, 0x78,
|
||||
0x70, 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x5f, 0x73, 0x65, 0x63, 0x74, 0x69,
|
||||
0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x45, 0x58, 0x50, 0x4c, 0x4f, 0x52,
|
||||
0x45, 0x52, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x65, 0x78,
|
||||
0x70, 0x6c, 0x6f, 0x72, 0x65, 0x72, 0x5f, 0x74, 0x78, 0x5f, 0x6f, 0x75,
|
||||
0x74, 0x70, 0x75, 0x74, 0x73, 0x22, 0x3a, 0x20, 0x22, 0x41, 0x75, 0x73,
|
||||
0x67, 0x61, 0x62, 0x65, 0x6e, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20,
|
||||
@@ -2473,6 +2476,150 @@ unsigned char res_lang_de_json[] = {
|
||||
0x22, 0x5a, 0x2d, 0x54, 0x78, 0x20, 0x69, 0x6e, 0x20, 0x54, 0x78, 0x2d,
|
||||
0x4c, 0x69, 0x73, 0x74, 0x65, 0x20, 0x73, 0x70, 0x65, 0x69, 0x63, 0x68,
|
||||
0x65, 0x72, 0x6e, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x73,
|
||||
0x62, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x65,
|
||||
0x64, 0x22, 0x3a, 0x20, 0x22, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74,
|
||||
0x69, 0x66, 0x69, 0x7a, 0x69, 0x65, 0x72, 0x75, 0x6e, 0x67, 0x20, 0x66,
|
||||
0x65, 0x68, 0x6c, 0x67, 0x65, 0x73, 0x63, 0x68, 0x6c, 0x61, 0x67, 0x65,
|
||||
0x6e, 0x20, 0xe2, 0x80, 0x94, 0x20, 0x72, 0x70, 0x63, 0x75, 0x73, 0x65,
|
||||
0x72, 0x2f, 0x72, 0x70, 0x63, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72,
|
||||
0x64, 0x20, 0x70, 0x72, 0xc3, 0xbc, 0x66, 0x65, 0x6e, 0x22, 0x2c, 0x0a,
|
||||
0x20, 0x20, 0x20, 0x20, 0x22, 0x73, 0x62, 0x5f, 0x62, 0x6c, 0x6f, 0x63,
|
||||
0x6b, 0x22, 0x3a, 0x20, 0x22, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x3a, 0x20,
|
||||
0x25, 0x64, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x73, 0x62,
|
||||
0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6e, 0x67, 0x5f,
|
||||
0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x56, 0x65,
|
||||
0x72, 0x62, 0x69, 0x6e, 0x64, 0x75, 0x6e, 0x67, 0x20, 0x7a, 0x75, 0x20,
|
||||
0x64, 0x72, 0x61, 0x67, 0x6f, 0x6e, 0x78, 0x64, 0x2e, 0x2e, 0x2e, 0x22,
|
||||
0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x73, 0x62, 0x5f, 0x63, 0x6f,
|
||||
0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x65, 0x72, 0x72,
|
||||
0x22, 0x3a, 0x20, 0x22, 0x56, 0x65, 0x72, 0x62, 0x69, 0x6e, 0x64, 0x75,
|
||||
0x6e, 0x67, 0x20, 0x7a, 0x75, 0x6d, 0x20, 0x44, 0x61, 0x65, 0x6d, 0x6f,
|
||||
0x6e, 0x20, 0xe2, 0x80, 0x94, 0x20, 0x25, 0x73, 0x22, 0x2c, 0x0a, 0x20,
|
||||
0x20, 0x20, 0x20, 0x22, 0x73, 0x62, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65,
|
||||
0x63, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e,
|
||||
0x61, 0x6c, 0x22, 0x3a, 0x20, 0x22, 0x56, 0x65, 0x72, 0x62, 0x69, 0x6e,
|
||||
0x64, 0x75, 0x6e, 0x67, 0x20, 0x7a, 0x75, 0x20, 0x65, 0x78, 0x74, 0x65,
|
||||
0x72, 0x6e, 0x65, 0x6d, 0x20, 0x44, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e,
|
||||
0x2e, 0x2e, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x73, 0x62,
|
||||
0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6e, 0x67, 0x5f,
|
||||
0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x22, 0x3a, 0x20, 0x22, 0x56,
|
||||
0x65, 0x72, 0x62, 0x69, 0x6e, 0x64, 0x75, 0x6e, 0x67, 0x20, 0x7a, 0x75,
|
||||
0x6d, 0x20, 0x44, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2e, 0x2e, 0x2e, 0x22,
|
||||
0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x73, 0x62, 0x5f, 0x64, 0x61,
|
||||
0x65, 0x6d, 0x6f, 0x6e, 0x5f, 0x63, 0x72, 0x61, 0x73, 0x68, 0x65, 0x64,
|
||||
0x22, 0x3a, 0x20, 0x22, 0x44, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x20, 0x69,
|
||||
0x73, 0x74, 0x20, 0x25, 0x64, 0x20, 0x6d, 0x61, 0x6c, 0x20, 0x61, 0x62,
|
||||
0x67, 0x65, 0x73, 0x74, 0xc3, 0xbc, 0x72, 0x7a, 0x74, 0x22, 0x2c, 0x0a,
|
||||
0x20, 0x20, 0x20, 0x20, 0x22, 0x73, 0x62, 0x5f, 0x64, 0x61, 0x65, 0x6d,
|
||||
0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x66, 0x6f, 0x75, 0x6e, 0x64,
|
||||
0x22, 0x3a, 0x20, 0x22, 0x44, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x20, 0x6e,
|
||||
0x69, 0x63, 0x68, 0x74, 0x20, 0x67, 0x65, 0x66, 0x75, 0x6e, 0x64, 0x65,
|
||||
0x6e, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x73, 0x62, 0x5f,
|
||||
0x64, 0x72, 0x61, 0x67, 0x6f, 0x6e, 0x78, 0x64, 0x5f, 0x72, 0x75, 0x6e,
|
||||
0x6e, 0x69, 0x6e, 0x67, 0x22, 0x3a, 0x20, 0x22, 0x64, 0x72, 0x61, 0x67,
|
||||
0x6f, 0x6e, 0x78, 0x64, 0x20, 0x6c, 0xc3, 0xa4, 0x75, 0x66, 0x74, 0x22,
|
||||
0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x73, 0x62, 0x5f, 0x64, 0x72,
|
||||
0x61, 0x67, 0x6f, 0x6e, 0x78, 0x64, 0x5f, 0x73, 0x74, 0x6f, 0x70, 0x70,
|
||||
0x65, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x64, 0x72, 0x61, 0x67, 0x6f, 0x6e,
|
||||
0x78, 0x64, 0x20, 0x67, 0x65, 0x73, 0x74, 0x6f, 0x70, 0x70, 0x74, 0x22,
|
||||
0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x73, 0x62, 0x5f, 0x64, 0x72,
|
||||
0x61, 0x67, 0x6f, 0x6e, 0x78, 0x64, 0x5f, 0x73, 0x74, 0x6f, 0x70, 0x70,
|
||||
0x69, 0x6e, 0x67, 0x22, 0x3a, 0x20, 0x22, 0x64, 0x72, 0x61, 0x67, 0x6f,
|
||||
0x6e, 0x78, 0x64, 0x20, 0x77, 0x69, 0x72, 0x64, 0x20, 0x67, 0x65, 0x73,
|
||||
0x74, 0x6f, 0x70, 0x70, 0x74, 0x2e, 0x2e, 0x2e, 0x22, 0x2c, 0x0a, 0x20,
|
||||
0x20, 0x20, 0x20, 0x22, 0x73, 0x62, 0x5f, 0x65, 0x78, 0x74, 0x72, 0x61,
|
||||
0x63, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x61, 0x70, 0x6c, 0x69, 0x6e,
|
||||
0x67, 0x22, 0x3a, 0x20, 0x22, 0x53, 0x61, 0x70, 0x6c, 0x69, 0x6e, 0x67,
|
||||
0x2d, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x20, 0x77,
|
||||
0x65, 0x72, 0x64, 0x65, 0x6e, 0x20, 0x65, 0x78, 0x74, 0x72, 0x61, 0x68,
|
||||
0x69, 0x65, 0x72, 0x74, 0x2e, 0x2e, 0x2e, 0x22, 0x2c, 0x0a, 0x20, 0x20,
|
||||
0x20, 0x20, 0x22, 0x73, 0x62, 0x5f, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74,
|
||||
0x69, 0x6e, 0x67, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x22, 0x3a, 0x20, 0x22,
|
||||
0x53, 0x63, 0x68, 0x6c, 0xc3, 0xbc, 0x73, 0x73, 0x65, 0x6c, 0x20, 0x69,
|
||||
0x6d, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x65, 0x72, 0x65, 0x6e, 0x22, 0x2c,
|
||||
0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x73, 0x62, 0x5f, 0x6c, 0x6f, 0x61,
|
||||
0x64, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22,
|
||||
0x3a, 0x20, 0x22, 0x4b, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61,
|
||||
0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6c, 0x61, 0x64, 0x65, 0x6e, 0x2e, 0x2e,
|
||||
0x2e, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x73, 0x62, 0x5f,
|
||||
0x6d, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x68, 0x73, 0x22, 0x3a, 0x20,
|
||||
0x22, 0x25, 0x2e, 0x31, 0x66, 0x20, 0x48, 0x2f, 0x73, 0x22, 0x2c, 0x0a,
|
||||
0x20, 0x20, 0x20, 0x20, 0x22, 0x73, 0x62, 0x5f, 0x6e, 0x65, 0x74, 0x5f,
|
||||
0x67, 0x68, 0x73, 0x22, 0x3a, 0x20, 0x22, 0x4e, 0x65, 0x74, 0x7a, 0x3a,
|
||||
0x20, 0x25, 0x2e, 0x32, 0x66, 0x20, 0x47, 0x48, 0x2f, 0x73, 0x22, 0x2c,
|
||||
0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x73, 0x62, 0x5f, 0x6e, 0x65, 0x74,
|
||||
0x5f, 0x68, 0x73, 0x22, 0x3a, 0x20, 0x22, 0x4e, 0x65, 0x74, 0x7a, 0x3a,
|
||||
0x20, 0x25, 0x2e, 0x31, 0x66, 0x20, 0x48, 0x2f, 0x73, 0x22, 0x2c, 0x0a,
|
||||
0x20, 0x20, 0x20, 0x20, 0x22, 0x73, 0x62, 0x5f, 0x6e, 0x65, 0x74, 0x5f,
|
||||
0x6b, 0x68, 0x73, 0x22, 0x3a, 0x20, 0x22, 0x4e, 0x65, 0x74, 0x7a, 0x3a,
|
||||
0x20, 0x25, 0x2e, 0x32, 0x66, 0x20, 0x4b, 0x48, 0x2f, 0x73, 0x22, 0x2c,
|
||||
0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x73, 0x62, 0x5f, 0x6e, 0x65, 0x74,
|
||||
0x5f, 0x6d, 0x68, 0x73, 0x22, 0x3a, 0x20, 0x22, 0x4e, 0x65, 0x74, 0x7a,
|
||||
0x3a, 0x20, 0x25, 0x2e, 0x32, 0x66, 0x20, 0x4d, 0x48, 0x2f, 0x73, 0x22,
|
||||
0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x73, 0x62, 0x5f, 0x6e, 0x6f,
|
||||
0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x22, 0x3a, 0x20, 0x22, 0x44, 0x52, 0x41,
|
||||
0x47, 0x4f, 0x4e, 0x58, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x20, 0x6e, 0x69,
|
||||
0x63, 0x68, 0x74, 0x20, 0x67, 0x65, 0x66, 0x75, 0x6e, 0x64, 0x65, 0x6e,
|
||||
0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x73, 0x62, 0x5f, 0x70,
|
||||
0x65, 0x65, 0x72, 0x73, 0x22, 0x3a, 0x20, 0x22, 0x50, 0x65, 0x65, 0x72,
|
||||
0x73, 0x3a, 0x20, 0x25, 0x7a, 0x75, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20,
|
||||
0x20, 0x22, 0x73, 0x62, 0x5f, 0x72, 0x65, 0x73, 0x63, 0x61, 0x6e, 0x6e,
|
||||
0x69, 0x6e, 0x67, 0x22, 0x3a, 0x20, 0x22, 0x4e, 0x65, 0x75, 0x73, 0x63,
|
||||
0x61, 0x6e, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x73, 0x62,
|
||||
0x5f, 0x72, 0x65, 0x73, 0x63, 0x61, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x5f,
|
||||
0x70, 0x63, 0x74, 0x22, 0x3a, 0x20, 0x22, 0x4e, 0x65, 0x75, 0x73, 0x63,
|
||||
0x61, 0x6e, 0x20, 0x25, 0x2e, 0x30, 0x66, 0x25, 0x25, 0x22, 0x2c, 0x0a,
|
||||
0x20, 0x20, 0x20, 0x20, 0x22, 0x73, 0x62, 0x5f, 0x72, 0x65, 0x73, 0x74,
|
||||
0x61, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x61, 0x65, 0x6d, 0x6f,
|
||||
0x6e, 0x22, 0x3a, 0x20, 0x22, 0x44, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x20,
|
||||
0x77, 0x69, 0x72, 0x64, 0x20, 0x6e, 0x65, 0x75, 0x20, 0x67, 0x65, 0x73,
|
||||
0x74, 0x61, 0x72, 0x74, 0x65, 0x74, 0x2e, 0x2e, 0x2e, 0x22, 0x2c, 0x0a,
|
||||
0x20, 0x20, 0x20, 0x20, 0x22, 0x73, 0x62, 0x5f, 0x73, 0x61, 0x70, 0x6c,
|
||||
0x69, 0x6e, 0x67, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x22, 0x3a,
|
||||
0x20, 0x22, 0x53, 0x61, 0x70, 0x6c, 0x69, 0x6e, 0x67, 0x2d, 0x50, 0x61,
|
||||
0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x2d, 0x45, 0x78, 0x74, 0x72,
|
||||
0x61, 0x6b, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x66, 0x65, 0x68, 0x6c, 0x67,
|
||||
0x65, 0x73, 0x63, 0x68, 0x6c, 0x61, 0x67, 0x65, 0x6e, 0x2e, 0x22, 0x2c,
|
||||
0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x73, 0x62, 0x5f, 0x73, 0x61, 0x70,
|
||||
0x6c, 0x69, 0x6e, 0x67, 0x5f, 0x6e, 0x6f, 0x74, 0x5f, 0x66, 0x6f, 0x75,
|
||||
0x6e, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x53, 0x61, 0x70, 0x6c, 0x69, 0x6e,
|
||||
0x67, 0x2d, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x20,
|
||||
0x6e, 0x69, 0x63, 0x68, 0x74, 0x20, 0x67, 0x65, 0x66, 0x75, 0x6e, 0x64,
|
||||
0x65, 0x6e, 0x2e, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x73,
|
||||
0x62, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x64,
|
||||
0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x22, 0x3a, 0x20, 0x22, 0x64, 0x72, 0x61,
|
||||
0x67, 0x6f, 0x6e, 0x78, 0x64, 0x20, 0x77, 0x69, 0x72, 0x64, 0x20, 0x67,
|
||||
0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x74, 0x2e, 0x2e, 0x2e, 0x22,
|
||||
0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x73, 0x62, 0x5f, 0x73, 0x79,
|
||||
0x6e, 0x63, 0x69, 0x6e, 0x67, 0x5f, 0x62, 0x61, 0x73, 0x69, 0x63, 0x22,
|
||||
0x3a, 0x20, 0x22, 0x53, 0x79, 0x6e, 0x63, 0x68, 0x72, 0x6f, 0x6e, 0x69,
|
||||
0x73, 0x69, 0x65, 0x72, 0x75, 0x6e, 0x67, 0x20, 0x25, 0x2e, 0x31, 0x66,
|
||||
0x25, 0x25, 0x20, 0x28, 0x25, 0x64, 0x20, 0xc3, 0xbc, 0x62, 0x72, 0x69,
|
||||
0x67, 0x29, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x73, 0x62,
|
||||
0x5f, 0x73, 0x79, 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x5f, 0x65, 0x74, 0x61,
|
||||
0x22, 0x3a, 0x20, 0x22, 0x53, 0x79, 0x6e, 0x63, 0x68, 0x72, 0x6f, 0x6e,
|
||||
0x69, 0x73, 0x69, 0x65, 0x72, 0x75, 0x6e, 0x67, 0x20, 0x25, 0x2e, 0x31,
|
||||
0x66, 0x25, 0x25, 0x20, 0x28, 0x25, 0x64, 0x20, 0xc3, 0xbc, 0x62, 0x72,
|
||||
0x69, 0x67, 0x2c, 0x20, 0x25, 0x2e, 0x30, 0x66, 0x20, 0x42, 0x6c, 0x6b,
|
||||
0x2f, 0x73, 0x2c, 0x20, 0x7e, 0x25, 0x73, 0x29, 0x22, 0x2c, 0x0a, 0x20,
|
||||
0x20, 0x20, 0x20, 0x22, 0x73, 0x62, 0x5f, 0x77, 0x61, 0x69, 0x74, 0x69,
|
||||
0x6e, 0x67, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x3a, 0x20,
|
||||
0x22, 0x57, 0x61, 0x72, 0x74, 0x65, 0x6e, 0x20, 0x61, 0x75, 0x66, 0x20,
|
||||
0x44, 0x61, 0x65, 0x6d, 0x6f, 0x6e, 0x2d, 0x4b, 0x6f, 0x6e, 0x66, 0x69,
|
||||
0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x2e, 0x2e, 0x22,
|
||||
0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x73, 0x62, 0x5f, 0x77, 0x61,
|
||||
0x69, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x61, 0x65, 0x6d, 0x6f, 0x6e,
|
||||
0x22, 0x3a, 0x20, 0x22, 0x57, 0x61, 0x72, 0x74, 0x65, 0x6e, 0x20, 0x61,
|
||||
0x75, 0x66, 0x20, 0x64, 0x72, 0x61, 0x67, 0x6f, 0x6e, 0x78, 0x64, 0x2e,
|
||||
0x2e, 0x2e, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x73, 0x62,
|
||||
0x5f, 0x77, 0x61, 0x69, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x61, 0x65,
|
||||
0x6d, 0x6f, 0x6e, 0x5f, 0x65, 0x72, 0x72, 0x22, 0x3a, 0x20, 0x22, 0x57,
|
||||
0x61, 0x72, 0x74, 0x65, 0x6e, 0x20, 0x61, 0x75, 0x66, 0x20, 0x64, 0x72,
|
||||
0x61, 0x67, 0x6f, 0x6e, 0x78, 0x64, 0x20, 0xe2, 0x80, 0x94, 0x20, 0x25,
|
||||
0x73, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x73, 0x62, 0x5f,
|
||||
0x77, 0x61, 0x72, 0x6d, 0x69, 0x6e, 0x67, 0x5f, 0x75, 0x70, 0x22, 0x3a,
|
||||
0x20, 0x22, 0x41, 0x75, 0x66, 0x77, 0xc3, 0xa4, 0x72, 0x6d, 0x65, 0x6e,
|
||||
0x2e, 0x2e, 0x2e, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x22, 0x73,
|
||||
0x65, 0x61, 0x72, 0x63, 0x68, 0x5f, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x68,
|
||||
0x6f, 0x6c, 0x64, 0x65, 0x72, 0x22, 0x3a, 0x20, 0x22, 0x53, 0x75, 0x63,
|
||||
0x68, 0x65, 0x6e, 0x2e, 0x2e, 0x2e, 0x22, 0x2c, 0x0a, 0x20, 0x20, 0x20,
|
||||
@@ -3992,4 +4139,4 @@ unsigned char res_lang_de_json[] = {
|
||||
0x2d, 0x41, 0x64, 0x72, 0x65, 0x73, 0x73, 0x65, 0x6e, 0x22, 0x0a, 0x7d,
|
||||
0x0a
|
||||
};
|
||||
unsigned int res_lang_de_json_len = 47893;
|
||||
unsigned int res_lang_de_json_len = 49657;
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -1675,7 +1675,7 @@ void RenderSettingsPage(App* app) {
|
||||
// EXPLORER & OPTIONS — full-width card
|
||||
// ====================================================================
|
||||
{
|
||||
Type().textColored(TypeStyle::Overline, OnSurfaceMedium(), TR("explorer"));
|
||||
Type().textColored(TypeStyle::Overline, OnSurfaceMedium(), TR("explorer_section"));
|
||||
ImGui::Dummy(ImVec2(0, Layout::spacingXs()));
|
||||
|
||||
ImVec2 cardMin = ImGui::GetCursorScreenPos();
|
||||
|
||||
@@ -557,15 +557,21 @@ inline bool RenderSidebar(NavPage& current, float sidebarWidth, float contentHei
|
||||
if (showLabels) {
|
||||
ImFont* olFont = Type().overline();
|
||||
float olFontSz = ScaledFontSize(olFont);
|
||||
float maxSectionW = panelRight - wp.x - sbSectionLabelPadLeft;
|
||||
int si = 0;
|
||||
for (int i = 0; i < (int)NavPage::Count_; ++i) {
|
||||
if (kNavItems[i].section_label && si < nSectionLabels) {
|
||||
float ly = panelTopY + sectionLabelY[si++];
|
||||
const char* sLabel = NavSectionLabel(kNavItems[i]);
|
||||
float drawFsz = olFontSz;
|
||||
ImVec2 sLabelSz = olFont->CalcTextSizeA(drawFsz, 1000.0f, 0.0f, sLabel);
|
||||
if (sLabelSz.x > maxSectionW && maxSectionW > 0)
|
||||
drawFsz *= maxSectionW / sLabelSz.x;
|
||||
ImVec4 olCol = ImGui::ColorConvertU32ToFloat4(OnSurfaceMedium());
|
||||
olCol.w *= expandFrac;
|
||||
dl->AddText(olFont, olFontSz,
|
||||
dl->AddText(olFont, drawFsz,
|
||||
ImVec2(wp.x + sbSectionLabelPadLeft, ly),
|
||||
ImGui::ColorConvertFloat4ToU32(olCol), NavSectionLabel(kNavItems[i]));
|
||||
ImGui::ColorConvertFloat4ToU32(olCol), sLabel);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
||||
@@ -195,7 +195,7 @@ static void RenderSyncBanner(const WalletState& state) {
|
||||
? (float)state.sync.blocks / state.sync.headers * 100.0f : 0.0f;
|
||||
char syncBuf[128];
|
||||
snprintf(syncBuf, sizeof(syncBuf),
|
||||
"Blockchain syncing (%.1f%%)... Balances may be inaccurate.", syncPct);
|
||||
TR("blockchain_syncing"), syncPct);
|
||||
ImGui::PushStyleColor(ImGuiCol_ChildBg, ImGui::ColorConvertU32ToFloat4(schema::UI().resolveColor(schema::UI().drawElement("tabs.send", "sync-banner-bg-color").color)));
|
||||
float syncH = std::max(schema::UI().drawElement("tabs.send", "sync-banner-min-height").size, schema::UI().drawElement("tabs.send", "sync-banner-height").size * Layout::vScale());
|
||||
ImGui::BeginChild("##SyncBanner", ImVec2(ImGui::GetContentRegionAvail().x, syncH),
|
||||
|
||||
@@ -181,7 +181,7 @@ void I18n::loadBuiltinEnglish()
|
||||
strings_["node_security"] = "NODE & SECURITY";
|
||||
strings_["node"] = "NODE";
|
||||
strings_["security"] = "SECURITY";
|
||||
strings_["explorer"] = "EXPLORER";
|
||||
strings_["explorer_section"] = "EXPLORER";
|
||||
strings_["about"] = "About";
|
||||
strings_["backup_data"] = "BACKUP & DATA";
|
||||
strings_["balance_layout"] = "Balance Layout";
|
||||
@@ -671,6 +671,41 @@ void I18n::loadBuiltinEnglish()
|
||||
strings_["syncing"] = "Syncing...";
|
||||
strings_["block"] = "Block";
|
||||
strings_["no_addresses_available"] = "No addresses available";
|
||||
|
||||
// Status bar
|
||||
strings_["sb_warming_up"] = "Warming up...";
|
||||
strings_["sb_block"] = "Block: %d";
|
||||
strings_["sb_peers"] = "Peers: %zu";
|
||||
strings_["sb_net_ghs"] = "Net: %.2f GH/s";
|
||||
strings_["sb_net_mhs"] = "Net: %.2f MH/s";
|
||||
strings_["sb_net_khs"] = "Net: %.2f KH/s";
|
||||
strings_["sb_net_hs"] = "Net: %.1f H/s";
|
||||
strings_["sb_mining_hs"] = "%.1f H/s";
|
||||
strings_["sb_syncing_eta"] = "Syncing %.1f%% (%d left, %.0f blk/s, ~%s)";
|
||||
strings_["sb_syncing_basic"] = "Syncing %.1f%% (%d left)";
|
||||
strings_["sb_rescanning_pct"] = "Rescanning %.0f%%";
|
||||
strings_["sb_rescanning"] = "Rescanning";
|
||||
strings_["sb_importing_keys"] = "Importing keys";
|
||||
strings_["sb_daemon_not_found"] = "Daemon not found";
|
||||
strings_["sb_loading_config"] = "Loading configuration...";
|
||||
strings_["sb_waiting_config"] = "Waiting for daemon config...";
|
||||
strings_["sb_no_conf"] = "No DRAGONX.conf found";
|
||||
strings_["sb_starting_daemon"] = "Starting dragonxd...";
|
||||
strings_["sb_connecting_daemon"] = "Connecting to dragonxd...";
|
||||
strings_["sb_auth_failed"] = "Auth failed — check rpcuser/rpcpassword";
|
||||
strings_["sb_waiting_daemon"] = "Waiting for dragonxd to start...";
|
||||
strings_["sb_waiting_daemon_err"] = "Waiting for dragonxd — %s";
|
||||
strings_["sb_connecting_external"] = "Connecting to external daemon...";
|
||||
strings_["sb_connecting_generic"] = "Connecting to daemon...";
|
||||
strings_["sb_connecting_err"] = "Connecting to daemon — %s";
|
||||
strings_["sb_daemon_crashed"] = "Daemon crashed %d times";
|
||||
strings_["sb_extracting_sapling"] = "Extracting Sapling parameters...";
|
||||
strings_["sb_sapling_failed"] = "Failed to extract Sapling parameters.";
|
||||
strings_["sb_sapling_not_found"] = "Sapling parameters not found.";
|
||||
strings_["sb_dragonxd_running"] = "dragonxd running";
|
||||
strings_["sb_dragonxd_stopping"] = "Stopping dragonxd...";
|
||||
strings_["sb_dragonxd_stopped"] = "dragonxd stopped";
|
||||
strings_["sb_restarting_daemon"] = "Restarting daemon...";
|
||||
|
||||
// Errors & Messages
|
||||
strings_["error"] = "Error";
|
||||
|
||||
Reference in New Issue
Block a user