Hallo,
ich arbeite mich gerade in GEF ein und versuche ein (im ersten Schritt) einfaches Modell zu visualisieren. Es ist ähnlich wie wenn man die Knoten einer bestimmten Ebene eines XML-Dokumentes anzeigt und diese Knoten mit Connections verbindet.
Die Connections haben keine direkte Entsprechung im Modell, sondern sind eben nur ggf. Vorgänger und Nachfolger. Somit ist mir nicht ganz klar was denn getModelSourceConnections() des jeweiligen EditParts zurückliefern soll - so das die Factory dann auch wirklich ConnectionEditParts erstellen kann.
Meine Versuche im EditPart des jeweiligen XML-Knotens eine Instanz für source und eine für target einer eigenen ConnectionModellClass zu erstellen führen zu sichtbaren Ergebnissen - aber leider nicht den gewünschten. Wollkneul oder Chaos sind glaube ich treffende Umschreibungen.
ConnectionModelElement selber merkt sich gerade mal die beiden Nodes, mehr nicht.
Wie GEF die Connections nun aufbaut ist mir nicht ganz klar. So wie ich es verstanden habe merkt sich GEF die Zuordnung von ConnectionModelElement und dem entsprechenden ConnectionEditPart beim erstellen in der Factory. So kann GEF ggf. beim ConnectionModelElement mittels getSource()/getTarget() die beteiligten Objekte ermitteln. Die zu diesen Objekten widerrum gehörenden EditParts hat GEF sich auch gemerkt. Damit liegen alle benötigten Infos vor und es kann gemalt werden. Erscheint mir zumindest im Moment schlüssig. Aber es sieht verdammt noch mal nicht richtig aus!
Irgendjemand eine Idee dazu? Irgendwo soll es auch eine Anleitung geben, wie man sinnigerweise vorgeht, wenn eben nicht alle Infos der View direkt im Modell vorliegen. Aber ich kann es nicht finden. Hat Jemand einen Link für mich?
thx
josch
ich arbeite mich gerade in GEF ein und versuche ein (im ersten Schritt) einfaches Modell zu visualisieren. Es ist ähnlich wie wenn man die Knoten einer bestimmten Ebene eines XML-Dokumentes anzeigt und diese Knoten mit Connections verbindet.
Code:
Knoten 1
|
V
Knoten 2
|
V
Knoten 3
Meine Versuche im EditPart des jeweiligen XML-Knotens eine Instanz für source und eine für target einer eigenen ConnectionModellClass zu erstellen führen zu sichtbaren Ergebnissen - aber leider nicht den gewünschten. Wollkneul oder Chaos sind glaube ich treffende Umschreibungen.
Code:
public class MyEditPart extends AbstractGraphicalEditPart implements NodeEditPart {
private void createConnections() {
if ((node != null) && (node.NextSibling() != null)) {
ConnectionModelElement conn = new ConnectionModelElement(node, node.NextSibling());
addConnection(conn);
}
if ((node != null) && (node.PrevSibling() != null)) {
ConnectionModelElement conn = new ConnectionModelElement(node.nodePrevSibling(), node);
addConnection(conn);
}
}
protected List getModelSourceConnections() {
sourceConnections.clear();
createConnections();
return sourceConnections;
}
}
ConnectionModelElement selber merkt sich gerade mal die beiden Nodes, mehr nicht.
Code:
public class ConnectionModelElement {
private Node source;
private Node target;
public ConnectionModelElement(Node source, Node target) {
this.source = source;
this.target = target;
}
public Node getSource() {
return source;
}
public Node getTarget() {
return target;
}
}
Wie GEF die Connections nun aufbaut ist mir nicht ganz klar. So wie ich es verstanden habe merkt sich GEF die Zuordnung von ConnectionModelElement und dem entsprechenden ConnectionEditPart beim erstellen in der Factory. So kann GEF ggf. beim ConnectionModelElement mittels getSource()/getTarget() die beteiligten Objekte ermitteln. Die zu diesen Objekten widerrum gehörenden EditParts hat GEF sich auch gemerkt. Damit liegen alle benötigten Infos vor und es kann gemalt werden. Erscheint mir zumindest im Moment schlüssig. Aber es sieht verdammt noch mal nicht richtig aus!
Irgendjemand eine Idee dazu? Irgendwo soll es auch eine Anleitung geben, wie man sinnigerweise vorgeht, wenn eben nicht alle Infos der View direkt im Modell vorliegen. Aber ich kann es nicht finden. Hat Jemand einen Link für mich?
thx
josch