--- /dev/null
+package org.simantics.document.swt.core.base;\r
+\r
+import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.custom.ScrolledComposite;\r
+import org.eclipse.swt.graphics.Point;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.eclipse.swt.widgets.ScrollBar;\r
+import org.simantics.utils.ui.SWTUtils;\r
+\r
+public class ScrolledCompositeContent extends Composite implements Runnable {\r
+ \r
+ public ScrolledCompositeContent(Composite parent, int style) {\r
+ super(parent, style);\r
+ }\r
+ \r
+ public void refreshSize() {\r
+ SWTUtils.asyncExec(this, this);\r
+ }\r
+\r
+ public void run() {\r
+\r
+ if(isDisposed()) return;\r
+\r
+ ScrolledComposite sc = (ScrolledComposite)getParent();\r
+ int scWidth = sc.getSize().x;\r
+ \r
+ ScrollBar bar = sc.getVerticalBar();\r
+ if(bar != null && bar.isVisible())\r
+ scWidth -= bar.getSize().x;\r
+ \r
+ Point current = getSize();\r
+ Point target = computeSize(scWidth, SWT.DEFAULT, true);\r
+ \r
+ if(!current.equals(target)) {\r
+ setSize(target);\r
+ sc.getParent().layout(true, true);\r
+ }\r
+ \r
+ }\r
+ \r
+}\r