/* * GNU GENERAL PUBLIC LICENSE, Version 3, 29 June 2007 */ package hudson.gwtmarketplace.client.components; import java.util.ArrayList; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.Grid; public class ThreeByXTextBox extends Composite implements ClickHandler { private Button addButton; private Grid grid; public ThreeByXTextBox() { grid = new Grid(1, 2); grid.setCellPadding(0); grid.setCellSpacing(0); grid.setWidget(0, 0, new ThreeTextBox()); grid.setWidget(0, 1, this.addButton = new Button("Add Row", this)); initWidget(grid); } public void onClick(ClickEvent event) { if (event.getSource().equals(addButton)) { // add a new row int rowCount = grid.getRowCount(); grid.resizeRows(rowCount+1); grid.setWidget(rowCount, 0, new ThreeTextBox()); grid.setWidget(rowCount, 1, new Button("Remove Row", this)); } else { // delete the row int rowCount = grid.getRowCount(); for (int i=0; i<rowCount; i++) { if (grid.getWidget(i, 1).equals(event.getSource())) { grid.removeRow(i); return; } } } } public ArrayList<String> getValues() { ArrayList<String> rtn = new ArrayList<String>(); int rowCount = grid.getRowCount(); for (int i=0; i<rowCount; i++) { ((ThreeTextBox) grid.getWidget(i, 0)).addValues(rtn); } return rtn; } public void setValues(String[] values) { if (null == values || values.length == 0) { grid.resize(1, 2); grid.setWidget(0, 0, new ThreeTextBox()); grid.setWidget(0, 1, this.addButton = new Button("Add Row", this)); } else { int numRows = values.length / 3; if (values.length % 3 != 0) numRows ++; grid.resize(numRows, 2); for (int i=0; i<numRows; i++) { ThreeTextBox ttb = new ThreeTextBox(); ttb.setValues(values, 3*i); grid.setWidget(i, 0, ttb); if (i == (numRows-1)) grid.setWidget(i, 1, this.addButton = new Button("Add Row", this)); else grid.setWidget(i, 1, null); } } } }