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

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

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

`FrameWork` はまだ作成中のところがずいぶん残っています。このド キュメントでは最も重要な機能だけしか記述していませんし、それさえも論理 的な形で書かれてもいません。ソースか例題を詳しく見てください。次にあげ るのは、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`( | )

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