Add the first user-visible HushChat surface: a Chat tab in the sidebar with a
two-pane, read-only conversation view — a conversation list on the left and the
selected thread on the right — reading from the App-owned ChatService store.
- New src/ui/windows/chat_tab.{h,cpp} (RenderChatTab(App*), mirroring the
Contacts tab). Conversations are sorted by most-recent activity; peer
z-addresses resolve to contact names via the address book when known; each
message shows sender + timestamp + wrapped body, with a contact-request tag
and a read-only footer (composing arrives in a later phase). Empty states
cover "wallet locked / identity not ready" and "no conversations yet".
- Sidebar wiring: NavPage::Chat + registry entry (static_assert stays balanced),
NavPageSurface + GetNavIconMD (ICON_MD_CHAT), dispatch in app.cpp, trace/sweep
page names, and App::chatService() accessor. The tab is gated on the new
WalletUiSurface::Chat, which returns DRAGONX_ENABLE_CHAT != 0 — so it only
appears in chat-enabled builds and is hidden (and unreachable) by default.
- i18n: English defaults for the chat nav label + hint strings.
Verified: Linux + Windows(mingw) build with chat ON, ctest 100%, hygiene clean;
caches restored to the OFF default. The screenshot sweep now includes the Chat
tab (sweepPageName "chat") for per-theme visual review.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
28 lines
794 B
C++
28 lines
794 B
C++
// DragonX Wallet - ImGui Edition
|
|
// Copyright 2024-2026 The Hush Developers
|
|
// Released under the GPLv3
|
|
|
|
#pragma once
|
|
|
|
namespace dragonx {
|
|
|
|
class App;
|
|
|
|
namespace ui {
|
|
|
|
/**
|
|
* @brief Render the Chat tab (read-only HushChat conversation view — Phase 3).
|
|
*
|
|
* A two-pane view: a conversation list on the left and the selected thread on
|
|
* the right, both read from the App-owned ChatService store (App::chatService()).
|
|
* Peer z-addresses are resolved to contact names via the address book when known.
|
|
* Read-only for now — composing/sending arrives in a later phase. The tab is only
|
|
* reachable when built with DRAGONX_ENABLE_CHAT (gated via WalletUiSurface::Chat).
|
|
*
|
|
* @param app Pointer to the app instance.
|
|
*/
|
|
void RenderChatTab(App* app);
|
|
|
|
} // namespace ui
|
|
} // namespace dragonx
|