Revision: 8116
Author: [email protected]
Date: Wed May 12 12:06:30 2010
Log: Style tweaks to the denied popup on the Expense Details page. Also
removing the 'no data' message in the mobile version.
Review at http://gwt-code-reviews.appspot.com/515801
http://code.google.com/p/google-web-toolkit/source/detail?r=8116
Modified:
/branches/2.1/bikeshed/src/com/google/gwt/bikeshed/list/client/CellList.java
/branches/2.1/bikeshed/src/com/google/gwt/sample/bikeshed/style/client/Styles.java
/branches/2.1/bikeshed/src/com/google/gwt/sample/bikeshed/style/client/common.css
/branches/2.1/bikeshed/src/com/google/gwt/sample/expenses/gwt/client/ExpenseDetails.java
/branches/2.1/bikeshed/src/com/google/gwt/sample/expenses/gwt/client/ExpenseDetails.ui.xml
/branches/2.1/bikeshed/src/com/google/gwt/sample/expenses/gwt/client/ExpenseList.ui.xml
/branches/2.1/bikeshed/src/com/google/gwt/sample/expenses/gwt/client/MobileExpenseList.java
/branches/2.1/bikeshed/src/com/google/gwt/sample/expenses/gwt/client/MobileReportList.java
=======================================
---
/branches/2.1/bikeshed/src/com/google/gwt/bikeshed/list/client/CellList.java
Wed May 12 10:44:13 2010
+++
/branches/2.1/bikeshed/src/com/google/gwt/bikeshed/list/client/CellList.java
Wed May 12 12:06:30 2010
@@ -101,6 +101,7 @@
private final Element childContainer;
private final Element emptyMessageElem;
private final CellListImpl<T> impl;
+ private String emptyListMessage = "";
private final Style style;
private ValueUpdater<T> valueUpdater;
@@ -129,7 +130,6 @@
childContainer = Document.get().createDivElement();
emptyMessageElem = Document.get().createDivElement();
- emptyMessageElem.setInnerHTML("<i>no data</i>");
showOrHide(emptyMessageElem, false);
// TODO: find some way for cells to communicate what they're
interested in.
@@ -199,6 +199,15 @@
public List<T> getDisplayedItems() {
return new ArrayList<T>(impl.getData());
}
+
+ /**
+ * Get the message that is displayed when there is no data.
+ *
+ * @return the empty message
+ */
+ public String getEmptyListMessage() {
+ return emptyListMessage;
+ }
public int getPageSize() {
return impl.getPageSize();
@@ -252,6 +261,20 @@
}
}
}
+
+ /**
+ * Redraw the list using the existing data.
+ */
+ public void redraw() {
+ impl.redraw();
+ }
+
+ /**
+ * Redraw the list, requesting data from the delegate.
+ */
+ public void refresh() {
+ impl.refresh();
+ }
public void setData(int start, int length, List<T> values) {
impl.setData(values, start);
@@ -264,6 +287,16 @@
public void setDelegate(Delegate<T> delegate) {
impl.setDelegate(delegate);
}
+
+ /**
+ * Set the message to display when there is no data.
+ *
+ * @param html the message to display when there are no results
+ */
+ public void setEmptyListMessage(String html) {
+ this.emptyListMessage = html;
+ emptyMessageElem.setInnerHTML(html);
+ }
public void setPager(Pager<T> pager) {
impl.setPager(pager);
=======================================
---
/branches/2.1/bikeshed/src/com/google/gwt/sample/bikeshed/style/client/Styles.java
Wed May 12 10:44:13 2010
+++
/branches/2.1/bikeshed/src/com/google/gwt/sample/bikeshed/style/client/Styles.java
Wed May 12 12:06:30 2010
@@ -87,6 +87,11 @@
String padded();
+ /**
+ * Applied to popup panels.
+ */
+ String popupPanel();
+
/**
* Applied to columns used as spacers.
*/
=======================================
---
/branches/2.1/bikeshed/src/com/google/gwt/sample/bikeshed/style/client/common.css
Wed May 12 10:44:13 2010
+++
/branches/2.1/bikeshed/src/com/google/gwt/sample/bikeshed/style/client/common.css
Wed May 12 12:06:30 2010
@@ -82,10 +82,19 @@
width: 250px;
}
.expenseDetailsErrorPopupMessage {
- padding: 20px;
+ padding-bottom: 20px;
font-size: 130%;
color: red;
}
+
+.popupPanel {
+ border: 8px solid white;
+ border-right: 11px solid white;
+ border-bottom: 11px solid white;
+ -webkit-border-image: url(blueborder.png) 8 11 11 8 round round;
+ -moz-border-image: url(blueborder.png) 8 11 11 8 round round;
+ padding: 10px;
+}
@sprite .blankOption {
gwt-image: 'blankIcon';
@@ -204,23 +213,6 @@
cursor: pointer;
padding: 0px 4px;
}
-
-/* dialog box */
-.gwt-DialogBox {
- border: 8px solid white;
- border-right: 11px solid white;
- border-bottom: 11px solid white;
- -webkit-border-image: url(blueborder.png) 8 11 11 8 round round;
- -moz-border-image: url(blueborder.png) 8 11 11 8 round round;
-}
-
-.gwt-DialogBox .Caption {
- font-weight: light;
- font-size: 12pt;
- text-align: center;
- margin-bottom: 0.5em;
- border-bottom: 1px solid #ccc;
-}
/* splitters */
.gwt-SplitLayoutPanel-HDragger {
=======================================
---
/branches/2.1/bikeshed/src/com/google/gwt/sample/expenses/gwt/client/ExpenseDetails.java
Wed May 12 10:44:13 2010
+++
/branches/2.1/bikeshed/src/com/google/gwt/sample/expenses/gwt/client/ExpenseDetails.java
Wed May 12 12:06:30 2010
@@ -29,6 +29,7 @@
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.NativeEvent;
import com.google.gwt.dom.client.SelectElement;
+import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.event.dom.client.BlurEvent;
import com.google.gwt.event.dom.client.BlurHandler;
import com.google.gwt.event.dom.client.ClickEvent;
@@ -57,8 +58,8 @@
import com.google.gwt.user.client.ui.Anchor;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
-import com.google.gwt.user.client.ui.DialogBox;
import com.google.gwt.user.client.ui.FlexTable;
+import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
@@ -66,6 +67,7 @@
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
+import com.google.gwt.user.client.ui.FlexTable.FlexCellFormatter;
import com.google.gwt.valuestore.shared.DeltaValueStore;
import com.google.gwt.valuestore.shared.Property;
import com.google.gwt.valuestore.shared.Record;
@@ -261,7 +263,7 @@
/**
* The popup used to enter the rejection reason.
*/
- private class DenialPopup extends DialogBox {
+ private class DenialPopup extends PopupPanel {
private Button cancelButton = new Button("Cancel", new ClickHandler() {
public void onClick(ClickEvent event) {
reasonDenied = "";
@@ -285,12 +287,22 @@
setGlassEnabled(true);
setWidget(layout);
+ confirmButton.setWidth("11ex");
+ cancelButton.setWidth("11ex");
+ reasonBox.getElement().getStyle().setMarginTop(8.0, Unit.PX);
+ reasonBox.getElement().getStyle().setMarginBottom(8.0, Unit.PX);
+
+ FlexCellFormatter formatter = layout.getFlexCellFormatter();
layout.setHTML(0, 0, "Reason for denial:");
layout.setWidget(1, 0, reasonBox);
HorizontalPanel p = new HorizontalPanel();
p.add(confirmButton);
+ p.add(new HTML(" "));
p.add(cancelButton);
layout.setWidget(2, 0, p);
+ formatter.setHorizontalAlignment(2, 0,
+ HasHorizontalAlignment.ALIGN_CENTER);
+ setStyleName(Styles.common().popupPanel());
}
public ExpenseRecord getExpenseRecord() {
@@ -697,6 +709,7 @@
*/
private void createErrorPopup() {
errorPopup.setGlassEnabled(true);
+ errorPopup.setStyleName(Styles.common().popupPanel());
errorPopupMessage.addStyleName(Styles.common().expenseDetailsErrorPopupMessage());
Button closeButton = new Button("Dismiss", new ClickHandler() {
=======================================
---
/branches/2.1/bikeshed/src/com/google/gwt/sample/expenses/gwt/client/ExpenseDetails.ui.xml
Tue May 11 09:34:32 2010
+++
/branches/2.1/bikeshed/src/com/google/gwt/sample/expenses/gwt/client/ExpenseDetails.ui.xml
Wed May 12 12:06:30 2010
@@ -50,7 +50,7 @@
}
.label {
- width: 250px;
+ width: 150px;
padding: 3px 0px 3px 9px;
}
@@ -64,12 +64,12 @@
}
.notesColumn {
- width: 400px;
- padding-right: 100px;
+ width: 350px;
+ padding-right: 20px;
}
.notesTextBox {
- width: 350px;
+ width: 300px;
border: 1px solid #d7dde8;
padding: 3px;
}
=======================================
---
/branches/2.1/bikeshed/src/com/google/gwt/sample/expenses/gwt/client/ExpenseList.ui.xml
Mon May 10 15:03:36 2010
+++
/branches/2.1/bikeshed/src/com/google/gwt/sample/expenses/gwt/client/ExpenseList.ui.xml
Wed May 12 12:06:30 2010
@@ -30,10 +30,11 @@
.textBox {
width: 250px;
border: 0px;
- padding: 0px;
- height: 14px;
+ padding: 4px 0px 2px;
+ height: 16px;
font-size: 12px;
outline-width: 0px;
+ background: transparent;
}
.searchButton {
@@ -43,7 +44,7 @@
@sprite .searchCenter {
gwt-image: 'searchCenter';
- padding-top: 4px;
+ padding-top: 1px;
}
@sprite .searchLeft {
=======================================
---
/branches/2.1/bikeshed/src/com/google/gwt/sample/expenses/gwt/client/MobileExpenseList.java
Wed May 12 10:44:13 2010
+++
/branches/2.1/bikeshed/src/com/google/gwt/sample/expenses/gwt/client/MobileExpenseList.java
Wed May 12 12:06:30 2010
@@ -24,11 +24,12 @@
import com.google.gwt.sample.expenses.gwt.request.ExpensesRequestFactory;
import com.google.gwt.sample.expenses.gwt.request.ReportRecord;
import com.google.gwt.user.client.Timer;
-import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.AbstractImagePrototype;
+import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.valuestore.shared.Property;
-import com.google.gwt.view.client.ListViewAdapter;
+import com.google.gwt.view.client.AsyncListViewAdapter;
+import com.google.gwt.view.client.ListView;
import com.google.gwt.view.client.SelectionModel;
import com.google.gwt.view.client.SingleSelectionModel;
import com.google.gwt.view.client.SelectionModel.SelectionChangeEvent;
@@ -109,7 +110,7 @@
private final ExpensesRequestFactory requestFactory;
private final CellList<ExpenseRecord> expenseList;
- private final ListViewAdapter<ExpenseRecord> expenseAdapter;
+ private final AsyncListViewAdapter<ExpenseRecord> expenseAdapter;
private final SingleSelectionModel<ExpenseRecord> expenseSelection;
/**
@@ -140,7 +141,12 @@
final ExpensesRequestFactory requestFactory) {
this.listener = listener;
this.requestFactory = requestFactory;
- expenseAdapter = new ListViewAdapter<ExpenseRecord>();
+ expenseAdapter = new AsyncListViewAdapter<ExpenseRecord>() {
+ @Override
+ protected void onRangeChanged(ListView<ExpenseRecord> view) {
+ requestExpenses();
+ }
+ };
expenseAdapter.setKeyProvider(Expenses.EXPENSE_RECORD_KEY_PROVIDER);
expenseList = new CellList<ExpenseRecord>(new ExpenseCell());
@@ -186,9 +192,9 @@
public void onRefresh(boolean clear) {
if (clear) {
- expenseAdapter.getList().clear();
- }
- requestExpenses();
+ expenseAdapter.updateDataSize(0, true);
+ }
+ expenseList.refresh();
}
public void show(ReportRecord report) {
@@ -210,10 +216,15 @@
*/
private void requestExpenses() {
refreshTimer.cancel();
+ if (requestFactory == null || report == null) {
+ return;
+ }
lastReceiver = new Receiver<List<ExpenseRecord>>() {
public void onSuccess(List<ExpenseRecord> newValues) {
if (this == lastReceiver) {
- expenseAdapter.setList(newValues);
+ int size = newValues.size();
+ expenseAdapter.updateDataSize(size, true);
+ expenseAdapter.updateViewData(0, size, newValues);
// Add the new keys to the known keys.
boolean isInitialData = knownDeniedKeys == null;
=======================================
---
/branches/2.1/bikeshed/src/com/google/gwt/sample/expenses/gwt/client/MobileReportList.java
Wed May 12 10:44:13 2010
+++
/branches/2.1/bikeshed/src/com/google/gwt/sample/expenses/gwt/client/MobileReportList.java
Wed May 12 12:06:30 2010
@@ -23,7 +23,8 @@
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.valuestore.shared.Property;
-import com.google.gwt.view.client.ListViewAdapter;
+import com.google.gwt.view.client.AsyncListViewAdapter;
+import com.google.gwt.view.client.ListView;
import com.google.gwt.view.client.SelectionModel;
import com.google.gwt.view.client.SingleSelectionModel;
import com.google.gwt.view.client.SelectionModel.SelectionChangeEvent;
@@ -35,8 +36,7 @@
/**
* TODO
*/
-public class MobileReportList extends Composite implements
- MobilePage, Receiver<List<ReportRecord>> {
+public class MobileReportList extends Composite implements MobilePage {
/**
* TODO
@@ -44,26 +44,35 @@
public interface Listener {
void onReportSelected(ReportRecord report);
}
+
+ /**
+ * The receiver for the last request.
+ */
+ private Receiver<List<ReportRecord>> lastReceiver;
private final CellList<ReportRecord> reportList;
- private final ListViewAdapter<ReportRecord> reportAdapter;
+ private final AsyncListViewAdapter<ReportRecord> reportAdapter;
private final SingleSelectionModel<ReportRecord> reportSelection;
private final ExpensesRequestFactory requestFactory;
public MobileReportList(final Listener listener,
final ExpensesRequestFactory requestFactory) {
this.requestFactory = requestFactory;
- reportAdapter = new ListViewAdapter<ReportRecord>();
+ reportAdapter = new AsyncListViewAdapter<ReportRecord>() {
+ @Override
+ protected void onRangeChanged(ListView<ReportRecord> view) {
+ requestReports();
+ }
+ };
reportAdapter.setKeyProvider(Expenses.REPORT_RECORD_KEY_PROVIDER);
- reportList = new CellList<ReportRecord>(
- new AbstractCell<ReportRecord>() {
- @Override
- public void render(ReportRecord value, Object viewData,
- StringBuilder sb) {
- sb.append("<div onclick='' class='item'>" + value.getPurpose()
+ "</div>");
- }
- });
+ reportList = new CellList<ReportRecord>(new
AbstractCell<ReportRecord>() {
+ @Override
+ public void render(ReportRecord value, Object viewData,
StringBuilder sb) {
+ sb.append("<div onclick='' class='item'>" + value.getPurpose()
+ + "</div>");
+ }
+ });
reportSelection = new SingleSelectionModel<ReportRecord>();
reportSelection.setKeyProvider(Expenses.REPORT_RECORD_KEY_PROVIDER);
@@ -109,16 +118,9 @@
public void onRefresh(boolean clear) {
if (clear) {
- reportAdapter.getList().clear();
- }
-
- requestFactory.reportRequest().findReportEntriesBySearch(new
Long(-1), "",
- "", ReportRecord.created.getName(), 0, 25).forProperties(
- getReportColumns()).to(this).fire();
- }
-
- public void onSuccess(List<ReportRecord> newValues) {
- reportAdapter.setList(newValues);
+ reportAdapter.updateDataSize(0, true);
+ }
+ reportList.refresh();
}
private Collection<Property<?>> getReportColumns() {
@@ -127,4 +129,20 @@
columns.add(ReportRecord.purpose);
return columns;
}
-}
+
+ private void requestReports() {
+ if (requestFactory == null) {
+ return;
+ }
+ lastReceiver = new Receiver<List<ReportRecord>>() {
+ public void onSuccess(List<ReportRecord> newValues) {
+ int size = newValues.size();
+ reportAdapter.updateDataSize(size, true);
+ reportAdapter.updateViewData(0, size, newValues);
+ }
+ };
+ requestFactory.reportRequest().findReportEntriesBySearch(new
Long(-1), "",
+ "", ReportRecord.created.getName(), 0, 25).forProperties(
+ getReportColumns()).to(lastReceiver).fire();
+ }
+}
--
http://groups.google.com/group/Google-Web-Toolkit-Contributors