Benutzer:Strittm/RefactoringHiwi/PropertySheetzuGraphitiEditor

Aus SDQ-Wiki

Graphiti Editoren Property Sheets hinzufügen

Dieser Artikel beschreibt das Hinzufügen von Proprty Sheets zu Graphiti Editoren. Besonders bei dieser Vorgehensweise ist, dass die Properties in verschiedenen Plugin's definiert sind und zur Laufzeit dem Editor hinzugefügt werden.

Das Vorgehen orientiert sich an der Prototyp-Implementierung dieses Editors.

Definieren eines Core PropertySheet (Core)

  • Hierfür müssen zwei Klassen implementiert werden.
    • ZeroPropertiesSheet: Darin werden die Control definiert und was bei einem Refresh geschehen soll
    • ZeroPropertiesFilter: Definiert einen Filter, sodass das Property Sheet nur aufgerufen wird, wenn es sich um ein Zero Objekt handelt.

Registrieren des PropertySheet in der plugin.xml

Hierzu sind drei Schritte notwendig.

1. Definieren eines PropertyContributors

  <extension
       point="org.eclipse.ui.views.properties.tabbed.propertyContributor">
       <propertyContributor
             contributorId="Core Editor Type.PropertyContributor">
           <propertyCategory category="Graphiti">
           </propertyCategory>
       </propertyContributor>
   </extension>

  • WICHTIG!: Die Contributor ID muss mit der DiagramType->Type Definition übereinstimmen und folgendes Format haben: "My Diagram Type Def.PropertyContributor". Ist das nicht der Fall, erkennt Graphiti nicht, dass es sich um ein Property Sheet für Graphiti handelt.

2. Definieren des Property Tab

Jeder Property Contributor enthält ein oder mehrere Tabs, welche wiederum Sections beinhalten. Aus diesem Grund muss für unser Property Sheet zunächst ein Property Tab definiert werden.

   <extension
         point="org.eclipse.ui.views.properties.tabbed.propertyTabs">
      <propertyTabs
             contributorId="Core Editor Type.PropertyContributor">
      <propertyTab
            category="Graphiti"
            id="graphiti.main.tab"
            label="Main">
       </propertyTab>
      </propertyTabs>
   </extension>

  • Dieser Tab enthält
    • die Contributor ID
    • die oben definierte Category
    • definert ein Label, welches in der PropertyView angezeigt wird
    • eine eigenes ID für den Tab

3. Definieren der Property Section

In der Section werden nun die Elemente definiert, welche für die Darstellung des Property Sheet verantwortlich sind.

  <extension
         point="org.eclipse.ui.views.properties.tabbed.propertySections">
       <propertySections
             contributorId="Core Editor Type.PropertyContributor">
           <propertySection
                 class="editor.ZeroPropertiesSheet"
                 filter="editor.ZeroPropertyFilter"
                 id="cm.editor.tab"
                 tab="graphiti.main.tab">
           </propertySection>
       </propertySections>
   </extension>

  • Dieser Tab enthält
    • die Contributor ID
    • das oben definierte Tab
    • Referenz auf die oben implementierten Klassen (ZeroPropertiesSheet und ZeroPropertyFilter)
    • eine eigenes ID für die Section

Hinzufügen von Property Sheets aus externen Plugins (Ext)

  • Analoges Vorgehen zu oben.
    • Definieren der Filter- und PropertySheet-Klasse
    • In diesem Fall wurde von ZeroPropertiesSheet geerbt, da das Property Sheet aus dem externen Plugin das Zero Property Sheet nur erweitern sollte.

Das Registrieren des OnePropertiesSheet erfolgt in zwei Schritten.

1. Definieren eines neuen Tab

      <extension
         point="org.eclipse.ui.views.properties.tabbed.propertyTabs">
      <propertyTabs
             contributorId="Core Editor Type.PropertyContributor">
      <propertyTab
            category="Graphiti"
            id="graphiti.ext.tab"
            label="Ext">
       </propertyTab>
      </propertyTabs>
   </extension>

  • Wichtig ist, dass die Tab-Definition die gleiche Contributor ID besitzt wie im oberen Teil.

2. Definieren der Section

    <extension
         point="org.eclipse.ui.views.properties.tabbed.propertySections">
       <propertySections
             contributorId="Core Editor Type.PropertyContributor">
           <propertySection
                 class="editor.extension.OnePropertiesSheet"
                 filter="editor.extension.OnePropertyFilter"
                 id="cm.editor.ext.tab"
                 tab="graphiti.ext.tab">
           </propertySection>
       </propertySections>
   </extension>

  • Das definieren dieses ExtensionPoint erfolgt analog zu oben. Es müssen lediglich die Attribute angepasst werden.