package org.javabuilders.layout.mig;
import java.util.HashMap;
import java.util.Map;
import org.javabuilders.layout.ControlConstraint;
import org.javabuilders.layout.DefaultResize;
import org.javabuilders.layout.Size;
/**
* Common constants and methods for integrating the MigLayout (since it is used by both the SWT and Swing
* builders and hence cross-domain)
* @author Jacek Furmankiewicz
*
*/
public class MigLayoutCommon {
public final static String LAYOUT_CONSTRAINTS = "layoutConstraints";
public final static String ROW_CONSTRAINTS = "rowConstraints";
public final static String COLUMN_CONSTRAINTS = "columnConstraints";
public final static String DEFAULT_ROW_COLUMN_CONSTRAINT = "[] ";
/**
* RESIZE HELPERS
*/
private final static Map<DefaultResize,String> resizeConstraints = new HashMap<DefaultResize, String>();
static {
resizeConstraints.put(DefaultResize.BOTH, "grow");
resizeConstraints.put(DefaultResize.X_AXIS, "growx");
resizeConstraints.put(DefaultResize.Y_AXIS, "growy");
}
/**
* Handles all the size/height/resize logic
* @param builder Current builder
* @param c Control constraints
* @param defaultResize Default resize
* @param additionalConstraints Any additional control constraints
*/
public static void handleResize(StringBuilder builder, ControlConstraint c, DefaultResize defaultResize, String additionalConstraints) {
String resize = resizeConstraints.get(defaultResize);
if (c.getHSize() == Size.DEFAULT && c.getVSize() == Size.DEFAULT) {
//no specific size constraints, use default resize logic
if (resize != null) {
//only add it there aren't some additional "grow" constraints that override it
if (additionalConstraints == null || additionalConstraints.indexOf("grow") < 0) {
//no resize related additional constraints
if (builder.length() > 0) {
builder.append(", ");
}
builder.append(resize);
}
}
} else {
if (builder.length() > 0) {
builder.append(", ");
}
//width
switch (c.getHSize()) {
case MIN:
builder.append("width min!");
break;
case PREF:
builder.append("width pref!");
break;
case MAX:
builder.append("growx"); // width max! seemed buggy
break;
case DEFAULT:
if (defaultResize == DefaultResize.BOTH || defaultResize == DefaultResize.X_AXIS) {
builder.append(resizeConstraints.get(DefaultResize.X_AXIS));
} else {
builder.append("width pref!");
}
break;
}
//height
if (builder.length() > 0) {
builder.append(", ");
}
switch (c.getVSize()) {
case MIN:
builder.append("height min!");
break;
case PREF:
builder.append("height pref!");
break;
case MAX:
builder.append("growy"); //height max! seemed buggy
break;
case DEFAULT:
if (defaultResize == DefaultResize.BOTH || defaultResize == DefaultResize.Y_AXIS) {
builder.append(resizeConstraints.get(DefaultResize.Y_AXIS));
} else {
builder.append("height pref!");
}
break;
}
}
}
}