import com.google.gwt.query.client.GQuery;
import com.google.gwt.query.client.plugins.widgets.ButtonWidgetFactory;
import com.google.gwt.query.client.plugins.widgets.DateBoxWidgetFactory;
+import com.google.gwt.query.client.plugins.widgets.DisclosurePanelWidgetFactory;
import com.google.gwt.query.client.plugins.widgets.RichTextWidgetFactory;
import com.google.gwt.query.client.plugins.widgets.TabPanelWidgetFactory;
import com.google.gwt.query.client.plugins.widgets.TextBoxWidgetFactory;
import com.google.gwt.query.client.plugins.widgets.WidgetFactory;
+import com.google.gwt.query.client.plugins.widgets.DisclosurePanelWidgetFactory.DisclosurePanelOptions;
import com.google.gwt.query.client.plugins.widgets.TabPanelWidgetFactory.TabPanelOptions;
import com.google.gwt.user.client.ui.Button;
+import com.google.gwt.user.client.ui.DisclosurePanel;
import com.google.gwt.user.client.ui.TabPanel;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.Widget;
*/
LazyWidgets<T> tabPanel(Function... initFunctions);
+ /**
+ * Create a {@link DisclosurePanel} widget for each selected elements.
+ */
+ LazyWidgets<T> disclosurePanel(DisclosurePanelOptions o, Function... initFunctions);
+
+ /**
+ * Create {@link DisclosurePanel} widget for each selected elements.
+ */
+ LazyWidgets<T> disclosurePanel(Function... initFunctions);
+
/**
* Create a {@link TabPanel} widget for each selected elements. Each div
* element inside a selected element will create a tab and the first h3
import com.google.gwt.query.client.GQuery;\r
import com.google.gwt.query.client.plugins.widgets.ButtonWidgetFactory;\r
import com.google.gwt.query.client.plugins.widgets.DateBoxWidgetFactory;\r
+import com.google.gwt.query.client.plugins.widgets.DisclosurePanelWidgetFactory;\r
import com.google.gwt.query.client.plugins.widgets.RichTextWidgetFactory;\r
import com.google.gwt.query.client.plugins.widgets.TabPanelWidgetFactory;\r
import com.google.gwt.query.client.plugins.widgets.TextBoxWidgetFactory;\r
import com.google.gwt.query.client.plugins.widgets.WidgetFactory;\r
+import com.google.gwt.query.client.plugins.widgets.DisclosurePanelWidgetFactory.DisclosurePanelOptions;\r
import com.google.gwt.query.client.plugins.widgets.TabPanelWidgetFactory.TabPanelOptions;\r
import com.google.gwt.user.client.ui.Button;\r
+import com.google.gwt.user.client.ui.DisclosurePanel;\r
import com.google.gwt.user.client.ui.TabPanel;\r
import com.google.gwt.user.client.ui.TextBox;\r
import com.google.gwt.user.client.ui.Widget;\r
return tabPanel(new TabPanelOptions(), initFunctions);\r
}\r
\r
+ /**\r
+ * Create a {@link DisclosurePanel} widget for each selected elements. \r
+ */\r
+ public Widgets disclosurePanel(DisclosurePanelOptions o, Function... initFunctions) {\r
+ return widgets(new DisclosurePanelWidgetFactory(o), initFunctions);\r
+ }\r
+ \r
+ /**\r
+ * Create {@link DisclosurePanel} widget for each selected elements. \r
+ */\r
+ public Widgets disclosurePanel(Function... initFunctions) {\r
+ return disclosurePanel(new DisclosurePanelOptions(), initFunctions);\r
+ }\r
+\r
/**\r
* Create a {@link TabPanel} widget for each selected elements. Each div\r
* element inside a selected element will create a tab and the first h3\r
--- /dev/null
+package com.google.gwt.query.client.plugins.widgets;
+
+import com.google.gwt.user.client.ui.RootPanel;
+import com.google.gwt.user.client.ui.Widget;
+
+import com.google.gwt.user.client.ui.Composite;
+
+/**
+ * Provide a way to subclass widget class that cannot be subclassed directly in
+ * order to provide a way to call onAttach method on it
+ *
+ *
+ * @param <W>
+ */
+public class AttachableComposite<W extends Widget> extends Composite implements
+ Attachable {
+
+
+ public AttachableComposite(W widget) {
+ initWidget(widget);
+ }
+
+
+ public void attach() {
+ onAttach();
+ RootPanel.detachOnWindowClose(this);
+
+ }
+
+ @SuppressWarnings("unchecked")
+ public W getOriginalWidget(){
+ return (W) getWidget();
+ }
+
+}
--- /dev/null
+package com.google.gwt.query.client.plugins.widgets;
+
+import static com.google.gwt.query.client.GQuery.$;
+
+import com.google.gwt.dom.client.Element;
+import com.google.gwt.user.client.ui.Button;
+import com.google.gwt.user.client.ui.DisclosurePanel;
+import com.google.gwt.user.client.ui.HTMLPanel;
+import com.google.gwt.user.client.ui.Label;
+
+public class DisclosurePanelWidgetFactory implements
+ WidgetFactory<DisclosurePanel> {
+
+ /**
+ * Options used to initialize new {@link Button}
+ *
+ */
+ public static class DisclosurePanelOptions implements WidgetOptions {
+
+ private String headerSelector;
+ private String headerTitle;
+
+ public DisclosurePanelOptions() {
+ initDefault();
+ }
+
+ public String getHeaderSelector() {
+ return headerSelector;
+ }
+
+ public String getHeaderTitle() {
+ return headerTitle;
+ }
+
+ public void setHeaderSelector(String headerSelector) {
+ this.headerSelector = headerSelector;
+ }
+
+ public void setHeaderTitle(String headerTitle) {
+ this.headerTitle = headerTitle;
+ }
+
+ private void initDefault() {
+ headerTitle = null;
+ headerSelector = "h3";
+ }
+ }
+
+ private DisclosurePanelOptions options;
+
+ public DisclosurePanelWidgetFactory(DisclosurePanelOptions options) {
+ this.options = options;
+ }
+
+ public DisclosurePanel create(Element e) {
+ AttachableComposite<DisclosurePanel> attachableDisclosurePanel = new AttachableComposite<DisclosurePanel>(
+ new DisclosurePanel());
+
+ initialize(attachableDisclosurePanel, e);
+
+ return attachableDisclosurePanel.getOriginalWidget();
+ }
+
+ protected void initialize(AttachableComposite<DisclosurePanel> widget,
+ Element e) {
+ String headerValue = "";
+
+ if (options.getHeaderTitle() != null){
+ headerValue = options.getHeaderTitle();
+ }else{
+ headerValue = $(options.getHeaderSelector()).first().remove().text();
+ }
+
+ DisclosurePanel disclosurePanel = widget.getOriginalWidget();
+
+ disclosurePanel.setHeader(new Label(headerValue));
+ disclosurePanel.add(new HTMLPanel(e.getString()));
+ WidgetsUtils.replace(e, widget);
+
+ }
+
+}
}
}
- private static class ExtendedTabPanel extends TabPanel {
+ private static class ExtendedTabPanel extends TabPanel implements Attachable{
- void attach() {
+ public void attach() {
onAttach();
RootPanel.detachOnWindowClose(this);
}
tabPanel.selectTab(0);
}
- WidgetsUtils.replace(e, tabPanel.getElement());
+ WidgetsUtils.replace(e, tabPanel);
- tabPanel.attach();
}
}
public void onModuleLoad() {\r
\r
$(".inputText").as(Widgets).textBox();\r
- \r
+\r
$(".btn").as(Widgets).button(new Function() {\r
- \r
+\r
public void f(Widget w) {\r
- \r
+\r
Button button = (Button) w;\r
button.addClickHandler(new ClickHandler() {\r
\r
});\r
\r
}\r
- \r
+\r
});\r
\r
$("#tabs").as(Widgets).tabPanel();\r
\r
- DateBox b = $(".date").as(Widgets).datebox().widget();\r
- System.out.println(b);\r
- \r
- RichTextArea a = $(".editable").as(Widgets).richtext().widget(0);\r
- System.out.println(a);\r
+ $(".date").as(Widgets).datebox();\r
+\r
+ $(".editable").as(Widgets).richtext();\r
+\r
\r
+ $("#disclosure").as(Widgets).disclosurePanel();\r
}\r
\r
}\r
</div>\r
</div>\r
\r
+<div id="disclosure">\r
+<h3>Show me</h3>\r
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut\r
+mollis dignissim mattis. In hac habitasse platea dictumst. Cras gravida\r
+pellentesque purus, ullamcorper euismod enim ornare ac. Suspendisse sed\r
+tortor diam. Cum sociis natoque penatibus et magnis dis parturient\r
+montes, nascetur ridiculus mus. Integer a cursus erat. Nam in molestie\r
+lacus. Nullam adipiscing fermentum magna vel sagittis. Pellentesque et\r
+nisi orci. Nunc volutpat ornare malesuada. Aliquam erat volutpat. Duis\r
+hendrerit adipiscing mauris, vitae tincidunt dui sodales eget. Nulla ac\r
+velit ac nunc dapibus volutpat eget vel eros. Maecenas tincidunt, turpis\r
+vel placerat imperdiet, metus elit mollis sapien, et egestas felis felis\r
+vitae metus.</div>\r
+\r
\r
\r
</body>\r