javauis/eswt_akn/org.eclipse.ercp.swt.s60/src/org/eclipse/swt/custom/ScrolledComposite.java
branchRCL_3
changeset 19 71c436fe3ce0
parent 14 04becd199f91
--- a/javauis/eswt_akn/org.eclipse.ercp.swt.s60/src/org/eclipse/swt/custom/ScrolledComposite.java	Tue May 25 12:34:19 2010 +0300
+++ b/javauis/eswt_akn/org.eclipse.ercp.swt.s60/src/org/eclipse/swt/custom/ScrolledComposite.java	Wed Jun 09 09:34:07 2010 +0300
@@ -734,7 +734,10 @@
         if (control == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
         if (control.isDisposed()) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
         if (!contains(control)) SWT.error(SWT.ERROR_INVALID_ARGUMENT);
+        doShowControl(control, false);
+    }
 
+    private void doShowControl(Control control, boolean center) {
         Rectangle itemRect = getDisplay().map(control.getParent(), this, control.getBounds());
         Rectangle area = getClientArea();
         Point origin = getOrigin();
@@ -746,13 +749,21 @@
         {
             if (area.width < itemRect.x + itemRect.width) origin.x = Math.max(0, origin.x + itemRect.x + Math.min(itemRect.width, area.width) - area.width);
         }
-        if (itemRect.y < 0)
+        
+        if (center && itemRect.height <= area.height)
         {
-            origin.y = Math.max(0, origin.y + itemRect.y);
+            origin.y = origin.y + itemRect.y - (area.height - itemRect.height) / 2;
         }
         else
         {
-            if (area.height < itemRect.y + itemRect.height) origin.y = Math.max(0, origin.y + itemRect.y + Math.min(itemRect.height, area.height) - area.height);
+            if (itemRect.y < 0)
+            {
+                origin.y = Math.max(0, origin.y + itemRect.y);
+            }
+            else
+            {
+                if (area.height < itemRect.y + itemRect.height) origin.y = Math.max(0, origin.y + itemRect.y + Math.min(itemRect.height, area.height) - area.height);
+            }
         }
         setOrigin(origin);
     }
@@ -765,4 +776,10 @@
         int vSelection = vBar.getSelection();
         content.setLocation(location.x, -vSelection);
     }
+    
+    void handleShowFocusedControlEvent()
+    {
+        Control control = getDisplay().getFocusControl();
+        if (contains(control)) doShowControl(control, true);
+    }
 }