Adding a constructor override to SplitLayoutPanel so users can specify the width of the splitter.

Review at http://gwt-code-reviews.appspot.com/1001801

Review by: jgw@google.com

git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@9061 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/user/client/ui/SplitLayoutPanel.java b/user/src/com/google/gwt/user/client/ui/SplitLayoutPanel.java
index 9bd75d5..6997d1d 100644
--- a/user/src/com/google/gwt/user/client/ui/SplitLayoutPanel.java
+++ b/user/src/com/google/gwt/user/client/ui/SplitLayoutPanel.java
@@ -15,10 +15,11 @@
  */
 package com.google.gwt.user.client.ui;
 
+import com.google.gwt.core.client.Scheduler;
+import com.google.gwt.core.client.Scheduler.ScheduledCommand;
 import com.google.gwt.dom.client.Document;
 import com.google.gwt.dom.client.Style.Unit;
 import com.google.gwt.user.client.Command;
-import com.google.gwt.user.client.DeferredCommand;
 import com.google.gwt.user.client.Event;
 
 /**
@@ -56,7 +57,7 @@
   class HSplitter extends Splitter {
     public HSplitter(Widget target, boolean reverse) {
       super(target, reverse);
-      getElement().getStyle().setPropertyPx("width", SPLITTER_SIZE);
+      getElement().getStyle().setPropertyPx("width", splitterSize);
       setStyleName("gwt-SplitLayoutPanel-HDragger");
     }
 
@@ -86,7 +87,7 @@
 
     private int offset;
     private boolean mouseDown;
-    private Command layoutCommand;
+    private ScheduledCommand layoutCommand;
 
     private final boolean reverse;
     private int minSize;
@@ -170,7 +171,7 @@
             forceLayout();
           }
         };
-        DeferredCommand.addCommand(layoutCommand);
+        Scheduler.get().scheduleDeferred(layoutCommand);
       }
     }
   }
@@ -178,7 +179,7 @@
   class VSplitter extends Splitter {
     public VSplitter(Widget target, boolean reverse) {
       super(target, reverse);
-      getElement().getStyle().setPropertyPx("height", SPLITTER_SIZE);
+      getElement().getStyle().setPropertyPx("height", splitterSize);
       setStyleName("gwt-SplitLayoutPanel-VDragger");
     }
 
@@ -203,13 +204,39 @@
     }
   }
 
-  private static final int SPLITTER_SIZE = 8;
+  private static final int DEFAULT_SPLITTER_SIZE = 8;
 
+  private final int splitterSize; 
+
+  /**
+   * Construct a new {@link SplitLayoutPanel} with the default splitter size of
+   * 8px.
+   */
   public SplitLayoutPanel() {
+    this(DEFAULT_SPLITTER_SIZE);
+  }
+
+  /**
+   * Construct a new {@link SplitLayoutPanel} with the specified splitter size
+   * in pixels.
+   * 
+   * @param splitterSize the size of the splitter in pixels
+   */
+  public SplitLayoutPanel(int splitterSize) {
     super(Unit.PX);
+    this.splitterSize = splitterSize;
     setStyleName("gwt-SplitLayoutPanel");
   }
 
+  /**
+   * Return the size of the splitter in pixels.
+   * 
+   * @return the splitter size
+   */
+  public int getSplitterSize() {
+    return splitterSize;
+  }
+
   @Override
   public void insert(Widget child, Direction direction, double size, Widget before) {
     super.insert(child, direction, size, before);
@@ -291,6 +318,6 @@
         assert false : "Unexpected direction";
     }
 
-    super.insert(splitter, layout.direction, SPLITTER_SIZE, before);
+    super.insert(splitter, layout.direction, splitterSize, before);
   }
 }
diff --git a/user/test/com/google/gwt/user/client/ui/SplitLayoutPanelTest.java b/user/test/com/google/gwt/user/client/ui/SplitLayoutPanelTest.java
index 8b90ade..41a1d39 100644
--- a/user/test/com/google/gwt/user/client/ui/SplitLayoutPanelTest.java
+++ b/user/test/com/google/gwt/user/client/ui/SplitLayoutPanelTest.java
@@ -89,6 +89,16 @@
     assertEquals(l4, children.get(8));
   }
 
+  public void testSplitterSize() {
+    SplitLayoutPanel p = new SplitLayoutPanel(5);
+    assertEquals(5, p.getSplitterSize());
+    WidgetCollection children = p.getChildren();
+
+    p.addWest(new Label("foo"), 64);
+    assertEquals("5px",
+        children.get(1).getElement().getStyle().getWidth().toLowerCase());
+  }
+
   public void testRemoveInsert() {
     SplitLayoutPanel p = new SplitLayoutPanel();
     WidgetCollection children = p.getChildren();