Expand,Collapse,ExpandAll,CollapseAll
Expand(windowID, oboxID), Expand(, oboxID), Expand
ExpandAll(windowID, oboxID), ExpandAll(, oboxID), ExpandAll
Collapse(windowID, oboxID), Collapse(, oboxID), Collapse
CollapseAll(windowID, oboxID), CollapseAll(, oboxID), CollapseAll
Parameter: Widgetbezeichner, der sich auf eine Objektbox bezieht.
Stack | Position | Beschreibung |
---|---|---|
Stack(In) | Top | ein Objekt |
Stack(Out) | Top | - |
Bei strukturierten Daten wird das Objekt vom Stack gesucht und bei Expand auseinander-, bei Collapse zusammengeklappt.
Die Varianten ExpandAll und CollapseAll klappen nicht nur das Objekt selber auf bzw. zusammen, sondern auch, rekursiv, alle unter diesem untergeordneten Objekte bis hin zu denen, die keine weiteren untergeordneten Objekte besitzen (Leaves).
Wird NULL als Objekt auf dem Stack übergeben, erfolgen die Aktionen bezüglich des obersten (virtuellen) Knotens (Root), wirken sich also auf die gesamte Struktur aus.
Um sich nicht auf ein Objekt, sondern auf die aktuelle Selektion für die Aktion zu beziehen, sind die korrespondierenden Befehle OboxExpand,OboxCollapse,OboxExpandAll,OboxCollapseAll zu verwenden.
Als interaktive Variante kann der User auf die dargestellten +-Button links neben den Objekten drücken. Die Tasten "+","-","*","/" werden defaultmäßig korrespondierend Expand,Collapse,ExpandAll,CollapseAll zugeordnet. Verzichtet man auf die Definition der Systems-Events dieser Tasten: PLUS,MINUS,MULTIPLY,DIVIDE werden die Default-Aktionen automatisch ausgeführt, es wird also obsolete z.B. "PLUS: GetObjectsSelected Expand" zu definieren.
Die Funktionen Expand / ExpandAll arbeiten nur "nach unten". Möchte man ein Objekt, das tiefer im Tree sitzt anzeigen und den Tree bis zu diesem Element aufklappen, so sind diese Funktionen nicht hilfreich.
Folgendes Makro kann statt dessen als work around benutzt werden:
Define(ExpandObjectInTree) Var(tmpVector) [] -> tmpVector do Dup ifnot { Drop break } Dup tmpVector Insert Get(transaction) loop tmpVector iterate { Expand(, this) } ;
In diesem Beispiel ist allocationTxn das Object, welches im Baum zum Selektieren angezeigt werden soll. Um den Baum also bis hierhin aufzuklappen, müssen alle höheren Positionen aufgeklappt sein. Also wird in der do-loop Schleife rekursiv nach oben gelaufen und die gefundenen höheren Positionen dann in umgekehrter Reihenfolge (zu der Reihenfolge in der Sie aufgesammelt wurden) aufgeklappt.
// expand all upto the object should be selected allocationTXN ExpandObjectInTree allocationTXN Select(, this)