package at.bestsolution.e4.ui.workbench.renderers.swing; import java.awt.BorderLayout; import java.awt.Component; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.annotation.PostConstruct; import javax.inject.Inject; import javax.swing.JFrame; import javax.swing.JPanel; import org.eclipse.e4.core.contexts.IEclipseContext; import org.eclipse.e4.core.services.events.IEventBroker; 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 org.eclipse.e4.ui.model.application.ui.basic.MTrimBar; import org.eclipse.e4.ui.model.application.ui.basic.MTrimmedWindow; import org.eclipse.e4.ui.model.application.ui.basic.MWindow; import org.eclipse.e4.ui.workbench.IPresentationEngine; import org.eclipse.e4.ui.workbench.UIEvents; import org.osgi.service.event.Event; import org.osgi.service.event.EventHandler; import at.bestsolution.e4.ui.workbench.renderers.swing.layouts.SwingFillLayout; @SuppressWarnings("restriction") public class WBWRenderer extends SwingPartRenderer { @Inject private IEventBroker eventBroker; private EventHandler sizeHandler; @PostConstruct protected void init(IEclipseContext context) { super.init(context); sizeHandler = new EventHandler() { public void handleEvent(Event event) { String attName = (String) event .getProperty(UIEvents.EventTags.ATTNAME); if (UIEvents.Window.X.equals(attName) || UIEvents.Window.Y.equals(attName) || UIEvents.Window.WIDTH.equals(attName) || UIEvents.Window.HEIGHT.equals(attName)) { } } }; eventBroker.subscribe(UIEvents.buildTopic(UIEvents.Window.TOPIC), sizeHandler); } @Override public Object createWidget(MUIElement element, Object parent) { if( !(element instanceof MWindow) ) { return null; } MWindow mWindow = (MWindow) element; JFrame frame = new JFrame(); frame.getContentPane().setLayout(new BorderLayout()); frame.setBounds(mWindow.getX(), mWindow.getY(), mWindow.getWidth(), mWindow.getHeight()); frame.setTitle(mWindow.getLocalizedLabel()); return frame; } @Override public void postProcess(MUIElement childElement) { super.postProcess(childElement); JFrame frame = (JFrame) childElement.getWidget(); if( childElement.isVisible() ) { frame.setVisible(true); } } @Override public void processContents(MElementContainer<MUIElement> container) { if( ! ((MUIElement)container instanceof MWindow) ) { return; } super.processContents(container); JFrame f = (JFrame) container.getWidget(); for( MUIElement e : container.getChildren() ) { if( e.getWidget() != null ) { f.getContentPane().add((Component) e.getWidget(),BorderLayout.CENTER); } } IPresentationEngine engine = (IPresentationEngine) context .get(IPresentationEngine.class.getName()); if ( (MUIElement)container instanceof MTrimmedWindow) { MTrimmedWindow tWindow = (MTrimmedWindow) (MUIElement)container; for (MTrimBar trimBar : tWindow.getTrimBars()) { engine.createGui(trimBar, f.getContentPane(), tWindow.getContext()); } } } @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 hookControllerLogic(MUIElement me) { super.hookControllerLogic(me); JFrame frame = (JFrame) me.getWidget(); final MWindow mWindow = (MWindow) me; frame.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { mWindow.setWidget(null); } }); } @Override public void childRendered(MElementContainer<MUIElement> parentElement, MUIElement element) { // TODO Auto-generated method stub } @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; } }