]> source.dussan.org Git - gwtquery.git/commitdiff
add disclosure panel
authorJulien Dramaix <julien.dramaix@gmail.com>
Sat, 5 Mar 2011 07:56:06 +0000 (07:56 +0000)
committerJulien Dramaix <julien.dramaix@gmail.com>
Sat, 5 Mar 2011 07:56:06 +0000 (07:56 +0000)
gwtquery-core/src/main/java/com/google/gwt/query/client/plugins/LazyWidgets.java
gwtquery-core/src/main/java/com/google/gwt/query/client/plugins/Widgets.java
gwtquery-core/src/main/java/com/google/gwt/query/client/plugins/widgets/AttachableComposite.java [new file with mode: 0644]
gwtquery-core/src/main/java/com/google/gwt/query/client/plugins/widgets/DisclosurePanelWidgetFactory.java [new file with mode: 0644]
gwtquery-core/src/main/java/com/google/gwt/query/client/plugins/widgets/TabPanelWidgetFactory.java
samples/src/main/java/gwtquery/samples/client/GwtQueryWidgetModule.java
samples/src/main/java/gwtquery/samples/public/GwtQueryWidgets.html

index 335f8cd385b13508253de937cd611645b36e53c7..324fc0a16cc62706eca8d677e413961ebc5473f7 100644 (file)
@@ -19,12 +19,15 @@ import com.google.gwt.query.client.Function;
 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;
@@ -42,6 +45,16 @@ public interface LazyWidgets<T> extends LazyBase<T>{
    */
   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
index f30b290117749c575801baa936e12de9e891cb97..d5a08fb9fca55b006aefb6fe4d2814436c1b0bfd 100755 (executable)
@@ -20,12 +20,15 @@ import com.google.gwt.query.client.Function;
 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
@@ -64,6 +67,20 @@ public class Widgets extends QueuePlugin<Widgets> {
     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
diff --git a/gwtquery-core/src/main/java/com/google/gwt/query/client/plugins/widgets/AttachableComposite.java b/gwtquery-core/src/main/java/com/google/gwt/query/client/plugins/widgets/AttachableComposite.java
new file mode 100644 (file)
index 0000000..23e2be4
--- /dev/null
@@ -0,0 +1,35 @@
+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();
+  }
+  
+}
diff --git a/gwtquery-core/src/main/java/com/google/gwt/query/client/plugins/widgets/DisclosurePanelWidgetFactory.java b/gwtquery-core/src/main/java/com/google/gwt/query/client/plugins/widgets/DisclosurePanelWidgetFactory.java
new file mode 100644 (file)
index 0000000..a3b703c
--- /dev/null
@@ -0,0 +1,82 @@
+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);
+
+  }
+
+}
index 928a54866fc8b1b362a00d63bd20ded95c890043..c1cf11a47124f163ffd64cbd221f07f28b75358c 100644 (file)
@@ -52,9 +52,9 @@ public class TabPanelWidgetFactory implements WidgetFactory<TabPanel> {
     }
   }
   
-  private static class ExtendedTabPanel extends TabPanel {
+  private static class ExtendedTabPanel extends TabPanel implements Attachable{
 
-    void attach() {
+    public void attach() {
       onAttach();
       RootPanel.detachOnWindowClose(this);
     }
@@ -94,8 +94,7 @@ public class TabPanelWidgetFactory implements WidgetFactory<TabPanel> {
       tabPanel.selectTab(0);
     }
 
-    WidgetsUtils.replace(e, tabPanel.getElement());
+    WidgetsUtils.replace(e, tabPanel);
 
-    tabPanel.attach();
   }
 }
index 212c36f93a247c81b85a464240d6933300767e49..61ac65fc8a6f30e369d02660da8567394f7140d9 100644 (file)
@@ -34,11 +34,11 @@ public class GwtQueryWidgetModule implements EntryPoint {
   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
@@ -53,17 +53,17 @@ public class GwtQueryWidgetModule implements EntryPoint {
         });\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
index 1b6c485c87a23eb54cfa4a14715dda09b8231ad4..29217aff96f70b71e79ca74532339af6ea36695f 100644 (file)
@@ -61,6 +61,20 @@ felis vestibulum consequat. Aliquam erat volutpat.</div>
 </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