/**
*
*/
package org.javabuilders.swt.handler.type;
import java.util.Map;
import java.util.Set;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.Shell;
import org.javabuilders.BuildException;
import org.javabuilders.BuildProcess;
import org.javabuilders.Builder;
import org.javabuilders.BuilderConfig;
import org.javabuilders.IAllowedPropertyFormat;
import org.javabuilders.Node;
import org.javabuilders.handler.AbstractTypeHandler;
import org.javabuilders.handler.ITypeHandlerFinishProcessor;
/**
* Handles creating a SWT shell
* @author Jacek Furmankiewicz
*
*/
public class ShellHandler extends AbstractTypeHandler implements ITypeHandlerFinishProcessor,
IAllowedPropertyFormat {
//properties
public static final String SIZE="size";
public static final String LOCATION="location";
public static final String BOUNDS="bounds";
public static final String X = "x";
public static final String Y = "y";
public static final String WIDTH = "width";
public static final String HEIGHT = "height";
//values
public static final String PACKED = "packed";
public static final String CENTER = "center";
public static final String CENTER_PARENT = "centerParent";
private static final ShellHandler singleton = new ShellHandler();
/**
* Returns the singleton
* @return Singleton
*/
public static ShellHandler getInstance() {
return singleton;
}
/**
* Constructor
*/
private ShellHandler() {}
/* (non-Javadoc)
* @see org.javabuilders.IKeyValueConsumer#getApplicableClass()
*/
public Class<?> getApplicableClass() {
return Shell.class;
}
/* (non-Javadoc)
* @see org.javabuilders.handler.ITypeHandler#createNewInstance(org.javabuilders.BuilderConfig, org.javabuilders.BuildProcess, org.javabuilders.Node, java.lang.String, java.util.Map)
*/
public Node createNewInstance(BuilderConfig config, BuildProcess process,
Node parent, String key, Map<String, Object> typeDefinition)
throws BuildException {
Display display = Display.getDefault();
Shell instance = new Shell(display);
return useExistingInstance(config, process, parent, key, typeDefinition, instance);
}
/* (non-Javadoc)
* @see org.javabuilders.handler.ITypeHandlerFinishProcessor#finish(org.javabuilders.BuilderConfig, org.javabuilders.BuildProcess, org.javabuilders.Node, java.lang.String, java.util.Map)
*/
public void finish(BuilderConfig config, BuildProcess process,
Node current, String key, Map<String, Object> typeDefinition)
throws BuildException {
Shell shell = (Shell) current.getMainObject();
Node content = current.getChildNode(Builder.CONTENT);
if (content != null) {
Set<Node> menus = content.getChildNodes(Menu.class);
boolean menuBarSet = false;
for(Node node : menus) {
if (!menuBarSet) {
shell.setMenuBar((Menu) node.getMainObject());
menuBarSet = true;
} else {
shell.setMenu((Menu) node.getMainObject());
}
}
}
//handle size/bounds
if (PACKED.equals(current.getStringProperty(SIZE))) {
shell.pack();
}
/*
int x = shell.getLocation().x;
int y = shell.getLocation().y;
int width = shell.getSize().x;
int height = shell.getSize().y;
*/
}
/* (non-Javadoc)
* @see org.javabuilders.handler.ITypeHandler#useExistingInstance(org.javabuilders.BuilderConfig, org.javabuilders.BuildProcess, org.javabuilders.Node, java.lang.String, java.util.Map, java.lang.Object)
*/
public Node useExistingInstance(BuilderConfig config, BuildProcess process,
Node parent, String key, Map<String, Object> typeDefinition,
Object instance) throws BuildException {
Node node = new Node(parent,key,typeDefinition);
node.setMainObject(instance);
return node;
}
public String getRegexPattern(String propertyName) {
return null;
}
public String getValidSample(String propertyName) {
// TODO Auto-generated method stub
return null;
}
}