Hi,

Well actually it does work. I just did a Label.wrap of the element
followed by addClickHandler and the handler is correctly triggered.

I will however need to switch to an approach like yours... but that is
a lot of low-level code while all they had to do was provide the
possibility to put a widget in the Caption part. Your code will break
as soon as they change the Caption interface (the javadoc warns about
it)... but rather have a compiler error than discover at runtime!

David

On Apr 16, 5:42 pm, kozura <[email protected]> wrote:
> Just wrapping it is not going to work, as just HTML doesn't place the
> widget in GWT's widget hierarchy.  I don't think the clickhandler
> should even work?  You need to have the dialog adopt your "widget".
>
> FYI here's my working sol'n for getting a close button in the upper
> left corner, just extending DialogBox:
>
> /**
> * Adopted fromhttp://code.google.com/p/synthfuljava/, at
> *http://code.google.com/p/synthfuljava/source/browse/trunk/gwt/widgets...
> */
> public abstract class ClosableDialog extends DialogBox
> {
>     private HorizontalPanel m_captionPane;
>     private Button m_closeBut;
>     private CaptionTitle m_titleHTML;
>
>     protected class CaptionTitle extends HTML implements Caption {}
>
>     public ClosableDialog() {this(false);}
>
>     public ClosableDialog(boolean autoHide) {this(autoHide, true);}
>
>     public ClosableDialog(boolean autoHide, boolean modal)
>     {
>         super(autoHide, modal);
>
>         m_captionPane = new HorizontalPanel();
>         m_captionPane.setStyleName("Caption");
>         m_captionPane.setWidth("100%");
>
> m_captionPane.setVerticalAlignment(HasVerticalAlignment.ALIGN_MIDDLE);
>
>         Element td01 = getCellElement(0, 1);
>         Widget caption = (Widget)this.getCaption();
>         DOM.removeChild(td01, caption.getElement());
>         DOM.appendChild(td01, this.m_captionPane.getElement());
>         adopt(m_captionPane);
>
>         m_titleHTML = new CaptionTitle();
>
>         m_captionPane.add(this.m_titleHTML);
>         m_captionPane.setCellWidth(m_titleHTML, "100%");
>
>         m_closeBut = new Button("X");
>
>         m_captionPane.add(this.m_closeBut);
>     }
>
>     @Override
>     public String getHTML() {return m_titleHTML.getHTML();}
>
>     @Override
>     public String getText() {return m_titleHTML.getText();}
>
>     @Override
>     public void setHTML(String html) {m_titleHTML.setHTML(html);}
>
>     @Override
>     public void setText(String text) {m_titleHTML.setText(text);}
>
>     protected boolean isCaptionControlEvent(NativeEvent event)
>     {
>         return isWidgetEvent(event, this.m_captionPane.getWidget(1));
>     }
>
>     static protected boolean isWidgetEvent(NativeEvent event, Widget
> w)
>     {
>         EventTarget target = event.getEventTarget();
>         if (Element.is(target))
>         {
>             boolean t =
> w.getElement().isOrHasChild(Element.as(target));
>             return t;
>         }
>         return false;
>     }
>
>     @Override
>     public void onBrowserEvent(Event event)
>     {
>         if (isCaptionControlEvent(event))
>         {
>             switch (event.getTypeInt())
>             {
>             case Event.ONMOUSEUP:
>             case Event.ONCLICK:
>                 hide();
>                 break;
>             }
>         }
>         super.onBrowserEvent(event);
>     }
>
> }
>
> On Apr 16, 4:00 am, David <[email protected]> wrote:
>
>
>
>
>
> > I wanted to add a Label with ClickHandler to the title of a
> > DialogBox.
> > There is no direct support for adding widgets to the titlebar, but
> > there is support for HTML.
>
> > I tried out a little trick - before going on a queste to replace yet
> > another widget in GWT:
>
> > I use this as a content for the title:
> > "<div style='float:right' id='helpid'>Help</div> The title"
>
> > in the onload of my customized dialog I wrap the helpid div into a
> > Label widget and then attach a ClickHandler.
> > This seems to work fine except in DevMode where I get an assertion
> > error:
>
> > java.lang.AssertionError: A widget that has an existing parent widget
> > may not be added to the detach list
> >         at
> > com.google.gwt.user.client.ui.RootPanel.detachOnWindowClose(RootPanel.java:
> > 136)
> >         at com.google.gwt.user.client.ui.Label.wrap(Label.java:79)
> >         at com.acme.gwt.widget.client.ActionDialog.onLoad(ActionDialog.java:
> > 166)
> >         at com.google.gwt.user.client.ui.Widget.onAttach(Widget.java:294)
> >         at com.google.gwt.user.client.ui.Widget.setParent(Widget.java:417)
> >         at com.google.gwt.user.client.ui.Panel.adopt(Panel.java:119)
> >         at com.google.gwt.user.client.ui.ComplexPanel.add(ComplexPanel.java:
> > 93)
> >         at 
> > com.google.gwt.user.client.ui.AbsolutePanel.add(AbsolutePanel.java:
> > 75)
> >         at com.google.gwt.user.client.ui.PopupPanel
> > $ResizeAnimation.onInstantaneousRun(PopupPanel.java:311)
> >         at com.google.gwt.user.client.ui.PopupPanel
> > $ResizeAnimation.setState(PopupPanel.java:208)
> >         at 
> > com.google.gwt.user.client.ui.PopupPanel.setState(PopupPanel.java:
> > 1374)
> >         at 
> > com.google.gwt.user.client.ui.PopupPanel.show(PopupPanel.java:969)
> >         at com.google.gwt.user.client.ui.DialogBox.show(DialogBox.java:347)
> >         at com.acme.gwt.widget.client.ActionDialog.show(ActionDialog.java:
> > 226)
> >         at com.google.gwt.user.client.ui.PopupPanel.center(PopupPanel.java:
> > 488)
>
> > Am I not allowed to use this wrap method in such scenario ? Is there
> > an alternative to the restricted DialogBox ? Or is this a bug in the
> > wrap method for which I should file an incident report ?
>
> > David
>
> > --
> > You received this message because you are subscribed to the Google Groups 
> > "Google Web Toolkit" group.
> > To post to this group, send email to [email protected].
> > To unsubscribe from this group, send email to 
> > [email protected].
> > 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 [email protected].
> To unsubscribe from this group, send email to 
> [email protected].
> 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 [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/google-web-toolkit?hl=en.

Reply via email to