# 8 `FrameWork` -- 対話型アプリケーション・フレームワーク

Macintoshプラットフォームで利用できます。

`FrameWork` モジュールは、対話型 Macintosh アプリケーションのク ラスで、同時にフレームワークを提供します。プログラマは、サブクラスを作っ て基底クラスの様々なメソッドをオーバーライドし、必要な機能を実装するこ とでアプリケーションを組み立てられます。機能のオーバーライドは、時によっ て様々な異なるレベルで行われます。つまり、ある一つのダイアログウィンド ウでクリックの処理を普段と違う方法で行うには、完全なイベント処理をオー バーライドする必要はありません。

`FrameWork` の開発は事実上停止しています。現在では `PyObjC` を使用すればPythonからCocoaの全機能を使用することがで きます。このドキュメントでは最も重要な機能だけしか記述していませんし、 それさえも論理的な形で書かれてもいません。ソースか例題を詳しく見てくだ さい。次にあげるのは、MacPython ニュースグループにポストされたコメントで、 `FrameWork` の強力さと限界について述べています。

> `FrameWork` の最大の強みは、制御の流れをたくさんの異なる部分に 分割できることです。例えば `W` を使って、いろいろな方法でメ ニューをオン/オフしたり、残りをいじらずにうまくプラグインさせることが できます。`FrameWork` の弱点は、コマンドインタフェースが抽象化 されていないこと(といっても難しいわけではないですが)、ダイアログサポー トが最低限しかないこと、それからコントロール/ツールバーサポートが全く ないことです。

`FrameWork` モジュールは次の関数を定義しています。

`Application`( | )

  アプリケーション全体を表現しているオブジェクト。メソッドについての詳細 は以下の記述を参照してください。デフォルト `__init__()` ルーチ ンは、空のウィンドウ辞書とアップルメニューつきのメニューバーをを作成し ます。

`MenuBar`( | )

  メニューバーを表現するオブジェクト。このオブジェクトは普通はユーザは 作成しません。

`Menu`( | bar, title[, after])

  メニューを表現するオブジェクト。生成時には、メニューが現われる `MenuBar` と、title 文字列、メニューが表示されるべき(1から 始まる)位置 after (デフォルトは末尾)を渡します。

`MenuItem`( | menu, title[, shortcut, callback])

  メニューアイテムオブジェクトを作成します。引数は作成するメニューと、ア イテムのタイトル文字列、オプションのキーボードショートカット、コールバッ クルーチンです。コールバックは、メニューID、メニュー内のアイテム番号(1 から数える)、現在のフロントウィンドウ、イベントレコードを引数に呼ばれ ます。

  呼び出し可能なオブジェクトのかわりに、コールバックは文字列でも良いです。 この場合、メニューの選択は、最前面のウィンドウとアプリケーションの中で メソッド探索を引き起こします。メソッド名は、コールバック文字列の前に `'domenu_'` を付けたものです。

  `MenuBar` の `fixmenudimstate()`メソッドを呼びだすと、現在 のフロントウィンドウにもとづいて、適切なディム化を全てのメニューアイテ ムに対してほどこします。

`Separator`( | menu)

  メニューの最後にセパレータを追加します。

`SubMenu`( | menu, label)

  label の名前のサブメニューを、メニュー menu の下に作成しま す。メニューオブジェクトが返されます。

`Window`( | parent)

  (モードレス)ウィンドウを作成します。Parent は、ウィンドウが属す るアプリケーションオブジェクトです。作成されたウィンドウはまだ表示され ません。

`DialogWindow`( | parent)

  モードレスダイアログウィンドウを作成します。

`windowbounds`( | width, height)

  与えた幅と高さのウィンドウを作成するのに必要な、`(left, top, right, bottom)` からなるタプルを返します。ウィ ンドウは以前のウィンドウに対して位置をずらして作成され、全体のウィンド ウが画面からなるべく外れないようにします。しかし、ウィンドウはいつでも 全く同じサイズで、そのため一部は画面から隠れる場合もあります。

`setwatchcursor`( | )

  マウスカーソルを時計型に設定します。

`setarrowcursor`( | )

  マウスカーソルを矢印型に設定します。