Implement and archive Phase 5 form designer

This commit is contained in:
2026-09-06 20:19:57 +02:00
parent e3dc9028bf
commit ce97700a98
27 changed files with 3625 additions and 167 deletions

View File

@@ -43,7 +43,7 @@ Mausmodus und Alternate Screen zurück.
- Die Umgebung zeigt unten anklickbare Tastenkürzel und `00001:001` als
Zeile/Spalte. Der Designer besitzt stattdessen die Properties Bar.
F10 wechselt dort zwischen Menü- und Properties Bar, F2 fokussiert Value.
Die fachliche Formularbearbeitung folgt in Change 05.
Die Formularbearbeitung ist unten beschrieben.
## Speichern und Wechseln
@@ -127,7 +127,7 @@ Library-Symbole/Aufrufvertrag und der native Verbraucher-Nachweis stehen
explizit in [PLAN.md, Phase 6](../PLAN.md). Ein umbenanntes TBC erfüllt
keines der beiden Exportziele.
## Befehlsabdeckung nach Change 03
## Befehlsabdeckung nach Change 05
Alle Referenzbefehle sind in ihrer Menüfolge vorhanden. Fachbefehle der
folgenden Changes sind sichtbar deaktiviert und zeigen einen
@@ -138,17 +138,17 @@ Output-Fokus unterbricht Ctrl+C sofort die Sitzung, ohne eine BASIC-Taste einzur
| Bereich | Rahmenaktion jetzt | Fachaktion im Folgechange |
| --- | --- | --- |
| File | New/Open/Save Project, New Form/Module, Add/Remove File, Save File/As, Load/Save Text, Print (UTF-8-Datei), Shell, Exit | — |
| Edit | Undo, Cut/Copy/Paste/Clear, New Sub/Function | Event Procedures: 05 |
| View | Code/Form-Auswahl, Prozedurauswahl, Included File/Lines, Diagnostics, Designer Menu Bar/Value-Fokus, Output Screen | Grid Lines: 05; Next Statement: 06 |
| Edit | Undo, Cut/Copy/Paste/Clear, New Sub/Function, Event Procedures | — |
| View | Code/Form-Auswahl, Prozedurauswahl, Included File/Lines, Diagnostics, Designer Menu Bar/Value-Fokus, Grid Lines, Output Screen | Next Statement: 06 |
| Search | Find, Selected Text, Repeat Last Find, Change | — |
| Run | Start/Restart/Continue/Pause, COMMAND$, wirksame Startdatei und beide Make-Dialoge | Native Erzeugung: Phase 6 |
| Debug | Vollständiges Menü und Kürzelzuordnung, einschließlich F7/F8/F9/F10 und History | Watches, Watchpoints, Trace, History, Breakpoints, Break on Errors, Set Next Statement: 06 |
| Options | Display, Set Paths, Right Mouse, Save, Syntax Checking einschließlich Zeilenprüfung | Kontext-Hilfe: 07 |
| Window | New Window, Arrange All, Calls/Debug/Help/Immediate/Output/Project, aktive Codeliste, alle Fensterkürzel | Debug/Calls/Immediate-Inhalte: 06; Hilfeinhalt: 07 |
| Designer Tools/Window | Tools-Menü, Formliste und gemeinsamer Fenster-/Modusrahmen | Controls/Toolbox, Color Palette, Menu Design Window: 05 |
| Designer Tools/Window | Vollständige Toolbox einschließlich Spin, Formliste, Color Palette, Menu Design Window | — |
| Help | Vollständiges Menü, About und Help-Fensterrahmen | Index, Contents, Keyboard, Topic, Using Help, Tutorial: 07 |
Editor, inkrementelle Übersetzung und Ausführung sind umgesetzt. Die gesamte
Editor, inkrementelle Übersetzung, Ausführung und Formulardesigner sind umgesetzt. Die gesamte
Phase-5-Abnahme erfolgt in Change 08.
## Programme ausführen
@@ -298,7 +298,7 @@ Erfolge und Diagnosen gehören zu Projektrevision, expandierten Quellen und Form
Stand zurück; ein Fehler macht keinen früheren Erfolg aktuell. Geöffnete
Include-Puffer bleiben maßgeblich gegenüber externen Dateiänderungen. Noch nicht
geöffnete Includes werden erneut vom Loader gelesen und verglichen. Start und
Fortsetzen der VM werden in Change 04 an diese Schnittstelle angebunden.
Fortsetzen der VM verwenden diese Schnittstelle.
Release-Messungen und Aufruf stehen in [tbvm-design.md](tbvm-design.md).
@@ -307,3 +307,80 @@ Die Ausführungstests liegen in `crates/tb-ide/tests/execution.rs` und
`cargo build -p tb-ide && python3 tests/support/ide-execution-pty.py` unter Unix
in einem unsichtbaren PTY die echten Shell-/Terminalübergaben und das Fortsetzen
nach STOP. Das Skript verwendet ausschließlich temporäre Projekte.
## Formulare gestalten
File → New Form öffnet ein neues FRM-Dokument mit 40×15 Zellen. Toolbox
links und Tools-Menü verwenden dieselben Klassenmetadaten: auch Datei-,
Verzeichnis- und Laufwerkslisten, Timer sowie VSpin/HSpin sind enthalten.
Doppelklick auf einen Toolboxeintrag platziert einen gültigen Standard im
gewählten Container (sonst auf der Form); mit Tastatur: Window → Toolbox,
Pfeile, Enter. Ein einfacher Klick oder Tools wählt das Werkzeug zum
Aufziehen auf der Designfläche. Esc beendet die Werkzeugwahl.
Die Vorschau verwendet FormsModel und TextScreen, führt aber keinen
Ereigniscode und keine Timer aus. Timer erscheinen als `[T]`-Marken.
Klicken wählt auch deaktivierte/unsichtbare Controls aus, Ctrl+Klick bildet
Mehrfachauswahlen. Tab/Shift+Tab folgt TabIndex. Drag verschiebt, die acht
Handles skalieren. Pfeile bewegen um eine, Ctrl+Pfeile um fünf Zellen;
Shift+Pfeile ändern die Größe (mit Ctrl ebenfalls fünf). View → Grid Lines
schaltet das Raster. Koordinaten sind relativ zum tatsächlichen Container.
Unzulässige Größen/Positionen werden vor der gesamten Änderung abgewiesen.
Oben wechseln F10 und F11 zwischen Properties Bar und Menü. Klicken auf
die Property-Auswahl öffnet die Klassenproperties; Bild auf/ab blättert
sie auf der Designfläche. F2 fokussiert Value, Ctrl+A ersetzt den Wert,
Enter übernimmt und Esc verwirft die Eingabe. Der rechte Bereich zeigt
Position und Größe auch bei langen Namen/Werten. Boolean-Werte sind
`true`/`false` beziehungsweise `-1`/`0`. Typen, Metadatenbereiche und
Laufzeitregeln werden geprüft; schreibgeschützte Properties bleiben erhalten.
Spin.Style wählt 0 (vertikal, 1×2) oder 1 (horizontal, 2×1); Width/Height
sind bei Spin schreibgeschützt. Explizites Index=0 erzeugt ein Control-Array.
Cut/Copy/Paste/Clear und Undo wirken im Designer auf Controls; die
Textzwischenablage des Editors bleibt getrennt. Container nehmen ihre
Kinder mit. Paste verlangt einen Container und vergibt freie Namen,
wobei die Arraygruppen und expliziten Indizes erhalten bleiben. Eine
Mehrfachaktion ist genau eine Undo-Einheit. Nach Clear/Cut weist ein Dialog
auf erhaltenen, nun ungebundenen Code hin. Code wird nicht gelöscht.
CtlName/FormName ändern auch gebundene Codeverweise und Ereignisnamen
in betroffenen Projektdateien und Includes. Kommentare, Strings und
unabhängige Variablen bleiben erhalten. Beide Projektstände werden
übersetzt und ihre Objektbindungen verglichen. Konflikte oder mehrdeutige
Include-Verweise verhindern die gesamte Änderung. Undo aus einer beteiligten
Datei nimmt sie überall zurück; spätere Änderungen in einer anderen
beteiligten Datei müssen zuerst rückgängig gemacht werden.
Window → Menu Design Window zeigt die Menühierarchie. `+`/Insert fügt unter
dem gewählten Menü (sonst unter der Form) ein, Del löscht, Enter/Edit öffnet
Caption, CtlName, Tag, Index, Flags und Shortcut. `&` markiert Access-Keys,
`-` einen Separator. Leerer Index bedeutet skalar; `0` ist ein Arrayindex.
Die Pfeilbuttons beziehungsweise Ctrl+Links/Rechts ändern die Ebene,
Ctrl+Auf/Ab die Reihenfolge. Änderungen des Dialogs sind gemeinsam rücknehmbar.
Angeboten werden F1F10 mit unterstützten Modifikatoren sowie Ctrl+Buchstaben
außer Ctrl+C, das dem Programmabbruch vorbehalten bleibt. Unbekannte Importwerte
werden nicht als gültige Shortcuts angeboten; Menütitel und Separatoren tragen
keinen Shortcut.
Window → Color Palette bietet getrennte ForeColor-/BackColor-Zeilen. Eine
Farbfläche auf Form/Control ziehen trägt diese Farbe auf. Enter öffnet
zusätzlich den Dialog zum gemeinsamen Auftragen beider Farben auf die
Auswahl oder ausdrücklich die Form. Window bietet außerdem Toolbox, Help
und die Formliste; der Help-Inhalt folgt in Change 07.
F12/Edit → Event Procedures wählt Objekt und erlaubtes Ereignis. Eine
vorhandene gebundene Prozedur wird geöffnet; sonst entsteht ein New-Sub-Rumpf
mit den bestehenden Eventtypen, BYREF-Parametern und gegebenenfalls führendem
`Index AS INTEGER`. DEFtype aus Includes bleibt wirksam. Zweiter Aufruf
öffnet dieselbe Prozedur. Shift+F12/View → Form führt zum zugehörigen
Dokument und Control zurück; View → Code behält die Codeposition. Struktur
und Code bleiben dabei ungespeichert im gemeinsamen Dokument.
Save File/As/Project verwendet den vorhandenen FRM-Writer. Dieser lässt
überflüssige Defaultwerte aus, erhält aber explizites Index=0. Binärimporte
benötigen weiter ein separates Textziel. Die Designer-Tests prüfen alle
Klassen, Geometrie, Properties, Maus/Tastatur, Transaktionen, Ereignisse und
Speicher-Roundtrips. Der CLI-Integrationstest erzeugt eine FRM über dieselben
Designeraktionen und übersetzt sie mit dem echten `tbc build`-Prozess.