Lade...
 

ObjectTree, OTree

ObjectTree, OTreetree.gif (3757 Byte)

ObjectTree(name~aliasName, flags, x, y, w, h)

Parameter
Parameter   Beschreibung
name * Identifikator oder KLASSE::ausdr
aliasName   ein zusätzlicher Identifikator
flags   Flags
x * Position X (in Minicells)
y * Position Y (in Minicells)
w * Breite (in Minicells)
h * Höhe (in Minicells)
  • - Pflichtparameter

Das Tupel (Klasse, Zugriffsausdruck) definiert eine Abbildung auf Modelldaten (siehe FillWindow, DrainWindow). Mit dem ObjectTree können nicht nur die Objekte dieser Abbildung, sondern auch untergeordnete Objekte strukturiert dargestellt werden. Untergeordnete Objekte sind z.B. Elemente einer Collection innerhalb eines übergeordneten Objektes. Welche Collections für untergeordnete Objekte verwandt werden, wird durch eine spezielle SetFormat-Anweisung, mit Flag NODE, festgelegt.

Das "Hinabsteigen über Nodes" kann auch über untergeordnete Objekte erfolgen, so dass beliebig tiefe Hierarchien entstehen können. Rekursive Strukturen werden jedoch, falls das Flag IGNORE_RECURSION (s.u.) fehlt, genauso wie ein Überschreiten der maximalen Anzahl von darstellbaren Objekten, abgefangen (abgebrochen).

Der ObjektTree wird mit folgenden Anweisungen programmiert, die in den meisten Fällen identisch sind mit den entsprechenden Anweisungen für die anderen ObjectBoxen (ObjectList, ObjectListView):

Anmerkungen:
Die hierarchische Struktur der im ObjectTree dargestellten Objektrelationen, macht es erforderlich, dass die allgemeinen Objectbox-Befehle ergänzt werden um Befehle, die dieser Struktur Rechnung tragen. Diese Befehle sind unter "Objecktbox editieren" zusammengefasst.

Um ein einfaches Wechseln zwischen verschiedenen ObjectBoxen zu ermöglichen, sind diese Befehle auch für die anderen ObjectBoxen verfügbar und sind dort auf die einfachen, nicht strukturierten Befehle abgebildet.

Bitmaps, die in einem ObjectTree angezeigt werden sollen, dürfen maximal 256 Farben besitzen und müssen eine Palette haben. Dies lässt sich mit den Grafikformaten .PNG, .BMP, .GIF und .TIF realisieren.

 

Flags
Flag Beschreibung
HIDDEN Die Objektbox bleibt solange unsichtbar, bis Anweisung Show sie auf dem Bildschirm erschienen läßt.
NO_DRAIN Die Objektbox wird zwar von FillWindow gefüllt, aber von DrainWindow ignoriert.
TOOLTIP(mlString) Der angegebene String wird als Hinweistext (Tooltip) eingeblendet, oder, falls ein Event TOOLTIP ebenfalls definiert ist, an diesen übergeben. Das Erscheinen des Tooltips wird vom System automatisch nach eine bestimmten Zeit des Verharrens des Maus-Cursors über dem Windowobjekt ausgelöst. Der String kann mehrsprachig sein. An das Event wird der jeweils zur eingestellten Sprache aktuelle übergeben.
CONTEXTMENU(identifikator) Der Identifikator ist ein Bezeichner eines Items innerhalb einer Menu- oder ContextMenuList-Deklaration. Das unter diesem Item hängende Untermenu wird automatisch beim betätigen der rechten Maustaste eingeblendet. Wird daraufhin ein Menupunkt ausgewählt wird wie zu Item beschrieben die jeweilige Aktion gestartet, in gleicher Weise, als wäre der Menueintrag aus dem Hauptmenu heraus aufgerufen worden.
Zusätzlich kann man jedoch bei Ausführung von SELECT zu dem entsprechenden Item mittels GetCurrentWidget ermitteln aus welchem Windowobjekt heraus der Menupunkt via ContextMenu aufgerufen wurde. Bei einem Ausruf aus dem Hauptmenu liefert GetCurrentWidget NULL zurück.

Soll ein ContextMenu nicht automatisch erscheinen, so kann es (nach Gestaltungsrichtlinie sollte dies als Reaktion auf die rechte Maustaste, also innerhalb MOUSE_CLICK_R erfolgen) mittels PopupMenu auch aus InstantView® heraus aufgerufen werden. In diesem Fall sollte auf die Angabe des Flags CONTEXTMENU verzichtet werden, da sonst das Menu zweimal (einmal automatisch, einmal gesteuert) erscheint.

GRIDMENU(identifikator) Setzt das Gridmenü fest. Der Identifikator ist ein Bezeichner eines Items innerhalb einer Menu- oder ContextMenuList-Deklaration.
IGNORE_RECURSION Beim Einlesen einer Struktur wird nicht kontrolliert, ob ein einzufügendes Objekt bereits an der Einfügestelle als übergeordnetes Objekt oder als eines diesem Objekt wiederum übergeordnetes Objekt (Parent-Parent, usw.) vorkommt.
Bei 0 SetLimit und 0 SetLevels kann dies zu einer Endlosschleife des Programms führen! Wird hingegen mit SetLevels ein komplettes Einlesen unterbunden, die jeweiligen untergeordneten Objekte also erst bei Bedarf eingelesen, ermöglicht dieses Flag, dass die strukturellen Abhängigkeit korrekt dargestellt werden. In diesem Fall kann jedoch ExpandAll bzw. der Druck auf die Taste '/' (Divide) ebenfalls zur Endlosschleife führen.
QUICK_DISPLAY Um zu bestimmen, ob für den jeweiligen Knoten ein Expansionszeichen () angezeigt wird, muss für diesen ermittelt werden, ob Unterknoten vorhanden sind. Da hierzu eventuell sehr viele Objekte geprüft werden müssen (wenn sehr viele Objekte einer Klasse existieren, für die Unterknoten existieren können, jedoch keiner der vorhandenen Objekte die nötige Filterbedingung erfüllt), kann dies jedoch sehr zeitaufwendig sein.
Um sich diesen Aufwand zu sparen, kann dieses Flag gesetzt werden. Dann werden für alle Knoten unterhalb der mit SetLevels gesetzten Stufe grundsätzlich Expansionszeichen gesetzt, auch wenn gar keine Unterknoten existieren. Für den letzteren Fall würde das Expansionszeichen beim Klicken einfach verschwinden, ohne Unterknoten zuzufügen.
MIN_HEIGHT(h) Höhe des Trees fällt in keinem Falle unter den Wert h (Angabe in Minicells). Dies ist vor allem in Kombination mit Attachments von Nutzen.
MIN_WIDTH(w) Breite des Trees fällt in keinem Falle unter den Wert w (Angabe in Minicells). Dies ist vor allem in Kombination mit Attachments von Nutzen.
ACCEPT_DROP Auf der Objektbox können von einer anderen Objektbox mit Drag-and-Drop über den Bildschirm gezogene Objekte abgelegt werden. Was mit den Objekten geschehen soll, muss in der Aktionsliste beschrieben werden (siehe Beispiel)..
HELP(anchor) Help("file~anchor") verbindet das Windowobjekt mit Online-Hilfe im HTML-Format. Wenn kein Filename angegeben wurde, gilt die im Modul festgelegte HTML-Datei.
HELP(n) Möchte man lieber das Help-System der Plattform (OS/2 PM, MS Windows) benutzten, so ist eine ganze Zahl n anzugeben, die auf das entsprechende Hilfe-Fenster verweist. Dabei muss n < 40000 sein.

Hinweis:  Als Online-Hilfe für InstantView® Applikation wird aus Gründen der Portabilität HTML empfohlen.

 

Was passiert bei der Anzeige?

Wenn ein Objekt am Bildschirm dargestellt wird, werden anhand der Formatanweisungen eine Zeichenkette und ggf. ein Bitmap erzeugt. NODEs werden gesondert behandelt. Die Tabelle beschreibt, welche Schritte durchgeführt werden:

  Erste Anzeige 1. Aufklappen 2. und ff. Aufklappen
normal - Zugriffsausdruck auswerten
- In der Collection nach einem Objekt suchen, das auf zu einem Format passt und gleichzeitig gültig ist
- Wenn min. ein solches Objekt vorhanden ist, ist der Knoten aufklappbar
- Zugriffsausdruck auswerten
- Die Objekte der Collection in den Baum einfügen (nur gültige, nur Objekte, die zu einem Format passen)
Keine Beeinflussung oder Steuerung durch ClassiX®, Windows übernimmt diese Aufgabe vollständig
QUICK_DISPLAY - Zugriffsausdruck auswerten
- Wenn die Collection min. 1 Objekt enthält, ist der Knoten aufklappbar
- Zugriffsausdruck auswerten
- Die Objekte der Collection in den Baum einfügen (nur gültige, nur Objekte, die zu einem Format passen)
Keine Beeinflussung oder Steuerung durch ClassiX®, Windows übernimmt diese Aufgabe vollständig

NODEs können bis zu zweimal ausgewertet werden. Wenn ein Makro die Collection erzeugt, sollte hier darauf geachtet werden, dass das Makro mehrmals für den gleichen NODE aufgerufen werden kann!