DDF-Handbuch / Teil B – GUI-DDF (SVG)

GUI-Variablen & Events

In SVGANIMATE- und SVGEVENT-Formeln stehen neben den normalen Formelvariablen diese Namensräume zur Verfügung. Unbekannte Namen sind lokale Variablen des Widgets und bleiben zwischen den Zeichenvorgängen erhalten.

$.GUI.* – Kachel und Theme

Variable Bedeutung
$.GUI.W, $.GUI.H Kachelgröße in Pixeln
$.GUI.SCALE aktueller Skalierungsfaktor
$.GUI.WIDGETTYPE Größenklasse aus den Pixelmaßen (0, 1, 501…1008, siehe Konzept)
$.GUI.SIZE vom System übergebener Größenparameter
$.GUI.COLORBKG / COLORFRG / COLORFNT Theme-Farben Hintergrund / Vordergrund / Schrift
$.GUI.FONTLABEL Schriftgröße für Beschriftungen
$.GUI.FONTVALUE Schriftgröße für Werte (korrigiert 04.11.2026: liefert jetzt den Wert-Font)
$.GUI.SYSTEM Neu: Systemnummer des Elements (isys)
$.GUI.LANGUAGE Neu: Sprache des Displays (webviserdisplay[0].ilanguage)
$.GUI.VERSION Neu: Version des Displays (webviserdisplay[0].iversion)
$.GUI.HWID Hardware-ID des Displays (webviserdisplay[0].ihwid)
$.GUI.LOGINLEVEL Neu (09.11.2026): Anmelde-/Berechtigungsstufe laut grafikMenuConfig_getLogStateLevel(). Werte siehe Tabelle unten.
Wert Bedeutung
0 nicht angemeldet
1 User
2 Techniker für Parameterebene
3 Installateur

(Quelle: Aussage Hartwig Weidacher, 09.11.2026.)

Beispiel: Edit-Symbol nur für Techniker und Installateur zeichnen:

IF $.GUI.LOGINLEVEL >= 2 THEN
    GUI.paintSVG('Edit',0,0,40,40,0,'X','');
ENDIF;

Systemvariablen des Objekts

Variable Bedeutung
$.CTRLVAR.<name> Variable relativ zum aktuellen Element, z. B. $.CTRLVAR.rgstate[0], $.CTRLVAR.sg[1], $.CTRLVAR.isys. Wird über getsetbyName(…, BASE, …) aufgelöst (geändert 09.11.2026).
$.CTRLROOTVAR.<pfad> Variable relativ zur Wurzel des Controllers, z. B. $.CTRLROOTVAR.heiz.an0.rgstate[0]. Auflösung über getsetbyName(…, ROOT, …).
$.CTRLMAINVAR.<pfad> wie ROOT, aber auf den Haupt-Controller (bei Verbundsystemen); Auflösung über getsetbyName(…, MAIN, …).

Entfernt (beabsichtigt, 09.11.2026)

$.VARLOCAL, $.VARGLOBAL und $.VARMAIN werden nicht mehr ausgewertet. Alte DDF müssen umgestellt werden, typischerweise auf $.VAL.<alias> / $.VAR.<alias> (varmap-Alias) oder auf $.CTRLVAR / $.CTRLROOTVAR / $.CTRLMAINVAR (Element-/Controller-Pfad). Siehe Änderungen.

Namen werden intern kleingeschrieben. Schreiben ($.CTRLVAR.x := wert;) sendet den Wert an das System.

Neu (04.11.2026)

Stand gSvg.cpp vom 04.11.2026.

Keine Typpräfixe mehr (09.11.2026)

Die früheren Präfixe d/i/r/s am Variablennamen gelten für $.CTRLVAR / $.CTRLROOTVAR / $.CTRLMAINVAR nicht mehr. Der Name wird relativ zu BASE / ROOT / MAIN direkt über getsetbyName aufgelöst (Aussage Hartwig Weidacher, 09.11.2026).

$.VAL.* / $.VAR.* und $.ISVAL.* / $.ISVAR.*

Variable Bedeutung
$.VAL.<alias> bzw. $.VAR.<alias> liest/schreibt eine Variable über ihren Alias (varmap)
$.ISVAL.<alias> bzw. $.ISVAR.<alias> Rückgabewert der Alias-Abfrage (> 0 = vorhanden). Zum Prüfen vor dem Lesen.
IF $.ISVAL.temperature > 0 THEN
    t := $.VAL.temperature;
ENDIF;

(Schematisches Beispiel.) $.VAL / $.VAR ersetzen die entfernten $.VARLOCAL / $.VARGLOBAL / $.VARMAIN.

Häufig genutzte Elementvariablen (aus der Visualization Library): sg[n] (Namen), rgstate[n] (Werte), sgunit[n] (Einheiten), ralarmmin[n] / ralarmmax[n], rmin / rmax, rToday[n] / rYesterday[n], isys (Systemnummer), iindex (Elementindex).

$.STYLE.* – CSS zur Laufzeit

farbe := $.STYLE.tile.fill;           /* liest .tile { fill } der ersten Vorlage */
$.STYLE.Qual.tile.fill := '#203050';  /* setzt .tile { fill } der Vorlage 'Qual' */

$.MOUSE.* – Ereignisse (SVGEVENT)

Variable Bedeutung
$.MOUSE.DOWN 1 im Moment des Drückens (Flanke)
$.MOUSE.UP 1 beim Loslassen
$.MOUSE.PRESSED 1, solange gedrückt
$.MOUSE.MOVING 1 bei Bewegung
$.MOUSE.X, $.MOUSE.Y Position in Pixeln der Kachel
$.MOUSE.HANDLED auf 1 setzen, wenn das Widget das Ereignis verarbeitet hat (sonst greift die Standardbehandlung, z. B. Öffnen der Detailseite). Neu: Wurde das Drücken (DOWN) behandelt, gilt das zugehörige Loslassen (UP) automatisch auch als behandelt.

Beispiel aus DEMO_DDF.csv: Nur ein Klick ins rechte untere Viertel wird vom Widget übernommen.

IF ($.MOUSE.X >( $.GUI.W/2)) && ($.MOUSE.Y >( $.GUI.H/2))THEN
    $.MOUSE.HANDLED:=1;
    test:=$.VAL.temperature;
ELSE
    $.MOUSE.HANDLED:=0;
ENDIF;

(Das DEMO_DDF verwendete früher $.VARLOCAL / $.VARGLOBAL; diese Namen sind entfernt. Beispiel auf $.VAL umgestellt.)