package org.gudy.azureus2.ui.swt.components;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.widgets.Composite;
import org.gudy.azureus2.core3.util.Debug;
public class CompositeMinSize
extends Composite
{
int minWidth = SWT.DEFAULT;
int minHeight = SWT.DEFAULT;
public CompositeMinSize(Composite parent, int style) {
super(parent, style);
}
public void setMinSize(Point pt) {
minWidth = pt.x;
minHeight = pt.y;
}
public Point computeSize(int wHint, int hHint, boolean changed) {
try {
Point size = super.computeSize(wHint, hHint, changed);
return betterComputeSize(this, size, wHint, hHint, changed);
} catch (Throwable t) {
Debug.out(t);
return new Point(wHint == -1 ? 10 : wHint, hHint == -1 ? 10
: hHint);
}
}
public Point computeSize(int wHint, int hHint) {
try {
Point size = super.computeSize(wHint, hHint);
return betterComputeSize(this, size, wHint, hHint);
} catch (Throwable t) {
Debug.out(t);
return new Point(wHint == -1 ? 10 : wHint, hHint == -1 ? 10
: hHint);
}
}
protected Point betterComputeSize(Composite c, Point size, int wHint,
int hHint) {
if (c.getChildren().length == 0 && (size.x == 64 || size.y == 64)) {
Object ld = c.getLayoutData();
if (ld instanceof FormData) {
FormData fd = (FormData) ld;
if (fd.width != 0 && fd.height != 0) {
Rectangle trim = c.computeTrim (0, 0, fd.width, fd.height);
return new Point(trim.width, trim.height);
}
}
return new Point(1, 1);
}
if (size.x == 0 && size.y == 0) {
return size;
}
if (minWidth > 0 && size.x < minWidth) {
size.x = minWidth;
}
if (minHeight > 0 && size.y < minHeight) {
size.y = minHeight;
}
return size;
}
protected Point betterComputeSize(Composite c, Point size, int wHint, int hHint, boolean changed) {
if (c.getChildren().length == 0 && (size.x == 64 || size.y == 64)) {
Object ld = c.getLayoutData();
if (ld instanceof FormData) {
FormData fd = (FormData) ld;
if (fd.width != 0 && fd.height != 0) {
Rectangle trim = c.computeTrim (0, 0, fd.width, fd.height);
return new Point(trim.width, trim.height);
}
}
return new Point(1, 1);
}
if (size.x == 0 && size.y == 0) {
return size;
}
if (minWidth > 0 && size.x < minWidth) {
size.x = minWidth;
}
if (minHeight > 0 && size.y < minHeight) {
size.y = minHeight;
}
return size;
}
}