So the reason for this is because PopUpManager listens for the SHOW and HIDE events (see PopUpManagerImpl.as line 471). If your popped up component dispatches SHOW or HIDE then the PopUpManager takes this to mean that it should show or hide the popup.

So when your popped up window dispatches SHOW, PopUpManager calls showModalWindow(), which then also sets the window's visible property. If this setting of the visible property in turn triggered the SHOW event, then we'd get caught in an endless loop of PopUpManager calling showModalWindow() over and over again.

So this isn't a solution, but hopefully it helps to understand what's going on.

Doug


Roman Protsiuk wrote:

I guess the reason is in following line of PopUpManagerImpl.as:

line 574: IUIComponent(o.owner).setVisible(true, true);

Second parameter says do not dispatch "show" event... I wonder why is
it this way...

Maybe someone who understands this behavior will read these lines someday.

R.

On 2/1/07, Roman Protsiuk <[EMAIL PROTECTED] <mailto:roman.protsiuk%40gmail.com>> wrote:
> Hi, everyone.
>
> I've modified my previous example (if anyone saw it). Now I'm using
> following approach to handle pop ups:
>
> The pop up itself PopUpWindow.mxml:
>
> <?xml version="1.0" encoding="utf-8"?>
> <mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml <http://www.adobe.com/2006/mxml>"
> layout="vertical"
> horizontalAlign="center"
> width="400"
> height="300"
> implements="mx.managers.IFocusManagerComponent"
> title="TESTING"
> defaultButton="{mainButton}"
> creationComplete="onCreationComplete()"
> show="onShow()">
>
> <mx:Box height="100%" minHeight="0" width="100%">
> <mx:Text id="traceText" text="show captured (not creationComplete):" />
> </mx:Box>
>
> <mx:Canvas width="100%">
> <mx:Label id="total" text="total: none" left="10" />
> <mx:Button id="mainButton"
> horizontalCenter="0"
> bottom="10"
> label="close me"
> click="onMainButtonClick()" />
> </mx:Canvas>
>
> <mx:Script>
> <![CDATA[
> import mx.core.Application;
> import mx.managers.PopUpManager;
> import mx.managers.PopUpManagerChildList;
>
> private static var _popUp : PopUpWindow;
>
> private static var _totalCounter : Number = 0;
>
> private static var _showCounter : Number = 0;
>
> public var modal : Boolean;
>
> public static function showPopUp(parent : DisplayObject = null,
> modal : Boolean = true) : PopUpWindow {
> var popUpParent : DisplayObject = (parent != null ? parent :
> DisplayObject(Application.application));
>
> if (_popUp == null) {
> _popUp = PopUpWindow(PopUpManager.createPopUp(popUpParent,
> PopUpWindow, modal, PopUpManagerChildList.APPLICATION));
> } else {
> if (!_popUp.isPopUp) {
> _popUp.modal = modal;
> _popUp.traceText.htmlText += (++_totalCounter).toString() + ") "
> + " modality: " + modal.toString() + ". ";
>
> PopUpManager.addPopUp(_popUp, popUpParent, modal,
> PopUpManagerChildList.APPLICATION);
> }
> }
>
> PopUpManager.centerPopUp(_popUp);
>
> return _popUp;
> }
>
> protected function hidePopUp() : void {
> if (isPopUp) {
> PopUpManager.removePopUp(this);
> }
> }
>
> protected function onCreationComplete() : void {
> mainButton.setFocus();
> }
>
> protected function onShow() : void {
> mainButton.setFocus();
>
> traceText.htmlText += (++_showCounter).toString() + " time" +
> (_showCounter == 1 ? "" : "s");
> total.text = "total: " + _showCounter.toString();
> }
>
> protected override function focusOutHandler(event : FocusEvent) : void {
> if (event.relatedObject == null || !contains(event.relatedObject)) {
> hidePopUp();
> }
> super.focusOutHandler(event);
> }
>
> private function onMainButtonClick() : void {
> hidePopUp();
> dispatchEvent(new Event(Event.CLOSE));
> }
>
> ]]>
> </mx:Script>
>
> </mx:TitleWindow>
>
>
> Application popUpSample.mxml:
>
> <?xml version="1.0" encoding="utf-8"?>
> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml <http://www.adobe.com/2006/mxml>"
> layout="absolute">
>
> <mx:CheckBox id="modal" label="modal?" horizontalCenter="0"
> verticalCenter="-30" />
>
> <mx:Button id="clickButton"
> horizontalCenter="0"
> verticalCenter="0"
> label="click me"
> click="onButtonClick()" />
>
> <mx:Script>
> <![CDATA[
> private function onButtonClick() : void {
> PopUpWindow.showPopUp(null, modal.selected);
> }
> ]]>
> </mx:Script>
>
> </mx:Application>
>
>
> The problem here consist in show event which should be dispatched when
> component visibility is changed to true as I understand.
> The bad thing is this pop up dispatches show event ONLY while it is
> NOT MODAL. If I say 'let's make it modal', show event isn't
> dispatched. Confusing. At least as for me.
>
> Can anybody explain this behavior? Or say it's not right?
>
> Thanks,
> R.
>


Reply via email to