39.4. "fl" --- グラフィカルユーザーインターフェースのための FORMS ライブラリ
****************************************************************************

バージョン 2.6 で非推奨: "fl" モジュールは Python 3 で削除されました。

このモジュールは、Mark Overmars による FORMS ライブラリへのインターフ
ェースを提供します。 FORMS ライブラリのソースは anonymous FTP
"ftp.cs.ruu.nl" の "SGI/FORMS" ディレクトリから入手できます。最新のテ
ストはバージョン 2.0b で行いました。

ほとんどの関数は接頭辞の "fl_" を取ると、対応する C の関数名になります
。ライブラリで使われる定数は後述の "FL" モジュールで定義されています。

Python でこのオブジェクトを作る方法は C とは少し違っています： ライブ
ラリに保持された '現在のフォーム' に新しい FORMS オブジェクトを加える
のではなく、フォームに FORMS オブジェクトを加えるには、フォームを示す
Python オブジェクトのメソッドで全て行います。したがって、C の関数の
"fl_addto_form()" と "fl_end_form()" に相当するものは Python にはあり
ませんし、 "fl_bgn_form()" に相当するものとしては "fl.make_form()" を
呼び出します。

用語のちょっとした混乱に注意してください： FORMS ではフォームの中に置
くことができるボタン、スライダーなどに *object* の用語を使います。
Python では全ての値が 'オブジェクト' です。 FORMS への Python のインタ
ーフェースによって、2つの新しいタイプの Python オブジェクト： フォーム
オブジェクト (フォーム全体を示します) と FORMS オブジェクト (ボタン、
スライダーなどの一つひとつを示します) を作ります。おそらく、混乱するほ
どのことではありません。

FORMS への Python インターフェースに 'フリーオブジェクト' はありません
し、 Python でオブジェクトクラスを書いて加える簡単な方法もありません。
しかし、GL イベントハンドルへの FORMS インターフェースが利用可能で、純
粋な GL ウィンドウに FORMS を組み合わせることができます。

**注意：** "fl" をインポートすると、GL の関数 "foreground()" と FORMS
のルーチン "fl_init()" を呼び出します。


39.4.1. "fl" モジュールに定義されている関数
===========================================

"fl" モジュールには以下の関数が定義されています。これらの関数の働きに
関する詳しい情報については、FORMS  ドキュメントで対応する C の関数の説
明を参照してください。

fl.make_form(type, width, height)

   与えられたタイプ、幅、高さでフォームを作ります。これは *form* オブ
   ジェクトを返します。このオブジェクトは後述のメソッドを持ちます。

fl.do_forms()

   標準の FORMS のメインループです。ユーザからの応答が必要な FORMS オ
   ブジェクトを示す Python オブジェクト、あるいは特別な値 "FL.EVENT"
   を返します。

fl.check_forms()

   FORMS イベントを確認します。 "do_forms()" が返すもの、あるいはユー
   ザからの応答をすぐに必要とするイベントがないなら "None" を返します
   。

fl.set_event_call_back(function)

   イベントのコールバック関数を設定します。

fl.set_graphics_mode(rgbmode, doublebuffering)

   グラフィックモードを設定します。

fl.get_rgbmode()

   現在の RGB モードを返します。これは C のグローバル変数 "fl_rgbmode"
   の値です。

fl.show_message(str1, str2, str3)

   3 行のメッセージと OK ボタンのあるダイアログボックスを表示します。

fl.show_question(str1, str2, str3)

   3 行のメッセージと YES、NO のボタンのあるダイアログボックスを表示し
   ます。ユーザによって YES が押されたら "1" 、NO が押されたら "0" を
   返します。

fl.show_choice(str1, str2, str3, but1[, but2[, but3]])

   3 行のメッセージと最大3つまでのボタンのあるダイアログボックスを表示
   します。ユーザによって押されたボタンの数値を返します (それぞれ "1"
   、 "2" 、 "3")。

fl.show_input(prompt, default)

   1 行のプロンプトメッセージと、ユーザが入力できるテキストフィールド
   を持つダイアログボックスを表示します。 2 番目の引数はデフォルトで表
   示される入力文字列です。ユーザが入力した文字列が返されます。

fl.show_file_selector(message, directory, pattern, default)

   ファイル選択ダイアログを表示します。ユーザによって選択されたファイ
   ルの絶対パス、あるいはユーザが Cancel ボタンを押した場合は "None"
   を返します。

fl.get_directory()
fl.get_pattern()
fl.get_filename()

   これらの関数は最後にユーザが "show_file_selector()" で選択したディ
   レクトリ、パターン、ファイル名 (パスの末尾のみ) を返します。

fl.qdevice(dev)
fl.unqdevice(dev)
fl.isqueued(dev)
fl.qtest()
fl.qread()
fl.qreset()
fl.qenter(dev, val)
fl.get_mouse()
fl.tie(button, valuator1, valuator2)

   これらの関数は対応する GL 関数への FORMS のインターフェースです。
   "fl.do_events()" を使っていて、自分で何か GL イベントを操作したいと
   きにこれらを使います。FORMS が扱うことのできない GL イベントが検出
   されたら "fl.do_forms()" が特別の値 "FL.EVENT" を返すので、
   "fl.qread()" を呼び出して、キューからイベントを読み込むべきです。対
   応する GL の関数は使わないでください!

fl.color()
fl.mapcolor()
fl.getmcolor()

   FORMS ドキュメントにある "fl_color()" 、 "fl_mapcolor()" 、
   "fl_getmcolor()" の記述を参照してください。


39.4.2. Form オブジェクト
=========================

フォームオブジェクト (上で述べた "make_form()" で返されます) には下記
のメソッドがあります。各メソッドは名前の接頭辞に "fl_" を付けた C の関
数に対応します；また、最初の引数はフォームのポインタです；説明は FORMS
の公式文書を参照してください。

全ての "add_*()" メソッドは、 FORMS オブジェクトを示す Python オブジェ
クトを返します。 FORMS オブジェクトのメソッドを以下に記載します。ほと
んどの FORMS オブジェクトは、そのオブジェクトの種類ごとに特有のメソッ
ドもいくつか持っています。

form.show_form(placement, bordertype, name)

   フォームを表示します。

form.hide_form()

   フォームを隠します。

form.redraw_form()

   フォームを再描画します。

form.set_form_position(x, y)

   フォームの位置を設定します。

form.freeze_form()

   フォームを固定します。

form.unfreeze_form()

   固定したフォームの固定を解除します。

form.activate_form()

   フォームをアクティベートします。

form.deactivate_form()

   フォームをディアクティベートします。

form.bgn_group()

   新しいオブジェクトのグループを作ります；グループオブジェクトを返し
   ます。

form.end_group()

   現在のオブジェクトのグループを終了します。

form.find_first()

   フォームの中の最初のオブジェクトを見つけます。

form.find_last()

   フォームの中の最後のオブジェクトを見つけます。

form.add_box(type, x, y, w, h, name)

   フォームにボックスオブジェクトを加えます。特別な追加のメソッドはあ
   りません。

form.add_text(type, x, y, w, h, name)

   フォームにテキストオブジェクトを加えます。特別な追加のメソッドはあ
   りません。

form.add_clock(type, x, y, w, h, name)

   フォームにクロックオブジェクトを加えます。 --- メソッド：
   "get_clock()" 。

form.add_button(type, x, y, w, h, name)

   フォームにボタンオブジェクトを加えます。 --- メソッド：
   "get_button()" 、 "set_button()" 。

form.add_lightbutton(type, x, y, w, h, name)

   フォームにライトボタンオブジェクトを加えます。 --- メソッド：
   "get_button()" 、 "set_button()" 。

form.add_roundbutton(type, x, y, w, h, name)

   フォームにラウンドボタンオブジェクトを加えます。 --- メソッド：
   "get_button()" 、 "set_button()" 。

form.add_slider(type, x, y, w, h, name)

   フォームにスライダーオブジェクトを加えます。 --- メソッド：
   "set_slider_value()" 、 "get_slider_value()" 、
   "set_slider_bounds()" 、 "get_slider_bounds()" 、
   "set_slider_return()" 、 "set_slider_size()" 、
   "set_slider_precision()" 、 "set_slider_step()" 。

form.add_valslider(type, x, y, w, h, name)

   フォームにバリュースライダーオブジェクトを加えます。 --- メソッド：
   "set_slider_value()" 、 "get_slider_value()" 、
   "set_slider_bounds()" 、 "get_slider_bounds()" 、
   "set_slider_return()" 、 "set_slider_size()" 、
   "set_slider_precision()" 、 "set_slider_step()" 。

form.add_dial(type, x, y, w, h, name)

   フォームにダイアルオブジェクトを加えます。 --- メソッド：
   "set_dial_value()" 、 "get_dial_value()" 、 "set_dial_bounds()" 、
   "get_dial_bounds()" 。

form.add_positioner(type, x, y, w, h, name)

   フォームに 2 次元ポジショナーオブジェクトを加えます。 --- メソッド
   ： "set_positioner_xvalue()" 、 "set_positioner_yvalue()" 、
   "set_positioner_xbounds()" 、 "set_positioner_ybounds()" 、
   "get_positioner_xvalue()" 、 "get_positioner_yvalue()" 、
   "get_positioner_xbounds()" 、 "get_positioner_ybounds()" 。

form.add_counter(type, x, y, w, h, name)

   フォームにカウンタオブジェクトを加えます。 --- メソッド：
   "set_counter_value()" 、 "get_counter_value()" 、
   "set_counter_bounds()" 、 "set_counter_step()" 、
   "set_counter_precision()" 、 "set_counter_return()" 。

form.add_input(type, x, y, w, h, name)

   フォームにインプットオブジェクトを加えます。 --- メソッド：
   "set_input()" 、 "get_input()" 、 "set_input_color()" 、
   "set_input_return()" 。

form.add_menu(type, x, y, w, h, name)

   フォームにメニューオブジェクトを加えます。 --- メソッド：
   "set_menu()" 、 "get_menu()" 、 "addto_menu()" 。

form.add_choice(type, x, y, w, h, name)

   フォームにチョイスオブジェクトを加えます。 --- メソッド：
   "set_choice()" 、 "get_choice()" 、 "clear_choice()" 、
   "addto_choice()" 、 "replace_choice()" 、 "delete_choice()" 、
   "get_choice_text()" 、 "set_choice_fontsize()" 、
   "set_choice_fontstyle()" 。

form.add_browser(type, x, y, w, h, name)

   フォームにブラウザオブジェクトを加えます。 --- メソッド：
   "set_browser_topline()" 、 "clear_browser()" 、
   "add_browser_line()" 、 "addto_browser()" 、
   "insert_browser_line()" 、 "delete_browser_line()" 、
   "replace_browser_line()" 、 "get_browser_line()" 、
   "load_browser()" 、 "get_browser_maxline()" 、
   "select_browser_line()" 、 "deselect_browser_line()" 、
   "deselect_browser()" 、 "isselected_browser_line()" 、
   "get_browser()" 、 "set_browser_fontsize()" 、
   "set_browser_fontstyle()" 、 "set_browser_specialkey()" 。

form.add_timer(type, x, y, w, h, name)

   フォームにタイマーオブジェクトを加えます。 --- メソッド：
   "set_timer()" 、 "get_timer()" 。

フォームオブジェクトには以下のデータ属性があります；FORMS ドキュメント
を参照してください:

+-----------------------+-------------------+----------------------------------+
| 名前                  | C の型            | 意味                             |
+=======================+===================+==================================+
| "window"              | int (read-only)   | GL ウィンドウの id               |
+-----------------------+-------------------+----------------------------------+
| "w"                   | float             | フォームの幅                     |
+-----------------------+-------------------+----------------------------------+
| "h"                   | float             | フォームの高さ                   |
+-----------------------+-------------------+----------------------------------+
| "x"                   | float             | フォーム左肩の x 座標            |
+-----------------------+-------------------+----------------------------------+
| "y"                   | float             | フォーム左肩の y 座標            |
+-----------------------+-------------------+----------------------------------+
| "deactivated"         | int               | フォームがディアクティベートされ |
|                       |                   | ているなら非ゼロ                 |
+-----------------------+-------------------+----------------------------------+
| "visible"             | int               | フォームが可視なら非ゼロ         |
+-----------------------+-------------------+----------------------------------+
| "frozen"              | int               | フォームが固定されているなら非ゼ |
|                       |                   | ロ                               |
+-----------------------+-------------------+----------------------------------+
| "doublebuf"           | int               | ダブルバッファリングがオンなら非 |
|                       |                   | ゼロ                             |
+-----------------------+-------------------+----------------------------------+


39.4.3. FORMS オブジェクト
==========================

FORMS オブジェクトの種類ごとに特有のメソッドの他に、全ての FORMS オブ
ジェクトは以下のメソッドも持っています:

FORMS object.set_call_back(function, argument)

   オブジェクトのコールバック関数と引数を設定します。オブジェクトがユ
   ーザからの応答を必要とするときには、コールバック関数は 2 つの引数、
   オブジェクトとコールバックの引数とともに呼び出されます。 (コールバ
   ック関数のない FORMS オブジェクトは、ユーザからの応答を必要とすると
   きには "fl.do_forms()" あるいは "fl.check_forms()" によって返されま
   す。) 引数なしにこのメソッドを呼び出すと、コールバック関数を削除し
   ます。

FORMS object.delete_object()

   オブジェクトを削除します。

FORMS object.show_object()

   オブジェクトを表示します。

FORMS object.hide_object()

   オブジェクトを隠します。

FORMS object.redraw_object()

   オブジェクトを再描画します。

FORMS object.freeze_object()

   オブジェクトを固定します。

FORMS object.unfreeze_object()

   固定したオブジェクトの固定を解除します。

FORMS オブジェクトには以下のデータ属性があります； FORMS ドキュメント
を参照してください。

+----------------------+-------------------+--------------------+
| 名前                 | C の型            | 意味               |
+======================+===================+====================+
| "objclass"           | int (read-only)   | オブジェクトクラス |
+----------------------+-------------------+--------------------+
| "type"               | int (read-only)   | オブジェクトタイプ |
+----------------------+-------------------+--------------------+
| "boxtype"            | int               | ボックスタイプ     |
+----------------------+-------------------+--------------------+
| "x"                  | float             | 左肩の x 座標      |
+----------------------+-------------------+--------------------+
| "y"                  | float             | 左肩の y 座標      |
+----------------------+-------------------+--------------------+
| "w"                  | float             | 幅                 |
+----------------------+-------------------+--------------------+
| "h"                  | float             | 高さ               |
+----------------------+-------------------+--------------------+
| "col1"               | int               | 第 1 の色          |
+----------------------+-------------------+--------------------+
| "col2"               | int               | 第 2 の色          |
+----------------------+-------------------+--------------------+
| "align"              | int               | 配置               |
+----------------------+-------------------+--------------------+
| "lcol"               | int               | ラベルの色         |
+----------------------+-------------------+--------------------+
| "lsize"              | float             | ラベルのフォントサ |
|                      |                   | イズ               |
+----------------------+-------------------+--------------------+
| "label"              | string            | ラベルの文字列     |
+----------------------+-------------------+--------------------+
| "lstyle"             | int               | ラベルのスタイル   |
+----------------------+-------------------+--------------------+
| "pushed"             | int (read-only)   | (FORMS ドキュメン  |
|                      |                   | ト参照)            |
+----------------------+-------------------+--------------------+
| "focus"              | int (read-only)   | (FORMS ドキュメン  |
|                      |                   | ト参照)            |
+----------------------+-------------------+--------------------+
| "belowmouse"         | int (read-only)   | (FORMS ドキュメン  |
|                      |                   | ト参照)            |
+----------------------+-------------------+--------------------+
| "frozen"             | int (read-only)   | (FORMS ドキュメン  |
|                      |                   | ト参照)            |
+----------------------+-------------------+--------------------+
| "active"             | int (read-only)   | (FORMS ドキュメン  |
|                      |                   | ト参照)            |
+----------------------+-------------------+--------------------+
| "input"              | int (read-only)   | (FORMS ドキュメン  |
|                      |                   | ト参照)            |
+----------------------+-------------------+--------------------+
| "visible"            | int (read-only)   | (FORMS ドキュメン  |
|                      |                   | ト参照)            |
+----------------------+-------------------+--------------------+
| "radio"              | int (read-only)   | (FORMS ドキュメン  |
|                      |                   | ト参照)            |
+----------------------+-------------------+--------------------+
| "automatic"          | int (read-only)   | (FORMS ドキュメン  |
|                      |                   | ト参照)            |
+----------------------+-------------------+--------------------+


39.5. "FL" --- "fl" モジュールで使用される定数
**********************************************

バージョン 2.6 で非推奨: "FL" モジュールは Python 3 で削除されました。

このモジュールには、組み込みモジュール "fl" を使うのに必要なシンボル定
数が定義されています (上記参照) ；これらは名前の接頭辞 "FL_" が省かれ
ていることを除いて、C のヘッダファイル "<forms.h>" に定義されているも
のと同じです。定義されている名称の完全なリストについては、モジュールの
ソースをご覧ください。お勧めする使い方は以下の通りです：

   import fl
   from FL import *


39.6. "flp" --- 保存された FORMS デザインをロードする関数
*********************************************************

バージョン 2.6 で非推奨: "flp" モジュールは Python 3 で削除されました
。

このモジュールには、FORMS ライブラリ (上記の "fl" モジュールを参照して
ください) とともに配布される 'フォームデザイナー' (**fdesign**) プログ
ラムで作られたフォームの定義を読み込む関数が定義されています。

今のところは、詳しくは Python ライブラリソースのディレクトリの中の
"flp.doc" を参照してください。

XXX A complete description should be inserted here!
