305 lines
7.7 KiB
Markdown
305 lines
7.7 KiB
Markdown
# UI and Interaction Requirements
|
|
|
|
## UI Philosophy
|
|
|
|
The circuit list editor should feel spreadsheet-like and efficient.
|
|
|
|
The main interaction surface is the table itself.
|
|
|
|
The table should not look like a form with permanently visible input fields in every cell.
|
|
|
|
Cells are displayed as static text by default and become editable only when the user intentionally edits them.
|
|
|
|
The editor should support both:
|
|
|
|
- efficient keyboard-based editing
|
|
- low-click mouse interaction
|
|
- drag-and-drop workflows
|
|
|
|
## Cell Editing
|
|
|
|
Cells are displayed as static text by default.
|
|
|
|
A cell enters edit mode when the user:
|
|
|
|
- double-clicks it
|
|
- presses Enter while it is selected
|
|
- starts typing while it is selected
|
|
- presses F2 while it is selected
|
|
|
|
Editing behavior:
|
|
|
|
- Enter confirms the edit
|
|
- Tab confirms and moves to the next editable cell
|
|
- Shift + Tab confirms and moves to the previous editable cell
|
|
- Escape cancels the edit
|
|
- Arrow keys navigate between cells when not editing
|
|
- Arrow keys move the cursor inside text while editing
|
|
|
|
## Row Insertion Shortcuts
|
|
|
|
The editor should support fast row insertion.
|
|
|
|
Required shortcuts:
|
|
|
|
- Ctrl + Plus inserts a new row below the selected row
|
|
- Ctrl + Shift + Plus should be treated the same where keyboard layouts require Shift for `+`
|
|
- Insert may optionally insert a new row below the selected row
|
|
|
|
Insert behavior:
|
|
|
|
- if a circuit or row is selected, insert below it
|
|
- if no row is selected, insert at the end of the active section
|
|
- the new row should immediately focus the display name or device cell
|
|
|
|
## Project Device Sidebar
|
|
|
|
The distribution board editor should show the project device list near the circuit list.
|
|
|
|
Preferred layout:
|
|
|
|
- left sidebar: searchable project device list
|
|
- right main area: circuit list table
|
|
|
|
The project device sidebar should support:
|
|
|
|
- search by name
|
|
- filter by category
|
|
- filter by phase type
|
|
- filter by cost group
|
|
- showing device name
|
|
- showing default display name
|
|
- showing phase type
|
|
- showing quantity and power if available
|
|
- dragging devices into the circuit list
|
|
|
|
## Drag Project Device into Circuit List
|
|
|
|
Project devices can be dragged from the project device sidebar into the circuit list.
|
|
|
|
### Drop into a valid section or free circuit placeholder
|
|
|
|
Creates a new circuit.
|
|
|
|
The new circuit:
|
|
|
|
- receives the next equipment identifier of the target section
|
|
- is inserted at the drop position
|
|
- contains one device row linked to the dragged project device
|
|
- receives an initial display name copied from the project device
|
|
- keeps this copied display name locally
|
|
|
|
### Drop onto an existing circuit identifier / circuit target
|
|
|
|
Adds the device to that existing circuit.
|
|
|
|
The app creates another device row inside that circuit.
|
|
|
|
The device row:
|
|
|
|
- has no own equipment identifier
|
|
- is linked to the project device
|
|
- contributes to the circuit total power
|
|
- appears indented when the circuit contains multiple devices
|
|
|
|
## Free Circuit Placeholder
|
|
|
|
Each section should show a free circuit placeholder at the end.
|
|
|
|
Example:
|
|
|
|
```text
|
|
Lighting
|
|
-1F1 Beleuchtung Flur
|
|
-1F2 Beleuchtung Außen
|
|
-frei-
|
|
```
|
|
|
|
If a device is dropped onto `-frei-`, a new circuit is created.
|
|
|
|
After creation, a new `-frei-` placeholder appears at the end of the section.
|
|
|
|
## Valid Drop Zones
|
|
|
|
A project device may only be dropped into technically valid sections.
|
|
|
|
Default rules:
|
|
|
|
| Condition | Valid section | Prefix |
|
|
|---|---|---|
|
|
| Category = Lighting | Lighting | `-1F` |
|
|
| Phase type = single-phase and not Lighting | Single-phase circuits | `-2F` |
|
|
| Phase type = three-phase and not Lighting | Three-phase circuits | `-3F` |
|
|
|
|
Invalid drop targets should visually reject the dragged item.
|
|
|
|
If the user tries to move a device into another section, show a confirmation dialog.
|
|
|
|
The dialog should explain that moving to another section may change technical classification fields such as:
|
|
|
|
- phase type
|
|
- category
|
|
- numbering section
|
|
|
|
The user can confirm or cancel.
|
|
|
|
The app must not silently change project device data.
|
|
|
|
## Drag Handle Behavior
|
|
|
|
Different drag start areas trigger different behavior.
|
|
|
|
### Drag from equipment identifier / circuit handle
|
|
|
|
Moves the entire circuit.
|
|
|
|
All device rows assigned to the circuit move together.
|
|
|
|
The equipment identifier remains unchanged.
|
|
|
|
### Drag from device area
|
|
|
|
Moves only the selected device row or selected device rows.
|
|
|
|
A device can be:
|
|
|
|
- reordered inside the same circuit
|
|
- moved to another existing circuit
|
|
- moved into the next free circuit placeholder
|
|
- moved to another valid section after confirmation
|
|
|
|
## Moving Devices Between Circuits
|
|
|
|
A device row can be moved from one circuit to another.
|
|
|
|
When moved:
|
|
|
|
- it is removed from the old circuit
|
|
- it is assigned to the new circuit
|
|
- it keeps its own device values
|
|
- it contributes to the new circuit total
|
|
- both old and new circuit totals are recalculated
|
|
- no automatic renumbering happens
|
|
|
|
## Convert Device to Own Circuit
|
|
|
|
A device row can be moved to a free circuit placeholder.
|
|
|
|
When this happens:
|
|
|
|
- a new circuit is created
|
|
- the device becomes the first device row of the new circuit
|
|
- the new circuit receives the next equipment identifier in the section
|
|
- a new free placeholder appears at the end
|
|
|
|
## Multi-Row Selection and Dragging
|
|
|
|
The table should support selecting multiple rows.
|
|
|
|
Selection behavior:
|
|
|
|
- Ctrl + click selects or deselects individual rows
|
|
- Shift + click selects a continuous row range
|
|
- selected rows can be dragged together
|
|
|
|
When multiple selected device rows are moved:
|
|
|
|
- they remain together
|
|
- their internal order is preserved
|
|
- they are inserted as one block
|
|
|
|
When multiple selected circuits are moved:
|
|
|
|
- each selected circuit moves with all assigned device rows
|
|
- internal circuit/device structure is preserved
|
|
- equipment identifiers remain unchanged unless explicitly renumbered
|
|
|
|
Dropping rows at the end of a section compacts visual row order. It does not renumber equipment identifiers.
|
|
|
|
## Delete Behavior
|
|
|
|
Deleting a device row deletes only that device.
|
|
|
|
The circuit itself remains as long as at least one device is assigned to it.
|
|
|
|
If the first visible device of a circuit is deleted and other devices remain, the next device moves up visually.
|
|
|
|
If the last device of a circuit is deleted, ask the user whether to:
|
|
|
|
- keep the empty circuit as reserve
|
|
- delete the circuit completely
|
|
- cancel
|
|
|
|
Deleting never triggers automatic renumbering.
|
|
|
|
## Filtering and Sorting
|
|
|
|
The table should support Excel-like filtering and sorting through column headers.
|
|
|
|
### Filtering
|
|
|
|
Each column header can open a filter menu.
|
|
|
|
The filter menu shows available values in that column.
|
|
|
|
The user can select one or more values.
|
|
|
|
Examples:
|
|
|
|
- filter by room number
|
|
- filter by room name
|
|
- filter by cost group
|
|
- filter by category
|
|
- filter by phase type
|
|
- filter by connection type
|
|
|
|
### Sorting
|
|
|
|
Each column can be sorted ascending or descending.
|
|
|
|
Sorting via table headers sorts complete circuits as blocks.
|
|
|
|
A circuit and its assigned device rows stay together.
|
|
|
|
Sorting must not split devices away from their circuit.
|
|
|
|
Sorting changes only the visual order.
|
|
|
|
Equipment identifiers are not changed by sorting.
|
|
|
|
After sorting, the user may explicitly press "Renumber section".
|
|
|
|
## Column Configuration
|
|
|
|
The table should support configurable columns.
|
|
|
|
Users can:
|
|
|
|
- show columns
|
|
- hide columns
|
|
- reorder columns by drag and drop
|
|
- reset to default column layout
|
|
|
|
Column visibility and order should be stored per user or per project.
|
|
|
|
Hidden columns remain stored and available for calculations.
|
|
|
|
## Undo / Redo
|
|
|
|
Undo and redo should be implemented from the beginning for structural and destructive operations.
|
|
|
|
At minimum, undo / redo must support:
|
|
|
|
- insert circuit
|
|
- insert device
|
|
- delete circuit
|
|
- delete device
|
|
- move circuit
|
|
- move device
|
|
- move multiple selected rows
|
|
- renumber section
|
|
- edit equipment identifier
|
|
- edit cell value
|
|
- synchronize linked project device fields
|
|
- disconnect linked project device
|