##
2.9.1 アプリケーションオブジェクト

アプリケーションオブジェクトのメソッドは各種ありますが、次のメソッドを あげておきます。

`makeusermenus`( | )

  アプリケーションでメニューを使う必要がある場合、このメソッドをオーバー ライドします。属性 `menubar` にメニューを追加します。

`getabouttext`( | )

  このメソッドをオーバーライドすることで、アプリケーションの説明を記述す るテキスト文字列を返します。代わりに、`do_about()` メソッドをオー バーライドすれば、もっと凝った``アバウト''メッセージを出す事ができます。

`mainloop`( | [mask[, wait]])

  このルーチンがメインイベントループで、作成したアプリケーションが動き出 すためにはこれを呼ぶことになります。Mask は操作したいイベントを 選択するマスクです。 wait は並行に動作しているアプリケーションに 割り当てたいチック数(1/60秒)です(デフォルトで 0 ですが、あまり良い値で はありません)。self フラグを立ててメインループを抜ける方法はまだ サポートされていますが、これはお勧めできません。代わりに `self._quit()`を呼んでください。

  イベントループは小さなパーツに分割されていて、各々をオーバーライドでき るようになっています。これらのメソッドは、デフォルトでウィンドウとダイ アログや、ドラッグとリサイズの操作、 AppleEvent、非FrameWorkのウィンド ウに関するウィンドウの操作などに関するイベントを分岐することなどまで面 倒をみてくれます。

  原則として、全てのイベントハンドラは、イベントが完全に取り扱われた場合 は `1` を返さなくてはいけませんし、それ以外では `0` を返さな くてはいけません(例えば、前面のウィンドウは FrameWork ウィンドウではな い場合を考えてください)。こうしなくてはいけない理由は、アップデートイ ベントなどが Sioux コンソールウィンドウなどの他のウィンドウにきちんと渡さ れるようにするためです。our_dispatch やその呼び出し元の内部から `MacOS.HandleEvent()` を呼んではいけません。そうしたコードが Python の内部ループのイベントハンドラを経由して呼ばれると、無限ループ になりかねないからです。

`asyncevents`( | onoff)

  非同期でイベント操作をしたい場合は、非ゼロの引数でこのメソッドを呼んで ください。こうすることで、イベントが生じた時に、内部のインタプリタのルー プで、アプリケーションイベントハンドラ async_dispatch が呼ばれる ことになります。すると、長時間の計算を行っている場合でも、FrameWorkウィ ンドウがアップデートされ、ユーザーインターフェースが動き続けるようにな ります。ただし、インタプリタの動作が減速し、非リエントラントのコード (例えばFrameWork自身など)に奇妙な動作が見られるかもしれません。デフォル トでは async_dispatch はすぐに our_dispatch を呼びますが、 このメソッドをオーバーライドすると、特定のイベントを非同期で操作しても 良くなります。処理しないイベントは Sioux などに渡されることになります。

  onあるいはoff値が返されます。

`_quit`( | )

  実行中の `mainloop()` 呼び出しを、次の適当なタイミングで終了さ せます。

`do_char`( | c, event)

  ユーザーが文字 c をタイプした時に呼ばれます。イベントの全詳細は event構造体の中にあります。このメソッドはウィンドウオブジェクト内で使 うためにも提供されています。このオブジェクトのウィンドウが最前面にある 場合は、アプリケーション全般について本ハンドラをオーバーライドします。

`do_dialogevent`( | event)

  イベントループ内部で最初に呼ばれて、モードレスダイアログイベントを処理 します。デフォルトではメソッドは単にイベントを適切なダイアログに分岐す るだけです(関連したダイアログウィンドウオブジェクトを経由してではあり ません)。特別にダイアログイベント(キーボードショートカットなど)を処理す る必要がある場合にオーバーライドしてください。

`idle`( | event)

  イベントが無い場合にメインイベントループから呼ばれます。 null イベン トも渡されます(つまりマウス位置などを監視することができます)。