Initial commit from SVN.
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
package com.foundation.view.swt.layout;
|
||||
|
||||
import org.eclipse.swt.graphics.Point;
|
||||
import org.eclipse.swt.graphics.Rectangle;
|
||||
import org.eclipse.swt.widgets.Composite;
|
||||
import org.eclipse.swt.widgets.Control;
|
||||
|
||||
/**
|
||||
* A very simple layout that centers the first child within the parent.
|
||||
* All other children are not visible.
|
||||
* There is no data attached to the children that is used by this layout.
|
||||
*/
|
||||
public class CenterLayout extends Layout {
|
||||
private Point size = new Point(0, 0);
|
||||
private Point firstChildSize = new Point(0, 0);
|
||||
/**
|
||||
* CenterLayout constructor.
|
||||
*/
|
||||
public CenterLayout() {
|
||||
}//CenterLayout()//
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.swt.widgets.Layout#computeSize(org.eclipse.swt.widgets.Composite, int, int, boolean)
|
||||
*/
|
||||
protected Point computeSize(Composite composite, int wHint, int hHint, boolean flushCache) {
|
||||
if(flushCache) {
|
||||
Control[] children = composite.getChildren();
|
||||
|
||||
size.x = 0;
|
||||
size.y = 0;
|
||||
firstChildSize.x = 0;
|
||||
firstChildSize.y = 0;
|
||||
|
||||
if(children != null) {
|
||||
for(int index = 0; index < children.length; index++) {
|
||||
Point childSize = children[index].computeSize(wHint, hHint, flushCache);
|
||||
|
||||
size.x = Math.max(childSize.x, size.x);
|
||||
size.y = Math.max(childSize.y, size.y);
|
||||
|
||||
if(index == 0) {
|
||||
firstChildSize.x = childSize.x;
|
||||
firstChildSize.y = childSize.y;
|
||||
}//if//
|
||||
}//for//
|
||||
}//if//
|
||||
}//if//
|
||||
|
||||
return new Point(size.x, size.y);
|
||||
}//computeSize()//
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.swt.widgets.Layout#layout(org.eclipse.swt.widgets.Composite, boolean)
|
||||
*/
|
||||
protected void layout(Composite composite, boolean flushCache) {
|
||||
Rectangle space = composite.getClientArea();
|
||||
Control[] children = composite.getChildren();
|
||||
|
||||
if(flushCache || firstChildSize.x == 0 || firstChildSize.y == 0) {
|
||||
if(children != null && children.length > 0) {
|
||||
Point childSize = children[0].computeSize(-1, -1, true);
|
||||
|
||||
firstChildSize.x = childSize.x;
|
||||
firstChildSize.y = childSize.y;
|
||||
}//if//
|
||||
else {
|
||||
firstChildSize.x = 0;
|
||||
firstChildSize.y = 0;
|
||||
}//else//
|
||||
}//if//
|
||||
|
||||
if(children != null) {
|
||||
for(int index = 0; index < children.length; index++) {
|
||||
if(index == 0) {
|
||||
children[index].setSize(firstChildSize);
|
||||
children[index].setLocation(space.x + ((space.width - firstChildSize.x) >> 1), space.y + ((space.height - firstChildSize.y) >> 1));
|
||||
}//if//
|
||||
else {
|
||||
children[index].setSize(0, 0);
|
||||
children[index].setLocation(0, 0);
|
||||
}//else//
|
||||
}//for//
|
||||
}//if//
|
||||
}//layout()//
|
||||
}//CenterLayout//
|
||||
Reference in New Issue
Block a user