Revision: 8135
Author: gwt.mirror...@gmail.com
Date: Thu May 13 11:35:58 2010
Log: Added the denied reason to the mobile app. Local search now matches all strings, not just the first.

http://code.google.com/p/google-web-toolkit/source/detail?r=8135

Modified:
/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/ExpenseList.java /branches/2.1/bikeshed/src/com/google/gwt/sample/expenses/gwt/client/Expenses.java /branches/2.1/bikeshed/src/com/google/gwt/sample/expenses/gwt/client/MobileExpenseDetails.java /branches/2.1/bikeshed/src/com/google/gwt/sample/expenses/gwt/client/MobileExpenseDetails.ui.xml /branches/2.1/bikeshed/src/com/google/gwt/sample/expenses/gwt/client/MobileExpenseEntry.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/PhaseAnimation.java

=======================================
--- /branches/2.1/bikeshed/src/com/google/gwt/sample/expenses/gwt/client/ExpenseDetails.java Thu May 13 09:13:58 2010 +++ /branches/2.1/bikeshed/src/com/google/gwt/sample/expenses/gwt/client/ExpenseDetails.java Thu May 13 11:35:58 2010
@@ -89,16 +89,6 @@
 public class ExpenseDetails extends Composite implements
     ExpenseRecordChanged.Handler, ReportRecordChanged.Handler {

-  /**
-   * String indicating approval.
-   */
-  private static final String APPROVED = "Approved";
-
-  /**
-   * String indicating denial.
-   */
-  private static final String DENIED = "Denied";
-
   /**
    * The maximum amount that can be approved for a given report.
    */
@@ -142,6 +132,8 @@
    */
   private class ApprovalCell extends SelectionCell {

+ private final String approvedText = Expenses.Approval.APPROVED.getText();
+    private final String deniedText = Expenses.Approval.DENIED.getText();
     private final String errorIconHtml;
     private final String pendingIconHtml;

@@ -220,8 +212,8 @@
           }
         }
       }
-      boolean isApproved = APPROVED.equals(renderValue);
-      boolean isDenied = DENIED.equals(renderValue);
+      boolean isApproved = approvedText.equals(renderValue);
+      boolean isDenied = deniedText.equals(renderValue);

       // Create the select element.
       sb.append("<select style='background-color:white;");
@@ -237,14 +229,14 @@
       if (isApproved) {
         sb.append(" selected='selected'");
       }
-      sb.append(">").append(APPROVED).append("</option>");
+      sb.append(">").append(approvedText).append("</option>");

       // Denied Option.
       sb.append("<option");
       if (isDenied) {
         sb.append(" selected='selected'");
       }
-      sb.append(">").append(DENIED).append("</option>");
+      sb.append(">").append(deniedText).append("</option>");

       sb.append("</select>");

@@ -778,7 +770,7 @@
     for (ExpenseRecord record : records) {
       double cost = record.getAmount();
       totalCost += cost;
-      if (APPROVED.equals(record.getApproval())) {
+      if (Expenses.Approval.APPROVED.is(record.getApproval())) {
         totalApproved += cost;
       }
     }
@@ -900,7 +892,8 @@
private void updateExpenseRecord(final ExpenseRecord record, String approval,
       String reasonDenied) {
     // Verify that the total is under the cap.
- if (APPROVED.equals(approval) && !APPROVED.equals(record.getApproval())) {
+    if (Expenses.Approval.APPROVED.is(approval)
+        && !Expenses.Approval.APPROVED.is(record.getApproval())) {
       double amount = record.getAmount();
       if (amount + totalApproved > MAX_COST) {
         syncCommit(record,
=======================================
--- /branches/2.1/bikeshed/src/com/google/gwt/sample/expenses/gwt/client/ExpenseList.java Thu May 13 09:13:58 2010 +++ /branches/2.1/bikeshed/src/com/google/gwt/sample/expenses/gwt/client/ExpenseList.java Thu May 13 11:35:58 2010
@@ -326,7 +326,7 @@
         // Highlight as the user types.
         String text = searchBox.getText();
         if (text.length() > 0) {
-          searchRegExp = RegExp.compile("(" + text + ")", "i");
+          searchRegExp = RegExp.compile("(" + text + ")", "ig");
         } else {
           searchRegExp = null;
         }
@@ -413,6 +413,13 @@
     };
     final SortableHeader header = new SortableHeader(text);
     allHeaders.add(header);
+
+    // Sort created by default.
+    if (property == ReportRecord.created) {
+      header.setSorted(true);
+      header.setReverseSort(true);
+      orderBy = property.getName() + " DESC";
+    }

     header.setUpdater(new ValueUpdater<String>() {
       public void update(String value) {
=======================================
--- /branches/2.1/bikeshed/src/com/google/gwt/sample/expenses/gwt/client/Expenses.java Wed May 12 10:44:13 2010 +++ /branches/2.1/bikeshed/src/com/google/gwt/sample/expenses/gwt/client/Expenses.java Thu May 13 11:35:58 2010
@@ -18,12 +18,15 @@
 import com.google.gwt.core.client.EntryPoint;
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.event.shared.HandlerManager;
+import com.google.gwt.resources.client.ImageResource;
+import com.google.gwt.sample.bikeshed.style.client.Styles;
 import com.google.gwt.sample.expenses.gwt.request.EmployeeRecord;
 import com.google.gwt.sample.expenses.gwt.request.ExpenseRecord;
 import com.google.gwt.sample.expenses.gwt.request.ExpenseRecordChanged;
 import com.google.gwt.sample.expenses.gwt.request.ExpensesRequestFactory;
 import com.google.gwt.sample.expenses.gwt.request.ReportRecord;
 import com.google.gwt.sample.expenses.gwt.request.ReportRecordChanged;
+import com.google.gwt.user.client.ui.AbstractImagePrototype;
 import com.google.gwt.user.client.ui.RootLayoutPanel;
 import com.google.gwt.view.client.ProvidesKey;

@@ -31,6 +34,56 @@
  * Entry point for the Expenses app.
  */
 public class Expenses implements EntryPoint {
+
+  /**
+   * An enum describing the approval status.
+   */
+  public static enum Approval {
+ BLANK("", "inherit", Styles.resources().blankIcon()), APPROVED("Approved",
+        "#00aa00", Styles.resources().approvedIcon()), DENIED("Denied",
+        "#ff0000", Styles.resources().deniedIcon());
+
+    /**
+     * Get the {...@link Approval} from the specified string.
+     *
+     * @param approval the approval string
+     * @return the {...@link Approval}
+     */
+    public static Approval from(String approval) {
+      if (APPROVED.is(approval)) {
+        return APPROVED;
+      } else if (DENIED.is(approval)) {
+        return DENIED;
+      }
+      return BLANK;
+    }
+
+    private final String color;
+    private final String iconHtml;
+    private final String text;
+
+    private Approval(String text, String color, ImageResource res) {
+      this.text = text;
+      this.color = color;
+      this.iconHtml = AbstractImagePrototype.create(res).getHTML();
+    }
+
+    public String getColor() {
+      return color;
+    }
+
+    public String getIconHtml() {
+      return iconHtml;
+    }
+
+    public String getText() {
+      return text;
+    }
+
+    public boolean is(String compare) {
+      return text.equals(compare);
+    }
+  }

   /**
    * The key provider for {...@link EmployeeRecord}s.
=======================================
--- /branches/2.1/bikeshed/src/com/google/gwt/sample/expenses/gwt/client/MobileExpenseDetails.java Thu May 13 07:44:39 2010 +++ /branches/2.1/bikeshed/src/com/google/gwt/sample/expenses/gwt/client/MobileExpenseDetails.java Thu May 13 11:35:58 2010
@@ -17,6 +17,7 @@

 import com.google.gwt.core.client.GWT;
 import com.google.gwt.dom.client.Element;
+import com.google.gwt.dom.client.Style.Display;
 import com.google.gwt.event.shared.HandlerManager;
 import com.google.gwt.i18n.client.DateTimeFormat;
 import com.google.gwt.requestfactory.shared.Receiver;
@@ -43,30 +44,35 @@
     void onEditExpense(ExpenseRecord expense);
   }

-  interface Binder extends UiBinder<Widget, MobileExpenseDetails> { }
+  interface Binder extends UiBinder<Widget, MobileExpenseDetails> {
+  }
+
   private static Binder BINDER = GWT.create(Binder.class);

-  @UiField Element nameText, dateText, categoryText, priceText;
+  @UiField
+ Element approvalText, nameText, dateText, categoryText, priceText, reasonRow,
+      reasonText;

   private ExpenseRecord expense;
   private final Listener listener;
   private final ExpensesRequestFactory requestFactory;

-  public MobileExpenseDetails(Listener listener,
-      HandlerManager eventBus, ExpensesRequestFactory requestFactory) {
+  public MobileExpenseDetails(Listener listener, HandlerManager eventBus,
+      ExpensesRequestFactory requestFactory) {
     this.listener = listener;
     this.requestFactory = requestFactory;

- eventBus.addHandler(ExpenseRecordChanged.TYPE, new ExpenseRecordChanged.Handler() {
-      public void onExpenseRecordChanged(ExpenseRecordChanged event) {
-        if (expense != null) {
-          ExpenseRecord newRecord = event.getRecord();
-          if (newRecord.getId().equals(expense.getId())) {
-            show(newRecord);
-          }
-        }
-      }
-    });
+    eventBus.addHandler(ExpenseRecordChanged.TYPE,
+        new ExpenseRecordChanged.Handler() {
+          public void onExpenseRecordChanged(ExpenseRecordChanged event) {
+            if (expense != null) {
+              ExpenseRecord newRecord = event.getRecord();
+              if (newRecord.getId().equals(expense.getId())) {
+                show(newRecord);
+              }
+            }
+          }
+        });

     initWidget(BINDER.createAndBindUi(this));
   }
@@ -116,9 +122,22 @@

     DateTimeFormat formatter = DateTimeFormat.getMediumDateFormat();

+ Expenses.Approval approval = Expenses.Approval.from(expense.getApproval());
     nameText.setInnerText(expense.getDescription());
     dateText.setInnerText(formatter.format(expense.getCreated()));
     categoryText.setInnerText(expense.getCategory());
priceText.setInnerText(ExpensesMobile.formatCurrency(expense.getAmount()));
+    approvalText.setInnerHTML(Expenses.Approval.BLANK.equals(approval)
+        ? "Awaiting Review" : approval.getText());
+    approvalText.getStyle().setColor(approval.getColor());
+
+    reasonText.setInnerText(expense.getReasonDenied());
+    if (Expenses.Approval.DENIED.equals(approval)) {
+      // Show the reason denied.
+      reasonRow.getStyle().clearDisplay();
+    } else {
+      // Hide the reason denied.
+      reasonRow.getStyle().setDisplay(Display.NONE);
+    }
   }
 }
=======================================
--- /branches/2.1/bikeshed/src/com/google/gwt/sample/expenses/gwt/client/MobileExpenseDetails.ui.xml Thu May 13 09:13:58 2010 +++ /branches/2.1/bikeshed/src/com/google/gwt/sample/expenses/gwt/client/MobileExpenseDetails.ui.xml Thu May 13 11:35:58 2010
@@ -10,14 +10,35 @@
     font-weight: bold;
     font-size: 13px;
   }
+
+  .label {
+    padding-right: 5px;
+  }
+
+  .reasonText {
+    font-weight: normal;
+  }
   </ui:style>

   <g:HTMLPanel styleName='{style.form}'>
     <table border='0'>
-      <tr><td>Name:</td><td ui:field='nameText'></td></tr>
-      <tr><td>Date:</td><td ui:field='dateText'></td></tr>
-      <tr><td>Category:</td><td ui:field='categoryText'></td></tr>
-      <tr><td>Price:</td><td>$<span ui:field='priceText'/></td></tr>
+ <tr><td class='{style.label}'>Name:</td><td ui:field='nameText'></td></tr> + <tr><td class='{style.label}'>Date:</td><td ui:field='dateText'></td></tr>
+      <tr>
+ <td class='{style.label}'>Category:</td><td ui:field='categoryText'>
+        </td>
+      </tr>
+      <tr>
+ <td class='{style.label}'>Price:</td><td>$<span ui:field='priceText'/>
+        </td>
+      </tr>
+      <tr>
+ <td class='{style.label}'>Status:</td><td ui:field='approvalText'></td>
+      </tr>
+      <tr ui:field='reasonRow'>
+        <td></td>
+        <td ui:field='reasonText' class='{style.reasonText}'></td>
+      </tr>
     </table>
   </g:HTMLPanel>
 </ui:UiBinder>
=======================================
--- /branches/2.1/bikeshed/src/com/google/gwt/sample/expenses/gwt/client/MobileExpenseEntry.ui.xml Thu May 13 09:13:58 2010 +++ /branches/2.1/bikeshed/src/com/google/gwt/sample/expenses/gwt/client/MobileExpenseEntry.ui.xml Thu May 13 11:35:58 2010
@@ -10,6 +10,11 @@
     font-weight: bold;
     font-size: 13px;
   }
+
+  .middleColumn {
+    padding-left: 0px;
+    padding-right: 0px;
+  }

   .error {
   }
@@ -17,13 +22,22 @@

   <g:HTMLPanel styleName='{style.form}'>
     <table border='0'>
-      <tr><td>Name:</td><td><g:TextBox ui:field='nameText'/></td></tr>
       <tr>
-        <td>Date:</td>
+        <td>Name:</td><td class='{style.middleColumn}'></td>
+        <td><g:TextBox ui:field='nameText'/></td>
+      </tr>
+      <tr>
+        <td>Date:</td><td class='{style.middleColumn}'></td>
<td><g:ListBox ui:field='dateYear'/>/<g:ListBox ui:field='dateMonth'/>/<g:ListBox ui:field='dateDay'/></td>
       </tr>
- <tr><td>Category:</td><td><g:TextBox ui:field='categoryText'/></td></tr>
-      <tr><td>Price:</td><td>$<g:TextBox ui:field='priceText'/></td></tr>
+      <tr>
+        <td>Category:</td><td class='{style.middleColumn}'></td>
+        <td><g:TextBox ui:field='categoryText'/></td>
+      </tr>
+      <tr>
+        <td>Price:</td><td class='{style.middleColumn}'>$</td>
+        <td><g:TextBox ui:field='priceText'/></td>
+      </tr>
     </table>
     <div class='error' ui:field='errorText'/>
   </g:HTMLPanel>
=======================================
--- /branches/2.1/bikeshed/src/com/google/gwt/sample/expenses/gwt/client/MobileExpenseList.java Thu May 13 09:13:58 2010 +++ /branches/2.1/bikeshed/src/com/google/gwt/sample/expenses/gwt/client/MobileExpenseList.java Thu May 13 11:35:58 2010
@@ -17,14 +17,11 @@

 import com.google.gwt.cell.client.AbstractCell;
 import com.google.gwt.requestfactory.shared.Receiver;
-import com.google.gwt.resources.client.ImageResource;
-import com.google.gwt.sample.bikeshed.style.client.Styles;
 import com.google.gwt.sample.expenses.gwt.request.ExpenseRecord;
 import com.google.gwt.sample.expenses.gwt.request.ExpensesRequestFactory;
 import com.google.gwt.sample.expenses.gwt.request.ReportRecord;
 import com.google.gwt.user.cellview.client.CellList;
 import com.google.gwt.user.client.Timer;
-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;
@@ -45,16 +42,6 @@
  */
 public class MobileExpenseList extends Composite implements MobilePage {

-  /**
-   * String indicating approval.
-   */
-  private static final String APPROVED = "Approved";
-
-  /**
-   * String indicating denial.
-   */
-  private static final String DENIED = "Denied";
-
   /**
    * The auto refresh interval in milliseconds.
    */
@@ -75,23 +62,24 @@
   private class ExpenseCell extends AbstractCell<ExpenseRecord> {

     private final String approvedHtml;
+ private final String approvedText = Expenses.Approval.APPROVED.getText();
     private final String blankHtml;
     private final String deniedHtml;
+    private final String deniedText = Expenses.Approval.DENIED.getText();

     public ExpenseCell() {
-      Styles.Resources res = Styles.resources();
-      approvedHtml = getImageHtml(res.approvedIcon());
-      blankHtml = getImageHtml(res.blankIcon());
-      deniedHtml = getImageHtml(res.deniedIcon());
+      approvedHtml = Expenses.Approval.APPROVED.getIconHtml();
+      blankHtml = Expenses.Approval.BLANK.getIconHtml();
+      deniedHtml = Expenses.Approval.DENIED.getIconHtml();
     }

     @Override
public void render(ExpenseRecord value, Object viewData, StringBuilder sb) {
       sb.append("<div onclick='' class='item'>");
       String approval = value.getApproval();
-      if (APPROVED.equals(approval)) {
+      if (approvedText.equals(approval)) {
         sb.append(approvedHtml);
-      } else if (DENIED.equals(approval)) {
+      } else if (deniedText.equals(approval)) {
         sb.append(deniedHtml);
       } else {
         sb.append(blankHtml);
@@ -101,11 +89,6 @@
       sb.append(ExpensesMobile.formatCurrency(value.getAmount()));
       sb.append(")</div>");
     }
-
-    private String getImageHtml(ImageResource res) {
-      AbstractImagePrototype proto = AbstractImagePrototype.create(res);
-      return proto.getHTML();
-    }
   }

   private final ExpensesRequestFactory requestFactory;
@@ -234,7 +217,7 @@
           for (ExpenseRecord value : newValues) {
             Object key = expenseAdapter.getKey(value);
             String approval = value.getApproval();
-            if (DENIED.equals(approval)) {
+            if (Expenses.Approval.DENIED.getText().equals(approval)) {
               if (!isInitialData && !knownDeniedKeys.contains(key)) {
                 (new PhaseAnimation.CellListPhaseAnimation<ExpenseRecord>(
                     expenseList, value, expenseAdapter)).run();
=======================================
--- /branches/2.1/bikeshed/src/com/google/gwt/sample/expenses/gwt/client/PhaseAnimation.java Thu May 13 09:13:58 2010 +++ /branches/2.1/bikeshed/src/com/google/gwt/sample/expenses/gwt/client/PhaseAnimation.java Thu May 13 11:35:58 2010
@@ -33,7 +33,7 @@
   /**
    * The duration of the animation used to phase in new rows.
    */
-  private static final int DEFAULT_DURATION = 2000;
+  private static final int DEFAULT_DURATION = 4000;

   /**
    * A {...@link PhaseAnimation} for {...@link CellList}.

--
http://groups.google.com/group/Google-Web-Toolkit-Contributors

Reply via email to