View Javadoc
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   * A composite that can be scrolled vertically. It wraps a
12   * {@link ScrolledComposite} (and is being wrapped by it), simplifying its
13   * configuration.
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  	// public ScrolledComposite getScrolledComposite() {
43  	// return this.scrolledComposite;
44  	// }
45  
46  	/** Set it on the wrapping scrolled composite */
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  }