Implement the two-pane layout and navigation tree #31

Closed
opened 2026-08-09 19:30:04 +00:00 by hugo · 1 comment
Owner

Goal

Implement the standard two-pane desktop layout and expandable password-store navigation tree.

Scope

  • Render a resizable left sidebar and right content pane, with sensible minimum sizes and persisted presentation preferences only where the shared config supports them.
  • Populate the sidebar exclusively from typed tree/list models returned by crates/storage.
  • Support expand/collapse, selection, keyboard navigation, mouse activation, scrolling, focus indication, and empty/loading/error states.
  • Preserve expansion and selection where stable storage-provided identities allow it after refresh; never infer identity from labels or paths rendered as strings.
  • Opening an entry selects the appropriate viewer/editor state in the right pane; folders are navigation nodes, not entries fabricated by the GUI.
  • Keep filesystem traversal, filtering rules, .gpg-id semantics, and entry ordering in crates/storage.

Acceptance criteria

  • Nested folders can be expanded and collapsed using mouse and keyboard.
  • Sidebar and content pane remain usable at supported window sizes and with long names.
  • Refreshes preserve valid expansion/selection and clear invalid selections safely.
  • Tests cover navigation, expansion, focus transfer, empty stores, and storage errors without repository access from the GUI.
## Goal Implement the standard two-pane desktop layout and expandable password-store navigation tree. ## Scope - Render a resizable left sidebar and right content pane, with sensible minimum sizes and persisted presentation preferences only where the shared config supports them. - Populate the sidebar exclusively from typed tree/list models returned by `crates/storage`. - Support expand/collapse, selection, keyboard navigation, mouse activation, scrolling, focus indication, and empty/loading/error states. - Preserve expansion and selection where stable storage-provided identities allow it after refresh; never infer identity from labels or paths rendered as strings. - Opening an entry selects the appropriate viewer/editor state in the right pane; folders are navigation nodes, not entries fabricated by the GUI. - Keep filesystem traversal, filtering rules, `.gpg-id` semantics, and entry ordering in `crates/storage`. ## Acceptance criteria - Nested folders can be expanded and collapsed using mouse and keyboard. - Sidebar and content pane remain usable at supported window sizes and with long names. - Refreshes preserve valid expansion/selection and clear invalid selections safely. - Tests cover navigation, expansion, focus transfer, empty stores, and storage errors without repository access from the GUI.
hugo added this to the 03 - Cross-platform Iced desktop app milestone 2026-08-09 19:30:04 +00:00
hugo added the enhancement label 2026-08-09 19:30:04 +00:00
Author
Owner

Implemented and pushed in commit 08f74bf (Add desktop navigation tree).

  • Added a resizable Iced pane grid with minimum window/pane sizes, a scrollable navigation sidebar, and a focused content pane.
  • Added storage-owned TreeNodeId values backed by typed EntryPath and DirectoryPath identities; the desktop consumes TreeModel ordering, labels, kinds, and indicators without filesystem traversal or display-string identity inference.
  • Added mouse activation and keyboard navigation for expand/collapse, parent/child, previous/next, first/last, entry opening, Tab focus transfer, and automatic scroll positioning.
  • Added loading, refresh, empty-store, retained-tree error, long-name, and storage-indicator presentation.
  • Refresh preserves only valid typed expansion and selection state. Entry activation uses the shared dirty-document guard, and Cancel restores the active entry selection.
  • Folders only navigate/toggle; only storage-typed entries enter the authenticated editor path.

Review completed against every acceptance criterion. Repository-free desktop tests cover navigation, expansion, activation, focus transfer, empty trees, refresh preservation/removal, long names, and injected storage errors. Verification passed:

  • cargo fmt --all -- --check
  • RUSTFLAGS=-D warnings cargo check --workspace --all-targets
  • cargo clippy --workspace --all-targets -- -D warnings
  • cargo test --workspace
  • native cargo run -p ironstorage-desktop launch smoke test
Implemented and pushed in commit 08f74bf (Add desktop navigation tree). - Added a resizable Iced pane grid with minimum window/pane sizes, a scrollable navigation sidebar, and a focused content pane. - Added storage-owned TreeNodeId values backed by typed EntryPath and DirectoryPath identities; the desktop consumes TreeModel ordering, labels, kinds, and indicators without filesystem traversal or display-string identity inference. - Added mouse activation and keyboard navigation for expand/collapse, parent/child, previous/next, first/last, entry opening, Tab focus transfer, and automatic scroll positioning. - Added loading, refresh, empty-store, retained-tree error, long-name, and storage-indicator presentation. - Refresh preserves only valid typed expansion and selection state. Entry activation uses the shared dirty-document guard, and Cancel restores the active entry selection. - Folders only navigate/toggle; only storage-typed entries enter the authenticated editor path. Review completed against every acceptance criterion. Repository-free desktop tests cover navigation, expansion, activation, focus transfer, empty trees, refresh preservation/removal, long names, and injected storage errors. Verification passed: - cargo fmt --all -- --check - RUSTFLAGS=-D warnings cargo check --workspace --all-targets - cargo clippy --workspace --all-targets -- -D warnings - cargo test --workspace - native cargo run -p ironstorage-desktop launch smoke test
hugo closed this issue 2026-08-10 14:04:00 +00:00
Sign in to join this conversation.