不慣れなActionScript、はじめてのAIR開発とあって、いろんなことでつまづき続けています。
<?xml version=”1.0″ encoding=”utf-8″?>
<mx:WindowedApplication xmlns:mx=”http://www.adobe.com/2006/mxml” applicationComplete=”init()” layout=”absolute”>
<mx:Script>
<![CDATA[
import mx.controls.Alert;
import mx.events.CloseEvent;
private function init():void
{
addEventListener(Event.CLOSING,application_closing);
}
private function application_closing(event:Event):void
{
event.preventDefault();
Alert.show(“終了しますか?”,”終了の確認”,Alert.YES | Alert.CANCEL,null,goto_close);
}
private function goto_close(event:CloseEvent):void
{
if(event.detail==Alert.YES)
{
nativeWindow.close();
}
}
]]>
</mx:Script>
</mx:WindowedApplication>
applicationCompleteでイベントリスナーを追加しています。「closingイベントが起こったら呼べや」っていう感じですね。
で、呼ばれた関数の中で、ひとまずclosingイベントをキャンセルしています。確認云々のまえにキャンセルです。問答無用です。そのあと、確認します。キャンセルしておいて確認です。
確認ダイアログは、結果もコールバック関数です。これもはじめは違和感バリバリでした。C#だとそこで1回処理がとまるじゃないですか。基本的にすべてコールバック関数。慣れるまで戸惑いそうです。
確認ダイアログの結果によって、プログラムからアプリケーションを終了します。
正直、これが正しい実装方法なのかはまったくわかりません。こんな泥臭い方法じゃなくて、もっとスマートな記述方法があるのかもしれません。
まぁ、やりたかったことはできているようなのでOKかなと。
AIR 1.5、ActionScript 3.0です。