summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMatti Tahvonen <matti.tahvonen@itmill.com>2007-06-12 14:10:14 +0000
committerMatti Tahvonen <matti.tahvonen@itmill.com>2007-06-12 14:10:14 +0000
commit8d034f682c51aa7b91e4278ce916e9bb9fdb3ae2 (patch)
tree0dd28daa64493299dd9cd133f49f4baabc07fdd5 /src
parent6f8e96f365ea152032ba2346f4dfeaf315c9cd74 (diff)
downloadvaadin-framework-8d034f682c51aa7b91e4278ce916e9bb9fdb3ae2.tar.gz
vaadin-framework-8d034f682c51aa7b91e4278ce916e9bb9fdb3ae2.zip
draft of scroll table and some other enhancements
svn changeset:1685/svn branch:trunk
Diffstat (limited to 'src')
-rw-r--r--src/com/itmill/toolkit/terminal/PaintTarget.java2
-rwxr-xr-xsrc/com/itmill/toolkit/terminal/gwt/client/Client.java3
-rw-r--r--src/com/itmill/toolkit/terminal/gwt/client/DefaultWidgetFactory.java3
-rw-r--r--src/com/itmill/toolkit/terminal/gwt/client/ui/Button.java31
-rw-r--r--src/com/itmill/toolkit/terminal/gwt/client/ui/GridLayout.java40
-rw-r--r--src/com/itmill/toolkit/terminal/gwt/client/ui/Label.java50
-rw-r--r--src/com/itmill/toolkit/terminal/gwt/client/ui/OrderedLayout.java23
-rw-r--r--src/com/itmill/toolkit/terminal/gwt/client/ui/TkTable.java227
-rw-r--r--src/com/itmill/toolkit/terminal/gwt/client/ui/UnknownComponent.java32
-rw-r--r--src/com/itmill/toolkit/terminal/gwt/client/ui/Window.java24
-rw-r--r--src/com/itmill/toolkit/terminal/gwt/server/JSONPaintTarget.java5
-rw-r--r--src/com/itmill/toolkit/terminal/web/AjaxJsonPaintTarget.java18
-rw-r--r--src/com/itmill/toolkit/terminal/web/AjaxXmlPaintTarget.java10
-rw-r--r--src/com/itmill/toolkit/terminal/web/WebPaintTarget.java19
-rw-r--r--src/com/itmill/toolkit/ui/AbstractComponent.java8
-rw-r--r--src/com/itmill/toolkit/ui/Table.java15
16 files changed, 295 insertions, 215 deletions
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("<![CDATA[" + text + "]]>");
}
+ 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");