7.2 KiB
Flows og Fields: farvet liste + redigeringsvindue
Dato: 2026-09-29 · Status: godkendt i chat ("men kør"), afventer review af denne spec
Formål
Flows- og Fields-fanen er i dag én lang rullende side: listen over flows/marker efterfulgt af den valgte posts redigeringslinjer. Det er svært at overskue (brugerens screenshot 29/9 17:15). Målet:
- Fanen viser kun listen, med farvet status og Start/Stop pr. række.
- Klik på en række åbner et redigeringsvindue (popup) oven på listen med de nuværende linjer.
Succes = man kan se med ét blik hvad der kører/venter/fejler, starte/stoppe en post uden at vælge den først, og redigere i et vindue der lukkes med Luk/ESC — uden at noget af flow-/mark-logikken ændres.
Ikke-mål
- Ingen ændring af flow-/mark-logik, guiderne ("Nyt flow", "Opsæt mark") eller deres trin.
- Oversigt-tavlen og Fields' flåde-visning er uændrede.
- Ingen ny FS25-GUI-skærm/dialog (fravalgt: al rækkekode skulle genbygges; fokus/ESC oven på ESC-menuen er skrøbeligt). "Popup" er et panel inde i samme frame.
Brugeroplevelse
Flows-fanen (liste)
Én række pr. flow: ● navn · varer · kørende/i alt · statustekst · [Start]/[Stop].
| Niveau | Prik/statusfarve | Hvornår |
|---|---|---|
| running | grøn | mindst én traktor kører og ingen er blokeret |
| waiting | gul | startet, men venter: ingen varer at hente, venter på vogn, traktor optaget, holder ved Wait |
| error | rød | kan ikke køre: sidste start afvist (fx ingen vogn), advarsel (!!) |
| stopped | grå | stoppet / aldrig startet |
[Start]/[Stop]bruger den eksisterendeADRunsController.startRun/stopRun(samme regler som knaplinjen, inkl. sprunget-over-besked i højre side).- Klik på rækken (ikke knappen) åbner redigeringsvinduet for flowet.
- Knaplinjen (i dag Tilbage, Start/Stop, Opsæt flow, Nyt flow, Slet) bliver: Tilbage, Nyt flow. Start/Stop sidder på rækkerne; "Opsæt flow" og "Slet" flyttes ind i vinduet.
Fields-fanen (liste)
Nuværende kolonner (Mark, Afgrøde, Plan, Kørsel, Status, Traktorer) + ● forrest og [Start]/[Stop] bagerst.
| Niveau | Hvornår |
|---|---|
| running (grøn) | marken har aktive opgaver der arbejder |
| waiting (gul) | startet men venter: på maskine, vejr, påfyldning, "startes når en maskine er ledig" |
| error (rød) | mangler markør, arbejdsbredde for bred/ukendt, ingen egnet maskine |
| stopped (grå) | ingen plan / stoppet |
[Start]/[Stop]genbrugeronClickFieldStartStop(inkl. "Overtag høster").- Klik på rækken åbner vinduet med markens resumé og [Ret]-linjer.
Redigeringsvinduet (fælles)
- Mørk halvgennemsigtig baggrund over listen; centreret panel (~70 % bredde, ~80 % højde).
- Top: titel ("Rediger: Cow Food" / "Mark F12"), statuslinje i niveau-farve.
- Midte: egen rullende liste med præcis det indhold, der i dag vises under listen:
flow →
fillFlowSummary-linjerne; mark →fillFieldOverview-linjerne. [Edit]/[Ret] åbner trinnet (guiden i enkelt-trin-tilstand) inde i vinduet med Gem/Tilbage som i dag. - Bund:
Luk·Start/Stop·Slet(kun flow). ESC/Tilbage lukker vinduet (ikke menuen); står et trin åbent, går ESC først tilbage til resuméet. - Mens vinduet er åbent, opdateres statuslinjen og listen bagved hvert sekund som i dag.
Arkitektur
Rene funktioner (testbare)
ADFlowView.flowStatus(s)→{level, text}hvors = {running, total, canStop, lastStartSkipped, warning, waitReason, holdReason, stopped}. Afgør niveau efter tabellen ovenfor.ADFieldView.fieldStatus(s)→{level, text}hvors = {working, awaiting, starting, missingMarker, widthProblem, noMachine, hasPlan}.ADFlowView.LEVEL_COLORS(grøn/gul/rød/grå) — flyttes/udleveres fraSmartPickupStorageViews lokale tabel, som også eksporterersetTextColortil genbrug.
GUI
- XML (
SmartPickupFrame.xml): efterboxLayoutetGuiElement id="editOverlay"(skjult) medBitmap id="editBackdrop"(fuld flade, sort ~60 %),Bitmap id="editPanel"(centreret, baggrund som fs25-paneler) medText id="editTitle",Text id="editStatus",ScrollingLayout id="editLayout"(+ slider) og en knaplinje med treButtons (editClose,editStartStop,editDelete). - Rækkeprefabs:
flowPrefabogfieldPrefabfår enBitmap name="dot"(profilspuDot) forrest og enButton name="rowAction"bagerst. Kolonnebredder justeres så rækken stadig er ≈835 px. - Mål-layout for rækker:
addRow/addTextRow/addCellRow/addLinkRow/addGuideRowkloner i dag altid ind iself.boxLayout. Der indføresself.rowTarget(standardboxLayout); vinduet sætter det tileditLayoutmens det fyldes.clearRowsholder klonerne pr. layout, så listen og vinduet kan genopbygges hver for sig. - Ny fil
gui/SmartPickupEditPanel.lua(mixin påSmartPickupFrame,source()s som de andre):openEditPanel(kind, id),closeEditPanel(),fillEditPanel(adEnv),refreshEditPanel(adEnv), knap-callbacks.kind ∈ {"flow","field"}. - Input:
backButtonInfo-callback og ESC tjekker førstself.editPanelOpen(luk trin → luk vindue → normal Tilbage). Klik på backdrop gør intet (blokerer klik til listen bagved viamouseEventder returnerer "brugt"). - Guide i vinduet:
openFlowStep/openFieldStepsætterreturnTo = "panel", så Gem/Tilbage vender tilbage til vinduets resumé i stedet for at lukke guiden til fanen.
Dataflow
Klik på række → openEditPanel(kind, id) → selectedRunId/selectedFieldId sættes (eksisterende felter) →
requestRebuild → rebuild tegner listen i boxLayout og, når vinduet er åbent, vinduets indhold i
editLayout. Start/Stop i række eller vindue kalder de eksisterende controller-funktioner og requestRebuild.
Fejlhåndtering
- Alt nyt GUI-arbejde kører i
self:safe(...)som resten af frame'n; fejl vises i statuslinjen og logges. - Forsvinder flowet/marken mens vinduet er åbent (slettet), lukkes vinduet og statuslinjen siger hvorfor.
rowAction-knappen er deaktiveret når handlingen ikke er mulig (fx mark uden markør → ingen Start).
Test
- luajit:
tests/test_flowStatus.luaogtests/test_fieldStatus.luafor alle niveauer i tabellerne + grænsetilfælde (0 traktorer, stoppet med advarsel, venter + afvist). - Eksisterende tests skal forblive grønne (
test_noStrayGlobalsdækker den nye fil). - In-game (brugeren): liste med farver, Start/Stop pr. række, åbn/luk vindue med klik/Luk/ESC, [Edit] → Gem inde i vinduet, Slet flow fra vinduet, klik på listen bag vinduet gør intet, mark "Overtag høster" virker fra rækken.
Levering
To etaper, hver sin version og in-game test:
- Flows: rene statusfunktioner + fælles vindue + Flows-liste.
- Fields: mark-status + Fields-liste genbruger vinduet.
Risici
- Klik gennem backdrop til listen: afbødes ved at backdrop'en fanger
mouseEvent; fallback: skjul listens rækker (setVisible(false)) mens vinduet er åbent. - Musehjul/rulning i to ScrollingLayouts: hver får sin egen slider; FS25 ruller det layout musen er over.
- Knapper i rækkeprefabs (Button i en klonet Bitmap) er ikke brugt før i modden: onClick sættes efter
clonepr. række (sommakeRowClickable), ikke via XML-callback.