Dokumentation zu ControlElement UIDs
====================================

Die UIDs (Unique Identifiers) der Steuerelemente sind Id-Nummern, mit denen sich die Steuerelemente
gegenseitig referenzieren, um festzuhalten, was das nächste Steuerelement im Programm ist.

Wenn ein Pfeil (Pfad) vom Steuerelement A zum Steuerelement B zeigt, dann wird in A die UID von B
gespeichert. Von A können aber mehrere Pfade weggehen. Deshalb sind die Pfade bei A indiziert:
0 ist der Standard-Pfad, 1 ist z.B. bei einer if-Struktur der else-Pfad, ...
Auf die UIDs der nachfolgenden Steuerelemente (im Beispiel hier Steuerelement B) greift man mit
folgenden Methoden zu: getNextControlElement() und setNextControlElement(). Bei Beiden kann der
Pfad-Index angegeben werden - wenn er nicht angegeben wird, wird immer der Standard-Pfad (Index 0)
angenommen.

Die UIDs müssen natürlich pro FlowDiagram(-Model) eindeutig sein, können aber ansonsten beliebig
gewählt werden. FlowDiagramModel stellt die Methode suggestNewControlElementUID() bereit, die eine
freie UID vorschlägt. So, wie diese Methode momentan implementiert ist, sucht sie die größte
existierende UID und inkrementiert diese. Das hat den Vorteil, dass das FlowDiagram diese
(verlangsamende) Methode nur einmal ganz am Anfang aufgerufen werden muss. Ab dann die ein Counter
bei jeder Vergabe einfach inkrementiert werden, und stellt damit wieder eine freie UID dar.
Dieser Counter ist übrigens NICHT im FlowDiagramModel, sondern im FlowDiagram! Im FlowDiagramModel
würde er mitgespeichert werden; wenn dann aber die Datei in einem anderen Programm modifiziert wird,
kann das zu Inkonsitenz führen.
Jetzt denkt man sich vielleicht: Die allererste UID kann doch einfach immer 1 sein? Man muss aber
bedenken, dass auch FlowDiagramModels gespeichert und wieder geöffnet (wiederhergestellt) werden können,
und da sind wahrscheinlich schon einige UIDs vergeben... Darum wird eben beim Erstellen des
Ablaufdiagramms der ControlElementUIDCounter auf FlowDiagramModel.suggestNewControlElementUID() gesetzt.

Wenn also RoboKIDE nicht falsch umprogrammiert/geändert wird bleiben die UIDs der ControlElements
eindeutig.