여러개가 활성화된 NativeWindow에서 창의 앞과 뒤를 바꾸어 주어야 하는 경우가 종종 발생하게 된다. 물론 사용자가 클릭하면 자동으로 제일 앞으로 이동하게 되는데 그렇지 않고 설치나 작업 중에 자동으로 앞뒤의 위치를 바꾸어 가며 정보나 작업상태를 표현하거나 confirm을 요구하는 경우일 때는 코드에서 이러한 처리응 해주어야 한다.

이러한 경우 NativeWindow에서 제공하는 몇 가지 속성이 있다.
orderToFront(); : 한단계 앞으로
orderToBack(); : 한단계 뒤로
orderInFrontOf(매개변수); : 매개변수의 윈도우 보다 앞에 위치
orderInBackOf(매개변수); : 매개변수의 윈도우 보다 뒤에 위치
alwaysInFront : 항상 다른 윈도우창보다 앞으로 위치

위와 같은 메서드를 사용하여 현재 창과 다른 창의 위치를 변경할 수 있다. 이들은 앞서 살펴본 openedWindows에서 제공하는 배열과 함께 사용하며 매개변수는 배열의 원소 값를 이용한다.
Posted by 버터백통

작업을 하다가 모든창을 닫거나 뒤에 가려진 창을 앞으로 이동시키거나 하는 작업을 하기위해서는 현재 열려있는 창으로 접근하여야 한다. 창이 많은 때는 하나하나 delegator를 기록하고 있다가 제어하기 힘들다. 따라서 이들을 관리하는 옵저버가 있을 것이라 생각을 하게 된다. 바로 openedWindows가 이들을 관리하는 옵저버이다.

현재 열려있는 모든 창은 자동으로 NativeApplicationnativeApplicationopenedWindows에 배열로 저장되어있다. 따라서 배열 변수를 선언하고 NativeApplication.nativeApplication.openedWindows를 받아서 현재 열려 있는 모든창으로 접근이 가능해 진다.

 
[ NativeWindow의 순서 ]

먼저 생성된 것이 정수 색인 배열에서 가장 먼저 자리잡고 나중에 생선된 것이 그 앞을 가리게 된다.
따라서 배열에는 적은 정수가 먼저 생성된 것들이고 뒤에서 가려지고 있는 것이다.
가령 창이 3개가 있으면 3번째 창은 배열에서 2에 해당하는 위치에 자리잡고 있다.



Posted by 버터백통


NativeWindow는 delegator에서 visible속성이나 activate()를 하면 창이 활성화 된다. 창을 닫기 위해서는 close() 메서드를 사용하는데 한번 close된 창은 두번 다시 재 활용할 수 없게 된다. 따라서 창을 다시 열 수 있도록 하기 위해서는 visible을 컨트롤 해야 한다. 또한 사용자가 크롬 창의 닫기버튼을 사용하여 close할 경우를 대비하여 해당 윈도우를 닫을때 NativeWindow의 delegator에 CLOSING이벤트를 두어 visible속성을 false로 한다.
이경우 preventDefault()를 사용한다.

private var options:NativeWindowInitOptions;
private var window:NativeWindow;
private function init():void
{
    options = new NativeWindowInitOptions();
    options.type = NativeWindowType.NORMAL;
    window = new NativeWindow( options );
    
    addEventListener( MouseEvent.CLICK , onOpen );
    window.addEventListener( Event.CLOSING , onClose );
    
    window.width = window.height = 200;
    window.activate();
}
   
private function onOpen( e:MouseEvent ):void
{
      window.visible = true;
}
   
private function onClose( e:Event ):void
{
    window.visible = false;
    e.preventDefault();
}

위의 코드는 자식창을 크롬에서 닫기하였을 때 visible로 컨트롤하고 메인창을 클릭하면 visible = true로 하여 창을 다시 활성화 하도록 처리하였다.

참고) visible을 컨트롤 하여도 작업표시줄에 비활성화 된다.

Posted by 버터백통