Lade...
 

AdjustStructure

AdjustStructure

AdjustStructure(windowID, oboxID), AdjustStructure(, oboxID), AdjustStructure

Parameter:  Bezeichner eines Windows und einer Objektbox

Stack
Stack Position Beschreibung
Stack(In) Top Collection
Stack(Out) Top -

Nachdem eine Collection in einer Objektbox dargestellt wurde, kann die Objektbox interaktiv verändert werden (Obox...-Befehle, FillObox, UpdateObox, RemoveObox sowie das Einfügen neuer Objekte mit Drag/Drop).  Anders als AdjustCollection werden bei strukturierten Daten nicht nur die Änderungen in die Collection zurückgeschrieben, sondern rekursiv auch die Änderungen an allen untergeordneten Objekten (Childs).

Dabei tritt das Problem der doppeldeutigen NODE SetFormats auf:
Treffen auf ein Objekt zwei oder mehr NODE SetFormats (über den Typ) zu, so gibt es zu diesem übergeordneten Objekt (Parent) untergeordnete Objekte (Childs) unterschiedlichen Typs. Wurde nun von einer beliebigen Quelle (z.B. über Drag und Drop) ein neues Objekt zu dem übergeordneten Objekt zugefügt, muss AdjustStructure entscheiden, nach welcher NODE SetFormat-Anweisung dieses in eine Referenz einzuordnen ist. Dieses erfolgt über den Typ des eingefügten Objektes: Von allen in Frage kommenden NODE SetFormat-Anweisungen wird diejenige herangezogen, deren referenzierter Typ am nahesten mit dem Typ des eingefügten Objekt verwandt ist. Bei einer Collection ist z.B. dieser "referenzierte Typ", der Typ der Elemente in dieser Collection.
Kann die Mehrdeutigkeit nicht aufgelöst werden (z.B. mehrere NODE SetFormat-Anweisungen referenzieren den selben Typ), so erfolgt ein Fehler bei AdjustStructure und das betroffene einzufügende Objekt wird nicht eingefügt. Bereits in eine Collection eingefügte (seit dem Einlesen unveränderte) Objekte, bleiben in jedem Fall jedoch unangetastet. Es kann jedoch passieren, dass das Verschieben eines Objektes an genau die Stelle, an der es sich bereits befindet, zu einem Fehler durch Doppeldeutigkeit führt.

Stack
Stack Position Beschreibung
Stack(In) Top Ein Objekt oder NULL
Stack(Out) Top -

Diese Form kann nur für einen  ObjectTree aufgerufen werden.
Im ObjectTree wird das Objekt vom Stack zunächst in diesem gesucht. Sofern es gefunden wurde, werden nun alle Child-Knoten der Darstellung des Objektes im Tree in das Objekt übernommen (zurückgeschrieben). Danach werden auch die Child-Knoten der Child-Knoten abgeglichen. Dann wieder deren Child-Knoten usw. bis durch diese Rekursion die gesamte Struktur ab dem Ausgangsobjekt vom Stack abgeglichen ist.

Zu beachten ist die letzte Einschränkung: Es wird eben nicht der gesamte Tree (ab Root) abgeglichen, sondern nur ab dem Ausgangsobjekt. Dies hat den Vorteil, dass durch ein geeignet gewähltes Ausgangsobjekt die Ausführungszeit reduziert werden kann. Der Nachteil ist, dass unter Umständen Veränderungen außerhalb der Zweiges des Ausgangsobjektes nicht gespeichert werden.
Wird z.B. mit Drag und Drop innerhalb eines Trees ein Objekt verschoben, so ist es erforderlich Start- und Zielobjekt bzw. deren Parentobjekt mit AdjustStructure abzugleichen, um die erfolgte Veränderung auch abzuspeichern. "Auf der sicheren Seite" ist man immer, wenn grundsätzlich nach jeder Veränderung AdjustStructure mit dem (den) Wurzelobjekt(-en) aufgerufen wird. Dies wird immer dadurch erreicht, dass man statt eines Objektes NULL übergibt.