Re: [gwt-contrib] Making GWT look good...
On 8/6/10 2:44 PM, Chris Ramsdale wrote: Hey GWT(ers), I've heard from many of you that GWT apps simply don't look that good out of the box, and styling the default app would go a long way. We couldn't agree more. As some of you know, GWT 2.1 (with the help of Spring Roo 1.1) will generate a full-fledged scaffolding app that users can then go customize, and build on top of. The current incarnation looks like this: http://gwt-bikeshed.appspot.com/Scaffold.html And while it's a start, it's long from being...well...good looking. I'm working with some UI/UX people back at Google, but in the spirit of openness I wanted to get feedback from the real users -- you. Specifically we're looking for business apps that are a good example of UI and/or UX. Apps that allow you to track tasks, expenses, travel, projects, etc. If you have ideas, simply post a link in a follow-up to this thread. I think Aristo looks nice: http://www.antipode.ca/2009/themes-sproutcore-vs-cappuccino/ And there's a CSS implementation: http://github.com/maccman/aristo -- http://groups.google.com/group/Google-Web-Toolkit-Contributors
[gwt-contrib] Allow to keep size of Widget on DeckPanel (issue732802)
Reviewers: jgw, Ray Ryan, Description: I probably already told about this couple years ago, but DeckPanel, as it is done now, is IMHO not reliable in area of size management. More precise - using DeckPanel in TabPanel. TabPanel uses VerticalPanel to host TabBar and DeckPanel, and it set panel.setCellHeight(deck, 100%). So, when you set size of TabPanel, it never will be same as you requested. If you ask 150px, it will be 150px + height of TabBar. Moreover, at least with IE it behaves as if requested height was ignored. Only reliable approach which I found it setting size of Widget which is added into TabPanel and never touching size of TabPanel itself. I.e. tabPanel.add(button, AAA); button.setSize(5cm, 3cm); As you can see, this code sets Button size _after_ adding to TabPanel, because DeckPanel sets size to 100% and this forces using default size of Button. And we can not set height of TabPanel, see above. Unfortunately this approach does not work in UiBinder. Properties of UIObject are applied before adding. So, I propose this patch in which we check first if there is existing width/height in Widget and set 100% only if no size yet. Please review this at http://gwt-code-reviews.appspot.com/732802/show Affected files: user/src/com/google/gwt/user/client/ui/DeckPanel.java user/test/com/google/gwt/user/client/ui/DeckPanelTest.java ### Eclipse Workspace Patch 1.0 #P trunk Index: user/src/com/google/gwt/user/client/ui/DeckPanel.java === --- user/src/com/google/gwt/user/client/ui/DeckPanel.java (revision 8454) +++ user/src/com/google/gwt/user/client/ui/DeckPanel.java (working copy) @@ -341,7 +341,15 @@ private void finishWidgetInitialization(Element container, Widget w) { UIObject.setVisible(container, false); DOM.setStyleAttribute(container, height, 100%); -w.setSize(100%, 100%); + +// Set 100% by default. +Element element = w.getElement(); +if (DOM.getStyleAttribute(element, width).equals()) { + w.setWidth(100%); +} +if (DOM.getStyleAttribute(element, height).equals()) { + w.setHeight(100%); +} // Issue 2510: Hiding the widget isn't necessary because we hide its // wrapper, but it's in here for legacy support. Index: user/test/com/google/gwt/user/client/ui/DeckPanelTest.java === --- user/test/com/google/gwt/user/client/ui/DeckPanelTest.java (revision 8489) +++ user/test/com/google/gwt/user/client/ui/DeckPanelTest.java (working copy) @@ -16,6 +16,8 @@ package com.google.gwt.user.client.ui; +import com.google.gwt.user.client.DOM; + /** * Test for {...@link DeckPanel}. */ @@ -99,6 +101,46 @@ // Verify content.onLoad was actually called assertEquals(attached, content.getText()); } + + /** + * Test that style width/height is set to 100% by default. + */ + public void testWidgetDefaultSizeOnAdd() { +DeckPanel deck = new DeckPanel(); +RootPanel.get().add(deck); + +// Prepare widget, no width/height initially. +Label content = new Label(content); +assertEquals(, content.getElement().getStyle().getWidth()); +assertEquals(, content.getElement().getStyle().getHeight()); + +// Add a widget to the DeckPanel +deck.add(content); + +// Verify width/height. +assertEquals(100%, content.getElement().getStyle().getWidth()); +assertEquals(100%, content.getElement().getStyle().getHeight()); + } + + /** + * Test that existing width/height is kept as is during add. + */ + public void testWidgetKeepSizeOnAdd() { +DeckPanel deck = new DeckPanel(); +RootPanel.get().add(deck); + +// Prepare widget, no width/height initially. +Label content = new Label(content); +DOM.setStyleAttribute(content.getElement(), width, 5cm); +DOM.setStyleAttribute(content.getElement(), height, 30mm); + +// Add a widget to the DeckPanel +deck.add(content); + +// Verify width/height. +assertEquals(5cm, DOM.getStyleAttribute(content.getElement(), width)); +assertEquals(30mm, DOM.getStyleAttribute(content.getElement(), height)); + } @Override protected DeckPanel createPanel() { -- http://groups.google.com/group/Google-Web-Toolkit-Contributors
[gwt-contrib] [google-web-toolkit] r8502 committed - Change TextBox to LongBox in bikeshed examples
Revision: 8502 Author: gwt.mirror...@gmail.com Date: Sat Aug 7 15:02:33 2010 Log: Change TextBox to LongBox in bikeshed examples http://code.google.com/p/google-web-toolkit/source/detail?r=8502 Modified: /trunk/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/employee/EmployeeEditView.java /trunk/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/employee/EmployeeEditView.ui.xml /trunk/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/report/ReportEditView.java /trunk/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/report/ReportEditView.ui.xml === --- /trunk/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/employee/EmployeeEditView.java Wed Jul 28 16:39:40 2010 +++ /trunk/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/employee/EmployeeEditView.java Sat Aug 7 15:02:33 2010 @@ -16,6 +16,7 @@ package com.google.gwt.sample.expenses.gwt.ui.employee; import com.google.gwt.app.client.EditorSupport; +import com.google.gwt.app.client.LongBox; import com.google.gwt.app.place.RecordEditView; import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.DivElement; @@ -53,7 +54,7 @@ @UiField TextBox displayName; @UiField TextBox password; - @UiField TextBox supervisorKey; + @UiField LongBox supervisorKey; @UiField TextBox userName; @UiField Button cancel; @UiField Button save; === --- /trunk/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/employee/EmployeeEditView.ui.xml Mon Jun 7 12:20:31 2010 +++ /trunk/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/employee/EmployeeEditView.ui.xml Sat Aug 7 15:02:33 2010 @@ -1,6 +1,7 @@ !DOCTYPE ui:UiBinder SYSTEM http://dl.google.com/gwt/DTD/xhtml.ent; ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder' - xmlns:g='urn:import:com.google.gwt.user.client.ui' + xmlns:g='urn:import:com.google.gwt.user.client.ui' + xmlns:a='urn:import:com.google.gwt.app.client' ui:style .fields { margin-top: 0.5em; @@ -39,7 +40,7 @@ table class='{style.fields}' trtddiv class='{style.label}'Display Name:/div/tdtdg:TextBox ui:field='displayName'/g:TextBox/td/tr trtddiv class='{style.label}'User Name:/div/tdtdg:TextBox ui:field='userName'/g:TextBox/td/tr - trtddiv class='{style.label}'Supervisor Key:/div/tdtdg:TextBox ui:field='supervisorKey'/g:TextBox/td/tr + trtddiv class='{style.label}'Supervisor Key:/div/tdtda:LongBox ui:field='supervisorKey'/a:LongBox/td/tr trtddiv class='{style.label}'Password:/div/tdtdg:PasswordTextBox ui:field='password'/g:PasswordTextBox/td/tr /table === --- /trunk/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/report/ReportEditView.java Wed Jul 28 16:39:40 2010 +++ /trunk/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/report/ReportEditView.java Sat Aug 7 15:02:33 2010 @@ -16,6 +16,7 @@ package com.google.gwt.sample.expenses.gwt.ui.report; import com.google.gwt.app.client.EditorSupport; +import com.google.gwt.app.client.LongBox; import com.google.gwt.app.place.RecordEditView; import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.DivElement; @@ -54,8 +55,8 @@ @UiField TextBox notes; @UiField TextBox purpose; - @UiField TextBox reporterKey; - @UiField TextBox approvedSupervisorKey; + @UiField LongBox reporterKey; + @UiField LongBox approvedSupervisorKey; @UiField DateBox created; @UiField Button cancel; @UiField Button save; === --- /trunk/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/report/ReportEditView.ui.xml Mon Jun 7 12:20:31 2010 +++ /trunk/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/report/ReportEditView.ui.xml Sat Aug 7 11:59:28 2010 @@ -1,7 +1,8 @@ !DOCTYPE ui:UiBinder SYSTEM http://dl.google.com/gwt/DTD/xhtml.ent; ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder' xmlns:g='urn:import:com.google.gwt.user.client.ui' - xmlns:d='urn:import:com.google.gwt.user.datepicker.client' + xmlns:d='urn:import:com.google.gwt.user.datepicker.client' + xmlns:a='urn:import:com.google.gwt.app.client' ui:style .fields { margin-top: 0.5em; @@ -41,8 +42,8 @@ trtddiv class='{style.label}'Purpose:/div/tdtdg:TextBox ui:field='purpose'/g:TextBox/td/tr trtddiv class='{style.label}'Notes:/div/tdtdg:TextBox ui:field='notes'/g:TextBox/td/tr trtddiv class='{style.label}'Created:/div/tdtdd:DateBox ui:field='created'/d:DateBox/td/tr - trtddiv class='{style.label}'Reporter Key:/div/tdtdg:TextBox ui:field='reporterKey'/g:TextBox/td/tr - trtddiv class='{style.label}'Approved Supervisor Key:/div/tdtdg:TextBox ui:field='approvedSupervisorKey'/g:TextBox/td/tr + trtddiv class='{style.label}'Reporter Key:/div/tdtda:LongBox ui:field='reporterKey'/a:LongBox/td/tr + trtddiv class='{style.label}'Approved Supervisor
[gwt-contrib] Re: Fix datatype renderers to handle nulls properly for some primitive types. (issue725804)
As we discussed offline, I've tweaked this to render null as . Submitting it that way, along with another fix to the scaffold's ReportDetailsView to work around yet another report creation bug. http://gwt-code-reviews.appspot.com/725804/show -- http://groups.google.com/group/Google-Web-Toolkit-Contributors
[gwt-contrib] [google-web-toolkit] r8503 committed - Fix datatype renderers to handle nulls properly for some primitive...
Revision: 8503 Author: rj...@google.com Date: Sat Aug 7 16:11:36 2010 Log: Fix datatype renderers to handle nulls properly for some primitive types. We now expect renderers to produce for null, and parsers to return null for . Also works around a bug in report creation. The Created date is not be set, and the details view cannot render a null date (because it doesn't use renderers...). This puts us a bit out of sync with what Roo is generating, but clears some roadblocks. Review at http://gwt-code-reviews.appspot.com/725804 http://code.google.com/p/google-web-toolkit/source/detail?r=8503 Modified: /trunk/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/report/ReportDetailsView.java /trunk/user/src/com/google/gwt/app/client/BooleanRenderer.java /trunk/user/src/com/google/gwt/app/client/DoubleRenderer.java /trunk/user/src/com/google/gwt/app/client/IntegerRenderer.java /trunk/user/src/com/google/gwt/app/client/LongRenderer.java /trunk/user/src/com/google/gwt/i18n/client/DateTimeFormatRenderer.java /trunk/user/src/com/google/gwt/text/shared/AbstractRenderer.java /trunk/user/src/com/google/gwt/text/shared/PassthroughRenderer.java === --- /trunk/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/report/ReportDetailsView.java Fri Aug 6 11:47:57 2010 +++ /trunk/bikeshed/src/com/google/gwt/sample/expenses/gwt/ui/report/ReportDetailsView.java Sat Aug 7 16:11:36 2010 @@ -20,7 +20,7 @@ import com.google.gwt.dom.client.SpanElement; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.HasClickHandlers; -import com.google.gwt.i18n.client.DateTimeFormat; +import com.google.gwt.i18n.client.DateTimeFormatRenderer; import com.google.gwt.sample.expenses.gwt.request.ReportRecord; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; @@ -96,7 +96,7 @@ this.record = record; purpose.setInnerText(record.getPurpose()); notes.setInnerText(record.getNotes()); - created.setInnerText(DateTimeFormat.getShortDateFormat().format(record.getCreated())); +created.setInnerText(new DateTimeFormatRenderer().render(record.getCreated())); idSpan.setInnerText(record.getId().toString()); versionSpan.setInnerText(record.getVersion().toString()); reporterKey.setInnerText(String.valueOf(record.getReporterKey())); === --- /trunk/user/src/com/google/gwt/app/client/BooleanRenderer.java Thu Jun 24 14:48:00 2010 +++ /trunk/user/src/com/google/gwt/app/client/BooleanRenderer.java Sat Aug 7 16:11:36 2010 @@ -42,6 +42,6 @@ } public String render(Boolean object) { -return String.valueOf(object); +return toString(object); } } === --- /trunk/user/src/com/google/gwt/app/client/DoubleRenderer.java Thu Jun 24 14:48:00 2010 +++ /trunk/user/src/com/google/gwt/app/client/DoubleRenderer.java Sat Aug 7 16:11:36 2010 @@ -42,6 +42,6 @@ } public String render(Double object) { -return String.valueOf(object); +return toString(object); } } === --- /trunk/user/src/com/google/gwt/app/client/IntegerRenderer.java Thu Jun 24 14:48:00 2010 +++ /trunk/user/src/com/google/gwt/app/client/IntegerRenderer.java Sat Aug 7 16:11:36 2010 @@ -42,6 +42,6 @@ } public String render(Integer object) { -return String.valueOf(object); +return toString(object); } } === --- /trunk/user/src/com/google/gwt/app/client/LongRenderer.java Thu Jun 24 14:48:00 2010 +++ /trunk/user/src/com/google/gwt/app/client/LongRenderer.java Sat Aug 7 16:11:36 2010 @@ -42,6 +42,6 @@ } public String render(Long object) { -return String.valueOf(object); +return toString(object); } } === --- /trunk/user/src/com/google/gwt/i18n/client/DateTimeFormatRenderer.java Fri Jun 18 20:16:34 2010 +++ /trunk/user/src/com/google/gwt/i18n/client/DateTimeFormatRenderer.java Sat Aug 7 16:11:36 2010 @@ -15,6 +15,7 @@ */ package com.google.gwt.i18n.client; +import com.google.gwt.i18n.client.DateTimeFormat.PredefinedFormat; import com.google.gwt.text.shared.AbstractRenderer; import java.util.Date; @@ -26,16 +27,32 @@ private final DateTimeFormat format; private final TimeZone timeZone; + /** + * Create an instance using {...@link PredefinedFormat#DATE_SHORT} + */ + public DateTimeFormatRenderer() { +this(DateTimeFormat.getFormat(PredefinedFormat.DATE_SHORT)); + } + + /** + * Create an instance with the given format and the default time zone. + */ public DateTimeFormatRenderer(DateTimeFormat format) { this(format, null); } + /** + * Create an instance with the given format and time zone. + */ public DateTimeFormatRenderer(DateTimeFormat format, TimeZone timeZone) { this.format = format; this.timeZone = timeZone;
[gwt-contrib] Re: Hard coded History integration for the Scaffold app. This is step zero (issue717801)
http://gwt-code-reviews.appspot.com/717801/show -- http://groups.google.com/group/Google-Web-Toolkit-Contributors