Inhaltsverzeichnis:

Layout im Großen (Sammlung von Informationspartikel -> im View)

org.sociotech.cmf3.view.flow.FlowView < FXView < View < VisualGroup < VisualComponent < javafx.scene.Group

In FlowView.onInit() wird eine neue VisualGroup instantiiert und der Instanzvariable flowItemsGroup zugewiesen.

Weiterhin werden in onInit() über updateDataList() die darzustellenden Informationspartikel aus dem Mashup geladen. Siehe hierzu auch Informationsobjekte - Auswahl

onUpdate() wird regelmäßig aufgerufen (siehe folgenden Abschnitt zu Animation).

In onUpdate() passiert folgendes:

Zu beachten bei der Einbindung externer Ressourcen: Die Klasse FXView hält auf Instanz-Ebene einen org.sociotech.cmf3.configuration.ThemeResourceLoader. Diese Hilfsklasse ermöglicht das Laden von Ressourcen aus Themes, d.h. aus Unterordnern von resources/themes. Eine Referenz auf diesen ThemeResourceLoader muss an alle Unterobjekte, welche Theme-spezifische Ressourcen laden (z.B. FXML- oder CSS-Dateien), weitergereicht werden. Dafür hat VisualComponent eine Instanzvariable themeResources, welche standardmäßig null ist. Sie sollte auf den ThemeResourceLoader zeigen, falls die Komponente von externen, Theme-spezifischen Ressourcen Gebrauch macht. Für weitere Details siehe auch weiter unten "Layout im Kleinen - render()".

Wichtige Klassen (von oben nach unten jeweils Ableitungsbeziehung):

KlasseBeschreibung
javafx.scene.Node
javafx.scene.Group
org.sociotech.cmf3.components.VisualComponentDie wichtigste ...
org.sociotech.cmf3.components.VisualItem
org.sociotech.cmf3.components.FXMLVisualItemUnterstützung der Generierung von view und controller aus FXML-Dateien
org.sociotech.cmf3.view.flow.components.FlowVisualItemaktuell nichts Neues hier ...

Animation

In der Basisklasse CommunityMirror wird Mittels eines JavaFX TimelineBuilders ein JavaFX Timeline-Objekte erzeugt und dann .play() darauf aufgerufen. Die handle()-Funktion ruft dann auf allen Controller-Objekten und View-Objekten die Funktion update() auf, welche wiederum die Funktion onUpdate() aufruft.

Animationen von VisualComponent-Objektion sind aktuell folgendermaßen realisiert:

Layout im Kleinen (einzelne Informationspartikel -> als VisualItem)

Die Model-View-Controller-Idee wird folgendermaßen umgesetzt:

Hinweis: Die MVC-Umsetzung im CMF3 ist nicht "ganz sauber", denn die Klasse FlowVisualItem definiert Callbacks für Touch und MouseEvents etc - übernimmt also einige Aufgaben eines Controllers.

Informationspartikel (also Objekte aus dem Mashup) werden, wie oben ausgeführt, hauptsächlich in der Funktion FlowView.onUpdate() in den Flow eingefügt. Dazu wird die Funktion FlowView.addFlowVisualItem() verwendet.

Informationspartikel können dabei verschiedene Detailgrade haben. Aktuell werden im FlowView die folgenden zwei Detailgrade genutzt:

In der Funktion FlowView.addFlowVisualItem() wird hauptsächlich die Funktion FlowView.createFlowVisualItem() aufgerufen. Diese Funktion erzeugt eine Instanz eines FlowVisualItem und ruft dann die init()-Methode dieser Klasse auf.

In der init()-Methode von FlowVisualItem passiert hauptsächlich der Aufruf der Funktion FXMLVisualItem.loadViewAndController().

In loadViewAndController() wird folgendes gemacht

VisualItems, welche Theme-spezifische externe Ressourcen einlesen, sollten dafür wenn möglich den ThemeResourceLoader verwenden.
In den implementierten FlowVisualItems ist der Ablauf derzeit wie folgt:

  1. Es wird überprüft, ob das FlowVisualItem eine gültige Referenz auf einen ThemeResourceLoader enthält (da das Setzen dieser Variable durch das View optional ist - siehe oben).
  2. Existiert ein ThemeResourceLoader, wird die Ressource durch dessen Schnittstelle geladen, d.h. aus dem jeweiligen Unterverzeichnis unterhalb von resources/themes. Das aktuelle Theme kann in der Konfiguration geändert werden.
  3. Existiert kein ThemeResourceLoader, wird die externe Ressource aus einem fest im Code angegebenen Verzeichnis geladen, z.B: "resources/flow", und es wird eine entsprechende Warnung ins Log gegeben. Langfristig, wenn alle VisualItems erfolgreich auf die Nutzung des ThemeResourceLoaders umgesattelt sind, kann dieser Code-Pfad und die dazugehörigen Ressourcendateien entfernt werden.

CSS: Bei der Definition von JavaFX-Komponenten in den FXML-Dateien kann CSS verwendet werden. Dafür wird ein in FlowView.onInit() geladenes "theme.css" genutzt. Weitere CSS-Dateien können bei Bedarf direkt in FXML-Dateien nachgeladen werden.