From 8d034f682c51aa7b91e4278ce916e9bb9fdb3ae2 Mon Sep 17 00:00:00 2001 From: Matti Tahvonen Date: Tue, 12 Jun 2007 14:10:14 +0000 Subject: [PATCH] draft of scroll table and some other enhancements svn changeset:1685/svn branch:trunk --- .../itmill/toolkit/terminal/PaintTarget.java | 2 + .../toolkit/terminal/gwt/client/Client.java | 3 +- .../gwt/client/DefaultWidgetFactory.java | 3 + .../terminal/gwt/client/ui/Button.java | 31 --- .../terminal/gwt/client/ui/GridLayout.java | 40 --- .../toolkit/terminal/gwt/client/ui/Label.java | 50 ---- .../terminal/gwt/client/ui/OrderedLayout.java | 23 -- .../terminal/gwt/client/ui/TkTable.java | 227 ++++++++++++++++++ .../gwt/client/ui/UnknownComponent.java | 32 --- .../terminal/gwt/client/ui/Window.java | 24 -- .../terminal/gwt/server/JSONPaintTarget.java | 5 + .../terminal/web/AjaxJsonPaintTarget.java | 18 ++ .../terminal/web/AjaxXmlPaintTarget.java | 10 + .../toolkit/terminal/web/WebPaintTarget.java | 19 +- .../itmill/toolkit/ui/AbstractComponent.java | 8 +- src/com/itmill/toolkit/ui/Table.java | 15 +- 16 files changed, 295 insertions(+), 215 deletions(-) delete mode 100644 src/com/itmill/toolkit/terminal/gwt/client/ui/Button.java delete mode 100644 src/com/itmill/toolkit/terminal/gwt/client/ui/GridLayout.java delete mode 100644 src/com/itmill/toolkit/terminal/gwt/client/ui/Label.java delete mode 100644 src/com/itmill/toolkit/terminal/gwt/client/ui/OrderedLayout.java create mode 100644 src/com/itmill/toolkit/terminal/gwt/client/ui/TkTable.java delete mode 100644 src/com/itmill/toolkit/terminal/gwt/client/ui/UnknownComponent.java delete mode 100644 src/com/itmill/toolkit/terminal/gwt/client/ui/Window.java diff --git a/src/com/itmill/toolkit/terminal/PaintTarget.java b/src/com/itmill/toolkit/terminal/PaintTarget.java index e63406c38c..9b42ef8932 100644 --- a/src/com/itmill/toolkit/terminal/PaintTarget.java +++ b/src/com/itmill/toolkit/terminal/PaintTarget.java @@ -305,4 +305,6 @@ public interface PaintTarget { * @since 3.1 */ void addCharacterData(String text) throws PaintException; + + public void addAttribute(String string, Object[] keys); } diff --git a/src/com/itmill/toolkit/terminal/gwt/client/Client.java b/src/com/itmill/toolkit/terminal/gwt/client/Client.java index 038d66e1dd..626893a6cc 100755 --- a/src/com/itmill/toolkit/terminal/gwt/client/Client.java +++ b/src/com/itmill/toolkit/terminal/gwt/client/Client.java @@ -104,6 +104,7 @@ public class Client implements EntryPoint { Date start = new Date(); console.log(response.getText().substring(3) + "}"); + System.out.println(response.getText().substring(3) + "}"); JSONValue json = JSONParser .parse(response.getText().substring(3) + "}"); // Process changes @@ -130,7 +131,7 @@ public class Client implements EntryPoint { + ", but there is no such paintable (" + uidl.getId() + ") registered yet."); Widget window = createWidgetFromUIDL(uidl); - // We should also handle other windows + // TODO We should also handle other windows RootPanel.get("itmtk-ajax-window").add(window); } diff --git a/src/com/itmill/toolkit/terminal/gwt/client/DefaultWidgetFactory.java b/src/com/itmill/toolkit/terminal/gwt/client/DefaultWidgetFactory.java index eb5ed6e852..f80b3bd00a 100644 --- a/src/com/itmill/toolkit/terminal/gwt/client/DefaultWidgetFactory.java +++ b/src/com/itmill/toolkit/terminal/gwt/client/DefaultWidgetFactory.java @@ -8,6 +8,7 @@ import com.itmill.toolkit.terminal.gwt.client.ui.TkLabel; import com.itmill.toolkit.terminal.gwt.client.ui.TkOrderedLayout; import com.itmill.toolkit.terminal.gwt.client.ui.TkPanel; import com.itmill.toolkit.terminal.gwt.client.ui.TkSelect; +import com.itmill.toolkit.terminal.gwt.client.ui.TkTable; import com.itmill.toolkit.terminal.gwt.client.ui.TkTabsheet; import com.itmill.toolkit.terminal.gwt.client.ui.TkTextField; import com.itmill.toolkit.terminal.gwt.client.ui.TkTree; @@ -40,6 +41,8 @@ public class DefaultWidgetFactory implements WidgetFactory { return new TkEmbedded(); if ("textfield".equals(tag)) return new TkTextField(); + if ("table".equals(tag)) + return new TkTable(); return new TkUnknownComponent(); } diff --git a/src/com/itmill/toolkit/terminal/gwt/client/ui/Button.java b/src/com/itmill/toolkit/terminal/gwt/client/ui/Button.java deleted file mode 100644 index 342e751666..0000000000 --- a/src/com/itmill/toolkit/terminal/gwt/client/ui/Button.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.itmill.toolkit.terminal.gwt.client.ui; - -import com.google.gwt.user.client.ui.ClickListener; -import com.google.gwt.user.client.ui.Widget; -import com.itmill.toolkit.terminal.gwt.client.Client; -import com.itmill.toolkit.terminal.gwt.client.Paintable; -import com.itmill.toolkit.terminal.gwt.client.UIDL; - -public class Button extends com.google.gwt.user.client.ui.Button implements - Paintable, ClickListener { - - String id; - - Client client; - - public Button() { - addClickListener(this); - } - - public void updateFromUIDL(UIDL uidl, Client client) { - this.client = client; - id = uidl.getId(); - setText(uidl.getStringAttribute("caption")); - } - - public void onClick(Widget sender) { - if (id == null || client == null) - return; - client.updateVariable(id, "state", true, true); - } -} diff --git a/src/com/itmill/toolkit/terminal/gwt/client/ui/GridLayout.java b/src/com/itmill/toolkit/terminal/gwt/client/ui/GridLayout.java deleted file mode 100644 index e3c560408c..0000000000 --- a/src/com/itmill/toolkit/terminal/gwt/client/ui/GridLayout.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.itmill.toolkit.terminal.gwt.client.ui; - -import java.util.Iterator; - -import com.google.gwt.user.client.ui.FlexTable; -import com.google.gwt.user.client.ui.Widget; -import com.itmill.toolkit.terminal.gwt.client.Client; -import com.itmill.toolkit.terminal.gwt.client.Paintable; -import com.itmill.toolkit.terminal.gwt.client.UIDL; - -public class GridLayout extends FlexTable implements Paintable { - - public void updateFromUIDL(UIDL uidl, Client client) { - clear(); - if (uidl.hasAttribute("caption")) setTitle(uidl.getStringAttribute("caption")); - int row = 0, column = 0; - for (Iterator i = uidl.getChildIterator(); i.hasNext();) { - UIDL r = (UIDL) i.next(); - if ("gr".equals(r.getTag())) { - row++; - column = 0; - for (Iterator j = r.getChildIterator(); j.hasNext();) { - UIDL c = (UIDL) j.next(); - if ("gc".equals(c.getTag())) { - column++; - if(c.hasAttribute("w")) { - int w = c.getIntAttribute("w"); - ((FlexCellFormatter)getCellFormatter()).setColSpan(row,column, w); - } - UIDL u = c.getChildUIDL(0); - Widget child = client.createWidgetFromUIDL(u); - if (child != null) - setWidget(row, column, child); - } - } - } - } - } - -} diff --git a/src/com/itmill/toolkit/terminal/gwt/client/ui/Label.java b/src/com/itmill/toolkit/terminal/gwt/client/ui/Label.java deleted file mode 100644 index 3be8e0b49f..0000000000 --- a/src/com/itmill/toolkit/terminal/gwt/client/ui/Label.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.itmill.toolkit.terminal.gwt.client.ui; - -import com.google.gwt.user.client.ui.Composite; -import com.google.gwt.user.client.ui.HTML; -import com.google.gwt.user.client.ui.VerticalPanel; -import com.itmill.toolkit.terminal.gwt.client.Client; -import com.itmill.toolkit.terminal.gwt.client.Paintable; -import com.itmill.toolkit.terminal.gwt.client.UIDL; - -public class Label extends Composite implements Paintable{ - - com.google.gwt.user.client.ui.Label caption = new com.google.gwt.user.client.ui.Label();; - HTML content = new HTML(); - - public Label() { - VerticalPanel panel = new VerticalPanel(); - panel.add(caption); - panel.add(content); - initWidget(panel); - setStyleName("itmtk-label"); - caption.setStyleName("itmtk-label-caption"); - content.setStyleName("itmtk-label-content"); - } - - public void updateFromUIDL(UIDL uidl, Client client) { - try{ - UIDL child = uidl.getChildUIDL(0).getChildUIDL(0); - if(child.hasAttribute("xmlns") && - child.getStringAttribute("xmlns"). - equals("http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd")) { - setContent(child.getChildString(0)); - } else { - setContent("Terminals Label compoent can't handle this content type."); - } - } catch (Exception e) { - setContent(uidl.getChildString(0)); - } - if(uidl.hasAttribute("caption")) - setCaption(uidl.getStringAttribute("caption")); - else - caption.setVisible(false); - } - - public void setContent(String c) { - content.setHTML(c); - } - public void setCaption(String c) { - caption.setText(c); - } -} diff --git a/src/com/itmill/toolkit/terminal/gwt/client/ui/OrderedLayout.java b/src/com/itmill/toolkit/terminal/gwt/client/ui/OrderedLayout.java deleted file mode 100644 index b0a5aec571..0000000000 --- a/src/com/itmill/toolkit/terminal/gwt/client/ui/OrderedLayout.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.itmill.toolkit.terminal.gwt.client.ui; - -import java.util.Iterator; - -import com.google.gwt.user.client.ui.VerticalPanel; -import com.google.gwt.user.client.ui.Widget; -import com.itmill.toolkit.terminal.gwt.client.Client; -import com.itmill.toolkit.terminal.gwt.client.Paintable; -import com.itmill.toolkit.terminal.gwt.client.UIDL; - -public class OrderedLayout extends VerticalPanel implements Paintable { - - public void updateFromUIDL(UIDL uidl, Client client) { - clear(); - if (uidl.hasAttribute("caption")) setTitle(uidl.getStringAttribute("caption")); - for (Iterator i = uidl.getChildIterator(); i.hasNext();) { - UIDL uidlForChild = (UIDL)i.next(); - Widget child = client.createWidgetFromUIDL(uidlForChild); - add(child); - } - } - -} diff --git a/src/com/itmill/toolkit/terminal/gwt/client/ui/TkTable.java b/src/com/itmill/toolkit/terminal/gwt/client/ui/TkTable.java new file mode 100644 index 0000000000..9c6b90157c --- /dev/null +++ b/src/com/itmill/toolkit/terminal/gwt/client/ui/TkTable.java @@ -0,0 +1,227 @@ +package com.itmill.toolkit.terminal.gwt.client.ui; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +import com.google.gwt.user.client.Command; +import com.google.gwt.user.client.DOM; +import com.google.gwt.user.client.DeferredCommand; +import com.google.gwt.user.client.Element; +import com.google.gwt.user.client.ui.Composite; +import com.google.gwt.user.client.ui.FlexTable; +import com.google.gwt.user.client.ui.HTML; +import com.google.gwt.user.client.ui.ScrollPanel; +import com.google.gwt.user.client.ui.VerticalPanel; +import com.google.gwt.user.client.ui.Widget; +import com.google.gwt.user.client.ui.FlexTable.FlexCellFormatter; +import com.itmill.toolkit.terminal.gwt.client.Client; +import com.itmill.toolkit.terminal.gwt.client.Paintable; +import com.itmill.toolkit.terminal.gwt.client.UIDL; + +public class TkTable extends Composite implements Paintable { + + private int firstRendered = 0; + private int lastRendered = 0; + private int firstRowInViewPort = 0; + private int pageLength = 15; + + private int rowHeaders = 0; + + private Map columnOrder = new HashMap(); + + private Client client; + private String id; + private boolean immediate; + + private FlexTable tHead = new FlexTable(); + private FlexTable tBody = new FlexTable(); + + private ScrollPanel bodyContainer = new ScrollPanel(); + private VerticalPanel bodyContent = new VerticalPanel(); + + private ScrollPanel headerContainer = new ScrollPanel(); + + private HTML preSpacer = new HTML(); + private HTML postSpacer = new HTML(); + + private boolean colWidthsInitialized = false; + private int totalRows; + private HashMap columnWidths = new HashMap(); + + public TkTable() { + headerContainer.add(tHead); + DOM.setStyleAttribute(headerContainer.getElement(), "overflow", "hidden"); + + bodyContent.add(preSpacer); + bodyContent.add(tBody); + bodyContent.add(postSpacer); + //TODO remove debug color + DOM.setStyleAttribute(postSpacer.getElement(), "background", "red"); + bodyContainer.add(bodyContent); + + VerticalPanel panel = new VerticalPanel(); + panel.add(headerContainer); + panel.add(bodyContainer); + + initWidget(panel); + } + + public void updateFromUIDL(UIDL uidl, Client client) { + this.client = client; + this.id = uidl.getStringAttribute("id"); + this.immediate = uidl.getBooleanAttribute("immediate"); + this.totalRows = uidl.getIntAttribute("totalrows"); + + UIDL columnInfo = null; + UIDL rowData = null; + for(Iterator it = uidl.getChildIterator(); it.hasNext();) { + UIDL c = (UIDL) it.next(); + if(c.getTag().equals("cols")) + columnInfo = c; + else if(c.getTag().equals("rows")) + rowData = c; + else if(c.getTag().equals("actions")) + updateActionMap(c); + else if(c.getTag().equals("visiblecolumns")) + ; + } + updateHeader(columnInfo); + updateBody(rowData); + + if(!colWidthsInitialized) { + DeferredCommand.addCommand(new Command() { + public void execute() { + initSize(); + updateSpacers(); + } + }); + } + + } + + private void updateActionMap(UIDL c) { + // TODO Auto-generated method stub + + } + + private void updateHeader(UIDL uidl) { + if(uidl == null) + return; + for(Iterator it = uidl.getChildIterator();it.hasNext();) { + UIDL col = (UIDL) it.next(); + String cid = col.getStringAttribute("cid"); + int colIndex = getColIndexByKey(cid); + if(colIndex > -1) + setHeaderText(colIndex, col.getStringAttribute("caption")); + DOM.setElementProperty(tHead.getFlexCellFormatter().getElement(0, colIndex), "cid", cid); + } + } + + private void updateBody(UIDL uidl) { + if(uidl == null) + return; + + Iterator it = uidl.getChildIterator(); + UIDL row = (UIDL) it.next(); + if(firstRendered == 0) + firstRendered = row.getIntAttribute("key"); + if(row.getIntAttribute("key") == lastRendered + 1) { + while(it.hasNext()) + appendRow( (UIDL) it.next() ); + } + } + + private void appendRow(UIDL uidl) { + lastRendered++; + updateRow(uidl, lastRendered); + } + + private void updateRow(UIDL uidl, int rowIndex) { + int colIndex = 0; + for(Iterator it = uidl.getChildIterator(); it.hasNext();) { + Object cell = it.next(); + if (cell instanceof String) { + setCellContent(rowIndex, colIndex, (String) cell); + } else { + setCellContent(rowIndex, colIndex, (UIDL) cell); + } + colIndex++; + } + + } + + + private int getRowIndex(int rowKey) { + return rowKey - firstRendered; + } + + private int getColIndexByKey(String colKey) { + return Integer.parseInt(colKey) - 1; + } + + private String getColKeyByIndex(int index) { + return DOM.getElementProperty(tHead.getCellFormatter().getElement(0, index), "cid"); + } + + public void setHeaderText(int colIndex, String text) { + tHead.setText(0, colIndex, text); + } + + public void setCellContent(int rowId, int colId, UIDL cell) { + if(cell == null) + return; + Widget cellContent = client.createWidgetFromUIDL(cell); + tBody.setWidget(rowId, colId, cellContent); + } + + public void setCellContent(int rowId, int colId, String text) { + tBody.setText(rowId, colId, text); + } + + /** + * Run when receices its initial content. Syncs headers and bodys + * "natural widths and saves the values. + */ + private void initSize() { + int cols = tHead.getCellCount(0); + FlexCellFormatter hf = tHead.getFlexCellFormatter(); + FlexCellFormatter bf = tBody.getFlexCellFormatter(); + for (int i = 0; i < cols; i++) { + Element hCell = hf.getElement(0, i); + Element bCell = bf.getElement(1, i); + int hw = DOM.getElementPropertyInt(hCell, "offsetWidth"); + int cw = DOM.getElementPropertyInt(bCell, "offsetWidth"); + setColWidth(i , hw > cw ? hw : cw); + } + + bodyContainer.setHeight(tBody.getOffsetHeight() + "px"); + bodyContainer.setWidth(tBody.getOffsetWidth() + "px"); + + } + + private void setColWidth(int colIndex, int w) { + String cid = getColKeyByIndex(colIndex); + tHead.getCellFormatter().setWidth(0, colIndex, w + "px"); + tBody.getCellFormatter().setWidth(0, colIndex, w + "px"); + columnWidths.put(cid,new Integer(w)); + } + + private int getColWidth(String colKey) { + return ( (Integer) this.columnWidths.get(colKey)).intValue(); + } + + private void updateSpacers() { + int rowHeight = tBody.getOffsetHeight()/getRenderedRowCount(); + int preSpacerHeight = (firstRendered - 1)*rowHeight; + int postSpacerHeight = (totalRows - lastRendered)*rowHeight; + preSpacer.setHeight(preSpacerHeight+"px"); + postSpacer.setHeight(postSpacerHeight + "px"); + } + + private int getRenderedRowCount() { + return lastRendered-firstRendered; + } + + +} diff --git a/src/com/itmill/toolkit/terminal/gwt/client/ui/UnknownComponent.java b/src/com/itmill/toolkit/terminal/gwt/client/ui/UnknownComponent.java deleted file mode 100644 index b5efa79116..0000000000 --- a/src/com/itmill/toolkit/terminal/gwt/client/ui/UnknownComponent.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.itmill.toolkit.terminal.gwt.client.ui; - -import com.google.gwt.user.client.ui.Composite; -import com.google.gwt.user.client.ui.Tree; -import com.google.gwt.user.client.ui.VerticalPanel; -import com.itmill.toolkit.terminal.gwt.client.Client; -import com.itmill.toolkit.terminal.gwt.client.Paintable; -import com.itmill.toolkit.terminal.gwt.client.UIDL; - -public class UnknownComponent extends Composite implements Paintable{ - - com.google.gwt.user.client.ui.Label caption = new com.google.gwt.user.client.ui.Label();; - Tree uidlTree = new Tree(); - - public UnknownComponent() { - VerticalPanel panel = new VerticalPanel(); - panel.add(caption); - panel.add(uidlTree); - initWidget(panel); - setStyleName("itmtk-unknown"); - caption.setStyleName("itmtk-unknown-caption"); - } - - public void updateFromUIDL(UIDL uidl, Client client) { - setCaption("Client faced an unknown component type. Unrendered UIDL:"); - uidlTree.addItem(uidl.dir()); - } - - public void setCaption(String c) { - caption.setText(c); - } -} diff --git a/src/com/itmill/toolkit/terminal/gwt/client/ui/Window.java b/src/com/itmill/toolkit/terminal/gwt/client/ui/Window.java deleted file mode 100644 index ed49aa5c13..0000000000 --- a/src/com/itmill/toolkit/terminal/gwt/client/ui/Window.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.itmill.toolkit.terminal.gwt.client.ui; - -import com.google.gwt.user.client.ui.FlowPanel; -import com.itmill.toolkit.terminal.gwt.client.Client; -import com.itmill.toolkit.terminal.gwt.client.Paintable; -import com.itmill.toolkit.terminal.gwt.client.UIDL; - -public class Window extends FlowPanel implements Paintable { - - String id; - - public Window() { - super(); - } - - public void updateFromUIDL(UIDL uidl, Client client) { - - id = uidl.getId(); - com.google.gwt.user.client.Window.setTitle(uidl.getStringAttribute("caption")); - UIDL child = uidl.getChildUIDL(0); - add(client.createWidgetFromUIDL(child)); - } - -} diff --git a/src/com/itmill/toolkit/terminal/gwt/server/JSONPaintTarget.java b/src/com/itmill/toolkit/terminal/gwt/server/JSONPaintTarget.java index eec686426d..a1a62918e9 100644 --- a/src/com/itmill/toolkit/terminal/gwt/server/JSONPaintTarget.java +++ b/src/com/itmill/toolkit/terminal/gwt/server/JSONPaintTarget.java @@ -157,4 +157,9 @@ public class JSONPaintTarget implements PaintTarget { } } + public void addAttribute(String string, Object[] keys) { + // TODO Auto-generated method stub + + } + } diff --git a/src/com/itmill/toolkit/terminal/web/AjaxJsonPaintTarget.java b/src/com/itmill/toolkit/terminal/web/AjaxJsonPaintTarget.java index 6c7b520f01..4cc897201d 100644 --- a/src/com/itmill/toolkit/terminal/web/AjaxJsonPaintTarget.java +++ b/src/com/itmill/toolkit/terminal/web/AjaxJsonPaintTarget.java @@ -454,6 +454,24 @@ public class AjaxJsonPaintTarget implements PaintTarget, AjaxPaintTarget { } + public void addAttribute(String name, Object[] values) { + // In case of null data output nothing: + if ((values == null) || (name == null)) + throw new NullPointerException( + "Parameters must be non-null strings"); + StringBuffer buf = new StringBuffer(); + buf.append("\""+name+"\":["); + for (int i = 0; i < values.length; i++) { + if(i>0) + buf.append(","); + buf.append("\""); + buf.append(escapeJSON(values[i].toString())); + buf.append("\""); + } + buf.append("]"); + tag.addAttribute(buf.toString()); + } + /** * Adds a string type variable. * diff --git a/src/com/itmill/toolkit/terminal/web/AjaxXmlPaintTarget.java b/src/com/itmill/toolkit/terminal/web/AjaxXmlPaintTarget.java index 26dd13d9e2..dc175f731a 100644 --- a/src/com/itmill/toolkit/terminal/web/AjaxXmlPaintTarget.java +++ b/src/com/itmill/toolkit/terminal/web/AjaxXmlPaintTarget.java @@ -595,4 +595,14 @@ public class AjaxXmlPaintTarget implements PaintTarget, AjaxPaintTarget { return preCachedResources; } + public void addAttribute(String string, String[] keys) { + // TODO Auto-generated method stub + + } + + public void addAttribute(String string, Object[] keys) { + // TODO Auto-generated method stub + + } + } diff --git a/src/com/itmill/toolkit/terminal/web/WebPaintTarget.java b/src/com/itmill/toolkit/terminal/web/WebPaintTarget.java index b17cfd24ba..3b8564a703 100644 --- a/src/com/itmill/toolkit/terminal/web/WebPaintTarget.java +++ b/src/com/itmill/toolkit/terminal/web/WebPaintTarget.java @@ -538,7 +538,7 @@ public class WebPaintTarget implements PaintTarget { * @throws PaintException * if the paint operation failed. */ - public void addVariable(VariableOwner owner, String name, String[] value) + public void addVariable(VariableOwner owner, String name, Object[] value) throws PaintException { String code = variableMap.registerVariable(name, String[].class, value, owner); @@ -546,7 +546,7 @@ public class WebPaintTarget implements PaintTarget { addAttribute(UIDL_ARG_ID, code); addAttribute(UIDL_ARG_NAME, name); for (int i = 0; i < value.length; i++) - addSection("ai", value[i]); + addSection("ai", (String) value[i]); endTag("array"); } @@ -716,4 +716,19 @@ public class WebPaintTarget implements PaintTarget { addUIDL(""); } + public void addAttribute(String string, String[] keys) { + // TODO Auto-generated method stub + + } + + public void addAttribute(String string, Object[] keys) { + // TODO Auto-generated method stub + + } + + public void addVariable(VariableOwner owner, String name, String[] value) throws PaintException { + // TODO Auto-generated method stub + + } + } diff --git a/src/com/itmill/toolkit/ui/AbstractComponent.java b/src/com/itmill/toolkit/ui/AbstractComponent.java index 6c453d0a57..6c2a04f170 100644 --- a/src/com/itmill/toolkit/ui/AbstractComponent.java +++ b/src/com/itmill/toolkit/ui/AbstractComponent.java @@ -533,15 +533,13 @@ public abstract class AbstractComponent implements Component, MethodEventSource // Only paint content of visible components. if (isVisible()) { - paintContent(target); - String desc = getDescription(); if (desc != null && description.length() > 0) { - target.startTag("description"); - target.addUIDL(getDescription()); - target.endTag("description"); + target.addAttribute("description", getDescription()); } + paintContent(target); + ErrorMessage error = getErrorMessage(); if (error != null) error.paint(target); diff --git a/src/com/itmill/toolkit/ui/Table.java b/src/com/itmill/toolkit/ui/Table.java index 071fe84169..d90f6da390 100644 --- a/src/com/itmill/toolkit/ui/Table.java +++ b/src/com/itmill/toolkit/ui/Table.java @@ -28,6 +28,7 @@ package com.itmill.toolkit.ui; +import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; @@ -1495,8 +1496,8 @@ public class Table extends Select implements Action.Container, target.addAttribute("caption", (String) cells[CELL_HEADER][i]); } + target.addAttribute("key", Integer.parseInt(cells[CELL_KEY][i].toString())); if (actionHandlers != null || isSelectable()) { - target.addAttribute("key", (String) cells[CELL_KEY][i]); if (isSelected(itemId) && keyIndex < selectedKeys.length) { target.addAttribute("selected", true); selectedKeys[keyIndex++] = (String) cells[CELL_KEY][i]; @@ -1505,7 +1506,7 @@ public class Table extends Select implements Action.Container, // Actions if (actionHandlers != null) { - target.startTag("al"); + ArrayList keys = new ArrayList(); for (Iterator ahi = actionHandlers.iterator(); ahi.hasNext();) { Action[] aa = ((Action.Handler) ahi.next()).getActions( itemId, this); @@ -1513,10 +1514,10 @@ public class Table extends Select implements Action.Container, for (int ai = 0; ai < aa.length; ai++) { String key = actionMapper.key(aa[ai]); actionSet.add(aa[ai]); - target.addSection("ak", key); + keys.add(key); } } - target.endTag("al"); + target.addAttribute("al", keys.toArray()); } // cells @@ -1531,11 +1532,11 @@ public class Table extends Select implements Action.Container, Component c = (Component) cells[CELL_FIRSTCOL + currentColumn][i]; if (c == null) - target.addSection("label", ""); + target.addText(""); else c.paint(target); } else - target.addSection("label", (String) cells[CELL_FIRSTCOL + target.addText((String) cells[CELL_FIRSTCOL + currentColumn][i]); } @@ -1568,8 +1569,8 @@ public class Table extends Select implements Action.Container, // Actions if (!actionSet.isEmpty()) { - target.startTag("actions"); target.addVariable(this, "action", ""); + target.startTag("actions"); for (Iterator it = actionSet.iterator(); it.hasNext();) { Action a = (Action) it.next(); target.startTag("action"); -- 2.39.5