package at.bestsolution.e4.ui.workbench.renderers.swing; import java.awt.Component; import java.awt.KeyboardFocusManager; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import javax.swing.JPanel; import org.eclipse.e4.core.contexts.IEclipseContext; import org.eclipse.e4.core.services.contributions.IContributionFactory; import org.eclipse.e4.ui.model.application.ui.MElementContainer; import org.eclipse.e4.ui.model.application.ui.MUIElement; import org.eclipse.e4.ui.model.application.ui.MUILabel; import org.eclipse.e4.ui.model.application.ui.basic.MPart; import at.bestsolution.e4.ui.workbench.renderers.swing.layouts.SwingFillLayout; @SuppressWarnings("restriction") public class ContributedPartRender extends SwingPartRenderer { private MUIElement partToActivate; @Override public Object createWidget(MUIElement element, Object parent) { final JPanel panel = new JPanel(); panel.setLayout(new SwingFillLayout()); MPart part = (MPart) element; IEclipseContext localContext = part.getContext(); localContext.set(JPanel.class, panel); IContributionFactory contributionFactory = (IContributionFactory) localContext .get(IContributionFactory.class.getName()); Object newPart = contributionFactory.create(part.getContributionURI(), localContext); part.setObject(newPart); return panel; } @Override public void hookControllerLogic(final MUIElement me) { super.hookControllerLogic(me); final JPanel panel = (JPanel) me.getWidget(); KeyboardFocusManager.getCurrentKeyboardFocusManager().addPropertyChangeListener("focusOwner", new PropertyChangeListener() { public void propertyChange(PropertyChangeEvent evt) { if( evt.getNewValue() instanceof Component) { Component c = (Component) evt.getNewValue(); while( c.getParent() != null ) { if( c.getParent() == panel ) { try { partToActivate = me; activate((MPart) me); } finally { partToActivate = null; } break; } c = c.getParent(); } } } }); } @Override protected Object getParentWidget(MUIElement element) { // TODO Auto-generated method stub return null; } @Override public void disposeWidget(MUIElement part) { // TODO Auto-generated method stub } @Override public void childRendered(MElementContainer<MUIElement> parentElement, MUIElement element) { // TODO Auto-generated method stub System.err.println("Rendered!!!"); } @Override protected Object getImage(MUILabel element) { // TODO Auto-generated method stub return null; } @Override protected boolean requiresFocus(MPart element) { // TODO Auto-generated method stub return false; } }