In this tutorial we will see how to add a label to a diagram edge.
The diagram editor will allow to add Objects
linked to other Objects
.
Each link will have an identifier displayed through a dedicated label.
This tutorial has been built with :
LinkedObjects
jfb.examples.gmf.linkedobjects
package jfb.examples.gmf.linkedobjects; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.EObject; /** * @model */ public interface Diagram extends EObject { /** * @model containment="true" */ public EList<Object> getObjects(); }
package jfb.examples.gmf.linkedobjects; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.EObject; /** * @model */ public interface Object extends EObject { /** * @model */ public String getName(); /** * @model containment="true" */ public EList<Link> getLinks(); }
package jfb.examples.gmf.linkedobjects; import org.eclipse.emf.ecore.EObject; /** * @model */ public interface Link extends EObject { /** * @model */ public String getId(); /** * @model */ public Object getTargetObject(); }
EMF Generator Model
named linkedobjects.genmodel
in the model
folder (right click on the LinkedObjects
project, select New
, choose EMF Generator Model
)Annotated Java
and click nextlinkedobjects.ecore
file that has been generated above and by selecting Initialize ecore_diagram diagram file
Dashboard view
: Domain Gen Model
file (linkedobjects.genmodel
)Domain Model
file (linkedobjects.ecore
)linkedobjects.genmodel
fileGenerate Model Code
Generate Edit Code
Generate Editor Code
derive
label on the left of the Tooling Def Model
rectangle of the Dashboard view
linkedobjects.gmftool
as file name and click Next
Diagram
class as Diagram Element
and click Next
Node
column, check only Object
Links
column, check only Link
derive
label on the left of the Graphical Def Model
rectangle of the Dashboard view
linkedobjects.gmfgraph
as file name and click Next
Diagram
class as Diagram Element
and click Next
Node
column, check only Object
Links
column, check only Link
Label
column, check : Object.name
and Link.id
Finish
combine
label on the left of the Mapping Model
rectangle of the Dashboard view
linkedobjects.gmfmap
as file name and click Next
Diagram
class as Diagram Element
and click Next
Select Diagram Palette
wizard page, just click nextSelect Diagram Canvas
wizard page, just click nextMapping
wizard page you should have :Finish
linkedobjects.gmfmap
file generated aboveNode Mapping <Object/Object>
and correct the Tool in the property view (select Creation Tool Object
instead of Creation Tool Link
)Link Mapping <Link{Link.targetObject:Object}/Link>
and :Creation Tool Link
instead of Creation Tool Object
)Diagram Label LinkId
for the Diagram Label
property in the properties viewtransform
label above the Diagram Editor Gen model
rectangle of the Dashboard view
Generate diagram editor
label in the Diagram Editor Gen model
rectangle of the Dashboard view
At this point, when running the diagram editor, you should be able to get something like this :
If you want to change the position of your label, you may add an Alignment Facet
under the Diagram Label LinkId
of the linkedobjects.gmfgraph
file and select BEGINNING
, END
or CENTER
.
For example, with an END
value, we get this (after having re-transformed the Mapping model
into the Diagram Editor Gen Model
and having re-generated the diagram editor :
You may also need to change the default offset of the diagram. In the example above, the labels are far from the edge. To correct it, add an Label Offset Facet
under the Diagram Label LinkId
of the linkedobjects.gmfgraph
file and change the x
and y
values if required.
For example, by leaving x
and y
to 0, we get this result (do not forget to re-generate the Diagram Editor Gen Model
and the diagram editor) :
I hope that this material will be helpful for you. If you want to support it, your help is welcome :
Discussion
bonjour je tiens tout d'abord à vous remercier pour votre excellent tutoriel, en fait je veux bien créer un lien sous forme de flèche ( comme l'association des méta-modèl) avec un rôle, un nom et une cardinalité, mais je sais pas comment faire ??
Merci d'avance pour votre aide
Hmmm…. Voulez-vous parler d'une relation dans un modèle ecore ? ou dans un éditeur de diagramme GMF. Pour le premier cas, l'éditeur graphique ecore inclus dans eclipse avec EMF permet de le faire plutôt facilement et intuitivement. Pour le second cas, je pense que c'est l'objet de ce tutoriel…..
No source code to download? :P
Hi, This tutorial is short, so I choose not to make it available under svn… Sorry !…. Regards, JFB
Bonjour, Je tiens tout d'abord à vous remercier pour ce très bon tuto! En fait, je voulais réaliser un éditeur wysiwyg qui se base sur les composants graphiques(boutons, inputText, chekbox…) et j'ai quelques questions là dessus: 1.Comment insérer les images des composants graphiques dans l'éditeur? 2.Peut on agir sur la “propertySheet” de chaque composant afin d'introduire de nouvelles propriétés et comment récupérer les valeurs saisies dans des variables car j'en ai besoin pour les insérer dans une base de données? 3.Peut on définir sa propre action sur les composants et ajouter un menu contextuel pour ces actions? Vos réponses vont m'aider énormément car je dois choisir entre GMF et GEF afin de remplir ces besoins. Merci d'avance!
Bonjour,
Merci pour ce retour à propos des tutoriaux.
1. Qu'entendez-vous par composants graphiques : voulez vous dire des images ou des dessins tracés algorithmiquement ? Dans les 2 cas, le dessin du ”+” dans le tutorial 5 peut peut être vous aider ?
2. Le moyen le plus simple d'introduire de nouvelles propriétés dans la vue des propriétés reste d'enrichir les entités de votre modèle an y ajoutant des attributs. Ces derniers apparaitront automatiquement sous forme de propriété modifiable. ⇒ Pourriez-vous préciser ce que vous entendez par “variable” ?
3. Je n'ai pas eu l'occasion d'ajouter des action “custom” dans le menu mais cela est à mon avis tout à fait possible ⇒ je regarderai du coté de la classe générée nommée DiagramEditorContextMenuProvider
JFB
Je vous remercie pour l'intérêt que vous avez porté à mes questions! Je m'explique:
1. Je veux insérer juste les images des composants graphiques de base( bouton, inputText, comboBox…)dont j'ai leurs URL ssans les composer ou les tracer.
2. En fait, je veux récupérer les valeurs des attributs ou encore propriétés saisies dans la vue de propriétés pour d'autres traitements (pas seulement la modification du diagramme), de plus peut on par exemple ajouter un comboBox dans la vue de propriété permettant à l'utilisateur de choisir par exemple une couleur parmi plusieurs proposées?
3. Pour réussir à ajouter de nouvelles actions et des menus contextuels, on exploite les classes des packages du plug-in RCP dans GEF (en effet, on crée un projet plug-in RCP et on ajoute à sa liste de dépendances les plug-in GEF. Comment faire ceci avec GMF? Autrement est ce que le plug-in GMF généré est RCP? Suffit il d'ajouter des packages définissants les modifications au plug-in généré?
J'espère que j'ai éclairé davantage mes questions et merci infiniment!
Bonjour,
Je crois que nous risquons d'avoir de nombreux échanges pour que je puisse répondre au mieux à vos questions. Peut être serait-il plus adapté d'échanger par mail. Pouvez-vous me contacter à cette adresse : jfbraz (at) yahoo.fr ?
A bientot,
JFB
Touchwodn! That's a really cool way of putting it!
salut, j'ai crée un éditeur graphique (GMF) de graphe contient une palette(nœud et arc) et j'ai réalisé une interface graphique sous Eclipse ( le plugin window builder pour la création des interface graphique ) je sais pas comment lancer l’éditeur graphique lors d'un clic sur une bouton dans l'interface graphique pour dessiner le graphique quelqu'un peut il m'aider? merci :)