From d29283a9b759b0b9c50f4f9bbcc9a0fa660bf01c Mon Sep 17 00:00:00 2001 From: DanS Date: Tue, 14 Jul 2026 18:17:13 -0500 Subject: [PATCH] feat(overview): migrate the Transfer-funds modal to the reference design MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Presentation-only migration of AddressTransferDialog::render (drag-one-address- onto-another transfer) — a fund-moving modal: - struct-form BeginOverlayDialog(OverlayDialogSpec{BlurFloat, cardWidth 620, idSuffix addrtransfer}) replacing the legacy positional overload - the top-of-dialog deshielding warning -> material::DialogWarningHeader; the green shielding notice stays colored text (it's a positive notice, not a warning) - remove the footer divider and drop its "+1.0f" footerH reserve term (keep the form->result-preview divider) - reuse the existing shield_operation_id key for the "Operation ID: %s" label (no new i18n key) The fund path is byte-for-byte unchanged: the amountValid guard, totalDeduct/ newFromBal/newToBal math, maxSendableAmount, the Max button, s_app->sendTransaction + its ok/fail callback, and the BeginDisabled(!amountValid || s_sending) gate. Verified: build + ctest + hygiene clean; a 2-lens adversarial review returned zero findings, proving the fund path diffs byte-for-byte identical to HEAD. Co-Authored-By: Claude Opus 4.8 (1M context) --- src/ui/windows/address_transfer_dialog.h | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/ui/windows/address_transfer_dialog.h b/src/ui/windows/address_transfer_dialog.h index eb00245..5c78d2a 100644 --- a/src/ui/windows/address_transfer_dialog.h +++ b/src/ui/windows/address_transfer_dialog.h @@ -59,7 +59,11 @@ public: using namespace material; - if (BeginOverlayDialog(TR("transfer_funds"), &s_open, 620.0f, 0.94f)) { + OverlayDialogSpec ov; + ov.title = TR("transfer_funds"); ov.p_open = &s_open; + ov.style = OverlayStyle::BlurFloat; + ov.cardWidth = 620.0f; ov.idSuffix = "addrtransfer"; + if (BeginOverlayDialog(ov)) { float dp = Layout::dpiScale(); ImDrawList* dl = ImGui::GetWindowDrawList(); @@ -72,9 +76,7 @@ public: // Shielding / deshielding warning if (s_info.fromIsZ && !s_info.toIsZ) { - ImGui::PushStyleColor(ImGuiCol_Text, ImGui::ColorConvertU32ToFloat4(Warning())); - ImGui::TextWrapped("%s", TR("deshielding_warning")); - ImGui::PopStyleColor(); + DialogWarningHeader(TR("deshielding_warning")); ImGui::Spacing(); } else if (!s_info.fromIsZ && s_info.toIsZ) { ImGui::PushStyleColor(ImGuiCol_Text, ImGui::ColorConvertU32ToFloat4(Success())); @@ -188,7 +190,7 @@ public: buttonFont->CalcTextSizeA(buttonFontSize, 1000.0f, 0.0f, sendingLabel).x); float confirmW = std::max(confirmMinW, confirmTextW + buttonPadW); float totalW = cancelW + confirmW + Layout::spacingMd(); - float footerH = ImGui::GetFrameHeight() + ImGui::GetStyle().ItemSpacing.y * 3.0f + 1.0f; + float footerH = ImGui::GetFrameHeight() + ImGui::GetStyle().ItemSpacing.y * 3.0f; // footer divider removed ImGuiViewport* vp = ImGui::GetMainViewport(); float cardBottomY = vp->Pos.y + vp->Size.y * 0.85f; float footerTopY = cardBottomY - 24.0f * dp - footerH; @@ -199,7 +201,6 @@ public: ImGui::Spacing(); } - ImGui::Separator(); ImGui::Spacing(); float rowStartX = ImGui::GetCursorPosX(); @@ -300,7 +301,7 @@ private: ImGui::Spacing(); { char buf[128]; - snprintf(buf, sizeof(buf), "Operation ID: %s", + snprintf(buf, sizeof(buf), TR("shield_operation_id"), s_resultMsg.size() > 40 ? (s_resultMsg.substr(0, 20) + "..." + s_resultMsg.substr(s_resultMsg.size() - 10)).c_str() : s_resultMsg.c_str());