This document formally defines the primary user-interface shell components used across FairWindSK. Use these names consistently in code comments, pull requests, bug reports, and contributor documentation.
These definitions are intentionally platform-neutral and apply to macOS, Windows, Linux, Raspberry Pi OS, Android, and iOS unless a platform-specific limitation is called out elsewhere.
On Android 13/API 33 and newer, FairWindSK may optionally be selected as the system Home app. Native Android activities launched from a FairWindSK tile run in Android's task model rather than inside the Application Area; returning to FairWindSK restores its launcher surface. This is the sole native-application exception to the otherwise single-window embedded-content policy.
While FairWindSK is the selected Home app, missing hardware Back, Home, and App Switch keys are replaced by touch-friendly Bottom Bar controls. The recent-application control opens an in-window Bottom Bar strip populated only by native activities launched through FairWindSK, preserving the single-window shell and avoiding privileged Android system-recents APIs.
+----------------------------------------------------------------------------------+
| Top Bar |
| app icon | data widgets | current application name | date/time | status icons |
+----------------------------------------------------------------------------------+
| |
| Application Area |
| |
| +-------------------------------+ |
| | Application Area vertical | |
| | drawer | |
| +-------------------------------+ |
+----------------------------------------------------------------------------------+
| Bottom Bar |
| open web apps | main application icons | Signal K status |
+----------------------------------------------------------------------------------+
| Bottom Bar horizontal drawer (opens upward when active) |
+----------------------------------------------------------------------------------+
The Top Bar is the UI area showing:
- the application icon
- the data widgets if available, for example the coordinates
- the current application name
- the date/time
- the status icons
- Present global, always-available status and identity information.
- Preserve a stable layout even while the Application Area content changes.
- Keep high-priority operational cues visible without requiring the operator to leave the current application.
- Content must remain readable at normal helm distance.
- Data widgets must not crowd out the application name or critical status icons.
- Iconography and spacing should remain touch-friendly and visually stable across comfort presets.
The Bottom Bar is the UI area showing:
- the currently opened web applications in a scrollable area
- the main application icons:
MyData,POB,Autopilot,Apps,Anchor,Alarms,Settings - the Signal K status:
Stream,API,messages
- Provide fast application switching and core vessel-function entry points.
- Keep the main application icons spatially stable so muscle memory remains reliable.
- Surface Signal K transport and message health without obscuring application controls.
- The currently opened web-app area must remain scrollable without displacing the main application icons.
- The main application icons must stay visually centered and evenly spaced.
- Labels and icons must remain readable on compact touch displays, including Raspberry Pi deployments.
The Application Area is the UI area between the Top Bar and the Bottom Bar where MyData, Settings, and all Signal K web applications show their UI.
- Host the active primary view.
- Provide the maximum available working area without compromising the persistent shell controls.
- Support both native Qt widgets and embedded web applications behind the same shell model.
- The active view must not visually overlap the Top Bar or Bottom Bar unless a formally defined drawer is temporarily covering it.
- Embedded web content and native widgets must both behave predictably inside the same area.
The Bottom Bar horizontal drawer is a UI element implementing a modal dialog opening upward from the Bottom Bar. The dialog shows, for example, web modal dialogs. Only one dialog at a time can be shown. Multiple dialogs are managed in a stack fashion. The Bottom Bar horizontal drawer can be extended up to temporarily cover the Application Area. The UI of dialogs hosted in the Bottom Bar horizontal drawer must fit inside the dialog, avoiding vertical scrolling.
- Host modal interactions that must temporarily capture user attention.
- Provide a consistent FairWindSK-native presentation for embedded web modal flows.
- Manage nested or sequential dialogs using a stack model while keeping only the top dialog visible.
- It is modal.
- It opens upward from the Bottom Bar.
- Only one visible dialog is allowed at any given time.
- Additional dialogs are pushed and popped in stack order.
- Hosted dialog content must be laid out to fit within the drawer without requiring vertical scrolling.
The Application Area vertical drawer is a UI element implementing a non-modal dialog, or tool palette, opening leftward from the right side of the Application Area. It is used, for example, as a menu for a web application. The user opens the Application Area vertical drawer by clicking on the application icon.
- Expose contextual application tools without blocking the active application.
- Act as a compact tool palette for the current application context.
- Support repeated open/close cycles while preserving the user’s place in the Application Area.
- It is non-modal.
- It opens leftward from the right side of the Application Area.
- It is generally invoked from the current application icon.
- It should size itself to its hosted controls rather than consuming unnecessary application space.
- It must allow the operator to continue interacting with the active application when appropriate.
flowchart TD
TB["Top Bar"] --> AA["Application Area"]
AA --> VD["Application Area vertical drawer"]
BB["Bottom Bar"] --> HD["Bottom Bar horizontal drawer"]
TB --> SHELL["FairWindSK shell"]
AA --> SHELL
BB --> SHELL
flowchart LR
APPICON["Application icon"] --> VDOPEN["Open Application Area vertical drawer"]
WEBMODAL["Embedded web modal request"] --> HDOPEN["Open Bottom Bar horizontal drawer"]
HDOPEN --> STACK["Dialog stack management"]
STACK --> ACTIVE["Single visible modal dialog"]
When contributor-facing or user-facing documentation refers to these areas, prefer the formal names from this document instead of ad hoc phrases such as "top section", "main view", "right menu", or "bottom popup".