/** * */ package org.javabuilders.gtk.handler.type; import java.util.Map; import java.util.Set; import org.gnome.gtk.Menu; import org.gnome.gtk.MenuItem; import org.javabuilders.BuildException; import org.javabuilders.BuildProcess; import org.javabuilders.BuilderConfig; import org.javabuilders.Node; import org.javabuilders.gtk.GtkConstants; import org.javabuilders.handler.AbstractTypeHandler; import org.javabuilders.handler.ITypeHandlerFinishProcessor; /** * MenuItem handler * @author Jacek Furmankiewicz * */ public class MenuItemTypeHandler extends AbstractTypeHandler implements ITypeHandlerFinishProcessor{ /** * Constructor */ public MenuItemTypeHandler() { super(GtkConstants.LABEL, GtkConstants.MNEMONIC_LABEL); } /* (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 { MenuItem instance = null; String label = (String) typeDefinition.get(GtkConstants.MNEMONIC_LABEL); if (label == null) { label = (String) typeDefinition.get(GtkConstants.LABEL); } instance = new MenuItem(label); return useExistingInstance(config, process, parent, key, typeDefinition, instance); } /* (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,instance); return node; } /* (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 { if (1==1) return; MenuItem item = (MenuItem) current.getMainObject(); Set<Node> nodes = current.getContentNodes(Menu.class); if (nodes.size() > 1) { throw new BuildException("Only 1 Menu can be specified underneath a MenuItem: {0}", typeDefinition); } for(Node node : nodes){ Menu menu = (Menu) node.getMainObject(); //item.setSubmenu(menu); break; } } /* (non-Javadoc) * @see org.javabuilders.IApplicable#getApplicableClass() */ public Class<MenuItem> getApplicableClass() { return MenuItem.class; } }