feat(ui): promote the address book to a Contacts sidebar tab

Phase 0b. The address book was buried in Settings behind a modal dialog.
Make it a first-class "Contacts" tab (which will also become the chat
roster), rendered inline in the main content area.

- New NavPage::Contacts (after History; ICON_MD_CONTACTS) +
  WalletUiSurface::Contacts. isUiSurfaceAvailable's `default: return true`
  shows it in BOTH variants; uiSurfaceNeedsWalletData's default keeps it
  usable before wallet data loads. All the touchpoints wired: NavPageSurface,
  GetNavIconMD, the app.cpp dispatch case, the app_network.cpp tracePageName
  case, and the `contacts` i18n label.
- New src/ui/windows/contacts_tab.{h,cpp}: RenderContactsTab lifts the
  toolbar + table + add/edit modal out of address_book_dialog, rendered in a
  BeginChild scroll region (peers_tab pattern) instead of an overlay; the
  add/edit form stays a modal layered over the tab. Reuses the existing
  address_book_* i18n keys and the dialogs.address-book schema.
- Delete address_book_dialog.{h,cpp}; remove its app.cpp render pump and the
  dead App::show_address_book_. The Settings "Address Book…" button now
  navigates to the tab (setCurrentPage) instead of opening the modal, so the
  Tools & Actions grid layout is untouched.
- CMake: swap the dialog sources for contacts_tab.

Behavior-preserving move; search/sort/keyboard/contrast land in 0d. Visual
check pending the per-theme screenshot sweep.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-07-05 16:59:34 -05:00
parent 62998179ec
commit ee59a9e2cd
12 changed files with 310 additions and 335 deletions

View File

@@ -41,7 +41,7 @@
#include "ui/windows/transaction_details_dialog.h"
#include "ui/windows/qr_popup_dialog.h"
#include "ui/windows/validate_address_dialog.h"
#include "ui/windows/address_book_dialog.h"
#include "ui/windows/contacts_tab.h"
#include "ui/windows/shield_dialog.h"
#include "ui/windows/request_payment_dialog.h"
#include "ui/windows/block_info_dialog.h"
@@ -1691,6 +1691,9 @@ void App::render()
case ui::NavPage::History:
ui::RenderTransactionsTab(this);
break;
case ui::NavPage::Contacts:
ui::RenderContactsTab(this);
break;
case ui::NavPage::Mining:
ui::RenderMiningTab(this);
break;
@@ -1888,10 +1891,7 @@ void App::render()
// Validate address dialog (triggered from Edit menu)
ui::ValidateAddressDialog::render(this);
// Address book dialog (triggered from Edit menu)
ui::AddressBookDialog::render(this);
// Shield/merge dialog (triggered from Wallet menu)
ui::ShieldDialog::render(this);