In a programming scenario, I needed to check if my GWT textbox was focused or not. I ended up adding a boolean and a pair of Focus & BlurHandler to manually keep the focus state which makes me wonder why is there no such method that returns if a focusable component is focused in gwt?
Because there wasn't any cross-browser way of doing it until a few years ago (Firefox 3, Safari 4, to point at the last players in the game having added support document.activeElement).
GWT still officially supports [1] Safari 3 (I believe Safari 2 support has been deprecated) and maybe even Firefox 2 (no DevMode plugin, but that doesn't mean the browser isn't supported: Opera is supported but has no DevMode either), so it's not possible to provide such a feature that would work in all supported browsers.
Last, but not least, I think no one ever filed a request for enhancement in the issue tracker (I couldn't find any at least); and as you said, you can already do it today using FocusHandler/BlurHandler (which works cross-browser).
[1] http://code.google.com/webtoolkit/doc/latest/FAQ_GettingStarted.html#What_browsers_does_GWT_support? I believe that page is a bit out of date, as it still lists Firefox 1.0, whose support (user.agent=gecko, vs. gecko1_8) has been removed in GWT 2.1.0, and doesn't list IE9, whose support has been added in GWT 2.3.0, and last but not least, I believe only the latest version of Opera is supported, whereas the list talks about Opera 9.
To find which widget has focus, I don't know whether you have solution already. As a novice to GWT , I propose my solution to share:
Declare private field in the object, like 'focusedWidget'
Create focus handler for the widget, here's class TextBox. In OnFocus block, just assign the widget to 'focusedWidget'. You can add this kind of event to every widget that can be focused. ![step 2][2]
That's all. Every widget you tied the focus event will set itself to 'focusedWidget' everytime it is focused. We can then use 'focusedWidget' to determind which current widget is focused. ![step 3][3]
I test it in JUnit, it works!
see image of snippet here
Hope that help.
Related
We have been using GWT for around 4 years now. One of the most often discussed features missing in native GWT is data binding. Reading across AngularJs another Google offering, i came across http://devgirl.org/2013/03/21/fun-with-angularjs/ . I do not wish to use GXT or any other third party tools. I also wish to avoid generator related solution.
Is there any way this will ever be implementable in pure native GWT?
Is there any specific reason why GWT cannot provide this out of the BOX?
Have you tried GWT Pectin?
I have used it successfully in a larger project some time ago.
I suggest you try HexaBinding, which is non invasive and only focused on data binding. Here is the link : https://github.com/ltearno/hexa.tools/blob/master/hexa.binding/README.md
It works with pure Java, GWT and will soon work also with Android and JavaFX. It may even work with J2Objc but not sure yet...
I read the post you mention on devgirl about AngularJS. In that post the "2 way data binding" refers to the property of the code to reflect automatically on the view the changes that occurs to the data that the view is currently displaying.
This is achieved in GWT since version 2.1 with the Cell Widgets
In the first paragraph of the Cell Widgets documentation I linked above it is clearly stated that:
A cell widget can accept data from any type of data source. The data
model handles asynchronous updates as well as push updates. When you
change the data, the view is automatically updated.
If you want to do in GWT something as basic as the example in the devGirl post you need to write a onKeyup handler (in AngularJS you should write a Scope to this purpose) that would copy what you entered to the linked label. Something like this:
...
final TextBox nameField = new TextBox();
final Label enteredName = new Label("");
...
public void onKeyUp(KeyUpEvent event) {
enteredName.setText(nameField.getText());
}
...
Is there a known implementation for an address bar in Gtk3? I'm looking for something like in iPhone and Android e-mail clients, where the already given addresses are converted into buttons.
Edit:
I'm currently developing for gtk-3.4. The GtkLinkButton suggested by mike below seems promising, but is there a way to add it to a GtkEditable so it could be deleted with e.g the backspace button, or for text to be inserted before/after it?
When posting about gtk3 in particular you should list what version your using because there's depreciated code as you change versions. The newest stable version is 3.4.
I think what your looking for is GtkLinkButton.
Official gtk+-3.4 manual
Please forgive me if this answer is somewhere else on this site or online. If it is, I sure haven't found it in the past several days of searching.
What I am hoping to find is an "accurate" method of detecting a browser and redirecting to a simple, static page if not a recent browser.
The samples I have found until now often have not provided an accurate representation of the actual browser being used. For instance:
When testing with Navigator 9, I'll get a message that I'm using Firefox 2
When testing with Maxthon 3, it reports I'm using IE 9.
My site displays correctly in all the current browsers I've been testing it with. But I wish I could have a basic static page for those .01% who still are using an old browser for whatever reason. They could still get some basic information from my site, as well as encouraged to update to a more current browser.
If anyone has any useful suggestions, I'd greatly appreciate them.
Thanks so much.
Cheers,
David
Browser detection is never perfect, for a variery of reasons. If you are using jQuery, you should look into jQuery.browser.
I'd try to detect the browser on the server side and do an HTTP redirect if the browser is something non-standard. Most decent frameworks have functionality to detect the browser from the user agent string. Again, this is not perfect, mainly because of the data browsers report. Also, if Maxthon reports it's IE, that's because it is based on IE and therefore the layout engine should be the same.
So you either
support a small number of browsers and cater for their quirks, sending all other browsers to a basic page (this sucks for future versions of browsers because they might be standards-compliant but they will still display your very basic page), or
you have a standards-compliant page for all browsers and then you define alternatives for the ones that give you problems.
I'd go for the second option. It usually all boils down to one version for all browsers, and a number of hacks for various versions of IE. Also, remember to avoid padding in your CSS and use margins instead.
In the end, you probably shouldn't be testing for browsers and version numbers, but supported features. Try using Modernizr.
The $.browser property is deprecated in jQuery 1.3. On jQuery support site, they strongly recommend to use the detection feature (JQuery.support) instead of the jQuery.browser property.
Actually, this has been answered already in another question, please check here How can you detect the version of a browser?
I have a GWT app with a bunch of textboxes. In firefox I would expect that when I type a word in a textbox that I have already typed in and submitted, that firefox would offer to autocomplete that text. But for this GWT app it is not happening.
The ids and the name of the html elements are the same everytime. I don't know if it makes a difference, but I am using UiBinders for presentation.
Also in IE it seems that none of my css stuff is loaded. And when I IE developer tools on my GWT page, it can focus in on any of the textboxes it just focuses on the encompassing DIV around all the textboxes.
The problem with autocompletion is caused by how the DOM tree is created in a dynamic web application, such as the one created using GWT. Basically, all the DOM elements (textboxes, etc) are dynamically created, after the page is loaded. However, AFAIK, the browser only supports autocompletion on "static" elements, ones that are part of the HTML host page. So, for that reason you won't get autocompletion support from your browser in a GWT app. Fot some cases, you can still emulate it via SuggestBox.
You could try including the elements you want autocompletion for in your HTML host page, and then wrapping your GWT Widgets around them - that might work :) But it's not the "prettiest" solution, since you probably want autocompletion for a number of unrelated fields/elements.
I've asked this question on the GWT group with no luck, so now I'm trying Stack Overflow :)
There seems to be some problem with GWT's history and IE6 / 7, and I'm trying to confirm this is an actual problem with GWT and not just something stupid I've done.
The problem I run into is the following:
Imagine you have some GWT app that plugs in to your existing website. It has internal history and works fine. Let's just say it's a tree. What it is isn't important, just that it has state that you can go back and forwards in. Part of this app is links to other parts of your website. Click one of those and you exit the GWT application.
Now, use the "back" button after you've clicked one of these links. You return to the GWT application which loads fine and the state is recreated using whatever is in the URL.
If you the click back again, here's where I get differing results in IE6 / 7 and FF / Chrome / IE8. In IE6 / 7 this second "back" sends me to the page before the GWT app. In FF / Chrome / IE8 this second back sends me back in the state of the GWT app, which is what I want, naturally.
I've checked my code, and as far as I can see, this second "back" just goes directly to the page before. My history handler is never called, at any rate.
Has anyone else run into this? Or know of anywhere this problem is discussed? I've googled extensively with no results.
The GWT group is to noisy to get confirmations of potential bugs, it's mostly for beginners.
The approach I take when I start to assume that there is a bug in GWT, and after trying to get help from the GWT group, is to create an issue in the GWT issue tracker and cross posting in the GWT contributors group as well.
Here is the URL for creating an issue:
http://code.google.com/p/google-web-toolkit/issues/list
Make sure that you first search the issue list for possible duplicates.
I've not yet played with history in GWT since our apps are running in an IFrame and that just kills the possibility to implement history.