/* @VaadinApache2LicenseForJavaFiles@ */ package com.vaadin.ui; import com.vaadin.data.Property; import com.vaadin.terminal.PaintException; import com.vaadin.terminal.PaintTarget; import com.vaadin.terminal.gwt.client.ui.VTextArea; /** * A text field that supports multi line editing. */ @ClientWidget(VTextArea.class) public class TextArea extends AbstractTextField { private static final int DEFAULT_ROWS = 5; /** * Number of visible rows in the text area. */ private int rows = DEFAULT_ROWS; /** * Tells if word-wrapping should be used in the text area. */ private boolean wordwrap = true; /** * Constructs an empty TextArea. */ public TextArea() { setValue(""); } /** * Constructs an empty TextArea with given caption. * * @param caption * the caption for the field. */ public TextArea(String caption) { this(); setCaption(caption); } /** * Constructs a TextArea with given property data source. * * @param dataSource * the data source for the field */ public TextArea(Property dataSource) { this(); setPropertyDataSource(dataSource); } /** * Constructs a TextArea with given caption and property data source. * * @param caption * the caption for the field * @param dataSource * the data source for the field */ public TextArea(String caption, Property dataSource) { this(dataSource); setCaption(caption); } /** * Constructs a TextArea with given caption and value. * * @param caption * the caption for the field * @param value * the value for the field */ public TextArea(String caption, String value) { this(caption); setValue(value); } /** * Sets the number of rows in the text area. * * @param rows * the number of rows for this text area. */ public void setRows(int rows) { if (rows < 0) { rows = 0; } if (this.rows != rows) { this.rows = rows; requestRepaint(); } } /** * Gets the number of rows in the text area. * * @return number of explicitly set rows. */ public int getRows() { return rows; } /** * Sets the text area's word-wrap mode on or off. * * @param wordwrap * the boolean value specifying if the text area should be in * word-wrap mode. */ public void setWordwrap(boolean wordwrap) { if (this.wordwrap != wordwrap) { this.wordwrap = wordwrap; requestRepaint(); } } /** * Tests if the text area is in word-wrap mode. * * @return true if the component is in word-wrap mode, * false if not. */ public boolean isWordwrap() { return wordwrap; } @Override public void paintContent(PaintTarget target) throws PaintException { super.paintContent(target); target.addAttribute("rows", getRows()); if (!isWordwrap()) { // Wordwrap is only painted if turned off to minimize communications target.addAttribute("wordwrap", false); } } }