/**
*
*/
package org.javabuilders.swt.handler.type.layout;
import java.util.Map;
import java.util.logging.Level;
import net.miginfocom.swt.MigLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.javabuilders.BuildException;
import org.javabuilders.BuildProcess;
import org.javabuilders.BuilderConfig;
import org.javabuilders.Node;
import org.javabuilders.layout.mig.AbstractMigLayoutHandler;
/**
* Handled for SWT MigLayout
* @author Jacek Furmankiewicz
*/
public class MigSWTLayoutHandler extends AbstractMigLayoutHandler {
private final static MigSWTLayoutHandler singleton = new MigSWTLayoutHandler();
/**
* @return Singleton
*/
public static MigSWTLayoutHandler getInstance() {
return singleton;
}
/**
* Constructor
*/
private MigSWTLayoutHandler() {
super(Label.class,"text");
}
/* (non-Javadoc)
* @see org.javabuilders.handler.ITypeHandler#createNewInstance(org.javabuilders.BuilderConfig, org.javabuilders.BuildResult, org.javabuilders.Node, java.lang.String, java.util.Map)
*/
public Node createNewInstance(BuilderConfig config, BuildProcess result,
Node parent, String key, Map<String, Object> typeDefinition) throws BuildException {
MigLayout instance = new MigLayout();
return useExistingInstance(config, result, parent, key, typeDefinition, instance);
}
/* (non-Javadoc)
* @see org.javabuilders.IKeyValueConsumer#getApplicableClass()
*/
public Class<MigLayout> getApplicableClass() {
return MigLayout.class;
}
/* (non-Javadoc)
* @see org.javabuilders.layout.mig.AbstractMigLayoutHandler#setLayoutConstraints(java.lang.Object, java.lang.String)
*/
@Override
protected void setLayoutConstraints(Object layout, String constraints) {
((MigLayout)layout).setLayoutConstraints(constraints);
}
/* (non-Javadoc)
* @see org.javabuilders.layout.mig.AbstractMigLayoutHandler#setRowConstraints(java.lang.Object, java.lang.String)
*/
@Override
protected void setRowConstraints(Object layout, String constraints) {
((MigLayout)layout).setRowConstraints(constraints);
}
/* (non-Javadoc)
* @see org.javabuilders.layout.mig.AbstractMigLayoutHandler#setColumnConstraints(java.lang.Object, java.lang.String)
*/
@Override
protected void setColumnConstraints(Object layout, String constraints) {
((MigLayout)layout).setColumnConstraints(constraints);
}
@Override
protected void applyControlConstraints(BuildProcess result, Node node,
Node components, Map<String, String> layoutConstraints)
throws BuildException {
for(String componentName : layoutConstraints.keySet()) {
String componentConstraint = layoutConstraints.get(componentName);
Control component = (Control)result.getByName(componentName);
component.setLayoutData(componentConstraint);
if (logger.isLoggable(Level.FINE)) {
logger.fine("MigLayout constraints for " + componentName + " : " + componentConstraint);
}
}
}
/* (non-Javadoc)
* @see org.javabuilders.layout.mig.AbstractMigLayoutHandler#getComponent(org.javabuilders.BuildProcess, org.javabuilders.Node, java.lang.String)
*/
@Override
protected Object getComponent(BuildProcess result, Node components,
String name) throws BuildException {
return result.getByName(name);
}
/* (non-Javadoc)
* @see org.javabuilders.layout.mig.AbstractMigLayoutHandler#setLayout(org.javabuilders.BuildProcess, org.javabuilders.Node, java.lang.Object)
*/
@Override
protected void setLayout(BuildProcess result, Node node, Object migLayout)
throws BuildException {
Node parent = node.getParent();
if (parent.getMainObject() instanceof Composite) {
Composite parentContainer = (Composite)parent.getMainObject();
MigLayout layout = (MigLayout)node.getMainObject();
parentContainer.setLayout(layout);
} else {
throw new BuildException("MigLayout can only be present under a parent Composite: {0}", node);
}
}
/* (non-Javadoc)
* @see org.javabuilders.layout.mig.AbstractMigLayoutHandler#setControlName(java.lang.Object, java.lang.String)
*/
@Override
protected void setControlName(Object control, String name) {
//do nothing for SWT -> they do not have a name property
}
}