[FLEX 3.0] - 열려 있는 창이 있다면 한번에 닫고 새로운 창 열기

FLEX/FLEX 2010. 7. 12. 22:01

정말 오랜만에 블러그에 글을 등록하네요.. 요즘 너무 너무 정신이 없어서리... 에휴(핑계..ㅎㅎ)

이번에 새로운 구조로 작업을 하다보니 기존에 만들어 놓았던 창이 열려있으면 다시 못열게 하기 값만 바꾸기 이런게 하나도 되지 않아서 새로운 스크립트 방식으로 작업을 진행해 보았다.

이 구조는 정말 내가 멍청해서 그런지 새로운 창이 열려 있으면 열린 창에 전혀 엑세스를 할수가 없어서 다른 방식을 사용해 보았다.

기존에 창이 몇개가 열려 있더라도 모두 닫아 버리고 새로운 창을 여는 방식이다.
예제를 만들면서 정말 모든 소스를 정리해 버렸더니 정말 간단하다..ㅠㅠ. 왜 이리 삽질을 한거지.. 에휴..

정말 중요한건 저 빨간 소스 3줄이다. 뭐 구지 설명이라고 할것도 없네..

------------------------------------------------------------
popUpTest.mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical">
 
 <mx:Script>
  <![CDATA[
   import mx.core.UIComponent;
  
   import mx.managers.PopUpManager;
   import mx.core.IFlexDisplayObject;
   
   private function onCreatePopup():void
   {
    var pop:PopupTitle = PopupTitle(PopUpManager.createPopUp(this, PopupTitle, false));
    pop.title = "Popup window";
    PopUpManager.centerPopUp(pop);
   }
   
   private function onCreateClosePopup():void
   {
    this.onClosePopup();
    
    var pop:PopupTitle = PopupTitle(PopUpManager.createPopUp(this, PopupTitle, false));
    pop.title = "New Popup Window";
    PopUpManager.centerPopUp(pop);
    
   }
   
   private function onClosePopup():void
   {
    for(var i:int = 0; i < systemManager.numChildren; i++)
    {
     if(systemManager.getChildAt(i) is UIComponent && UIComponent(systemManager.getChildAt(i)).isPopUp)
     {
      PopUpManager.removePopUp(IFlexDisplayObject(systemManager.getChildAt(i--)));
     }
    }
   }
   
  ]]>
 </mx:Script>
  
 <mx:Style>
  .btnStyle {
   fontSize:11;
  }
 </mx:Style>
 
 <mx:ApplicationControlBar dock="true" width="100%" height="50">
  <mx:HBox width="100%" paddingLeft="0" paddingTop="0" paddingRight="0" paddingBottom="0" horizontalGap="4">
   <mx:Button label="새로운 창 열기" styleName="btnStyle" click="onCreatePopup()"/>
   <mx:Button label="모든 창 닫고 새로운 창 열기" styleName="btnStyle" click="onCreateClosePopup()" />
   <mx:Button label="모든 창 닫기"  styleName="btnStyle" click="onClosePopup();"/>
  </mx:HBox>
 </mx:ApplicationControlBar>
 
</mx:Application>

-----------------------------------------------------------
PopupTitle.mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:TitleWindow xmlns:mx="http://www.adobe.com/2006/mxml" width="400" height="300"
 showCloseButton="true" close="PopUpManager.removePopUp(this)">
 
 <mx:Script>
  <![CDATA[
   import mx.managers.PopUpManager;
  ]]>
 </mx:Script>
 
 <mx:Label text="새로운 창이 띄워졌어요.. 몇번째 인지.." fontSize="11"/>
 
</mx:TitleWindow>

-------------------------------------------------------------------------
혹시 저 처럼 Flash위에 Flash파일을 올려놓은 다중 구조에서 작업은 하는 사람은 위에 스크립트가 동작 하지 않을수도 있습니다.
저 역시 위에 스크립트는 해당 프로젝트에서 작동하지 않는군요. 그럴경우는 아래 스크립트로 변경...

   private function onClosePopup():void
   {
    var sysManager:SystemManager = Application.application.parent as SystemManager;
    
    for(var i:int = 0; i < sysManager.numChildren; i++)
    {
     if(sysManager.getChildAt(i) is UIComponent && UIComponent(sysManager.getChildAt(i)).isPopUp)
     {
      PopUpManager.removePopUp( IFlexDisplayObject( sysManager.getChildAt(i--) ) );
     }
    }
   }

-------------------------------------------------------------------------



: