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