Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 36 additions & 0 deletions docs/uiux-layout-verification.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# UI/UX Layout Verification

## Target reference

The implemented layout targets the dark premium dashboard reference: left app navigation, top in-content search and lightweight filters, feature/hero panel, library shelf/grid, right details panel, and bottom summary cards.

## Visual match audit

| Reference element | Current implementation | Status |
| --- | --- | --- |
| Dark blue/purple premium shell | Dark theme tokens use deep navy surfaces, purple accent, translucent cards, and rounded radii. | Matched |
| Left app navigation with brand | Sidebar shows two-line Game Library Manager branding, icon navigation, collapse control, and info card. | Matched |
| Top search inside content | Search is placed in the content header with debounced existing search behavior. | Matched |
| Lightweight Status/Sort controls | Existing filter/view popovers are exposed as Status and Sort controls to preserve behavior. | Functionally matched |
| Featured game hero | Hero is a live card based on selected or first visible game, with Launch and Details actions. | Matched without cover art |
| Right details panel | Existing editable details panel remains the right pane. | Functionally matched |
| Bottom Recent/Updates/Health cards | Dashboard summary strip uses live library, update, and health data. | Matched |
| Exact artwork and game covers | Existing icon/grid asset pipeline is preserved; static mock artwork is not embedded. | Intentional difference |

## Old-to-new UX mapping

| Old UX feature | New location / behavior | Preserved |
| --- | --- | --- |
| Search by title/tags/notes | Content header search field | Yes |
| Status/confidence/type filtering | Status popover in content header | Yes |
| Sort, grid/list, browse modes | Sort popover in content header | Yes |
| Quick filters: all/missing/updates/source | Library toolbar segmented control | Yes |
| Scan shortcuts | Library toolbar Scan button and Tools menu | Yes |
| Check updates | Library toolbar Updates button, sidebar Updates nav, summary card button | Yes |
| Health checks | Sidebar Health nav and summary card | Yes |
| Game selection | Grid selection updates details and hero | Yes |
| Game launch | Grid play, details play, and hero Launch | Yes |
| Details visibility | Details toggle plus hero Details | Yes |
| Multi-select and batch actions | Existing select toggle and batch toolbar | Yes |
| Collections | Sidebar collection navigation and existing hidden compatibility buttons | Yes |
| Settings/tools/import/archive actions | Tools menu and existing dialogs | Yes |
7 changes: 7 additions & 0 deletions src/app/ui/main_window/collection_mixin.py
Original file line number Diff line number Diff line change
Expand Up @@ -129,13 +129,16 @@ def _on_nav_changed(self: "MainWindow", key: str) -> None:
grid = getattr(self, "grid", None)
health = getattr(self, "health", None)
updates = getattr(self, "updates", None)
dashboard_cards = getattr(self, "dashboard_cards", None)

if key == "health":
self.rename_collection_btn.setEnabled(False)
self.delete_collection_btn.setEnabled(False)
self.content_title.setText("Health Checks")
if grid:
grid.hide()
if dashboard_cards:
dashboard_cards.hide()
if health:
health.show()
health.set_games(self._all_games)
Expand All @@ -155,6 +158,8 @@ def _on_nav_changed(self: "MainWindow", key: str) -> None:
self.content_title.setText("Updates")
if grid:
grid.hide()
if dashboard_cards:
dashboard_cards.hide()
if health:
health.hide()
if updates:
Expand All @@ -172,6 +177,8 @@ def _on_nav_changed(self: "MainWindow", key: str) -> None:
updates.hide()
if grid:
grid.show()
if dashboard_cards:
dashboard_cards.show()

if key == "all":
self.rename_collection_btn.setEnabled(False)
Expand Down
2 changes: 2 additions & 0 deletions src/app/ui/main_window/ui_mixin.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ def _render(self: "MainWindow") -> None:
start = time.perf_counter()
self._render_count += 1
self.grid.set_games(self._filtered)
if hasattr(self, "_update_dashboard_cards"):
self._update_dashboard_cards()
if self._selected_game_id is not None:
g = self._get_game(self._selected_game_id)
self.details.show_game(g)
Expand Down
Loading
Loading