Re: CssResource inheritance and avoiding rule repetition on injection, possibility of an @Require?
Hi Jens, Yea, this is definitely a good point. Then any widget can inherit this minimal CssResource and define on its own how it will look like in enabled / disabled state (= you would not add enableddisabled.css to the various widgets @Source annotation although you extend HasEnabledDisabledStateCss). I think this really is the best practice use of @Shared and inheritance, and as Thomas pointed out it shouldn't be used as a CssResource directly but only as an actual style interface. -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To unsubscribe from this group and stop receiving emails from it, send an email to google-web-toolkit+unsubscr...@googlegroups.com. To post to this group, send email to google-web-toolkit@googlegroups.com. Visit this group at http://groups.google.com/group/google-web-toolkit. For more options, visit https://groups.google.com/groups/opt_out.
Re: CssResource inheritance and avoiding rule repetition on injection, possibility of an @Require?
Hi Jens, Here's the full example of what I was trying to illustrate as it's probably unfair of me to have others expect that I'm setting everything up right from just the pseudo code alone: public class GwtTest3 implements EntryPoint { public interface MyClientBundle extends ClientBundle{ public final static MyClientBundle INSTANCE = GWT.create(MyClientBundle.class); @Shared @ImportedWithPrefix(global) public interface GlobalCss extends CssResource{ public String genButton(); public String genButtonOther(); } /* * Global.css contains: * .genButton{ background: green; } .genButtonOther{ background: yellow; } */ @Source(Global.css) GlobalCss globalCss(); public interface InitButtonCss extends CssResource{ public String initButton(); public String initButton2(); } /* * InitButton.css contains: * .initButton{ background: #66F; } .global-genButton.initButton2{ background: orange; } */ @Import(GlobalCss.class) @Source({InitButton.css}) InitButtonCss initButtonCss(); public interface MyCss extends GlobalCss{ public String myButton(); } /* * My.css contains: * .myButton{ background: red; } */ /* * Regardless of whether you use @Import on a CssResource that is extending another CssResource * you still need to specify the source of the extended CssResource or else * gwt will error because it cannot find the selectors OR you would have to redefine all of the * selectors from the extended css in the child css. * This occurs even if you use @NotStrict. */ @Import(GlobalCss.class) /* * if specifying the source for this resource because it does not have the default name as well as * the extended css then order matters as it is the order in which gwt will generate the source * into the final css */ @Source({Global.css,My.css}) //will cause duplicate insert of rules from Global.css MyCss myCss(); } /** * This is the entry point method. */ @Override public void onModuleLoad() { MyClientBundle.INSTANCE.globalCss().ensureInjected(); Button genButton = new Button(1.) add first buttons); genButton.getElement().setAttribute(style, position:absolute;top:50%;left:40%;); genButton.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { MyClientBundle.INSTANCE.initButtonCss().ensureInjected(); Button initButton = new Button(init button (overqualified)); initButton.getElement().setAttribute(style, position:absolute;top:60%;left:40%;); initButton.addStyleName(MyClientBundle.INSTANCE.globalCss().genButton() + + MyClientBundle.INSTANCE.initButtonCss().initButton2()); RootPanel.get().add(initButton); Button initButton2 = new Button(init button 2 (blue)); initButton2.getElement().setAttribute(style, position:absolute;top:70%;left:40%;); initButton2.addStyleName(MyClientBundle.INSTANCE.globalCss().genButton() + + MyClientBundle.INSTANCE.initButtonCss().initButton()); RootPanel.get().add(initButton2); } }); RootPanel.get().add(genButton); Button genButton2 = new Button(2.) add second button); genButton2.getElement().setAttribute(style, position:absolute;top:50%;left:60%;); genButton2.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { MyClientBundle.INSTANCE.myCss().ensureInjected(); Button myButton = new Button(My button); myButton.getElement().setAttribute(style, position:absolute;top:60%;left:60%;); myButton.addStyleName(MyClientBundle.INSTANCE.globalCss().genButton() + + MyClientBundle.INSTANCE.myCss().myButton()); RootPanel.get().add(myButton); } }); RootPanel.get().add(genButton2); } } If you run it and click the 1st button then the 2nd button you'll see the background color of init button 2 (blue) change from blue to green. -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To unsubscribe from this group and stop receiving emails from it, send an email to google-web-toolkit+unsubscr...@googlegroups.com. To post to this group, send email to google-web-toolkit@googlegroups.com. Visit this group at http://groups.google.com/group/google-web-toolkit. For more options, visit https://groups.google.com/groups/opt_out.
Re: CssResource inheritance and avoiding rule repetition on injection, possibility of an @Require?
Hi Thomas, I think this part right here is the clarification I needed: - mapping class names to/from methods is based on the method name or a @ClassName annotation (the class name in the CSS file will thus be replaced with the unique name computed for the method) So, if you want to reuse a class name in a selector, then use @Import or @Shared+inheritance. The difference is that with @Shared you're forced to declare rules for the inherited/shared class names (to satisfy the 4th rule above), and the class name is accessible from outside the CSS file, from the CssResource interface (because of inheritance). I'd like to think I wasn't misunderstanding anything as I can't find anywhere in the doc where it says if you use @Shared with inheritance then you have to declare all the super cssresource selectors in the extending cssresource's css. It was for this reason that I was adding the extended CssResource's css to the source declaration of the extending cssresource. I thought that redeclaring the super's selectors (as empty rules of course) in the extending css again to avoid the GWT errors felt like a hack especially if you consider that any time you add a new class to the super css you would have to redeclare the same class in all extending css. This didn't feel as going in the direction of maintainability which is why I was redeclaring the css in the @source (even though the leads to duplicate rules being inserted). But as I see that this is the state of things currently I'd gladly redeclare the selectors as empty ones in all the extending css as seeing the error to fix is much better than inserting a whole bunch of duplicate css. For reference, with this in mind, the example I gave Jens above would need the following changes to work correctly without duplication or the precedence override issue: My.css would contain: .genButton,.genButtonOther{} /*redeclare super selectors as empty to avoid GWT error*/ .myButton{ background: red; } And the MyCss declaration in MyClientBundle would be changed simply to: @Source(My.css) MyCss myCss(); This is what you're referring to right? And thanks again for the detailed explanation, this will be extremely useful as a reference and complement to the doc. -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To unsubscribe from this group and stop receiving emails from it, send an email to google-web-toolkit+unsubscr...@googlegroups.com. To post to this group, send email to google-web-toolkit@googlegroups.com. Visit this group at http://groups.google.com/group/google-web-toolkit. For more options, visit https://groups.google.com/groups/opt_out.
Re: CssResource inheritance and avoiding rule repetition on injection, possibility of an @Require?
Yes, in the example I gave there's no clear need for the inheritance with MyCss, it's just there to show how inheritance would be setup to try to illustrate the issue I was referring to. It seems more and more like it's probably best to avoid inheritance and just go in the @Import direction. Even if you have to make sure the imported css are themselves injected or that you have to add those classes via their actual interfaces instead of as inherited, this seems to be more maintainable than the @Shared+inheritance and having to redeclare the super's selectors in the extended css. Thanks again for the help Thomas, it's much appreciated. On Sunday, February 23, 2014 11:09:59 PM UTC+1, Thomas Broyer wrote: On Sunday, February 23, 2014 10:13:00 PM UTC+1, GWTter wrote: Hi Thomas, I think this part right here is the clarification I needed: - mapping class names to/from methods is based on the method name or a @ClassName annotation (the class name in the CSS file will thus be replaced with the unique name computed for the method) So, if you want to reuse a class name in a selector, then use @Import or @Shared+inheritance. The difference is that with @Shared you're forced to declare rules for the inherited/shared class names (to satisfy the 4th rule above), and the class name is accessible from outside the CSS file, from the CssResource interface (because of inheritance). I'd like to think I wasn't misunderstanding anything as I can't find anywhere in the doc where it says if you use @Shared with inheritance then you have to declare all the super cssresource selectors in the extending cssresource's css. The basic rule is that each method's class name is used at least once in the stylesheet, whether this method is declared on the interface or inherited from a superinterface doesn't matter. @Shared is only about the unique name (obfuscated name) of the class name, it doesn't change the other rules. -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To unsubscribe from this group and stop receiving emails from it, send an email to google-web-toolkit+unsubscr...@googlegroups.com. To post to this group, send email to google-web-toolkit@googlegroups.com. Visit this group at http://groups.google.com/group/google-web-toolkit. For more options, visit https://groups.google.com/groups/opt_out.
Re: CssResource inheritance and avoiding rule repetition on injection, possibility of an @Require?
On Friday, February 21, 2014 5:09:36 PM UTC+1, Thomas Broyer wrote: On Thursday, February 20, 2014 10:51:29 PM UTC+1, GWTter wrote: Before anything, sorry Thomas, I think I may have just replied to you instead of just the topic (buttons bugged on me a bit), no-spam intended You're right I guess I did misunderstand if the imported with prefix doesn't in fact use a different obfuscation for the original selectors in the final css. So using the imported with prefix method isn't a viable workaround for avoid the precedence override on injection after all. And definitely, anything that will help clear it up. I can try to clarify my original example: You have the following, === Pseudocode === CssResouces: SuperCssResource, is injected onModuleLoad (global css) and has the following css as its source: .genButton{ color: black; } and LeafCssResource extends SuperCssResource css definitions here Why are you using an extends here? what do you expect from it? and more importantly what does your ClientBundle(s) looks like? I'm just setting up viable example when working with Resources. In this case specifically you would expect to be able to reference the styles from SuperCssResource via LeafCssResource and be able to use the selectors from SuperCssResource's css to qualify other selectors in LeafCssResource's css. The client bundle would simply look like: interface LeafClientBundle extends ClientBundle{ @Source({Leaf.css,Super.css}) LeafCssResource leafCss(); } Finally, we have the following 2 widgets: WidgetDisplayedFirst, has the following css via uibinder: MyCssResource: .myButton{ color: red; } And this button element: button class=genButton myButton / Using this, it means you have to ensure SuperCssResource is always injected *before* you createAndBindUi for the widget. Using .genButton.myButton (higher specificity) in the CSS would fix it. Yes, and in this example I would make sure to inject LeafCssResource which would thereby inject SuperCssResource. And adding .genButton to further the specificity of .myButton would indeed fix, however the point I'm trying to make is that I think it's unreasonable to either overqualify every selector for fear of having your styles be overridden because of precedence or that developers need to be aware of all the other styles they would be affecting when creating their own widget trying to qualify their selectors with a global cssresource. and WidgetDisplayedSecond which uses LeafCssResource -- Now if while my app is running I just display WidgetDisplayedFirst then it will display its button with the correct color: red because the .myButton was declared last and thus overrides the .genButton which has the same specificity. The issue comes into play if I then display WidgetDisplayedSecond. Since WidgetDisplayedSecond uses LeafCssResource this will cause SuperCssResource and its css to be injected when LeafCssResource is injected. No. Unless you have a @Shared annotation on SuperCssResource, the names from LeafCssResource will be different from those of SuperCssResource (so even if you referenced the same CSS file in @Source of your 2 ClientBundle methods, you'd have duplicated rules with different selectors, in no way would SuperCssResource be reinjected). See http://www.gwtproject.org/doc/latest/DevGuideClientBundle.html#Scope Yes, and I should have actually put the @Shared in the example. I didn't remember to add it because I was talking about reusing selectors in the leaf css to qualify in which case you would need to have the same names or else the qualifying would not work at all since the names would be different. So in this case I am talking about using the @Shared on the SuperCssResource and that you do see the selectors from SuperCssResource's css reinjected when you inject LeafCssResource. At this point because SuperCssResource has now been reinjected and thus is now the last one declared between it and MyCssResource, its .genButton rule now wins and causes WidgetDisplayedFirst's button to now have a color of black. With the code above, it shouldn't (now there could be bugs). So you're saying that SuperCssResource's css should not be included in with the css generated for LeafCssResource to be injected? If that's the case then I think there is a bug. Now, granted, this is how Css is intended to work in terms of the cascade. However, what I'm trying to say is that this is an example of a case where that is not the desired outcome if you want the button to keep the color of red as defined in its MyCssResource. You really only have 3 options in order to prevent this currently as far as I can see: 1) You over-qualify all of your selectors to ensure that they always have the most specifity and nothing
Re: CssResource inheritance and avoiding rule repetition on injection, possibility of an @Require?
Hi Jens, Yes, this duplication when extending CssResources is exactly the issue I'm trying to highlight above and mitigate with the @required idea. Your suggestion is what I was trying to cover with the third option I gave above on how to avoid the duplication and unintended precedence override (although you do go a bit more in-depth into what it would actually look like). And I apologize if I'm giving the impression that this is an active issue which I don't know how to workaround or remedy, that's not my intention. I'm trying to say that I've come across this issue several times before, and while I'm aware of the cause and the current workarounds/remedies (as I try to briefly summarize in the 3 options above), I feel that they are not satisfactory enough when considering the scaling and maintenance of large webapps. This is why I'm trying to discuss the feasibility and/or ramifications of something like the @required because I think it's somewhere GWT would be able to shine and facilitate the scalability and maintainability of these webapps. Thanks for you response. On Friday, February 21, 2014 12:36:08 AM UTC+1, Jens wrote: If you write a widget and that widget uses a button and that button has a default style defined in a BaseCssResource then you should use that BaseCssResource directly in your widget. You should not make your WidgetCssResource extend the BaseCssResource. Why? Because as soon as you do so, all the CSS rules of BaseCssResource will be duplicated (even if the BaseCssResource is annotated with @Shared, which will cause the issue you describe) and that is not what you want. Imagine you have 50 widgets and each of their CssResources extends the BaseCssResource. You would end up with 50 times the same base CSS code injected in your html page (either with the same CSS class names if you use @Shared on your BaseCssResource or with different CSS class names if not). What you should do in all your widgets is: ui:with field=bundle type= / ui:style .redbutton { background-color:red; } /ui:style button class={bundle.baseCss.button} {style.redbutton} And in your custom widget constructor you would do public MyWidget() { bundle.baseCss().ensureInjected(); } That way your base CSS is only injected once into your HTML page and all your widgets use these rules directly instead of duplicating them over and over again. It is also clear, just by looking at the xml/code, that the base CSS is shared by multiple widgets and that the ui:style CSS is only local to that single widget. -- J. -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To unsubscribe from this group and stop receiving emails from it, send an email to google-web-toolkit+unsubscr...@googlegroups.com. To post to this group, send email to google-web-toolkit@googlegroups.com. Visit this group at http://groups.google.com/group/google-web-toolkit. For more options, visit https://groups.google.com/groups/opt_out.
Re: CssResource inheritance and avoiding rule repetition on injection, possibility of an @Require?
Before anything, sorry Thomas, I think I may have just replied to you instead of just the topic (buttons bugged on me a bit), no-spam intended You're right I guess I did misunderstand if the imported with prefix doesn't in fact use a different obfuscation for the original selectors in the final css. So using the imported with prefix method isn't a viable workaround for avoid the precedence override on injection after all. And definitely, anything that will help clear it up. I can try to clarify my original example: You have the following, === Pseudocode === CssResouces: SuperCssResource, is injected onModuleLoad (global css) and has the following css as its source: .genButton{ color: black; } and LeafCssResource extends SuperCssResource css definitions here Finally, we have the following 2 widgets: WidgetDisplayedFirst, has the following css via uibinder: MyCssResource: .myButton{ color: red; } And this button element: button class=genButton myButton / and WidgetDisplayedSecond which uses LeafCssResource -- Now if while my app is running I just display WidgetDisplayedFirst then it will display its button with the correct color: red because the .myButton was declared last and thus overrides the .genButton which has the same specificity. The issue comes into play if I then display WidgetDisplayedSecond. Since WidgetDisplayedSecond uses LeafCssResource this will cause SuperCssResource and its css to be injected when LeafCssResource is injected. At this point because SuperCssResource has now been reinjected and thus is now the last one declared between it and MyCssResource, its .genButton rule now wins and causes WidgetDisplayedFirst's button to now have a color of black. Now, granted, this is how Css is intended to work in terms of the cascade. However, what I'm trying to say is that this is an example of a case where that is not the desired outcome if you want the button to keep the color of red as defined in its MyCssResource. You really only have 3 options in order to prevent this currently as far as I can see: 1) You over-qualify all of your selectors to ensure that they always have the most specifity and nothing will override them =CON: over-qualifying is not great for performance and is not as maintainable/cascadeable 2) You architect the app taking into account every single inheriting resource that is injected dynamically/on-demand to make sure that the injection of the extended resource does not cause an override in widgets who are using its classes. =CON: extremely unrealistic for non-trivial apps much less a real web-app 3)Do not extend CssResources, this way you can ensure that all resources and their associated styles are ONLY injected once in the lifetime of the app so there are no worries of unintended precedence overrides. =CON: greatly restricts selector qualifying especially when trying to localize css and reuse widgets I think you can see why these 3 options are unappealing. I'd argue that this isn't an issue for static web pages and the non-webapp era since you could relegate css to a page and count on the browser refresh to always provide a clean slate. However, in the web-app era this seems to be a big issue maintainability-wise if nothing else. This is why I was suggesting the @required functionality so the developer can have some assurance that styles won't be injected more than once and thus be assured that if someone displays their widget anywhere then it won't break something else. Hope that somewhat clears up what I'm trying to say. Thanks again for the discussion. On Thursday, February 20, 2014 1:15:48 PM UTC+1, Thomas Broyer wrote: On Thursday, February 20, 2014 12:08:28 AM UTC+1, GWTter wrote: On Wednesday, February 19, 2014 10:59:51 AM UTC+1, Thomas Broyer wrote: On Tuesday, February 18, 2014 6:38:36 PM UTC+1, GWTter wrote: Hi all, Let me just go with an example right off the bat. Let's say I have the following: === Pseudocode === SuperCssResource: This is injected onModuleLoad before anything else .genButton{ color: black; } Widget1 consists of: --- css --- MyCssResource: .myButton{ color: red; } --- html --- button class=genButton myButton / Widget2 consists of: --- css --- XCssResource extends SuperCssResource: ... rules that use classes from SuperCssResource --- html --- ...elements My problem is that if I display Widget1 first and then display Widget2 then the button in Widget1 will have a color of black instead of red. I know that this is expected behavior (GWT will merge the stylesheets together) since inheritance is basically the cssresource equivalent of CSS @import http://www.w3.org/TR/css3-cascade/#at-import Er, no. Inheritance of CssResource interfaces only deals with that: inheriting methods. The actual CSS backing the resource is given by the @Source
Re: CssResource inheritance and avoiding rule repetition on injection, possibility of an @Require?
On Wednesday, February 19, 2014 10:59:51 AM UTC+1, Thomas Broyer wrote: On Tuesday, February 18, 2014 6:38:36 PM UTC+1, GWTter wrote: Hi all, Let me just go with an example right off the bat. Let's say I have the following: === Pseudocode === SuperCssResource: This is injected onModuleLoad before anything else .genButton{ color: black; } Widget1 consists of: --- css --- MyCssResource: .myButton{ color: red; } --- html --- button class=genButton myButton / Widget2 consists of: --- css --- XCssResource extends SuperCssResource: ... rules that use classes from SuperCssResource --- html --- ...elements My problem is that if I display Widget1 first and then display Widget2 then the button in Widget1 will have a color of black instead of red. I know that this is expected behavior (GWT will merge the stylesheets together) since inheritance is basically the cssresource equivalent of CSS @import http://www.w3.org/TR/css3-cascade/#at-import Er, no. Inheritance of CssResource interfaces only deals with that: inheriting methods. The actual CSS backing the resource is given by the @Source annotation on your ClientBundle method, and if you use the same CSS file for 2 different CssResource interfaces, the CSS will be duplicated, because obfuscation of the class names is based on the interface fully-qualified name: http://www.gwtproject.org/doc/latest/DevGuideClientBundle.html#Scope (the order of the files in @Source will impact merging, just as they'd impact precedence in CSS). Hi Thomas, I guess I should have specified that it is inheritance along with specifying the source css that for all intents and purposes acts like CSS @import. I know that GWT will error if you extend the super resource and don't include it's source to match the classes, unless you're reimplementing them in the extending css resource which is not what I'm after and not the best idea IMHO. but I thought since this was GWT maybe there was a way to use inheritance in the sense that the inherited stylesheet would only be injected if not injected already. Is this currently possible? or could it be done with like a @Require annotation on the extending interface which would indicate that merging of the super stylesheet should not be done but rather a check would be made to see if it already exists and if not to inject it. This would easily resolve the specificity overriding issue in the example when it's not the desired behavior. I know I could also get around this by importing with a prefix, however I still don't like the idea of essentially reinjecting the same styles. If you don't want duplication, then you need a shared scope or imported scope. In any case, that means you should only use the shared/imported class names in more complex selectors, you shouldn't change the styles attached to the selector by itself. None of this applies if you use @external though, then it just works like standard CSS. I know, like you mentioned, that I could avoid the precedence override by importing with prefix for example. And my use case is only to increase specificity on the extending css resource, definitely not to change the super's rule def by redefining the super selector in the extending resource. But I'm not thrilled with essentially reinjecting all the same rules with just different prefixes and @external does really fit my need as I don't want to forgo the obfuscation. …and no, there's no way to say please make sure that other stylesheet is injected when injecting that one, because, to begin with, it'd be hard to define what that other stylesheet is (the interface is not enough, given that the @Source is set on the ClientBundle method, so you'd have to say this method from this ClientBundle interface, but it wouldn't even be enough: what if you composed that interface with another one and GWT.create()d the composed interface? should that @Require mean that GWT would do a GWT.create() of the lone interface, therefore duplicating efforts? –in all honesty, I haven't looked closely at the impact in terms of generated code and how it could be optimized, but it could limit future evolutions of ClientBundle in which code it generates, just to make sure that feature would still be correctly optimized–) Originally I did think that the interface would be enough but as you pointed out you can technically use another source css to attach to the interface when defining it in the Clientbundle, wouldn't necessarily always be the same one. I only thought of what I think you alluded to which would have been to specify the clientbundle such as in the @Required(MyClientbundle). In that composed case you mention isn't that what's currently happening? From what I can see in the generated css, the extended resources are basically inlined before the extending resource css and the whole thing becomes the final css which GWT
CssResource inheritance and avoiding rule repetition on injection, possibility of an @Require?
Hi all, Let me just go with an example right off the bat. Let's say I have the following: === Pseudocode === SuperCssResource: This is injected onModuleLoad before anything else .genButton{ color: black; } Widget1 consists of: --- css --- MyCssResource: .myButton{ color: red; } --- html --- button class=genButton myButton / Widget2 consists of: --- css --- XCssResource extends SuperCssResource: ... rules that use classes from SuperCssResource --- html --- ...elements My problem is that if I display Widget1 first and then display Widget2 then the button in Widget1 will have a color of black instead of red. I know that this is expected behavior (GWT will merge the stylesheets together) since inheritance is basically the cssresource equivalent of CSS @import http://www.w3.org/TR/css3-cascade/#at-import but I thought since this was GWT maybe there was a way to use inheritance in the sense that the inherited stylesheet would only be injected if not injected already. Is this currently possible? or could it be done with like a @Require annotation on the extending interface which would indicate that merging of the super stylesheet should not be done but rather a check would be made to see if it already exists and if not to inject it. This would easily resolve the specificity overriding issue in the example when it's not the desired behavior. I know I could also get around this by importing with a prefix, however I still don't like the idea of essentially reinjecting the same styles. Any thoughts? Much thanks in advance. -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To unsubscribe from this group and stop receiving emails from it, send an email to google-web-toolkit+unsubscr...@googlegroups.com. To post to this group, send email to google-web-toolkit@googlegroups.com. Visit this group at http://groups.google.com/group/google-web-toolkit. For more options, visit https://groups.google.com/groups/opt_out.
Re: RequestFactory issue with return operation processing if entities referenced in collection are processed after the collection they appear in is processed
Ended up actually opening an issue so just wanted to add the link: https://code.google.com/p/google-web-toolkit/issues/detail?id=8465 -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To unsubscribe from this group and stop receiving emails from it, send an email to google-web-toolkit+unsubscr...@googlegroups.com. To post to this group, send email to google-web-toolkit@googlegroups.com. Visit this group at http://groups.google.com/group/google-web-toolkit. For more options, visit https://groups.google.com/groups/opt_out.
Re: GWT + Postgres not working when deployed
Sounds like your postgresjdbc is not on the classpath when building the war. Have you made sure that it would be included in the classpath in the build.xml? On Thursday, October 17, 2013 5:20:01 PM UTC+2, Sean wrote: I have a project that talks to Postgres on the server side. I have the JDBC jar in the WEB-INF/lib folder. When I run it on my machine it works fine. But when I deploy it to a TOMCAT instance I get: java.sql.SQLException: No suitable driver found for jdbc:postgresql://localhost/grp91-in-out at java.sql.DriverManager.getConnection(Unknown Source) at java.sql.DriverManager.getConnection(Unknown Source) at com.ll.grp91.server.GroupInfoServiceImpl.getGroupMembers(GroupInfoServiceImpl.java:45) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) . I've also tried putting the .jar into the Tomcat/lib folder. Still no good. I've also tried restarting the service. Any ideas? -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To unsubscribe from this group and stop receiving emails from it, send an email to google-web-toolkit+unsubscr...@googlegroups.com. To post to this group, send email to google-web-toolkit@googlegroups.com. Visit this group at http://groups.google.com/group/google-web-toolkit. For more options, visit https://groups.google.com/groups/opt_out.
RequestFactory issue with return operation processing if entities referenced in collection are processed after the collection they appear in is processed
Hi all, I'm pretty sure this is RF issue but thought I'd post here first just in case. This involves the case where you update a an entity with a collection in which another entity is being persisted. When the response returns from the server and the operation messages are processed the following will occur: The ClientId is always zero when parsed out from collections and thus the simpleproxyID lookup in the collection is always done by serverkey. This means that if the collection contains an entity that was created on the client and persisted is processed first then a new simple proxy will be created for that serverkey combo. Now when the actual related entity is processed (afterward) the clientId will be populated and so the system will do the lookup by the client ID for the simpleproxyID and then associate that simpleproxyID with the serverkey which will override the simpleproxyID mapping created when the factory saw the serverkey first. Since that old mapping was overridden then the related proxy in the collection is not updated and returned as if it were still new with all fields unpopulated. This doesn't occur if the persisted entity is processed before the collection since after the IdFactory sees an entity that has both a clienID and a serverID then it will retrieve the original simpleproxyID and update it the mapping to using the serverID, thus when the serverID is used in the lookup to populate the collection afterward it will find the correct simpleproxyID. Again, this issue becomes all the more hard to spot since it ONLY occurs if the persisted entity is processed AFTER the collection it is referenced in. Since the order in which the operations being built client side is indeterminate (from the map) you can't tell when the entity will appear afterward. The fix I had in mind with the big problem being that the returnedProxies mapping must always map from the correct simpleproxyId: when processing the returned operations if the clientId 0, we should first check if there's already a simpleproxyid for the serverid, if there is then we need to swap that mapping in state.returnedProxies when the simpleproxyid returned from using the serverid and non-zero client id. That way the mapping in state.returnProxies always maps from the correct simpleproxyid. Since a call to getId always creates a simpleproxyid then we would also need to be able to access the ephemeralId map in order to check it without creating a simpleidproxy. Any thoughts? -Seth Client ID is always zero when parsed out in collections and thus the simpleproxyID lookup in the collection is always done by serverkey!!! This means that if the collection containing an entity that was created on the client and persisted is read first then a new simple proxy will be created for that serverkey combo and thus a new proxy will be associated to it. Then when the actual related entity is read (after the collection having been read) the client Id will be populated and so the system will do the lookup by the client ID for the simpleproxyID and then associate that simpleproxyID with the serverkey which will override the simpleproxyID mapping created when the factory saw the serverkey first. Since that old mapping was overridden then the related proxy in the collection is not updated and returned as if it were still new. This doesn't occur if the persisted entity is read before the collection since after the IdFactory sees an entity that has both a clienID and a serverID then it will store the associated simpleproxyID by then serverID, thus when the serverID is used in the lookup to populate the collection afterward it will find the correct simpleproxyID. Client ID is always zero when parsed out in collections and thus the simpleproxyID lookup in the collection is always done by serverkey!!! This means that if the collection containing an entity that was created on the client and persisted is read first then a new simple proxy will be created for that serverkey combo and thus a new proxy will be associated to it. Then when the actual related entity is read (after the collection having been read) the client Id will be populated and so the system will do the lookup by the client ID for the simpleproxyID and then associate that simpleproxyID with the serverkey which will override the simpleproxyID mapping created when the factory saw the serverkey first. Since that old mapping was overridden then the related proxy in the collection is not updated and returned as if it were still new. This doesn't occur if the persisted entity is read before the collection since after the IdFactory sees an entity that has both a clienID and a serverID then it will store the associated simpleproxyID by then serverID, thus when the serverID is used in the lookup to populate the collection afterward it will find the correct simpleproxyID. Client ID is always zero when parsed out in collections and thus the
Using @UiChild with Elements not widgets, is this even possible?
Hi all, Although the dochttp://www.gwtproject.org/javadoc/latest/com/google/gwt/uibinder/client/UiChild.html does say ...add a child widget to... in my searching it seems as if you can also use UiChild with DOM elements that extend com.google.gwt.dom.client.Element class. Thomas Broyer gives a brief description herehttps://groups.google.com/d/msg/google-web-toolkit/INTb5tmTyIE/J0hfkoOCXN0J. Since it's Thomas I'm thinking this should indeed work, however for the life of me I can't get it to. It always ends up in found unexpected child element: div when the child is a div element. From the comments and the doc it seems that this is the setup you're supposed to have: @UiChild(tagname = DivElement.TAG) public void addDiv(DivElement div) { //note: I've even tried adddiv just to be sure //do something } and in uibinder: my:customWidget divfoo/div /my:customWidget Do I just have code tunnel vision or is this not possible? Thanks in advance. -Seth -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To unsubscribe from this group and stop receiving emails from it, send an email to google-web-toolkit+unsubscr...@googlegroups.com. To post to this group, send email to google-web-toolkit@googlegroups.com. Visit this group at http://groups.google.com/group/google-web-toolkit. For more options, visit https://groups.google.com/groups/opt_out.
Re: what is the shortest code to make sure a dialogbox to stay inside an area when users try to move it out of that area?
The only way the the popup is going to drag (barring the use of native dnd) is if you adjust its top and left. If you can move your popup then you should already be adjusting the top and left in your code. The popup isn't going to be aware that it's moving (keeping in mind good design) so you should be adjusting its position based on the mouse position relative to the popup and its client coordinates. So just check your mouse position relative to the popup to see if its going out of bounds in which case you stop adjusting the popup position. On Saturday, October 5, 2013 7:41:43 PM UTC+2, Tom wrote: Ok, let say I want my dialogbox to be moved within an area that have 500px width 600px height. The rule is that If the users move the dialogbox out of that area, then the dialogbox will stay at where it was right at the point that it will be about to break the rule. int currentTop=dialogBox.getPopupTop(); int currentLeft=dialogBox.getPopupLeft(); Ex: if the left of the dialogbox 500px top 600px then .setPopupPosition(500, 600); if the left of the dialogbox 500px top 600px top0 then .setPopupPosition(500, currentTop); if the left of the dialogbox 500px 0 top 600px top0 then .setPopupPosition(currentLeft, currentTop); there are many other cases, So what is the shortest code to make sure a dialogbox to stay inside an area when users try to move it out of that area, see an ex like this https://gwt-dnd.appspot.com/#WindowExample U will see that u can't move the object out of the constrained area. -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To unsubscribe from this group and stop receiving emails from it, send an email to google-web-toolkit+unsubscr...@googlegroups.com. To post to this group, send email to google-web-toolkit@googlegroups.com. Visit this group at http://groups.google.com/group/google-web-toolkit. For more options, visit https://groups.google.com/groups/opt_out.
Re: what is the shortest code to make sure a dialogbox to stay inside an area when users try to move it out of that area?
I know you said shortest code but that's too arbitrary of a request considering that it would depend on your code too, On Saturday, October 5, 2013 10:09:35 PM UTC+2, GWTter wrote: The only way the the popup is going to drag (barring the use of native dnd) is if you adjust its top and left. If you can move your popup then you should already be adjusting the top and left in your code. The popup isn't going to be aware that it's moving (keeping in mind good design) so you should be adjusting its position based on the mouse position relative to the popup and its client coordinates. So just check your mouse position relative to the popup to see if its going out of bounds in which case you stop adjusting the popup position. On Saturday, October 5, 2013 7:41:43 PM UTC+2, Tom wrote: Ok, let say I want my dialogbox to be moved within an area that have 500px width 600px height. The rule is that If the users move the dialogbox out of that area, then the dialogbox will stay at where it was right at the point that it will be about to break the rule. int currentTop=dialogBox.getPopupTop(); int currentLeft=dialogBox.getPopupLeft(); Ex: if the left of the dialogbox 500px top 600px then .setPopupPosition(500, 600); if the left of the dialogbox 500px top 600px top0 then .setPopupPosition(500, currentTop); if the left of the dialogbox 500px 0 top 600px top0 then .setPopupPosition(currentLeft, currentTop); there are many other cases, So what is the shortest code to make sure a dialogbox to stay inside an area when users try to move it out of that area, see an ex like this https://gwt-dnd.appspot.com/#WindowExample U will see that u can't move the object out of the constrained area. -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To unsubscribe from this group and stop receiving emails from it, send an email to google-web-toolkit+unsubscr...@googlegroups.com. To post to this group, send email to google-web-toolkit@googlegroups.com. Visit this group at http://groups.google.com/group/google-web-toolkit. For more options, visit https://groups.google.com/groups/opt_out.
Re: what is the shortest code to make sure a dialogbox to stay inside an area when users try to move it out of that area?
Actually I realized that you were asking specifically about a Dialog box (my initial answer was based on basic DnD). If you're overriding the *Dragging methods then you can just check the mouse position from the events like I said. On Saturday, October 5, 2013 10:11:27 PM UTC+2, GWTter wrote: I know you said shortest code but that's too arbitrary of a request considering that it would depend on your code too, On Saturday, October 5, 2013 10:09:35 PM UTC+2, GWTter wrote: The only way the the popup is going to drag (barring the use of native dnd) is if you adjust its top and left. If you can move your popup then you should already be adjusting the top and left in your code. The popup isn't going to be aware that it's moving (keeping in mind good design) so you should be adjusting its position based on the mouse position relative to the popup and its client coordinates. So just check your mouse position relative to the popup to see if its going out of bounds in which case you stop adjusting the popup position. On Saturday, October 5, 2013 7:41:43 PM UTC+2, Tom wrote: Ok, let say I want my dialogbox to be moved within an area that have 500px width 600px height. The rule is that If the users move the dialogbox out of that area, then the dialogbox will stay at where it was right at the point that it will be about to break the rule. int currentTop=dialogBox.getPopupTop(); int currentLeft=dialogBox.getPopupLeft(); Ex: if the left of the dialogbox 500px top 600px then .setPopupPosition(500, 600); if the left of the dialogbox 500px top 600px top0 then .setPopupPosition(500, currentTop); if the left of the dialogbox 500px 0 top 600px top0 then .setPopupPosition(currentLeft, currentTop); there are many other cases, So what is the shortest code to make sure a dialogbox to stay inside an area when users try to move it out of that area, see an ex like this https://gwt-dnd.appspot.com/#WindowExample U will see that u can't move the object out of the constrained area. -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To unsubscribe from this group and stop receiving emails from it, send an email to google-web-toolkit+unsubscr...@googlegroups.com. To post to this group, send email to google-web-toolkit@googlegroups.com. Visit this group at http://groups.google.com/group/google-web-toolkit. For more options, visit https://groups.google.com/groups/opt_out.
Re: Using @UiChild with Elements not widgets, is this even possible?
I see. No problem though, thanks a lot for the explanation. I have a work around for this, I just wanted to make sure that I wasn't going that route if uichild on elements was possible. Thanks again Thomas. On Saturday, October 5, 2013 10:54:36 PM UTC+2, Thomas Broyer wrote: Ah sorry, hadn't looked carefully at your code: with @UiChild(tagname=div), UiBinder expects a my:div (my being the same as the containing widget): my:customWidget my:div ui:HTMLPanel foo /ui:HTMLPanel /my:div /my:customWidget That doesn't change the problem though: apparently (looking at the code), only widgets are allowed. With the above XML, the my:div only exists to call the @UiChild method, passing the HTMLPanel as argument. On Saturday, October 5, 2013 10:49:11 PM UTC+2, Thomas Broyer wrote: Looks like I was wrong and you can only use widgets (there's an explicit isImportedElement test that checks the element is within a namespace whose URI starts with “urn:import:”) BTW, isn't the error message rather “Expected child from a urn:import namespace, found div” ? On Saturday, October 5, 2013 9:56:14 PM UTC+2, GWTter wrote: Hi all, Although the dochttp://www.gwtproject.org/javadoc/latest/com/google/gwt/uibinder/client/UiChild.html does say ...add a child widget to... in my searching it seems as if you can also use UiChild with DOM elements that extend com.google.gwt.dom.client.Element class. Thomas Broyer gives a brief description herehttps://groups.google.com/d/msg/google-web-toolkit/INTb5tmTyIE/J0hfkoOCXN0J. Since it's Thomas I'm thinking this should indeed work, however for the life of me I can't get it to. It always ends up in found unexpected child element: div when the child is a div element. From the comments and the doc it seems that this is the setup you're supposed to have: @UiChild(tagname = DivElement.TAG) public void addDiv(DivElement div) { //note: I've even tried adddiv just to be sure //do something } and in uibinder: my:customWidget divfoo/div /my:customWidget Do I just have code tunnel vision or is this not possible? Thanks in advance. -Seth -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To unsubscribe from this group and stop receiving emails from it, send an email to google-web-toolkit+unsubscr...@googlegroups.com. To post to this group, send email to google-web-toolkit@googlegroups.com. Visit this group at http://groups.google.com/group/google-web-toolkit. For more options, visit https://groups.google.com/groups/opt_out.
Re: Using @UiChild with Elements not widgets, is this even possible?
Hi Thomas, Just one last thing, are there still no plans for uibinder element parsing functionality extension like the patch in this issuehttp://code.google.com/p/google-web-toolkit/issues/detail?id=4461? Would be preeetty awesome. On Saturday, October 5, 2013 10:54:36 PM UTC+2, Thomas Broyer wrote: Ah sorry, hadn't looked carefully at your code: with @UiChild(tagname=div), UiBinder expects a my:div (my being the same as the containing widget): my:customWidget my:div ui:HTMLPanel foo /ui:HTMLPanel /my:div /my:customWidget That doesn't change the problem though: apparently (looking at the code), only widgets are allowed. With the above XML, the my:div only exists to call the @UiChild method, passing the HTMLPanel as argument. On Saturday, October 5, 2013 10:49:11 PM UTC+2, Thomas Broyer wrote: Looks like I was wrong and you can only use widgets (there's an explicit isImportedElement test that checks the element is within a namespace whose URI starts with “urn:import:”) BTW, isn't the error message rather “Expected child from a urn:import namespace, found div” ? On Saturday, October 5, 2013 9:56:14 PM UTC+2, GWTter wrote: Hi all, Although the dochttp://www.gwtproject.org/javadoc/latest/com/google/gwt/uibinder/client/UiChild.html does say ...add a child widget to... in my searching it seems as if you can also use UiChild with DOM elements that extend com.google.gwt.dom.client.Element class. Thomas Broyer gives a brief description herehttps://groups.google.com/d/msg/google-web-toolkit/INTb5tmTyIE/J0hfkoOCXN0J. Since it's Thomas I'm thinking this should indeed work, however for the life of me I can't get it to. It always ends up in found unexpected child element: div when the child is a div element. From the comments and the doc it seems that this is the setup you're supposed to have: @UiChild(tagname = DivElement.TAG) public void addDiv(DivElement div) { //note: I've even tried adddiv just to be sure //do something } and in uibinder: my:customWidget divfoo/div /my:customWidget Do I just have code tunnel vision or is this not possible? Thanks in advance. -Seth -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To unsubscribe from this group and stop receiving emails from it, send an email to google-web-toolkit+unsubscr...@googlegroups.com. To post to this group, send email to google-web-toolkit@googlegroups.com. Visit this group at http://groups.google.com/group/google-web-toolkit. For more options, visit https://groups.google.com/groups/opt_out.
Re: RequestFactory module - queue, retry and non atomic batching..
I knew you guys wouldn't be implementing it that way, but the demo sort of gives that impression so the clarification is helpful. And as far as what most people are using, I'm not sure. However I have seen other discussions about implementing such authentication and retry queues via the default transport, so I think this would have a place. But we'll know for sure once one of the heavy hitters like Mr. Broyer weigh in. On Wednesday, July 24, 2013 7:54:02 AM UTC+2, salk31 wrote: Thanks, We use CAS (single sign on) so what we do is hide the retry/please wait message on auth failure and use an iframe to show the CAS login. If they login with that form (or somewhere else) then on a retry the app carries on. I've very little idea what auth most GWT/RequestFactory people are using... The demo is at least confusing though. I'll try and make it a bit more realistic. Cheers Sam -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To unsubscribe from this group and stop receiving emails from it, send an email to google-web-toolkit+unsubscr...@googlegroups.com. To post to this group, send email to google-web-toolkit@googlegroups.com. Visit this group at http://groups.google.com/group/google-web-toolkit. For more options, visit https://groups.google.com/groups/opt_out.
Re: RequestFactory .with() to access non-relation (primitive) properties?
Thanks for the reply. Yea :/, the work involved in fiddling with the service layer decorator and server-side RF at that level currently outweighs the benefit for my need which is what I was avoiding. I think if I fiddled at that level I might just end up making the .with() work with primitives also. It would be a nice to have as the property resolution already does this for the proxy, I can't see the extension of .with() to include this as being much more complex. And thanks, an annotation like PreAuthorize is something nice to keep in mind if you're going to go into the decorator. The other way I thought of doing it would be to have 2 different entity proxies for the same entity. That way you could keep and use 2 different property definitions/contracts for the same entity and use the most appropriate one. This would also keep the code cleaner and more cohesive as your functionality can be written around the appropriate contract, at least in my opinion. On Wednesday, July 24, 2013 9:24:40 AM UTC+2, salk31 wrote: I'm pretty sure by default you can't. If you feel the urge to fiddle you could do something in ServiceLayerDecorator.getProperty that picks up on some extra state with the request. I know the requirement you mean though. Some extra layer of fetch profile. Not sure it would be worth the extra complexity though. We do something similar though for security. We have @PreAuthorize on getters and setters and our ServiceLayerDecorator returns nulls when the user is not allowed to read that property and ignore any requests to write to those properties. On Wednesday, July 24, 2013 12:20:35 AM UTC+1, GWTter wrote: Hi all, I have a String username field on a user entity which I'd rather not populate whenever I request it which is why I have not defined the getter in the EntityProxy. This works fine, however there are some instances where I would like to have RequestFactory populate that string field when I retrieve the object. I know the documentation says that .with() is to be used to retrieve relations and in my tests I found that .with(username) does not pull it down either. Now I don't think it is possible but I wanted to make sure before implementing it another way that it is indeed not possible. It would be much cleaner to just be able to retrieve that property using .with() and being able to use the same request. Does anyone have an idea? Thanks in advance, -Seth -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To unsubscribe from this group and stop receiving emails from it, send an email to google-web-toolkit+unsubscr...@googlegroups.com. To post to this group, send email to google-web-toolkit@googlegroups.com. Visit this group at http://groups.google.com/group/google-web-toolkit. For more options, visit https://groups.google.com/groups/opt_out.
Re: RequestFactory .with() to access non-relation (primitive) properties?
Will do. My approach would involve distinct proxies since I don't think RF allows for inheritance on EntityProxys even if they both have @proxyfor defined because it looks for the methods defined exactly on the proxy (it definitely won't currently let you do it server-side with your locators). This is the only drawback I can see using this approach since you'd have to redefine fields that would be granted with inheritance. But I'll definitely give both a try again. On Wednesday, July 24, 2013 1:26:31 PM UTC+2, salk31 wrote: If you try the multiple Proxies approach could you report back to the group? Be interesting to hear if it works out nicely. Proxies being allowed to have their own inheritance tree etc seems powerful but I'm quite sure for good or evil. On Wednesday, July 24, 2013 12:20:11 PM UTC+1, GWTter wrote: Thanks for the reply. Yea :/, the work involved in fiddling with the service layer decorator and server-side RF at that level currently outweighs the benefit for my need which is what I was avoiding. I think if I fiddled at that level I might just end up making the .with() work with primitives also. It would be a nice to have as the property resolution already does this for the proxy, I can't see the extension of .with() to include this as being much more complex. And thanks, an annotation like PreAuthorize is something nice to keep in mind if you're going to go into the decorator. The other way I thought of doing it would be to have 2 different entity proxies for the same entity. That way you could keep and use 2 different property definitions/contracts for the same entity and use the most appropriate one. This would also keep the code cleaner and more cohesive as your functionality can be written around the appropriate contract, at least in my opinion. On Wednesday, July 24, 2013 9:24:40 AM UTC+2, salk31 wrote: I'm pretty sure by default you can't. If you feel the urge to fiddle you could do something in ServiceLayerDecorator.getProperty that picks up on some extra state with the request. I know the requirement you mean though. Some extra layer of fetch profile. Not sure it would be worth the extra complexity though. We do something similar though for security. We have @PreAuthorize on getters and setters and our ServiceLayerDecorator returns nulls when the user is not allowed to read that property and ignore any requests to write to those properties. On Wednesday, July 24, 2013 12:20:35 AM UTC+1, GWTter wrote: Hi all, I have a String username field on a user entity which I'd rather not populate whenever I request it which is why I have not defined the getter in the EntityProxy. This works fine, however there are some instances where I would like to have RequestFactory populate that string field when I retrieve the object. I know the documentation says that .with() is to be used to retrieve relations and in my tests I found that .with(username) does not pull it down either. Now I don't think it is possible but I wanted to make sure before implementing it another way that it is indeed not possible. It would be much cleaner to just be able to retrieve that property using .with() and being able to use the same request. Does anyone have an idea? Thanks in advance, -Seth -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To unsubscribe from this group and stop receiving emails from it, send an email to google-web-toolkit+unsubscr...@googlegroups.com. To post to this group, send email to google-web-toolkit@googlegroups.com. Visit this group at http://groups.google.com/group/google-web-toolkit. For more options, visit https://groups.google.com/groups/opt_out.
Re: RequestFactory .with() to access non-relation (primitive) properties?
Hi Thomas, This is great, I was hoping this was the case. I knew polymorphism worked well but I wasn't sure whether you could define EntityProxy super classes and that RF would still be able to find the super class properties from the child proxy without having to explicitly define them in the child EntityProxy. Thanks for the good news, RF just got way better. On Wednesday, July 24, 2013 2:40:29 PM UTC+2, Thomas Broyer wrote: On Wednesday, July 24, 2013 2:36:34 PM UTC+2, Thomas Broyer wrote: On Wednesday, July 24, 2013 1:39:19 PM UTC+2, GWTter wrote: Will do. My approach would involve distinct proxies since I don't think RF allows for inheritance on EntityProxys even if they both have @proxyfor defined because it looks for the methods defined exactly on the proxy (it definitely won't currently let you do it server-side with your locators). This is the only drawback I can see using this approach since you'd have to redefine fields that would be granted with inheritance. But I'll definitely give both a try again. Inheritance of proxies works well; RequestFactory even supports polymorphism (o in your case you'll want to test which exact proxy RF returns, and possibly split the common properties out to an interface used as the super-interface for 2 distinct, unrelated proxies) What won't work currently are generics and overrides with co-variant return types (see https://gwt-review.googlesource.com/#/c/3831/2/user/test/com/google/web/bindery/requestfactory/gwt/client/RequestFactoryGenericsTest.java for a gory test), but it otherwise works very well. BTW, see “Polymorphic type-mapping rules” in http://www.gwtproject.org/doc/latest/DevGuideRequestFactory.html#transportable And I'd even say that not only this is a supported use-case, it's actually the approach I'd recommend. -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To unsubscribe from this group and stop receiving emails from it, send an email to google-web-toolkit+unsubscr...@googlegroups.com. To post to this group, send email to google-web-toolkit@googlegroups.com. Visit this group at http://groups.google.com/group/google-web-toolkit. For more options, visit https://groups.google.com/groups/opt_out.
RequestFactory .with() to access non-relation (primitive) properties?
Hi all, I have a String username field on a user entity which I'd rather not populate whenever I request it which is why I have not defined the getter in the EntityProxy. This works fine, however there are some instances where I would like to have RequestFactory populate that string field when I retrieve the object. I know the documentation says that .with() is to be used to retrieve relations and in my tests I found that .with(username) does not pull it down either. Now I don't think it is possible but I wanted to make sure before implementing it another way that it is indeed not possible. It would be much cleaner to just be able to retrieve that property using .with() and being able to use the same request. Does anyone have an idea? Thanks in advance, -Seth -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To unsubscribe from this group and stop receiving emails from it, send an email to google-web-toolkit+unsubscr...@googlegroups.com. To post to this group, send email to google-web-toolkit@googlegroups.com. Visit this group at http://groups.google.com/group/google-web-toolkit. For more options, visit https://groups.google.com/groups/opt_out.
Re: RequestFactory module - queue, retry and non atomic batching..
Hi, The mechanism looks pretty good from the demo, nice. I would only say that I'm not sure I would use the same retry message for both network and authentication failures. Do you really want to keep retrying authentications for any other reason than a network failure? On Tuesday, July 23, 2013 12:27:58 PM UTC+2, salk31 wrote: I've added a Gmail like UI component and added it to the demo... On Thursday, July 18, 2013 6:42:15 PM UTC+1, salk31 wrote: Doh. Looked to see how long it would take to put it up on GAE and only took ten minutes to actually do it. http://gwt-rf-queue.appspot.com/ So good old DynaTableRf but with gwt-rf-queue but with the Transport replaced and a bit of extra UI. -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To unsubscribe from this group and stop receiving emails from it, send an email to google-web-toolkit+unsubscr...@googlegroups.com. To post to this group, send email to google-web-toolkit@googlegroups.com. Visit this group at http://groups.google.com/group/google-web-toolkit. For more options, visit https://groups.google.com/groups/opt_out.
Re: Anchor does not work in IE - very strange problem!
Hi Magnus, Just for the sake of thoroughness, are you sure that onCommand is even being called? Or is it that the click event is not being registered at all? On Friday, June 21, 2013 11:33:47 AM UTC+2, Magnus wrote: Hello, I have a very strange problem with some anchors, which occurrs only in IE and only in certain combinations of version and browser/document modes. The problem is, that *some* anchors will not work, allthough *all* anchors are built by the same method! There is a list of chess games and at the end of each row there are some actions, like Open or Analyze. The actions are realized as anchors. All the anchors for a row/game are put into a single panel, which is inserted into the list. When the problem occurrs, the first anchor Open will not work (meaning that nothing happens), while the second anchor Analyze works just fine. I believe that there must be a side effect somewhere, but I could not find it. Perhaps there is a problem with OnlyToBeUsedInGeneratedCodeStringBlessedAsSafeHtml. I cannot remember why I decided to use it... Any ideas how to find the bug or how to do it in another way? Thanks Magnus - private Panel getActions (Game game) { HorizontalPanel p = new HorizontalPanel (); addAction (p,CMD_OPEN,game.idx,Open); addAction (p,CMD_ANALYZE,game.idx,Analyze); } protected void addAction (Panel pnl,int cmd,int idx,String lbl) { Anchor a = createAnchor (cmd,idx,lbl,this); if (hasWidgets (pnl)) pnl.add(new HTML (nbsp;)); pnl.add(a); } private Anchor createAnchor (int cmd,int idx,String lbl,ClickHandler hdl) { SafeHtml h = new OnlyToBeUsedInGeneratedCodeStringBlessedAsSafeHtml(lbl); Anchor a = new Anchor (h); a.addClickHandler(hdl); Element e = a.getElement(); e.setAttribute(cmd,Integer.toString(cmd)); e.setAttribute(idx,Integer.toString(idx)); return (a); } public void onClick(ClickEvent evt) { Object o = evt.getSource(); if (o == null) return; if (!(o instanceof Anchor)) return; Anchor a = (Anchor) o; String t; t = a.getElement().getAttribute(cmd); int cmd = Integer.parseInt(t); t = a.getElement().getAttribute(idx); int idx = Integer.parseInt(t); onCommand (cmd,idx); } -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To unsubscribe from this group and stop receiving emails from it, send an email to google-web-toolkit+unsubscr...@googlegroups.com. To post to this group, send email to google-web-toolkit@googlegroups.com. Visit this group at http://groups.google.com/group/google-web-toolkit. For more options, visit https://groups.google.com/groups/opt_out.
Re: Anchor does not work in IE - very strange problem!
IE has had developer tools built in as far back as version 8, just press F12. If you're working with =IE7 then: IE dev toolshttp://www.microsoft.com/en-us/download/details.aspx?id=18359. Although it may work in other browsers or on the other anchor you want to see exactly what is or isn't occurring so you can narrow the scope of the issue, else it's a blind guessing game. I would put an alert or println in the onClick method to see first if the click is even registering for the first button, this will aid you in your analysis and you can then proceed from there. You haven't posted the onCommand method so we have no idea if the click is even registering in the first button case. On Friday, June 21, 2013 2:14:26 PM UTC+2, Magnus wrote: Hi, my problem is that I cannot analyze what happens. In chrome (where it works), I can examine the code and it looks like the code below. The two links are exactly the same, with a space between them realized as nbsp;. But maybe in IE the code looks different. The same for the JS code. IE always shows the code from the host page, so I cannot examine anything. I would be happy If I at least were able to see what is going on. Magnus - table cellspacing=0 cellpadding=0 style=padding-right: 10px; tbody tr td align=left style=vertical-align: top; a class=gwt-Anchor href=javascript:; cmd=1 idx=1481Öffnen/a /td td align=left style=vertical-align: top; div class=gwt-HTMLnbsp;/div /td td align=left style=vertical-align: top; a class=gwt-Anchor href=javascript:; cmd=3 idx=1481Analyse/a /td /tr /tbody /table -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To unsubscribe from this group and stop receiving emails from it, send an email to google-web-toolkit+unsubscr...@googlegroups.com. To post to this group, send email to google-web-toolkit@googlegroups.com. Visit this group at http://groups.google.com/group/google-web-toolkit. For more options, visit https://groups.google.com/groups/opt_out.
Re: RequestFactory, entity Id not populated when it reaches the server?
Hi Thomas, I just submitted the issue http://code.google.com/p/google-web-toolkit/issues/detail?id=8204, thanks again. On Tuesday, June 18, 2013 9:39:33 AM UTC+2, Thomas Broyer wrote: On Monday, June 17, 2013 9:55:09 PM UTC+2, GWTter wrote: Hi, So I went back using the dev tools, inspected the payload, and confirmed what I had before: the ID is not set at all in the user object payload. Just to make sure I wasn't crazy or missing something I created just a User object and tried to save it. I checked the payload in that request and could clearly see the ID set in the object. I've persisted/sent entities that had field values set with other entities before. The only difference I can make between the two cases is that in the previous case the entity I was setting as the field value was from a request to the server (I had not created it on the client). In this case the booking entity is created on the client and the user entity is also created on the client. Could this be the reason why it's failing? maybe because RF only lets you add entities as fields if they already have stableIDs? Thanks again in advance. If you can make a small repro case, please file an issue; it looks like a critical regression (which would also mean our test suite is weak) -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To unsubscribe from this group and stop receiving emails from it, send an email to google-web-toolkit+unsubscr...@googlegroups.com. To post to this group, send email to google-web-toolkit@googlegroups.com. Visit this group at http://groups.google.com/group/google-web-toolkit. For more options, visit https://groups.google.com/groups/opt_out.
Re: RequestFactory, entity Id not populated when it reaches the server?
Hi Ümit, I was actually checking the payload via the DefaultRequestTransport, I could see the user proxy object but I could not see the id anywhere in the payload. I had also put a println in the setID method in the DTO but it was never called which is what I thought was strange since the object seemed to go across the wire. I haven't checked the payload more formally with Chrome's developer tools, so I'll try that next like you suggested after dinner and see if that clears things up, will post back. Thanks for answering. On Monday, June 17, 2013 5:21:48 PM UTC+2, Ümit Seren wrote: For debugging: Check the RF payload with Chrome Developer Tools and put a breakpoint in the siteId() method of your backend DTO (it should be called after the object is created). On Monday, June 17, 2013 3:59:02 AM UTC+2, GWTter wrote: Hi all, I have the same setup as in question https://groups.google.com/d/msg/google-web-toolkit/GUQjZ98mL7s/MoA2gEMmS28J . I've included the relevant code from the question below for quick reference. My problem is that once the booking entity gets to the server and I look for the user, the user field is not null, but the id on the user is? Thus I can't check for the actual user. Is the user id not being set in the payload for some reason, or is it not building the user entity correctly on the server? Thanks a lot in advance for any help, much appreciated. -Seth MainRequestFactory.BookingRequest bookingRequest = reqFactory.bookingRequest(); BookingProxy bookingProxy = bookingRequest.create(BookingProxy.class); UserProxy userProxy = bookingRequest.create(UserProxy.class); userProxy.setId(12); bookingProxy.setUser(userProxy); RequestVoid persistRequest = bookingRequest.persist().using(bookingProxy); persistRequest.fire(new ReceiverVoid() { @Override public void onSuccess(Void response) { GWT.log(persisted); } }); -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To unsubscribe from this group and stop receiving emails from it, send an email to google-web-toolkit+unsubscr...@googlegroups.com. To post to this group, send email to google-web-toolkit@googlegroups.com. Visit this group at http://groups.google.com/group/google-web-toolkit. For more options, visit https://groups.google.com/groups/opt_out.
Re: RequestFactory, entity Id not populated when it reaches the server?
Hi, So I went back using the dev tools, inspected the payload, and confirmed what I had before: the ID is not set at all in the user object payload. Just to make sure I wasn't crazy or missing something I created just a User object and tried to save it. I checked the payload in that request and could clearly see the ID set in the object. I've persisted/sent entities that had field values set with other entities before. The only difference I can make between the two cases is that in the previous case the entity I was setting as the field value was from a request to the server (I had not created it on the client). In this case the booking entity is created on the client and the user entity is also created on the client. Could this be the reason why it's failing? maybe because RF only lets you add entities as fields if they already have stableIDs? Thanks again in advance. On Monday, June 17, 2013 6:02:53 PM UTC+2, GWTter wrote: Hi Ümit, I was actually checking the payload via the DefaultRequestTransport, I could see the user proxy object but I could not see the id anywhere in the payload. I had also put a println in the setID method in the DTO but it was never called which is what I thought was strange since the object seemed to go across the wire. I haven't checked the payload more formally with Chrome's developer tools, so I'll try that next like you suggested after dinner and see if that clears things up, will post back. Thanks for answering. On Monday, June 17, 2013 5:21:48 PM UTC+2, Ümit Seren wrote: For debugging: Check the RF payload with Chrome Developer Tools and put a breakpoint in the siteId() method of your backend DTO (it should be called after the object is created). On Monday, June 17, 2013 3:59:02 AM UTC+2, GWTter wrote: Hi all, I have the same setup as in question https://groups.google.com/d/msg/google-web-toolkit/GUQjZ98mL7s/MoA2gEMmS28J . I've included the relevant code from the question below for quick reference. My problem is that once the booking entity gets to the server and I look for the user, the user field is not null, but the id on the user is? Thus I can't check for the actual user. Is the user id not being set in the payload for some reason, or is it not building the user entity correctly on the server? Thanks a lot in advance for any help, much appreciated. -Seth MainRequestFactory.BookingRequest bookingRequest = reqFactory.bookingRequest(); BookingProxy bookingProxy = bookingRequest.create(BookingProxy.class); UserProxy userProxy = bookingRequest.create(UserProxy.class); userProxy.setId(12); bookingProxy.setUser(userProxy); RequestVoid persistRequest = bookingRequest.persist().using(bookingProxy); persistRequest.fire(new ReceiverVoid() { @Override public void onSuccess(Void response) { GWT.log(persisted); } }); -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To unsubscribe from this group and stop receiving emails from it, send an email to google-web-toolkit+unsubscr...@googlegroups.com. To post to this group, send email to google-web-toolkit@googlegroups.com. Visit this group at http://groups.google.com/group/google-web-toolkit. For more options, visit https://groups.google.com/groups/opt_out.
RequestFactory, entity Id not populated when it reaches the server?
Hi all, I have the same setup as in question https://groups.google.com/d/msg/google-web-toolkit/GUQjZ98mL7s/MoA2gEMmS28J . I've included the relevant code from the question below for quick reference. My problem is that once the booking entity gets to the server and I look for the user, the user field is not null, but the id on the user is? Thus I can't check for the actual user. Is the user id not being set in the payload for some reason, or is it not building the user entity correctly on the server? Thanks a lot in advance for any help, much appreciated. -Seth MainRequestFactory.BookingRequest bookingRequest = reqFactory.bookingRequest(); BookingProxy bookingProxy = bookingRequest.create(BookingProxy.class); UserProxy userProxy = bookingRequest.create(UserProxy.class); userProxy.setId(12); bookingProxy.setUser(userProxy); RequestVoid persistRequest = bookingRequest.persist().using(bookingProxy); persistRequest.fire(new ReceiverVoid() { @Override public void onSuccess(Void response) { GWT.log(persisted); } }); -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To unsubscribe from this group and stop receiving emails from it, send an email to google-web-toolkit+unsubscr...@googlegroups.com. To post to this group, send email to google-web-toolkit@googlegroups.com. Visit this group at http://groups.google.com/group/google-web-toolkit. For more options, visit https://groups.google.com/groups/opt_out.
Re: Uibinder inheriting and extending css classes (not just sharing them), best method?
Hi Ryan, I don't think you're way off, this is definitely a way to do it but there are a few caveats. You have to consider that in order to do it this way (assuming you're style is coming from another cssresource) you would have to: - declare the cssresource that had the original style via ui:with and then make sure it is injected since uibinder only takes care of injecting the ui:style. - (maintainability): you would have to make sure to set all the styles that were set on the object originally (or any future ones if other classes are added) including your new extension since setStyleName would clear them all out (this would make your local style less maintainable and have to know more about the external one than just what it wanted to extend). With the extension approach even if the original style is deleted the local extension would still apply with no errors. These were the things I was trying to avoid with this approach. Either way thanks for your reply, it should help clarify options. -Seth On Saturday, June 15, 2013 3:35:25 PM UTC+2, RyanZA wrote: I might be way off here, but is there any reason to extend myTestClass at all? You can have multiple css classes per element, so simply doing: ui:style .myLOCALTestClass{ ...more properties specific for this binder...} /ui:style And then assigning both myTestClass and myLOCALTestClass to the element should have the local specific changes overwriting the global ones. On Saturday, June 15, 2013 2:59:35 AM UTC+2, GWTter wrote: Hi Joseph, Thanks for the reply. You're right and I actually do this elsewhere extending cssresource interfaces and using the @shared which also works; it's definitely the way to go for larger extensions/additions that aren't as local. However what I like about the ui:binder approach is you don't have to worry about ensuring the styles are injected and less boilerplate to utilize the cssresource (even though it's not THAT much of a hassle). The other really nice thing is you can override/extend styles more easily with the approach I described for local changes (at least in my opinion). That's why I just wanted to see if there was a way to extend it without having to specify the src like in the approach above, or if it's even recommended. Thanks again, -Seth On Friday, June 14, 2013 6:01:12 PM UTC+2, Joseph Lust wrote: Seth, Currently I can do this by setting ui:style src='relativepath/MyCss.css in A and B and it works nicely, uibinder takes care of injecting the styles and everything. However I'm not sure if this is the best way. There's also the issue that if I move A and B then the relative path breaks (since absolute paths still aren't 100% functional issue#7230http://code.google.com/p/google-web-toolkit/issues/detail?id=7230). Does anyone have a clue or is this the preferred method? You might want to look at this previous answerhttps://groups.google.com/forum/?fromgroups#!searchin/google-web-toolkit/lust$20cssresource/google-web-toolkit/XDTiBioiIuo/ZFHeGB1jT0IJ. If you do the overriding in the Java class backing your UI binder, then the refactoring worries won't be a problem. You can still handle the refactoring in UiBinder, but you'll have to set Eclipse (or IDE of choice) to do FQN replacements in all .xml files. Sincerely, Joseph -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To unsubscribe from this group and stop receiving emails from it, send an email to google-web-toolkit+unsubscr...@googlegroups.com. To post to this group, send email to google-web-toolkit@googlegroups.com. Visit this group at http://groups.google.com/group/google-web-toolkit. For more options, visit https://groups.google.com/groups/opt_out.
Re: Uibinder inheriting and extending css classes (not just sharing them), best method?
Hi Joseph, Thanks for the reply. You're right and I actually do this elsewhere extending cssresource interfaces and using the @shared which also works; it's definitely the way to go for larger extensions/additions that aren't as local. However what I like about the ui:binder approach is you don't have to worry about ensuring the styles are injected and less boilerplate to utilize the cssresource (even though it's not THAT much of a hassle). The other really nice thing is you can override/extend styles more easily with the approach I described for local changes (at least in my opinion). That's why I just wanted to see if there was a way to extend it without having to specify the src like in the approach above, or if it's even recommended. Thanks again, -Seth On Friday, June 14, 2013 6:01:12 PM UTC+2, Joseph Lust wrote: Seth, Currently I can do this by setting ui:style src='relativepath/MyCss.css in A and B and it works nicely, uibinder takes care of injecting the styles and everything. However I'm not sure if this is the best way. There's also the issue that if I move A and B then the relative path breaks (since absolute paths still aren't 100% functional issue#7230http://code.google.com/p/google-web-toolkit/issues/detail?id=7230). Does anyone have a clue or is this the preferred method? You might want to look at this previous answerhttps://groups.google.com/forum/?fromgroups#!searchin/google-web-toolkit/lust$20cssresource/google-web-toolkit/XDTiBioiIuo/ZFHeGB1jT0IJ. If you do the overriding in the Java class backing your UI binder, then the refactoring worries won't be a problem. You can still handle the refactoring in UiBinder, but you'll have to set Eclipse (or IDE of choice) to do FQN replacements in all .xml files. Sincerely, Joseph -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To unsubscribe from this group and stop receiving emails from it, send an email to google-web-toolkit+unsubscr...@googlegroups.com. To post to this group, send email to google-web-toolkit@googlegroups.com. Visit this group at http://groups.google.com/group/google-web-toolkit. For more options, visit https://groups.google.com/groups/opt_out.
Uibinder inheriting and extending css classes (not just sharing them), best method?
Hi all, I have a Css resource that I would like to have inherited in other uibinders and be able to have these binders extend the css classes if need be. For example: Let's say I have .myTestClass{ ...properties...} in MyCss.css which is setup as a CssResource syntactically. Then I have UiBinder A and B. I want to inherit the class in both of them and extend the properties so that in binder A and B I would have ui:style .myTestClass{ ...more properties specific for this binder...} /ui:style finally when I would access style.myTestClass respectively in A and B all the properties would be available (including the inherited ones). Currently I can do this by setting ui:style src='relativepath/MyCss.css in A and B and it works nicely, uibinder takes care of injecting the styles and everything. However I'm not sure if this is the best way. There's also the issue that if I move A and B then the relative path breaks (since absolute paths still aren't 100% functional issue#7230http://code.google.com/p/google-web-toolkit/issues/detail?id=7230). Does anyone have a clue or is this the preferred method? Thanks in advance, -Seth -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To unsubscribe from this group and stop receiving emails from it, send an email to google-web-toolkit+unsubscr...@googlegroups.com. To post to this group, send email to google-web-toolkit@googlegroups.com. Visit this group at http://groups.google.com/group/google-web-toolkit. For more options, visit https://groups.google.com/groups/opt_out.
Re: Compiling Error (not Present in Eclipse) with Generics (requestfactory related interface)
Thanks yet again Thomas. Although I don't extend RequestContext there directly it does interact with it so that I have some interfaces extending both RequestContext and this interface which maybe causing the issue. So I think you're right. I added my post to the issue, hopefully it helps. I guess I can just take the long way for now. On Wednesday, May 29, 2013 4:58:53 PM UTC+2, Thomas Broyer wrote: On Tuesday, May 28, 2013 7:54:29 PM UTC+2, GWTter wrote: Hi all, I can't figure this out, haven't found anything on the interwebs, and it's really, really getting to me. I have the following interface: public interface PersistedClassRCP extends EntityProxy, N extends Serializable { RequestP save(P entityProxy,int version); RequestVoid delete(P entityProxy); RequestP findById(N id); } Now in Eclipse there are no errors, no warnings and I can run in Devmode just fine. However when I compile it I get the following error: .../PersistedClassRC.java:39: error: The type N cannot be used here [javac] RequestP findById(N id); [javac] I'm using Java 1.6.0_30 but have also tried it on 1.7.0_05 and 1.7.0_21 and all yield the same error. Is there something I'm not seeing, is this illegal? Please any help would be greatly appreciated, thanks in advance. Looks like issue 6794https://code.google.com/p/google-web-toolkit/issues/detail?id=6794 -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To unsubscribe from this group and stop receiving emails from it, send an email to google-web-toolkit+unsubscr...@googlegroups.com. To post to this group, send email to google-web-toolkit@googlegroups.com. Visit this group at http://groups.google.com/group/google-web-toolkit?hl=en. For more options, visit https://groups.google.com/groups/opt_out.
Compiling Error (not Present in Eclipse) with Generics (requestfactory related interface)
Hi all, I can't figure this out, haven't found anything on the interwebs, and it's really, really getting to me. I have the following interface: public interface PersistedClassRCP extends EntityProxy, N extends Serializable { RequestP save(P entityProxy,int version); RequestVoid delete(P entityProxy); RequestP findById(N id); } Now in Eclipse there are no errors, no warnings and I can run in Devmode just fine. However when I compile it I get the following error: .../PersistedClassRC.java:39: error: The type N cannot be used here [javac] RequestP findById(N id); [javac] I'm using Java 1.6.0_30 but have also tried it on 1.7.0_05 and 1.7.0_21 and all yield the same error. Is there something I'm not seeing, is this illegal? Please any help would be greatly appreciated, thanks in advance. -Seth -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To unsubscribe from this group and stop receiving emails from it, send an email to google-web-toolkit+unsubscr...@googlegroups.com. To post to this group, send email to google-web-toolkit@googlegroups.com. Visit this group at http://groups.google.com/group/google-web-toolkit?hl=en. For more options, visit https://groups.google.com/groups/opt_out.
Re: RequestFactory polymorphic arguments issue, is it possible?
Hi Thomas, In my case the BarProxyExt is pretty much a wrapper on the entity proxy. I wasn't sure how RF checked to see if the object given was the entity proxy it created, but thought that if it was a check based on the ID for example then any class implementing it (wrapping) should work. But you confirmed that RF is checking to see that it's the same entity proxy it created so polymorphism wouldn't work in this case. I just wanted to know how much RF needed to know about the implementation. Thanks for the answer. -Seth On Saturday, April 13, 2013 11:08:12 AM UTC+2, Thomas Broyer wrote: Not sure what you're trying to do but it's not a supported usecase. RequestFactory only supports proxies created by its RequestContexts. On Friday, April 12, 2013 5:32:15 PM UTC+2, GWTter wrote: Hi all, I'm having an issue using an implementation of an extended EntityProxy. I have the setup below, now when I call setBarProxyExt(BarProxyExt barProxyExt) I get no errors and I am sure that the setBar method is receiving the correct bar however the field is not set. This however is not the case if I inside setBarProxyExt(...) I call setBar(barProxyExt.getBarProxy()) instead of just on the barProxyExt. Now I'm thinking it may be because the setter is looking for a particular instance managed by the autobeans. But if that's not the case shouldn't this work? Many thanks in advance, -seth public interface BarProxy extends EntityProxy{...} public class BarProxyExt implements BarProxy{ private BarProxy mutableBarProxy; public BarProxy getBarProxy(){ return mutableBarProxy; } } public interface FooProxy extends EntityProxy{ public BarProxy getBar(); public void setBar(BarProxy bar); } public class FooProxyExt implements FooProxy{ private FooProxy mutableFooProxy; //this has already been set and is editable @Override public BarProxy getBar(){ return mutableFooProxy.getBar(); } @Override public void setBar(BarProxy bar){ mutableFooProxy.setBar(bar); } //issue is using this method public void setBarProxyExt(BarProxyExt barProxyExt){ setBar(barProxyExt); } ... } -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To unsubscribe from this group and stop receiving emails from it, send an email to google-web-toolkit+unsubscr...@googlegroups.com. To post to this group, send email to google-web-toolkit@googlegroups.com. Visit this group at http://groups.google.com/group/google-web-toolkit?hl=en. For more options, visit https://groups.google.com/groups/opt_out.
RequestFactory polymorphic arguments issue, is it possible?
Hi all, I'm having an issue using an implementation of an extended EntityProxy. I have the setup below, now when I call setBarProxyExt(BarProxyExt barProxyExt) I get no errors and I am sure that the setBar method is receiving the correct bar however the field is not set. This however is not the case if I inside setBarProxyExt(...) I call setBar(barProxyExt.getBarProxy()) instead of just on the barProxyExt. Now I'm thinking it may be because the setter is looking for a particular instance managed by the autobeans. But if that's not the case shouldn't this work? Many thanks in advance, -seth public interface BarProxy extends EntityProxy{...} public class BarProxyExt implements BarProxy{ private BarProxy mutableBarProxy; public BarProxy getBarProxy(){ return mutableBarProxy; } } public interface FooProxy extends EntityProxy{ public BarProxy getBar(); public void setBar(BarProxy bar); } public class FooProxyExt implements FooProxy{ private FooProxy mutableFooProxy; //this has already been set and is editable @Override public BarProxy getBar(){ return mutableFooProxy.getBar(); } @Override public void setBar(BarProxy bar){ mutableFooProxy.setBar(bar); } //issue is using this method public void setBarProxyExt(BarProxyExt barProxyExt){ setBar(barProxyExt); } ... } -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To unsubscribe from this group and stop receiving emails from it, send an email to google-web-toolkit+unsubscr...@googlegroups.com. To post to this group, send email to google-web-toolkit@googlegroups.com. Visit this group at http://groups.google.com/group/google-web-toolkit?hl=en. For more options, visit https://groups.google.com/groups/opt_out.
Re: Async call returning and executing before calling method finishes in Dev mode?
Hi Thomas, Yes, I was running it in Firefox, sorry for not mentioning it before. But I guess I stumbled onto the same bug here too. This puts me at ease now though since I know that there shouldn't be any concurrent execution: the calling method should finish before executing the async callback even if the async returns before the method finishes. Thanks again Thomas, I think I can safely say on behalf of everyone that you're much appreciated around here. -seth On Thursday, March 14, 2013 10:04:49 AM UTC+1, Thomas Broyer wrote: Because the requests are made by the browser, this shouldn't be different in prod vs. dev mode. Was it in Firefox? 'cause it has a bug where it could execute scripts concurrently in some cases: https://code.google.com/p/google-web-toolkit/issues/detail?id=7926 On Thursday, March 14, 2013 3:13:33 AM UTC+1, GWTter wrote: Hi all, I have a situation where, although extremely rare and really should only arise while debugging, one of my Async calls returns and executes its callback before the calling function/main loop is done with its execution. This has only been done in Dev mode and not prod. Now I know (or at least I'm pretty pretty sure) that in JS the async callback is pushed onto the event stack to evaluate next when it returns, thus it is called only after the calling JS execution returns and would not interrupt currently running JS to execute. Even the gwt doc states Although the code inside the onSuccess() method is defined inline with the call, it will not be executed until both the calling code returns back to the JavaScript main loop, and the result message from the server returns. at the end of https://developers.google.com/web-toolkit/doc/latest/DevGuideServerCommunication#DevGuideGettingUsedToAsyncCalls. So my question is am I seeing this behavior only because it is in Dev mode and is actually just because Java is running with threads or is this actually possible in Prod too? Thanks a lot in advance, -Seth -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To unsubscribe from this group and stop receiving emails from it, send an email to google-web-toolkit+unsubscr...@googlegroups.com. To post to this group, send email to google-web-toolkit@googlegroups.com. Visit this group at http://groups.google.com/group/google-web-toolkit?hl=en. For more options, visit https://groups.google.com/groups/opt_out.
Async call returning and executing before calling method finishes in Dev mode?
Hi all, I have a situation where, although extremely rare and really should only arise while debugging, one of my Async calls returns and executes its callback before the calling function/main loop is done with its execution. This has only been done in Dev mode and not prod. Now I know (or at least I'm pretty pretty sure) that in JS the async callback is pushed onto the event stack to evaluate next when it returns, thus it is called only after the calling JS execution returns and would not interrupt currently running JS to execute. Even the gwt doc states Although the code inside the onSuccess() method is defined inline with the call, it will not be executed until both the calling code returns back to the JavaScript main loop, and the result message from the server returns. at the end of https://developers.google.com/web-toolkit/doc/latest/DevGuideServerCommunication#DevGuideGettingUsedToAsyncCalls . So my question is am I seeing this behavior only because it is in Dev mode and is actually just because Java is running with threads or is this actually possible in Prod too? Thanks a lot in advance, -Seth -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To unsubscribe from this group and stop receiving emails from it, send an email to google-web-toolkit+unsubscr...@googlegroups.com. To post to this group, send email to google-web-toolkit@googlegroups.com. Visit this group at http://groups.google.com/group/google-web-toolkit?hl=en. For more options, visit https://groups.google.com/groups/opt_out.
Inline top and left properties cleared when removing child from parent?
Hi everyone, I noticed that when removing an absolutely positioned child which has top and left style properties set inline from its parent that these top and left are cleared from the inline style of the child. Thus if you remove the child from the parent and then add it back the child won't be positioned where you had set it too before removing it. Now I also saw that the inline style is cleared if the javascript returns to the browser event loop and notices that the element is no longer in the document. If you remove and add the child back before you return to the browser event loop then nothing is cleared. I guess my question is is that the expected behavior or is it a bug?. I thought it was strange and searched google and couldn't find anything referring to that behavior but maybe someone can enlighten me. Also, I found the same behavior in FF, Chrome, and IE (10) in dev mode and prod mode. I attached test code below: you can see that the child starts centered but when it is removed and then added back it is no longer centered and has no top and left inline properties. Thanks a lot in advance, -Seth CODE: AbsolutePanel parent = new AbsolutePanel(); SimplePanel child = new SimplePanel(); /** * This is the entry point method. */ public void onModuleLoad() { parent.getElement().setInnerText(Parent); parent.getElement().setAttribute(style, position:relative;top:25%;left:25%;height:200px;width:200px;background:grey;color:black;); child.getElement().setInnerText(Child); child.getElement().setAttribute(style, position:absolute;top:25%;left:25%;height:50%;width:50%;background:green;color:black;); parent.add(child); Button removeChildButton = new Button(Remove child from parent); removeChildButton.getElement().setAttribute(style, position:relative;); removeChildButton.addClickHandler(new ClickHandler(){ @Override public void onClick(ClickEvent event) { parent.remove(child); } }); Button addChildButton = new Button(Add child back to parent); addChildButton.getElement().setAttribute(style, position:relative;); addChildButton.addClickHandler(new ClickHandler(){ @Override public void onClick(ClickEvent event) { parent.add(child); } }); RootPanel.get().add(removeChildButton); RootPanel.get().add(addChildButton); RootPanel.get().add(parent); } -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To unsubscribe from this group and stop receiving emails from it, send an email to google-web-toolkit+unsubscr...@googlegroups.com. To post to this group, send email to google-web-toolkit@googlegroups.com. Visit this group at http://groups.google.com/group/google-web-toolkit?hl=en. For more options, visit https://groups.google.com/groups/opt_out.
Re: Inline top and left properties cleared when removing child from parent?
Yup, You guys are totally right. Changing the parent to a FlowPanel keeps the positioning when removing the child. I guess I was thinking from the doc that it would only be cleared if the positioning was modified while the child was a child of the absolutepanel (even though I know there's no code to support this functionality, just going from the doc), but it also clears it out if the child already has positioning before adding it to the absolutepanel. Also I had seen the changeToStaticPositioning method staring at me in the face before, I'm an idiot and/or another case of coding-too-long-blindness. Either way a Flowpanel works just fine. Thanks again Thomas and Jens, -Seth -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To unsubscribe from this group and stop receiving emails from it, send an email to google-web-toolkit+unsubscr...@googlegroups.com. To post to this group, send email to google-web-toolkit@googlegroups.com. Visit this group at http://groups.google.com/group/google-web-toolkit?hl=en. For more options, visit https://groups.google.com/groups/opt_out.
Re: Best serverside architecture(framework/stack) to use with GWT for large application...please show me the light
Hi Derek, After do some more research and receiving some more advice from others and another helpful answer on SO I'll be going with Spring (I agree about the XML, but they have introduced/incorporated more annotations since the earlier versions). However what you detailed still makes a lot of sense, and also very helpful, so I won't be ignoring it :). Although Guice and Spring might be over doing it, I think GIN on the client side is still worthwhile and you've pretty much sold me. Also the Activitys and Places. Thanks again for all the insight, much appreciated. -Seth On Tuesday, August 28, 2012 4:12:43 PM UTC+2, Derek wrote: Hi Seth, I personally am not a fan of Spring. I'm generally not a fan of anything that says, First, create a bunch of XML files (GWT excepted :) ). That's why I gravitated to Guice for all my DI needs. That said, Guice and Spring aren't quite the same thing, and you could leverage both of them. However, it is probably unnecessary to do both Guice and Spring in a GWT app. You can do anything with one DI framework that you can do with the other, and if you are leaning to Spring, you make a fine choice and you can ignore the rest of my post. At my workplace, the way we do GWT projects is we create a WebXml.java in the server package that implements GuiceServletContextListener and point the web.xml to that class. The WebXml contains servlet mapping modules, db connection modules, and other Guice modules as needed. On the client side, we generally use MVP structure with GIN. The MVP structure is a lifesaver for large projects in my mind. Our more recent projects have used the Activity and Places framework described on GWT's website with the main exception that the ClientFactory object is unnecessary since GIN provides the various resources instead of ClientFactory. At my work we've got two projects that clock in around 34k and 46k lines of Java (not including XML or other artifacts) as well as smaller projects and they use the methodology I described. Derek On Monday, August 27, 2012 5:18:13 PM UTC-4, GWTter wrote: Hi Derek, Thanks a lot for the reply. I did consider Guice for DI on the serverside but not sure if it would be redundant if using a framework like Spring. I do want to utilize RF though as it has a nice set of features which I'd like to include, e.g. caching and only delta posts. And I'll definitely take a look at GIN again since DI on my clientside might be pretty nice too. Thanks again, -Seth On Monday, August 27, 2012 4:05:05 PM UTC+2, Derek wrote: I use Guice on the server side and GIN on the client side. I generally use DTOs over GWT-RPC since RequestFactory isn't what I need / want to migrate to. On Saturday, August 25, 2012 7:48:12 PM UTC-4, GWTter wrote: Hi all, I've been doing research on this for the past 2, almost 3 days now. I feel like I've googled everything under the sun on the matter (including these forums) and am almost all tutorialed-out. Before I go into any more details on the question I just want to give a quick overview of the scope and plan for the project to see what will suit it best: -Large application, non-trivial -50+ DB tables -Large user base -User management/authentication/sessions -transactions -security -MVP (as per GWT recommendation) -focus on performance and scalability (naturally :), am using GWT after all) I've also read and watched all of the best practices on architecture for large applications (Google/GWT). Now in the last talk I could find on best architecture practices involving GWT was back in 2010 by Ray Ryan in which he states that they don't think JavaBeans and property change events work terribly well so it's better to use DTOs for the Model. My big questions are if this is still the belief and the recommended route, and if so, what should I be looking at in order to achieve this? a Framework? My preference would be to keep coding in Java on the serverside since I'm already doing so with GWT on the client. I've been investigating serverside frameworks and seem to have arrive at 2: Seam or Spring? However I can figure out which of these are best suited for the task. All of the doc I've found out there discussing the issue is at the most recent about a year old but most of it is from =2010 so it makes it even harder to tell considering that both of these frameworks have evolved considerably since then. There's also been the coming of JEE 6. Can anyone give any insight on who's best suited for the task, or what I should do to fulfill my requirements but stay inline with what is recommended by GWT? I know I only mentioned Seam and Spring since that's what I've been led to mostly, but I'm open to any suggestions that fit what I'm looking for. I've already ruled a couple of solutions such as Spring Roo for this kind of task. This is my first project of this scale
Re: Best serverside architecture(framework/stack) to use with GWT for large application...please show me the light
Hi Derek, Thanks a lot for the reply. I did consider Guice for DI on the serverside but not sure if it would be redundant if using a framework like Spring. I do want to utilize RF though as it has a nice set of features which I'd like to include, e.g. caching and only delta posts. And I'll definitely take a look at GIN again since DI on my clientside might be pretty nice too. Thanks again, -Seth On Monday, August 27, 2012 4:05:05 PM UTC+2, Derek wrote: I use Guice on the server side and GIN on the client side. I generally use DTOs over GWT-RPC since RequestFactory isn't what I need / want to migrate to. On Saturday, August 25, 2012 7:48:12 PM UTC-4, GWTter wrote: Hi all, I've been doing research on this for the past 2, almost 3 days now. I feel like I've googled everything under the sun on the matter (including these forums) and am almost all tutorialed-out. Before I go into any more details on the question I just want to give a quick overview of the scope and plan for the project to see what will suit it best: -Large application, non-trivial -50+ DB tables -Large user base -User management/authentication/sessions -transactions -security -MVP (as per GWT recommendation) -focus on performance and scalability (naturally :), am using GWT after all) I've also read and watched all of the best practices on architecture for large applications (Google/GWT). Now in the last talk I could find on best architecture practices involving GWT was back in 2010 by Ray Ryan in which he states that they don't think JavaBeans and property change events work terribly well so it's better to use DTOs for the Model. My big questions are if this is still the belief and the recommended route, and if so, what should I be looking at in order to achieve this? a Framework? My preference would be to keep coding in Java on the serverside since I'm already doing so with GWT on the client. I've been investigating serverside frameworks and seem to have arrive at 2: Seam or Spring? However I can figure out which of these are best suited for the task. All of the doc I've found out there discussing the issue is at the most recent about a year old but most of it is from =2010 so it makes it even harder to tell considering that both of these frameworks have evolved considerably since then. There's also been the coming of JEE 6. Can anyone give any insight on who's best suited for the task, or what I should do to fulfill my requirements but stay inline with what is recommended by GWT? I know I only mentioned Seam and Spring since that's what I've been led to mostly, but I'm open to any suggestions that fit what I'm looking for. I've already ruled a couple of solutions such as Spring Roo for this kind of task. This is my first project of this scale and the last thing I want to do is head down a path and figure out that I've wasted a lot of my and my team's time and energy because of some wrong decisions I made at the get-go. Thanks a lot in advance for your help, I really just want to figure this out so I can get back to coding instead of googling the ends of the earth ;). -Seth -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To view this discussion on the web visit https://groups.google.com/d/msg/google-web-toolkit/-/zhSt9Mez-HcJ. To post to this group, send email to google-web-toolkit@googlegroups.com. To unsubscribe from this group, send email to google-web-toolkit+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en.
Re: Best serverside architecture(framework/stack) to use with GWT for large application...please show me the light
Hi all, I also posted this question on SO and revised it a little since, but received one really great response so far if anyone is interested: http://stackoverflow.com/questions/12132213/recommended-serverside-architectureframework-stack-to-use-with-gwt-for-large-a -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To view this discussion on the web visit https://groups.google.com/d/msg/google-web-toolkit/-/8O06mXQjVUwJ. To post to this group, send email to google-web-toolkit@googlegroups.com. To unsubscribe from this group, send email to google-web-toolkit+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en.
Re: Spring Roo, relationship status with GWT? recommended for more apps more complex than basic CRUD?
Hi Thomas, Thanks for the suggestion, I'll definitely see if if the Spring community can shed a little more light. -seth On Saturday, August 25, 2012 10:29:53 AM UTC+2, Thomas Broyer wrote: On Saturday, August 25, 2012 4:23:44 AM UTC+2, GWTter wrote: Hi all, I came across Spring Roo recently and have put in a considerable amount of research as far as whether to use it for my app or not. However, I'm running into a couple of issues in my consideration. 1) GWT support: Spring Roo integration with GWT (more specifically the gwt addon for Roo to make MVP life easier) was presented back in 2010 in the IO keynote ( http://www.youtube.com/watch?v=GQHlhIIxCIc) and in a talk by Ray Ryan ( http://www.youtube.com/watch?v=M5x6E6ze1x8) and it seemed promising. However, in all my googling it seems like the gwt-roo presence/community has been sorely lacking, is it just me? Is GWT still on the Roo bandwagon? AFAICT the GWT add-on for Roo was a joint effort, but Google has not been involved after the first release (milestone?). For all your other questions, you'd rather ask the Spring Roo community then. -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To view this discussion on the web visit https://groups.google.com/d/msg/google-web-toolkit/-/GoKXcGhbdFQJ. To post to this group, send email to google-web-toolkit@googlegroups.com. To unsubscribe from this group, send email to google-web-toolkit+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en.
Best serverside architecture(framework/stack) to use with GWT for large application...please show me the light
Hi all, I've been doing research on this for the past 2, almost 3 days now. I feel like I've googled everything under the sun on the matter (including these forums) and am almost all tutorialed-out. Before I go into any more details on the question I just want to give a quick overview of the scope and plan for the project to see what will suit it best: -Large application, non-trivial -50+ DB tables -Large user base -User management/authentication/sessions -transactions -security -MVP (as per GWT recommendation) -focus on performance and scalability (naturally :), am using GWT after all) I've also read and watched all of the best practices on architecture for large applications (Google/GWT). Now in the last talk I could find on best architecture practices involving GWT was back in 2010 by Ray Ryan in which he states that they don't think JavaBeans and property change events work terribly well so it's better to use DTOs for the Model. My big questions are if this is still the belief and the recommended route, and if so, what should I be looking at in order to achieve this? a Framework? My preference would be to keep coding in Java on the serverside since I'm already doing so with GWT on the client. I've been investigating serverside frameworks and seem to have arrive at 2: Seam or Spring? However I can figure out which of these are best suited for the task. All of the doc I've found out there discussing the issue is at the most recent about a year old but most of it is from =2010 so it makes it even harder to tell considering that both of these frameworks have evolved considerably since then. There's also been the coming of JEE 6. Can anyone give any insight on who's best suited for the task, or what I should do to fulfill my requirements but stay inline with what is recommended by GWT? I know I only mentioned Seam and Spring since that's what I've been led to mostly, but I'm open to any suggestions that fit what I'm looking for. I've already ruled a couple of solutions such as Spring Roo for this kind of task. This is my first project of this scale and the last thing I want to do is head down a path and figure out that I've wasted a lot of my and my team's time and energy because of some wrong decisions I made at the get-go. Thanks a lot in advance for your help, I really just want to figure this out so I can get back to coding instead of googling the ends of the earth ;). -Seth -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To view this discussion on the web visit https://groups.google.com/d/msg/google-web-toolkit/-/ug9W05bFTUQJ. To post to this group, send email to google-web-toolkit@googlegroups.com. To unsubscribe from this group, send email to google-web-toolkit+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en.
Spring Roo, relationship status with GWT? recommended for more apps more complex than basic CRUD?
Hi all, I came across Spring Roo recently and have put in a considerable amount of research as far as whether to use it for my app or not. However, I'm running into a couple of issues in my consideration. 1) GWT support: Spring Roo integration with GWT (more specifically the gwt addon for Roo to make MVP life easier) was presented back in 2010 in the IO keynote (http://www.youtube.com/watch?v=GQHlhIIxCIc) and in a talk by Ray Ryan (http://www.youtube.com/watch?v=M5x6E6ze1x8) and it seemed promising. However, in all my googling it seems like the gwt-roo presence/community has been sorely lacking, is it just me? Is GWT still on the Roo bandwagon? The last doc on it by gwt (https://developers.google.com/web-toolkit/doc/latest/tutorial/roo-sts) still references 2.1, and if you following it currently, all the STS side stuff doesn't run properly (at least it didn't for me). 2) My app is going to be more complex than simple CRUD. Ideally, if I were to use Roo, I would only want it to do it's magic for the Model/domain layer, but leave the Presenter and View layers to me and not interfere with them. In all my searching I couldn't find any docs referencing this specifically (aside from some obscure blog posts which are even direct). Is it that it's not possible or too hairy? Or am I trying to have my cake and eat it too? 3) Finally, does the GWT community even recommend using Roo instead of just going with RequestFactory and just writing the services yourself (for Model/domain interaction)? Do the benefits of using Roo outweigh the drawbacks when aiming for a more-than-CRUD app? I love the idea of being able to declare a field in my entity and having compile time shell create the corresponding boilerplate stuff for the model and services communication, but not if it's going to be a huge headache trying to set it up so that it will do that properly. Thanks in advance for any suggestions, comments, help, I know this was a little longI really appreciate it. -Seth -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To view this discussion on the web visit https://groups.google.com/d/msg/google-web-toolkit/-/P1aVHQb73K8J. To post to this group, send email to google-web-toolkit@googlegroups.com. To unsubscribe from this group, send email to google-web-toolkit+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en.
Animation frame rate, possible to increase?
Hi all, I've written a move animation using the gwt way (extending animation class etc.) and it works great but I've noticed that when that if I keep the duration the same say 1000ms the longer the move distance is the choppier the animation seems (the animation is smoother the shorter the move distance is). I figured that this is because of the frame rate. In the doc the frame rate is stated to be non-fixed. Does anyone know if it is possible to increase the frame rate on the animation and if not can anyone suggest or have an idea on how to make the animation smoother? Really appreciate it, much thanks in advance. -Seth -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To view this discussion on the web visit https://groups.google.com/d/msg/google-web-toolkit/-/QmocBe-kB48J. To post to this group, send email to google-web-toolkit@googlegroups.com. To unsubscribe from this group, send email to google-web-toolkit+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en.
Re: Animation frame rate, possible to increase?
Hi Thomas, I'm testing on FF. I thought it was probably just that I'm doing the impossible like you said too because the code I have for the animation is as concise as can be, the onUpdate() is just 2 lines of code which are just updating the top and left of the element. Maybe if I make the duration a function of the distance so that the achieved frame rate would stay below 60Hz it would work out nicely. But thanks again for the back info you supplied, very helpful, really appreciate it. -Seth On Tuesday, April 17, 2012 12:07:36 PM UTC-4, Thomas Broyer wrote: On Tuesday, April 17, 2012 6:05:19 PM UTC+2, Thomas Broyer wrote: On Tuesday, April 17, 2012 5:43:03 PM UTC+2, GWTter wrote: Hi all, I've written a move animation using the gwt way (extending animation class etc.) and it works great but I've noticed that when that if I keep the duration the same say 1000ms the longer the move distance is the choppier the animation seems (the animation is smoother the shorter the move distance is). I figured that this is because of the frame rate. In the doc the frame rate is stated to be non-fixed. Does anyone know if it is possible to increase the frame rate on the animation No, it's not possible. and if not can anyone suggest or have an idea on how to make the animation smoother? Which browser were you testing this in? In Firefox and Chrome it should use requestAnimationFrame whose role is to defer to the browser the choice of the frame rate so that it stays responsive See https://developer.mozilla.org/en/DOM/window.requestAnimationFrame and http://code.google.com/p/google-web-toolkit/source/browse/trunk/user/src/com/google/gwt/animation/Animation.gwt.xml (and http://code.google.com/p/google-web-toolkit/source/browse/trunk/user/src/com/google/gwt/animation/client/AnimationSchedulerImplTimer.java which uses a timer that tries to achieve 60Hz frame rate) If your animation is not smooth, it's probably that it doesn't run at approx. 60Hz, which means that either your code in the animation or some other code runs too slowly to achieve that rate. Because timers and requestAnimationFrame (and basically everything in a browser) go through the event loop and task queues http://www.whatwg.org/specs/web-apps/current-work/multipage/webappapis.html#event-loops it can be that something else than the animation is pushing too many tasks in the queue and/or that those task run slowly, delaying other tasks and therefore prevent reaching the 60Hz target rate. Oh, of course, it can also be that you're trying to do the impossible, and the only solution would be to run the animation for a longer duration so that the moves between each frame (at the same frame rate) are smaller. -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To view this discussion on the web visit https://groups.google.com/d/msg/google-web-toolkit/-/y3cJB_TZzlYJ. To post to this group, send email to google-web-toolkit@googlegroups.com. To unsubscribe from this group, send email to google-web-toolkit+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en.
Re: Animation frame rate, possible to increase?
Hi Thomas, Actually, just had one last question. I went actually tested to make sure. I'm running my animation 1000ms like above and kept track of the number of times the onUpdate() function is being called. I'm getting an average of 12 calls/updates, this would mean that I'm achieving 12fps? Does that mean there's a problem? Thanks again. -Seth On Tuesday, April 17, 2012 12:07:36 PM UTC-4, Thomas Broyer wrote: On Tuesday, April 17, 2012 6:05:19 PM UTC+2, Thomas Broyer wrote: On Tuesday, April 17, 2012 5:43:03 PM UTC+2, GWTter wrote: Hi all, I've written a move animation using the gwt way (extending animation class etc.) and it works great but I've noticed that when that if I keep the duration the same say 1000ms the longer the move distance is the choppier the animation seems (the animation is smoother the shorter the move distance is). I figured that this is because of the frame rate. In the doc the frame rate is stated to be non-fixed. Does anyone know if it is possible to increase the frame rate on the animation No, it's not possible. and if not can anyone suggest or have an idea on how to make the animation smoother? Which browser were you testing this in? In Firefox and Chrome it should use requestAnimationFrame whose role is to defer to the browser the choice of the frame rate so that it stays responsive See https://developer.mozilla.org/en/DOM/window.requestAnimationFrame and http://code.google.com/p/google-web-toolkit/source/browse/trunk/user/src/com/google/gwt/animation/Animation.gwt.xml (and http://code.google.com/p/google-web-toolkit/source/browse/trunk/user/src/com/google/gwt/animation/client/AnimationSchedulerImplTimer.java which uses a timer that tries to achieve 60Hz frame rate) If your animation is not smooth, it's probably that it doesn't run at approx. 60Hz, which means that either your code in the animation or some other code runs too slowly to achieve that rate. Because timers and requestAnimationFrame (and basically everything in a browser) go through the event loop and task queues http://www.whatwg.org/specs/web-apps/current-work/multipage/webappapis.html#event-loops it can be that something else than the animation is pushing too many tasks in the queue and/or that those task run slowly, delaying other tasks and therefore prevent reaching the 60Hz target rate. Oh, of course, it can also be that you're trying to do the impossible, and the only solution would be to run the animation for a longer duration so that the moves between each frame (at the same frame rate) are smaller. -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To view this discussion on the web visit https://groups.google.com/d/msg/google-web-toolkit/-/sAsfTo2dYoYJ. To post to this group, send email to google-web-toolkit@googlegroups.com. To unsubscribe from this group, send email to google-web-toolkit+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en.
Re: Animation frame rate, possible to increase?
Hi Aidan, Thanks for the suggestion. I actually considered this initially, however the move positions are dynamic/I wouldn't know the positions ahead of time. Do you think it would be possible to do this by setting the element's transition attribute or would it have to be the animation attribute? Thanks again. -Seth On Tuesday, April 17, 2012 1:07:40 PM UTC-4, Aidan OK wrote: Depending on your needs, you could consider using css3 transitions (or even css3 animations, though they are much less supported) to get smoother animations. (they are generally hardware accelerated) http://css3.bradshawenterprises.com/ Its not a very 'GWT way' of course, as it doesn't support old browsers, but it does degrade gracefully, the elements will just move with no animation on these browsers. On Tue, Apr 17, 2012 at 5:44 PM, GWTter seth@gmail.com wrote: Hi Thomas, I'm testing on FF. I thought it was probably just that I'm doing the impossible like you said too because the code I have for the animation is as concise as can be, the onUpdate() is just 2 lines of code which are just updating the top and left of the element. Maybe if I make the duration a function of the distance so that the achieved frame rate would stay below 60Hz it would work out nicely. But thanks again for the back info you supplied, very helpful, really appreciate it. -Seth On Tuesday, April 17, 2012 12:07:36 PM UTC-4, Thomas Broyer wrote: On Tuesday, April 17, 2012 6:05:19 PM UTC+2, Thomas Broyer wrote: On Tuesday, April 17, 2012 5:43:03 PM UTC+2, GWTter wrote: Hi all, I've written a move animation using the gwt way (extending animation class etc.) and it works great but I've noticed that when that if I keep the duration the same say 1000ms the longer the move distance is the choppier the animation seems (the animation is smoother the shorter the move distance is). I figured that this is because of the frame rate. In the doc the frame rate is stated to be non-fixed. Does anyone know if it is possible to increase the frame rate on the animation No, it's not possible. and if not can anyone suggest or have an idea on how to make the animation smoother? Which browser were you testing this in? In Firefox and Chrome it should use requestAnimationFrame whose role is to defer to the browser the choice of the frame rate so that it stays responsive See https://developer.mozilla.**org/en/DOM/window.** requestAnimationFramehttps://developer.mozilla.org/en/DOM/window.requestAnimationFrame and http**://code.google.com/p/google-**web-toolkit/source/browse/** trunk/user/src/com/google/gwt/**animation/Animation.gwt.xmlhttp://code.google.com/p/google-web-toolkit/source/browse/trunk/user/src/com/google/gwt/animation/Animation.gwt.xml (and http://code.google.com/p/**google-web-toolkit/source/** browse/trunk/user/src/com/**google/gwt/animation/client/** AnimationSchedulerImplTimer.**javahttp://code.google.com/p/google-web-toolkit/source/browse/trunk/user/src/com/google/gwt/animation/client/AnimationSchedulerImplTimer.java which uses a timer that tries to achieve 60Hz frame rate) If your animation is not smooth, it's probably that it doesn't run at approx. 60Hz, which means that either your code in the animation or some other code runs too slowly to achieve that rate. Because timers and requestAnimationFrame (and basically everything in a browser) go through the event loop and task queues http://www.whatwg.org/specs/** web-apps/current-work/**multipage/webappapis.html#**event-loopshttp://www.whatwg.org/specs/web-apps/current-work/multipage/webappapis.html#event-loops it can be that something else than the animation is pushing too many tasks in the queue and/or that those task run slowly, delaying other tasks and therefore prevent reaching the 60Hz target rate. Oh, of course, it can also be that you're trying to do the impossible, and the only solution would be to run the animation for a longer duration so that the moves between each frame (at the same frame rate) are smaller. -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To view this discussion on the web visit https://groups.google.com/d/msg/google-web-toolkit/-/y3cJB_TZzlYJ. To post to this group, send email to google-web-toolkit@googlegroups.com. To unsubscribe from this group, send email to google-web-toolkit+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en. -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To view this discussion on the web visit https://groups.google.com/d/msg/google-web-toolkit/-/TGBoX4dC0LAJ. To post to this group, send email to google-web-toolkit@googlegroups.com. To unsubscribe from this group, send email to google-web-toolkit+unsubscr...@googlegroups.com
Re: Animation frame rate, possible to increase?
Sounds good, I'll give that a shot. Thanks again Aidan. -Seth On Tuesday, April 17, 2012 2:16:52 PM UTC-4, Aidan OK wrote: Dynamic positions work fine with transitions, how it works is you just say (by setting the transition property) 'I want to animate any changes to top,left,width,height' . You don't even need to specify the positions at that time, but from that point on, any-time you set the left/top/right/width, it will animate the changes automatically. They have some nice properties like automatically reversing a transition if you set some new values while the element is still animating too.. I guess it really comes down if you're prepared to have it not work in ie6-9, and deal with the inevitable quirks that come up due to css3 still being a work in progress :( On Tue, Apr 17, 2012 at 6:49 PM, GWTter seth@gmail.com wrote: Hi Aidan, Thanks for the suggestion. I actually considered this initially, however the move positions are dynamic/I wouldn't know the positions ahead of time. Do you think it would be possible to do this by setting the element's transition attribute or would it have to be the animation attribute? Thanks again. -Seth On Tuesday, April 17, 2012 1:07:40 PM UTC-4, Aidan OK wrote: Depending on your needs, you could consider using css3 transitions (or even css3 animations, though they are much less supported) to get smoother animations. (they are generally hardware accelerated) http://css3.**bradshawenterprises.com/http://css3.bradshawenterprises.com/ Its not a very 'GWT way' of course, as it doesn't support old browsers, but it does degrade gracefully, the elements will just move with no animation on these browsers. On Tue, Apr 17, 2012 at 5:44 PM, GWTter seth@gmail.com wrote: Hi Thomas, I'm testing on FF. I thought it was probably just that I'm doing the impossible like you said too because the code I have for the animation is as concise as can be, the onUpdate() is just 2 lines of code which are just updating the top and left of the element. Maybe if I make the duration a function of the distance so that the achieved frame rate would stay below 60Hz it would work out nicely. But thanks again for the back info you supplied, very helpful, really appreciate it. -Seth On Tuesday, April 17, 2012 12:07:36 PM UTC-4, Thomas Broyer wrote: On Tuesday, April 17, 2012 6:05:19 PM UTC+2, Thomas Broyer wrote: On Tuesday, April 17, 2012 5:43:03 PM UTC+2, GWTter wrote: Hi all, I've written a move animation using the gwt way (extending animation class etc.) and it works great but I've noticed that when that if I keep the duration the same say 1000ms the longer the move distance is the choppier the animation seems (the animation is smoother the shorter the move distance is). I figured that this is because of the frame rate. In the doc the frame rate is stated to be non-fixed. Does anyone know if it is possible to increase the frame rate on the animation No, it's not possible. and if not can anyone suggest or have an idea on how to make the animation smoother? Which browser were you testing this in? In Firefox and Chrome it should use requestAnimationFrame whose role is to defer to the browser the choice of the frame rate so that it stays responsive See https://developer.mozilla.org/en/DOM/window.**requestAnima** tionFramehttps://developer.mozilla.org/en/DOM/window.requestAnimationFrame and http**://code.**google.com/p/google-**web-** toolkit/source/browse/**trunk/**user/src/com/google/gwt/**animat** ion/Animation.gwt.xmlhttp://code.google.com/p/google-web-toolkit/source/browse/trunk/user/src/com/google/gwt/animation/Animation.gwt.xml (and http://code.google.com/p/google-web-toolkit/source/**brow** se/trunk/user/src/com/**google/**gwt/animation/client/**Animation** SchedulerImplTimer.**javahttp://code.google.com/p/google-web-toolkit/source/browse/trunk/user/src/com/google/gwt/animation/client/AnimationSchedulerImplTimer.java which uses a timer that tries to achieve 60Hz frame rate) If your animation is not smooth, it's probably that it doesn't run at approx. 60Hz, which means that either your code in the animation or some other code runs too slowly to achieve that rate. Because timers and requestAnimationFrame (and basically everything in a browser) go through the event loop and task queues http://www.whatwg.org/specs/**w** eb-apps/current-work/**multipage**/webappapis.html#**event-loopshttp://www.whatwg.org/specs/web-apps/current-work/multipage/webappapis.html#event-loops it can be that something else than the animation is pushing too many tasks in the queue and/or that those task run slowly, delaying other tasks and therefore prevent reaching the 60Hz target rate. Oh, of course, it can also be that you're trying to do the impossible, and the only solution would be to run the animation for a longer duration so
Re: CustomScrollPanel issue (extra div overlays generated impacting performance?)
Hi Deepak, Sure, I'll let you know once I add that functionality. Could be a little while as that currently is not a priority compared to my other items, but it definitely is needed and will be added. -Seth On Wednesday, April 4, 2012 4:30:01 PM UTC-4, Deepak Singh wrote: Ok. So request you to update me when you add this drag functionality. OR you can give me some hints/suggestion so that i could also try a bit. Will be waiting for this one. Thanks Deepak On Thu, Apr 5, 2012 at 12:47 AM, GWTter seth@gmail.com wrote: Hi Deepak, Yes, sorry, I forgot to mention that I hadn't added the drag functionality to the scrollbar since I had put that on hold to focus on some other issues. So you should see the functionality with the scroll wheel only currently. -Seth On Wednesday, April 4, 2012 1:26:44 PM UTC-4, Deepak Singh wrote: Hi Seth, It works. Thanks. But the scrolling happens only through the mouse wheel movement, it does not scroll by dragging the bar in up and down direction. It simply gets dragged like an image. On Wed, Apr 4, 2012 at 8:53 AM, GWTter seth@gmail.com wrote: Hi Deepak, The most you should need to do is the following: AbsolutePanel absPanel = new AbsolutePanel(); for(int i = 0; i 10; i++){ SimplePanel simp = new SimplePanel(); simp.setHeight(100px); simp.setWidth(500px); simp.getElement().getStyle().**setBackgroundColor(green); absPanel.add(simp); } MyScrollPanel scrollPanel = new MyScrollPanel(); scrollPanel.setHeight(500px)**; scrollPanel.setWidth(100px); scrollPanel.add(absPanel); RootPanel.get().add(**scrollPanel); If the above code does not give you a green scrollable box then you should recheck your code. With the code I sent you and the above code, you should have a custom scroll bar (not native). You should at the very least have the above code working. Hope this helps. Let me know. -Seth On Tuesday, April 3, 2012 1:59:33 PM UTC-4, Deepak Singh wrote: Hi Seth, I added the styles to myVerticalScrollBar. and added the entire page content to MyScrollpanel but still the default scrollbar is there. Its not overridden. On Mon, Apr 2, 2012 at 9:39 PM, GWTter seth@gmail.com wrote: Hi Deepak, Yes, you would need to apply some style to your scrollbar so that it at least has width (or height if you were using the horizontal scrollbar). If you look at the MyVerticalScrollBar constructor, the line 'this.setStyleName(**verticalSc**rollBar)' sets the style for the scrollbar. This style is not defined in the myScrollPanel.css as that CSS file is only meant for the cornerpanel styling. You would need to define the style verticalScrollBar in your main CSS file. For example: .verticalScrollBar{ width: 10px; background: blue; } Also, make sure that the content you're scrolling is within the MyScrollPanel, since only content within the MyScrollPanel will have the custom scroll bars, anything not within a CustomScrollPanel will still default to the native implementation. Hope this helps. -Seth -Seth On Monday, April 2, 2012 11:44:57 AM UTC-4, Deepak Singh wrote: Nothing more than what i sent you. I have just myScrollPanel.css as mention above. Could you pls guide me with css if i need to apply some css over vertical scrollbar? Thanks in advance Deepak On Mon, Apr 2, 2012 at 8:19 PM, GWTter seth@gmail.com wrote: Hi Deepak, This looks good to me. What style are you using for the vertical scrollbar? And thanks for the repost. -Seth On Sunday, April 1, 2012 3:50:12 PM UTC-4, Deepak Singh wrote: Hi Seth, I am posting my code here: myScrollPanel.css @CHARSET ISO-8859-1; .customScrollPanel{ } .customScrollPanelCorner{ opacity: 0.0; } MyScrollPanel.java public class MyScrollPanel extends CustomScrollPanel { /** * Extends the CustomScrollPanel Resources interface so that we can add our own css file and still reuse the Resources and Style interfaces from CustomScrollPanel * @author SL * */ public interface MyScrollResources extends Resources{ @Source(com/pdstechi/client/**m**yScrollPanel.css) Style customScrollPanelStyle(); } public MyScrollPanel(){ super((MyScrollResources)GWT.**c**reate(MyScrollResources.** class)**); this.setVerticalScrollbar(new MyVerticalScrollBar(), MyVerticalScrollBar.**getScrollB**arWidth()); // this.setHorizontalScrollbar(**ne**w MyHorizontalScrollBar(), MyHorizontalScrollBar.**getScrol** lBarHeight()); } } MyVerticalScrollBar.java public class MyVerticalScrollBar extends Widget implements VerticalScrollbar { private double scrollBarHeight = 0.0; private double scrollBarPosition = 0.0; private double scrollWindowPercentage = 1.0; private double scrollWindowHeight = 0; private int totalScrollContentHeight = 0; private static final int SCROLL_BAR_WIDTH = 10; private Element elem; public MyVerticalScrollBar
Re: CustomScrollPanel issue (extra div overlays generated impacting performance?)
Hi Deepak, Yes, sorry, I forgot to mention that I hadn't added the drag functionality to the scrollbar since I had put that on hold to focus on some other issues. So you should see the functionality with the scroll wheel only currently. -Seth On Wednesday, April 4, 2012 1:26:44 PM UTC-4, Deepak Singh wrote: Hi Seth, It works. Thanks. But the scrolling happens only through the mouse wheel movement, it does not scroll by dragging the bar in up and down direction. It simply gets dragged like an image. On Wed, Apr 4, 2012 at 8:53 AM, GWTter seth@gmail.com wrote: Hi Deepak, The most you should need to do is the following: AbsolutePanel absPanel = new AbsolutePanel(); for(int i = 0; i 10; i++){ SimplePanel simp = new SimplePanel(); simp.setHeight(100px); simp.setWidth(500px); simp.getElement().getStyle().setBackgroundColor(green); absPanel.add(simp); } MyScrollPanel scrollPanel = new MyScrollPanel(); scrollPanel.setHeight(500px); scrollPanel.setWidth(100px); scrollPanel.add(absPanel); RootPanel.get().add(scrollPanel); If the above code does not give you a green scrollable box then you should recheck your code. With the code I sent you and the above code, you should have a custom scroll bar (not native). You should at the very least have the above code working. Hope this helps. Let me know. -Seth On Tuesday, April 3, 2012 1:59:33 PM UTC-4, Deepak Singh wrote: Hi Seth, I added the styles to myVerticalScrollBar. and added the entire page content to MyScrollpanel but still the default scrollbar is there. Its not overridden. On Mon, Apr 2, 2012 at 9:39 PM, GWTter seth@gmail.com wrote: Hi Deepak, Yes, you would need to apply some style to your scrollbar so that it at least has width (or height if you were using the horizontal scrollbar). If you look at the MyVerticalScrollBar constructor, the line 'this.setStyleName(**verticalScrollBar)' sets the style for the scrollbar. This style is not defined in the myScrollPanel.css as that CSS file is only meant for the cornerpanel styling. You would need to define the style verticalScrollBar in your main CSS file. For example: .verticalScrollBar{ width: 10px; background: blue; } Also, make sure that the content you're scrolling is within the MyScrollPanel, since only content within the MyScrollPanel will have the custom scroll bars, anything not within a CustomScrollPanel will still default to the native implementation. Hope this helps. -Seth -Seth On Monday, April 2, 2012 11:44:57 AM UTC-4, Deepak Singh wrote: Nothing more than what i sent you. I have just myScrollPanel.css as mention above. Could you pls guide me with css if i need to apply some css over vertical scrollbar? Thanks in advance Deepak On Mon, Apr 2, 2012 at 8:19 PM, GWTter seth@gmail.com wrote: Hi Deepak, This looks good to me. What style are you using for the vertical scrollbar? And thanks for the repost. -Seth On Sunday, April 1, 2012 3:50:12 PM UTC-4, Deepak Singh wrote: Hi Seth, I am posting my code here: myScrollPanel.css @CHARSET ISO-8859-1; .customScrollPanel{ } .customScrollPanelCorner{ opacity: 0.0; } MyScrollPanel.java public class MyScrollPanel extends CustomScrollPanel { /** * Extends the CustomScrollPanel Resources interface so that we can add our own css file and still reuse the Resources and Style interfaces from CustomScrollPanel * @author SL * */ public interface MyScrollResources extends Resources{ @Source(com/pdstechi/client/**myScrollPanel.css) Style customScrollPanelStyle(); } public MyScrollPanel(){ super((MyScrollResources)GWT.**create(MyScrollResources.**class) ); this.setVerticalScrollbar(new MyVerticalScrollBar(), MyVerticalScrollBar.**getScrollBarWidth()); // this.setHorizontalScrollbar(**new MyHorizontalScrollBar(), MyHorizontalScrollBar.**getScrollBarHeight()); } } MyVerticalScrollBar.java public class MyVerticalScrollBar extends Widget implements VerticalScrollbar { private double scrollBarHeight = 0.0; private double scrollBarPosition = 0.0; private double scrollWindowPercentage = 1.0; private double scrollWindowHeight = 0; private int totalScrollContentHeight = 0; private static final int SCROLL_BAR_WIDTH = 10; private Element elem; public MyVerticalScrollBar(){ this.elem = Document.get().**createDivElement(); setElement(this.elem); this.setStyleName(**verticalScrollBar); } public static int getScrollBarWidth(){ return SCROLL_BAR_WIDTH; } @Override public int getMaximumVerticalScrollPositi**on() { return (int)(this.scrollWindowHeight-**this.scrollBarHeight); } @Override public int getMinimumVerticalScrollPositi**on() { return 0; } @Override public int getVerticalScrollPosition() { return (int)this.scrollBarPosition; } @Override public void setVerticalScrollPosition(int position
Re: CustomScrollPanel issue (extra div overlays generated impacting performance?)
Hi Deepak, The most you should need to do is the following: AbsolutePanel absPanel = new AbsolutePanel(); for(int i = 0; i 10; i++){ SimplePanel simp = new SimplePanel(); simp.setHeight(100px); simp.setWidth(500px); simp.getElement().getStyle().setBackgroundColor(green); absPanel.add(simp); } MyScrollPanel scrollPanel = new MyScrollPanel(); scrollPanel.setHeight(500px); scrollPanel.setWidth(100px); scrollPanel.add(absPanel); RootPanel.get().add(scrollPanel); If the above code does not give you a green scrollable box then you should recheck your code. With the code I sent you and the above code, you should have a custom scroll bar (not native). You should at the very least have the above code working. Hope this helps. Let me know. -Seth On Tuesday, April 3, 2012 1:59:33 PM UTC-4, Deepak Singh wrote: Hi Seth, I added the styles to myVerticalScrollBar. and added the entire page content to MyScrollpanel but still the default scrollbar is there. Its not overridden. On Mon, Apr 2, 2012 at 9:39 PM, GWTter seth@gmail.com wrote: Hi Deepak, Yes, you would need to apply some style to your scrollbar so that it at least has width (or height if you were using the horizontal scrollbar). If you look at the MyVerticalScrollBar constructor, the line 'this.setStyleName(verticalScrollBar)' sets the style for the scrollbar. This style is not defined in the myScrollPanel.css as that CSS file is only meant for the cornerpanel styling. You would need to define the style verticalScrollBar in your main CSS file. For example: .verticalScrollBar{ width: 10px; background: blue; } Also, make sure that the content you're scrolling is within the MyScrollPanel, since only content within the MyScrollPanel will have the custom scroll bars, anything not within a CustomScrollPanel will still default to the native implementation. Hope this helps. -Seth -Seth On Monday, April 2, 2012 11:44:57 AM UTC-4, Deepak Singh wrote: Nothing more than what i sent you. I have just myScrollPanel.css as mention above. Could you pls guide me with css if i need to apply some css over vertical scrollbar? Thanks in advance Deepak On Mon, Apr 2, 2012 at 8:19 PM, GWTter seth@gmail.com wrote: Hi Deepak, This looks good to me. What style are you using for the vertical scrollbar? And thanks for the repost. -Seth On Sunday, April 1, 2012 3:50:12 PM UTC-4, Deepak Singh wrote: Hi Seth, I am posting my code here: myScrollPanel.css @CHARSET ISO-8859-1; .customScrollPanel{ } .customScrollPanelCorner{ opacity: 0.0; } MyScrollPanel.java public class MyScrollPanel extends CustomScrollPanel { /** * Extends the CustomScrollPanel Resources interface so that we can add our own css file and still reuse the Resources and Style interfaces from CustomScrollPanel * @author SL * */ public interface MyScrollResources extends Resources{ @Source(com/pdstechi/client/**m**yScrollPanel.css) Style customScrollPanelStyle(); } public MyScrollPanel(){ super((MyScrollResources)GWT.**c**reate(MyScrollResources.**class)**); this.setVerticalScrollbar(new MyVerticalScrollBar(), MyVerticalScrollBar.**getScrollB**arWidth()); // this.setHorizontalScrollbar(**ne**w MyHorizontalScrollBar(), MyHorizontalScrollBar.**getScrol**lBarHeight()); } } MyVerticalScrollBar.java public class MyVerticalScrollBar extends Widget implements VerticalScrollbar { private double scrollBarHeight = 0.0; private double scrollBarPosition = 0.0; private double scrollWindowPercentage = 1.0; private double scrollWindowHeight = 0; private int totalScrollContentHeight = 0; private static final int SCROLL_BAR_WIDTH = 10; private Element elem; public MyVerticalScrollBar(){ this.elem = Document.get().**createDivElemen**t(); setElement(this.elem); this.setStyleName(**verticalScr**ollBar); } public static int getScrollBarWidth(){ return SCROLL_BAR_WIDTH; } @Override public int getMaximumVerticalScrollPosition() { return (int)(this.scrollWindowHeight-this.scrollBarHeight); } @Override public int getMinimumVerticalScrollPosition() { return 0; } @Override public int getVerticalScrollPosition() { return (int)this.scrollBarPosition; } @Override public void setVerticalScrollPosition(int position) { this.scrollBarPosition = Math.floor(position*this.**scrol** lWindowPercentage); //make sure we don't go out of bounds with the scrollbar if(this.scrollBarPosition this.**getMaximumVerticalScrollP**ositi** on()){ this.scrollBarPosition = this.**getMaximumVerticalScrollP**ositi** on(); } this.elem.getStyle().setTop(**th**is.scrollBarPosition, Unit.PX); } @Override public HandlerRegistration addScrollHandler(ScrollHandler handler) { Event.sinkEvents(this.**getEleme**nt(), Event.ONSCROLL); return this.addHandler(handler, ScrollEvent.getType()); } @Override public Widget asWidget() { return
Re: CustomScrollPanel issue (extra div overlays generated impacting performance?)
Hi Deepak, This looks good to me. What style are you using for the vertical scrollbar? And thanks for the repost. -Seth On Sunday, April 1, 2012 3:50:12 PM UTC-4, Deepak Singh wrote: Hi Seth, I am posting my code here: myScrollPanel.css @CHARSET ISO-8859-1; .customScrollPanel{ } .customScrollPanelCorner{ opacity: 0.0; } MyScrollPanel.java public class MyScrollPanel extends CustomScrollPanel { /** * Extends the CustomScrollPanel Resources interface so that we can add our own css file and still reuse the Resources and Style interfaces from CustomScrollPanel * @author SL * */ public interface MyScrollResources extends Resources{ @Source(com/pdstechi/client/myScrollPanel.css) Style customScrollPanelStyle(); } public MyScrollPanel(){ super((MyScrollResources)GWT.create(MyScrollResources.class)); this.setVerticalScrollbar(new MyVerticalScrollBar(), MyVerticalScrollBar.getScrollBarWidth()); // this.setHorizontalScrollbar(new MyHorizontalScrollBar(), MyHorizontalScrollBar.getScrollBarHeight()); } } MyVerticalScrollBar.java public class MyVerticalScrollBar extends Widget implements VerticalScrollbar { private double scrollBarHeight = 0.0; private double scrollBarPosition = 0.0; private double scrollWindowPercentage = 1.0; private double scrollWindowHeight = 0; private int totalScrollContentHeight = 0; private static final int SCROLL_BAR_WIDTH = 10; private Element elem; public MyVerticalScrollBar(){ this.elem = Document.get().createDivElement(); setElement(this.elem); this.setStyleName(verticalScrollBar); } public static int getScrollBarWidth(){ return SCROLL_BAR_WIDTH; } @Override public int getMaximumVerticalScrollPosition() { return (int)(this.scrollWindowHeight-this.scrollBarHeight); } @Override public int getMinimumVerticalScrollPosition() { return 0; } @Override public int getVerticalScrollPosition() { return (int)this.scrollBarPosition; } @Override public void setVerticalScrollPosition(int position) { this.scrollBarPosition = Math.floor(position*this.scrollWindowPercentage); //make sure we don't go out of bounds with the scrollbar if(this.scrollBarPosition this.getMaximumVerticalScrollPosition()){ this.scrollBarPosition = this.getMaximumVerticalScrollPosition(); } this.elem.getStyle().setTop(this.scrollBarPosition, Unit.PX); } @Override public HandlerRegistration addScrollHandler(ScrollHandler handler) { Event.sinkEvents(this.getElement(), Event.ONSCROLL); return this.addHandler(handler, ScrollEvent.getType()); } @Override public Widget asWidget() { return this; } @Override public int getScrollHeight() { return this.totalScrollContentHeight; } @Override public void setScrollHeight(int height) { //TODO: HAVE TO FIND A WAY TO GET THE SIZE OF THE CORNER BOX, OR BETTER YET, IF THE CORNER BOX IS ENABLED BECAUSE THE HORIZONTAL SCROLL BAR IS ALSO VISIBLE this.totalScrollContentHeight = height; this.scrollWindowHeight = this.elem.getParentElement().getOffsetHeight(); this.scrollWindowPercentage = (height 0) ? Math.min(1.0,this.scrollWindowHeight/height):1.0; this.scrollBarHeight = Math.max(SCROLL_BAR_WIDTH,Math.floor(this.scrollWindowHeight*this.scrollWindowPercentage)); this.elem.getStyle().setHeight(this.scrollBarHeight, Unit.PX); } } All these classes are in my client package. I just want that browser default varticalscrollbar should change its look. Also, I am reposting the original msg with attached code again to the group. Thanks Deepak On Sun, Apr 1, 2012 at 11:01 PM, GWTter seth@gmail.com wrote: Hi Deepak, You would have to post your code. Did you make sure to style your vertical scrollbar, create the MyScrollPanel and set its verticalScrollbar with the one you created? In the code I sent you the vertical scrollbar has a width of 10px, you should style the vertical scrollbar to be within that width. Also, I can't seem to find the repost of the original message with the attached code I sent you anywhere in this thread, am I looking in the wrong place. Thanks. -Seth On Saturday, March 31, 2012 4:27:42 PM UTC-4, Deepak Singh wrote: Hi Seth, I copied your classes and css in my client package. It compiled fine. When i run the applicatio in dev mode, the browser default scrollbar is not overridden. It is same as default. What can i do to override the native one ? On Sun, Apr 1, 2012 at 1:05 AM, Deepak Singh deepaksingh...@gmail.comwrote: Thank you Seth. I would give it a try. Thats already reposted and is in the thread. Thanks Deepak On Sat, Mar 31, 2012 at 10:59 PM, GWTter seth@gmail.com wrote: Hi Deepak, This is all that's in the css file as the only important class is the corner that I've set to be transparent: .customScrollPanel{ } .customScrollPanelCorner{ opacity: 0.0; } As for how to use the vertical scroll bar to override the native
Re: CustomScrollPanel issue (extra div overlays generated impacting performance?)
Hi Deepak, Yes, you would need to apply some style to your scrollbar so that it at least has width (or height if you were using the horizontal scrollbar). If you look at the MyVerticalScrollBar constructor, the line 'this.setStyleName(verticalScrollBar)' sets the style for the scrollbar. This style is not defined in the myScrollPanel.css as that CSS file is only meant for the cornerpanel styling. You would need to define the style verticalScrollBar in your main CSS file. For example: .verticalScrollBar{ width: 10px; background: blue; } Also, make sure that the content you're scrolling is within the MyScrollPanel, since only content within the MyScrollPanel will have the custom scroll bars, anything not within a CustomScrollPanel will still default to the native implementation. Hope this helps. -Seth -Seth On Monday, April 2, 2012 11:44:57 AM UTC-4, Deepak Singh wrote: Nothing more than what i sent you. I have just myScrollPanel.css as mention above. Could you pls guide me with css if i need to apply some css over vertical scrollbar? Thanks in advance Deepak On Mon, Apr 2, 2012 at 8:19 PM, GWTter seth@gmail.com wrote: Hi Deepak, This looks good to me. What style are you using for the vertical scrollbar? And thanks for the repost. -Seth On Sunday, April 1, 2012 3:50:12 PM UTC-4, Deepak Singh wrote: Hi Seth, I am posting my code here: myScrollPanel.css @CHARSET ISO-8859-1; .customScrollPanel{ } .customScrollPanelCorner{ opacity: 0.0; } MyScrollPanel.java public class MyScrollPanel extends CustomScrollPanel { /** * Extends the CustomScrollPanel Resources interface so that we can add our own css file and still reuse the Resources and Style interfaces from CustomScrollPanel * @author SL * */ public interface MyScrollResources extends Resources{ @Source(com/pdstechi/client/**myScrollPanel.css) Style customScrollPanelStyle(); } public MyScrollPanel(){ super((MyScrollResources)GWT.**create(MyScrollResources.**class)); this.setVerticalScrollbar(new MyVerticalScrollBar(), MyVerticalScrollBar.**getScrollBarWidth()); // this.setHorizontalScrollbar(**new MyHorizontalScrollBar(), MyHorizontalScrollBar.**getScrollBarHeight()); } } MyVerticalScrollBar.java public class MyVerticalScrollBar extends Widget implements VerticalScrollbar { private double scrollBarHeight = 0.0; private double scrollBarPosition = 0.0; private double scrollWindowPercentage = 1.0; private double scrollWindowHeight = 0; private int totalScrollContentHeight = 0; private static final int SCROLL_BAR_WIDTH = 10; private Element elem; public MyVerticalScrollBar(){ this.elem = Document.get().**createDivElement(); setElement(this.elem); this.setStyleName(**verticalScrollBar); } public static int getScrollBarWidth(){ return SCROLL_BAR_WIDTH; } @Override public int getMaximumVerticalScrollPositi**on() { return (int)(this.scrollWindowHeight-**this.scrollBarHeight); } @Override public int getMinimumVerticalScrollPositi**on() { return 0; } @Override public int getVerticalScrollPosition() { return (int)this.scrollBarPosition; } @Override public void setVerticalScrollPosition(int position) { this.scrollBarPosition = Math.floor(position*this.** scrollWindowPercentage); //make sure we don't go out of bounds with the scrollbar if(this.scrollBarPosition this.**getMaximumVerticalScrollPositi** on()){ this.scrollBarPosition = this.**getMaximumVerticalScrollPositi**on(); } this.elem.getStyle().setTop(**this.scrollBarPosition, Unit.PX); } @Override public HandlerRegistration addScrollHandler(ScrollHandler handler) { Event.sinkEvents(this.**getElement(), Event.ONSCROLL); return this.addHandler(handler, ScrollEvent.getType()); } @Override public Widget asWidget() { return this; } @Override public int getScrollHeight() { return this.totalScrollContentHeight; } @Override public void setScrollHeight(int height) { //TODO: HAVE TO FIND A WAY TO GET THE SIZE OF THE CORNER BOX, OR BETTER YET, IF THE CORNER BOX IS ENABLED BECAUSE THE HORIZONTAL SCROLL BAR IS ALSO VISIBLE this.totalScrollContentHeight = height; this.scrollWindowHeight = this.elem.getParentElement().** getOffsetHeight(); this.scrollWindowPercentage = (height 0) ? Math.min(1.0,this.** scrollWindowHeight/height):1.**0; this.scrollBarHeight = Math.max(SCROLL_BAR_WIDTH,**Math.floor(this.** scrollWindowHeight*this.**scrollWindowPercentage)); this.elem.getStyle().**setHeight(this.**scrollBarHeight, Unit.PX); } } All these classes are in my client package. I just want that browser default varticalscrollbar should change its look. Also, I am reposting the original msg with attached code again to the group. Thanks Deepak On Sun, Apr 1, 2012 at 11:01 PM, GWTter seth@gmail.com wrote: Hi Deepak, You would have to post your code. Did you make sure to style your vertical
Re: CustomScrollPanel issue (extra div overlays generated impacting performance?)
Hi Deepak, You would have to post your code. Did you make sure to style your vertical scrollbar, create the MyScrollPanel and set its verticalScrollbar with the one you created? In the code I sent you the vertical scrollbar has a width of 10px, you should style the vertical scrollbar to be within that width. Also, I can't seem to find the repost of the original message with the attached code I sent you anywhere in this thread, am I looking in the wrong place. Thanks. -Seth On Saturday, March 31, 2012 4:27:42 PM UTC-4, Deepak Singh wrote: Hi Seth, I copied your classes and css in my client package. It compiled fine. When i run the applicatio in dev mode, the browser default scrollbar is not overridden. It is same as default. What can i do to override the native one ? On Sun, Apr 1, 2012 at 1:05 AM, Deepak Singh deepaksingh...@gmail.comwrote: Thank you Seth. I would give it a try. Thats already reposted and is in the thread. Thanks Deepak On Sat, Mar 31, 2012 at 10:59 PM, GWTter seth@gmail.com wrote: Hi Deepak, This is all that's in the css file as the only important class is the corner that I've set to be transparent: .customScrollPanel{ } .customScrollPanelCorner{ opacity: 0.0; } As for how to use the vertical scroll bar to override the native (or the transparent one CustomScrollPanel uses by default) if you look at the line this.setVerticalScrollbar(new MyVerticalScrollBar(),MyVerticalScrollBar.getScrollBarWidth()); in MyScrollPanel class in the code I sent, this is what actually does the overriding. This method is available on the CustomScrollPanel class which MyScrollPanel extends. Hope that answers your question. Also can you please repost my initial reply with the code to this thread, it would save me the time of having to rewrite it :) Thanks. -Seth -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To view this discussion on the web visit https://groups.google.com/d/msg/google-web-toolkit/-/g-x4PrKzgjoJ. To post to this group, send email to google-web-toolkit@googlegroups.com . To unsubscribe from this group, send email to google-web-toolkit+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en. -- Deepak Singh -- Deepak Singh -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To view this discussion on the web visit https://groups.google.com/d/msg/google-web-toolkit/-/ukY2df0M7DsJ. To post to this group, send email to google-web-toolkit@googlegroups.com. To unsubscribe from this group, send email to google-web-toolkit+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en.
Re: CustomScrollPanel issue (extra div overlays generated impacting performance?)
Hi Deepak, This is all that's in the css file as the only important class is the corner that I've set to be transparent: .customScrollPanel{ } .customScrollPanelCorner{ opacity: 0.0; } As for how to use the vertical scroll bar to override the native (or the transparent one CustomScrollPanel uses by default) if you look at the line this.setVerticalScrollbar(new MyVerticalScrollBar(),MyVerticalScrollBar.getScrollBarWidth()); in MyScrollPanel class in the code I sent, this is what actually does the overriding. This method is available on the CustomScrollPanel class which MyScrollPanel extends. Hope that answers your question. Also can you please repost my initial reply with the code to this thread, it would save me the time of having to rewrite it :) Thanks. -Seth -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To view this discussion on the web visit https://groups.google.com/d/msg/google-web-toolkit/-/g-x4PrKzgjoJ. To post to this group, send email to google-web-toolkit@googlegroups.com. To unsubscribe from this group, send email to google-web-toolkit+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en.
Re: CustomScrollPanel issue (extra div overlays generated impacting performance?)
Hi Thomas, Thanks so much for all of your suggestions and for explaining the extra DIVs, it makes a lot more sense now. I'll try what you said and let you know. Thanks again. -Seth On Friday, March 30, 2012 5:40:47 AM UTC-4, Thomas Broyer wrote: On Thursday, March 29, 2012 5:43:55 AM UTC+2, GWTter wrote: Hi all, I've used the CustomScrollPanel in order to implement some custom scrollbars, everything was working great until I added DnD (gwt-dnd, not native) functionality to an element in the scrollpanel. The dragging action on the elements within is extremely laggy. After a good amount of testing I found that the issue had to do with the CustomScrollPanel since using a regular ScrollPanel performs just fine with minimal lag if any. I then looked at what is generated for the customscrollpanel to work and found some divs had been generated which I couldn't attribute any specific functionality to (ITEMs 1 2 below). They're basically just overlaying the whole scrollpanel area and deleting them with firebug did not affect the customscrollpanel functionality, but deleting them did improve the dnd performance considerably. I see that the more elements that are layered between the mouse click and the target element affect the performance to a good degree. My question is does anyone know if these extra DIVs are needed, and if so is there a way to workaround so I can still have the custom scroll bars with good DnD. The DIVs are added by the ResizeLayoutPanel.ImplStandard to detect when the content grows or shrinks, so the CustomScrollPanel can update the scrollbars. BTW, the ITEM3 div is used by the Layout to detect changes of the font size so ti can update its layers when they're positioned using EM or EX units. Does changing the z-index of the various divs (ITEM1, ITEM2 and dragdrop-dropTarget) changes anything performance-wise? DIRTY HACK: You could also try calling onDetach() on the containerResizeImpl when entering the scroll panel (while dragging) and calling onAttach() when leaving or dropping (use JSNI to access the private containerResizeImpl). You might have to explicitly call maybeUpdateScrollbars() after calling containerResizeImpl.onAttach(), as I'm not sure onAttach() would call the ResizeLayoutPanel.Impl.Delegate), and you might have to call it from a Scheduler.get().scheduleDeferred(), as ResizeLayoutPanel.ImplStandard uses it. -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To view this discussion on the web visit https://groups.google.com/d/msg/google-web-toolkit/-/rs-N4h0_ED4J. To post to this group, send email to google-web-toolkit@googlegroups.com. To unsubscribe from this group, send email to google-web-toolkit+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en.
Re: CustomScrollPanel issue (extra div overlays generated impacting performance?)
Hi Deepak, Sorry, I think I just replied to you personally, can you repost my reply here? Thanks. -Seth -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To view this discussion on the web visit https://groups.google.com/d/msg/google-web-toolkit/-/PB5g6_TVZAUJ. To post to this group, send email to google-web-toolkit@googlegroups.com. To unsubscribe from this group, send email to google-web-toolkit+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en.
CustomScrollPanel issue (extra div overlays generated impacting performance?)
Hi all, I've used the CustomScrollPanel in order to implement some custom scrollbars, everything was working great until I added DnD (gwt-dnd, not native) functionality to an element in the scrollpanel. The dragging action on the elements within is extremely laggy. After a good amount of testing I found that the issue had to do with the CustomScrollPanel since using a regular ScrollPanel performs just fine with minimal lag if any. I then looked at what is generated for the customscrollpanel to work and found some divs had been generated which I couldn't attribute any specific functionality to (ITEMs 1 2 below). They're basically just overlaying the whole scrollpanel area and deleting them with firebug did not affect the customscrollpanel functionality, but deleting them did improve the dnd performance considerably. I see that the more elements that are layered between the mouse click and the target element affect the performance to a good degree. My question is does anyone know if these extra DIVs are needed, and if so is there a way to workaround so I can still have the custom scroll bars with good DnD. There's also a good reason for my using gwt-dnd over native. I've been struggling with this for over a week now and it's driving me crazy, so hopefully someone can help. Thanks a lot in advance for any help and sorry for the long post. The generated elements for the customscrollpanel are in the code below. -Seth div class=ScrollArea style=position: relative; overflow: hidden; height: 600px; !-- this div is up to the upper left corner doing seemingly nothing at all ITEM 3-- div style=position: absolute; z-index: -32767; top: -20ex; width: 10em; height: 10ex;nbsp;/div !-- does not seem to be needed -- div style=position: absolute; overflow: hidden; left: 0px; top: 0px; right: -17px; bottom: -17px; div style=position: absolute; overflow: scroll; left: 0px; top: 0px; right: 0px; bottom: 0px; div class=GK40RFKDCB style=position: relative; min-width: 20px; min-height: 20px; !-- !! ITEM 1-- !-- this div seems to be doing nothing but overlaying -- div style=visibility: hidden; position: absolute; height: 100%; width: 100%; overflow: scroll; div style=height: 1324px; width: 1458px;/div /div !-- !! ITEM 2-- !-- this div seems to be doing nothing but overlaying -- div style=visibility: hidden; position: absolute; height: 100%; width: 100%; overflow: scroll; div style=width: 200%; height: 200%;/div /div div class=dragdrop-dropTarget dragdrop-boundary style=position: relative; overflow: hidden; table cellspacing=0 cellpadding=0 border=0 style=width: 100%; table-layout: fixed; div class=testRed dragdrop-draggable dragdrop-handle style=position: absolute; top: 900px; left: 500px;Hello World/div /div /div /div /div !-- this div is the corner box bottom right which comes up when both scrollbars are displayed -- div style=position: absolute; overflow: hidden; right: 0px; bottom: 0px; width: 17px; height: 0px; div class=GK40RFKDII style=position: absolute; left: 0px; top: 0px; right: 0px; bottom: 0px;/div /div !-- this div seems to be the container for the bottom scroll bar but it is disabled if not horizontal scroll is needed -- div style=position: absolute; overflow: hidden; left: 0px; top: 0px; right: 0px; bottom: 0px; display: none; div class=GK40RFKDDJ GK40RFKDCB style=height: 17px; position: absolute; left: 0px; top: 0px; right: 0px; bottom: 0px; div class=GK40RFKDCJ GK40RFKDJI div class=GK40RFKDBJ/div /div /div /div !-- this is the div container for the scrollbar to the right -- div style=position: absolute; overflow: hidden; top: 0px; right: 0px; bottom: 0px; width: 17px; div class=GK40RFKDAJ GK40RFKDCB style=width: 17px; position: absolute; left: 0px; top: 0px; right: 0px; bottom: 0px; div class=GK40RFKDPI GK40RFKDLI div style=height: 1224px;/div /div /div /div /div Thanks again. -- You received this message because you are subscribed to the Google Groups Google Web Toolkit group. To view this discussion on the web visit https://groups.google.com/d/msg/google-web-toolkit/-/kID-qZLB47UJ. To post to this group, send email to google-web-toolkit@googlegroups.com. To unsubscribe from this group, send email to google-web-toolkit+unsubscr...@googlegroups.com. For more options, visit this group at