hi sky!

that looks pretty much like our implementation...;)
this is the problem of such a big toolkit like GWT, there are too many
'features' (like widgets, rpc, jre emulation, java-to-js compilation,
the new data driven widgets and so on) which is great for a fast start
and even enough for many applications, but as soon as you get
creative, you have to start doing things by yourself, which is in my
expirience really hard with GWT since many, many (far too much)
methods and classes are private or final, so it is really hard to
extend the provided stuff, so at the end you finish hacking GWT and
building your own framework on top of the toolkit based on the core
feature, java-to-js compilation, which could be the idea.of the
developers, i do not know...

continue the good work!

regards
Michael

On May 21, 9:04 am, Sky <myonceinalifet...@gmail.com> wrote:
> package com.skystrider.subtabs.client.gwtUtils;
>
> import java.util.ArrayList;
>
> import com.google.gwt.core.client.GWT;
> import com.google.gwt.core.client.JavaScriptObject;
> import com.google.gwt.dom.client.IFrameElement;
> import com.google.gwt.user.client.DOM;
> import com.google.gwt.user.client.Element;
> import com.google.gwt.user.client.Event;
> import com.google.gwt.user.client.ui.Frame;
>
> /**
>  * A {...@link com.google.gwt.user.client.ui.Frame} that has a 'name'
> associated
>  * with it. This allows the frame to be the target of a
>  * {...@link com.google.gwt.user.client.ui.FormPanel}
>  *
>  * <h3>CSS Style Rules</h3>
>  * <ul class='css'>
>  * <li>.gwt-Frame { }</li>
>  * </ul>
>  */
> public class MyNamedFrame extends Frame {
>
>         private ArrayList<LoadHandler> loadHandlers = null;
>
>           // Used inside JSNI, so please don't delete this field just because
>           // your compiler or IDE says it's unused.
>           @SuppressWarnings("unused")
>           private static JavaScriptObject PATTERN_NAME;
>
>           static {
>             if (GWT.isClient()) {
>               initStatics();
>             }
>           }
>
>           /**
>            * Creates an HTML IFRAME element with a src and name.
>            *
>            * @param src the src of the frame
>            * @param name the name of the frame, which must contain at least
> one
>            *          non-whitespace character and must not contain reserved
> HTML markup
>            *          characters such as '<code>&lt;</code>', '<code>&gt;</
> code>',
>            *          or '<code>&amp;</code>'
>            * @return the newly-created element
>            * @throws IllegalArgumentException if the supplied name is not
> allowed
>            */
>           private static IFrameElement createIFrame(String src, String name)
> {
>             if (name == null || !isValidName(name.trim())) {
>               throw new IllegalArgumentException(
>                   "expecting one or more non-whitespace chars with no '<',
> '>', or '&'");
>             }
>
>             // Use innerHTML to implicitly create the <iframe>. This is
> necessary
>             // because most browsers will not respect a dynamically-set
> iframe name.
>             Element div = DOM.createDiv();
>
>             String onload = "onload=\"if(!event){event = window.event;}
> this.myonload(event);\"";
>
>             div.setInnerHTML("<iframe src=\"" + src + "\" name='" + name + "'
> " + onload + ">");
>             return div.getFirstChild().cast();
>           }
>
>           private static native void initStatics() /*-{
>             @com.google.gwt.user.client.ui.NamedFrame::PATTERN_NAME = /^[^<>&
> \'\"]+$/;
>           }-*/;
>
>           /**
>            * @param name the specified frame name to be checked
>            * @return <code>true</code> if the name is valid, <code>false</
> code> if
>            *         not
>            */
>           private static native boolean isValidName(String name) /*-{
>             return
> @com.google.gwt.user.client.ui.NamedFrame::PATTERN_NAME.test(name);
>           }-*/;
>
>           /**
>            * Constructs a frame with the given name.
>            *
>            * @param name the name of the frame, which must contain at least
> one
>            *          non-whitespace character and must not contain reserved
> HTML markup
>            *          characters such as '<code>&lt;</code>', '<code>&gt;</
> code>',
>            *          or '<code>&amp;</code>'
>            *
>            * @throws IllegalArgumentException if the supplied name is not
> allowed
>            */
>           public MyNamedFrame(String name) {
>             // Setting a src prevents mixed-content warnings.
>             
> //http://weblogs.asp.net/bleroy/archive/2005/08/09/how-to-put-a-div-ove...
>             super(createIFrame("javascript:''", name));
>             setStyleName("gwt-Frame");
>             setMyOnload(this.getElement().cast(), this);
>           }
>
>           /**
>            * Gets the name associated with this frame.
>            *
>            * @return the frame's name
>            */
>           public String getName() {
>             return DOM.getElementProperty(getElement(), "name");
>           }
>
>         public void addLoadHandler(LoadHandler handler) {
>                 if(loadHandlers == null){
>                         loadHandlers = new ArrayList<LoadHandler>();
>                 }
>                 loadHandlers.add(handler);
>         }
>
>         public interface LoadHandler {
>                 void onLoad(Event event);
>         }
>
>         public native void setMyOnload(JavaScriptObject elm, MyNamedFrame
> frame)/*-{
>
>                 elm.myonload = function(event){
>
> fra...@com.skystrider.subtabs.client.gwtutils.mynamedframe::onload(Lcom/
> google/gwt/user/client/Event;)(event);
>                 };
>         }-*/;
>
>         public void onload(Event event)
>         {
>                 for (LoadHandler handler : loadHandlers) {
>                         handler.onLoad(event);
>                 }
>         }
>
> }
>
> On May 20, 12:13 am, Sky <myonceinalifet...@gmail.com> wrote:
>
>
>
> > Just in case you ever wanted to have a handler for the <iframe>'s
> > onload event:
>
> > import com.google.gwt.event.dom.client.HasLoadHandlers;
> > import com.google.gwt.event.dom.client.LoadEvent;
> > import com.google.gwt.event.dom.client.LoadHandler;
> > import com.google.gwt.event.shared.HandlerRegistration;
> > import com.google.gwt.user.client.ui.NamedFrame;
>
> > public classMyNamedFrameextends NamedFrame implements
> > HasLoadHandlers {
>
> >         publicMyNamedFrame(String name) {
> >                 super(name);
> >         }
>
> >         @Override
> >         public HandlerRegistration addLoadHandler(LoadHandler handler) {
> >                 return addDomHandler(handler, LoadEvent.getType());
> >         }
>
> > }
>
> > --
> > You received this message because you are subscribed to the Google Groups 
> > "Google Web Toolkit" group.
> > To post to this group, send email to google-web-tool...@googlegroups.com.
> > To unsubscribe from this group, send email to 
> > google-web-toolkit+unsubscr...@googlegroups.com.
> > For more options, visit this group 
> > athttp://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 post to this group, send email to google-web-tool...@googlegroups.com.
> To unsubscribe from this group, send email to 
> google-web-toolkit+unsubscr...@googlegroups.com.
> For more options, visit this group 
> athttp://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 post to this group, send email to google-web-tool...@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.

Reply via email to