javauis/lcdui_qt/src/javax/microedition/lcdui/Form.java
changeset 61 bf7ee68962da
parent 35 85266cc22c7f
--- a/javauis/lcdui_qt/src/javax/microedition/lcdui/Form.java	Tue Jul 06 14:10:26 2010 +0300
+++ b/javauis/lcdui_qt/src/javax/microedition/lcdui/Form.java	Wed Aug 18 09:43:15 2010 +0300
@@ -34,7 +34,7 @@
     /**
      * Abstract layouting policy.
      */
-    private FormLayoutPolicy layoutPolicy;
+    private FormLayouter formLayouter;
 
     /**
      * Item vector.
@@ -69,7 +69,7 @@
     {
         super(title);
         construct();
-        layoutPolicy = new DefaultFormInteraction(this);
+        formLayouter = new FormLayouter(this);
     }
 
     /**
@@ -117,7 +117,7 @@
         {
             vBar.addSelectionListener(fsbl);
         }
-        layoutPolicy.handleShowCurrentEvent();
+        formLayouter.handleShowCurrentEvent();
     }
 
     /* (non-Javadoc)
@@ -132,7 +132,7 @@
         {
             vBar.removeSelectionListener(fsbl);
         }
-        layoutPolicy.handleHideCurrentEvent();
+        formLayouter.handleHideCurrentEvent();
     }
 
     /* (non-Javadoc)
@@ -147,7 +147,7 @@
             formComposite.setOrigin(0, 0, true);
             formComposite.setSize(width, height);
             formComposite.setRedraw(true);
-            layoutPolicy.handleResizeEvent(width, height);
+            formLayouter.handleResizeEvent(width, height);
             resetLayoutTimer(0);
         }
     }
@@ -166,7 +166,7 @@
         }
         else
         {
-            layoutPolicy.handleKeyEvent(e.keyCode, e.type);
+            formLayouter.handleKeyEvent(e.keyCode, e.type);
         }
     }
 
@@ -189,7 +189,7 @@
                 MsgRepository.FORM_EXCEPTION_ITEM_OWNED_BY_CONTAINER);
         }
         int returnValue = -1;
-        synchronized(layoutPolicy)
+        synchronized(formLayouter)
         {
             item.setParent(this);
             items.addElement(item);
@@ -255,7 +255,7 @@
             throw new IndexOutOfBoundsException(
                 MsgRepository.FORM_EXCEPTION_INVALID_ITEM_INDEX);
         }
-        synchronized(layoutPolicy)
+        synchronized(formLayouter)
         {
             item.setParent(this);
             items.insertElementAt(item, position);
@@ -276,9 +276,11 @@
             throw new IndexOutOfBoundsException(
                 MsgRepository.FORM_EXCEPTION_INVALID_ITEM_INDEX);
         }
-        synchronized(layoutPolicy)
+        synchronized(formLayouter)
         {
-            ((Item) items.elementAt(position)).setParent(null);
+        	Item item = ((Item) items.elementAt(position));
+            item.clearParent();
+        	formLayouter.removeLayoutObject(item);			
             items.removeElementAt(position);
             resetLayoutTimer(position - 1);
         }
@@ -289,11 +291,13 @@
      */
     public void deleteAll()
     {
-        synchronized(layoutPolicy)
+        synchronized(formLayouter)
         {
             for(int i = 0; i < items.size(); i++)
             {
-                ((Item) items.elementAt(i)).setParent(null);
+	        	Item item = ((Item) items.elementAt(i));
+                item.clearParent();
+	        	formLayouter.removeLayoutObject(item);
             }
             items.removeAllElements();
             resetLayoutTimer(0);
@@ -324,11 +328,13 @@
             throw new IndexOutOfBoundsException(
                 MsgRepository.FORM_EXCEPTION_INVALID_ITEM_INDEX);
         }
-        synchronized(layoutPolicy)
+        synchronized(formLayouter)
         {
             newItem.setParent(this);
             // clear reference to a form for "old" item.
-            get(position).setParent(null);
+            Item oldItem = get(position);
+			oldItem.clearParent();
+			formLayouter.removeLayoutObject(oldItem);
             items.setElementAt(newItem, position);
             resetLayoutTimer(position);
         }
@@ -344,7 +350,7 @@
     public Item get(int position)
     {
         Item returnItem = null;
-        synchronized(layoutPolicy)
+        synchronized(formLayouter)
         {
             try
             {
@@ -386,7 +392,7 @@
      */
     void setCurrentItem(Item item)
     {
-        layoutPolicy.setCurrentItem(item);
+        formLayouter.setCurrentItem(item);
     }
 
     /**
@@ -419,30 +425,24 @@
      * @param updateReason
      * @param param additional parameter
      */
-    void updateItemState(Item item, int updateReason, Object param)
-    {
-        if(item != null && item.getParent() == this)
-        {
-            if((updateReason & Item.UPDATE_WIDTH_CHANGED) != 0)
-            {
-                synchronized(layoutPolicy)
-                {
-                    resetLayoutTimer(items.indexOf(item));
-                }
-            }
-            else
-            {
-                if(layoutPolicy instanceof DefaultFormInteraction)
-                {
-                    if(layoutTimer != null)
-                    {
-                        ((DefaultFormInteraction) layoutPolicy)
-                        .updateItemState(item, updateReason, param);
-                    }
-                }
-            }
-        }
-    }
+	void updateItemState(Item item, int updateReason, Object param)
+	{
+		if(item != null && item.getParent() == this)
+		{
+			if(layoutTimer != null)
+			{
+				formLayouter.updateItemState(item, updateReason, param);
+			}
+			
+			if((updateReason & Item.UPDATE_SIZE_CHANGED) != 0)
+			{
+				synchronized(formLayouter)
+				{
+					resetLayoutTimer(items.indexOf(item));
+				}
+			}
+		}
+	}
 
     /**
      * Get Vector of items.
@@ -464,13 +464,13 @@
 
 
     /**
-     * Returns form layout policy.
+     * Returns form Form Layouter.
      * @return Reference to layout policy.
      *
      */
-    FormLayoutPolicy getLayoutPolicy()
+    FormLayouter getFormLayouter()
     {
-        return layoutPolicy;
+        return formLayouter;
     }
 
     // =========================================================================
@@ -483,7 +483,7 @@
         super(title);
         construct();
         layoutLR = leftRightLanguage;
-        layoutPolicy = new DefaultFormInteraction(this);
+        formLayouter = new FormLayouter(this);
     }
 
     // =========================================================================
@@ -510,13 +510,30 @@
             }
             // schedule new timer
             startIndex = Math.max(0, Math.min(newStartIndex, startIndex));
-            // layoutPolicy.layoutForm(startIndex);
+            // formLayouter.layoutForm(startIndex);
             formTimerTask = new FormTimerTask(startIndex);
             layoutTimer.schedule(formTimerTask, Config.FORM_LAYOUT_TIMER_DELAY);
         }
     }
 
     /**
+     * Cancel Layout Timer.
+     */
+    private void cancelLayoutTimer()
+    {
+        if(layoutTimer != null)
+        {
+            if(formTimerTask != null)
+            {
+                formTimerTask.cancel();
+                formTimerTask = null;
+            }
+            layoutTimer.cancel();
+			layoutTimer = null;
+        }
+    }
+
+    /**
      * Form Timer task. Triggers the formComposite to Layout.
      */
     class FormTimerTask extends TimerTask
@@ -532,7 +549,7 @@
         public void run()
         {
             Logger.method(Form.this, "layout");
-            layoutPolicy.layoutForm(index);
+            formLayouter.layoutForm(index);
             startIndex = items.size();
         }
 
@@ -550,7 +567,7 @@
                 Point p = ((Control) e.widget).toDisplay(new Point(e.x, e.y));
                 // translate display coordinates to composite coordinates
                 p = formComposite.toControl(p);
-                layoutPolicy.handlePointerEvent(p.x, p.y, e.type);
+                formLayouter.handlePointerEvent(p.x, p.y, e.type);
             }
         }
     }*/
@@ -568,7 +585,7 @@
         public void widgetSelected(SelectionEvent se)
         {
             ScrollBar sb = (ScrollBar) se.widget;
-            layoutPolicy.updateScrolling(sb.getSelection(), false);
+            formLayouter.updateScrolling(sb.getSelection(), false);
         }
     }
 
@@ -577,12 +594,12 @@
      */
     void dispose()
     {
+        cancelLayoutTimer();
         super.dispose();
-        layoutTimer.cancel();
-        layoutTimer = null;
         deleteAll();
-        ((DefaultFormInteraction) layoutPolicy).dispose();
-        layoutPolicy = null;
+        formLayouter.dispose();
+		items = null;
+        formLayouter = null;
     }
 
     /*
@@ -593,7 +610,7 @@
         if((event.type & LCDUIEvent.CUSTOMITEMBIT) != 0)
         {
             // Synchronize with Form content modification operations.
-            synchronized(layoutPolicy)
+            synchronized(formLayouter)
             {
                 // If the eSWT widget has been explicitly disposed while the event
                 // was in the queue then ignore the event.