javauis/lcdui_qt/src/javax/microedition/lcdui/CustomItemLayouter.java
changeset 23 98ccebc37403
parent 21 2a9601315dfc
child 26 dc7c549001d5
--- a/javauis/lcdui_qt/src/javax/microedition/lcdui/CustomItemLayouter.java	Mon May 03 12:27:20 2010 +0300
+++ b/javauis/lcdui_qt/src/javax/microedition/lcdui/CustomItemLayouter.java	Fri May 14 15:47:24 2010 +0300
@@ -32,7 +32,8 @@
 /**
  * Responsible for layouting CustomItem.
  */
-class CustomItemLayouter extends ItemLayouter {
+class CustomItemLayouter extends ItemLayouter
+{
 
     /**
      * Key name for paint listener.
@@ -60,65 +61,75 @@
     private int timeout;
     private boolean disableTapDetection;
     private boolean suppressDragEvent;
-	  private boolean selectionKeyCompatibility;
+    private boolean selectionKeyCompatibility;
 
     /**
      * Constructor.
      *
      * @param dflp DefaultFormLayoutPolicy used for layouting.
      */
-    public CustomItemLayouter(DefaultFormLayoutPolicy dflp) {
+    public CustomItemLayouter(DefaultFormLayoutPolicy dflp)
+    {
         super(dflp);
 
         noBackground = JadAttributeUtil.isValue(JadAttributeUtil.ATTRIB_NOKIA_UI_ENHANCEMENT,
-        			JadAttributeUtil.VALUE_CANVAS_HAS_BACKGROUND);
+                                                JadAttributeUtil.VALUE_CANVAS_HAS_BACKGROUND);
 
         graphics = new Graphics();
 
         selectionKeyCompatibility = JadAttributeUtil.isValue(JadAttributeUtil.ATTRIB_NOKIA_MIDLET_S60_SELECTION_KEY_COMPATIBILITY,
-        			JadAttributeUtil.VALUE_TRUE);
+                                    JadAttributeUtil.VALUE_TRUE);
 
         String tapAttr = JadAttributeUtil.getValue(JadAttributeUtil.ATTRIB_NOKIA_MIDLET_TAP_DETECTION_OPTIONS);
-        if(tapAttr != null) {
-          if(tapAttr.indexOf(',') == -1) {
-						setDefaultTapValues();
-          }
-          else {
-              String twipString = tapAttr.substring(0, tapAttr.indexOf(',')).trim();
-              String timeoutString = tapAttr.substring(tapAttr.indexOf(',') + 1, tapAttr.length()).trim();
-              try {
-          	     twips = Integer.parseInt(twipString);
-          	     timeout = Integer.parseInt(timeoutString);
+        if(tapAttr != null)
+        {
+            if(tapAttr.indexOf(',') == -1)
+            {
+                setDefaultTapValues();
+            }
+            else
+            {
+                String twipString = tapAttr.substring(0, tapAttr.indexOf(',')).trim();
+                String timeoutString = tapAttr.substring(tapAttr.indexOf(',') + 1, tapAttr.length()).trim();
+                try
+                {
+                    twips = Integer.parseInt(twipString);
+                    timeout = Integer.parseInt(timeoutString);
 
-                 // Check for Negative Values
-          	     if( (twips < 0) && (timeout < 0) ) {
-          		       setDefaultTapValues();
-                 }
+                    // Check for Negative Values
+                    if((twips < 0) && (timeout < 0))
+                    {
+                        setDefaultTapValues();
+                    }
 
-                 if( (twips == 0)  && (timeout == 0) ) {
-                     disableTapDetection = true;
-                 }
+                    if((twips == 0)  && (timeout == 0))
+                    {
+                        disableTapDetection = true;
+                    }
 
-                 // if any one of the value is zero, set defaults
-                 if( !((twips != 0) && (timeout != 0)) ) {
-                     setDefaultTapValues();
-                 }
-              }
-              catch (NumberFormatException e) {
-              	 // Alpha Numeric Values of Timeouts and Timeout
-					       setDefaultTapValues();
-              }
-          }
+                    // if any one of the value is zero, set defaults
+                    if(!((twips != 0) && (timeout != 0)))
+                    {
+                        setDefaultTapValues();
+                    }
+                }
+                catch(NumberFormatException e)
+                {
+                    // Alpha Numeric Values of Timeouts and Timeout
+                    setDefaultTapValues();
+                }
+            }
         }
         else
         {
-        	 setDefaultTapValues();
+            setDefaultTapValues();
         }
     }
 
-    private void setDefaultTapValues() {
-				twips = DEFAULT_TWIPS;
-				timeout = DEFAULT_TIMEOUT;
+    private void setDefaultTapValues()
+    {
+        twips = DEFAULT_TWIPS;
+        timeout = DEFAULT_TIMEOUT;
     }
 
     /**
@@ -128,16 +139,18 @@
      * @param item on which it is based. Must be CustomItem.
      * @return Control.
      */
-    Control eswtGetControl(Composite parent, Item item) {
+    Control eswtGetControl(Composite parent, Item item)
+    {
         Control ret = new CanvasExtension(parent,
-                (noBackground ? SWT.NO_BACKGROUND : SWT.NONE));
+                                          (noBackground ? SWT.NO_BACKGROUND : SWT.NONE));
         return ret;
     }
 
     /**
      * Set the size of the layouted Control.
      */
-    void eswtResizeControl(Item item, Control control, int width, int height) {
+    void eswtResizeControl(Item item, Control control, int width, int height)
+    {
         super.eswtResizeControl(item, control, width, height);
         CustomItem customitem = (CustomItem) item;
         customitem.internalHandleSizeChanged(width, height);
@@ -146,7 +159,8 @@
     /**
      * Add listeners to Layouter specific control.
      */
-    void eswtAddSpecificListeners(Item item, Control control) {
+    void eswtAddSpecificListeners(Item item, Control control)
+    {
         super.eswtAddSpecificListeners(item, control);
         CanvasExtension canvas = (CanvasExtension) control;
         CIPaintListener pl = new CIPaintListener((CustomItem) item);
@@ -162,16 +176,19 @@
     /**
      * Remove listeners from Layouter specific control.
      */
-    void eswtRemoveSpecificListeners(Item item, Control control) {
+    void eswtRemoveSpecificListeners(Item item, Control control)
+    {
         super.eswtRemoveSpecificListeners(item, control);
         CanvasExtension canvas = (CanvasExtension) control;
         CIPaintListener pl = (CIPaintListener) canvas.getData(PAINT_LISTENER);
-        if (pl != null) {
+        if(pl != null)
+        {
             canvas.removePaintListener(pl);
             canvas.setData(PAINT_LISTENER, null);
         }
         CIMouseListener ml = (CIMouseListener) canvas.getData(MOUSE_LISTENER);
-        if (ml != null) {
+        if(ml != null)
+        {
             canvas.removeMouseListener(ml);
             canvas.removeMouseMoveListener(ml);
             canvas.setData(MOUSE_LISTENER, null);
@@ -181,15 +198,18 @@
     /**
      * Returns if this eSWT control is Layouter specific.
      */
-    boolean eswtIsSpecificControl(Item item, Control control) {
+    boolean eswtIsSpecificControl(Item item, Control control)
+    {
         return (control instanceof CanvasExtension);
     }
 
     /**
      * Updates the values of CustomItem.
      */
-    void eswtUpdateItem(Item item, Control control, int reason, Object param) {
-        if (reason == CustomItem.UPDATE_REPAINT_RECT) {
+    void eswtUpdateItem(Item item, Control control, int reason, Object param)
+    {
+        if(reason == CustomItem.UPDATE_REPAINT_RECT)
+        {
             Rectangle rect = (Rectangle) param;
             ((CustomItem)item).updateItem(rect, control);
         }
@@ -198,22 +218,24 @@
     /**
      * Gets Canvas direction based on SWT arrows.
      */
-    int getCanvasDirection(int key) {
+    int getCanvasDirection(int key)
+    {
         int ret = 0;
-        switch (key) {
-            case SWT.ARROW_DOWN:
-                ret = Canvas.DOWN;
-                break;
-            case SWT.ARROW_UP:
-                ret = Canvas.UP;
-                break;
-            case SWT.ARROW_LEFT:
-                ret = Canvas.LEFT;
-                break;
-            case SWT.ARROW_RIGHT:
-                ret = Canvas.RIGHT;
-                break;
-            default:
+        switch(key)
+        {
+        case SWT.ARROW_DOWN:
+            ret = Canvas.DOWN;
+            break;
+        case SWT.ARROW_UP:
+            ret = Canvas.UP;
+            break;
+        case SWT.ARROW_LEFT:
+            ret = Canvas.LEFT;
+            break;
+        case SWT.ARROW_RIGHT:
+            ret = Canvas.RIGHT;
+            break;
+        default:
         }
         return ret;
     }
@@ -221,9 +243,11 @@
     /**
      * Gets the specified visRect parameter needed for traverse.
      */
-    int[] getVisRect(Control control) {
+    int[] getVisRect(Control control)
+    {
         final int[] visRect = new int[4];
-        if (control != null) {
+        if(control != null)
+        {
             Point size = control.getSize();
             visRect[0] = 0;
             visRect[1] = 0;
@@ -239,27 +263,31 @@
      * @param item CustomItem.
      * @param key key code.
      */
-    boolean eswtOfferKeyPressed(Item item, int key) {
+    boolean eswtOfferKeyPressed(Item item, int key)
+    {
         CustomItem customItem = (CustomItem) item;
 
-        if( !((selectionKeyCompatibility == true) && (key == -5)) ) {
+        if(!((selectionKeyCompatibility == true) && (key == -5)))
+        {
             EventDispatcher eventDispatcher = EventDispatcher.instance();
             LCDUIEvent e = eventDispatcher.newEvent(LCDUIEvent.CUSTOMITEM_KEYPRESSED, dfi.getForm());
             e.item = customItem;
             e.keyCode = key;
             eventDispatcher.postEvent(e);
-         }
+        }
 
         boolean consumed = true;
         int direction = getCanvasDirection(key);
-        if (direction > 0) {
+        if(direction > 0)
+        {
             Control control = eswtGetFirstControl(item);
             Control ctrl = eswtFindSpecificControl(item, control);
             int[] visRect = getVisRect(ctrl);
             // Offer event for inner traversal
             consumed = customItem.traverse(direction,
-                    dfi.getFormWidth(), dfi.getFormHeight(), visRect);
-            if (consumed) {
+                                           dfi.getFormWidth(), dfi.getFormHeight(), visRect);
+            if(consumed)
+            {
                 // if inner focus is on - scroll to inner focus
                 Point loc = new Point(0, 0);
                 dfi.getControlPositionOnComposite(ctrl, loc);
@@ -274,10 +302,12 @@
     /* (non-Javadoc)
      * @see ItemLayouter#eswtOfferKeyReleased(Item, int)
      */
-    boolean eswtOfferKeyReleased(Item item, int key) {
+    boolean eswtOfferKeyReleased(Item item, int key)
+    {
         CustomItem customItem = (CustomItem) item;
 
-        if( !((selectionKeyCompatibility == true) && (key == -5)) ) {
+        if(!((selectionKeyCompatibility == true) && (key == -5)))
+        {
             EventDispatcher eventDispatcher = EventDispatcher.instance();
             LCDUIEvent e = eventDispatcher.newEvent(LCDUIEvent.CUSTOMITEM_KEYRELEASED, dfi.getForm());
             e.item = customItem;
@@ -285,7 +315,8 @@
             eventDispatcher.postEvent(e);
         }
 
-        if (getCanvasDirection(key) > 0) {
+        if(getCanvasDirection(key) > 0)
+        {
             return true;
         }
         return false;
@@ -294,15 +325,18 @@
     /* (non-Javadoc)
      * @see ItemLayouter#eswtFocusGained(Item, int)
      */
-    void eswtFocusGained(Item item, int swtDir) {
+    void eswtFocusGained(Item item, int swtDir)
+    {
         super.eswtFocusGained(item, swtDir);
         CustomItem customItem = (CustomItem) item;
         Control control = eswtGetFirstControl(item);
-        if (control != null) {
+        if(control != null)
+        {
             Control ctrl = eswtFindSpecificControl(item, control);
             int[] visRect = getVisRect(ctrl);
-            if (customItem.traverse(getCanvasDirection(swtDir),
-                    dfi.getFormWidth(), dfi.getFormHeight(), visRect)) {
+            if(customItem.traverse(getCanvasDirection(swtDir),
+                                   dfi.getFormWidth(), dfi.getFormHeight(), visRect))
+            {
                 // if inner focus is on - scroll to inner focus
                 Point loc = new Point(0, 0);
                 dfi.getControlPositionOnComposite(ctrl, loc);
@@ -316,7 +350,8 @@
     /* (non-Javadoc)
      * @see ItemLayouter#eswtFocusLost(Item)
      */
-    void eswtFocusLost(Item item) {
+    void eswtFocusLost(Item item)
+    {
         super.eswtFocusLost(item);
         CustomItem customItem = (CustomItem) item;
         customItem.traverseOut();
@@ -325,7 +360,8 @@
     /* (non-Javadoc)
      * @see temLayouter#eswtHandleShow(Item)
      */
-    void eswtHandleShow(Item item) {
+    void eswtHandleShow(Item item)
+    {
         EventDispatcher eventDispatcher = EventDispatcher.instance();
         LCDUIEvent event = eventDispatcher.newEvent(LCDUIEvent.CUSTOMITEM_SHOWNOTIFY, dfi.getForm());
         event.item = item;
@@ -337,7 +373,8 @@
     /* (non-Javadoc)
      * @see ItemLayouter#eswtHandleHide(Item)
      */
-    void eswtHandleHide(Item item) {
+    void eswtHandleHide(Item item)
+    {
         EventDispatcher eventDispatcher = EventDispatcher.instance();
         LCDUIEvent event = eventDispatcher.newEvent(LCDUIEvent.CUSTOMITEM_HIDENOTIFY, dfi.getForm());
         event.item = item;
@@ -350,9 +387,10 @@
      * @param customitem CustomItem object.
      * @return Minimum area needed to display CustomItem.
      */
-    static Point calculateMinimumBounds(final CustomItem customitem) {
+    static Point calculateMinimumBounds(final CustomItem customitem)
+    {
         Point minSize = new Point(customitem.getMinContentWidth(),
-                customitem.getMinContentHeight());
+                                  customitem.getMinContentHeight());
         applyMinMargins(customitem, minSize);
         return minSize;
     }
@@ -363,11 +401,12 @@
      * @param item CustomItem object.
      * @return preferred area needed to display CustomItem.
      */
-    static Point calculatePreferredBounds(final Item item) {
+    static Point calculatePreferredBounds(final Item item)
+    {
         CustomItem customitem = (CustomItem) item;
         Point prefSize = new Point(
-                customitem.getPrefContentWidth(item.getLockedPreferredHeight()),
-               customitem.getPrefContentHeight(item.getLockedPreferredWidth()));
+            customitem.getPrefContentWidth(item.getLockedPreferredHeight()),
+            customitem.getPrefContentHeight(item.getLockedPreferredWidth()));
         applyPrefMargins(item, prefSize);
         return prefSize;
     }
@@ -375,52 +414,61 @@
     /**
      * Paint listener.
      */
-    class CIPaintListener implements PaintListener {
+    class CIPaintListener implements PaintListener
+    {
 
         private CustomItem customItem;
 
-        CIPaintListener(CustomItem customItem) {
+        CIPaintListener(CustomItem customItem)
+        {
             this.customItem = customItem;
         }
 
-        public void paintControl(PaintEvent pe) {
-        	if(customItem.bufferFlush) {
-        		// Paint event initiated by us to paint the Canvas.
-				pe.gc.getGCData().internalGc.render(graphics.getCommandBuffer());
-        	} else {
-				// Native toolkit is requesting an update of an area that has
-				// become invalid. Can't do anything here because the contents
-				// need to be queried from the MIDlet in another thread by
-				// a paint callback. For this a paint callback event is posted.
-				// For a moment the native toolkit thinks that the area has
-				// been validated when in truth it will be painted later after
-				// the paint callback has been executed.
-				EventDispatcher eventDispatcher = EventDispatcher.instance();
-				LCDUIEvent event = eventDispatcher.newEvent(
-						LCDUIEvent.CUSTOMITEM_PAINT_NATIVE_REQUEST, dfi.getForm());
-				event.x = pe.x;
-				event.y = pe.y;
-				event.width = pe.width;
-				event.height = pe.height;
-				event.widget = pe.widget;
-				event.item = customItem;
-				eventDispatcher.postEvent(event);
-        	}
+        public void paintControl(PaintEvent pe)
+        {
+            if(customItem.bufferFlush)
+            {
+                // Paint event initiated by us to paint the Canvas.
+                pe.gc.getGCData().internalGc.render(graphics.getCommandBuffer());
+            }
+            else
+            {
+                // Native toolkit is requesting an update of an area that has
+                // become invalid. Can't do anything here because the contents
+                // need to be queried from the MIDlet in another thread by
+                // a paint callback. For this a paint callback event is posted.
+                // For a moment the native toolkit thinks that the area has
+                // been validated when in truth it will be painted later after
+                // the paint callback has been executed.
+                EventDispatcher eventDispatcher = EventDispatcher.instance();
+                LCDUIEvent event = eventDispatcher.newEvent(
+                                       LCDUIEvent.CUSTOMITEM_PAINT_NATIVE_REQUEST, dfi.getForm());
+                event.x = pe.x;
+                event.y = pe.y;
+                event.width = pe.width;
+                event.height = pe.height;
+                event.widget = pe.widget;
+                event.item = customItem;
+                eventDispatcher.postEvent(event);
+            }
         }
     }
 
     /**
      * Mouse listener.
      */
-    class CIMouseListener implements MouseListener, MouseMoveListener {
+    class CIMouseListener implements MouseListener, MouseMoveListener
+    {
 
         private CustomItem customItem;
 
-        CIMouseListener(CustomItem customItem) {
+        CIMouseListener(CustomItem customItem)
+        {
             this.customItem = customItem;
         }
 
-        public void mouseDown(MouseEvent event) {
+        public void mouseDown(MouseEvent event)
+        {
             EventDispatcher eventDispatcher = EventDispatcher.instance();
             LCDUIEvent e = eventDispatcher.newEvent(LCDUIEvent.CUSTOMITEM_POINTERPRESSED, dfi.getForm());
             e.item = customItem;
@@ -428,9 +476,10 @@
             e.y = event.y;
             eventDispatcher.postEvent(e);
 
-           if(!disableTapDetection) {
+            if(!disableTapDetection)
+            {
                 // Supress Drag events
-           	    suppressDragEvent = true;
+                suppressDragEvent = true;
 
                 pointerDownX = event.x;
                 pointerDownY = event.y;
@@ -438,25 +487,28 @@
                 // Create and Schedule Timer
                 timerTask = new CustomItemTimerTask();
                 timer.schedule(timerTask, timeout);
-           }
+            }
         }
 
-        public void mouseUp(MouseEvent event) {
+        public void mouseUp(MouseEvent event)
+        {
             int pointerUpX = event.x;
             int pointerUpY = event.y;
 
-            if(!disableTapDetection) {
+            if(!disableTapDetection)
+            {
                 timerTask.cancel();
                 timerTask = null;
 
                 // If Timer not expired and Mouseup is withing rectangle assign
                 // PointercDown to Pinter Up
-        	      if(suppressDragEvent && checkWithinRect(event.x, event.y)) {
-        	  	      pointerUpX = pointerDownX;
-        	  	      pointerUpY = pointerDownY;
-       	  	  	    suppressDragEvent = false;
-         	      }
-           }
+                if(suppressDragEvent && checkWithinRect(event.x, event.y))
+                {
+                    pointerUpX = pointerDownX;
+                    pointerUpY = pointerDownY;
+                    suppressDragEvent = false;
+                }
+            }
             EventDispatcher eventDispatcher = EventDispatcher.instance();
             LCDUIEvent e = eventDispatcher.newEvent(LCDUIEvent.CUSTOMITEM_POINTERRELEASED, dfi.getForm());
             e.item = customItem;
@@ -465,24 +517,28 @@
             eventDispatcher.postEvent(e);
         }
 
-        public void mouseMove(MouseEvent event) {
-        	  // Check for timeout expiry and PointerUp falls outside rectangle
-         	  if( disableTapDetection || (!suppressDragEvent) || !checkWithinRect(event.x, event.y)) {
-                  EventDispatcher eventDispatcher = EventDispatcher.instance();
-                  LCDUIEvent e = eventDispatcher.newEvent(LCDUIEvent.CUSTOMITEM_POINTERDRAGGED, dfi.getForm());
-                  e.item = customItem;
-                  e.x = event.x;
-                  e.y = event.y;
-                  eventDispatcher.postEvent(e);
+        public void mouseMove(MouseEvent event)
+        {
+            // Check for timeout expiry and PointerUp falls outside rectangle
+            if(disableTapDetection || (!suppressDragEvent) || !checkWithinRect(event.x, event.y))
+            {
+                EventDispatcher eventDispatcher = EventDispatcher.instance();
+                LCDUIEvent e = eventDispatcher.newEvent(LCDUIEvent.CUSTOMITEM_POINTERDRAGGED, dfi.getForm());
+                e.item = customItem;
+                e.x = event.x;
+                e.y = event.y;
+                eventDispatcher.postEvent(e);
             }
         }
 
-        public void mouseDoubleClick(MouseEvent event) {
+        public void mouseDoubleClick(MouseEvent event)
+        {
         }
 
-        boolean checkWithinRect(int x, int y) {
-        	  // Get pixel per inch
-        		Point P = Display.getCurrent().getDPI();
+        boolean checkWithinRect(int x, int y)
+        {
+            // Get pixel per inch
+            Point P = Display.getCurrent().getDPI();
 
             float xPxielwidth  = (twips * P.x) / 1440;
             float yPixelHeight = (twips * P.y) / 1440;
@@ -490,42 +546,47 @@
             int RightX = pointerDownX + (int) xPxielwidth;
 
             // If the rectange width falls outside the custom area
-            if(RightX > customItem.getContentWidth()) {
-               RightX = customItem.getContentWidth();
+            if(RightX > customItem.getContentWidth())
+            {
+                RightX = customItem.getContentWidth();
             }
 
             int LeftX = pointerDownX - (int) xPxielwidth;
 
             // If the rectange width falls outside the custom area
             if(LeftX < 0)
-              LeftX = 0;
+                LeftX = 0;
 
             int TopY = pointerDownY - (int) yPixelHeight;
 
             // If the rectange height falls outside the custom area
-            if( TopY < 0 )
-               TopY = 0;
+            if(TopY < 0)
+                TopY = 0;
 
             int DownY = pointerDownY + (int) yPixelHeight;
 
             // If the rectange heightfalls outside the custom area.
-            if( DownY > customItem.getContentHeight() )
-              DownY = customItem.getContentHeight();
+            if(DownY > customItem.getContentHeight())
+                DownY = customItem.getContentHeight();
 
             // Find the PointerUp is withing rectange
-            if( (x >= LeftX ) && (x <= RightX) ) {
-                if( (y >= TopY ) && (y <= DownY) ) {
-                	return true;
+            if((x >= LeftX) && (x <= RightX))
+            {
+                if((y >= TopY) && (y <= DownY))
+                {
+                    return true;
                 }
             }
-    	  return false;
+            return false;
         }
     }
 
-    class CustomItemTimerTask extends TimerTask {
+    class CustomItemTimerTask extends TimerTask
+    {
 
-        public void run() {
-        	   suppressDragEvent = false;
+        public void run()
+        {
+            suppressDragEvent = false;
         }
     }