1 package org.argeo.cms.ui.widgets;
2
3 import org.eclipse.swt.SWT;
4 import org.eclipse.swt.custom.ScrolledComposite;
5 import org.eclipse.swt.events.ControlEvent;
6 import org.eclipse.swt.graphics.Point;
7 import org.eclipse.swt.graphics.Rectangle;
8 import org.eclipse.swt.widgets.Composite;
9
10
11
12
13
14
15 public class ScrolledPage extends Composite {
16 private static final long serialVersionUID = 1593536965663574437L;
17
18 private ScrolledComposite scrolledComposite;
19
20 public ScrolledPage(Composite parent, int style) {
21 super(new ScrolledComposite(parent, SWT.V_SCROLL), style);
22 scrolledComposite = (ScrolledComposite) getParent();
23 scrolledComposite.setContent(this);
24
25 scrolledComposite.setExpandVertical(true);
26 scrolledComposite.setExpandHorizontal(true);
27 scrolledComposite.addControlListener(new ScrollControlListener());
28 }
29
30 @Override
31 public void layout(boolean changed, boolean all) {
32 updateScroll();
33 super.layout(changed, all);
34 }
35
36 protected void updateScroll() {
37 Rectangle r = scrolledComposite.getClientArea();
38 Point preferredSize = computeSize(r.width, SWT.DEFAULT);
39 scrolledComposite.setMinHeight(preferredSize.y);
40 }
41
42
43
44
45
46
47 @Override
48 public void setLayoutData(Object layoutData) {
49 scrolledComposite.setLayoutData(layoutData);
50 }
51
52 private class ScrollControlListener extends
53 org.eclipse.swt.events.ControlAdapter {
54 private static final long serialVersionUID = -3586986238567483316L;
55
56 public void controlResized(ControlEvent e) {
57 updateScroll();
58 }
59 }
60 }