Benutzer:Strittm/RefactoringHiwi/PropertySheetzuGraphitiEditor
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.