[gwt-contrib] [google-web-toolkit] r6137 committed - Did we mention about handler binding?
Revision: 6137 Author: rj...@google.com Date: Fri Sep 11 17:19:58 2009 Log: Did we mention about handler binding? http://code.google.com/p/google-web-toolkit/source/detail?r=6137 Modified: /wiki/UiBinder.wiki === --- /wiki/UiBinder.wiki Fri Sep 11 17:10:20 2009 +++ /wiki/UiBinder.wiki Fri Sep 11 17:19:58 2009 @@ -192,7 +192,7 @@ }}} {{{ - class MyFoo extends Widget { + public class MyFoo extends Widget { interface MyStyle extends CssResource { String enabled(); String disabled(); @@ -200,11 +200,33 @@ @UiField MyStyle style; +/* ... */ + void setEnabled(boolean enabled) { getElement().addStyle(enabled ? : style.enabled() : style.disabled()); } } }}} + +=Simple binding of event handlers= + +(* Should the value argument ("button") should be optional? If so the handler should get all clickEvents +if it is not provided. But what does "all" mean, exactly? For every named field? *) + +(* Cannot yet bind to non-widgets *) + +{{{ + public class MyFoo extends Widget { + + @UiField Button button; + + /* ... */ + + @UiHandler("button") + void onClick(ClickEvent e) { +Window.alert("Hello, AJAX"); + } +}}} =Using an external resource with a UiBinder= --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] [google-web-toolkit] r6136 committed - "Unless otherwise noted, everything described here has been implemente...
Revision: 6136 Author: rj...@google.com Date: Fri Sep 11 17:10:20 2009 Log: "Unless otherwise noted, everything described here has been implemented" http://code.google.com/p/google-web-toolkit/source/detail?r=6136 Modified: /wiki/UiBinder.wiki === --- /wiki/UiBinder.wiki Fri Sep 11 17:09:28 2009 +++ /wiki/UiBinder.wiki Fri Sep 11 17:10:20 2009 @@ -4,7 +4,7 @@ Ray Ryan -This document provides various use cases for the use of the UiBinder, a proposed service to generate Widget and DOM structures from XML markup. +This document provides various use cases for the use of the UiBinder, a service to generate Widget and DOM structures from XML markup, to be introduced with GWT 2.0. Unless otherwise noted, everything described here has been implemented. The samples here ignore binder's localization features. See UiBinderI18n. --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] [google-web-toolkit] r6135 committed - Programatic access to styles
Revision: 6135 Author: rj...@google.com Date: Fri Sep 11 17:09:28 2009 Log: Programatic access to styles http://code.google.com/p/google-web-toolkit/source/detail?r=6135 Modified: /wiki/UiBinder.wiki === --- /wiki/UiBinder.wiki Fri Sep 11 16:58:20 2009 +++ /wiki/UiBinder.wiki Fri Sep 11 17:09:28 2009 @@ -139,11 +139,11 @@ }}} A CssResource interface is generated for you, along with a ClientBundle. This means that the compiler -will warn you if you misspell the class name when you try to use it (e.g. {style.prettty}). - -Also, your css class name will be obfuscated, and so protected from collision with similar classnames -in other css blocks. In fact, you can take advantage of this within a single template: - +will warn you if you misspell the class name when you try to use it (e.g. {style.prettty}). Also, +your css class name will be obfuscated, and so protected from collision with like classnames +in other css blocks--no more global CSS namespace! + +In fact, you can take advantage of this within a single template: {{{ @@ -160,7 +160,7 @@ }}} -Finally, you don't have to have your CSS inside your ui.xml file to take advantage of this. +Finally, you don't have to have your CSS inside your ui.xml file. Most real world projects will probably keep their CSS in a separate file: {{{ @@ -175,7 +175,36 @@ }}} - += Programatic access to inline Styles = + +(*type='' doesn't allow for multiple interfaces. Needs thinking*) + +{{{ + + + .redBox { background-color:pink; border: 1px solid red; } + .enabled { color:black; } + .disabled { color:gray; } + + +I'm a box. And I'm red. + +}}} + +{{{ + class MyFoo extends Widget { +interface MyStyle extends CssResource { + String enabled(); + String disabled(); +} + +@UiField MyStyle style; + +void setEnabled(boolean enabled) { + getElement().addStyle(enabled ? : style.enabled() : style.disabled()); +} + } +}}} =Using an external resource with a UiBinder= --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] [google-web-toolkit] r6134 committed - Explaining
Revision: 6134 Author: rj...@google.com Date: Fri Sep 11 16:58:20 2009 Log: Explaining http://code.google.com/p/google-web-toolkit/source/detail?r=6134 Modified: /wiki/UiBinder.wiki === --- /wiki/UiBinder.wiki Fri Sep 11 16:45:48 2009 +++ /wiki/UiBinder.wiki Fri Sep 11 16:58:20 2009 @@ -120,6 +120,61 @@ HelloWidgetWorld helloWorld = new HelloWidgetWorld("able", "baker", "charlie"); }}} + += Hello Stylish World = + +With the element, you can define the CSS for your UI right +where you need it. + +{{{ + + +.pretty { background-color: Skyblue; } + + + +Hello, . + + +}}} + +A CssResource interface is generated for you, along with a ClientBundle. This means that the compiler +will warn you if you misspell the class name when you try to use it (e.g. {style.prettty}). + +Also, your css class name will be obfuscated, and so protected from collision with similar classnames +in other css blocks. In fact, you can take advantage of this within a single template: + + +{{{ + + +.pretty { background-color: Skyblue; } + + +.pretty { background-color: Orange; } + + + +Hello, . + + +}}} + +Finally, you don't have to have your CSS inside your ui.xml file to take advantage of this. +Most real world projects will probably keep their CSS in a separate file: + +{{{ + + + + + +Hello, . + + +}}} + + =Using an external resource with a UiBinder= --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] [google-web-toolkit] r6133 committed - Aaaaand more typos
Revision: 6133 Author: rj...@google.com Date: Fri Sep 11 16:45:48 2009 Log: And more typos http://code.google.com/p/google-web-toolkit/source/detail?r=6133 Modified: /wiki/UiBinder.wiki === --- /wiki/UiBinder.wiki Fri Sep 11 16:42:56 2009 +++ /wiki/UiBinder.wiki Fri Sep 11 16:45:48 2009 @@ -183,7 +183,7 @@ An element can be passed as an argument to a method on such resource class via the ui:apply attribute, as illustrated above with the Sprite and -ImageResource uses. *not yet implemented* +ImageResource uses. *(not yet implemented)* Note that there is no requirement that a with: class implement the ClientBundle interface, this is just an example. @@ -274,7 +274,7 @@ } }}} -An error results: *line numbers not yet* +An error results: *(line numbers not yet implemented)* {{{ @@ -380,7 +380,7 @@ =Apply different xml templates to the same widget= -You're an [[http://code.google.com/events/io/sessions/GoogleWebToolkitBestPractices.html][MVP]] developer. You have a nice view interface, and a templated Widget that implements it. How might you use several different xml templates for the same view? +You're an [http://code.google.com/events/io/sessions/GoogleWebToolkitBestPractices.html MVP] developer. You have a nice view interface, and a templated Widget that implements it. How might you use several different xml templates for the same view? {{{ public class FooPickerController { --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] [google-web-toolkit] r6132 committed - More typos
Revision: 6132 Author: rj...@google.com Date: Fri Sep 11 16:42:56 2009 Log: More typos http://code.google.com/p/google-web-toolkit/source/detail?r=6132 Modified: /wiki/UiBinder.wiki === --- /wiki/UiBinder.wiki Fri Sep 11 16:41:35 2009 +++ /wiki/UiBinder.wiki Fri Sep 11 16:42:56 2009 @@ -183,7 +183,7 @@ An element can be passed as an argument to a method on such resource class via the ui:apply attribute, as illustrated above with the Sprite and -ImageResource uses. [*not yet implemented*] +ImageResource uses. *not yet implemented* Note that there is no requirement that a with: class implement the ClientBundle interface, this is just an example. @@ -274,7 +274,7 @@ } }}} -An error results: [ *line numbers unimplemented* ] +An error results: *line numbers not yet* {{{ --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] [google-web-toolkit] r6131 committed - Fixed some typoes
Revision: 6131 Author: rj...@google.com Date: Fri Sep 11 16:41:35 2009 Log: Fixed some typoes http://code.google.com/p/google-web-toolkit/source/detail?r=6131 Modified: /wiki/UiBinder.wiki === --- /wiki/UiBinder.wiki Fri Sep 11 16:34:19 2009 +++ /wiki/UiBinder.wiki Fri Sep 11 16:41:35 2009 @@ -188,9 +188,9 @@ Note that there is no requirement that a with: class implement the ClientBundle interface, this is just an example. -=Share ImmutableResourceBundle instances= - -Extends LogoNamePanel (from the example above) to allow its bundle to be passed in. +=Share resource instances= + +Extends LogoNamePanel (from the example above) to allow the resource to be passed in. {{{ public class LogoNamePanel extends Composite { @@ -201,15 +201,15 @@ final Resources resources; public LogoNamePanel(Resources resources) { -initWidget(uiBinder.createAndBindUi(this)); this.resources = resources; +initWidget(uiBinder.createAndBindUi(this)); } public void setUserName(String userName) { nameSpan.setInnerText(userName); } - @UiFactory + @UiFactory /* this method could be static */ public Resources getResources() { return resources; } @@ -251,10 +251,9 @@ {{{ -< ui:UiBinder - xmlns:ui='urn:ui:com.google.gwt.uibinder' - xmlns:g='urn:import:com.google.gwt.user.client.ui' - xmlns:my='urn:import:com.my.app.widgets' > + @@ -275,7 +274,7 @@ } }}} -An error results: +An error results: [ *line numbers unimplemented* ] {{{ @@ -381,7 +380,7 @@ =Apply different xml templates to the same widget= -You're an MVC developer. You have a nice view interface, and a templated Widget that implements it. How might you use several different xml templates for the same view? +You're an [[http://code.google.com/events/io/sessions/GoogleWebToolkitBestPractices.html][MVP]] developer. You have a nice view interface, and a templated Widget that implements it. How might you use several different xml templates for the same view? {{{ public class FooPickerController { --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] [google-web-toolkit] r6130 committed - Replacing namespace hacks with {field.references}. Also deleted the un...
Revision: 6130 Author: rj...@google.com Date: Fri Sep 11 16:34:19 2009 Log: Replacing namespace hacks with {field.references}. Also deleted the unimplemented CheckBox example, which is unlikely to work that way. http://code.google.com/p/google-web-toolkit/source/detail?r=6130 Modified: /wiki/UiBinder.wiki === --- /wiki/UiBinder.wiki Fri Sep 11 16:17:04 2009 +++ /wiki/UiBinder.wiki Fri Sep 11 16:34:19 2009 @@ -92,9 +92,8 @@ {{{ - + Hello, . @@ -122,85 +121,24 @@ new HelloWidgetWorld("able", "baker", "charlie"); }}} -=Putting a label on a checkbox (referring to generated ids within a template)= - -_Not yet implemented._ You want to make your personal variant on the single most common widget, a checkbox with a nice, accessible HTML label element tied to it: + +=Using an external resource with a UiBinder= {{{ - - - - - - - - -}}} - -{{{ -public class LabeledCheckBox extends Widget { - interface MyUiBinder extends UiBinder {} - private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class); - - @UiField InputElement myCheckBox; - @UiField LabelElement myLabel; - - public LabeledCheckBox() { setElement(uiBinder.createAndBindUi(this)); } - - public void setValue(boolean b) { myCheckBox.setChecked(b); } - - public boolean getValue() { return myCheckBox.isChecked(); } - - public void setName(String name) { myLabel.setInnerText(name); } - - public String getName() { return myLabel.getInnerText(); } -} -}}} - -The proposal here is that a ui: prefix on any attribute other than id fills it with the id generated for a corresponding ui:field. - -There are type matching issues here. The ui:field of a DOM element is a string id, while that for a UIObject is typed. So, this should fail with a type mismatch: - -{{{ - -}}} - - - The use of attribute prefixing for this would be a mistake, a bad - use of XML. In particular, it fights the use of XML tools to enforce - things like, "all labels must have a 'for' attribute." - - Instead, we should bite the bullet and adopt a mini-expression - language, something like: - -{{{ - - - - - - -}}} - - - -=Using an ImmutableResourceBundle (e.g. CssResource) with a UiBinder= - -{{{ - - + + + + + - - - - + + + + Well hello there - + @@ -238,39 +176,17 @@ } }}} -The with: uri type marks an object whose methods can be called to fill +The with element declares a field holding an object whose methods can be called to fill in attribute values. If no public api is provided to set the "with" argument (as in this example), it must be instantiable by GWT.create(). An element can be passed as an argument to a method on such resource -class via an apply attribute, as illustrated above with the Sprite and -ImageResource uses. +class via the ui:apply attribute, as illustrated above with the Sprite and +ImageResource uses. [*not yet implemented*] Note that there is no requirement that a with: class implement the -ClientBundle interface. - - - As above, this is an abuse of attribute prefixing, and a bad idea. - Here again we should use our little expression language: - -{{{ - - - - - - Well hello there - - - - -}}} - - +ClientBundle interface, this is just an example. =Share ImmutableResourceBundle instances= --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] [google-web-toolkit] r6129 committed - Edited wiki page through web user interface.
Revision: 6129 Author: tamplinjohn Date: Fri Sep 11 16:25:53 2009 Log: Edited wiki page through web user interface. http://code.google.com/p/google-web-toolkit/source/detail?r=6129 Modified: /wiki/UsingOOPHM.wiki === --- /wiki/UsingOOPHM.wiki Thu Sep 3 16:19:08 2009 +++ /wiki/UsingOOPHM.wiki Fri Sep 11 16:25:53 2009 @@ -16,7 +16,8 @@ You will need to install a plugin in each browser you intend to use with OOPHM. * *Google Chrome* - Not yet, sorry. + _*Note: this is relatively untested, but appears to work.*_ + If you are running the !DevChannel version of Google Chrome on Windows x86 ([http://dev.chromium.org/getting-involved/dev-channel instructions] for switching to !DevChannel), you can install the [http://google-web-toolkit.googlecode.com/svn/trunk/plugins/npapi/prebuilt/gwtdmp.crx GWT Chrome extension]. Note that performance is slower than the other browsers right now because the plugin runs in an isolated process, though we may be able to improve performance before the final release. Also, you may get a "plugin unresponsive" warning which is annoying but harmless. * *Firefox* _*Note: If you have previously installed an OOPHM plugin, you will need to uninstall or disable it first.*_ --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] [google-web-toolkit] r6128 committed - Move Windows registry and dialog box code to common location to share ...
Revision: 6128 Author: j...@google.com Date: Fri Sep 11 16:24:58 2009 Log: Move Windows registry and dialog box code to common location to share between NPAPI and IE (for now, eventually Chrome needs a platform-independent UI), checkin packaged Chrome extension with access list UI. http://code.google.com/p/google-web-toolkit/source/detail?r=6128 Added: /trunk/plugins/platform /trunk/plugins/platform/Win /trunk/plugins/platform/Win/AllowDialog.cpp /trunk/plugins/platform/Win/AllowDialog.h /trunk/plugins/platform/Win/Preferences.cpp /trunk/plugins/platform/Win/Preferences.h Deleted: /trunk/plugins/ie/oophm/oophm/AllowDialog.cpp /trunk/plugins/ie/oophm/oophm/AllowDialog.h /trunk/plugins/ie/oophm/oophm/Preferences.cpp /trunk/plugins/ie/oophm/oophm/Preferences.h /trunk/plugins/npapi/extension/platform/WINNT_x86-msvc/plugins/npOOPHM.dll Modified: /trunk/plugins/ie/oophm/oophm/oophm.vcproj /trunk/plugins/npapi/ScriptableInstance.cpp /trunk/plugins/npapi/VisualStudio/npapi-plugin.vcproj /trunk/plugins/npapi/main.cpp /trunk/plugins/npapi/npOOPHM.rc /trunk/plugins/npapi/prebuilt/gwtdmp/WINNT_x86-msvc/npOOPHM.dll /trunk/plugins/npapi/prebuilt/gwtdmp.crx /trunk/plugins/npapi/resource.h === --- /dev/null +++ /trunk/plugins/platform/Win/AllowDialog.cpp Fri Sep 11 16:24:58 2009 @@ -0,0 +1,54 @@ +/* + * Copyright 2009 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +#include "AllowDialog.h" +#include "Debug.h" +#include "resource.h" + +HINSTANCE AllowDialog::hInstance; + +static BOOL CALLBACK allowDialogProc(HWND hwndDlg, UINT message, WPARAM wParam, LPARAM lParam) { + if (message != WM_COMMAND) { +return false; + } + bool allowed; + switch (LOWORD(wParam)) { +case IDCANCEL: + allowed = false; + break; +case IDC_ALLOW_BUTTON: + allowed = true; + break; +default: + // ignore anything but buttons which close the dialog + return false; + } + bool remember = IsDlgButtonChecked(hwndDlg, IDC_REMEMBER_CHECKBOX) == BST_CHECKED; + int returnVal = (allowed ? 1 : 0) + (remember ? 2 : 0); + EndDialog(hwndDlg, (INT_PTR) returnVal); + return true; +} + +void AllowDialog::setHInstance(HINSTANCE hInstance) { + AllowDialog::hInstance = hInstance; +} + +bool AllowDialog::askUserToAllow(bool* remember) { + int result = (int) DialogBox(hInstance, MAKEINTRESOURCE(IDD_ALLOW_DIALOG), + NULL, (DLGPROC) allowDialogProc); + *remember = (result & 2) != 0; + return (result & 1) != 0; +} === --- /dev/null +++ /trunk/plugins/platform/Win/AllowDialog.h Fri Sep 11 16:24:58 2009 @@ -0,0 +1,42 @@ +#ifndef _H_AllowDialog +#define _H_AllowDialog +/* + * Copyright 2009 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +#ifdef _WINDOWS +#include +#include +#include + +class AllowDialog { +public: + static void setHInstance(HINSTANCE hInstance); + + /** + * Ask the user if a connection should be allowed. + * + * @param remember *remember is set to true if the user asked us to remember this decision, + * false otherwise + * @return return true if this connection should be allowed + */ + static bool askUserToAllow(bool* remember); + +private: + static HINSTANCE hInstance; +}; +#endif + +#endif === --- /dev/null +++ /trunk/plugins/platform/Win/Preferences.cpp Fri Sep 11 16:24:58 2009 @@ -0,0 +1,100 @@ +/* + * Copyright 2009 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS
[gwt-contrib] [google-web-toolkit] r6127 committed - Moved here from incubator
Revision: 6127 Author: rj...@google.com Date: Fri Sep 11 16:18:26 2009 Log: Moved here from incubator http://code.google.com/p/google-web-toolkit/source/detail?r=6127 Added: /wiki/UiBinderI18n.wiki === --- /dev/null +++ /wiki/UiBinderI18n.wiki Fri Sep 11 16:18:26 2009 @@ -0,0 +1,366 @@ +#summary GWT UiBinder i18n use cases + += GWT UiBinder Internationalization Use Cases = + +Ray Ryan +freely plagiarizing from the brilliant minds behind [http://code.google.com/p/gxp/ gxp] + +This document explores internationalization use cases supported the GWT UiBinder. + += Background = + +The basic idea is that the localizable bits of your ui.xml template file are marked up as such. When the UiBinder code generator processes the template, it gathers these and creates an interface extends com.google.gwt.i18.client.Messages. You then provide localized versions of these messages as you would for any other portion of your app. (See the Binding to Properties Files section of the [http://google-web-toolkit.googlecode.com/svn/javadoc/1.6/com/google/gwt/i18n/client/Messages.html Messages javadoc].) + +Values for annotations that apply at the Messages interface level are set as attributes on the root element. Here is an example with all possible values set (normally you'd let some of these default). + +{{{ + +}}} + += Open Issues = + +Support for Constants and ConstantsWithLookup is not yet designed. + +PluralText is theoretically supported, but untested. + +So far, I have found no use for Gxp's element. Is it really not needed, or do I just lack imagination? + +Unannotated user visible text is allowed--a feature is needed to make this a compile time error. + += Complete sentence or headline with no internal tags. = + +*Original* +{{{ +User Account Management. +}}} + +*Tagged* +{{{ + + User Account Management. + +}}} + + +*Generated* +{{{ +public class MyUiBinderImpl implements MyUiBinder { + static final MyUiMessages messages = GWT.create(MyUiMessages.class); + + void bindUi(MyUi myUi) { +HTML html = new HTML(); +html.setHtml("" + messages.message1() + ""); +myUi.setElement(html.getElement()); + } +} + +...@defaultlocale("en_US") +...@generatekeys +...@generatedfrom("com.foo.bar.MyUi.ul.xml") +public interface MyUiMessages extends com.google.gwt.i18.client.Messages { + @DefaultMessage("User Account Management.") + @Description("Title of UAM page") + String message1(); +} +}}} + +This is the hello world case‚ a simple, unparametrized string. + += Simple HTML tags inside message = + +*Original* +{{{ +We strongly urge you to reconsider. +}}} + +*Tagged* +{{{ +We strongly urge you to reconsider. +}}} + +*Generated* + +As above + +Simple formatting is reasonable to put in front of a translator, and +so UiBinder supports html in messages, not just text. + + += Messages with unclobberable portions = + +*Original* +{{{ + +Colgate, with MFP!TM +}}} + +*Tagged* +{{{ + + Colgate, + with MFP!TM + +}}} + + +*Generated* +{{{ +public class MyUiBinderImpl implements MyUiBinder { + static final String MESSAGE1_BRANDED_SPAN_OPEN = ""; + static final String MESSAGE1_BRANDED_SPAN_CLOSE = ""; + static final String MESSAGE1_TRADEMARK = "TM"; + static final MyUiMessages messages = GWT.create(MyUiMessages.class); + + static final MyUiMessages messages = GWT.create(MyUiMessages.class); + + public void bind(MyUi myUi) { +HTML html = new HTML(); +html.setHtml("" + + messages.message1(MESSAGE1_BRANDED_SPAN_OPEN, +MESSAGE1_BRANDED_SPAN_CLOSE, MESSAGE1_TRADEMARK) + + ""); + } +} + +...@defaultlocale("en_US") +...@description("blurb") +...@generatekeys +...@generatedfrom("com.foo.bar.MyUi.ul.xml") +public interface MyUiMessages extends com.google.gwt.i18.client.Messages { + @DefaultMessage("{0}Colgate{1}, with MFP!{2}") + String message1( +@Example(MyUiBinderImpl.MESSAGE1_BRANDED_SPAN_OPEN) String brandedSpanOpen, +@Example(MyUiBinderImpl.MESSAGE1_BRANDED_SPAN_CLOSE) String brandedSpanClose, +@Example(MyUiBinderImpl.MESSAGE1_TRADEMARK) String trademark + ); +} +}}} + +There are two examples in here. First, you see a {{{ui:ph}}} attribute that +can be added to any child of a {{{ui:msg}}}, to indicate that placholders +should be created to protect it from translators. Two placeholders are +created, for the opening and closing tags of the element (in this +case, brandedSpanOpen and brandedSpanClose). + +Second, we see an element, also named {{{ui:ph}}}, that can surround an +arbitrary bit of markup to be protected in its entirety (in this case, +the trademark placeholder). + +So, you have both an element **to surround untranslatable +runs**, and the attribute{{{<}}}/span> to put in +arbitrary elements to hide their begin and end tags from translators, +but keep their content as part of the message. + + += Messages with runtime computed values = + +*Original* +{{{ + + +(closed through ) +}}} + +*Tagged* +{{{ + +
[gwt-contrib] [google-web-toolkit] r6126 committed - Corrections from tgdavies
Revision: 6126 Author: rj...@google.com Date: Fri Sep 11 16:17:04 2009 Log: Corrections from tgdavies http://code.google.com/p/google-web-toolkit/source/detail?r=6126 Modified: /wiki/UiBinder.wiki === --- /wiki/UiBinder.wiki Fri Sep 11 16:12:54 2009 +++ /wiki/UiBinder.wiki Fri Sep 11 16:17:04 2009 @@ -82,7 +82,7 @@ // Use: -SpanElement helloWorld = new HelloWorld("World").getElement(); +Element helloWorld = new HelloWorld("World").getElement(); }}} = Hello Composite World = @@ -409,7 +409,7 @@ * Used by MyUiBinder to instantiate CricketScores. * Arguments to be filled in the template */ - @UiFactory CricketScores(String... teamNames) { + @UiFactory CricketScores makeCricketScores(String... teamNames) { return new CricketScores(teamNames); } } --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] [google-web-toolkit] r6125 committed - Moved here from Incubator
Revision: 6125 Author: rj...@google.com Date: Fri Sep 11 16:12:54 2009 Log: Moved here from Incubator http://code.google.com/p/google-web-toolkit/source/detail?r=6125 Added: /wiki/UiBinder.wiki === --- /dev/null +++ /wiki/UiBinder.wiki Fri Sep 11 16:12:54 2009 @@ -0,0 +1,513 @@ +#summary UiBinder use cases + += GWT UiBinder Use Cases = + +Ray Ryan + +This document provides various use cases for the use of the UiBinder, a proposed service to generate Widget and DOM structures from XML markup. + +The samples here ignore binder's localization features. See UiBinderI18n. + += Background = + +There are problems with the declarative ui template service as it was [DeclarativeUi originally proposed] + + * A template-based UI must be instantiated via GWT.create(), causing an implementation detail to be visible as public api + * Within a template, only widgets with a zero arg constructor can be used + * CssResource and other ImmutableResourceBundle variants cannot be used + * Template xml files are found by magical name matching conventions, and applying more than one xml template to a class is impossible + +In addressing these issues, we have talked about encouraging a proxy style of use (basically, use Composite to wrap whatever widget gets GWT.create()'d), but dislike the extra object creation implied. We also hope for a system that can choose to use innerHTML, cloning, or DOM assembly as makes sense per browser type. These shortcomings could be addressed by a combination of developer discipline (yuck) and perhaps the builder pattern, but we still found ourselves faced with the likelihood of hurried developers wrapping an unneeded, generated object. + +Emily hit upon the idea of the Configurator (here rechristened UiBinder). It’s like a factory, but responsible for filling in the fields of a Widget (or other object) that someone else instantiates, rather than instantiating one itself. This seems to offer all the benefits of a builder, with no concerns of extra object creation, and as a nice side effect avoids a lot of boilerplate. This document illustrates its application in various use cases. + +{{{ +/** + * Interface implemented by classes that generate DOM or Widget structures from + * ui.xml template files, and which inject portions of the generated UI into the + * fields of an owner. + * + * The generated UiBinder implementation will be based on an xml file resource + * in the same package as the owner class, with the same name and a "ui.xml" + * suffix. For example, a UI owned by class {...@code bar.baz.Foo} will be sought + * in {...@code /bar/baz/Foo.ui.xml}. (To use a different template file, put the + * {...@link UiTemplate} annotation on your UiBinder interface declaration to point + * the code generator at it.) + * + * @param The type of the root object of the generated UI, typically a + * subclass of {...@link com.google.gwt.dom.client.Element} or + * {...@link com.google.gwt.user.client.ui.UIObject} + * @param The type of the object that will own the generated UI + */ +public interface UiBinder { + + /** + * Creates and returns the root object of the UI, and fills any fields of owner + * tagged with {...@link UiField}. + * + * @param owner the object whose {...@literal @}UiField needs will be filled + */ + U createAndBindUi(O owner); +} +}}} + += Hello World = + +Make a simple generated UI, with a named element, and without widgets. + +{{{ + + + + +Hello, . + + +}}} + +{{{ +public class HelloWorld extends UIObject { // Could extend Widget instead + + interface MyUiBinder extends UiBinder {} + private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class); + + @UiField SpanElement nameSpan; + + public HelloWorld(String name) { +// call to createAndBindUi sets this.nameSpan +setElement(uiBinder.createAndBindUi(this)); +nameSpan.setInnerText(name); + } +} + +// Use: + +SpanElement helloWorld = new HelloWorld("World").getElement(); +}}} + += Hello Composite World = + +Make a simple widget-based UI + +{{{ + + + + +Hello, . + + +}}} + +{{{ +public class HelloWidgetWorld extends Composite { + + interface MyUiBinder extends UiBinder {} + private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class); + + @UiField ListBox listBox; + + public HelloWidgetWorld(String... names) { +// sets listBox +initWidget(uiBinder.createAndBindUi(this)); +for (String name : names) { listBox.addItem(name); } + } +} + +// Use: + +HelloWidgetWorld helloWorld = + new HelloWidgetWorld("able", "baker", "charlie"); +}}} + +=Putting a label on a checkbox (referring to generated ids within a template)= + +_Not yet implemented._ You want to make your personal variant on the single most common widget, a checkbox with a nice, accessible HTML label element tied to it: + +{{{ + + + + + + + + +}}} + +{{{ +public class LabeledCheckBox extends
[gwt-contrib] Re: Introduces inline styles to ui.xml files
Yup. And dropped completely if you forget to use them. On Fri, Sep 11, 2009 at 3:54 PM, Bruce Johnson wrote: > And those class names get obfuscated, too, right? > > > On Fri, Sep 11, 2009 at 6:24 PM, Ray Ryan wrote: > >> Want to see the best part? Css namespaces for free, courtesy of >> CssResource. >> >> >> .pretty { >> color: red; >> } >> >> >> .pretty { >> color: green; >> } >> >> >> >> I am red. >> I am green. >> >> >> >> >> On Fri, Sep 11, 2009 at 2:23 PM, Bruce Johnson wrote: >> >>> Another w00t! >>> This is brilliant. >>> >>> >>> On Thu, Sep 10, 2009 at 7:00 PM, Joel Webber wrote: >>> W00t, thanks. Looking forward to using this.Thanks for doing this review, Lex. On Thu, Sep 10, 2009 at 4:36 PM, wrote: > > On 2009/09/10 19:54:05, Ray Ryan wrote: > > > Committed r6114 > > http://gwt-code-reviews.appspot.com/64812 > > > >>> >>> >>> >> >> >> > > > > --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: Introduces inline styles to ui.xml files
And those class names get obfuscated, too, right? On Fri, Sep 11, 2009 at 6:24 PM, Ray Ryan wrote: > Want to see the best part? Css namespaces for free, courtesy of > CssResource. > > > .pretty { > color: red; > } > > > .pretty { > color: green; > } > > > > I am red. > I am green. > > > > > On Fri, Sep 11, 2009 at 2:23 PM, Bruce Johnson wrote: > >> Another w00t! >> This is brilliant. >> >> >> On Thu, Sep 10, 2009 at 7:00 PM, Joel Webber wrote: >> >>> W00t, thanks. Looking forward to using this.Thanks for doing this >>> review, Lex. >>> >>> >>> On Thu, Sep 10, 2009 at 4:36 PM, wrote: >>> On 2009/09/10 19:54:05, Ray Ryan wrote: Committed r6114 http://gwt-code-reviews.appspot.com/64812 >>> >>> >>> >> >> >> > > > > --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] [google-web-toolkit] r6124 committed - Revert inadvertent commit.
Revision: 6124 Author: j...@google.com Date: Fri Sep 11 15:38:45 2009 Log: Revert inadvertent commit. http://code.google.com/p/google-web-toolkit/source/detail?r=6124 Deleted: /trunk/plugins/npapi/prebuilt/chrome-gwtdmp --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] [google-web-toolkit] r6123 committed - Save Chrome GWTDMP signing key.
Revision: 6123 Author: j...@google.com Date: Fri Sep 11 15:37:42 2009 Log: Save Chrome GWTDMP signing key. http://code.google.com/p/google-web-toolkit/source/detail?r=6123 Added: /trunk/plugins/npapi/prebuilt/chrome-gwtdmp /trunk/plugins/npapi/prebuilt/chrome-gwtdmp/README.txt /trunk/plugins/npapi/prebuilt/chrome-gwtdmp/signing-key.pem === --- /dev/null +++ /trunk/plugins/npapi/prebuilt/chrome-gwtdmp/README.txt Fri Sep 11 15:37:42 2009 @@ -0,0 +1,1 @@ +This is used to sign the GWT Development Mode Plugin extension for Chrome. === --- /dev/null +++ /trunk/plugins/npapi/prebuilt/chrome-gwtdmp/signing-key.pem Fri Sep 11 15:37:42 2009 @@ -0,0 +1,16 @@ +-BEGIN PRIVATE KEY- +MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAMxOYLR7rUA0ZUKma +9IT9r8RNsyPh9ow9SU13xbdmD4SbOYkrMFq+aTz95Ks5Kqw0Et2eeekeBZQX4grJi +2JkB6lxtbuCEJxs7LdN9RBVOY1z1zCPao5Sz6Sypn9SqNeRze5xzOvJoE8PkwLkj0 +khVp7xyjDKVGa+GWWvWyYik1vAgMBAAECgYAMbqiL0wrT4VxYFfBxtC1Lqyx+fi1y +JZCFVyXgKlPdUxm1V337txrB4uap0kOH74J9VRRN+EAme3WUv6tvEfPnDa2rc1roq +G1CPMlDt9mZGk+qvWE3CdYbZW53vWPHkVoEoKgQndp3rdd5QiSJoIIxKpGOUZX2aE +h01is0vVbdYQJBAOzl0ZQQKeARGP09gsUyLVN6JU/r33dhnTFY+6IFUp22IBzqA+n +jBv10ZaGuOxRPIViSRNRjrj/qsMwyIqGmaasCQQDcx8jx02CB2WD/VfPy75BR+oJb +NowqmfPVYmTZYDcAqFTPJYOcfvMqC28rH5fzNVhqKEBs1ASHCMF2EF2zYo9NAkEAw +Rkjl/kE6SuGnwWAjpSz9ZNezqKJaJocs5jAo/SKvxsxWeA2iHMRw48ZOIz4gzltCP +FRQX5vDpKSwh8rs3AeOQJAfhH7NdO9BQjLMaK0RaH0qEtDCrDQQzdcHBouek5Nuit +lGlBSohd/5R9YYKiOzQtGLIBFoZ9D4pPmXPOlfdym9QJAR/My3EXeThKWU/VQhMuf +I2mKPPGrHnCrLAdppU41EZtskVmysqg/tDKnc+5YOLjcvpds8xRCkb5DkYI/k/GhE +w== +-END PRIVATE KEY- --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: Nullness tracking
Lots of good changes in here we really need to get in! How much does this save on code size? Mostly LGTM with a few suggestions, nits, and confusions; nothing major. http://gwt-code-reviews.appspot.com/62805/diff/1/21 File dev/core/src/com/google/gwt/dev/jjs/ast/JBinaryOperation.java (right): http://gwt-code-reviews.appspot.com/62805/diff/1/21#newcode23 Line 23: public class JBinaryOperation extends JExpression { I assume you're deleting HasSettableType? Don't see the deletion in this patch. http://gwt-code-reviews.appspot.com/62805/diff/1/9 File dev/core/src/com/google/gwt/dev/jjs/ast/JNewArray.java (right): http://gwt-code-reviews.appspot.com/62805/diff/1/9#newcode102 Line 102: public JType getType() { Should be able to use covariant return type to return a JNonNullType. http://gwt-code-reviews.appspot.com/62805/diff/1/13 File dev/core/src/com/google/gwt/dev/jjs/ast/JNewInstance.java (right): http://gwt-code-reviews.appspot.com/62805/diff/1/13#newcode39 Line 39: public JType getType() { Should be able to use covariant return type to return a JNonNullType. http://gwt-code-reviews.appspot.com/62805/diff/1/18 File dev/core/src/com/google/gwt/dev/jjs/ast/JNonNullType.java (right): http://gwt-code-reviews.appspot.com/62805/diff/1/18#newcode28 Line 28: public JNonNullType(JReferenceType ref) { Should be restricted, only JProgram should create since they're interned. http://gwt-code-reviews.appspot.com/62805/diff/1/11 File dev/core/src/com/google/gwt/dev/jjs/ast/JProgram.java (right): http://gwt-code-reviews.appspot.com/62805/diff/1/11#newcode702 Line 702: JReferenceType tGreater = classify1 > classify2 ? type1 : type2; Holy cow... is this just a straight up bug? Should we commit this fix immediately as a separate change? http://gwt-code-reviews.appspot.com/62805/diff/1/11#newcode1205 Line 1205: public JReferenceType strongerType(JReferenceType type1, JReferenceType type2) { BTW: I completely dropped the ball on javadoc here, making it very hard to understand the precise semantics. I assume based on your changes that you do understand, would you mind elucidating? Thanks! http://gwt-code-reviews.appspot.com/62805/diff/1/15 File dev/core/src/com/google/gwt/dev/jjs/ast/JTypeOracle.java (right): http://gwt-code-reviews.appspot.com/62805/diff/1/15#newcode416 Line 416: for (int i = 0; i < program.getDeclaredTypes().size(); ++i) { All 4 of these can just be turned into enhanced for loops while you're in there. http://gwt-code-reviews.appspot.com/62805/diff/1/15#newcode823 Line 823: private boolean isInstantiatedType(JReferenceType type, You know what, this whole instantiated types mess where we pass around parameters that shadow the instance field is completely bogus. If you're going to make this non-static, how about we just fix all the places where we pass an 'instantiatedTypes' param and always use the field. I think it's literally always the same object. http://gwt-code-reviews.appspot.com/62805/diff/1/27 File dev/core/src/com/google/gwt/dev/jjs/impl/EqualityNormalizer.java (right): http://gwt-code-reviews.appspot.com/62805/diff/1/27#newcode90 Line 90: if (lhsStatus != StringStatus.NONNULL This gets to be a little confusing. Maybe we should make USE_TRIPLE_EQUALS equal '2' if either one is a non-null, then a switch statement can differentiate the cases. Because in that case, no replacement even needs to be done, right? http://gwt-code-reviews.appspot.com/62805/diff/1/27#newcode152 Line 152: if (lhs.getType() instanceof JPrimitiveType) { Can either of these two new if tests actually get hit? I'd have thought the surrounding code would make it impossible. Should these be assertions? http://gwt-code-reviews.appspot.com/62805/diff/1/42 File dev/core/src/com/google/gwt/dev/jjs/impl/TypeTightener.java (left): http://gwt-code-reviews.appspot.com/62805/diff/1/42#oldcode553 Line 553: typeList.add(typeNull); If we don't need this code, the comment should also go. http://gwt-code-reviews.appspot.com/62805/diff/1/42 File dev/core/src/com/google/gwt/dev/jjs/impl/TypeTightener.java (right): http://gwt-code-reviews.appspot.com/62805/diff/1/42#newcode129 Line 129: && method != program.getNullMethod()) { LG, but change related? http://gwt-code-reviews.appspot.com/62805/diff/1/42#newcode409 Line 409: } else if (triviallyFalse && toType != program.getTypeNull()) { I was slightly nervous about the changes in JTypeOracle.canTriviallyCast/canTheoreticallyCast with respect to nullity, and I think this is why. I'm sure the code is right, but I'm struggling to reason about it. http://gwt-code-reviews.appspot.com/62805/diff/1/42#newcode418 Line 418: // TODO(nullable): I don't understand this. I still don't understand this. LOL. http://gwt-code-reviews.appspot.com/62805 --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: Introduces inline styles to ui.xml files
Want to see the best part? Css namespaces for free, courtesy of CssResource. .pretty { color: red; } .pretty { color: green; } I am red. I am green. On Fri, Sep 11, 2009 at 2:23 PM, Bruce Johnson wrote: > Another w00t! > This is brilliant. > > > On Thu, Sep 10, 2009 at 7:00 PM, Joel Webber wrote: > >> W00t, thanks. Looking forward to using this.Thanks for doing this review, >> Lex. >> >> >> On Thu, Sep 10, 2009 at 4:36 PM, wrote: >> >>> >>> On 2009/09/10 19:54:05, Ray Ryan wrote: >>> >>> >>> Committed r6114 >>> >>> http://gwt-code-reviews.appspot.com/64812 >>> >>> >>> >> >> >> > > > > --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] [google-web-toolkit] r6122 committed - Merging trunk/@6056:6057 into this branch...
Revision: 6122 Author: jlaba...@google.com Date: Fri Sep 11 14:37:27 2009 Log: Merging trunk/@6056:6057 into this branch - Fixes a broken XMLTest in Safari 4. svn merge -r6056:6057 https://google-web-toolkit.googlecode.com/svn/trunk/ . Review by: fabbott (TBR) http://code.google.com/p/google-web-toolkit/source/detail?r=6122 Modified: /releases/1.7/branch-info.txt /releases/1.7/user/src/com/google/gwt/xml/client/Node.java /releases/1.7/user/test/com/google/gwt/xml/client/XMLTest.java === --- /releases/1.7/branch-info.txt Thu Jul 2 10:49:58 2009 +++ /releases/1.7/branch-info.txt Fri Sep 11 14:37:27 2009 @@ -6,6 +6,8 @@ /releases/1.7/ was created (r5660) as a straight copy from /releases/1...@r5659, because adding ie8 was deemed a minor version bump. Merges: +/trunk/@6056:6057 was merged into this branch to fix XMLTest + The next merge into trunk will be: svn merge -r5660: https://google-web-toolkit.googlecode.com/svn/releases/1.7 . === --- /releases/1.7/user/src/com/google/gwt/xml/client/Node.java Tue Jan 29 15:05:28 2008 +++ /releases/1.7/user/src/com/google/gwt/xml/client/Node.java Fri Sep 11 14:37:27 2009 @@ -215,7 +215,8 @@ /** * This method may collapse adjacent text nodes into one text node, depending - * on the implementation. + * on the implementation. Safari 4.0 and Chrome will also merge CDATA nodes + * into text nodes, even though they support CDATA nodes as distinct nodes. */ void normalize(); === --- /releases/1.7/user/test/com/google/gwt/xml/client/XMLTest.java Mon Oct 27 09:03:27 2008 +++ /releases/1.7/user/test/com/google/gwt/xml/client/XMLTest.java Fri Sep 11 14:37:27 2009 @@ -122,13 +122,16 @@ top.getFirstChild().getFirstChild().appendChild(deep2); top.appendChild(d.createTextNode("0123456789")); -top.appendChild(d.createCDATASection("abcdefghij")); +top.appendChild(d.createTextNode("abcdefghij")); +top.appendChild(d.createElement("e4")); +top.appendChild(d.createCDATASection("klmnopqrst")); return d; } /** * Returns the module name for GWT unit test running. */ + @Override public String getModuleName() { return "com.google.gwt.xml.XML"; } @@ -165,18 +168,18 @@ createProcessingInstruction, createTextNode}); for (int i = 0; i < canHaveChildren.size(); i++) { - Node parent = (Node) canHaveChildren.get(i); + Node parent = canHaveChildren.get(i); Node cloneParent = parent.cloneNode(false); if (canBeChildren.contains(parent)) { d.appendChild(cloneParent); } for (int j = 0; j < canBeChildren.size(); j++) { -Node child = (Node) canBeChildren.get(j); +Node child = canBeChildren.get(j); cloneParent.appendChild(child.cloneNode(false)); } for (int j = 0; j < canBeChildren.size(); j++) { Node clonedChild = cloneParent.getChildNodes().item(j); -Node hopefullySameChild = (Node) canBeChildren.get(j); +Node hopefullySameChild = canBeChildren.get(j); assertEquals(hopefullySameChild.cloneNode(false).toString(), clonedChild.toString()); } @@ -426,22 +429,17 @@ assertEquals("t data", t.getData(), "01234"); assertEquals("LeftT data", rightT.getData(), "56789"); CDATASection cd = (CDATASection) d.getDocumentElement().getChildNodes().item( -5); +7); Text rightCD = cd.splitText(5); assertEquals("cd and leftCd parent equality", cd.getParentNode(), rightCD.getParentNode()); assertEquals("leftCD.getPreviousSibling", rightCD.getPreviousSibling(), cd); assertEquals("cd length", cd.getData().length(), 5); assertEquals("leftCD.length", rightCD.getData().length(), 5); -assertEquals("cd data", cd.getData(), "abcde"); -assertEquals("leftCD data", rightCD.getData(), "fghij"); +assertEquals("cd data", cd.getData(), "klmno"); +assertEquals("leftCD data", rightCD.getData(), "pqrst"); d.getDocumentElement().normalize(); -if (XMLParser.supportsCDATASection()) { - assertEquals("normalized t", d.getDocumentElement().getChildNodes().item( - 3).toString(), "0123456789"); -} else { - assertEquals("normalized t", d.getDocumentElement().getChildNodes().item( - 3).toString(), "0123456789abcdefghij"); -} +assertEquals("normalized t", d.getDocumentElement().getChildNodes().item( +3).toString(), "0123456789abcdefghij"); } } --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: GWT Incubator compatibility policy
We've been a little ambivalent about how well the incubator is working -- it's taken a lot longer to things to move into trunk than we ever guessed it would, usually for pretty good reasons. So, we need to find a different way of building up a pipeline, and that's a somewhat unsolved problem as yet. If anyone has ideas, let 'em rip. On Thu, Sep 10, 2009 at 2:21 PM, Ray Ryan wrote: > If you're after guarantees I guess that would be 1686, the one that the > 1.7 jar was cut from (gwt-incubator-july-14-2009.jar). Looking at the svn > history, nothing has actually changed in the code from that one to the > removal of StyleInjector. It's all wiki edits and such since then. > > > On Thu, Sep 10, 2009 at 8:46 AM, jay wrote: > >> >> So...as of right now, what is the *last* version of gwt-incubator that >> is guaranteed to work with GWT 1.7? Is it safe to assume that it is >> the version immediately prior to the removal of StyleInjector? >> >> thanks, >> >> jay >> >> On Sep 10, 8:28 am, Isaac Truett wrote: >> > [oops - +gwtc] >> > >> > Hi, Ray, >> > >> > I appreciate the drive to move forward and I applaud jumping on >> > opportunities to remove redundant code. >> > >> > The reason this policy was important, to me at least, is that it >> > provided a baseline to work against. The code in the incubator can be >> > very useful (I use PagingScrollTable extensively and used DatePicker >> > from incubator before it graduated) but it's also risky because the >> > code is still experimental and subject to change. The assurance that >> > those changes would be compatible with a packaged and released GWT >> > build (even just a milestone) meant that I could build incubator from >> > trunk and pick up the latest features and bugfixes as long as my >> > project tracked the latest GWT build. Because of the GWT policies on >> > deprecation and backwards compatibility, this has been fairly easy in >> > practice. As it stands now, incubator will not compile except against >> > GWT trunk, which is also notoriously unstable (it wasn't building as >> > recently as last night, which I see was corrected this morning). This >> > presents a much higher risk for those of us using incubator code. >> > >> > It also becomes harder to work on the incubator itself when it has to >> > compile against GWT trunk. I wanted to look into issue #267 last night >> > and I was stymied by GWT trunk not being in a buildable state. Not an >> > insurmountable obstacle, but one that seems unnecessary to me. >> > >> > - Isaac >> > >> > >> > >> > On Thu, Sep 10, 2009 at 11:03 AM, Ray Ryan wrote: >> > > Hey, Isaac. >> > > That policy has proven very difficult to live with. (And to tell you >> the >> > > truth I forgot about it.) >> > > The reasoning here was that we have released incubator jars that work >> with >> > > 1.7 and no plans to issue further ones before 2.0 MS1 lands. Should it >> prove >> > > necessary to go back and do so we can go back and branch. >> > > In the meantime, we were faced bugs due to FastTree in particular >> being tied >> > > to the old StyleInjector while new development was moving to the >> version in >> > > GWT. We saw the opportunity to delete redundant code and took it. >> > > Is this going to cause problems for anyone? >> > > rjrjr >> > >> > > On Wed, Sep 9, 2009 at 3:26 PM, Isaac Truett >> wrote: >> > >> > >> Last year, Emily stated that it would compile against the "latest >> > >> gwt-milestone and gwt-trunk". There hasn't been a 2.0 milestone that >> > >> I've seen, so under the policy from last year StyleInjector should >> not >> > >> have been removed in revisions 1712-1715. >> > >> > >> So, what's the current policy for incubator trunk compatibility? >> >> > > > > --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: Introduces inline styles to ui.xml files
Another w00t! This is brilliant. On Thu, Sep 10, 2009 at 7:00 PM, Joel Webber wrote: > W00t, thanks. Looking forward to using this.Thanks for doing this review, > Lex. > > > On Thu, Sep 10, 2009 at 4:36 PM, wrote: > >> >> On 2009/09/10 19:54:05, Ray Ryan wrote: >> >> >> Committed r6114 >> >> http://gwt-code-reviews.appspot.com/64812 >> >> >> > > > > --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: CloneStatementVisitor
On Fri, Sep 11, 2009 at 4:25 PM, Scott Blum wrote: > Gotcha. Okay that makes sense. At the same time, I can't help but wonder > if the idea of retargeting to new params/locals couldn't somehow be baked > into the Cloners to force the issue. Conceivably a statement could be cloned and then put back in the same method. So, a clone of a parameter ref makes sense on its own. It depends on what you do with it, or with what other transformations you do afterwards. A check at the place the item is added into a tree would certainly make sense, but it would probably slow down the compiles. As one possibility, Context.replaceMe could, if some paranoid mode flag is turned on, verify that the inserted tree makes sense. Lex --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: CloneStatementVisitor
Gotcha. Okay that makes sense. At the same time, I can't help but wonder if the idea of retargeting to new params/locals couldn't somehow be baked into the Cloners to force the issue. On Fri, Sep 11, 2009 at 3:52 PM, Ray Cromwell wrote: > > That's currently handled by the new inliner, which I'll be dropping > hopefully today after I drop the Flattener/Unflattener and some other stuff. > Basically, each method-call param is assigned to a temp, and for each local > in the target method, a new temp local is created. CloneStatementVisitor is > run on the target with a subclass that looks up params and locals and > replaces them with references to ones in the callsite. Also, > JReturnStatements are replaced by assignment to a local at the callsite in > cases where the return doesn't short-circuit control flow in the method. > (e.g. returns from inside of a loop or an if statement). This of course > generates a lot of unnecessary temps (an extra parameter temp is only truly > needed in cases where assignment to the param occurs), but there is an > intra-procedural copy-propagation/prune pass which cleans all of these up. > -Ray > > > > On Fri, Sep 11, 2009 at 12:19 PM, wrote: > >> The one thing I don't understand is how you handle locals and params? >> If you clone an expression or statements from one method into another, >> how do you handle the fact that local refs and params target the wrong >> method? >> >> Otherwise LGTM. >> >> >> http://gwt-code-reviews.appspot.com/66802 >> > > --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Compiler Stats Intrumentation
Reviewers: Lex, scottb, Description: Most of my other optimizations depend on this class, so I'm dropping this first for review along with a sample instrumentation of MethodInliner. This class simply counts certain operations or non-operations within the compiler, in this case, why certain things got inlined or didn't. Add -Dgwt.tracestats=true to see the output. Useful for examining the effect certain optimizations have on applications at a macroscopic level. Please review this at http://gwt-code-reviews.appspot.com/64813 Affected files: dev/core/src/com/google/gwt/dev/jjs/impl/MethodInliner.java dev/core/src/com/google/gwt/dev/jjs/impl/Tracing.java --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: CloneStatementVisitor
That's currently handled by the new inliner, which I'll be dropping hopefully today after I drop the Flattener/Unflattener and some other stuff. Basically, each method-call param is assigned to a temp, and for each local in the target method, a new temp local is created. CloneStatementVisitor is run on the target with a subclass that looks up params and locals and replaces them with references to ones in the callsite. Also, JReturnStatements are replaced by assignment to a local at the callsite in cases where the return doesn't short-circuit control flow in the method. (e.g. returns from inside of a loop or an if statement). This of course generates a lot of unnecessary temps (an extra parameter temp is only truly needed in cases where assignment to the param occurs), but there is an intra-procedural copy-propagation/prune pass which cleans all of these up. -Ray On Fri, Sep 11, 2009 at 12:19 PM, wrote: > The one thing I don't understand is how you handle locals and params? > If you clone an expression or statements from one method into another, > how do you handle the fact that local refs and params target the wrong > method? > > Otherwise LGTM. > > > http://gwt-code-reviews.appspot.com/66802 > --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: CloneStatementVisitor
The one thing I don't understand is how you handle locals and params? If you clone an expression or statements from one method into another, how do you handle the fact that local refs and params target the wrong method? Otherwise LGTM. http://gwt-code-reviews.appspot.com/66802 --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] CloneStatementVisitor
Reviewers: Lex, scottb, Description: General purpose statement cloner (delegates to CloneExpressionVisitor for expressions). Used by upcoming inliner. Please review this at http://gwt-code-reviews.appspot.com/66802 Affected files: dev/core/src/com/google/gwt/dev/jjs/impl/CloneStatementVisitor.java --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] [google-web-toolkit] r6121 committed - Use around exception stack traces to preserve whitespace and use...
Revision: 6121 Author: j...@google.com Date: Fri Sep 11 10:46:51 2009 Log: Use around exception stack traces to preserve whitespace and use a fixed-width font. Patch by: jat Review by: spoon (desk) http://code.google.com/p/google-web-toolkit/source/detail?r=6121 Modified: /trunk/dev/oophm/src/com/google/gwt/dev/shell/log/SwingTreeLogger.java === --- /trunk/dev/oophm/src/com/google/gwt/dev/shell/log/SwingTreeLogger.java Sat Aug 22 16:01:38 2009 +++ /trunk/dev/oophm/src/com/google/gwt/dev/shell/log/SwingTreeLogger.java Fri Sep 11 10:46:51 2009 @@ -113,7 +113,7 @@ // Show the exception info for anything other than "UnableToComplete". // if (exceptionDetail != null) { -sb.append(htmlEscape(exceptionDetail)); +sb.append("" + htmlEscape(exceptionDetail) + ""); } if (helpInfo != null) { URL url = helpInfo.getURL(); --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: Add more HtmlUnit platforms/browsers testings
Here was what I got when using "-htmlunit FF3,FF2,IE7,IE6" The memory already 2G: -Xmx=2048m [junit] Exception in thread "main" java.lang.OutOfMemoryError: Java heap space [junit] at java.lang.StringCoding$StringEncoder.encode(StringCoding.java:250) [junit] at java.lang.StringCoding.encode(StringCoding.java:290) [junit] at java.lang.StringCoding.encode(StringCoding.java:302) [junit] at java.lang.String.getBytes(String.java:994) [junit] at org.apache.tools.ant.taskdefs.optional.junit.PlainJUnitResultFormatter.endTestSuite(PlainJUnitResultFormatter.java:150) [junit] at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.fireEndTestSuite(JUnitTestRunner.java:621) [junit] at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.run(JUnitTestRunner.java:453) [junit] at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.launch(JUnitTestRunner.java:912) [junit] at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.main(JUnitTestRunner.java:766) On Wed, Sep 9, 2009 at 8:39 PM, Frank Lin wrote: > Should the compiled JS code be browser dependent? With multiple threads, it > ran out of memory for me couple times. Lastly, if one browser failed, it > stops the rest of the tests. > > > On Wed, Sep 9, 2009 at 5:02 PM, Amit Manjhi wrote: > >> For now, it seems fine. It is the same issue when running multiple >> browsers simultaneously during remoteweb or selenium tests. >> >> >> On Wed, Sep 9, 2009 at 1:45 PM, Frank Lin wrote: >> >>> Just one issue: is it okay to use test.out for all platforms if using >>> '-htmlunit FF3, FF2, IE6, IE7'? >>> test.out="${junit.out}/${build.host.platform}-htmlunit-web-mode" >>> >>> On Wed, Sep 9, 2009 at 11:40 AM, Amit Manjhi wrote: >>> On Wed, Sep 9, 2009 at 11:19 AM, Frank Lin wrote: > Hi Amit, > > > On Wed, Sep 9, 2009 at 9:25 AM, wrote: > >> Hi Frank, >> >> Instead of having individual ant commands for each browser emulation, >> it >> would be better to test all the browsers in parallel using -htmlunit >> FF3, FF2, IE6, IE7. >> >> I would suggest more ant targets rather let ant optimize the > parallelism since blaze might be able to shard them better. We might need > Freeland's expertise on that. > When all browsers are specified, the parallelism is at the JVM level, not at the ant level. A separate HtmlUnit thread is started to emulate each browser. >>> >>> >> > --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Re: Nullness tracking
By "today" I meant today, apparently. On Thu, Aug 27, 2009 at 10:22 AM, Scott Blum wrote: > I plan to look at this today. > > On Tue, Aug 25, 2009 at 2:54 PM, wrote: > >> Reviewers: scottb, >> >> Description: >> Tracks nullness within the compiler by adding a JNonNull type. >> >> See http://code.google.com/p/google-web-toolkit/issues/detail?id=1819 . >> >> >> Please review this at http://gwt-code-reviews.appspot.com/62805 >> >> Affected files: >> dev/core/src/com/google/gwt/core/ext/soyc/impl/SizeMapRecorder.java >> dev/core/src/com/google/gwt/dev/jjs/CorrelationFactory.java >> dev/core/src/com/google/gwt/dev/jjs/JavaToJavaScriptCompiler.java >> dev/core/src/com/google/gwt/dev/jjs/ast/JArrayRef.java >> dev/core/src/com/google/gwt/dev/jjs/ast/JBinaryOperation.java >> dev/core/src/com/google/gwt/dev/jjs/ast/JCastOperation.java >> dev/core/src/com/google/gwt/dev/jjs/ast/JConditional.java >> dev/core/src/com/google/gwt/dev/jjs/ast/JGwtCreate.java >> dev/core/src/com/google/gwt/dev/jjs/ast/JMethod.java >> dev/core/src/com/google/gwt/dev/jjs/ast/JNewArray.java >> dev/core/src/com/google/gwt/dev/jjs/ast/JNewInstance.java >> dev/core/src/com/google/gwt/dev/jjs/ast/JNonNullType.java >> dev/core/src/com/google/gwt/dev/jjs/ast/JNullType.java >> dev/core/src/com/google/gwt/dev/jjs/ast/JProgram.java >> dev/core/src/com/google/gwt/dev/jjs/ast/JReboundEntryPoint.java >> dev/core/src/com/google/gwt/dev/jjs/ast/JReferenceType.java >> dev/core/src/com/google/gwt/dev/jjs/ast/JStringLiteral.java >> dev/core/src/com/google/gwt/dev/jjs/ast/JThisRef.java >> dev/core/src/com/google/gwt/dev/jjs/ast/JTypeOracle.java >> dev/core/src/com/google/gwt/dev/jjs/ast/JVariable.java >> dev/core/src/com/google/gwt/dev/jjs/ast/js/JsniFieldRef.java >> dev/core/src/com/google/gwt/dev/jjs/impl/ArrayNormalizer.java >> dev/core/src/com/google/gwt/dev/jjs/impl/BuildTypeMap.java >> dev/core/src/com/google/gwt/dev/jjs/impl/CastNormalizer.java >> dev/core/src/com/google/gwt/dev/jjs/impl/CloneExpressionVisitor.java >> dev/core/src/com/google/gwt/dev/jjs/impl/CodeSplitter.java >> dev/core/src/com/google/gwt/dev/jjs/impl/ControlFlowAnalyzer.java >> dev/core/src/com/google/gwt/dev/jjs/impl/DeadCodeElimination.java >> dev/core/src/com/google/gwt/dev/jjs/impl/EqualityNormalizer.java >> dev/core/src/com/google/gwt/dev/jjs/impl/FragmentExtractor.java >> dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaAST.java >> dev/core/src/com/google/gwt/dev/jjs/impl/GenerateJavaScriptAST.java >> dev/core/src/com/google/gwt/dev/jjs/impl/JavaScriptObjectNormalizer.java >> dev/core/src/com/google/gwt/dev/jjs/impl/JavaToJavaScriptMap.java >> dev/core/src/com/google/gwt/dev/jjs/impl/LongCastNormalizer.java >> dev/core/src/com/google/gwt/dev/jjs/impl/LongEmulationNormalizer.java >> dev/core/src/com/google/gwt/dev/jjs/impl/MakeCallsStatic.java >> dev/core/src/com/google/gwt/dev/jjs/impl/MethodCallTightener.java >> dev/core/src/com/google/gwt/dev/jjs/impl/ResolveRebinds.java >> dev/core/src/com/google/gwt/dev/jjs/impl/SourceGenerationVisitor.java >> dev/core/src/com/google/gwt/dev/jjs/impl/TypeTightener.java >> >> >> dev/core/src/com/google/gwt/dev/js/JsSourceGenerationVisitorWithSizeBreakdown.java >> dev/core/test/com/google/gwt/dev/jjs/JjsTypeTest.java >> >> >> > --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---
[gwt-contrib] Issue 3849: RPC Serialization policy
I've been recently struggling with getting Gilead to work properly with dynamic proxy mode. When DTOs implement Serializable instead of IsSerializable, RPC forces the use of a serialization policy. Apparently not all domain classes end up in the serialization policy (as a matter of fact, manually copying them there does not do the trick either) and the only workaround I found so far was implementing IsSerializable, which however creates a dependency of the domain object model on GWT. I asked around about this and there has been some fingerpointing [1], [2] towards GWT. What's the deal? [1] http://code.google.com/p/google-web-toolkit/issues/detail?id=3849&can=5 [2] http://groups.google.com/group/Google-Web-Toolkit-Contributors/msg/214aa3c46122d0d9 --~--~-~--~~~---~--~~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~--~~~~--~~--~--~---