Cherry picking r9328 into release branch for issue #5622. git-svn-id: https://google-web-toolkit.googlecode.com/svn/releases/2.1@9331 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/samples/expenses/src/main/java/com/google/gwt/sample/expenses/client/ExpenseReportDetails.java b/samples/expenses/src/main/java/com/google/gwt/sample/expenses/client/ExpenseReportDetails.java index 455e0cf..d4c02c7 100644 --- a/samples/expenses/src/main/java/com/google/gwt/sample/expenses/client/ExpenseReportDetails.java +++ b/samples/expenses/src/main/java/com/google/gwt/sample/expenses/client/ExpenseReportDetails.java
@@ -23,6 +23,7 @@ import com.google.gwt.cell.client.NumberCell; import com.google.gwt.cell.client.TextCell; import com.google.gwt.cell.client.ValueUpdater; +import com.google.gwt.cell.client.Cell.Context; import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.Document; import com.google.gwt.dom.client.Element; @@ -46,7 +47,6 @@ import com.google.gwt.requestfactory.ui.client.EntityProxyKeyProvider; import com.google.gwt.resources.client.ImageResource; import com.google.gwt.safehtml.client.SafeHtmlTemplates; -import com.google.gwt.safehtml.client.SafeHtmlTemplates.Template; import com.google.gwt.safehtml.shared.SafeHtml; import com.google.gwt.safehtml.shared.SafeHtmlBuilder; import com.google.gwt.safehtml.shared.SafeHtmlUtils; @@ -183,15 +183,16 @@ } @Override - public boolean isEditing(Element parent, String value, Object key) { - return super.isEditing(parent, value, key) || denialPopup.isShowing(); + public boolean isEditing(Context context, Element parent, String value) { + return super.isEditing(context, parent, value) || denialPopup.isShowing(); } @Override - public void onBrowserEvent(Element parent, String value, Object key, + public void onBrowserEvent(Context context, Element parent, String value, NativeEvent event, ValueUpdater<String> valueUpdater) { - super.onBrowserEvent(parent, value, key, event, valueUpdater); + super.onBrowserEvent(context, parent, value, event, valueUpdater); + Object key = context.getKey(); String type = event.getType(); ApprovalViewData viewData = getViewData(key); if ("change".equals(type)) { @@ -235,8 +236,9 @@ } @Override - public void render(String value, Object key, SafeHtmlBuilder sb) { + public void render(Context context, String value, SafeHtmlBuilder sb) { // Get the view data. + Object key = context.getKey(); ApprovalViewData viewData = getViewData(key); if (viewData != null && viewData.getPendingApproval().equals(value)) { clearViewData(key);
diff --git a/samples/expenses/src/main/java/com/google/gwt/sample/expenses/client/ExpenseReportList.java b/samples/expenses/src/main/java/com/google/gwt/sample/expenses/client/ExpenseReportList.java index bb40add..2df0dbf 100644 --- a/samples/expenses/src/main/java/com/google/gwt/sample/expenses/client/ExpenseReportList.java +++ b/samples/expenses/src/main/java/com/google/gwt/sample/expenses/client/ExpenseReportList.java
@@ -163,7 +163,7 @@ private static final String replaceString = "<span style='color:red;font-weight:bold;'>$1</span>"; @Override - public void render(String value, Object viewData, SafeHtmlBuilder sb) { + public void render(Context context, String value, SafeHtmlBuilder sb) { if (value != null) { if (searchRegExp != null) { // The search regex has already been html-escaped
diff --git a/samples/expenses/src/main/java/com/google/gwt/sample/expenses/client/ExpenseTree.java b/samples/expenses/src/main/java/com/google/gwt/sample/expenses/client/ExpenseTree.java index 49d29be..db78b4d 100644 --- a/samples/expenses/src/main/java/com/google/gwt/sample/expenses/client/ExpenseTree.java +++ b/samples/expenses/src/main/java/com/google/gwt/sample/expenses/client/ExpenseTree.java
@@ -19,13 +19,13 @@ import com.google.gwt.cell.client.Cell; import com.google.gwt.cell.client.IconCellDecorator; import com.google.gwt.cell.client.TextCell; +import com.google.gwt.cell.client.Cell.Context; import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.Style.Overflow; import com.google.gwt.requestfactory.shared.EntityProxyId; import com.google.gwt.requestfactory.shared.Receiver; import com.google.gwt.requestfactory.ui.client.EntityProxyKeyProvider; import com.google.gwt.safehtml.client.SafeHtmlTemplates; -import com.google.gwt.safehtml.client.SafeHtmlTemplates.Template; import com.google.gwt.safehtml.shared.SafeHtml; import com.google.gwt.safehtml.shared.SafeHtmlBuilder; import com.google.gwt.sample.expenses.client.style.Styles; @@ -85,7 +85,7 @@ } @Override - public void render(EmployeeProxy value, Object viewData, + public void render(Context context, EmployeeProxy value, SafeHtmlBuilder sb) { if (value != null) { StringBuilder classesBuilder = new StringBuilder(usernameStyle);
diff --git a/samples/expenses/src/main/java/com/google/gwt/sample/expenses/client/MobileExpenseList.java b/samples/expenses/src/main/java/com/google/gwt/sample/expenses/client/MobileExpenseList.java index df44ef9..db184f7 100644 --- a/samples/expenses/src/main/java/com/google/gwt/sample/expenses/client/MobileExpenseList.java +++ b/samples/expenses/src/main/java/com/google/gwt/sample/expenses/client/MobileExpenseList.java
@@ -81,7 +81,7 @@ } @Override - public void render(ExpenseProxy value, Object viewData, SafeHtmlBuilder sb) { + public void render(Context context, ExpenseProxy value, SafeHtmlBuilder sb) { String approval = value.getApproval(); SafeHtml approvalIcon; if (approvedText.equals(approval)) {
diff --git a/samples/expenses/src/main/java/com/google/gwt/sample/expenses/client/MobileReportList.java b/samples/expenses/src/main/java/com/google/gwt/sample/expenses/client/MobileReportList.java index 4ef274c..80466d8 100644 --- a/samples/expenses/src/main/java/com/google/gwt/sample/expenses/client/MobileReportList.java +++ b/samples/expenses/src/main/java/com/google/gwt/sample/expenses/client/MobileReportList.java
@@ -76,8 +76,7 @@ reportList = new CellList<ReportProxy>(new AbstractCell<ReportProxy>() { @Override - public void render( - ReportProxy value, Object viewData, SafeHtmlBuilder sb) { + public void render(Context context, ReportProxy value, SafeHtmlBuilder sb) { sb.appendHtmlConstant("<div class='item'>"); sb.appendEscaped(value.getPurpose()); sb.appendHtmlConstant("</div>");
diff --git a/samples/expenses/src/main/java/com/google/gwt/sample/expenses/client/SortableHeader.java b/samples/expenses/src/main/java/com/google/gwt/sample/expenses/client/SortableHeader.java index 5df24a5..3ab78bf 100644 --- a/samples/expenses/src/main/java/com/google/gwt/sample/expenses/client/SortableHeader.java +++ b/samples/expenses/src/main/java/com/google/gwt/sample/expenses/client/SortableHeader.java
@@ -15,6 +15,7 @@ */ package com.google.gwt.sample.expenses.client; +import com.google.gwt.cell.client.Cell.Context; import com.google.gwt.cell.client.ClickableTextCell; import com.google.gwt.core.client.GWT; import com.google.gwt.resources.client.ClientBundle; @@ -89,7 +90,7 @@ } @Override - public void render(SafeHtmlBuilder sb) { + public void render(Context context, SafeHtmlBuilder sb) { if (sorted) { sb.append(template.sorted(IMAGE_WIDTH, reverseSort ? DOWN_ARROW : UP_ARROW, text)); } else {
diff --git a/samples/showcase/src/com/google/gwt/sample/showcase/client/MainMenuTreeViewModel.java b/samples/showcase/src/com/google/gwt/sample/showcase/client/MainMenuTreeViewModel.java index 3c47105..f5f16fc 100644 --- a/samples/showcase/src/com/google/gwt/sample/showcase/client/MainMenuTreeViewModel.java +++ b/samples/showcase/src/com/google/gwt/sample/showcase/client/MainMenuTreeViewModel.java
@@ -109,7 +109,7 @@ */ private static class CategoryCell extends AbstractCell<Category> { @Override - public void render(Category value, Object key, SafeHtmlBuilder sb) { + public void render(Context context, Category value, SafeHtmlBuilder sb) { if (value != null) { sb.appendEscaped(value.getName()); } @@ -121,7 +121,8 @@ */ private static class ContentWidgetCell extends AbstractCell<ContentWidget> { @Override - public void render(ContentWidget value, Object key, SafeHtmlBuilder sb) { + public void render(Context context, ContentWidget value, + SafeHtmlBuilder sb) { if (value != null) { sb.appendEscaped(value.getName()); }
diff --git a/samples/showcase/src/com/google/gwt/sample/showcase/client/content/cell/ContactTreeViewModel.java b/samples/showcase/src/com/google/gwt/sample/showcase/client/content/cell/ContactTreeViewModel.java index 3a2248d..b18ff11 100644 --- a/samples/showcase/src/com/google/gwt/sample/showcase/client/content/cell/ContactTreeViewModel.java +++ b/samples/showcase/src/com/google/gwt/sample/showcase/client/content/cell/ContactTreeViewModel.java
@@ -69,7 +69,7 @@ } @Override - public void render(Category value, Object key, SafeHtmlBuilder sb) { + public void render(Context context, Category value, SafeHtmlBuilder sb) { if (value != null) { sb.appendHtmlConstant(imageHtml).appendEscaped(" "); sb.appendEscaped(value.getDisplayName()); @@ -126,7 +126,7 @@ private static class LetterCountCell extends AbstractCell<LetterCount> { @Override - public void render(LetterCount value, Object key, SafeHtmlBuilder sb) { + public void render(Context context, LetterCount value, SafeHtmlBuilder sb) { if (value != null) { sb.appendEscaped(value.firstLetter + " (" + value.count + ")"); } @@ -193,9 +193,9 @@ }); contactCell = new CompositeCell<ContactInfo>(hasCells) { @Override - public void render(ContactInfo value, Object key, SafeHtmlBuilder sb) { + public void render(Context context, ContactInfo value, SafeHtmlBuilder sb) { sb.appendHtmlConstant("<table><tbody><tr>"); - super.render(value, key, sb); + super.render(context, value, sb); sb.appendHtmlConstant("</tr></tbody></table>"); } @@ -206,11 +206,11 @@ } @Override - protected <X> void render(ContactInfo value, Object key, + protected <X> void render(Context context, ContactInfo value, SafeHtmlBuilder sb, HasCell<ContactInfo, X> hasCell) { Cell<X> cell = hasCell.getCell(); sb.appendHtmlConstant("<td>"); - cell.render(hasCell.getValue(value), key, sb); + cell.render(context, hasCell.getValue(value), sb); sb.appendHtmlConstant("</td>"); } };
diff --git a/samples/showcase/src/com/google/gwt/sample/showcase/client/content/cell/CwCellList.java b/samples/showcase/src/com/google/gwt/sample/showcase/client/content/cell/CwCellList.java index 956e31d..4e55af7 100644 --- a/samples/showcase/src/com/google/gwt/sample/showcase/client/content/cell/CwCellList.java +++ b/samples/showcase/src/com/google/gwt/sample/showcase/client/content/cell/CwCellList.java
@@ -90,7 +90,7 @@ } @Override - public void render(ContactInfo value, Object key, SafeHtmlBuilder sb) { + public void render(Context context, ContactInfo value, SafeHtmlBuilder sb) { // Value can be null, so do a null check.. if (value == null) { return;
diff --git a/samples/showcase/src/com/google/gwt/sample/showcase/client/content/cell/CwCellValidation.java b/samples/showcase/src/com/google/gwt/sample/showcase/client/content/cell/CwCellValidation.java index 97c9be7..bd4c872 100644 --- a/samples/showcase/src/com/google/gwt/sample/showcase/client/content/cell/CwCellValidation.java +++ b/samples/showcase/src/com/google/gwt/sample/showcase/client/content/cell/CwCellValidation.java
@@ -85,9 +85,9 @@ } @Override - public void onBrowserEvent(Element parent, String value, Object key, + public void onBrowserEvent(Context context, Element parent, String value, NativeEvent event, ValueUpdater<String> valueUpdater) { - super.onBrowserEvent(parent, value, key, event, valueUpdater); + super.onBrowserEvent(context, parent, value, event, valueUpdater); // Ignore events that don't target the input. Element target = event.getEventTarget().cast(); @@ -95,6 +95,7 @@ return; } + Object key = context.getKey(); ValidationData viewData = getViewData(key); String eventType = event.getType(); if ("change".equals(eventType)) { @@ -120,8 +121,9 @@ } @Override - public void render(String value, Object key, SafeHtmlBuilder sb) { + public void render(Context context, String value, SafeHtmlBuilder sb) { // Get the view data. + Object key = context.getKey(); ValidationData viewData = getViewData(key); if (viewData != null && viewData.getValue().equals(value)) { // Clear the view data if the value is the same as the current value. @@ -148,13 +150,13 @@ } @Override - protected void onEnterKeyDown(Element parent, String value, Object key, + protected void onEnterKeyDown(Context context, Element parent, String value, NativeEvent event, ValueUpdater<String> valueUpdater) { Element target = event.getEventTarget().cast(); if (getInputElement(parent).isOrHasChild(target)) { - finishEditing(parent, value, key, valueUpdater); + finishEditing(parent, value, context.getKey(), valueUpdater); } else { - super.onEnterKeyDown(parent, value, key, event, valueUpdater); + super.onEnterKeyDown(context, parent, value, event, valueUpdater); } } }
diff --git a/tools/api-checker/config/gwt21_22userApi.conf b/tools/api-checker/config/gwt21_22userApi.conf index 405ee8d..9664ee9 100644 --- a/tools/api-checker/config/gwt21_22userApi.conf +++ b/tools/api-checker/config/gwt21_22userApi.conf
@@ -143,3 +143,124 @@ com.google.gwt.user.cellview.client.Column::cell MISSING com.google.gwt.user.cellview.client.Column::fieldUpdater MISSING +# Passing a Context to Cell methods instead of passing a bunch of different args. +com.google.gwt.cell.client.AbstractCell::isEditing(Lcom/google/gwt/dom/client/Element;Ljava/lang/Object;Ljava/lang/Object;) MISSING +com.google.gwt.cell.client.AbstractCell::onBrowserEvent(Lcom/google/gwt/dom/client/Element;Ljava/lang/Object;Ljava/lang/Object;Lcom/google/gwt/dom/client/NativeEvent;Lcom/google/gwt/cell/client/ValueUpdater;) MISSING +com.google.gwt.cell.client.AbstractCell::onEnterKeyDown(Lcom/google/gwt/dom/client/Element;Ljava/lang/Object;Ljava/lang/Object;Lcom/google/gwt/dom/client/NativeEvent;Lcom/google/gwt/cell/client/ValueUpdater;) MISSING +com.google.gwt.cell.client.AbstractCell::render(Ljava/lang/Object;Ljava/lang/Object;Lcom/google/gwt/safehtml/shared/SafeHtmlBuilder;) MISSING +com.google.gwt.cell.client.AbstractCell::resetFocus(Lcom/google/gwt/dom/client/Element;Ljava/lang/Object;Ljava/lang/Object;) MISSING +com.google.gwt.cell.client.AbstractCell::setValue(Lcom/google/gwt/dom/client/Element;Ljava/lang/Object;Ljava/lang/Object;) MISSING +com.google.gwt.cell.client.AbstractEditableCell::isEditing(Lcom/google/gwt/dom/client/Element;Ljava/lang/Object;Ljava/lang/Object;) MISSING +com.google.gwt.cell.client.AbstractInputCell::isEditing(Lcom/google/gwt/dom/client/Element;Ljava/lang/Object;Ljava/lang/Object;) MISSING +com.google.gwt.cell.client.AbstractInputCell::onBrowserEvent(Lcom/google/gwt/dom/client/Element;Ljava/lang/Object;Ljava/lang/Object;Lcom/google/gwt/dom/client/NativeEvent;Lcom/google/gwt/cell/client/ValueUpdater;) MISSING +com.google.gwt.cell.client.AbstractInputCell::onEnterKeyDown(Lcom/google/gwt/dom/client/Element;Ljava/lang/Object;Ljava/lang/Object;Lcom/google/gwt/dom/client/NativeEvent;Lcom/google/gwt/cell/client/ValueUpdater;) MISSING +com.google.gwt.cell.client.AbstractInputCell::resetFocus(Lcom/google/gwt/dom/client/Element;Ljava/lang/Object;Ljava/lang/Object;) MISSING +com.google.gwt.cell.client.AbstractSafeHtmlCell::render(Lcom/google/gwt/safehtml/shared/SafeHtml;Ljava/lang/Object;Lcom/google/gwt/safehtml/shared/SafeHtmlBuilder;) MISSING +com.google.gwt.cell.client.AbstractSafeHtmlCell::render(Ljava/lang/Object;Ljava/lang/Object;Lcom/google/gwt/safehtml/shared/SafeHtmlBuilder;) MISSING +com.google.gwt.cell.client.ActionCell::onBrowserEvent(Lcom/google/gwt/dom/client/Element;Ljava/lang/Object;Ljava/lang/Object;Lcom/google/gwt/dom/client/NativeEvent;Lcom/google/gwt/cell/client/ValueUpdater;) MISSING +com.google.gwt.cell.client.ActionCell::onEnterKeyDown(Lcom/google/gwt/dom/client/Element;Ljava/lang/Object;Ljava/lang/Object;Lcom/google/gwt/dom/client/NativeEvent;Lcom/google/gwt/cell/client/ValueUpdater;) MISSING +com.google.gwt.cell.client.ActionCell::render(Ljava/lang/Object;Ljava/lang/Object;Lcom/google/gwt/safehtml/shared/SafeHtmlBuilder;) MISSING +com.google.gwt.cell.client.ButtonCell::isEditing(Lcom/google/gwt/dom/client/Element;Ljava/lang/String;Ljava/lang/Object;) MISSING +com.google.gwt.cell.client.ButtonCell::onBrowserEvent(Lcom/google/gwt/dom/client/Element;Ljava/lang/String;Ljava/lang/Object;Lcom/google/gwt/dom/client/NativeEvent;Lcom/google/gwt/cell/client/ValueUpdater;) MISSING +com.google.gwt.cell.client.ButtonCell::onEnterKeyDown(Lcom/google/gwt/dom/client/Element;Ljava/lang/String;Ljava/lang/Object;Lcom/google/gwt/dom/client/NativeEvent;Lcom/google/gwt/cell/client/ValueUpdater;) MISSING +com.google.gwt.cell.client.ButtonCell::render(Lcom/google/gwt/safehtml/shared/SafeHtml;Ljava/lang/Object;Lcom/google/gwt/safehtml/shared/SafeHtmlBuilder;) MISSING +com.google.gwt.cell.client.ButtonCell::render(Ljava/lang/String;Ljava/lang/Object;Lcom/google/gwt/safehtml/shared/SafeHtmlBuilder;) MISSING +com.google.gwt.cell.client.ButtonCell::resetFocus(Lcom/google/gwt/dom/client/Element;Ljava/lang/String;Ljava/lang/Object;) MISSING +com.google.gwt.cell.client.ButtonCell::setValue(Lcom/google/gwt/dom/client/Element;Ljava/lang/String;Ljava/lang/Object;) MISSING +com.google.gwt.cell.client.CheckboxCell::isEditing(Lcom/google/gwt/dom/client/Element;Ljava/lang/Boolean;Ljava/lang/Object;) MISSING +com.google.gwt.cell.client.CheckboxCell::onBrowserEvent(Lcom/google/gwt/dom/client/Element;Ljava/lang/Boolean;Ljava/lang/Object;Lcom/google/gwt/dom/client/NativeEvent;Lcom/google/gwt/cell/client/ValueUpdater;) MISSING +com.google.gwt.cell.client.CheckboxCell::onEnterKeyDown(Lcom/google/gwt/dom/client/Element;Ljava/lang/Boolean;Ljava/lang/Object;Lcom/google/gwt/dom/client/NativeEvent;Lcom/google/gwt/cell/client/ValueUpdater;) MISSING +com.google.gwt.cell.client.CheckboxCell::render(Ljava/lang/Boolean;Ljava/lang/Object;Lcom/google/gwt/safehtml/shared/SafeHtmlBuilder;) MISSING +com.google.gwt.cell.client.CheckboxCell::resetFocus(Lcom/google/gwt/dom/client/Element;Ljava/lang/Boolean;Ljava/lang/Object;) MISSING +com.google.gwt.cell.client.CheckboxCell::setValue(Lcom/google/gwt/dom/client/Element;Ljava/lang/Boolean;Ljava/lang/Object;) MISSING +com.google.gwt.cell.client.ClickableTextCell::isEditing(Lcom/google/gwt/dom/client/Element;Ljava/lang/String;Ljava/lang/Object;) MISSING +com.google.gwt.cell.client.ClickableTextCell::onBrowserEvent(Lcom/google/gwt/dom/client/Element;Ljava/lang/String;Ljava/lang/Object;Lcom/google/gwt/dom/client/NativeEvent;Lcom/google/gwt/cell/client/ValueUpdater;) MISSING +com.google.gwt.cell.client.ClickableTextCell::onEnterKeyDown(Lcom/google/gwt/dom/client/Element;Ljava/lang/String;Ljava/lang/Object;Lcom/google/gwt/dom/client/NativeEvent;Lcom/google/gwt/cell/client/ValueUpdater;) MISSING +com.google.gwt.cell.client.ClickableTextCell::render(Lcom/google/gwt/safehtml/shared/SafeHtml;Ljava/lang/Object;Lcom/google/gwt/safehtml/shared/SafeHtmlBuilder;) MISSING +com.google.gwt.cell.client.ClickableTextCell::render(Ljava/lang/String;Ljava/lang/Object;Lcom/google/gwt/safehtml/shared/SafeHtmlBuilder;) MISSING +com.google.gwt.cell.client.ClickableTextCell::resetFocus(Lcom/google/gwt/dom/client/Element;Ljava/lang/String;Ljava/lang/Object;) MISSING +com.google.gwt.cell.client.ClickableTextCell::setValue(Lcom/google/gwt/dom/client/Element;Ljava/lang/String;Ljava/lang/Object;) MISSING +com.google.gwt.cell.client.CompositeCell::onBrowserEvent(Lcom/google/gwt/dom/client/Element;Ljava/lang/Object;Ljava/lang/Object;Lcom/google/gwt/dom/client/NativeEvent;Lcom/google/gwt/cell/client/ValueUpdater;) MISSING +com.google.gwt.cell.client.CompositeCell::render(Ljava/lang/Object;Ljava/lang/Object;Lcom/google/gwt/safehtml/shared/SafeHtmlBuilder;) MISSING +com.google.gwt.cell.client.CompositeCell::render(Ljava/lang/Object;Ljava/lang/Object;Lcom/google/gwt/safehtml/shared/SafeHtmlBuilder;Lcom/google/gwt/cell/client/HasCell;) MISSING +com.google.gwt.cell.client.CompositeCell::resetFocus(Lcom/google/gwt/dom/client/Element;Ljava/lang/Object;Ljava/lang/Object;) MISSING +com.google.gwt.cell.client.CompositeCell::setValue(Lcom/google/gwt/dom/client/Element;Ljava/lang/Object;Ljava/lang/Object;) MISSING +com.google.gwt.cell.client.DateCell::isEditing(Lcom/google/gwt/dom/client/Element;Ljava/util/Date;Ljava/lang/Object;) MISSING +com.google.gwt.cell.client.DateCell::onBrowserEvent(Lcom/google/gwt/dom/client/Element;Ljava/util/Date;Ljava/lang/Object;Lcom/google/gwt/dom/client/NativeEvent;Lcom/google/gwt/cell/client/ValueUpdater;) MISSING +com.google.gwt.cell.client.DateCell::onEnterKeyDown(Lcom/google/gwt/dom/client/Element;Ljava/util/Date;Ljava/lang/Object;Lcom/google/gwt/dom/client/NativeEvent;Lcom/google/gwt/cell/client/ValueUpdater;) MISSING +com.google.gwt.cell.client.DateCell::render(Ljava/util/Date;Ljava/lang/Object;Lcom/google/gwt/safehtml/shared/SafeHtmlBuilder;) MISSING +com.google.gwt.cell.client.DateCell::resetFocus(Lcom/google/gwt/dom/client/Element;Ljava/util/Date;Ljava/lang/Object;) MISSING +com.google.gwt.cell.client.DateCell::setValue(Lcom/google/gwt/dom/client/Element;Ljava/util/Date;Ljava/lang/Object;) MISSING +com.google.gwt.cell.client.DatePickerCell::isEditing(Lcom/google/gwt/dom/client/Element;Ljava/util/Date;Ljava/lang/Object;) MISSING +com.google.gwt.cell.client.DatePickerCell::onBrowserEvent(Lcom/google/gwt/dom/client/Element;Ljava/util/Date;Ljava/lang/Object;Lcom/google/gwt/dom/client/NativeEvent;Lcom/google/gwt/cell/client/ValueUpdater;) MISSING +com.google.gwt.cell.client.DatePickerCell::onEnterKeyDown(Lcom/google/gwt/dom/client/Element;Ljava/util/Date;Ljava/lang/Object;Lcom/google/gwt/dom/client/NativeEvent;Lcom/google/gwt/cell/client/ValueUpdater;) MISSING +com.google.gwt.cell.client.DatePickerCell::render(Ljava/util/Date;Ljava/lang/Object;Lcom/google/gwt/safehtml/shared/SafeHtmlBuilder;) MISSING +com.google.gwt.cell.client.DatePickerCell::resetFocus(Lcom/google/gwt/dom/client/Element;Ljava/util/Date;Ljava/lang/Object;) MISSING +com.google.gwt.cell.client.DatePickerCell::setValue(Lcom/google/gwt/dom/client/Element;Ljava/util/Date;Ljava/lang/Object;) MISSING +com.google.gwt.cell.client.EditTextCell::edit(Lcom/google/gwt/dom/client/Element;Ljava/lang/String;Ljava/lang/Object;) MISSING +com.google.gwt.cell.client.EditTextCell::isEditing(Lcom/google/gwt/dom/client/Element;Ljava/lang/String;Ljava/lang/Object;) MISSING +com.google.gwt.cell.client.EditTextCell::onBrowserEvent(Lcom/google/gwt/dom/client/Element;Ljava/lang/String;Ljava/lang/Object;Lcom/google/gwt/dom/client/NativeEvent;Lcom/google/gwt/cell/client/ValueUpdater;) MISSING +com.google.gwt.cell.client.EditTextCell::onEnterKeyDown(Lcom/google/gwt/dom/client/Element;Ljava/lang/String;Ljava/lang/Object;Lcom/google/gwt/dom/client/NativeEvent;Lcom/google/gwt/cell/client/ValueUpdater;) MISSING +com.google.gwt.cell.client.EditTextCell::render(Ljava/lang/String;Ljava/lang/Object;Lcom/google/gwt/safehtml/shared/SafeHtmlBuilder;) MISSING +com.google.gwt.cell.client.EditTextCell::resetFocus(Lcom/google/gwt/dom/client/Element;Ljava/lang/String;Ljava/lang/Object;) MISSING +com.google.gwt.cell.client.EditTextCell::setValue(Lcom/google/gwt/dom/client/Element;Ljava/lang/String;Ljava/lang/Object;) MISSING +com.google.gwt.cell.client.IconCellDecorator::isEditing(Lcom/google/gwt/dom/client/Element;Ljava/lang/Object;Ljava/lang/Object;) MISSING +com.google.gwt.cell.client.IconCellDecorator::onBrowserEvent(Lcom/google/gwt/dom/client/Element;Ljava/lang/Object;Ljava/lang/Object;Lcom/google/gwt/dom/client/NativeEvent;Lcom/google/gwt/cell/client/ValueUpdater;) MISSING +com.google.gwt.cell.client.IconCellDecorator::render(Ljava/lang/Object;Ljava/lang/Object;Lcom/google/gwt/safehtml/shared/SafeHtmlBuilder;) MISSING +com.google.gwt.cell.client.IconCellDecorator::resetFocus(Lcom/google/gwt/dom/client/Element;Ljava/lang/Object;Ljava/lang/Object;) MISSING +com.google.gwt.cell.client.IconCellDecorator::setValue(Lcom/google/gwt/dom/client/Element;Ljava/lang/Object;Ljava/lang/Object;) MISSING +com.google.gwt.cell.client.ImageCell::isEditing(Lcom/google/gwt/dom/client/Element;Ljava/lang/String;Ljava/lang/Object;) MISSING +com.google.gwt.cell.client.ImageCell::onBrowserEvent(Lcom/google/gwt/dom/client/Element;Ljava/lang/String;Ljava/lang/Object;Lcom/google/gwt/dom/client/NativeEvent;Lcom/google/gwt/cell/client/ValueUpdater;) MISSING +com.google.gwt.cell.client.ImageCell::onEnterKeyDown(Lcom/google/gwt/dom/client/Element;Ljava/lang/String;Ljava/lang/Object;Lcom/google/gwt/dom/client/NativeEvent;Lcom/google/gwt/cell/client/ValueUpdater;) MISSING +com.google.gwt.cell.client.ImageCell::render(Ljava/lang/String;Ljava/lang/Object;Lcom/google/gwt/safehtml/shared/SafeHtmlBuilder;) MISSING +com.google.gwt.cell.client.ImageCell::resetFocus(Lcom/google/gwt/dom/client/Element;Ljava/lang/String;Ljava/lang/Object;) MISSING +com.google.gwt.cell.client.ImageCell::setValue(Lcom/google/gwt/dom/client/Element;Ljava/lang/String;Ljava/lang/Object;) MISSING +com.google.gwt.cell.client.ImageLoadingCell::isEditing(Lcom/google/gwt/dom/client/Element;Ljava/lang/String;Ljava/lang/Object;) MISSING +com.google.gwt.cell.client.ImageLoadingCell::onBrowserEvent(Lcom/google/gwt/dom/client/Element;Ljava/lang/String;Ljava/lang/Object;Lcom/google/gwt/dom/client/NativeEvent;Lcom/google/gwt/cell/client/ValueUpdater;) MISSING +com.google.gwt.cell.client.ImageLoadingCell::onEnterKeyDown(Lcom/google/gwt/dom/client/Element;Ljava/lang/String;Ljava/lang/Object;Lcom/google/gwt/dom/client/NativeEvent;Lcom/google/gwt/cell/client/ValueUpdater;) MISSING +com.google.gwt.cell.client.ImageLoadingCell::render(Ljava/lang/String;Ljava/lang/Object;Lcom/google/gwt/safehtml/shared/SafeHtmlBuilder;) MISSING +com.google.gwt.cell.client.ImageLoadingCell::resetFocus(Lcom/google/gwt/dom/client/Element;Ljava/lang/String;Ljava/lang/Object;) MISSING +com.google.gwt.cell.client.ImageLoadingCell::setValue(Lcom/google/gwt/dom/client/Element;Ljava/lang/String;Ljava/lang/Object;) MISSING +com.google.gwt.cell.client.ImageResourceCell::isEditing(Lcom/google/gwt/dom/client/Element;Lcom/google/gwt/resources/client/ImageResource;Ljava/lang/Object;) MISSING +com.google.gwt.cell.client.ImageResourceCell::onBrowserEvent(Lcom/google/gwt/dom/client/Element;Lcom/google/gwt/resources/client/ImageResource;Ljava/lang/Object;Lcom/google/gwt/dom/client/NativeEvent;Lcom/google/gwt/cell/client/ValueUpdater;) MISSING +com.google.gwt.cell.client.ImageResourceCell::onEnterKeyDown(Lcom/google/gwt/dom/client/Element;Lcom/google/gwt/resources/client/ImageResource;Ljava/lang/Object;Lcom/google/gwt/dom/client/NativeEvent;Lcom/google/gwt/cell/client/ValueUpdater;) MISSING +com.google.gwt.cell.client.ImageResourceCell::render(Lcom/google/gwt/resources/client/ImageResource;Ljava/lang/Object;Lcom/google/gwt/safehtml/shared/SafeHtmlBuilder;) MISSING +com.google.gwt.cell.client.ImageResourceCell::resetFocus(Lcom/google/gwt/dom/client/Element;Lcom/google/gwt/resources/client/ImageResource;Ljava/lang/Object;) MISSING +com.google.gwt.cell.client.ImageResourceCell::setValue(Lcom/google/gwt/dom/client/Element;Lcom/google/gwt/resources/client/ImageResource;Ljava/lang/Object;) MISSING +com.google.gwt.cell.client.NumberCell::isEditing(Lcom/google/gwt/dom/client/Element;Ljava/lang/Number;Ljava/lang/Object;) MISSING +com.google.gwt.cell.client.NumberCell::onBrowserEvent(Lcom/google/gwt/dom/client/Element;Ljava/lang/Number;Ljava/lang/Object;Lcom/google/gwt/dom/client/NativeEvent;Lcom/google/gwt/cell/client/ValueUpdater;) MISSING +com.google.gwt.cell.client.NumberCell::onEnterKeyDown(Lcom/google/gwt/dom/client/Element;Ljava/lang/Number;Ljava/lang/Object;Lcom/google/gwt/dom/client/NativeEvent;Lcom/google/gwt/cell/client/ValueUpdater;) MISSING +com.google.gwt.cell.client.NumberCell::render(Ljava/lang/Number;Ljava/lang/Object;Lcom/google/gwt/safehtml/shared/SafeHtmlBuilder;) MISSING +com.google.gwt.cell.client.NumberCell::resetFocus(Lcom/google/gwt/dom/client/Element;Ljava/lang/Number;Ljava/lang/Object;) MISSING +com.google.gwt.cell.client.NumberCell::setValue(Lcom/google/gwt/dom/client/Element;Ljava/lang/Number;Ljava/lang/Object;) MISSING +com.google.gwt.cell.client.SafeHtmlCell::isEditing(Lcom/google/gwt/dom/client/Element;Lcom/google/gwt/safehtml/shared/SafeHtml;Ljava/lang/Object;) MISSING +com.google.gwt.cell.client.SafeHtmlCell::onBrowserEvent(Lcom/google/gwt/dom/client/Element;Lcom/google/gwt/safehtml/shared/SafeHtml;Ljava/lang/Object;Lcom/google/gwt/dom/client/NativeEvent;Lcom/google/gwt/cell/client/ValueUpdater;) MISSING +com.google.gwt.cell.client.SafeHtmlCell::onEnterKeyDown(Lcom/google/gwt/dom/client/Element;Lcom/google/gwt/safehtml/shared/SafeHtml;Ljava/lang/Object;Lcom/google/gwt/dom/client/NativeEvent;Lcom/google/gwt/cell/client/ValueUpdater;) MISSING +com.google.gwt.cell.client.SafeHtmlCell::render(Lcom/google/gwt/safehtml/shared/SafeHtml;Ljava/lang/Object;Lcom/google/gwt/safehtml/shared/SafeHtmlBuilder;) MISSING +com.google.gwt.cell.client.SafeHtmlCell::resetFocus(Lcom/google/gwt/dom/client/Element;Lcom/google/gwt/safehtml/shared/SafeHtml;Ljava/lang/Object;) MISSING +com.google.gwt.cell.client.SafeHtmlCell::setValue(Lcom/google/gwt/dom/client/Element;Lcom/google/gwt/safehtml/shared/SafeHtml;Ljava/lang/Object;) MISSING +com.google.gwt.cell.client.SelectionCell::isEditing(Lcom/google/gwt/dom/client/Element;Ljava/lang/String;Ljava/lang/Object;) MISSING +com.google.gwt.cell.client.SelectionCell::onBrowserEvent(Lcom/google/gwt/dom/client/Element;Ljava/lang/String;Ljava/lang/Object;Lcom/google/gwt/dom/client/NativeEvent;Lcom/google/gwt/cell/client/ValueUpdater;) MISSING +com.google.gwt.cell.client.SelectionCell::onEnterKeyDown(Lcom/google/gwt/dom/client/Element;Ljava/lang/String;Ljava/lang/Object;Lcom/google/gwt/dom/client/NativeEvent;Lcom/google/gwt/cell/client/ValueUpdater;) MISSING +com.google.gwt.cell.client.SelectionCell::render(Ljava/lang/String;Ljava/lang/Object;Lcom/google/gwt/safehtml/shared/SafeHtmlBuilder;) MISSING +com.google.gwt.cell.client.SelectionCell::resetFocus(Lcom/google/gwt/dom/client/Element;Ljava/lang/String;Ljava/lang/Object;) MISSING +com.google.gwt.cell.client.SelectionCell::setValue(Lcom/google/gwt/dom/client/Element;Ljava/lang/String;Ljava/lang/Object;) MISSING +com.google.gwt.cell.client.TextCell::isEditing(Lcom/google/gwt/dom/client/Element;Ljava/lang/String;Ljava/lang/Object;) MISSING +com.google.gwt.cell.client.TextCell::onBrowserEvent(Lcom/google/gwt/dom/client/Element;Ljava/lang/String;Ljava/lang/Object;Lcom/google/gwt/dom/client/NativeEvent;Lcom/google/gwt/cell/client/ValueUpdater;) MISSING +com.google.gwt.cell.client.TextCell::onEnterKeyDown(Lcom/google/gwt/dom/client/Element;Ljava/lang/String;Ljava/lang/Object;Lcom/google/gwt/dom/client/NativeEvent;Lcom/google/gwt/cell/client/ValueUpdater;) MISSING +com.google.gwt.cell.client.TextCell::render(Lcom/google/gwt/safehtml/shared/SafeHtml;Ljava/lang/Object;Lcom/google/gwt/safehtml/shared/SafeHtmlBuilder;) MISSING +com.google.gwt.cell.client.TextCell::render(Ljava/lang/String;Ljava/lang/Object;Lcom/google/gwt/safehtml/shared/SafeHtmlBuilder;) MISSING +com.google.gwt.cell.client.TextCell::resetFocus(Lcom/google/gwt/dom/client/Element;Ljava/lang/String;Ljava/lang/Object;) MISSING +com.google.gwt.cell.client.TextCell::setValue(Lcom/google/gwt/dom/client/Element;Ljava/lang/String;Ljava/lang/Object;) MISSING +com.google.gwt.cell.client.TextInputCell::isEditing(Lcom/google/gwt/dom/client/Element;Ljava/lang/String;Ljava/lang/Object;) MISSING +com.google.gwt.cell.client.TextInputCell::onBrowserEvent(Lcom/google/gwt/dom/client/Element;Ljava/lang/String;Ljava/lang/Object;Lcom/google/gwt/dom/client/NativeEvent;Lcom/google/gwt/cell/client/ValueUpdater;) MISSING +com.google.gwt.cell.client.TextInputCell::onEnterKeyDown(Lcom/google/gwt/dom/client/Element;Ljava/lang/String;Ljava/lang/Object;Lcom/google/gwt/dom/client/NativeEvent;Lcom/google/gwt/cell/client/ValueUpdater;) MISSING +com.google.gwt.cell.client.TextInputCell::render(Ljava/lang/String;Ljava/lang/Object;Lcom/google/gwt/safehtml/shared/SafeHtmlBuilder;) MISSING +com.google.gwt.cell.client.TextInputCell::resetFocus(Lcom/google/gwt/dom/client/Element;Ljava/lang/String;Ljava/lang/Object;) MISSING +com.google.gwt.cell.client.TextInputCell::setValue(Lcom/google/gwt/dom/client/Element;Ljava/lang/String;Ljava/lang/Object;) MISSING +com.google.gwt.user.cellview.client.CellList::fireEventToCell(Lcom/google/gwt/user/client/Event;Lcom/google/gwt/dom/client/Element;Ljava/lang/Object;) MISSING +com.google.gwt.user.cellview.client.Column::render(Ljava/lang/Object;Lcom/google/gwt/view/client/ProvidesKey;Lcom/google/gwt/safehtml/shared/SafeHtmlBuilder;) MISSING +com.google.gwt.user.cellview.client.Column::onBrowserEvent(Lcom/google/gwt/dom/client/Element;ILjava/lang/Object;Lcom/google/gwt/dom/client/NativeEvent;Lcom/google/gwt/view/client/ProvidesKey;) MISSING +com.google.gwt.user.cellview.client.Header::onBrowserEvent(Lcom/google/gwt/dom/client/Element;Lcom/google/gwt/dom/client/NativeEvent;) MISSING +com.google.gwt.user.cellview.client.Header::render(Lcom/google/gwt/safehtml/shared/SafeHtmlBuilder;) MISSING +
diff --git a/user/javadoc/com/google/gwt/examples/cell/CellExample.java b/user/javadoc/com/google/gwt/examples/cell/CellExample.java index 2c8317c..524889d 100644 --- a/user/javadoc/com/google/gwt/examples/cell/CellExample.java +++ b/user/javadoc/com/google/gwt/examples/cell/CellExample.java
@@ -39,7 +39,7 @@ private static class ColorCell extends AbstractCell<String> { @Override - public void render(String value, Object key, SafeHtmlBuilder sb) { + public void render(Context context, String value, SafeHtmlBuilder sb) { /* * Always do a null check on the value. Cell widgets can pass null to * cells if the underlying data contains a null, or if the data arrives
diff --git a/user/javadoc/com/google/gwt/examples/cell/EditableCellExample.java b/user/javadoc/com/google/gwt/examples/cell/EditableCellExample.java index 024a01b..73aacf2 100644 --- a/user/javadoc/com/google/gwt/examples/cell/EditableCellExample.java +++ b/user/javadoc/com/google/gwt/examples/cell/EditableCellExample.java
@@ -67,7 +67,7 @@ } @Override - public void onBrowserEvent(Element parent, Contact value, Object key, + public void onBrowserEvent(Context context, Element parent, Contact value, NativeEvent event, ValueUpdater<Contact> valueUpdater) { // Check that the value is not null. if (value == null) { @@ -75,7 +75,7 @@ } // Call the super handler, which handlers the enter key. - super.onBrowserEvent(parent, value, key, event, valueUpdater); + super.onBrowserEvent(context, parent, value, event, valueUpdater); // Handle click events. if ("change".equals(event.getType())) { @@ -85,7 +85,7 @@ } @Override - public void render(Contact value, Object key, SafeHtmlBuilder sb) { + public void render(Context context, Contact value, SafeHtmlBuilder sb) { /* * Always do a null check on the value. Cell widgets can pass null to * cells if the underlying data contains a null, or if the data arrives @@ -123,8 +123,8 @@ * navigation in the widget. Our cell will toggle the checkbox on Enter. */ @Override - protected void onEnterKeyDown(Element parent, Contact value, Object key, - NativeEvent event, ValueUpdater<Contact> valueUpdater) { + protected void onEnterKeyDown(Context context, Element parent, + Contact value, NativeEvent event, ValueUpdater<Contact> valueUpdater) { // Toggle the checkbox. InputElement input = getInputElement(parent); input.setChecked(!input.isChecked());
diff --git a/user/javadoc/com/google/gwt/examples/cell/InteractionCellExample.java b/user/javadoc/com/google/gwt/examples/cell/InteractionCellExample.java index ceaa7a3..70c7001 100644 --- a/user/javadoc/com/google/gwt/examples/cell/InteractionCellExample.java +++ b/user/javadoc/com/google/gwt/examples/cell/InteractionCellExample.java
@@ -78,7 +78,7 @@ } @Override - public void onBrowserEvent(Element parent, Contact value, Object key, + public void onBrowserEvent(Context context, Element parent, Contact value, NativeEvent event, ValueUpdater<Contact> valueUpdater) { // Check that the value is not null. if (value == null) { @@ -86,16 +86,16 @@ } // Call the super handler, which handlers the enter key. - super.onBrowserEvent(parent, value, key, event, valueUpdater); + super.onBrowserEvent(context, parent, value, event, valueUpdater); // On click, perform the same action that we perform on enter. if ("click".equals(event.getType())) { - this.onEnterKeyDown(parent, value, key, event, valueUpdater); + this.onEnterKeyDown(context, parent, value, event, valueUpdater); } } @Override - public void render(Contact value, Object key, SafeHtmlBuilder sb) { + public void render(Context context, Contact value, SafeHtmlBuilder sb) { /* * Always do a null check on the value. Cell widgets can pass null to * cells if the underlying data contains a null, or if the data arrives @@ -128,8 +128,8 @@ * navigation in the widget. */ @Override - protected void onEnterKeyDown(Element parent, Contact value, Object key, - NativeEvent event, ValueUpdater<Contact> valueUpdater) { + protected void onEnterKeyDown(Context context, Element parent, + Contact value, NativeEvent event, ValueUpdater<Contact> valueUpdater) { Window.alert("You clicked " + value.name); } }
diff --git a/user/javadoc/com/google/gwt/examples/cellview/CellBrowserExample2.java b/user/javadoc/com/google/gwt/examples/cellview/CellBrowserExample2.java index 013db42..5aa5173 100644 --- a/user/javadoc/com/google/gwt/examples/cellview/CellBrowserExample2.java +++ b/user/javadoc/com/google/gwt/examples/cellview/CellBrowserExample2.java
@@ -209,7 +209,7 @@ // Create a cell to display a composer. Cell<Composer> cell = new AbstractCell<Composer>() { @Override - public void render(Composer value, Object key, SafeHtmlBuilder sb) { + public void render(Context context, Composer value, SafeHtmlBuilder sb) { if (value != null) { sb.appendEscaped(value.getName()); } @@ -225,7 +225,7 @@ ((Composer) value).getPlaylists()); Cell<Playlist> cell = new AbstractCell<Playlist>() { @Override - public void render(Playlist value, Object key, SafeHtmlBuilder sb) { + public void render(Context context, Playlist value, SafeHtmlBuilder sb) { if (value != null) { sb.appendEscaped(value.getName()); }
diff --git a/user/javadoc/com/google/gwt/examples/cellview/CellTreeExample2.java b/user/javadoc/com/google/gwt/examples/cellview/CellTreeExample2.java index 6c713f8..6825e76 100644 --- a/user/javadoc/com/google/gwt/examples/cellview/CellTreeExample2.java +++ b/user/javadoc/com/google/gwt/examples/cellview/CellTreeExample2.java
@@ -210,7 +210,7 @@ // Create a cell to display a composer. Cell<Composer> cell = new AbstractCell<Composer>() { @Override - public void render(Composer value, Object key, SafeHtmlBuilder sb) { + public void render(Context context, Composer value, SafeHtmlBuilder sb) { if (value != null) { sb.appendEscaped(value.getName()); } @@ -226,7 +226,7 @@ ((Composer) value).getPlaylists()); Cell<Playlist> cell = new AbstractCell<Playlist>() { @Override - public void render(Playlist value, Object key, SafeHtmlBuilder sb) { + public void render(Context context, Playlist value, SafeHtmlBuilder sb) { if (value != null) { sb.appendEscaped(value.getName()); }
diff --git a/user/javadoc/com/google/gwt/examples/view/KeyProviderExample.java b/user/javadoc/com/google/gwt/examples/view/KeyProviderExample.java index f3cfc89..434019e 100644 --- a/user/javadoc/com/google/gwt/examples/view/KeyProviderExample.java +++ b/user/javadoc/com/google/gwt/examples/view/KeyProviderExample.java
@@ -54,7 +54,7 @@ */ private static class ContactCell extends AbstractCell<Contact> { @Override - public void render(Contact value, Object key, SafeHtmlBuilder sb) { + public void render(Context context, Contact value, SafeHtmlBuilder sb) { if (value != null) { sb.appendEscaped(value.name); }
diff --git a/user/src/com/google/gwt/cell/client/AbstractCell.java b/user/src/com/google/gwt/cell/client/AbstractCell.java index d47edee..e98f6af 100644 --- a/user/src/com/google/gwt/cell/client/AbstractCell.java +++ b/user/src/com/google/gwt/cell/client/AbstractCell.java
@@ -1,12 +1,12 @@ /* * Copyright 2010 Google Inc. - * + * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the @@ -15,6 +15,7 @@ */ package com.google.gwt.cell.client; +import com.google.gwt.cell.client.Cell.Context; import com.google.gwt.dom.client.Element; import com.google.gwt.dom.client.NativeEvent; import com.google.gwt.event.dom.client.KeyCodes; @@ -26,7 +27,7 @@ /** * A default implementation of the {@link Cell} interface. - * + * * <p> * <h3>Examples</h3> * <dl> @@ -38,7 +39,7 @@ * <dd>{@example com.google.gwt.examples.cell.EditableCellExample}</dd> * </dl> * </p> - * + * * @param <C> the type that this Cell represents */ public abstract class AbstractCell<C> implements Cell<C> { @@ -51,7 +52,7 @@ /** * Construct a new {@link AbstractCell} with the specified consumed events. * The input arguments are passed by copy. - * + * * @param consumedEvents the events that this cell consumes */ public AbstractCell(String... consumedEvents) { @@ -67,7 +68,7 @@ /** * Construct a new {@link AbstractCell} with the specified consumed events. - * + * * @param consumedEvents the events that this cell consumes */ public AbstractCell(Set<String> consumedEvents) { @@ -90,45 +91,45 @@ * Returns false. Subclasses that support editing should override this method * to return the current editing status. */ - public boolean isEditing(Element parent, C value, Object key) { + public boolean isEditing(Context context, Element parent, C value) { return false; } /** * {@inheritDoc} - * + * * <p> * If you override this method to add support for events, remember to pass the * event types that the cell expects into the constructor. * </p> */ - public void onBrowserEvent(Element parent, C value, Object key, + public void onBrowserEvent(Context context, Element parent, C value, NativeEvent event, ValueUpdater<C> valueUpdater) { String eventType = event.getType(); // Special case the ENTER key for a unified user experience. if ("keydown".equals(eventType) && event.getKeyCode() == KeyCodes.KEY_ENTER) { - onEnterKeyDown(parent, value, key, event, valueUpdater); + onEnterKeyDown(context, parent, value, event, valueUpdater); } } - public abstract void render(C value, Object key, SafeHtmlBuilder sb); + public abstract void render(Context context, C value, SafeHtmlBuilder sb); /** * {@inheritDoc} - * + * * <p> * This method is a no-op and returns false. If your cell is editable or can * be focused by the user, override this method to reset focus when the * containing widget is refreshed. * </p> */ - public boolean resetFocus(Element parent, C value, Object key) { + public boolean resetFocus(Context context, Element parent, C value) { return false; } - public void setValue(Element parent, C value, Object key) { + public void setValue(Context context, Element parent, C value) { SafeHtmlBuilder sb = new SafeHtmlBuilder(); - render(value, key, sb); + render(context, value, sb); parent.setInnerHTML(sb.toSafeHtml().asString()); } @@ -138,20 +139,20 @@ * should override this method to provide a consistent user experience. Your * widget must consume <code>keydown</code> events for this method to be * called. - * + * + * @param context the {@link Context} of the cell * @param parent the parent Element * @param value the value associated with the cell - * @param key the unique key associated with the row object * @param event the native browser event * @param valueUpdater a {@link ValueUpdater}, or null if not specified */ - protected void onEnterKeyDown(Element parent, C value, Object key, + protected void onEnterKeyDown(Context context, Element parent, C value, NativeEvent event, ValueUpdater<C> valueUpdater) { } /** * Initialize the cell. - * + * * @param consumedEvents the events that the cell consumes */ private void init(Set<String> consumedEvents) {
diff --git a/user/src/com/google/gwt/cell/client/AbstractEditableCell.java b/user/src/com/google/gwt/cell/client/AbstractEditableCell.java index a99eb8f..66a4bcb 100644 --- a/user/src/com/google/gwt/cell/client/AbstractEditableCell.java +++ b/user/src/com/google/gwt/cell/client/AbstractEditableCell.java
@@ -15,6 +15,7 @@ */ package com.google.gwt.cell.client; +import com.google.gwt.cell.client.Cell.Context; import com.google.gwt.dom.client.Element; import java.util.HashMap; @@ -76,7 +77,7 @@ * * @param key the key identifying the row object * @return the view data, or null if none has been set - * @see #setViewData(Object, Object)V + * @see #setViewData(Object, Object) */ public V getViewData(Object key) { return (key == null) ? null : viewDataMap.get(key); @@ -87,14 +88,14 @@ * given element and key. While a cell is editing, widgets containing the cell * may choose to pass keystrokes directly to the cell rather than using them * for navigation purposes. - * + * + * @param context the {@link Context} of the cell * @param parent the parent Element * @param value the value associated with the cell - * @param key the unique key associated with the row object * @return true if the cell is in edit mode */ @Override - public abstract boolean isEditing(Element parent, C value, Object key); + public abstract boolean isEditing(Context context, Element parent, C value); /** * Associate view data with the specified key. If the key is null, the view
diff --git a/user/src/com/google/gwt/cell/client/AbstractInputCell.java b/user/src/com/google/gwt/cell/client/AbstractInputCell.java index e67ccf5..b9719fc 100644 --- a/user/src/com/google/gwt/cell/client/AbstractInputCell.java +++ b/user/src/com/google/gwt/cell/client/AbstractInputCell.java
@@ -1,12 +1,12 @@ /* * Copyright 2010 Google Inc. - * + * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the @@ -23,7 +23,7 @@ /** * An {@link AbstractCell} used to render input elements that can receive focus. - * + * * @param <C> the type that this Cell represents * @param <V> the data type of the view data state */ @@ -32,7 +32,7 @@ /** * Get the events consumed by the input cell. - * + * * @param userEvents the events consumed by the subclass * @return the events */ @@ -49,7 +49,7 @@ /** * Get the events consumed by the input cell. - * + * * @param userEvents the events consumed by the subclass * @return the events */ @@ -71,7 +71,7 @@ /** * Construct a new {@link AbstractInputCell} with the specified consumed * events. - * + * * @param consumedEvents the events that this cell consumes */ public AbstractInputCell(String... consumedEvents) { @@ -81,7 +81,7 @@ /** * Construct a new {@link AbstractInputCell} with the specified consumed * events. - * + * * @param consumedEvents the events that this cell consumes */ public AbstractInputCell(Set<String> consumedEvents) { @@ -89,14 +89,14 @@ } @Override - public boolean isEditing(Element parent, C value, Object key) { - return focusedKey != null && focusedKey.equals(key); + public boolean isEditing(Context context, Element parent, C value) { + return focusedKey != null && focusedKey.equals(context.getKey()); } @Override - public void onBrowserEvent(Element parent, C value, Object key, + public void onBrowserEvent(Context context, Element parent, C value, NativeEvent event, ValueUpdater<C> valueUpdater) { - super.onBrowserEvent(parent, value, key, event, valueUpdater); + super.onBrowserEvent(context, parent, value, event, valueUpdater); // Ignore events that don't target the input. Element target = event.getEventTarget().cast(); @@ -106,15 +106,15 @@ String eventType = event.getType(); if ("focus".equals(eventType)) { - focusedKey = key; + focusedKey = context.getKey(); } else if ("blur".equals(eventType)) { focusedKey = null; } } @Override - public boolean resetFocus(Element parent, C value, Object key) { - if (isEditing(parent, value, key)) { + public boolean resetFocus(Context context, Element parent, C value) { + if (isEditing(context, parent, value)) { getInputElement(parent).focus(); return true; } @@ -123,7 +123,7 @@ /** * Call this method when editing is complete. - * + * * @param parent the parent Element * @param value the value associated with the cell * @param key the unique key associated with the row object @@ -137,7 +137,7 @@ /** * Get the input element. - * + * * @param parent the cell parent element * @return the input element */ @@ -146,10 +146,11 @@ } @Override - protected void onEnterKeyDown(Element parent, C value, Object key, + protected void onEnterKeyDown(Context context, Element parent, C value, NativeEvent event, ValueUpdater<C> valueUpdater) { Element input = getInputElement(parent); Element target = event.getEventTarget().cast(); + Object key = context.getKey(); if (getInputElement(parent).isOrHasChild(target)) { finishEditing(parent, value, key, valueUpdater); } else {
diff --git a/user/src/com/google/gwt/cell/client/AbstractSafeHtmlCell.java b/user/src/com/google/gwt/cell/client/AbstractSafeHtmlCell.java index 4d7bc32..73f7ac7 100644 --- a/user/src/com/google/gwt/cell/client/AbstractSafeHtmlCell.java +++ b/user/src/com/google/gwt/cell/client/AbstractSafeHtmlCell.java
@@ -73,11 +73,11 @@ } @Override - public void render(C data, Object key, SafeHtmlBuilder sb) { + public void render(Context context, C data, SafeHtmlBuilder sb) { if (data == null) { - render((SafeHtml) null, key, sb); + render(context, (SafeHtml) null, sb); } else { - render(renderer.render(data), key, sb); + render(context, renderer.render(data), sb); } } @@ -85,9 +85,10 @@ * Render the cell contents after they have been converted to {@link SafeHtml} * form. * + * @param context the original context to render * @param data a {@link SafeHtml} string - * @param key the unique key associated with the row object * @param sb the {@link SafeHtmlBuilder} to be written to */ - protected abstract void render(SafeHtml data, Object key, SafeHtmlBuilder sb); + protected abstract void render(Context context, SafeHtml data, + SafeHtmlBuilder sb); }
diff --git a/user/src/com/google/gwt/cell/client/ActionCell.java b/user/src/com/google/gwt/cell/client/ActionCell.java index 0003118..c72c63d 100644 --- a/user/src/com/google/gwt/cell/client/ActionCell.java +++ b/user/src/com/google/gwt/cell/client/ActionCell.java
@@ -72,21 +72,21 @@ } @Override - public void onBrowserEvent(Element parent, C value, Object key, + public void onBrowserEvent(Context context, Element parent, C value, NativeEvent event, ValueUpdater<C> valueUpdater) { - super.onBrowserEvent(parent, value, key, event, valueUpdater); + super.onBrowserEvent(context, parent, value, event, valueUpdater); if ("click".equals(event.getType())) { - onEnterKeyDown(parent, value, key, event, valueUpdater); + onEnterKeyDown(context, parent, value, event, valueUpdater); } } @Override - public void render(C value, Object key, SafeHtmlBuilder sb) { + public void render(Context context, C value, SafeHtmlBuilder sb) { sb.append(html); } @Override - protected void onEnterKeyDown(Element parent, C value, Object key, + protected void onEnterKeyDown(Context context, Element parent, C value, NativeEvent event, ValueUpdater<C> valueUpdater) { delegate.execute(value); }
diff --git a/user/src/com/google/gwt/cell/client/ButtonCell.java b/user/src/com/google/gwt/cell/client/ButtonCell.java index d8caa83..cabd39e 100644 --- a/user/src/com/google/gwt/cell/client/ButtonCell.java +++ b/user/src/com/google/gwt/cell/client/ButtonCell.java
@@ -44,16 +44,16 @@ } @Override - public void onBrowserEvent(Element parent, String value, Object key, + public void onBrowserEvent(Context context, Element parent, String value, NativeEvent event, ValueUpdater<String> valueUpdater) { - super.onBrowserEvent(parent, value, key, event, valueUpdater); + super.onBrowserEvent(context, parent, value, event, valueUpdater); if ("click".equals(event.getType())) { - onEnterKeyDown(parent, value, key, event, valueUpdater); + onEnterKeyDown(context, parent, value, event, valueUpdater); } } @Override - public void render(SafeHtml data, Object key, SafeHtmlBuilder sb) { + public void render(Context context, SafeHtml data, SafeHtmlBuilder sb) { sb.appendHtmlConstant("<button type=\"button\" tabindex=\"-1\">"); if (data != null) { sb.append(data); @@ -62,7 +62,7 @@ } @Override - protected void onEnterKeyDown(Element parent, String value, Object key, + protected void onEnterKeyDown(Context context, Element parent, String value, NativeEvent event, ValueUpdater<String> valueUpdater) { if (valueUpdater != null) { valueUpdater.update(value);
diff --git a/user/src/com/google/gwt/cell/client/Cell.java b/user/src/com/google/gwt/cell/client/Cell.java index 217217f..2f32358 100644 --- a/user/src/com/google/gwt/cell/client/Cell.java +++ b/user/src/com/google/gwt/cell/client/Cell.java
@@ -1,12 +1,12 @@ /* * Copyright 2010 Google Inc. - * + * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the @@ -23,19 +23,70 @@ /** * A light weight representation of a renderable object. - * + * * <p> * <h3>Example</h3> * {@example com.google.gwt.examples.cell.CellExample} * </p> - * + * * @param <C> the type that this Cell represents */ public interface Cell<C> { /** + * Contains information about the context of the Cell. + */ + public static class Context { + + private final int column; + private final int index; + private final Object key; + + /** + * Create a new {@link Context}. + * + * @param index the absolute index of the value + * @param column the column index of the cell, or 0 + * @param key the unique key that represents the row value + */ + public Context(int index, int column, Object key) { + this.index = index; + this.column = column; + this.key = key; + } + + /** + * Get the column index of the cell. If the view only contains a single + * column, this method returns 0. + * + * @return the column index of the cell + */ + public int getColumn() { + return column; + } + + /** + * Get the absolute index of the value. + * + * @return the index + */ + public int getIndex() { + return index; + } + + /** + * Get the key that uniquely identifies the row object. + * + * @return the unique key + */ + public Object getKey() { + return key; + } + } + + /** * Check if this cell depends on the selection state. - * + * * @return true if dependent on selection, false if not */ boolean dependsOnSelection(); @@ -43,13 +94,14 @@ /** * Get the set of events that this cell consumes. The container that uses this * cell should only pass these events to - * {@link #onBrowserEvent(Element, Object, Object, NativeEvent, ValueUpdater)}. - * + * {@link #onBrowserEvent(Context, Element, Object, NativeEvent, ValueUpdater))} + * when the event occurs. + * * <p> * The returned value should not be modified, and may be an unmodifiable set. * Changes to the return value may not be reflected in the cell. * </p> - * + * * @return the consumed events, or null if no events are consumed */ Set<String> getConsumedEvents(); @@ -57,7 +109,7 @@ /** * Check if this cell handles selection. If the cell handles selection, then * its container should not automatically handle selection. - * + * * @return true if the cell handles selection, false if not */ boolean handlesSelection(); @@ -65,32 +117,32 @@ /** * Returns true if the cell is currently editing the data identified by the * given element and key. While a cell is editing, widgets containing the cell - * may chooses to pass keystrokes directly to the cell rather than using them + * may choose to pass keystrokes directly to the cell rather than using them * for navigation purposes. - * + * + * @param context the {@link Context} of the cell * @param parent the parent Element * @param value the value associated with the cell - * @param key the unique key associated with the row object * @return true if the cell is in edit mode */ - boolean isEditing(Element parent, C value, Object key); + boolean isEditing(Context context, Element parent, C value); /** * Handle a browser event that took place within the cell. The default * implementation returns null. - * + * + * @param context the {@link Context} of the cell * @param parent the parent Element * @param value the value associated with the cell - * @param key the unique key associated with the row object * @param event the native browser event * @param valueUpdater a {@link ValueUpdater}, or null if not specified */ - void onBrowserEvent(Element parent, C value, Object key, NativeEvent event, - ValueUpdater<C> valueUpdater); + void onBrowserEvent(Context context, Element parent, C value, + NativeEvent event, ValueUpdater<C> valueUpdater); /** * Render a cell as HTML into a {@link SafeHtmlBuilder}, suitable for passing - * to {@link Element#setInnerHTML} on a container element. + * to {@link Element#setInnerHTML(String)} on a container element. * * <p> * Note: If your cell contains natively focusable elements, such as buttons or @@ -98,33 +150,32 @@ * focus away from the containing widget. * </p> * + * @param context the {@link Context} of the cell * @param value the cell value to be rendered - * @param key the unique key associated with the row object * @param sb the {@link SafeHtmlBuilder} to be written to */ - void render(C value, Object key, SafeHtmlBuilder sb); + void render(Context context, C value, SafeHtmlBuilder sb); /** * Reset focus on the Cell. This method is called if the cell has focus when * it is refreshed. - * + * + * @param context the {@link Context} of the cell * @param parent the parent Element * @param value the value associated with the cell - * @param key the unique key associated with the row object - * * @return true if focus is taken, false if not */ - boolean resetFocus(Element parent, C value, Object key); + boolean resetFocus(Context context, Element parent, C value); /** * This method may be used by cell containers to set the value on a single * cell directly, rather than using {@link Element#setInnerHTML(String)}. See - * {@link AbstractCell#setValue(Element, Object, Object)} for a default - * implementation that uses {@link #render(Object, Object, SafeHtmlBuilder)}. - * + * {@link AbstractCell#setValue(Context)} for a default implementation that + * uses {@link #render(Context, SafeHtmlBuilder))}. + * + * @param context the {@link Context} of the cell * @param parent the parent Element * @param value the value associated with the cell - * @param key the unique key associated with the row object */ - void setValue(Element parent, C value, Object key); + void setValue(Context context, Element parent, C value); }
diff --git a/user/src/com/google/gwt/cell/client/CheckboxCell.java b/user/src/com/google/gwt/cell/client/CheckboxCell.java index 1f51a1d..e0eae00 100644 --- a/user/src/com/google/gwt/cell/client/CheckboxCell.java +++ b/user/src/com/google/gwt/cell/client/CheckboxCell.java
@@ -83,14 +83,14 @@ } @Override - public boolean isEditing(Element parent, Boolean value, Object key) { + public boolean isEditing(Context context, Element parent, Boolean value) { // A checkbox is never in "edit mode". There is no intermediate state // between checked and unchecked. return false; } @Override - public void onBrowserEvent(Element parent, Boolean value, Object key, + public void onBrowserEvent(Context context, Element parent, Boolean value, NativeEvent event, ValueUpdater<Boolean> valueUpdater) { String type = event.getType(); @@ -117,9 +117,9 @@ * do not save the value because we can get into an inconsistent state. */ if (value != isChecked && !dependsOnSelection()) { - setViewData(key, isChecked); + setViewData(context.getKey(), isChecked); } else { - clearViewData(key); + clearViewData(context.getKey()); } if (valueUpdater != null) { @@ -129,8 +129,9 @@ } @Override - public void render(Boolean value, Object key, SafeHtmlBuilder sb) { + public void render(Context context, Boolean value, SafeHtmlBuilder sb) { // Get the view data. + Object key = context.getKey(); Boolean viewData = getViewData(key); if (viewData != null && viewData.equals(value)) { clearViewData(key);
diff --git a/user/src/com/google/gwt/cell/client/ClickableTextCell.java b/user/src/com/google/gwt/cell/client/ClickableTextCell.java index 16fbe38..a3a41d7 100644 --- a/user/src/com/google/gwt/cell/client/ClickableTextCell.java +++ b/user/src/com/google/gwt/cell/client/ClickableTextCell.java
@@ -47,16 +47,16 @@ } @Override - public void onBrowserEvent(Element parent, String value, Object key, + public void onBrowserEvent(Context context, Element parent, String value, NativeEvent event, ValueUpdater<String> valueUpdater) { - super.onBrowserEvent(parent, value, key, event, valueUpdater); + super.onBrowserEvent(context, parent, value, event, valueUpdater); if ("click".equals(event.getType())) { - onEnterKeyDown(parent, value, key, event, valueUpdater); + onEnterKeyDown(context, parent, value, event, valueUpdater); } } @Override - protected void onEnterKeyDown(Element parent, String value, Object key, + protected void onEnterKeyDown(Context context, Element parent, String value, NativeEvent event, ValueUpdater<String> valueUpdater) { if (valueUpdater != null) { valueUpdater.update(value); @@ -64,7 +64,7 @@ } @Override - protected void render(SafeHtml value, Object key, SafeHtmlBuilder sb) { + protected void render(Context context, SafeHtml value, SafeHtmlBuilder sb) { if (value != null) { sb.append(value); }
diff --git a/user/src/com/google/gwt/cell/client/CompositeCell.java b/user/src/com/google/gwt/cell/client/CompositeCell.java index 6013d46..c1328b6 100644 --- a/user/src/com/google/gwt/cell/client/CompositeCell.java +++ b/user/src/com/google/gwt/cell/client/CompositeCell.java
@@ -1,12 +1,12 @@ /* * Copyright 2010 Google Inc. - * + * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the @@ -30,13 +30,13 @@ * <p> * A {@link Cell} that is composed of other {@link Cell}s. * </p> - * + * * <p> * When this cell is rendered, it will render each component {@link Cell} inside * a span. If the component {@link Cell} uses block level elements (such as a * Div), the component cells will stack vertically. * </p> - * + * * @param <C> the type that this Cell represents */ public class CompositeCell<C> extends AbstractCell<C> { @@ -58,7 +58,7 @@ /** * The cells that compose this {@link Cell}. - * + * * NOTE: Do not add add/insert/remove hasCells methods to the API. This cell * assumes that the index of the cellParent corresponds to the index in the * hasCells array. @@ -67,7 +67,7 @@ /** * Construct a new {@link CompositeCell}. - * + * * @param hasCells the cells that makeup the composite */ public CompositeCell(List<HasCell<C, ?>> hasCells) { @@ -113,7 +113,7 @@ } @Override - public void onBrowserEvent(Element parent, C value, Object key, + public void onBrowserEvent(Context context, Element parent, C value, NativeEvent event, ValueUpdater<C> valueUpdater) { int index = 0; EventTarget eventTarget = event.getEventTarget(); @@ -123,7 +123,7 @@ Element wrapper = container.getFirstChildElement(); while (wrapper != null) { if (wrapper.isOrHasChild(target)) { - onBrowserEventImpl(wrapper, value, key, event, valueUpdater, + onBrowserEventImpl(context, wrapper, value, event, valueUpdater, hasCells.get(index)); } @@ -134,19 +134,19 @@ } @Override - public void render(C value, Object key, SafeHtmlBuilder sb) { + public void render(Context context, C value, SafeHtmlBuilder sb) { for (HasCell<C, ?> hasCell : hasCells) { - render(value, key, sb, hasCell); + render(context, value, sb, hasCell); } } @Override - public boolean resetFocus(Element parent, C value, Object key) { + public boolean resetFocus(Context context, Element parent, C value) { Element curChild = getContainerElement(parent).getFirstChildElement(); for (HasCell<C, ?> hasCell : hasCells) { // The first child that takes focus wins. Only one child should ever be in // edit mode, so this is safe. - if (resetFocusImpl(curChild, value, key, hasCell)) { + if (resetFocusImpl(context, curChild, value, hasCell)) { return true; } curChild = curChild.getNextSiblingElement(); @@ -155,10 +155,10 @@ } @Override - public void setValue(Element parent, C object, Object key) { + public void setValue(Context context, Element parent, C object) { Element curChild = getContainerElement(parent).getFirstChildElement(); for (HasCell<C, ?> hasCell : hasCells) { - setValueImpl(curChild, object, key, hasCell); + setValueImpl(context, curChild, object, hasCell); curChild = curChild.getNextSiblingElement(); } } @@ -167,7 +167,7 @@ * Get the element that acts as the container for all children. If children * are added directly to the parent, the parent is the container. If children * are added in a table row, the row is the parent. - * + * * @param parent the parent element of the cell * @return the container element */ @@ -185,22 +185,22 @@ * focus away from the containing widget. * </p> * + * @param context the {@link Context} of the cell * @param value the cell value to be rendered - * @param key the unique key associated with the row object * @param sb the {@link SafeHtmlBuilder} to be written to * @param hasCell a {@link HasCell} instance containing the cells to be * rendered within this cell */ - protected <X> void render(C value, Object key, SafeHtmlBuilder sb, - HasCell<C, X> hasCell) { + protected <X> void render(Context context, C value, + SafeHtmlBuilder sb, HasCell<C, X> hasCell) { Cell<X> cell = hasCell.getCell(); sb.appendHtmlConstant("<span>"); - cell.render(hasCell.getValue(value), key, sb); + cell.render(context, hasCell.getValue(value), sb); sb.appendHtmlConstant("</span>"); } - private <X> void onBrowserEventImpl(Element parent, final C object, - Object key, NativeEvent event, final ValueUpdater<C> valueUpdater, + private <X> void onBrowserEventImpl(Context context, Element parent, + final C object, NativeEvent event, final ValueUpdater<C> valueUpdater, final HasCell<C, X> hasCell) { ValueUpdater<X> tempUpdater = null; final FieldUpdater<C, X> fieldUpdater = hasCell.getFieldUpdater(); @@ -215,18 +215,18 @@ }; } Cell<X> cell = hasCell.getCell(); - cell.onBrowserEvent(parent, hasCell.getValue(object), key, event, + cell.onBrowserEvent(context, parent, hasCell.getValue(object), event, tempUpdater); } - private <X> boolean resetFocusImpl(Element cellParent, C value, Object key, - HasCell<C, X> hasCell) { + private <X> boolean resetFocusImpl(Context context, Element cellParent, + C value, HasCell<C, X> hasCell) { X cellValue = hasCell.getValue(value); - return hasCell.getCell().resetFocus(cellParent, cellValue, key); + return hasCell.getCell().resetFocus(context, cellParent, cellValue); } - private <X> void setValueImpl(Element cellParent, C object, Object key, + private <X> void setValueImpl(Context context, Element cellParent, C object, HasCell<C, X> hasCell) { - hasCell.getCell().setValue(cellParent, hasCell.getValue(object), key); - } + hasCell.getCell().setValue(context, cellParent, hasCell.getValue(object)); + } }
diff --git a/user/src/com/google/gwt/cell/client/DateCell.java b/user/src/com/google/gwt/cell/client/DateCell.java index bfab2af..bed5b8b 100644 --- a/user/src/com/google/gwt/cell/client/DateCell.java +++ b/user/src/com/google/gwt/cell/client/DateCell.java
@@ -82,7 +82,7 @@ } @Override - public void render(Date value, Object key, SafeHtmlBuilder sb) { + public void render(Context context, Date value, SafeHtmlBuilder sb) { if (value != null) { sb.append(renderer.render(format.format(value))); }
diff --git a/user/src/com/google/gwt/cell/client/DatePickerCell.java b/user/src/com/google/gwt/cell/client/DatePickerCell.java index 49df900..4b1252b 100644 --- a/user/src/com/google/gwt/cell/client/DatePickerCell.java +++ b/user/src/com/google/gwt/cell/client/DatePickerCell.java
@@ -61,6 +61,8 @@ private int offsetY = 10; private Object lastKey; private Element lastParent; + private int lastIndex; + private int lastColumn; private Date lastValue; private PopupPanel panel; private final SafeHtmlRenderer<String> renderer; @@ -131,6 +133,8 @@ public void onClose(CloseEvent<PopupPanel> event) { lastKey = null; lastValue = null; + lastIndex = -1; + lastColumn = -1; if (lastParent != null && !event.isAutoClosed()) { // Refocus on the containing cell after the user selects a value, but // not if the popup is auto closed. @@ -148,12 +152,14 @@ Element cellParent = lastParent; Date oldValue = lastValue; Object key = lastKey; + int index = lastIndex; + int column = lastColumn; panel.hide(); // Update the cell and value updater. Date date = event.getValue(); setViewData(key, date); - setValue(cellParent, oldValue, key); + setValue(new Context(index, column, key), cellParent, oldValue); if (valueUpdater != null) { valueUpdater.update(date); } @@ -162,22 +168,23 @@ } @Override - public boolean isEditing(Element parent, Date value, Object key) { - return lastKey != null && lastKey.equals(key); + public boolean isEditing(Context context, Element parent, Date value) { + return lastKey != null && lastKey.equals(context.getKey()); } @Override - public void onBrowserEvent(Element parent, Date value, Object key, + public void onBrowserEvent(Context context, Element parent, Date value, NativeEvent event, ValueUpdater<Date> valueUpdater) { - super.onBrowserEvent(parent, value, key, event, valueUpdater); + super.onBrowserEvent(context, parent, value, event, valueUpdater); if ("click".equals(event.getType())) { - onEnterKeyDown(parent, value, key, event, valueUpdater); + onEnterKeyDown(context, parent, value, event, valueUpdater); } } @Override - public void render(Date value, Object key, SafeHtmlBuilder sb) { + public void render(Context context, Date value, SafeHtmlBuilder sb) { // Get the view data. + Object key = context.getKey(); Date viewData = getViewData(key); if (viewData != null && viewData.equals(value)) { clearViewData(key); @@ -196,21 +203,23 @@ } @Override - protected void onEnterKeyDown(final Element parent, Date value, Object key, + protected void onEnterKeyDown(Context context, Element parent, Date value, NativeEvent event, ValueUpdater<Date> valueUpdater) { - this.lastKey = key; + this.lastKey = context.getKey(); this.lastParent = parent; this.lastValue = value; + this.lastIndex = context.getIndex(); + this.lastColumn = context.getColumn(); this.valueUpdater = valueUpdater; - Date viewData = getViewData(key); - Date date = (viewData == null) ? value : viewData; + Date viewData = getViewData(lastKey); + Date date = (viewData == null) ? lastValue : viewData; datePicker.setCurrentMonth(date); datePicker.setValue(date); panel.setPopupPositionAndShow(new PositionCallback() { public void setPosition(int offsetWidth, int offsetHeight) { - panel.setPopupPosition(parent.getAbsoluteLeft() + offsetX, - parent.getAbsoluteTop() + offsetY); + panel.setPopupPosition(lastParent.getAbsoluteLeft() + offsetX, + lastParent.getAbsoluteTop() + offsetY); } }); }
diff --git a/user/src/com/google/gwt/cell/client/EditTextCell.java b/user/src/com/google/gwt/cell/client/EditTextCell.java index 57f214f..e180a69 100644 --- a/user/src/com/google/gwt/cell/client/EditTextCell.java +++ b/user/src/com/google/gwt/cell/client/EditTextCell.java
@@ -15,6 +15,7 @@ */ package com.google.gwt.cell.client; +import com.google.gwt.cell.client.Cell.Context; import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.Element; import com.google.gwt.dom.client.EventTarget; @@ -161,18 +162,19 @@ } @Override - public boolean isEditing(Element element, String value, Object key) { - ViewData viewData = getViewData(key); + public boolean isEditing(Context context, Element parent, String value) { + ViewData viewData = getViewData(context.getKey()); return viewData == null ? false : viewData.isEditing(); } @Override - public void onBrowserEvent(Element parent, String value, Object key, + public void onBrowserEvent(Context context, Element parent, String value, NativeEvent event, ValueUpdater<String> valueUpdater) { + Object key = context.getKey(); ViewData viewData = getViewData(key); if (viewData != null && viewData.isEditing()) { // Handle the edit event. - editEvent(parent, key, viewData, event, valueUpdater); + editEvent(context, parent, value, viewData, event, valueUpdater); } else { String type = event.getType(); int keyCode = event.getKeyCode(); @@ -186,14 +188,15 @@ } else { viewData.setEditing(true); } - edit(parent, value, key); + edit(context, parent, value); } } } @Override - public void render(String value, Object key, SafeHtmlBuilder sb) { + public void render(Context context, String value, SafeHtmlBuilder sb) { // Get the view data. + Object key = context.getKey(); ViewData viewData = getViewData(key); if (viewData != null && !viewData.isEditing() && value != null && value.equals(viewData.getText())) { @@ -218,8 +221,8 @@ } @Override - public boolean resetFocus(Element parent, String value, Object key) { - if (isEditing(parent, value, key)) { + public boolean resetFocus(Context context, Element parent, String value) { + if (isEditing(context, parent, value)) { getInputElement(parent).focus(); return true; } @@ -229,12 +232,12 @@ /** * Convert the cell to edit mode. * + * @param context the {@link Context} of the cell * @param parent the parent element * @param value the current value - * @param key the key of the row object */ - protected void edit(Element parent, String value, Object key) { - setValue(parent, value, key); + protected void edit(Context context, Element parent, String value) { + setValue(context, parent, value); InputElement input = getInputElement(parent); input.focus(); input.select(); @@ -242,13 +245,14 @@ /** * Convert the cell to non-edit mode. - * - * @param parent the parent element - * @param value the current value + * + * @param context the context of the cell + * @param parent the parent Element + * @param value the value associated with the cell */ - private void cancel(Element parent, String value) { + private void cancel(Context context, Element parent, String value) { clearInput(getInputElement(parent)); - setValue(parent, value, null); + setValue(context, parent, value); } /** @@ -267,23 +271,24 @@ /** * Commit the current value. - * - * @param parent the parent element + * + * @param context the context of the cell + * @param parent the parent Element * @param viewData the {@link ViewData} object * @param valueUpdater the {@link ValueUpdater} */ - private void commit(Element parent, ViewData viewData, + private void commit(Context context, Element parent, ViewData viewData, ValueUpdater<String> valueUpdater) { String value = updateViewData(parent, viewData, false); clearInput(getInputElement(parent)); - setValue(parent, value, viewData); + setValue(context, parent, viewData.getOriginal()); if (valueUpdater != null) { valueUpdater.update(value); } } - private void editEvent(Element parent, Object key, ViewData viewData, - NativeEvent event, ValueUpdater<String> valueUpdater) { + private void editEvent(Context context, Element parent, String value, + ViewData viewData, NativeEvent event, ValueUpdater<String> valueUpdater) { String type = event.getType(); boolean keyUp = "keyup".equals(type); boolean keyDown = "keydown".equals(type); @@ -291,7 +296,7 @@ int keyCode = event.getKeyCode(); if (keyUp && keyCode == KeyCodes.KEY_ENTER) { // Commit the change. - commit(parent, viewData, valueUpdater); + commit(context, parent, viewData, valueUpdater); } else if (keyUp && keyCode == KeyCodes.KEY_ESCAPE) { // Cancel edit mode. String originalText = viewData.getOriginal(); @@ -299,9 +304,9 @@ viewData.setText(originalText); viewData.setEditing(false); } else { - setViewData(key, null); + setViewData(context.getKey(), null); } - cancel(parent, originalText); + cancel(context, parent, value); } else { // Update the text in the view data on each key. updateViewData(parent, viewData, true); @@ -313,7 +318,7 @@ if (Element.is(eventTarget)) { Element target = Element.as(eventTarget); if ("input".equals(target.getTagName().toLowerCase())) { - commit(parent, viewData, valueUpdater); + commit(context, parent, viewData, valueUpdater); } } }
diff --git a/user/src/com/google/gwt/cell/client/IconCellDecorator.java b/user/src/com/google/gwt/cell/client/IconCellDecorator.java index 496ac3c..3e0c7da 100644 --- a/user/src/com/google/gwt/cell/client/IconCellDecorator.java +++ b/user/src/com/google/gwt/cell/client/IconCellDecorator.java
@@ -1,12 +1,12 @@ /* * Copyright 2010 Google Inc. - * + * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the @@ -32,7 +32,7 @@ /** * A {@link Cell} decorator that adds an icon to another {@link Cell}. - * + * * @param <C> the type that this Cell represents */ public class IconCellDecorator<C> implements Cell<C> { @@ -83,7 +83,7 @@ /** * Construct a new {@link IconCellDecorator}. The icon and the content will be * middle aligned by default. - * + * * @param icon the icon to use * @param cell the cell to decorate */ @@ -93,7 +93,7 @@ /** * Construct a new {@link IconCellDecorator}. - * + * * @param icon the icon to use * @param cell the cell to decorate * @param valign the vertical alignment attribute of the contents @@ -122,35 +122,36 @@ return cell.handlesSelection(); } - public boolean isEditing(Element element, C value, Object key) { - return cell.isEditing(element, value, key); + public boolean isEditing(Context context, Element parent, C value) { + return cell.isEditing(context, getCellParent(parent), value); } - public void onBrowserEvent(Element parent, C value, Object key, + public void onBrowserEvent(Context context, Element parent, C value, NativeEvent event, ValueUpdater<C> valueUpdater) { - cell.onBrowserEvent(getCellParent(parent), value, key, event, valueUpdater); + cell.onBrowserEvent(context, getCellParent(parent), value, event, + valueUpdater); } - public void render(C value, Object key, SafeHtmlBuilder sb) { + public void render(Context context, C value, SafeHtmlBuilder sb) { SafeHtmlBuilder cellBuilder = new SafeHtmlBuilder(); - cell.render(value, key, cellBuilder); + cell.render(context, value, cellBuilder); sb.append(template.outerDiv(direction, imageWidth, isIconUsed(value) ? getIconHtml(value) : placeHolderHtml, cellBuilder.toSafeHtml())); } - public boolean resetFocus(Element parent, C value, Object key) { - return cell.resetFocus(getCellParent(parent), value, key); + public boolean resetFocus(Context context, Element parent, C value) { + return cell.resetFocus(context, getCellParent(parent), value); } - public void setValue(Element parent, C value, Object key) { - cell.setValue(getCellParent(parent), value, key); + public void setValue(Context context, Element parent, C value) { + cell.setValue(context, getCellParent(parent), value); } /** * Get the safe HTML string that represents the icon. Override this method to * change the icon based on the value. - * + * * @param value the value being rendered * @return the HTML string that represents the icon */ @@ -162,7 +163,7 @@ * Check if the icon should be used for the value. If the icon should not be * used, a placeholder of the same size will be used instead. The default * implementations returns true. - * + * * @param value the value being rendered * @return true to use the icon, false to use a placeholder */ @@ -172,7 +173,7 @@ /** * Get the HTML representation of an image. Visible for testing. - * + * * @param res the {@link ImageResource} to render as HTML * @param valign the vertical alignment * @param isPlaceholder if true, do not include the background image @@ -203,7 +204,7 @@ /** * Get the parent element of the decorated cell. - * + * * @param parent the parent of this cell * @return the decorated cell's parent */
diff --git a/user/src/com/google/gwt/cell/client/ImageCell.java b/user/src/com/google/gwt/cell/client/ImageCell.java index 25f173d..18ea3c8 100644 --- a/user/src/com/google/gwt/cell/client/ImageCell.java +++ b/user/src/com/google/gwt/cell/client/ImageCell.java
@@ -51,7 +51,7 @@ } @Override - public void render(String value, Object key, SafeHtmlBuilder sb) { + public void render(Context context, String value, SafeHtmlBuilder sb) { if (value != null) { // The template will sanitize the URI. sb.append(template.img(value));
diff --git a/user/src/com/google/gwt/cell/client/ImageLoadingCell.java b/user/src/com/google/gwt/cell/client/ImageLoadingCell.java index 67a3e23..e72e7a4 100644 --- a/user/src/com/google/gwt/cell/client/ImageLoadingCell.java +++ b/user/src/com/google/gwt/cell/client/ImageLoadingCell.java
@@ -179,7 +179,7 @@ } @Override - public void onBrowserEvent(Element parent, String value, Object key, + public void onBrowserEvent(Context context, Element parent, String value, NativeEvent event, ValueUpdater<String> valueUpdater) { // The loading indicator can fire its own load or error event, so we check // that the event actually occurred on the main image. @@ -201,7 +201,7 @@ } @Override - public void render(String value, Object key, SafeHtmlBuilder sb) { + public void render(Context context, String value, SafeHtmlBuilder sb) { // We can't use ViewData because we don't know the caching policy of the // browser. The browser may fetch the image every time we render. if (value != null) {
diff --git a/user/src/com/google/gwt/cell/client/ImageResourceCell.java b/user/src/com/google/gwt/cell/client/ImageResourceCell.java index ce9fb37..c2a0c8c 100644 --- a/user/src/com/google/gwt/cell/client/ImageResourceCell.java +++ b/user/src/com/google/gwt/cell/client/ImageResourceCell.java
@@ -40,7 +40,7 @@ } @Override - public void render(ImageResource value, Object key, SafeHtmlBuilder sb) { + public void render(Context context, ImageResource value, SafeHtmlBuilder sb) { if (value != null) { SafeHtml html = SafeHtmlUtils.fromTrustedString(AbstractImagePrototype.create( value).getHTML());
diff --git a/user/src/com/google/gwt/cell/client/NumberCell.java b/user/src/com/google/gwt/cell/client/NumberCell.java index 14b301b..cdf0201 100644 --- a/user/src/com/google/gwt/cell/client/NumberCell.java +++ b/user/src/com/google/gwt/cell/client/NumberCell.java
@@ -84,7 +84,7 @@ } @Override - public void render(Number value, Object key, SafeHtmlBuilder sb) { + public void render(Context context, Number value, SafeHtmlBuilder sb) { if (value != null) { sb.append(renderer.render(format.format(value))); }
diff --git a/user/src/com/google/gwt/cell/client/SafeHtmlCell.java b/user/src/com/google/gwt/cell/client/SafeHtmlCell.java index 69f46ed..bb4109b 100644 --- a/user/src/com/google/gwt/cell/client/SafeHtmlCell.java +++ b/user/src/com/google/gwt/cell/client/SafeHtmlCell.java
@@ -30,7 +30,7 @@ } @Override - public void render(SafeHtml value, Object key, SafeHtmlBuilder sb) { + public void render(Context context, SafeHtml value, SafeHtmlBuilder sb) { if (value != null) { sb.append(value); }
diff --git a/user/src/com/google/gwt/cell/client/SelectionCell.java b/user/src/com/google/gwt/cell/client/SelectionCell.java index 79c9b76..1695d19 100644 --- a/user/src/com/google/gwt/cell/client/SelectionCell.java +++ b/user/src/com/google/gwt/cell/client/SelectionCell.java
@@ -64,11 +64,12 @@ } @Override - public void onBrowserEvent(Element parent, String value, Object key, + public void onBrowserEvent(Context context, Element parent, String value, NativeEvent event, ValueUpdater<String> valueUpdater) { - super.onBrowserEvent(parent, value, key, event, valueUpdater); + super.onBrowserEvent(context, parent, value, event, valueUpdater); String type = event.getType(); if ("change".equals(type)) { + Object key = context.getKey(); SelectElement select = parent.getFirstChild().cast(); String newValue = options.get(select.getSelectedIndex()); setViewData(key, newValue); @@ -80,8 +81,9 @@ } @Override - public void render(String value, Object key, SafeHtmlBuilder sb) { + public void render(Context context, String value, SafeHtmlBuilder sb) { // Get the view data. + Object key = context.getKey(); String viewData = getViewData(key); if (viewData != null && viewData.equals(value)) { clearViewData(key);
diff --git a/user/src/com/google/gwt/cell/client/TextCell.java b/user/src/com/google/gwt/cell/client/TextCell.java index 48db9eb..2df83ec 100644 --- a/user/src/com/google/gwt/cell/client/TextCell.java +++ b/user/src/com/google/gwt/cell/client/TextCell.java
@@ -44,7 +44,7 @@ } @Override - public void render(SafeHtml value, Object key, SafeHtmlBuilder sb) { + public void render(Context context, SafeHtml value, SafeHtmlBuilder sb) { if (value != null) { sb.append(value); }
diff --git a/user/src/com/google/gwt/cell/client/TextInputCell.java b/user/src/com/google/gwt/cell/client/TextInputCell.java index be1f7d5..e90d295 100644 --- a/user/src/com/google/gwt/cell/client/TextInputCell.java +++ b/user/src/com/google/gwt/cell/client/TextInputCell.java
@@ -156,9 +156,9 @@ } @Override - public void onBrowserEvent(Element parent, String value, Object key, + public void onBrowserEvent(Context context, Element parent, String value, NativeEvent event, ValueUpdater<String> valueUpdater) { - super.onBrowserEvent(parent, value, key, event, valueUpdater); + super.onBrowserEvent(context, parent, value, event, valueUpdater); // Ignore events that don't target the input. InputElement input = getInputElement(parent); @@ -168,6 +168,7 @@ } String eventType = event.getType(); + Object key = context.getKey(); if ("change".equals(eventType)) { finishEditing(parent, value, key, valueUpdater); } else if ("keyup".equals(eventType)) { @@ -182,8 +183,9 @@ } @Override - public void render(String value, Object key, SafeHtmlBuilder sb) { + public void render(Context context, String value, SafeHtmlBuilder sb) { // Get the view data. + Object key = context.getKey(); ViewData viewData = getViewData(key); if (viewData != null && viewData.getCurrentValue().equals(value)) { clearViewData(key);
diff --git a/user/src/com/google/gwt/user/cellview/client/CellBrowser.java b/user/src/com/google/gwt/user/cellview/client/CellBrowser.java index 1776e45..d92b913 100644 --- a/user/src/com/google/gwt/user/cellview/client/CellBrowser.java +++ b/user/src/com/google/gwt/user/cellview/client/CellBrowser.java
@@ -17,6 +17,7 @@ import com.google.gwt.animation.client.Animation; import com.google.gwt.cell.client.Cell; +import com.google.gwt.cell.client.Cell.Context; import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.Document; import com.google.gwt.dom.client.Element; @@ -300,7 +301,8 @@ } SafeHtmlBuilder cellBuilder = new SafeHtmlBuilder(); - cell.render(value, getValueKey(value), cellBuilder); + Context context = new Context(i, 0, getValueKey(value)); + cell.render(context, value, cellBuilder); // Figure out which image to use. SafeHtml image;
diff --git a/user/src/com/google/gwt/user/cellview/client/CellList.java b/user/src/com/google/gwt/user/cellview/client/CellList.java index 9034ae3..2c557d5 100644 --- a/user/src/com/google/gwt/user/cellview/client/CellList.java +++ b/user/src/com/google/gwt/user/cellview/client/CellList.java
@@ -16,6 +16,7 @@ package com.google.gwt.user.cellview.client; import com.google.gwt.cell.client.Cell; +import com.google.gwt.cell.client.Cell.Context; import com.google.gwt.cell.client.ValueUpdater; import com.google.gwt.core.client.GWT; import com.google.gwt.core.client.Scheduler; @@ -289,18 +290,19 @@ /** * Fire an event to the cell. - * + * + * @param context the {@link Context} of the cell * @param event the event that was fired * @param parent the parent of the cell * @param value the value of the cell */ - protected void fireEventToCell(Event event, Element parent, T value) { + protected void fireEventToCell(Context context, Event event, Element parent, + T value) { Set<String> consumedEvents = cell.getConsumedEvents(); if (consumedEvents != null && consumedEvents.contains(event.getType())) { - Object key = getValueKey(value); - boolean cellWasEditing = cell.isEditing(parent, value, key); - cell.onBrowserEvent(parent, value, key, event, valueUpdater); - cellIsEditing = cell.isEditing(parent, value, key); + boolean cellWasEditing = cell.isEditing(context, parent, value); + cell.onBrowserEvent(context, parent, value, event, valueUpdater); + cellIsEditing = cell.isEditing(context, parent, value); if (cellWasEditing && !cellIsEditing) { CellBasedWidgetImpl.get().resetFocus(new Scheduler.ScheduledCommand() { public void execute() { @@ -393,8 +395,9 @@ || KeyboardSelectionPolicy.BOUND_TO_SELECTION == getKeyboardSelectionPolicy(); Element cellParent = getCellParent(cellTarget); T value = getVisibleItem(indexOnPage); + Context context = new Context(idx, 0, getValueKey(value)); CellPreviewEvent<T> previewEvent = CellPreviewEvent.fire(this, event, - this, indexOnPage, value, cellIsEditing, isSelectionHandled); + this, context, value, cellIsEditing, isSelectionHandled); if (isClick && !cellIsEditing && !isSelectionHandled) { doSelection(event, value, indexOnPage); } @@ -412,7 +415,7 @@ // Fire the event to the cell if the list has not been refreshed. if (!previewEvent.isCanceled()) { - fireEventToCell(event, cellParent, value); + fireEventToCell(context, event, cellParent, value); } } } @@ -448,7 +451,8 @@ } SafeHtmlBuilder cellBuilder = new SafeHtmlBuilder(); - cell.render(value, getValueKey(value), cellBuilder); + Context context = new Context(i, 0, getValueKey(value)); + cell.render(context, value, cellBuilder); if (i == keyboardSelectedRow) { // This is the focused item. @@ -477,8 +481,8 @@ Element rowElem = getKeyboardSelectedElement(); Element cellParent = getCellParent(rowElem); T value = getVisibleItem(row); - Object key = getValueKey(value); - return cell.resetFocus(cellParent, value, key); + Context context = new Context(row + getPageStart(), 0, getValueKey(value)); + return cell.resetFocus(context, cellParent, value); } return false; }
diff --git a/user/src/com/google/gwt/user/cellview/client/CellTable.java b/user/src/com/google/gwt/user/cellview/client/CellTable.java index 31517bd..0c5e6a6 100644 --- a/user/src/com/google/gwt/user/cellview/client/CellTable.java +++ b/user/src/com/google/gwt/user/cellview/client/CellTable.java
@@ -16,18 +16,19 @@ package com.google.gwt.user.cellview.client; import com.google.gwt.cell.client.Cell; +import com.google.gwt.cell.client.Cell.Context; import com.google.gwt.core.client.GWT; import com.google.gwt.core.client.Scheduler; import com.google.gwt.dom.client.Document; import com.google.gwt.dom.client.Element; import com.google.gwt.dom.client.EventTarget; import com.google.gwt.dom.client.NodeList; +import com.google.gwt.dom.client.Style.Display; import com.google.gwt.dom.client.TableCellElement; import com.google.gwt.dom.client.TableColElement; import com.google.gwt.dom.client.TableElement; import com.google.gwt.dom.client.TableRowElement; import com.google.gwt.dom.client.TableSectionElement; -import com.google.gwt.dom.client.Style.Display; import com.google.gwt.event.dom.client.KeyCodes; import com.google.gwt.i18n.client.LocaleInfo; import com.google.gwt.resources.client.ClientBundle; @@ -292,7 +293,6 @@ @Template("<td class=\"{0}\" align=\"{1}\" valign=\"{2}\">{3}</td>") SafeHtml tdBothAlign(String classes, String hAlign, String vAlign, - SafeHtml contents); @Template("<td class=\"{0}\" align=\"{1}\">{2}</td>") @@ -939,12 +939,14 @@ if (section == thead) { Header<?> header = headers.get(col); if (header != null && cellConsumesEventType(header.getCell(), eventType)) { - header.onBrowserEvent(tableCell, event); + Context context = new Context(0, col, header.getKey()); + header.onBrowserEvent(context, tableCell, event); } } else if (section == tfoot) { Header<?> footer = footers.get(col); if (footer != null && cellConsumesEventType(footer.getCell(), eventType)) { - footer.onBrowserEvent(tableCell, event); + Context context = new Context(0, col, footer.getKey()); + footer.onBrowserEvent(context, tableCell, event); } } else if (section == tbody) { // Update the hover state. @@ -964,8 +966,7 @@ style.cellTableHoveredRowCell(), false); hoveringRow = null; } else if (isClick - && ((getPresenter().getKeyboardSelectedRowInView() != row) - || (keyboardSelectedColumn != col))) { + && ((getPresenter().getKeyboardSelectedRowInView() != row) || (keyboardSelectedColumn != col))) { // Move keyboard focus. Since the user clicked, allow focus to go to a // non-interactive column. boolean isFocusable = CellBasedWidgetImpl.get().isFocusable(target); @@ -984,14 +985,17 @@ boolean isSelectionHandled = handlesSelection || KeyboardSelectionPolicy.BOUND_TO_SELECTION == getKeyboardSelectionPolicy(); T value = getVisibleItem(row); + Context context = new Context(row + getPageStart(), col, + getValueKey(value)); CellPreviewEvent<T> previewEvent = CellPreviewEvent.fire(this, event, - this, row, col, value, cellIsEditing, isSelectionHandled); + this, context, value, cellIsEditing, isSelectionHandled); if (isClick && !cellIsEditing && !isSelectionHandled) { doSelection(event, value, row, col); } + // Pass the event to the cell. if (!previewEvent.isCanceled()) { - fireEventToCell(event, eventType, tableCell, value, row, + fireEventToCell(event, eventType, tableCell, value, context, columns.get(col)); } } @@ -1015,7 +1019,6 @@ createHeadersAndFooters(); int keyboardSelectedRow = getKeyboardSelectedRow() + getPageStart(); - ProvidesKey<T> keyProvider = getKeyProvider(); String evenRowStyle = style.cellTableEvenRow(); String oddRowStyle = style.cellTableOddRow(); String cellStyle = style.cellTableCell(); @@ -1075,7 +1078,8 @@ SafeHtmlBuilder cellBuilder = new SafeHtmlBuilder(); if (value != null) { - column.render(value, keyProvider, cellBuilder); + Context context = new Context(i, curColumn, getValueKey(value)); + column.render(context, value, cellBuilder); } // Build the contents. @@ -1132,7 +1136,7 @@ int row = getKeyboardSelectedRow(); if (isRowWithinBounds(row) && columns.size() > 0) { Column<T, ?> column = columns.get(keyboardSelectedColumn); - return resetFocusOnCellImpl(row, column); + return resetFocusOnCellImpl(row, keyboardSelectedColumn, column); } return false; } @@ -1218,7 +1222,8 @@ : style.cellTableFirstColumnHeader()); // Loop through all column headers. - for (int curColumn = 1; curColumn < columnCount; curColumn++) { + int curColumn; + for (curColumn = 1; curColumn < columnCount; curColumn++) { Header<?> header = theHeaders.get(curColumn); if (header != prevHeader) { @@ -1226,7 +1231,9 @@ SafeHtmlBuilder headerBuilder = new SafeHtmlBuilder(); if (prevHeader != null) { hasHeader = true; - prevHeader.render(headerBuilder); + Context context = new Context(0, curColumn - prevColspan, + prevHeader.getKey()); + prevHeader.render(context, headerBuilder); } sb.append(template.th(prevColspan, classesBuilder.toString(), headerBuilder.toSafeHtml())); @@ -1245,7 +1252,9 @@ SafeHtmlBuilder headerBuilder = new SafeHtmlBuilder(); if (prevHeader != null) { hasHeader = true; - prevHeader.render(headerBuilder); + Context context = new Context(0, curColumn - prevColspan, + prevHeader.getKey()); + prevHeader.render(context, headerBuilder); } // The first and last columns could be the same column. @@ -1348,17 +1357,15 @@ * Fire an event to the Cell within the specified {@link TableCellElement}. */ private <C> void fireEventToCell(Event event, String eventType, - TableCellElement tableCell, T value, int row, Column<T, C> column) { + TableCellElement tableCell, T value, Context context, + Column<T, C> column) { Cell<C> cell = column.getCell(); if (cellConsumesEventType(cell, eventType)) { C cellValue = column.getValue(value); - ProvidesKey<T> providesKey = getKeyProvider(); - Object key = getValueKey(value); Element parentElem = getCellParent(tableCell); - boolean cellWasEditing = cell.isEditing(parentElem, cellValue, key); - column.onBrowserEvent(parentElem, getPageStart() + row, value, event, - providesKey); - cellIsEditing = cell.isEditing(parentElem, cellValue, key); + boolean cellWasEditing = cell.isEditing(context, parentElem, cellValue); + column.onBrowserEvent(context, parentElem, value, event); + cellIsEditing = cell.isEditing(context, parentElem, cellValue); if (cellWasEditing && !cellIsEditing) { CellBasedWidgetImpl.get().resetFocus(new Scheduler.ScheduledCommand() { public void execute() { @@ -1438,13 +1445,14 @@ return consumedEvents != null && consumedEvents.size() > 0; } - private <C> boolean resetFocusOnCellImpl(int row, Column<T, C> column) { + private <C> boolean resetFocusOnCellImpl(int row, int col, Column<T, C> column) { Element parent = getKeyboardSelectedElement(); T value = getVisibleItem(row); Object key = getValueKey(value); C cellValue = column.getValue(value); Cell<C> cell = column.getCell(); - return cell.resetFocus(parent, cellValue, key); + Context context = new Context(row + getPageStart(), col, key); + return cell.resetFocus(context, parent, cellValue); } /** @@ -1505,4 +1513,3 @@ } } } -
diff --git a/user/src/com/google/gwt/user/cellview/client/CellTreeNodeView.java b/user/src/com/google/gwt/user/cellview/client/CellTreeNodeView.java index 5598364..22c0938 100644 --- a/user/src/com/google/gwt/user/cellview/client/CellTreeNodeView.java +++ b/user/src/com/google/gwt/user/cellview/client/CellTreeNodeView.java
@@ -16,6 +16,7 @@ package com.google.gwt.user.cellview.client; import com.google.gwt.cell.client.Cell; +import com.google.gwt.cell.client.Cell.Context; import com.google.gwt.core.client.GWT; import com.google.gwt.core.client.Scheduler; import com.google.gwt.dom.client.AnchorElement; @@ -63,6 +64,7 @@ * * @param <T> the type that this view contains */ +// TODO(jlabanca): Convert this to be the type of the child and create lazily. class CellTreeNodeView<T> extends UIObject { interface Template extends SafeHtmlTemplates { @@ -138,7 +140,8 @@ // Render the child nodes. ProvidesKey<C> keyProvider = nodeInfo.getProvidesKey(); TreeViewModel model = nodeView.tree.getTreeViewModel(); - for (C value : values) { + for (int i = start; i < end; i++) { + C value = values.get(i - start); Object key = keyProvider.getKey(value); boolean isOpen = openNodes.contains(key); @@ -171,7 +174,8 @@ } // Render cell contents SafeHtmlBuilder cellBuilder = new SafeHtmlBuilder(); - cell.render(value, key, cellBuilder); + Context context = new Context(i, 0, key); + cell.render(context, value, cellBuilder); SafeHtml innerDiv = template.innerDiv(paddingDirection, imageWidth, innerClasses.toString(), image, itemValueStyle, @@ -397,7 +401,6 @@ } private final Cell<C> cell; - private final int defaultPageSize; private HandlerManager handlerManger = new HandlerManager(this); private final NodeInfo<C> nodeInfo; @@ -999,14 +1002,15 @@ String eventType = event.getType(); Element cellParent = getCellParent(); Object key = getValueKey(); - boolean cellWasEditing = parentCell.isEditing(cellParent, value, key); + Context context = new Context(getIndex(), 0, key); + boolean cellWasEditing = parentCell.isEditing(context, cellParent, value); // Update selection. boolean isSelectionHandled = parentCell.handlesSelection() || KeyboardSelectionPolicy.BOUND_TO_SELECTION == tree.getKeyboardSelectionPolicy(); HasData<T> display = (HasData<T>) parentNode.listView; CellPreviewEvent<T> previewEvent = CellPreviewEvent.fire(display, event, - display, getIndex(), value, cellWasEditing, isSelectionHandled); + display, context, value, cellWasEditing, isSelectionHandled); // Forward the event to the cell. if (previewEvent.isCanceled() @@ -1015,9 +1019,9 @@ } Set<String> consumedEvents = parentCell.getConsumedEvents(); if (consumedEvents != null && consumedEvents.contains(eventType)) { - parentCell.onBrowserEvent(cellParent, value, key, event, + parentCell.onBrowserEvent(context, cellParent, value, event, parentNodeInfo.getValueUpdater()); - tree.cellIsEditing = parentCell.isEditing(cellParent, value, key); + tree.cellIsEditing = parentCell.isEditing(context, cellParent, value); if (cellWasEditing && !tree.cellIsEditing) { CellBasedWidgetImpl.get().resetFocus(new Scheduler.ScheduledCommand() { public void execute() { @@ -1198,13 +1202,14 @@ /** * Reset focus on this node. - * + * * @return true of the cell takes focus, false if not */ boolean resetFocusOnCell() { if (parentNodeInfo != null) { + Context context = new Context(getIndex(), 0, getValueKey()); Cell<T> cell = parentNodeInfo.getCell(); - return cell.resetFocus(getCellParent(), value, getValueKey()); + return cell.resetFocus(context, getCellParent(), value); } return false; }
diff --git a/user/src/com/google/gwt/user/cellview/client/Column.java b/user/src/com/google/gwt/user/cellview/client/Column.java index 0ad4215..f74f5da 100644 --- a/user/src/com/google/gwt/user/cellview/client/Column.java +++ b/user/src/com/google/gwt/user/cellview/client/Column.java
@@ -16,6 +16,7 @@ package com.google.gwt.user.cellview.client; import com.google.gwt.cell.client.Cell; +import com.google.gwt.cell.client.Cell.Context; import com.google.gwt.cell.client.FieldUpdater; import com.google.gwt.cell.client.HasCell; import com.google.gwt.cell.client.ValueUpdater; @@ -23,7 +24,6 @@ import com.google.gwt.dom.client.NativeEvent; import com.google.gwt.safehtml.shared.SafeHtmlBuilder; import com.google.gwt.user.client.ui.HasAlignment; -import com.google.gwt.view.client.ProvidesKey; /** * A representation of a column in a table. The column may maintain view data @@ -93,35 +93,32 @@ /** * Handle a browser event that took place within the column. * + * @param context the cell context * @param elem the parent Element - * @param index the current row index of the object * @param object the base object to be updated * @param event the native browser event - * @param keyProvider an instance of ProvidesKey<T>, or null if the record - * object should act as its own key. */ - public void onBrowserEvent(Element elem, final int index, final T object, - NativeEvent event, ProvidesKey<T> keyProvider) { - Object key = getKey(object, keyProvider); + public void onBrowserEvent(Context context, Element elem, final T object, + NativeEvent event) { + final int index = context.getIndex(); ValueUpdater<C> valueUpdater = (fieldUpdater == null) ? null : new ValueUpdater<C>() { public void update(C value) { fieldUpdater.update(index, object, value); } }; - cell.onBrowserEvent(elem, getValue(object), key, event, valueUpdater); + cell.onBrowserEvent(context, elem, getValue(object), event, valueUpdater); } /** * Render the object into the cell. * + * @param context the cell context * @param object the object to render - * @param keyProvider the {@link ProvidesKey} for the object * @param sb the buffer to render into */ - public void render(T object, ProvidesKey<T> keyProvider, SafeHtmlBuilder sb) { - Object key = getKey(object, keyProvider); - cell.render(getValue(object), key, sb); + public void render(Context context, T object, SafeHtmlBuilder sb) { + cell.render(context, getValue(object), sb); } /** @@ -156,16 +153,4 @@ public void setVerticalAlignment(VerticalAlignmentConstant align) { this.vAlign = align; } - - /** - * Get the view key for the object given the {@link ProvidesKey}. If the - * {@link ProvidesKey} is null, the object is used as the key. - * - * @param object the row object - * @param keyProvider the {@link ProvidesKey} - * @return the key for the object - */ - private Object getKey(T object, ProvidesKey<T> keyProvider) { - return keyProvider == null ? object : keyProvider.getKey(object); - } }
diff --git a/user/src/com/google/gwt/user/cellview/client/Header.java b/user/src/com/google/gwt/user/cellview/client/Header.java index 3739fc3..c38ad35 100644 --- a/user/src/com/google/gwt/user/cellview/client/Header.java +++ b/user/src/com/google/gwt/user/cellview/client/Header.java
@@ -1,12 +1,12 @@ /* * Copyright 2010 Google Inc. - * + * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the @@ -16,6 +16,7 @@ package com.google.gwt.user.cellview.client; import com.google.gwt.cell.client.Cell; +import com.google.gwt.cell.client.Cell.Context; import com.google.gwt.cell.client.ValueUpdater; import com.google.gwt.dom.client.Element; import com.google.gwt.dom.client.NativeEvent; @@ -23,7 +24,7 @@ /** * A table column header or footer. - * + * * @param <H> the {@link Cell} type */ public abstract class Header<H> { @@ -43,7 +44,7 @@ /** * Return the {@link Cell} responsible for rendering items in the header. - * + * * @return the header Cell */ public Cell<H> getCell() { @@ -51,30 +52,41 @@ } /** + * Get the key for the header value. By default, the key is the same as the + * value. Override this method to return a custom key. + * + * @return the key associated with the value + */ + public Object getKey() { + return getValue(); + } + + /** * Return the header value. - * + * * @return the header value */ public abstract H getValue(); /** * Handle a browser event that took place within the header. - * + * + * @param context the context of the header * @param elem the parent Element * @param event the native browser event */ - public void onBrowserEvent(Element elem, NativeEvent event) { - H value = getValue(); - cell.onBrowserEvent(elem, value, getKey(), event, updater); + public void onBrowserEvent(Context context, Element elem, NativeEvent event) { + cell.onBrowserEvent(context, elem, getValue(), event, updater); } /** * Render the header. * + * @param context the context of the header * @param sb a {@link SafeHtmlBuilder} to render into */ - public void render(SafeHtmlBuilder sb) { - cell.render(getValue(), getKey(), sb); + public void render(Context context, SafeHtmlBuilder sb) { + cell.render(context, getValue(), sb); } /** @@ -85,14 +97,4 @@ public void setUpdater(ValueUpdater<H> updater) { this.updater = updater; } - - /** - * Get the key for the header value. By default, the key is the same as the - * value. Override this method to return a custom key. - * - * @return the key associated with the value - */ - protected Object getKey() { - return getValue(); - } }
diff --git a/user/src/com/google/gwt/user/client/ui/ValuePicker.java b/user/src/com/google/gwt/user/client/ui/ValuePicker.java index 7ec9259..45ced21 100644 --- a/user/src/com/google/gwt/user/client/ui/ValuePicker.java +++ b/user/src/com/google/gwt/user/client/ui/ValuePicker.java
@@ -47,7 +47,7 @@ } @Override - public void render(T value, Object viewData, SafeHtmlBuilder sb) { + public void render(Context context, T value, SafeHtmlBuilder sb) { sb.appendEscaped(renderer.render(value)); } }
diff --git a/user/src/com/google/gwt/view/client/CellPreviewEvent.java b/user/src/com/google/gwt/view/client/CellPreviewEvent.java index d2fcc06..aa486a2 100644 --- a/user/src/com/google/gwt/view/client/CellPreviewEvent.java +++ b/user/src/com/google/gwt/view/client/CellPreviewEvent.java
@@ -15,6 +15,7 @@ */ package com.google.gwt.view.client; +import com.google.gwt.cell.client.Cell.Context; import com.google.gwt.dom.client.NativeEvent; import com.google.gwt.event.shared.EventHandler; import com.google.gwt.event.shared.GwtEvent; @@ -55,39 +56,17 @@ * @param source the source of the handlers * @param nativeEvent the event to preview * @param display the {@link HasData} source of the event - * @param index the index of the value where the event occurred + * @param context the Cell {@link Context} * @param value the value where the event occurred * @param isCellEditing indicates whether or not the cell is being edited * @param isSelectionHandled indicates whether or not selection is handled * @return the {@link CellPreviewEvent} that was fired */ public static <T> CellPreviewEvent<T> fire(HasCellPreviewHandlers<T> source, - NativeEvent nativeEvent, HasData<T> display, int index, T value, + NativeEvent nativeEvent, HasData<T> display, Context context, T value, boolean isCellEditing, boolean isSelectionHandled) { - return fire(source, nativeEvent, display, index, 0, value, isCellEditing, - isSelectionHandled); - } - - /** - * Fires a cell preview event on all registered handlers in the handler - * manager. If no such handlers exist, this implementation will do nothing. - * - * @param <T> the old value type - * @param source the source of the handlers - * @param nativeEvent the event to preview - * @param display the {@link HasData} source of the event - * @param index the index of the value where the event occurred - * @param column the column index - * @param value the value where the event occurred - * @param isCellEditing indicates whether or not the cell is being edited - * @param isSelectionHandled indicates whether or not selection is handled - * @return the {@link CellPreviewEvent} that was fired - */ - public static <T> CellPreviewEvent<T> fire(HasCellPreviewHandlers<T> source, - NativeEvent nativeEvent, HasData<T> display, int index, int column, - T value, boolean isCellEditing, boolean isSelectionHandled) { CellPreviewEvent<T> event = new CellPreviewEvent<T>(nativeEvent, display, - index, column, value, isCellEditing, isSelectionHandled); + context, value, isCellEditing, isSelectionHandled); if (TYPE != null) { source.fireEvent(event); } @@ -106,9 +85,8 @@ return TYPE; } - private final int column; + private final Context context; private final HasData<T> display; - private final int index; private boolean isCanceled = false; private final boolean isCellEditing; private final boolean isSelectionHandled; @@ -120,18 +98,17 @@ * * @param nativeEvent the event to preview * @param display the {@link HasData} source of the event - * @param index the index of the value where the event occurred + * @param context the Cell {@link Context} * @param value the value where the event occurred * @param isCellEditing indicates whether or not the cell is being edited * @param isSelectionHandled indicates whether or not selection is handled */ protected CellPreviewEvent(NativeEvent nativeEvent, HasData<T> display, - int index, int column, T value, boolean isCellEditing, + Context context, T value, boolean isCellEditing, boolean isSelectionHandled) { this.nativeEvent = nativeEvent; this.display = display; - this.index = index; - this.column = column; + this.context = context; this.value = value; this.isCellEditing = isCellEditing; this.isSelectionHandled = isSelectionHandled; @@ -152,7 +129,16 @@ * @return the column index, or 0 if there is only one column */ public int getColumn() { - return column; + return context.getColumn(); + } + + /** + * Get the cell {@link Context}. + * + * @return the cell {@link Context} + */ + public Context getContext() { + return context; } /** @@ -166,7 +152,7 @@ * Get the index of the value where the event occurred. */ public int getIndex() { - return index; + return context.getIndex(); } /**
diff --git a/user/test/com/google/gwt/cell/client/AbstractCellTest.java b/user/test/com/google/gwt/cell/client/AbstractCellTest.java index 1414369..5520e79 100644 --- a/user/test/com/google/gwt/cell/client/AbstractCellTest.java +++ b/user/test/com/google/gwt/cell/client/AbstractCellTest.java
@@ -15,6 +15,7 @@ */ package com.google.gwt.cell.client; +import com.google.gwt.cell.client.Cell.Context; import com.google.gwt.dom.client.Document; import com.google.gwt.dom.client.Element; @@ -27,7 +28,8 @@ Cell<String> cell = createCell(); String value = createCellValue(); Element parent = Document.get().createDivElement(); - cell.setValue(parent, value, null); + Context context = new Context(0, 0, null); + cell.setValue(context, parent, value); assertEquals(getExpectedInnerHtml(), parent.getInnerHTML()); }
diff --git a/user/test/com/google/gwt/cell/client/ActionCellTest.java b/user/test/com/google/gwt/cell/client/ActionCellTest.java index b8cdfa7..474375e 100644 --- a/user/test/com/google/gwt/cell/client/ActionCellTest.java +++ b/user/test/com/google/gwt/cell/client/ActionCellTest.java
@@ -16,6 +16,7 @@ package com.google.gwt.cell.client; import com.google.gwt.cell.client.ActionCell.Delegate; +import com.google.gwt.cell.client.Cell.Context; import com.google.gwt.dom.client.Document; import com.google.gwt.dom.client.Element; import com.google.gwt.dom.client.NativeEvent; @@ -49,7 +50,8 @@ Element parent = Document.get().createDivElement(); NativeEvent event = Document.get().createClickEvent(0, 0, 0, 0, 0, false, false, false, false); - cell.onBrowserEvent(parent, "test", DEFAULT_KEY, event, null); + Context context = new Context(0, 0, DEFAULT_KEY); + cell.onBrowserEvent(context, parent, "test", event, null); delegate.assertLastObject("test"); }
diff --git a/user/test/com/google/gwt/cell/client/CellTestBase.java b/user/test/com/google/gwt/cell/client/CellTestBase.java index cdbee13..733b1e5 100644 --- a/user/test/com/google/gwt/cell/client/CellTestBase.java +++ b/user/test/com/google/gwt/cell/client/CellTestBase.java
@@ -15,6 +15,7 @@ */ package com.google.gwt.cell.client; +import com.google.gwt.cell.client.Cell.Context; import com.google.gwt.dom.client.Document; import com.google.gwt.dom.client.Element; import com.google.gwt.dom.client.NativeEvent; @@ -41,7 +42,9 @@ static class MockCell<T> extends AbstractCell<T> { private final boolean isSelectable; + private Context lastContext; private T lastEventValue; + private Element lastParentElement; private final T updateValue; public MockCell(boolean isSelectable, T updateValue, @@ -55,19 +58,30 @@ assertEquals(expected, lastEventValue); } + public void assertLastParentElement(Element expected) { + assertEquals(expected, lastParentElement); + } + + @Override public boolean dependsOnSelection() { return isSelectable; } + public Context getLastContext() { + return lastContext; + } + @Override public boolean handlesSelection() { return isSelectable; } @Override - public void onBrowserEvent(Element parent, T value, Object key, + public void onBrowserEvent(Context context, Element parent, T value, NativeEvent event, ValueUpdater<T> valueUpdater) { + lastContext = context; + lastParentElement = parent; lastEventValue = value; if (valueUpdater != null) { valueUpdater.update(updateValue); @@ -75,7 +89,8 @@ } @Override - public void render(T value, Object key, SafeHtmlBuilder sb) { + public void render(Context context, T value, SafeHtmlBuilder sb) { + lastContext = context; if (value != null) { sb.appendEscaped(String.valueOf(value)); } @@ -139,7 +154,20 @@ Cell<T> cell = createCell(); T value = createCellValue(); SafeHtmlBuilder sb = new SafeHtmlBuilder(); - cell.render(value, null, sb); + Context context = new Context(0, 0, null); + cell.render(context, value, sb); + assertEquals(getExpectedInnerHtml(), sb.toSafeHtml().asString()); + } + + /** + * Test rendering the cell with a negative index is handled. + */ + public void testRenderNegativeIndex() { + Cell<T> cell = createCell(); + T value = createCellValue(); + SafeHtmlBuilder sb = new SafeHtmlBuilder(); + Context context = new Context(-1, -1, null); + cell.render(context, value, sb); assertEquals(getExpectedInnerHtml(), sb.toSafeHtml().asString()); } @@ -149,7 +177,8 @@ public void testRenderNull() { Cell<T> cell = createCell(); SafeHtmlBuilder sb = new SafeHtmlBuilder(); - cell.render(null, null, sb); + Context context = new Context(0, 0, null); + cell.render(context, null, sb); assertEquals(getExpectedInnerHtmlNull(), sb.toSafeHtml().asString()); } @@ -225,7 +254,8 @@ public void onBrowserEvent(Event event) { try { DOM.setEventListener(parent, null); - createCell().onBrowserEvent(parent, value, DEFAULT_KEY, event, + Context context = new Context(0, 0, DEFAULT_KEY); + createCell().onBrowserEvent(context, parent, value, event, valueUpdater); parent.removeFromParent(); } catch (Exception e) {
diff --git a/user/test/com/google/gwt/cell/client/CompositeCellTest.java b/user/test/com/google/gwt/cell/client/CompositeCellTest.java index a56e6ef..a40461c 100644 --- a/user/test/com/google/gwt/cell/client/CompositeCellTest.java +++ b/user/test/com/google/gwt/cell/client/CompositeCellTest.java
@@ -15,6 +15,7 @@ */ package com.google.gwt.cell.client; +import com.google.gwt.cell.client.Cell.Context; import com.google.gwt.dom.client.Document; import com.google.gwt.dom.client.Element; import com.google.gwt.dom.client.NativeEvent; @@ -109,7 +110,8 @@ // Add an event listener. EventListener listener = new EventListener() { public void onBrowserEvent(Event event) { - cell.onBrowserEvent(parent, "test", DEFAULT_KEY, event, null); + Context context = new Context(3, 4, "key"); + cell.onBrowserEvent(context, parent, "test", event, null); } }; DOM.sinkEvents(parent, Event.ONCLICK); @@ -120,6 +122,11 @@ false, false, false); Element.as(parent.getChild(1)).dispatchEvent(event); innerCell.assertLastEventValue("test-1"); + innerCell.assertLastParentElement(Element.as(parent.getChild(1))); + Context innerContext = innerCell.getLastContext(); + assertEquals("key", innerContext.getKey()); + assertEquals(3, innerContext.getIndex()); + assertEquals(4, innerContext.getColumn()); // Remove the element and event listener. DOM.setEventListener(parent, null); @@ -130,7 +137,8 @@ Cell<String> cell = createCell(); Element parent = Document.get().createDivElement(); parent.setInnerHTML(getExpectedInnerHtml()); - cell.setValue(parent, "test", null); + Context context = new Context( 0, 0, null); + cell.setValue(context, parent, "test"); assertEquals(3, parent.getChildCount()); assertEquals("test-0", Element.as(parent.getChild(0)).getInnerHTML());
diff --git a/user/test/com/google/gwt/cell/client/EditTextCellTest.java b/user/test/com/google/gwt/cell/client/EditTextCellTest.java index 8925a5d..c088c71 100644 --- a/user/test/com/google/gwt/cell/client/EditTextCellTest.java +++ b/user/test/com/google/gwt/cell/client/EditTextCellTest.java
@@ -15,6 +15,7 @@ */ package com.google.gwt.cell.client; +import com.google.gwt.cell.client.Cell.Context; import com.google.gwt.cell.client.EditTextCell.ViewData; import com.google.gwt.dom.client.Document; import com.google.gwt.dom.client.Element; @@ -35,7 +36,8 @@ ViewData viewData = new ViewData("originalValue"); viewData.setText("newValue"); cell.setViewData(DEFAULT_KEY, viewData); - cell.edit(parent, "originalValue", DEFAULT_KEY); + Context context = new Context(0, 0, DEFAULT_KEY); + cell.edit(context, parent, "originalValue"); // Verify the input element. Element child = parent.getFirstChildElement(); @@ -130,7 +132,8 @@ viewData.setEditing(false); cell.setViewData(DEFAULT_KEY, viewData); SafeHtmlBuilder sb = new SafeHtmlBuilder(); - cell.render("originalValue", DEFAULT_KEY, sb); + Context context = new Context(0, 0, DEFAULT_KEY); + cell.render(context, "originalValue", sb); assertEquals("newValue", sb.toSafeHtml().asString()); }
diff --git a/user/test/com/google/gwt/cell/client/EditableCellTestBase.java b/user/test/com/google/gwt/cell/client/EditableCellTestBase.java index 1eddda7..f1c6230 100644 --- a/user/test/com/google/gwt/cell/client/EditableCellTestBase.java +++ b/user/test/com/google/gwt/cell/client/EditableCellTestBase.java
@@ -15,6 +15,7 @@ */ package com.google.gwt.cell.client; +import com.google.gwt.cell.client.Cell.Context; import com.google.gwt.dom.client.Document; import com.google.gwt.dom.client.Element; import com.google.gwt.dom.client.NativeEvent; @@ -39,7 +40,8 @@ T value = createCellValue(); cell.setViewData(DEFAULT_KEY, createCellViewData()); SafeHtmlBuilder sb = new SafeHtmlBuilder(); - cell.render(value, DEFAULT_KEY, sb); + Context context = new Context(0, 0, DEFAULT_KEY); + cell.render(context, value, sb); String expectedInnerHtmlViewData = getExpectedInnerHtmlViewData(); String asString = sb.toSafeHtml().asString(); assertEquals(expectedInnerHtmlViewData, asString); @@ -96,7 +98,8 @@ public void onBrowserEvent(Event event) { try { DOM.setEventListener(parent, null); - cell.onBrowserEvent(parent, value, DEFAULT_KEY, event, valueUpdater); + Context context = new Context(0, 0, DEFAULT_KEY); + cell.onBrowserEvent(context, parent, value, event, valueUpdater); parent.removeFromParent(); } catch (Exception e) { // We are in an event loop, so events may not propagate out to JUnit.
diff --git a/user/test/com/google/gwt/cell/client/IconCellDecoratorTest.java b/user/test/com/google/gwt/cell/client/IconCellDecoratorTest.java index 79c656a..054b751 100644 --- a/user/test/com/google/gwt/cell/client/IconCellDecoratorTest.java +++ b/user/test/com/google/gwt/cell/client/IconCellDecoratorTest.java
@@ -15,6 +15,7 @@ */ package com.google.gwt.cell.client; +import com.google.gwt.cell.client.Cell.Context; import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.Document; import com.google.gwt.dom.client.Element; @@ -62,7 +63,8 @@ // Render the cell. SafeHtmlBuilder sb = new SafeHtmlBuilder(); - cell.render("helloworld", null, sb); + Context context = new Context(0, 0, null); + cell.render(context, "helloworld", sb); // Compare the expected render string. String expected = "<div style=\"position:relative;padding-left:64px;\">"; @@ -88,7 +90,8 @@ parent.setInnerHTML(getExpectedInnerHtml()); assertEquals("helloworld", Element.as(parent.getFirstChildElement().getChild(1)).getInnerHTML()); - cell.setValue(parent, "test", null); + Context context = new Context(0, 0, null); + cell.setValue(context, parent, "test"); assertEquals("test", Element.as(parent.getFirstChildElement().getChild(1)).getInnerHTML()); }
diff --git a/user/test/com/google/gwt/cell/client/ImageLoadingCellTest.java b/user/test/com/google/gwt/cell/client/ImageLoadingCellTest.java index 8d0d606..87d7beb 100644 --- a/user/test/com/google/gwt/cell/client/ImageLoadingCellTest.java +++ b/user/test/com/google/gwt/cell/client/ImageLoadingCellTest.java
@@ -15,6 +15,7 @@ */ package com.google.gwt.cell.client; +import com.google.gwt.cell.client.Cell.Context; import com.google.gwt.dom.client.Document; import com.google.gwt.dom.client.Element; import com.google.gwt.dom.client.ImageElement; @@ -30,7 +31,8 @@ Cell<String> cell = createCell(); String value = createCellValue(); SafeHtmlBuilder sb = new SafeHtmlBuilder(); - cell.render(value, null, sb); + Context context = new Context(0, 0, null); + cell.render(context, value, sb); // Render the html. Element elem = Document.get().createDivElement(); @@ -45,6 +47,26 @@ } @Override + public void testRenderNegativeIndex() { + Cell<String> cell = createCell(); + String value = createCellValue(); + SafeHtmlBuilder sb = new SafeHtmlBuilder(); + Context context = new Context(-1, -1, null); + cell.render(context, value, sb); + + // Render the html. + Element elem = Document.get().createDivElement(); + elem.setInnerHTML(sb.toSafeHtml().asString()); + + // Verify the image. + assertEquals(2, elem.getChildCount()); + Element imgWrapper = elem.getChild(1).cast(); + ImageElement img = imgWrapper.getFirstChildElement().cast(); + assertEquals("img", img.getTagName().toLowerCase()); + assertTrue(img.getSrc().toLowerCase().endsWith("test.png")); + } + + @Override protected Cell<String> createCell() { return new ImageLoadingCell(); }
diff --git a/user/test/com/google/gwt/user/cellview/client/AbstractCellTreeTestBase.java b/user/test/com/google/gwt/user/cellview/client/AbstractCellTreeTestBase.java index 8dbc539..574c596 100644 --- a/user/test/com/google/gwt/user/cellview/client/AbstractCellTreeTestBase.java +++ b/user/test/com/google/gwt/user/cellview/client/AbstractCellTreeTestBase.java
@@ -1,12 +1,12 @@ /* * Copyright 2010 Google Inc. - * + * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the @@ -15,6 +15,7 @@ */ package com.google.gwt.user.cellview.client; +import com.google.gwt.user.cellview.client.AbstractHasDataTestBase.IndexCell; import com.google.gwt.cell.client.Cell; import com.google.gwt.cell.client.TextCell; import com.google.gwt.core.client.Scheduler; @@ -56,8 +57,7 @@ /** * The root data provider. */ - private final ListDataProvider<String> rootDataProvider = - createDataProvider(""); + private final ListDataProvider<String> rootDataProvider = createDataProvider(""); public <T> NodeInfo<?> getNodeInfo(T value) { if (value == ROOT_VALUE) { @@ -93,7 +93,7 @@ /** * Create a data provider that extends the prefix by one letter. - * + * * @param prefix the prefix string * @return a data provider */ @@ -163,7 +163,7 @@ /** * Construct a new {@link AbstractCellTreeTestBase}. - * + * * @param singlePathOnly true if the tree only supports a single open path */ public AbstractCellTreeTestBase(boolean singlePathOnly) { @@ -199,14 +199,16 @@ public void testRenderWithKeyProvider() { // Create a cell that verifies the render args. final List<String> rendered = new ArrayList<String>(); - final Cell<String> cell = new TextCell() { + final IndexCell<String> cell = new IndexCell<String>() { @Override - public void render(String data, Object key, SafeHtmlBuilder sb) { - int call = rendered.size(); + public void render(Context context, String data, SafeHtmlBuilder sb) { + super.render(context, data, sb); + int call = rendered.size(); rendered.add(data); assertTrue("render() called more than thrice", rendered.size() < 4); assertEquals(call + "value", data); + Object key = context.getKey(); assertTrue(key instanceof Integer); assertEquals(call, key); } @@ -241,11 +243,12 @@ public void execute() { assertEquals("Cell#render() should be called exactly thrice", 3, rendered.size()); + cell.assertLastRenderIndex(2); finishTest(); } }); } - + /** * Test that opening a sibling node works. */ @@ -565,7 +568,7 @@ /** * Create an {@link AbstractCellTree} to test. - * + * * @param <T> the data type of the root value * @param model the {@link TreeViewModel} that backs the tree * @param rootValue the root value @@ -588,7 +591,7 @@ /** * Test the state of a {@link TreeNode}. - * + * * @param node the node to test * @param parent the expected parent * @param index the expected index within the parent
diff --git a/user/test/com/google/gwt/user/cellview/client/AbstractHasDataTestBase.java b/user/test/com/google/gwt/user/cellview/client/AbstractHasDataTestBase.java index e3427bf..d56a3f5 100644 --- a/user/test/com/google/gwt/user/cellview/client/AbstractHasDataTestBase.java +++ b/user/test/com/google/gwt/user/cellview/client/AbstractHasDataTestBase.java
@@ -1,12 +1,12 @@ /* * Copyright 2010 Google Inc. - * + * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the @@ -15,9 +15,16 @@ */ package com.google.gwt.user.cellview.client; +import com.google.gwt.cell.client.AbstractCell; +import com.google.gwt.cell.client.Cell; +import com.google.gwt.cell.client.TextCell; +import com.google.gwt.cell.client.ValueUpdater; +import com.google.gwt.dom.client.Element; +import com.google.gwt.dom.client.NativeEvent; import com.google.gwt.junit.client.GWTTestCase; import com.google.gwt.regexp.shared.MatchResult; import com.google.gwt.regexp.shared.RegExp; +import com.google.gwt.safehtml.shared.SafeHtmlBuilder; import com.google.gwt.user.client.Window; import com.google.gwt.view.client.ListDataProvider; import com.google.gwt.view.client.Range; @@ -30,13 +37,69 @@ */ public abstract class AbstractHasDataTestBase extends GWTTestCase { + /** + * A mock cell that tests the index specified in each method. + * + * @param <C> the cell type + */ + protected static class IndexCell<C> extends AbstractCell<C> { + private int lastBrowserEventIndex = -1; + private int lastEditingIndex = -1; + private int lastRenderIndex = -1; + private int lastResetFocusIndex = -1; + + public IndexCell(String... consumedEvents) { + super(consumedEvents); + } + + public void assertLastBrowserEventIndex(int expected) { + assertEquals(expected, lastBrowserEventIndex); + } + + public void assertLastEditingIndex(int expected) { + assertEquals(expected, lastEditingIndex); + } + + public void assertLastRenderIndex(int expected) { + assertEquals(expected, lastRenderIndex); + } + + public void assertLastResetFocusIndex(int expected) { + assertEquals(expected, lastResetFocusIndex); + } + + @Override + public boolean isEditing(Context context, Element parent, C value) { + this.lastEditingIndex = context.getIndex(); + return false; + } + + @Override + public void onBrowserEvent(Context context, Element parent, C value, + NativeEvent event, ValueUpdater<C> valueUpdater) { + this.lastBrowserEventIndex = context.getIndex(); + } + + @Override + public void render(Context context, C value, SafeHtmlBuilder sb) { + this.lastRenderIndex = context.getIndex(); + sb.appendEscaped("index " + this.lastRenderIndex); + } + + @Override + public boolean resetFocus(Context context, Element parent, C value) { + this.lastResetFocusIndex = context.getIndex(); + return false; + } + } + @Override public String getModuleName() { return "com.google.gwt.user.cellview.CellView"; } public void testGetVisibleItem() { - AbstractHasData<String> display = createAbstractHasData(); + AbstractHasData<String> display = createAbstractHasData(new TextCell()); ListDataProvider<String> provider = new ListDataProvider<String>( createData(0, 13)); provider.addDataDisplay(display); @@ -65,7 +128,7 @@ } public void testGetVisibleItems() { - AbstractHasData<String> display = createAbstractHasData(); + AbstractHasData<String> display = createAbstractHasData(new TextCell()); ListDataProvider<String> provider = new ListDataProvider<String>(); provider.addDataDisplay(display); display.setVisibleRange(10, 3); @@ -82,8 +145,21 @@ assertEquals("test 12", items.get(2)); } + public void testResetFocus() { + IndexCell<String> cell = new IndexCell<String>(); + AbstractHasData<String> display = createAbstractHasData(cell); + display.setRowData(createData(0, 10)); + display.getPresenter().flush(); + + cell.assertLastResetFocusIndex(-1); + display.getPresenter().setKeyboardSelectedRow(5, false, false); + display.resetFocusOnCell(); + cell.assertLastResetFocusIndex(5); + } + public void testSetRowData() { - AbstractHasData<String> display = createAbstractHasData(); + IndexCell<String> cell = new IndexCell<String>(); + AbstractHasData<String> display = createAbstractHasData(cell); // Set exact data. List<String> values = createData(0, 62); @@ -110,6 +186,13 @@ assertTrue(display.isRowCountExact()); assertEquals(values, display.getVisibleItems()); assertEquals(new Range(0, 62), display.getVisibleRange()); + display.getPresenter().flush(); + + // Render one row and verify the index. + display.setRowData(5, createData(100, 1)); + display.getPresenter().flush(); + assertEquals("test 100", display.getVisibleItem(5)); + cell.assertLastRenderIndex(5); } public void testSetTabIndex() { @@ -123,7 +206,7 @@ } } - AbstractHasData<String> display = createAbstractHasData(); + AbstractHasData<String> display = createAbstractHasData(new TextCell()); ListDataProvider<String> provider = new ListDataProvider<String>( createData(0, 10)); provider.addDataDisplay(display); @@ -147,14 +230,16 @@ /** * Create an {@link AbstractHasData} to test. - * + * + * @param cell the cell to use * @return the widget to test */ - protected abstract AbstractHasData<String> createAbstractHasData(); + protected abstract AbstractHasData<String> createAbstractHasData( + Cell<String> cell); /** * Create a list of data for testing. - * + * * @param start the start index * @param length the length * @return a list of data
diff --git a/user/test/com/google/gwt/user/cellview/client/CellListTest.java b/user/test/com/google/gwt/user/cellview/client/CellListTest.java index de16617..cc42e22 100644 --- a/user/test/com/google/gwt/user/cellview/client/CellListTest.java +++ b/user/test/com/google/gwt/user/cellview/client/CellListTest.java
@@ -1,12 +1,12 @@ /* * Copyright 2010 Google Inc. - * + * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the @@ -17,7 +17,11 @@ import com.google.gwt.cell.client.Cell; import com.google.gwt.cell.client.TextCell; +import com.google.gwt.dom.client.Document; +import com.google.gwt.dom.client.NativeEvent; +import com.google.gwt.safehtml.shared.SafeHtml; import com.google.gwt.safehtml.shared.SafeHtmlBuilder; +import com.google.gwt.user.client.ui.RootPanel; import com.google.gwt.view.client.ProvidesKey; import java.util.ArrayList; @@ -29,13 +33,30 @@ public class CellListTest extends AbstractHasDataTestBase { public void testGetRowElement() { - CellList<String> list = createAbstractHasData(); + CellList<String> list = createAbstractHasData(new TextCell()); list.setRowData(0, createData(0, 10)); // Ensure that calling getRowElement() flushes all pending changes. assertNotNull(list.getRowElement(9)); } + public void testCellEvent() { + IndexCell<String> cell = new IndexCell<String>("click"); + CellList<String> list = createAbstractHasData(cell); + RootPanel.get().add(list); + list.setRowData(createData(0, 10)); + list.getPresenter().flush(); + + // Trigger an event at index 5. + NativeEvent event = Document.get().createClickEvent(0, 0, 0, 0, 0, false, + false, false, false); + list.getRowElement(5).dispatchEvent(event); + cell.assertLastBrowserEventIndex(5); + cell.assertLastEditingIndex(5); + + RootPanel.get().remove(list); + } + /** * Test that the correct values are sent to the Cell to be rendered. */ @@ -44,12 +65,13 @@ final List<String> rendered = new ArrayList<String>(); final Cell<String> cell = new TextCell() { @Override - public void render(String data, Object key, SafeHtmlBuilder sb) { + public void render(Context context, SafeHtml data, SafeHtmlBuilder sb) { int call = rendered.size(); - rendered.add(data); + rendered.add(data.asString()); assertTrue("render() called more than ten times", rendered.size() < 11); - assertEquals("test " + call, data); + Object key = context.getKey(); + assertEquals("test " + call, data.asString()); assertTrue(key instanceof Integer); assertEquals(call, key); } @@ -68,7 +90,7 @@ } @Override - protected CellList<String> createAbstractHasData() { - return new CellList<String>(new TextCell()); + protected CellList<String> createAbstractHasData(Cell<String> cell) { + return new CellList<String>(cell); } }
diff --git a/user/test/com/google/gwt/user/cellview/client/CellTableTest.java b/user/test/com/google/gwt/user/cellview/client/CellTableTest.java index d47d9c4..535bcd8 100644 --- a/user/test/com/google/gwt/user/cellview/client/CellTableTest.java +++ b/user/test/com/google/gwt/user/cellview/client/CellTableTest.java
@@ -15,8 +15,11 @@ */ package com.google.gwt.user.cellview.client; +import com.google.gwt.cell.client.Cell; import com.google.gwt.cell.client.TextCell; import com.google.gwt.core.client.GWT; +import com.google.gwt.dom.client.Document; +import com.google.gwt.dom.client.NativeEvent; import com.google.gwt.dom.client.TableCellElement; import com.google.gwt.dom.client.TableElement; import com.google.gwt.dom.client.TableRowElement; @@ -26,6 +29,7 @@ import com.google.gwt.user.cellview.client.CellTable.Style; import com.google.gwt.user.client.ui.HasHorizontalAlignment; import com.google.gwt.user.client.ui.HasVerticalAlignment; +import com.google.gwt.user.client.ui.RootPanel; import java.util.ArrayList; import java.util.List; @@ -64,7 +68,7 @@ } public void testCellAlignment() { - CellTable<String> table = createAbstractHasData(); + CellTable<String> table = createAbstractHasData(new TextCell()); Column<String, String> column = new Column<String, String>(new TextCell()) { @Override public String getValue(String object) { @@ -117,8 +121,25 @@ assertTrue("bottom".equals(vAlign)); } + public void testCellEvent() { + IndexCell<String> cell = new IndexCell<String>("click"); + CellTable<String> table = createAbstractHasData(cell); + RootPanel.get().add(table); + table.setRowData(createData(0, 10)); + table.getPresenter().flush(); + + // Trigger an event at index 5. + NativeEvent event = Document.get().createClickEvent(0, 0, 0, 0, 0, false, + false, false, false); + table.getRowElement(5).getCells().getItem(0).dispatchEvent(event); + cell.assertLastBrowserEventIndex(5); + cell.assertLastEditingIndex(5); + + RootPanel.get().remove(table); + } + public void testGetRowElement() { - CellTable<String> table = createAbstractHasData(); + CellTable<String> table = createAbstractHasData(new TextCell()); table.setRowData(0, createData(0, 10)); // Ensure that calling getRowElement() flushes all pending changes. @@ -238,9 +259,9 @@ } @Override - protected CellTable<String> createAbstractHasData() { + protected CellTable<String> createAbstractHasData(Cell<String> cell) { CellTable<String> table = new CellTable<String>(); - table.addColumn(new Column<String, String>(new TextCell()) { + table.addColumn(new Column<String, String>(cell) { @Override public String getValue(String object) { return object;
diff --git a/user/test/com/google/gwt/user/cellview/client/ColumnTest.java b/user/test/com/google/gwt/user/cellview/client/ColumnTest.java index c96a0a7..6190c90 100644 --- a/user/test/com/google/gwt/user/cellview/client/ColumnTest.java +++ b/user/test/com/google/gwt/user/cellview/client/ColumnTest.java
@@ -19,6 +19,7 @@ import com.google.gwt.cell.client.FieldUpdater; import com.google.gwt.cell.client.TextCell; import com.google.gwt.cell.client.ValueUpdater; +import com.google.gwt.cell.client.Cell.Context; import com.google.gwt.dom.client.Document; import com.google.gwt.dom.client.Element; import com.google.gwt.dom.client.NativeEvent; @@ -38,12 +39,12 @@ AbstractEditableCell<String, String> { @Override - public boolean isEditing(Element parent, String value, Object key) { + public boolean isEditing(Context context, Element parent, String value) { return false; } @Override - public void render(String value, Object key, SafeHtmlBuilder sb) { + public void render(Context context, String value, SafeHtmlBuilder sb) { sb.appendEscaped(value); } } @@ -101,7 +102,7 @@ false, false, false, false); final MockEditableCell cell = new MockEditableCell() { @Override - public void onBrowserEvent(Element parent, String value, Object key, + public void onBrowserEvent(Context context, Element parent, String value, NativeEvent event, final ValueUpdater<String> valueUpdater) { setViewData("test", "newViewData"); new Timer() { @@ -126,7 +127,8 @@ // Fire the event to the cell. delayTestFinish(5000); cell.setViewData("test", "oldViewData"); - column.onBrowserEvent(theElem, 3, "test", theEvent, null); + Context context = new Context(3, 0, null); + column.onBrowserEvent(context, theElem, "test", theEvent); } public void testGetCell() { @@ -141,7 +143,7 @@ false, false, false, false); final MockEditableCell cell = new MockEditableCell() { @Override - public void onBrowserEvent(Element parent, String value, Object key, + public void onBrowserEvent(Context context, Element parent, String value, NativeEvent event, ValueUpdater<String> valueUpdater) { assertEquals(theElem, parent); assertEquals("test", value); @@ -164,7 +166,8 @@ column.setFieldUpdater(fieldUpdater); cell.setViewData("test", "oldViewData"); - column.onBrowserEvent(theElem, 3, "test", theEvent, null); + Context context = new Context(3, 0, null); + column.onBrowserEvent(context, theElem, "test", theEvent); fieldUpdater.assertUpdateCalled(true); fieldUpdater.assertIndex(3); @@ -178,7 +181,7 @@ false, false, false, false); final MockEditableCell cell = new MockEditableCell() { @Override - public void onBrowserEvent(Element parent, String value, Object key, + public void onBrowserEvent(Context context, Element parent, String value, NativeEvent event, ValueUpdater<String> valueUpdater) { assertEquals(theElem, parent); assertEquals("test", value); @@ -191,7 +194,8 @@ Column<String, String> column = new IdentityColumn<String>(cell); cell.setViewData("test", "oldViewData"); - column.onBrowserEvent(theElem, 3, "test", theEvent, null); + Context context = new Context(3, 0, null); + column.onBrowserEvent(context, theElem, "test", theEvent); } public void testRender() { @@ -199,7 +203,8 @@ Column<String, String> column = new IdentityColumn<String>(cell); SafeHtmlBuilder sb = new SafeHtmlBuilder(); - column.render("test", null, sb); + Context context = new Context(0, 0, null); + column.render(context, "test", sb); assertEquals("test", sb.toSafeHtml().asString()); } }
diff --git a/user/test/com/google/gwt/view/client/DefaultSelectionEventManagerTest.java b/user/test/com/google/gwt/view/client/DefaultSelectionEventManagerTest.java index 7ab159c..c1cec44 100644 --- a/user/test/com/google/gwt/view/client/DefaultSelectionEventManagerTest.java +++ b/user/test/com/google/gwt/view/client/DefaultSelectionEventManagerTest.java
@@ -15,6 +15,7 @@ */ package com.google.gwt.view.client; +import com.google.gwt.cell.client.Cell.Context; import com.google.gwt.dom.client.Document; import com.google.gwt.dom.client.NativeEvent; import com.google.gwt.junit.client.GWTTestCase; @@ -215,7 +216,7 @@ NativeEvent nativeEvent = Document.get().createClickEvent(0, 0, 0, 0, 0, false, false, false, false); CellPreviewEvent<String> event = new CellPreviewEvent<String>(nativeEvent, - display, 1, 0, "test 1", false, false); + display, new Context(1, 0, null), "test 1", false, false); manager.handleSelectionEvent(event, null, model); assertEquals("test 1", model.getSelectedObject()); @@ -226,16 +227,16 @@ // Ctrl+Select the same value. nativeEvent = Document.get().createClickEvent(0, 0, 0, 0, 0, true, false, false, true); - event = new CellPreviewEvent<String>(nativeEvent, display, 1, 0, "test 1", - false, false); + event = new CellPreviewEvent<String>(nativeEvent, display, new Context(1, + 0, null), "test 1", false, false); manager.handleSelectionEvent(event, null, model); assertNull(model.getSelectedObject()); // Spacebar a different value. nativeEvent = Document.get().createKeyUpEvent(false, false, false, false, 32); - event = new CellPreviewEvent<String>(nativeEvent, display, 2, 0, "test 2", - false, false); + event = new CellPreviewEvent<String>(nativeEvent, display, new Context(2, + 0, null), "test 2", false, false); manager.handleSelectionEvent(event, null, model); assertEquals("test 2", model.getSelectedObject()); @@ -253,13 +254,13 @@ NativeEvent nativeEvent = Document.get().createClickEvent(0, 0, 0, 0, 0, false, false, false, false); CellPreviewEvent<String> event = new CellPreviewEvent<String>(nativeEvent, - display, 1, 0, "test 1", false, false); + display, new Context(1, 0, null), "test 1", false, false); manager.handleSelectionEvent(event, SelectAction.DESELECT, model); assertEquals("test 0", model.getSelectedObject()); // Deselect the same value. - event = new CellPreviewEvent<String>(nativeEvent, display, 0, 0, "test 0", - false, false); + event = new CellPreviewEvent<String>(nativeEvent, display, new Context(0, + 0, null), "test 0", false, false); manager.handleSelectionEvent(event, SelectAction.DESELECT, model); assertNull(model.getSelectedObject()); } @@ -272,7 +273,7 @@ NativeEvent nativeEvent = Document.get().createClickEvent(0, 0, 0, 0, 0, false, false, false, false); CellPreviewEvent<String> event = new CellPreviewEvent<String>(nativeEvent, - display, 3, 0, "test 3", false, false); + display, new Context(3, 0, null), "test 3", false, false); manager.handleSelectionEvent(event, SelectAction.IGNORE, model); assertEquals("test 0", model.getSelectedObject()); } @@ -286,13 +287,13 @@ NativeEvent nativeEvent = Document.get().createClickEvent(0, 0, 0, 0, 0, false, false, false, false); CellPreviewEvent<String> event = new CellPreviewEvent<String>(nativeEvent, - display, 0, 0, "test 0", false, false); + display, new Context(0, 0, null), "test 0", false, false); manager.handleSelectionEvent(event, SelectAction.SELECT, model); assertEquals("test 0", model.getSelectedObject()); // Select a different value. - event = new CellPreviewEvent<String>(nativeEvent, display, 1, 0, "test 1", - false, false); + event = new CellPreviewEvent<String>(nativeEvent, display, new Context(1, + 0, null), "test 1", false, false); manager.handleSelectionEvent(event, SelectAction.SELECT, model); assertEquals("test 1", model.getSelectedObject()); } @@ -306,7 +307,7 @@ NativeEvent nativeEvent = Document.get().createClickEvent(0, 0, 0, 0, 0, false, false, false, false); CellPreviewEvent<String> event = new CellPreviewEvent<String>(nativeEvent, - display, 1, 0, "test 1", false, false); + display, new Context(1, 0, null), "test 1", false, false); manager.handleSelectionEvent(event, SelectAction.TOGGLE, model); assertEquals("test 1", model.getSelectedObject());