189 lines
5.4 KiB
Markdown
189 lines
5.4 KiB
Markdown
# UI_FUNCTION_BAR_V2_DESIGN.md
|
|
|
|
## 1. Doel en scope
|
|
|
|
Deze stap beschrijft de evolutie van de huidige onderbalk onder de twee panelen naar een compactere, duidelijkere functiebalk in Midnight Commander-stijl.
|
|
|
|
Doel:
|
|
- de balk onder de panelen wordt visueel en functioneel herkenbaar als vaste actiebalk
|
|
- acties blijven direct gekoppeld aan het actieve paneel
|
|
- de balk wordt voorbereid op latere functietoets-labeling zonder nu al functietoetsen te implementeren
|
|
|
|
In scope:
|
|
- compactere horizontale functiebalk onder de twee panelen
|
|
- vaste knopvolgorde
|
|
- duidelijkere relatie tussen actie, actief paneel en selectie
|
|
- ontwerpvoorbereiding voor latere F3-F8 koppeling
|
|
|
|
Out of scope:
|
|
- geen implementatie van `View`
|
|
- geen implementatie van `Edit`
|
|
- geen functietoetsen
|
|
- geen backendwijzigingen
|
|
- geen nieuwe dependencies
|
|
|
|
---
|
|
|
|
## 2. Positie en layout
|
|
|
|
De functiebalk staat vast onder de twee panelen, op de plek van de huidige onderste actiebalk.
|
|
|
|
Layoutdoelen:
|
|
- horizontaal gecentreerd in de beschikbare breedte
|
|
- compact in hoogte
|
|
- kleine, gelijkmatige spacing tussen knoppen
|
|
- visueel duidelijk gescheiden van de paneelzone, maar zonder grote verticale band
|
|
- uitbreidbaar naar extra labels of functietoetsbadges zonder redesign
|
|
|
|
Voorstel:
|
|
- één compacte horizontale rij
|
|
- de rij krijgt een eigen container binnen de footerzone
|
|
- links en rechts geen brede utilityblokken
|
|
- status/fouttekst blijft buiten of onder de functiebalk, zodat de knoppenrij zelf compact blijft
|
|
|
|
---
|
|
|
|
## 3. Vaste volgorde van de knoppen
|
|
|
|
De functiebalk gebruikt exact deze volgorde:
|
|
|
|
1. `View`
|
|
2. `Edit`
|
|
3. `Copy`
|
|
4. `Move`
|
|
5. `Rename`
|
|
6. `MKdir`
|
|
7. `Delete`
|
|
|
|
Reden:
|
|
- sluit aan op klassieke file-manager verwachtingen
|
|
- groepeert navigatie-/inhoudsacties eerst, daarna muterende file-acties
|
|
- houdt de destructieve actie `Delete` aan het einde
|
|
|
|
---
|
|
|
|
## 4. Relatie met toekomstig functietoetsgebruik
|
|
|
|
De functiebalk moet later zonder structurele herbouw koppelbaar zijn aan:
|
|
|
|
- `F3 = View`
|
|
- `F4 = Edit`
|
|
- `F5 = Copy`
|
|
- `F6 = Move`
|
|
- `F7 = MKdir`
|
|
- `F8 = Delete`
|
|
|
|
Ontwerpimplicatie:
|
|
- elke knop moet later een compacte functietoetsbadge of prefix kunnen tonen
|
|
- `Rename` blijft voorlopig zonder vaste F-toets in deze mapping
|
|
- deze stap implementeert nog geen keyboardbindingen of badgegedrag
|
|
|
|
---
|
|
|
|
## 5. Relatie met actief paneel en selectie
|
|
|
|
Alle acties in de functiebalk werken altijd vanuit het actieve paneel.
|
|
|
|
### Geen selectie
|
|
- `View`: disabled
|
|
- `Edit`: disabled
|
|
- `Copy`: disabled
|
|
- `Move`: disabled
|
|
- `Rename`: disabled
|
|
- `MKdir`: enabled
|
|
- `Delete`: disabled
|
|
|
|
### Exact 1 selectie
|
|
- `View`: later afhankelijk van file-type; in deze stap nog niet functioneel
|
|
- `Edit`: later afhankelijk van file-type; in deze stap nog niet functioneel
|
|
- `Copy`: enabled als huidige backendactie geldig is
|
|
- `Move`: enabled als huidige backendactie geldig is
|
|
- `Rename`: enabled
|
|
- `MKdir`: enabled
|
|
- `Delete`: enabled
|
|
|
|
### Meerdere selecties
|
|
- `View`: disabled
|
|
- `Edit`: disabled
|
|
- `Copy`: enabled als alle geselecteerde items compatibel zijn met bestaande backendscope
|
|
- `Move`: enabled als alle geselecteerde items compatibel zijn met bestaande backendscope
|
|
- `Rename`: disabled
|
|
- `MKdir`: enabled
|
|
- `Delete`: enabled
|
|
|
|
### File- of directoryselectie
|
|
- `Copy` en `Move` blijven gebonden aan de huidige backendbeperking
|
|
- zolang backend `file-only` is voor copy/move:
|
|
- selectie met directories blokkeert `Copy`
|
|
- selectie met directories blokkeert `Move`
|
|
- `Delete` blijft werken volgens bestaande backendregels
|
|
- `Rename` volgt bestaande rename-semantiek
|
|
|
|
Belangrijk:
|
|
- de functiebalk toont niet alleen acties, maar reflecteert ook duidelijk welke acties in de huidige context geldig zijn via enabled/disabled toestand
|
|
|
|
---
|
|
|
|
## 6. Scopebeperking
|
|
|
|
Nog niet in deze stap:
|
|
- geen `View`-implementatie
|
|
- geen `Edit`-implementatie
|
|
- geen functietoetsen
|
|
- geen backendwijzigingen
|
|
- geen extra UI-frameworks
|
|
|
|
Deze ontwerpstap gaat dus alleen over de functiebalk zelf, niet over nieuwe actiecapaciteit.
|
|
|
|
---
|
|
|
|
## 7. Impactanalyse
|
|
|
|
Waarschijnlijk te wijzigen bestanden:
|
|
- `webui/html/index.html`
|
|
- `webui/html/style.css`
|
|
- `webui/html/app.js`
|
|
- `webui/backend/tests/golden/test_ui_smoke_golden.py`
|
|
|
|
### Regressierisico
|
|
|
|
Belangrijkste risico's:
|
|
- huidige actieknoppen verliezen hun correcte enabled/disabled logica
|
|
- de relatie tussen actief paneel en actiebalk wordt visueel minder duidelijk
|
|
- keyboard- en klikflows kunnen breken als knop-ids of handlers onzorgvuldig worden vervangen
|
|
- extra compactheid kan ten koste gaan van leesbaarheid op smallere schermen
|
|
|
|
Mitigatie:
|
|
- bestaande action handlers hergebruiken waar mogelijk
|
|
- ids voor bestaande werkende acties stabiel houden of gecontroleerd migreren
|
|
- disabled-logica centraal laten in plaats van per knop ad hoc
|
|
- smoke tests uitbreiden met de nieuwe functiebalkstructuur
|
|
|
|
---
|
|
|
|
## 8. Teststrategie
|
|
|
|
### Smoke/regressietests
|
|
|
|
Aan te passen:
|
|
- `test_ui_smoke_golden.py`
|
|
|
|
Nieuwe of aangepaste checks:
|
|
- functiebalkcontainer aanwezig onder de panelen
|
|
- knopvolgorde in HTML komt overeen met het ontwerp
|
|
- bestaande actieknoppen voor werkende backendacties blijven aanwezig
|
|
- assets blijven correct gemount
|
|
|
|
### Handmatige validatie
|
|
|
|
Te valideren bij implementatie:
|
|
- functiebalk blijft compact op desktop
|
|
- functiebalk blijft bruikbaar op smallere breedte
|
|
- actief paneel blijft bepalend voor de actiecontext
|
|
- disabled/enable toestand klopt bij:
|
|
- geen selectie
|
|
- 1 selectie
|
|
- meerdere selecties
|
|
- gemixte file/directory-selectie
|
|
- bestaande keyboard- en klikselectieflow blijft intact
|