Revision: 9496
Author: [email protected]
Date: Wed Jan  5 10:24:15 2011
Log: Limit SplitLayoutPanel dragging by available container space.
Review at http://gwt-code-reviews.appspot.com/1256801

http://code.google.com/p/google-web-toolkit/source/detail?r=9496

Modified:
 /trunk/user/src/com/google/gwt/user/client/ui/DockLayoutPanel.java
 /trunk/user/src/com/google/gwt/user/client/ui/SplitLayoutPanel.java

=======================================
--- /trunk/user/src/com/google/gwt/user/client/ui/DockLayoutPanel.java Fri Sep 3 06:47:32 2010 +++ /trunk/user/src/com/google/gwt/user/client/ui/DockLayoutPanel.java Wed Jan 5 10:24:15 2011
@@ -124,6 +124,7 @@
   private Widget center;
   private final Layout layout;
   private final LayoutCommand layoutCmd;
+  private double filledWidth, filledHeight;

   /**
    * Creates an empty dock panel.
@@ -379,6 +380,16 @@
   protected Widget getCenter() {
     return center;
   }
+
+  protected double getCenterHeight() {
+ return getElement().getClientHeight() / layout.getUnitSize(unit, true) -
+              filledHeight;
+  }
+
+  protected double getCenterWidth() {
+ return getElement().getClientWidth() / layout.getUnitSize(unit, false) -
+              filledWidth;
+  }

   /**
    * Resolve the specified direction based on the current locale. If the
@@ -510,5 +521,8 @@
           break;
       }
     }
+
+    filledWidth = left + right;
+    filledHeight = top + bottom;
   }
 }
=======================================
--- /trunk/user/src/com/google/gwt/user/client/ui/SplitLayoutPanel.java Fri Dec 10 10:51:39 2010 +++ /trunk/user/src/com/google/gwt/user/client/ui/SplitLayoutPanel.java Wed Jan 5 10:24:15 2011
@@ -68,6 +68,11 @@
     protected int getAbsolutePosition() {
       return getAbsoluteLeft();
     }
+
+    @Override
+    protected double getCenterSize() {
+      return getCenterWidth();
+    }

     @Override
     protected int getEventPosition(Event event) {
@@ -163,13 +168,15 @@

     protected abstract int getAbsolutePosition();

+    protected abstract double getCenterSize();
+
     protected abstract int getEventPosition(Event event);

     protected abstract int getTargetPosition();

     protected abstract int getTargetSize();

-    private void setAssociatedWidgetSize(int size) {
+    private void setAssociatedWidgetSize(double size) {
       if (size < minSize) {
         size = minSize;
       }
@@ -178,6 +185,12 @@
       if (size == layout.size) {
         return;
       }
+
+      // Don't grow beyond remaining space
+      double centerSize = getCenterSize();
+      if (size - layout.size > centerSize) {
+        size = layout.size + centerSize;
+      }

       layout.size = size;

@@ -206,6 +219,11 @@
     protected int getAbsolutePosition() {
       return getAbsoluteTop();
     }
+
+    @Override
+    protected double getCenterSize() {
+      return getCenterHeight();
+    }

     @Override
     protected int getEventPosition(Event event) {

--
http://groups.google.com/group/Google-Web-Toolkit-Contributors

Reply via email to