diff -r e0d6e9bd3ca7 -r bf7ee68962da javauis/lcdui_qt/src/javax/microedition/lcdui/Form.java --- 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.