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("&nbsp;"));
       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

Reply via email to