package com.rntsoft.gwt.client;
import com.google.gwt.user.client.*;
import com.google.gwt.user.client.ui.*;
import com.google.gwt.core.client.*;
public class GWTClient implements EntryPoint{
private final Object[][] rowData = {
{ new DeleteButton("Delete"), "A", "B", "C", "D"},
{ new DeleteButton("Delete"), "E", "F", "G", "H"},
{ new DeleteButton("Delete"), "I", "J", "K", "L"},
};
private final ComponentFlexTable table = new ComponentFlexTable(rowData);
private void onCellClicked(SourcesTableEvents sender, final int row, final int cell){
if (row == 0) {
return;
}
final Widget widget = table.getWidget(row, cell);
if (widget instanceof Label == false) {
return;
}
final Label label = (Label)widget;
final TextBox textBox = new TextBox();
textBox.setText(table.getText(row, cell));
table.setWidget(row, cell, textBox);
DeferredCommand.addCommand(new Command() {
public void execute() {
textBox.setFocus(true);
textBox.selectAll();
}
});
textBox.addKeyboardListener(
new KeyboardListenerAdapter() {
public void onKeyPress(Widget sender,
char keyCode, int modifiers) {
if (keyCode == KeyboardListener.KEY_ENTER) {
label.setText(textBox.getText());
table.setWidget(row, cell, label);
} else if (keyCode ==
KeyboardListener.KEY_ESCAPE) {
table.setWidget(row, cell, label);
}
}
});
textBox.addFocusListener(new FocusListenerAdapter() {
public void onLostFocus(Widget sender) {
label.setText(textBox.getText());
table.setWidget(row, cell, label);
}
});
}
public void onModuleLoad() {
table.addColumn("");
table.addColumn("Column 1");
table.addColumn("Column 2");
table.addColumn("Column 3");
table.addColumn("Column 4");
RootPanel.get().add(table);
table.addTableListener(new TableListener() {
public void onCellClicked(SourcesTableEvents sender, final int row, final int cell) {
GWTClient.this.onCellClicked(sender, row, cell);
}
});
}
private class DeleteButton extends Button {
public DeleteButton(String text) {
super(text);
addClickListener(new ClickListener() {
public void onClick(Widget sender) {
table.removeRow(getThisRow());
table.updateRowStyle();
}
});
}
private int getThisRow() {
for (int i=1; i < table.getRowCount(); ++i) {
if (table.getWidget(i, 0) == this) {
return i;
}
}
return -1;
}
}
}
class ComponentFlexTable extends FlexTable {
protected static final int HEADER_ROW = 0;
private int rowIndex = 1;
private Object[][] rowData = null;
public ComponentFlexTable(Object[][] rowData) {
insertRow(HEADER_ROW);
getRowFormatter().addStyleName(HEADER_ROW,"ComponentFlexTable-Header");
setCellSpacing(0);
addStyleName("ComponentFlexTable");
this.rowData = rowData;
createRows(0);
updateRowStyle();
}
public void createRows(int rowIndex) {
if (rowData == null)
return;
for (int row = rowIndex; row < rowData.length; row++) {
addRow(rowData[row]);
}
}
private void addRow(Object[] cellObjects) {
for (int i = 0; i < cellObjects.length; i++) {
addCell(rowIndex, i, cellObjects[i]);
}
rowIndex++;
}
public void addCell(int row, int cell, Object cellObject) {
if (cellObject instanceof Widget)
setWidget(row, cell, (Widget) cellObject);
else
setWidget(row, cell,new Label(cellObject.toString()));
getCellFormatter().addStyleName(row, cell,"ComponentFlexTable-Cell");
}
public void updateRowStyle() {
HTMLTable.RowFormatter rf = getRowFormatter();
for (int row = 1; row < getRowCount(); ++row) {
if ((row % 2) != 0) {
rf.removeStyleName(row,"ComponentFlexTable-EvenRow");
rf.addStyleName(row,"ComponentFlexTable-OddRow");
}else {
rf.removeStyleName(row,"ComponentFlexTable-OddRow");
rf.addStyleName(row,"ComponentFlexTable-EvenRow");
}
}
}
public void addColumn(Object columnHeading) {
Widget widget = new Label(columnHeading.toString());
int columnIndex = getColumnCount();
widget.setWidth("100%");
widget.addStyleName("ComponentFlexTable-ColumnLabel");
setWidget(HEADER_ROW, columnIndex, widget);
getCellFormatter().addStyleName(HEADER_ROW, columnIndex,"ComponentFlexTable-ColumnLabelCell");
}
public int getColumnCount() {
return getCellCount(HEADER_ROW);
}
}
/////////////
.ComponentFlexTable {
border-top: thin solid #444444;
border-left: thin solid #444444;
border-right: thin solid #111111;
border-bottom: thin solid #111111;
background-color: #505050;
}
.ComponentFlexTable-Header {
}
.ComponentFlexTable-OddRow {
background-color: #cccccc;
}
.ComponentFlexTable-EvenRow {
background-color: #505050;
}
.ComponentFlexTable-ColumnLabel {
color: white;
padding: 3px;
}
.ComponentFlexTable-ColumnLabelCell {
color: white;
border-width: 0 0 0 1px;
border-style: solid;
border-color: white;
margin: 0;
padding: 0;
text-align: center;
}
.ComponentFlexTable-Cell {
border-width: 0px 0px 0px 1px;
border-style: solid;
color: white;
border-color: white;
padding: 5px;
}
GWT-componentFlexTable.zip( 4 k)