aura-view: Vorschau der AURA-Dateien

AURA

aura-view zeigt Dialoge, Screens, Komponenten und preview-Blöcke aus .aura-Dateien mit dem dynamischen Loader. Das native Werkzeug nutzt BasicHost: grauer Hintergrund, Screens auf der ganzen Fläche, Komponenten mit Rand und Dialoge mittig auf einem weißen Rahmen. Theme, Bilder und Schriften lassen sich über Optionen laden.

Argumente erhalten Platzhalter, sofern eine Preview keine Werte vorgibt ("test-<name>", 0, false, #808080); Datensätze je Feld und Listen von Datensätzen einen Eintrag. Bei Fehlern bleibt der letzte fehlerfreie Stand sichtbar; Diagnosen nennen Datei, Zeile und Spalte. Die Vorschau führt keinen Anwendungsablauf aus.

Aufbau: Kern und Host

Teil Ort Aufgabe
Kern libs/aura-preview (aura::preview) Schattenverzeichnis, Auswahl, Schalter, Bauen über den Loader, Tippen und Prüfen, PNG, Galerie, Server-Protokoll, Fenster, run() mit allen Optionen
Host aura/preview/host.h was zur App gehört: Kontext, Gerät(e), Hintergrund, Fläche für Screens und Komponenten, Vordergrund, Rahmen für Dialoge, Optionen und Zustand für den Server, fehlende Übersetzungen
BasicHost libs/aura-preview ohne App: grauer Hintergrund, Screens auf der ganzen Fläche, Komponenten mit Rand, Dialoge mittig auf Weiß

Ein eigenes Vorschauwerkzeug kann Host implementieren und seine Factory an run() übergeben:

cpp
int main(int argc, char** argv)
{
	return aura::preview::run(argc, argv, MyHost::create,
		{.name = "my-view"});
}

Aufruf

bash
build/dev/tools/aura-view/aura-view examples/hello
Option Wirkung
<dir> Verzeichnis mit .aura-Dateien, einschließlich Unterordnern.
--dialog <name> anzuzeigender Dialog oder Screen; sonst der erste
(ohne Modus) Fenster. Gespeicherte Änderungen erscheinen nach höchstens einer halben Sekunde. Klicks lösen die Signale aus, die ins Log gehen. Fehler gehen nach stderr.
--render <file.png> rendert einmal und beendet sich (Exit-Code 2 bei Fehlern in den Dateien)
--render-previews <dir> [--compare <refdir>] rendert jede Preview als <dir>/<Gerät>/<Ziel>-<Titel>.png; mit --compare Vergleich mit <refdir>/<Gerät>: DIFF, NEU (keine Referenz) und WEG (Referenz ohne Preview) ergeben Exit-Code 1
--list-devices Geräte des Hosts; BasicHost bietet ein Gerät namens default.
--lint Unbekannte theme.-Werte: Fehler, Exit-Code 1. Fehlende Übersetzungen: Warnungen, sofern der Host sie meldet.
--server Render-Server für die VS-Code-Vorschau (siehe unten)
--device <b>x<h>, --assets <dir>, --fonts <dir>, --theme <datei.json> BasicHost: Bildschirmgröße (Standard 1280x800), Bilder und Dateien von source:, Schriften, theme.<name> als JSON ("#rrggbb" ist eine Farbe, Zahlen und true/false als solche, sonst Text)

Pixelvergleich

bash
build/dev/tools/aura-view/aura-view examples/hello --render-previews /tmp/aura-previews
build/dev/tools/aura-view/aura-view examples/hello --render-previews /tmp/aura-previews --compare references

Die Ausgabe liegt unter default/. Nur deklarierte Previews werden gerendert; Animationen stehen am Anfang. Nachträglich vom C++-Programm gesetzte Werte fehlen. Referenzbilder nach Änderungen visuell prüfen.

Ungespeicherte Inhalte

aura-view liest nicht direkt aus <dir>, sondern aus einer Schattenkopie in /tmp/aura-view-<pid>.

So braucht der Loader keine eigene Schnittstelle für Editor-Inhalte.

Server-Protokoll

Über stdin/stdout läuft JSON, eine Zeile pro Anfrage und eine Zeile pro Antwort, in derselben Reihenfolge. Das Log geht nach stderr.

Anfrage Wirkung
{"cmd":"update","file":"/abs/x.aura","text":"…"} ungespeicherter Inhalt einer Datei
{"cmd":"revert","file":"/abs/x.aura"} wieder die Datei von der Platte (nach Speichern oder Schließen)
{"cmd":"refresh"} Dateien auf der Platte haben sich geändert
{"cmd":"select","name":"Hello"} anderer Dialog, Screen, Komponente oder Preview ("Hello: Sample")
{"cmd":"set","name":"view","value":"thanks"} Zustand, bool-, string-, int- oder real-Property des gezeigten Elements, live
{"cmd":"options","largeText":true,"contrast":false,"language":"EN","scale":1} Darstellung; scale skaliert das PNG
{"cmd":"press","x":160,"y":733,"down":true} Finger auf (gedrückter Zustand) bzw. ab (false, Tap auf demselben Node)
{"cmd":"move","x":160,"y":600} Finger bewegt sich, während er gedrückt ist: onDrag, ab 10 px zieht er einen Scroll (wie in der App, aura::ui::InputDriver)
{"cmd":"tap","x":160,"y":733} Tap
{"cmd":"render"} PNG auch ohne Änderung
{"cmd":"gallery","file":"/abs/x.aura","scale":0.5} gallery: die Previews der Datei als PNG (name, title, png); Komponenten auf ihre Fläche zugeschnitten und in Originalgröße, Dialoge und Screens mit scale
{"cmd":"inspect","x":160,"y":733} die Elemente an dem Punkt, innerstes zuerst: inspect mit file, line, column, type, id, name und Rechteck (x, y, width, height)
{"cmd":"frame","ms":40} Animationen um ms weiter (höchstens 1000); PNG, wenn eine lief

Felder in jeder Anfrage: Ein optionales "id" kommt in der Antwort zurück.

Inhalt jeder Antwort:

Die erste Antwort kommt beim Start ohne Anfrage (id ist null).

VS Code

Die Erweiterung tools/aura-vscode (ab 0.3.0, Animationen ab 0.4.0, Zustände und Previews ab 0.10.0, Geräte und Seitenleiste ab 0.12.0, Preview-Dropdown und „State …“ ab 0.13.0, Inspektor ab 0.14.0, Werte, Galerie, Farben, Definition und Umbenennen ab 0.15.0) startet aura-view --server für aura.preview.directory (Standard app/ui), wenn die aktive .aura-Datei darunter liegt, sonst für ihren eigenen Ordner.

Öffnen: „AURA: Vorschau öffnen“, der Vorschau-Button in der Titelleiste des Editors oder Ctrl+K V.

Konfiguration für ein natives AURA-Workspace (settings.json):

json
{
  "aura.preview.directory": "${workspaceFolder}/examples/hello",
  "aura.preview.command": "${workspaceFolder}/build/dev/tools/aura-view/aura-view",
  "aura.preview.env": {},
  "aura.preview.args": [],
  "aura.preview.delay": 150
}

Grenzen

Interaktive Property-Signale

Die Vorschau führt nicht das C++-Programm aus. Ein Signal nach dem Muster countChanged(int value) übernimmt dort seinen einzigen Parameter automatisch in die mutable Property count. Namen und Werttypen müssen übereinstimmen; bei Zuständen sind nur deklarierte Werte erlaubt. Andere Signale werden wie bisher angezeigt. Der Wert bleibt bei einem Vorschau-Neuaufbau erhalten.

Inline-Handler wie onTap: { state.count += 1; } laufen in Programm, Loader und Vorschau; siehe Inline-Skripte.

Dokumentationsquelle: docs/aura-view.md · Markdown herunterladen

Suche nach Themen, Widgets oder APIs.