package org.simantics.document.swt.core.widget; import java.util.TreeMap; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.layout.GridLayoutFactory; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.ScrolledComposite; import org.eclipse.swt.events.ControlEvent; import org.eclipse.swt.events.ControlListener; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; import org.simantics.document.server.JSONObject; import org.simantics.document.server.client.WidgetData; import org.simantics.document.swt.core.SWTDocument; import org.simantics.document.swt.core.SWTViews; import org.simantics.document.swt.core.base.HasWidgetsWidgetManager; import org.simantics.document.swt.core.base.ScrolledCompositeContent; import org.simantics.document.swt.core.base.WidgetContainer; public class ScrolledCompositeWidget extends HasWidgetsWidgetManager { @Override protected void doUpdateProperties(SWTDocument document, ScrolledCompositeContent control, JSONObject object) { } @Override protected ScrolledCompositeContent doCreateControl(SWTDocument document, Composite parent, JSONObject object) { ScrolledComposite explorersScroll = new ScrolledComposite(parent, SWT.V_SCROLL | SWT.BORDER); explorersScroll.setBackground(Display.getCurrent().getSystemColor( SWT.COLOR_WHITE)); explorersScroll.setLayout(GridLayoutFactory.fillDefaults() .margins(0, 0).spacing(0, 0).create()); GridDataFactory.fillDefaults().grab(true, true).span(1, 1) .applyTo(explorersScroll); ScrolledCompositeContent explorers = new ScrolledCompositeContent(explorersScroll, SWT.NONE); explorersScroll.addControlListener(new ControlListener() { @Override public void controlResized(ControlEvent e) { SWTViews.notifyScrolledComposite(explorers); } @Override public void controlMoved(ControlEvent e) { SWTViews.notifyScrolledComposite(explorers); } }); explorers.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE)); // Make sure that exploders are initially visible explorers.setSize(10, 300); explorers.setLayout(GridLayoutFactory.fillDefaults().margins(0, 0).numColumns(1) .spacing(0, 0).create()); explorersScroll.setMinSize(100, 100); explorersScroll.setContent(explorers); return explorers; } @Override public void updateChildren(SWTDocument document, JSONObject object, WidgetContainer widget, TreeMap childMap) { super.updateChildren(document, object, widget, childMap); for(WidgetData c : childMap.values()) { WidgetContainer con = (WidgetContainer)c.widget; Control child = con.getControl(); GridDataFactory.fillDefaults().grab(true, false).applyTo(child); } } }