Personnalisation des outils d'élémentCustomizing Element Tools

Dans certaines définitions DSL, vous représenter un concept unique en tant que groupe d’éléments.In some DSL Definitions, you represent a single concept as a group of elements. Par exemple, si vous créez un modèle dans lequel un composant possède un ensemble fixe de ports, vous souhaitez toujours les ports doit être créé en même temps que son composant parent.For example, if you create a model in which a component has a fixed set of ports, you always want the ports to be created at the same time as their parent component. Par conséquent, vous devez personnaliser l’outil de création d’élément pour qu’il crée un groupe d’éléments au lieu d’un.Therefore, you have to customize the element creation tool so that it creates a group of elements instead of just one. Pour ce faire, vous pouvez personnaliser la façon dont l’outil de création de l’élément est initialisé.To achieve this, you can customize how the element creation tool is initialized.

Vous pouvez également remplacer ce qui se passe lorsque vous faites glisser l’outil sur le diagramme ou un élément.You can also override what happens when the tool is dragged onto the diagram or an element.

Personnaliser le contenu d’un outil d’élémentCustomizing the Content of an Element Tool

Chaque outil d’élément stocke une instance d’un ElementGroupPrototype (EGP), qui contient une version sérialisée d’un ou plusieurs éléments de modèle et des liens.Each element tool stores an instance of an ElementGroupPrototype (EGP), which contains a serialized version of one or more model elements and links. Par défaut, l’EGP d’un outil d’élément contient une instance de la classe que vous spécifiez pour l’outil.By default, the EGP of an element tool contains one instance of the class that you specify for the tool. Vous pouvez le modifier en remplaçant Votre_langageToolboxHelper.CreateElementToolPrototype.You can change this by overriding YourLanguageToolboxHelper.CreateElementToolPrototype. Cette méthode est appelée lors du chargement du package DSL.This method is called when the DSL package is loaded.

Un paramètre de la méthode est l’ID de la classe que vous avez spécifié dans la définition DSL.A parameter of the method is the ID of the class that you specified in the DSL Definition. Lorsque la méthode est appelée avec la classe qui vous intéresse, vous pouvez ajouter des éléments supplémentaires dans l’EGP.When the method is called with the class that you are interested in, you can add extra elements into the EGP.

L’EGP doit inclure l’incorporation d’un élément principal des liens vers des éléments auxiliaires.The EGP must include embedding links from one main element to the subsidiary elements. Il peut également inclure des liens de référence.It can also include reference links.

L’exemple suivant crée un élément principal et deux éléments incorporés.The following example creates a main element and two embedded elements. La classe principale est appelée résistance, et il a deux relations d’incorporation pour les éléments nommés Terminal Server.The main class is called Resistor, and it has two embedding relationships to elements named Terminal. Les propriétés du rôle incorporation sont nommées Terminal1 et Terminal2, et les deux ont une multiplicité de 1..1.The embedding role properties are named Terminal1 and Terminal2, and both have a multiplicity of 1..1.

using Microsoft.VisualStudio.Modeling; ...
public partial class CircuitDiagramToolboxHelper
{
  protected override ElementGroupPrototype    CreateElementToolPrototype(Store store, Guid domainClassId)
  {
    // A case for each tool to customize:
    if (domainClassId == Resistor.DomainClassId)
    {
      // Set up the prototype elements and links:
      Resistor resistor = new Resistor(store);
      resistor.Terminal1 = new Terminal(store);
      resistor.Terminal2 = new Terminal(store);
      resistor.Terminal1.Name = "T1"; // embedding
      resistor.Terminal2.Name = "T2"; // embedding
      // We could also set up reference links.

      // Create an element group prototype for the toolbox:
      ElementGroup egp = new ElementGroup(store.DefaultPartition);
      egp.AddGraph(resistor, true);
      // We do not have to explicitly include embedded children.
      return egp.CreatePrototype();
    }
    // Element tools for other classes:
    else
      return base.CreateElementToolPrototype(store, domainClassId);
  }
}

Voir aussiSee Also