# GMF Property View



## Tomas (15. Okt 2009)

hi,
ich hab ne frage wie ich in gmf meine eigene property page erstelle. ich habe Vierecke und ich will als anfang mal x y height und width in der Property View darstellen. da es aber nicht so viele gute anleitungen gibt, komm ich nicht weiter. 
wer ne ahung?

danke


----------



## Tomas (28. Okt 2009)

so ich hab ein Problem mit dem Adapter der PropertyView. Ich habe "Elemente" die 0-* ElementEvents (bestehend aus 2 strings, prop und value) besitzen. ich habe schon einen neuen Tab für die Propertypage nur weiß ich nicht wie ich es im Model gestallten soll, um in der Propertyview für jedes Stringpaar 1 "Schlüsselwertepaarpropertyteil" zu bekommen. (1. String name der Property, 2. String beschreibung). Diese Events sollen nur angezeigt werden, bearbeitet gehört es nicht. 
Man kann sagen, dass eine Dynamische PropertyView aufgebaut werden soll, da anzahl der Events nicht vorrauszusagen ist.

[Java]
	@Override
	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
		if (itemPropertyDescriptors == null) {
			super.getPropertyDescriptors(object);
			//addPropPropertyDescriptor(object);
			//addValuePropertyDescriptor(object);
			addEvents(object);
		}
		// addElementEventsPropertyDescriptor(((RectangleImpl)
		// object).getElementEvents());
		// addPropPropertyDescriptor(((RectangleImpl)
		// object).getElementEvents().getProp());
		// addValuePropertyDescriptor(((RectangleImpl)
		// object).getElementEvents().getValue());

		return itemPropertyDescriptors;
	}

	protected void addEvents(Object object) {
		ElementEvents ee = ((RectangleImpl) object).getElementEvents();
		for (int i = 0; i < ee.getProp().size(); i++) {
			IItemPropertyDescriptor eventsPropertyDescriptor = new ElementEventPropertyDescriptor(
					((ComposeableAdapterFactory) adapterFactory)
							.getRootAdapterFactory(),
					getResourceLocator(),
					ee.getProp().get(i),
					// getString("_UI_ElementEvents_type"),
					getString("_UI_PropertyDescriptor_description",
							"_UI_ElementEvents_prop_feature",
							"_UI_ElementEvents_type"),
					MypropertiesPackage.Literals.ELEMENT_EVENTS__VALUE, false,
					true, false, ItemPropertyDescriptor.TEXT_VALUE_IMAGE, null,
					null);
			// eventsPropertyDescriptor., value)), i);
			// System.out.println(eventsPropertyDescriptor.getId(object));

			itemPropertyDescriptors.add(eventsPropertyDescriptor);
		}
	}
[/Java]

object ist eine Liste mit Strings; ich will Pro string 1 Property erstellen, da die Liste nur zur darstellung der Eigenschaften dient! Dies funktioniert nicht und ich bekomm nur 1 Property"line" mit dem Format | Value: | "WERT,WERT,..." |  
object ist eine Liste mit Strings
Danke,


----------



## Pitority (7. Dez 2009)

Veilleicht hilft dir das hier weiter:

Take control of your properties

kannst du mir sagen, wie du einen neuen Tab hingekommen hast? ich Muss für mein Modell eine Propertie erstellen, welche fast genaus funktioniert der "Annotation" - Tap im ecorediag - Editor. (Gef-Repräsentation des Ecore Models)

Gruß, Rainer


----------



## Tomas (10. Dez 2009)

so ich hab mir n neues tab folgendermaßen erstellt:
einfach in der plugin.xml im XXX.diagram in commands das command eintragen und rest im Code erledigt.
allerdings habe ich gerade GMF Propsheet Customization - Eclipsepedia gefunden und die seite ist neu überarbeitet worden, (ich hab mir das neue noch nicht angesehen).

weitere hilfreiche links
GMF Tutorial Part 3 - Eclipsepedia
Extended Editing Framework (EEF) proposal
EEF - Eclipsepedia


----------



## Pitority (12. Dez 2009)

Hab leider wenig Zeit

schau dir mal die Klasse 

org.eclipse.emf.ecoretools.properties.internal.sections.EAnnotationPropertySection an. Nicht erschrecken. Das meiste ist wirklich SWT/JFace zeugs. Interessant sind vorallem die EditingSupport "Klassen" (sind annonyme innere Klassen). Hier siehst du, wie du selber Instanzen deines zugrundeliegenden EMF- Models anlegst, änderst oder löschst. Ziemlich cool das ganze! 


```
getEditingDomain().getCommandStack().execute(new EMFRecordingChangeCommand(getEObject().eResource()) {

					@Override
					protected void doExecute() {
						currentEAnnotation.getDetails().put(text, entry.getValue().toString());
						currentEAnnotation.getDetails().remove(entry);
					}
				});
```
gibt im Zusammenhang mehr Sinn;-) aber die Klasse ist 500 Zeilen lang; passt hier nicht rein ;-)

Dazu außschließlich den XML Teil der Docu 
The Eclipse Tabbed Properties View

Und als Classe in deiner Section gibts du deine eigene Eplementierung von 
AbstractTabbedPropertySection.java an. 

Filter wie bei EAnnotationPropertySection (sehr einfach)

Viel Erfolg. 


PS: Ich empfehle dir sehr, die Implementierung in ein eigenes Plugin zu schreiben. (z.b. xxx.costum). Damit all deine Errungenschaften beim übergenerieren des diagram-Plugins nicht verloren gehen. Das mit dem generate NOT ist totaler schwachsinn. 
Hierzu musst du einfach in der costum-plugin.xml zwei die beiden Extensionpoints 
extension point="org.eclipse.ui.views.properties.tabbed.propertyTabs
und
extension point="org.eclipse.ui.views.properties.tabbed.propertySections
"ausfüllen"

als contributorId="mview.views.SampleView" unbedingt die contributerId eintragen, die in deiner XXX.diagram plugin.xml unter dem Extensionpoint 

extension point="org.eclipse.ui.views.properties.tabbed.propertyContributor 
eingetragen ist! 

die plugin.xml aus dem package org.eclipse.emf.ecoretools.properties könnte auch hilfreich sein.


----------

