/******************************************************************************* * Copyright (c) 2012-2013 RelationWare, Benno Luthiger * 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: * RelationWare, Benno Luthiger ******************************************************************************/ package org.ripla.web.util; import org.ripla.interfaces.IMessages; import org.ripla.web.Activator; import com.vaadin.data.Validator; import com.vaadin.server.Sizeable; import com.vaadin.server.Sizeable.Unit; import com.vaadin.shared.ui.label.ContentMode; import com.vaadin.ui.Alignment; import com.vaadin.ui.Button; import com.vaadin.ui.Component; import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.Label; import com.vaadin.ui.TextField; /** * Constants and templates useful for views in use case providing bundles. * * @author Luthiger */ public final class RiplaViewHelper { /** * xhtml for a title tag with a specified class attribute */ public static final String TMPL_TITLE = "<div class=\"%s\">%s</div>"; //$NON-NLS-1$ public static final String TMPL_WARNING = "<div class=\"vif-warning\">%s</div>"; //$NON-NLS-1$ public enum ConversionType { STRING_TO_NUMBER("errmsg.validation.no.number"); private String msgKey; ConversionType(String inMsgKey) { msgKey = inMsgKey; } public String getMsg(IMessages inMessages) { return inMessages.getMessage(msgKey); } } private RiplaViewHelper() { } /** * Adds space to the layout: * * <pre> * <div class="spacer"></div> * </pre> * * The amount of space added can be controlled in the application's css: css * selector <code>div.spacer</code>. * * @return Component */ public static Component createSpacer() { return new Label("<div class=\"spacer\"></div>", ContentMode.HTML); //$NON-NLS-1$ } /** * Creates a layout component with the specified buttons aligned * horizontally. * * @param inButtons * Button... the buttons to align * @return {@link HorizontalLayout} */ public static HorizontalLayout createButtons(final Button... inButtons) { final HorizontalLayout outButtons = new HorizontalLayout(); outButtons.setStyleName("ripla-buttons"); //$NON-NLS-1$ outButtons.setSpacing(true); outButtons.setWidth("100%"); //$NON-NLS-1$ for (final Button lButton : inButtons) { outButtons.addComponent(lButton); } final Button lLast = inButtons[inButtons.length - 1]; outButtons.setExpandRatio(lLast, 1); outButtons.setComponentAlignment(lLast, Alignment.MIDDLE_LEFT); return outButtons; } /** * Helper method to create a text field. * * @param inWidth * int the field width (in pixels) * @return {@link TextField} */ public static TextField createTextField(final int inWidth) { return prepareTextField(new TextField(), inWidth); } /** * Helper method to create a text field with input validation. * * @param inWidth * int the field width (in pixels) * @param inValidator * {@link Validator} the field's validator * @return {@link TextField} */ public static TextField createTextField(final int inWidth, final Validator inValidator) { final TextField out = new TextField(); out.addValidator(inValidator); return prepareTextField(out, inWidth); } /** * Helper method to create a text field. * * @param inWidth int the field width (in pixels) * @param inType {@link ConversionType} the conversion type (needed for the localized validation message) * @return {@link TextField} */ public static TextField createTextField(final int inWidth, final ConversionType inType) { final TextField out = new TextField(); out.setConversionError(inType.getMsg(Activator.getMessages())); return prepareTextField(out, inWidth); } private static TextField prepareTextField(final TextField inField, final int inWidth) { inField.setWidth(inWidth, Unit.PIXELS); inField.setStyleName("ripla-input"); //$NON-NLS-1$ return inField; } /** * Helper method to create a text field. * * @param inContent * String the text field's content * @param inWidth * int the field width (in pixels) * @param inValidator * {@link Validator} the field's validator or <code>null</code>, * if no validation is applied * @return {@link TextField} */ public static TextField createTextField(final String inContent, final int inWidth, final Validator inValidator) { final TextField out = new TextField(null, inContent); if (inValidator != null) { out.addValidator(inValidator); } return prepareTextField(out, inWidth); } /** * Convenience method to make a label width undefined. * * @param inLabel * {@link Label} to prepare * @return Label with width <code>SIZE_UNDEFINED</code> */ public static Label makeUndefinedWidth(final Label inLabel) { inLabel.setWidth(Sizeable.SIZE_UNDEFINED, Unit.PIXELS); return inLabel; } }