/******************************************************************************* * Copyright (c) 2006 Sybase, Inc. and others. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Sybase, Inc. - initial API and implementation *******************************************************************************/ package org.eclipse.jst.pagedesigner.figurehandler; import org.eclipse.jst.jsf.common.ui.JSFUICommonPlugin; import org.eclipse.jst.jsf.common.ui.internal.utils.JSFSharedImages; import org.eclipse.jst.pagedesigner.css2.property.ICSSPropertyID; import org.eclipse.jst.pagedesigner.css2.provider.ICSSWidgetProvider; import org.eclipse.jst.pagedesigner.css2.widget.ButtonWidgetProvider; import org.eclipse.jst.pagedesigner.css2.widget.CheckboxWidgetProvider; import org.eclipse.jst.pagedesigner.css2.widget.HiddenProvider; import org.eclipse.jst.pagedesigner.css2.widget.ImageWidgetProvider; import org.eclipse.jst.pagedesigner.css2.widget.InputFileWidgetProvider; import org.eclipse.jst.pagedesigner.css2.widget.RadioWidgetProvider; import org.eclipse.jst.pagedesigner.css2.widget.TextInputWidgetProvider; import org.eclipse.jst.pagedesigner.utils.DOMUtil; import org.eclipse.jst.pagedesigner.utils.ImageResolver; import org.eclipse.swt.graphics.Image; import org.w3c.dom.Element; /** * @author mengbo */ /*package*/ class InputFigureHandler extends WidgetFigureHandler { private Image _image; void initializeImage(Element node) { if (_image != null) { _image.dispose(); } _image = ImageResolver.initializeImage(node, "src"); } ImageWidgetProvider getImageProvider(Element node) { initializeImage(node); ImageWidgetProvider provider = new ImageWidgetProvider(_image, getCSSStyle(node)); return provider; } ICSSWidgetProvider getButtonProvider(Element node) { ButtonWidgetProvider provider = new ButtonWidgetProvider( getCSSStyle(node)); provider.setValue(getButtonValue(node)); return provider; } ICSSWidgetProvider getFileProvider(Element node) { // ICSSWidgetProvider textprovider = getTextInputProvider(); // // XXX: should we use the defaultstyle for the button? // ButtonWidgetProvider browsebutton = new // ButtonWidgetProvider(getCSSStyle()); // browsebutton.setValue("Browse..."); // CompositeWidgetProvider provider = new // CompositeWidgetProvider(getCSSStyle(), textprovider, browsebutton, // false); // return provider; ICSSWidgetProvider textprovider = getTextInputProvider(node); // XXX: should we use the defaultstyle for the button? ButtonWidgetProvider browsebutton = new ButtonWidgetProvider( getCSSStyle(node)); browsebutton.setValue("Browse..."); InputFileWidgetProvider provider = new InputFileWidgetProvider( getCSSStyle(node), textprovider, browsebutton); return provider; } /** * should not return null * * @return the image */ protected Image getHiddenImage() { return JSFUICommonPlugin.getDefault().getImage( JSFSharedImages.DEFAULT_PALETTE_TAG_IMG); } ICSSWidgetProvider getHiddenProvider(Element node) { return new HiddenProvider(getHiddenImage(), node); } ICSSWidgetProvider getPasswordProvider(Element node) { TextInputWidgetProvider provider = new TextInputWidgetProvider( getCSSStyle(node), TextInputWidgetProvider.PWD_SIZE); provider.setSize(getSize(node)); provider.setValue("********"); return provider; } ICSSWidgetProvider getTextInputProvider(Element node) { TextInputWidgetProvider provider = new TextInputWidgetProvider( getCSSStyle(node)); provider.setSize(getSize(node)); provider.setValue(getValue(node)); return provider; } private int getSize(Element node) { String s = DOMUtil.getAttributeIgnoreCase(node, "size"); try { if (s != null) { return Integer.parseInt(s); } } catch (NumberFormatException ex) { // suppress and fall-through; return 0 } return 0; } /** * @return */ private String getValue(Element node) { return DOMUtil.getAttributeIgnoreCase(node, "value"); } private String getButtonValue(Element node) { String value = getValue(node); if (value == null) { String type = DOMUtil.getAttributeIgnoreCase(node, ICSSPropertyID.ATTR_TYPE); if (type.equalsIgnoreCase(ICSSPropertyID.VAL_SUBMIT)) { return "Submit Query"; } else if (type.equalsIgnoreCase(ICSSPropertyID.VAL_RESET)) { return "Reset"; } } return value; } /** * @return the widget provider */ protected ICSSWidgetProvider initializeWidgetProvider(Element node) { reset(); String type = DOMUtil.getAttributeIgnoreCase(node, ICSSPropertyID.ATTR_TYPE); if (type == null) { return getTextInputProvider(node); } else if (type.equalsIgnoreCase(ICSSPropertyID.VAL_SUBMIT) || type.equalsIgnoreCase(ICSSPropertyID.VAL_RESET) || type.equalsIgnoreCase(ICSSPropertyID.VAL_BUTTON)) { return getButtonProvider(node); } else if (type.equalsIgnoreCase(ICSSPropertyID.VAL_IMAGE)) { return getImageProvider(node); } else if (type.equalsIgnoreCase(ICSSPropertyID.VAL_FILE)) { return getFileProvider(node); } else if (type.equalsIgnoreCase(ICSSPropertyID.VAL_RADIO)) { RadioWidgetProvider provider = new RadioWidgetProvider( getCSSStyle(node)); provider.setChecked(node.hasAttribute("checked")); return provider; } else if (type.equalsIgnoreCase(ICSSPropertyID.VAL_CHECKBOX)) { CheckboxWidgetProvider provider = new CheckboxWidgetProvider( getCSSStyle(node)); provider.setChecked(node.hasAttribute("checked")); return provider; } else if (type.equalsIgnoreCase(ICSSPropertyID.VAL_HIDDEN)) { return getHiddenProvider(node); } if (type.equalsIgnoreCase(ICSSPropertyID.VAL_PASSWORD)) { return getPasswordProvider(node); } return getTextInputProvider(node); } /** * */ private void reset() { if (_image != null) { _image.dispose(); _image = null; } } public void dispose() { reset(); } }