From a168397b609535d5c243b5ab584ab9bdbd54fb74 Mon Sep 17 00:00:00 2001
From: Lukas Ladenberger <lukas.ladenberger@googlemail.com>
Date: Mon, 27 Aug 2012 12:05:34 +0200
Subject: [PATCH] some bugfixes

---
 .../gef/editor/AbstractBControlService.java   |   6 +
 ...vider.java => BMSContextMenuProvider.java} | 153 +++++++++---------
 .../editor/BMotionSelectionSynchronizer.java  |   4 -
 .../gef/editor/BMotionStudioEditorPage.java   |  19 +--
 .../gef/editor/IBControlService.java          |   3 +
 .../gef/editor/action/CopyAction.java         |   9 +-
 .../gef/editor/action/FitImageAction.java     |  10 +-
 .../gef/editor/action/OpenObserverAction.java |  14 +-
 .../gef/editor/action/PasteAction.java        |   9 +-
 .../gef/editor/action/RenameAction.java       |   1 -
 .../{internal => action}/RenameWizard.java    |   2 +-
 .../gef/editor/part/BControlTreeEditPart.java |  15 +-
 .../editor/part/BMSTreeEditPartFactory.java   |  20 ++-
 .../gef/editor/service/BTableCellService.java |  11 ++
 .../editor/service/BTableColumnService.java   |  11 ++
 15 files changed, 176 insertions(+), 111 deletions(-)
 rename de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/{AppContextMenuProvider.java => BMSContextMenuProvider.java} (64%)
 rename de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/{internal => action}/RenameWizard.java (93%)

diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/AbstractBControlService.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/AbstractBControlService.java
index f0a5f6c8..3f3fd561 100644
--- a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/AbstractBControlService.java
+++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/AbstractBControlService.java
@@ -13,6 +13,8 @@ import org.eclipse.ui.plugin.AbstractUIPlugin;
 
 import de.bmotionstudio.gef.editor.internal.BControlTemplate;
 import de.bmotionstudio.gef.editor.model.Visualization;
+import de.bmotionstudio.gef.editor.part.BControlTreeEditPart;
+import de.bmotionstudio.gef.editor.part.BMSAbstractTreeEditPart;
 
 /**
  * @author Lukas Ladenberger
@@ -40,4 +42,8 @@ public abstract class AbstractBControlService {
 		return true;
 	}
 
+	public BMSAbstractTreeEditPart createTreeEditPart() {
+		return new BControlTreeEditPart();
+	}
+
 }
diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/AppContextMenuProvider.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/BMSContextMenuProvider.java
similarity index 64%
rename from de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/AppContextMenuProvider.java
rename to de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/BMSContextMenuProvider.java
index 53acf882..9822355a 100644
--- a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/AppContextMenuProvider.java
+++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/BMSContextMenuProvider.java
@@ -14,6 +14,7 @@ import org.eclipse.core.runtime.IExtensionRegistry;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.gef.ContextMenuProvider;
 import org.eclipse.gef.EditPartViewer;
+import org.eclipse.gef.editparts.AbstractEditPart;
 import org.eclipse.gef.ui.actions.ActionRegistry;
 import org.eclipse.gef.ui.actions.GEFActionConstants;
 import org.eclipse.jface.action.IAction;
@@ -24,11 +25,11 @@ import org.eclipse.ui.actions.ActionFactory;
 
 import de.bmotionstudio.gef.editor.action.OpenSchedulerEventAction;
 import de.bmotionstudio.gef.editor.model.BControl;
-import de.bmotionstudio.gef.editor.part.BMSAbstractEditPart;
-import de.bmotionstudio.gef.editor.part.VisualizationPart;
+import de.bmotionstudio.gef.editor.model.ObserverRootVirtualTreeNode;
+import de.bmotionstudio.gef.editor.model.Visualization;
 import de.bmotionstudio.gef.editor.scheduler.SchedulerEvent;
 
-public class AppContextMenuProvider extends ContextMenuProvider {
+public class BMSContextMenuProvider extends ContextMenuProvider {
 
 	private ActionRegistry actionRegistry;
 
@@ -36,7 +37,7 @@ public class AppContextMenuProvider extends ContextMenuProvider {
 
 	private String[] eventIDs = { AttributeConstants.EVENT_MOUSECLICK };
 
-	public AppContextMenuProvider(EditPartViewer viewer, ActionRegistry registry) {
+	public BMSContextMenuProvider(EditPartViewer viewer, ActionRegistry registry) {
 		super(viewer);
 		setActionRegistry(registry);
 	}
@@ -54,42 +55,53 @@ public class AppContextMenuProvider extends ContextMenuProvider {
 		action = getActionRegistry().getAction(ActionFactory.REDO.getId());
 		menu.appendToGroup(GEFActionConstants.GROUP_UNDO, action);
 
-		action = actionRegistry.getAction(ActionFactory.COPY.getId());
+		action = getActionRegistry().getAction(ActionFactory.COPY.getId());
 		menu.appendToGroup(GEFActionConstants.GROUP_COPY, action);
 
-		action = actionRegistry.getAction(ActionFactory.PASTE.getId());
+		action = getActionRegistry().getAction(ActionFactory.PASTE.getId());
 		menu.appendToGroup(GEFActionConstants.GROUP_COPY, action);
 
 		action = getActionRegistry().getAction(ActionFactory.DELETE.getId());
 		menu.appendToGroup(GEFActionConstants.GROUP_EDIT, action);
 
-		buildCustomMenu(menu);
+		Object sel = ((IStructuredSelection) getViewer().getSelection())
+				.getFirstElement();
 
-		buildObserverMenu(menu);
-
-		buildEventMenu(menu);
+		if (sel instanceof AbstractEditPart) {
+			AbstractEditPart editPart = (AbstractEditPart) sel;
+			buildCustomMenu(menu, editPart);
+			buildObserverMenu(menu, editPart);
+			buildEventMenu(menu, editPart);
+		}
 
 	}
 
-	private void buildCustomMenu(IMenuManager menu) {
+	private void buildCustomMenu(IMenuManager menu, AbstractEditPart editPart) {
 
-		IExtensionPoint extensionPoint = registry
-				.getExtensionPoint("de.bmotionstudio.gef.editor.installMenu");
-		for (IExtension extension : extensionPoint.getExtensions()) {
-			for (IConfigurationElement configurationElement : extension
-					.getConfigurationElements()) {
+		Object model = editPart.getModel();
 
-				if ("menu".equals(configurationElement.getName())) {
+		if (model instanceof BControl) {
 
-					try {
+			IExtensionPoint extensionPoint = registry
+					.getExtensionPoint("de.bmotionstudio.gef.editor.installMenu");
+			for (IExtension extension : extensionPoint.getExtensions()) {
+				for (IConfigurationElement configurationElement : extension
+						.getConfigurationElements()) {
+
+					if ("menu".equals(configurationElement.getName())) {
+
+						try {
+
+							IInstallMenu installMenuClass = (IInstallMenu) configurationElement
+									.createExecutableExtension("class");
 
-						IInstallMenu installMenuClass = (IInstallMenu) configurationElement
-								.createExecutableExtension("class");
+							installMenuClass.installMenu(menu,
+									getActionRegistry());
 
-						installMenuClass.installMenu(menu, getActionRegistry());
+						} catch (final CoreException e) {
+							e.printStackTrace();
+						}
 
-					} catch (final CoreException e) {
-						e.printStackTrace();
 					}
 
 				}
@@ -100,7 +112,18 @@ public class AppContextMenuProvider extends ContextMenuProvider {
 
 	}
 
-	private void buildObserverMenu(IMenuManager menu) {
+	private void buildObserverMenu(IMenuManager menu, AbstractEditPart editPart) {
+
+		Object model = editPart.getModel();
+
+		BControl bcontrol = null;
+
+		if (model instanceof BControl)
+			bcontrol = (BControl) model;
+		else if (model instanceof ObserverRootVirtualTreeNode)
+			bcontrol = ((ObserverRootVirtualTreeNode) model).getControl();
+		else
+			return;
 
 		final MenuManager handleObserverMenu = new MenuManager("Observer",
 				BMotionStudioImage.getImageDescriptor(
@@ -108,47 +131,36 @@ public class AppContextMenuProvider extends ContextMenuProvider {
 						"icons/icon_observer.gif"), "observerMenu");
 		menu.appendToGroup(GEFActionConstants.GROUP_ADD, handleObserverMenu);
 
-		IStructuredSelection selection = (IStructuredSelection) BMotionEditorPlugin
-				.getActiveEditor().getEditorSite().getSelectionProvider()
-				.getSelection();
-
-		if (selection.getFirstElement() instanceof BMSAbstractEditPart) {
-
-			BControl bcontrol = (BControl) ((BMSAbstractEditPart) selection
-					.getFirstElement()).getModel();
-
-			IExtensionPoint extensionPoint = registry
-					.getExtensionPoint("de.bmotionstudio.gef.editor.observer");
-			for (IExtension extension : extensionPoint.getExtensions()) {
-				for (IConfigurationElement configurationElement : extension
-						.getConfigurationElements()) {
-
-					if ("observer".equals(configurationElement.getName())) {
+		IExtensionPoint extensionPoint = registry
+				.getExtensionPoint("de.bmotionstudio.gef.editor.observer");
+		for (IExtension extension : extensionPoint.getExtensions()) {
+			for (IConfigurationElement configurationElement : extension
+					.getConfigurationElements()) {
 
-						final String observerClassName = configurationElement
-								.getAttribute("class");
-						final String observerName = configurationElement
-								.getAttribute("name");
+				if ("observer".equals(configurationElement.getName())) {
 
-						if (checkIncludeObserver(observerClassName, bcontrol)) {
+					final String observerClassName = configurationElement
+							.getAttribute("class");
+					final String observerName = configurationElement
+							.getAttribute("name");
 
-							IAction action = getActionRegistry().getAction(
-									"de.bmotionstudio.gef.editor.observerAction."
-											+ observerClassName);
-							action.setText(observerName);
-							action.setToolTipText(observerName);
+					if (checkIncludeObserver(observerClassName, bcontrol)) {
 
-							if (bcontrol.hasObserver(observerClassName)) {
-								action.setImageDescriptor(BMotionStudioImage
-										.getImageDescriptor(
-												BMotionEditorPlugin.PLUGIN_ID,
-												"icons/icon_chop.gif"));
-							} else {
-								action.setImageDescriptor(null);
-							}
-							handleObserverMenu.add(action);
+						IAction action = getActionRegistry().getAction(
+								"de.bmotionstudio.gef.editor.observerAction."
+										+ observerClassName);
+						action.setText(observerName);
+						action.setToolTipText(observerName);
 
+						if (bcontrol.hasObserver(observerClassName)) {
+							action.setImageDescriptor(BMotionStudioImage
+									.getImageDescriptor(
+											BMotionEditorPlugin.PLUGIN_ID,
+											"icons/icon_chop.gif"));
+						} else {
+							action.setImageDescriptor(null);
 						}
+						handleObserverMenu.add(action);
 
 					}
 
@@ -212,23 +224,19 @@ public class AppContextMenuProvider extends ContextMenuProvider {
 
 	}
 
-	private void buildEventMenu(IMenuManager menu) {
+	private void buildEventMenu(IMenuManager menu, AbstractEditPart editPart) {
 
-		MenuManager handleEventMenu = new MenuManager("Events",
-				BMotionStudioImage.getImageDescriptor(
-						BMotionEditorPlugin.PLUGIN_ID, "icons/icon_event.png"),
-				"eventMenu");
-		menu.appendToGroup(GEFActionConstants.GROUP_ADD, handleEventMenu);
+		Object model = editPart.getModel();
 
-		IStructuredSelection selection = (IStructuredSelection) BMotionEditorPlugin
-				.getActiveEditor().getEditorSite().getSelectionProvider()
-				.getSelection();
+		if (model instanceof BControl && !(model instanceof Visualization)) {
 
-		if ((selection.getFirstElement() instanceof BMSAbstractEditPart)
-				&& !(selection.getFirstElement() instanceof VisualizationPart)) {
+			MenuManager handleEventMenu = new MenuManager("Events",
+					BMotionStudioImage.getImageDescriptor(
+							BMotionEditorPlugin.PLUGIN_ID,
+							"icons/icon_event.png"), "eventMenu");
+			menu.appendToGroup(GEFActionConstants.GROUP_ADD, handleEventMenu);
 
-			BControl bcontrol = (BControl) ((BMSAbstractEditPart) selection
-					.getFirstElement()).getModel();
+			BControl bcontrol = (BControl) model;
 
 			// Has event
 			if (bcontrol.hasEvent(eventIDs[0])) {
@@ -297,7 +305,6 @@ public class AppContextMenuProvider extends ContextMenuProvider {
 				}
 
 			}
-
 		}
 
 	}
diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/BMotionSelectionSynchronizer.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/BMotionSelectionSynchronizer.java
index e3a3198d..2a3753c6 100644
--- a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/BMotionSelectionSynchronizer.java
+++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/BMotionSelectionSynchronizer.java
@@ -23,9 +23,7 @@ public class BMotionSelectionSynchronizer extends SelectionSynchronizer {
 	}
 
 	protected EditPart convert(EditPartViewer viewer, EditPart part) {
-
 		EditPart p = super.convert(viewer, part);
-
 		if (viewer instanceof ScrollingGraphicalViewer
 				|| viewer instanceof TreeViewer) {
 			Object model = part.getModel();
@@ -42,9 +40,7 @@ public class BMotionSelectionSynchronizer extends SelectionSynchronizer {
 				return newPart;
 			}
 		}
-
 		return p;
-
 	}
 
 }
diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/BMotionStudioEditorPage.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/BMotionStudioEditorPage.java
index f3a9da43..4ab8aad0 100644
--- a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/BMotionStudioEditorPage.java
+++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/BMotionStudioEditorPage.java
@@ -106,6 +106,7 @@ import de.bmotionstudio.gef.editor.model.BMotionRuler;
 import de.bmotionstudio.gef.editor.model.BMotionRulerProvider;
 import de.bmotionstudio.gef.editor.model.Visualization;
 import de.bmotionstudio.gef.editor.part.BMSAbstractEditPart;
+import de.bmotionstudio.gef.editor.part.BMSAbstractTreeEditPart;
 import de.bmotionstudio.gef.editor.part.BMSEditPartFactory;
 import de.bmotionstudio.gef.editor.part.BMSTreeEditPartFactory;
 
@@ -162,10 +163,9 @@ public class BMotionStudioEditorPage extends GraphicalEditorWithFlyoutPalette {
 
 		Object selectedElement = ((IStructuredSelection) selection)
 				.getFirstElement();
-		if (!(selectedElement instanceof BMSAbstractEditPart))
-			return;
-
-		updateActions(getSelectionActions());
+		if (selectedElement instanceof BMSAbstractEditPart
+				|| selectedElement instanceof BMSAbstractTreeEditPart)
+			updateActions(getSelectionActions());
 
 	}
 
@@ -544,7 +544,7 @@ public class BMotionStudioEditorPage extends GraphicalEditorWithFlyoutPalette {
 		getActionRegistry().registerAction(
 				new ToggleGridAction(getGraphicalViewer()));
 
-		ContextMenuProvider provider = new AppContextMenuProvider(viewer,
+		ContextMenuProvider provider = new BMSContextMenuProvider(viewer,
 				getActionRegistry());
 		viewer.setContextMenu(provider);
 		
@@ -682,7 +682,7 @@ public class BMotionStudioEditorPage extends GraphicalEditorWithFlyoutPalette {
 		protected void configureOutlineViewer() {
 			getViewer().setEditDomain(getEditDomain());
 			getViewer().setEditPartFactory(new BMSTreeEditPartFactory());
-			ContextMenuProvider provider = new AppContextMenuProvider(
+			ContextMenuProvider provider = new BMSContextMenuProvider(
 					getViewer(), getActionRegistry());
 			getViewer().setContextMenu(provider);
 			getViewer().setKeyHandler(getCommonKeyHandler());
@@ -747,13 +747,6 @@ public class BMotionStudioEditorPage extends GraphicalEditorWithFlyoutPalette {
 				}
 
 			};
-			// collapseAllAction
-			// .setImageDescriptor(ImageDescriptor
-			// .createFromImage(PlatformUI
-			// .getWorkbench()
-			// .getSharedImages()
-			// .getImage(
-			// ISharedImages.IMG_ELCL_COLLAPSEALL)));
 
 			getSite().getActionBars().getMenuManager().add(expandAllAction);
 			getSite().getActionBars().getMenuManager().add(collapseAllAction);
diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/IBControlService.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/IBControlService.java
index 14035d97..a55c324a 100644
--- a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/IBControlService.java
+++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/IBControlService.java
@@ -12,6 +12,7 @@ import org.eclipse.gef.palette.ToolEntry;
 import de.bmotionstudio.gef.editor.model.BControl;
 import de.bmotionstudio.gef.editor.model.Visualization;
 import de.bmotionstudio.gef.editor.part.BMSAbstractEditPart;
+import de.bmotionstudio.gef.editor.part.BMSAbstractTreeEditPart;
 
 /**
  * @author Lukas Ladenberger
@@ -23,6 +24,8 @@ public interface IBControlService {
 
 	public BMSAbstractEditPart createEditPart();
 
+	public BMSAbstractTreeEditPart createTreeEditPart();
+
 	public ToolEntry createToolEntry(Visualization visualization,
 			IConfigurationElement configurationElement);
 
diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/action/CopyAction.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/action/CopyAction.java
index 7f59b18c..d2e6dfdc 100644
--- a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/action/CopyAction.java
+++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/action/CopyAction.java
@@ -53,10 +53,11 @@ public class CopyAction extends SelectionAction {
 			Object nextElement = it.next();
 			if (nextElement instanceof EditPart) {
 				EditPart ep = (EditPart) nextElement;
-				BControl node = (BControl) ep.getModel();
-				if (!cmd.isCopyableControl(node))
-					return null;
-				cmd.addElement(node);
+				if (ep.getModel() instanceof BControl) {
+					BControl node = (BControl) ep.getModel();
+					if (cmd.isCopyableControl(node))
+						cmd.addElement(node);
+				}
 			}
 
 		}
diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/action/FitImageAction.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/action/FitImageAction.java
index c8e06a55..c0b1dd01 100644
--- a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/action/FitImageAction.java
+++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/action/FitImageAction.java
@@ -54,10 +54,12 @@ public class FitImageAction extends SelectionAction {
 		for (Object obj : selectedObjects) {
 			if (obj instanceof EditPart) {
 				EditPart part = (EditPart) obj;
-				BControl bcontrol = (BControl) part.getModel();
-				if (bcontrol
-						.getAttributeValue(AttributeConstants.ATTRIBUTE_IMAGE) != null) {
-					return true;
+				if (part.getModel() instanceof BControl) {
+					BControl bcontrol = (BControl) part.getModel();
+					if (bcontrol
+							.getAttributeValue(AttributeConstants.ATTRIBUTE_IMAGE) != null) {
+						return true;
+					}
 				}
 			}
 		}
diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/action/OpenObserverAction.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/action/OpenObserverAction.java
index fba03d3c..a64a0043 100644
--- a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/action/OpenObserverAction.java
+++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/action/OpenObserverAction.java
@@ -19,6 +19,7 @@ import de.bmotionstudio.gef.editor.BMotionStudioImage;
 import de.bmotionstudio.gef.editor.command.RemoveObserverCommand;
 import de.bmotionstudio.gef.editor.command.SetObserverCommand;
 import de.bmotionstudio.gef.editor.model.BControl;
+import de.bmotionstudio.gef.editor.model.ObserverRootVirtualTreeNode;
 import de.bmotionstudio.gef.editor.observer.Observer;
 import de.bmotionstudio.gef.editor.observer.ObserverWizard;
 import de.prob.logging.Logger;
@@ -27,10 +28,6 @@ public class OpenObserverAction extends SelectionAction {
 
 	private String className;
 
-	// private Observer oldObserver;
-	// private Observer currentObserver;
-	// private BControl actionControl;
-
 	public OpenObserverAction(IWorkbenchPart part) {
 		super(part);
 		setLazyEnablementCalculation(true);
@@ -173,8 +170,15 @@ public class OpenObserverAction extends SelectionAction {
 
 		if ((objects.get(0) instanceof EditPart)) {
 			EditPart part = (EditPart) objects.get(0);
-			return (BControl) part.getModel();
+			BControl control = null;
+			if (part.getModel() instanceof ObserverRootVirtualTreeNode)
+				control = ((ObserverRootVirtualTreeNode) part.getModel())
+						.getControl();
+			else if (part.getModel() instanceof BControl)
+				control = (BControl) part.getModel();
+			return control;
 		}
+
 		return null;
 
 	}
diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/action/PasteAction.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/action/PasteAction.java
index 25cc581f..35515085 100644
--- a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/action/PasteAction.java
+++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/action/PasteAction.java
@@ -52,10 +52,11 @@ public class PasteAction extends SelectionAction {
 			Object nextElement = it.next();
 			if (nextElement instanceof EditPart) {
 				EditPart ep = (EditPart) nextElement;
-				BControl node = (BControl) ep.getModel();
-				if (!cmd.isContainer(node))
-					return null;
-				cmd.addElement(node);
+				if (ep.getModel() instanceof BControl) {
+					BControl node = (BControl) ep.getModel();
+					if (cmd.isContainer(node))
+						cmd.addElement(node);
+				}
 			}
 		}
 
diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/action/RenameAction.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/action/RenameAction.java
index 9e352947..080cadb5 100644
--- a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/action/RenameAction.java
+++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/action/RenameAction.java
@@ -21,7 +21,6 @@ import org.eclipse.ui.plugin.AbstractUIPlugin;
 
 import de.bmotionstudio.gef.editor.AttributeConstants;
 import de.bmotionstudio.gef.editor.BMotionEditorPlugin;
-import de.bmotionstudio.gef.editor.internal.RenameWizard;
 import de.bmotionstudio.gef.editor.model.BControl;
 
 public class RenameAction extends SelectionAction {
diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/internal/RenameWizard.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/action/RenameWizard.java
similarity index 93%
rename from de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/internal/RenameWizard.java
rename to de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/action/RenameWizard.java
index 117a244f..34c95998 100644
--- a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/internal/RenameWizard.java
+++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/action/RenameWizard.java
@@ -4,7 +4,7 @@
  * This software is licenced under EPL 1.0 (http://www.eclipse.org/org/documents/epl-v10.html) 
  * */
 
-package de.bmotionstudio.gef.editor.internal;
+package de.bmotionstudio.gef.editor.action;
 
 import org.eclipse.jface.wizard.Wizard;
 import org.eclipse.jface.wizard.WizardPage;
diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/part/BControlTreeEditPart.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/part/BControlTreeEditPart.java
index 5139f6d0..ca5ce02f 100644
--- a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/part/BControlTreeEditPart.java
+++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/part/BControlTreeEditPart.java
@@ -27,10 +27,11 @@ import de.bmotionstudio.gef.editor.model.BConnection;
 import de.bmotionstudio.gef.editor.model.BControl;
 import de.bmotionstudio.gef.editor.model.ObserverRootVirtualTreeNode;
 import de.bmotionstudio.gef.editor.model.Visualization;
+import de.bmotionstudio.gef.editor.observer.IObserverListener;
 import de.bmotionstudio.gef.editor.observer.Observer;
 
 public class BControlTreeEditPart extends BMSAbstractTreeEditPart implements
-		PropertyChangeListener {
+		PropertyChangeListener, IObserverListener {
 
 	public void propertyChange(final PropertyChangeEvent evt) {
 		if (evt.getPropertyName().equals(BControl.PROPERTY_ADD)
@@ -84,6 +85,7 @@ public class BControlTreeEditPart extends BMSAbstractTreeEditPart implements
 		if (!isActive()) {
 			super.activate();
 			((BControl) getModel()).addPropertyChangeListener(this);
+			((BControl) getModel()).addObserverListener(this);
 		}
 	}
 
@@ -91,6 +93,7 @@ public class BControlTreeEditPart extends BMSAbstractTreeEditPart implements
 		if (isActive()) {
 			super.deactivate();
 			((BControl) getModel()).removePropertyChangeListener(this);
+			((BControl) getModel()).removeObserverListener(this);
 		}
 	}
 
@@ -127,4 +130,14 @@ public class BControlTreeEditPart extends BMSAbstractTreeEditPart implements
 		}
 	}
 
+	@Override
+	public void addedObserver(BControl control, Observer observer) {
+		refreshChildren();
+	}
+
+	@Override
+	public void removedObserver(BControl control) {
+		refreshChildren();
+	}
+
 }
diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/part/BMSTreeEditPartFactory.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/part/BMSTreeEditPartFactory.java
index 7114d753..51d2a0c7 100644
--- a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/part/BMSTreeEditPartFactory.java
+++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/part/BMSTreeEditPartFactory.java
@@ -6,9 +6,13 @@
 
 package de.bmotionstudio.gef.editor.part;
 
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
 import org.eclipse.gef.EditPart;
 import org.eclipse.gef.EditPartFactory;
 
+import de.bmotionstudio.gef.editor.BMotionEditorPlugin;
+import de.bmotionstudio.gef.editor.IBControlService;
 import de.bmotionstudio.gef.editor.model.BControl;
 import de.bmotionstudio.gef.editor.model.ObserverRootVirtualTreeNode;
 import de.bmotionstudio.gef.editor.observer.Observer;
@@ -20,7 +24,21 @@ public class BMSTreeEditPartFactory implements EditPartFactory {
 		BMSAbstractTreeEditPart part = null;
 
 		if (model instanceof BControl) {
-			part = new BControlTreeEditPart();
+
+			BControl control = (BControl) model;
+
+			try {
+				IConfigurationElement configElement = BMotionEditorPlugin
+						.getControlServices().get(control.getType());
+				if (configElement != null) {
+					IBControlService service = (IBControlService) configElement
+							.createExecutableExtension("service");
+					part = service.createTreeEditPart();
+				}
+			} catch (CoreException e) {
+				e.printStackTrace();
+			}
+
 		} else if (model instanceof Observer) {
 			part = new ObserverTreeEditPart();
 		} else if (model instanceof ObserverRootVirtualTreeNode) {
diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/service/BTableCellService.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/service/BTableCellService.java
index 65dd6ccc..38c27cba 100644
--- a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/service/BTableCellService.java
+++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/service/BTableCellService.java
@@ -5,7 +5,9 @@ import de.bmotionstudio.gef.editor.IBControlService;
 import de.bmotionstudio.gef.editor.model.BControl;
 import de.bmotionstudio.gef.editor.model.BTableCell;
 import de.bmotionstudio.gef.editor.model.Visualization;
+import de.bmotionstudio.gef.editor.part.BControlTreeEditPart;
 import de.bmotionstudio.gef.editor.part.BMSAbstractEditPart;
+import de.bmotionstudio.gef.editor.part.BMSAbstractTreeEditPart;
 import de.bmotionstudio.gef.editor.part.BTableCellPart;
 
 public class BTableCellService extends AbstractBControlService implements
@@ -26,4 +28,13 @@ public class BTableCellService extends AbstractBControlService implements
 		return false;
 	}
 
+	@Override
+	public BMSAbstractTreeEditPart createTreeEditPart() {
+		return new BControlTreeEditPart() {
+			@Override
+			protected void createEditPolicies() {
+			}
+		};
+	}
+
 }
diff --git a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/service/BTableColumnService.java b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/service/BTableColumnService.java
index 447e9918..6290adc3 100644
--- a/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/service/BTableColumnService.java
+++ b/de.bmotionstudio.gef.editor/src/de/bmotionstudio/gef/editor/service/BTableColumnService.java
@@ -5,7 +5,9 @@ import de.bmotionstudio.gef.editor.IBControlService;
 import de.bmotionstudio.gef.editor.model.BControl;
 import de.bmotionstudio.gef.editor.model.BTableColumn;
 import de.bmotionstudio.gef.editor.model.Visualization;
+import de.bmotionstudio.gef.editor.part.BControlTreeEditPart;
 import de.bmotionstudio.gef.editor.part.BMSAbstractEditPart;
+import de.bmotionstudio.gef.editor.part.BMSAbstractTreeEditPart;
 import de.bmotionstudio.gef.editor.part.BTableColumnPart;
 
 public class BTableColumnService extends AbstractBControlService implements
@@ -26,4 +28,13 @@ public class BTableColumnService extends AbstractBControlService implements
 		return false;
 	}
 
+	@Override
+	public BMSAbstractTreeEditPart createTreeEditPart() {
+		return new BControlTreeEditPart() {
+			@Override
+			protected void createEditPolicies() {
+			}
+		};
+	}
+
 }
-- 
GitLab