menu_driver(3X) | menu_driver(3X) |
名称
menu_driver - メニューシステムのコマンド処理ループ書式
#include <menu.h>解説
一旦メニューが記入された (表示された) ならば、 menu_driver によってそれへの流し込むファネル (漏斗) 入力イベントにするべきです。このルーチンは、3 つの主な入力ケースがあります。- -
- 入力は、form ナビゲーション要求です。ナビゲーション要求コードは、 wgetch によって返されたキーと文字コードと区別される、 <form.h> で定義された定数です。
- -
- 入力は、印刷可能な文字です。 (256 未満の正でなければならない) 印刷可能な文字は、プログラムのロケール設定にしたがってチェックされます。
- -
- 入力は、マウスイベントに関連している KEY_MOUSE 特殊キーです。
メニュードライバ要求は、次の通りです:
- REQ_LEFT_ITEM
- 項目を左に移動します。
- REQ_RIGHT_ITEM
- 項目を右に移動します。
- REQ_UP_ITEM
- 項目を上に移動します。
- REQ_DOWN_ITEM
- 項目を下に移動します。
- REQ_SCR_ULINE
- 行をスクロールアップします。
- REQ_SCR_DLINE
- 行をスクロールダウンします。
- REQ_SCR_DPAGE
- ページをスクロールダウンします。
- REQ_SCR_UPAGE
- ページをスクロールアップします。
- REQ_FIRST_ITEM
- 最初の項目に移動します。
- REQ_LAST_ITEM
- 最後の項目に移動します。
- REQ_NEXT_ITEM
- 次の項目に移動します。
- REQ_PREV_ITEM
- 前の項目に移動します。
- REQ_TOGGLE_ITEM
- 項目を選択/非選択します。
- REQ_CLEAR_PATTERN
- メニューパターンバッファをクリアします。
- REQ_BACK_PATTERN
- パターンバッファから前の文字を削除します。
- REQ_NEXT_MATCH
- パターンマッチと一致する次の項目に移動します。
- REQ_PREV_MATCH
- パターンマッチと一致する前の項目に移動します。
2 つめの引数が印刷可能な文字である場合、コードは、パターンバッファに追加され、新しいパターンと一致する次の項目に移動するように試みます。そのようなマッチがない場合、 menu_driver は、 E_NO_MATCH を返し、バッファから追加された文字を削除します。
2 つめの引数が上記のあらかじめ定義された要求のうちの 1 つである場合、対応するアクションが実行されます。
マウス操作
2 つめの引数が KEY_MOUSE スペシャルキーである場合、関連するマウスイベントは、上記のあらかじめ定義されたリクエストのうちの 1 つに変換されます。現在のユーザのウィンドウのクリックだけは、 (例えば、メニュー表示領域またはデコレーションウィンドウの中) 操作されます。利用者が、メニューの表示領域の上をクリックするなら:
- REQ_SCR_ULINE が、シングルクリックで生成されます。
- REQ_SCR_UPAGE が、ダブルクリックで生成されます。
- REQ_FIRST_ITEM が、トリプルクリックで生成されます。
利用者が、メニューの表示領域の下をクリックするなら:
- REQ_SCR_DLINE が、シングルクリックで生成されます。
- REQ_SCR_DPAGE が、ダブルクリックで生成されます。
- REQ_LAST_ITEM が、トリプルクリックで生成されます。
利用者が、メニューの表示領域の内側の項目をクリックするなら:
- -
- メニューカーソルは、その項目に置かれます。
- -
- 利用者が項目をダブルクリックするなら、 REQ_TOGGLE_ITEM が生成され、 E_UNKNOWN_COMMAND が返されます。ダブルクリックは、通常項目特有の動作が返されるべきであることを意味するので、この返り値は、意味があります。アプリケーション特有のコマンドが実行されるべきであることをシグナルすることがまさにこの返り値の目的です。
- -
- 要求への変換が行われたなら、 menu_driver は、この要求の結果を返します。
ユーザのウィンドウの外側がクリックされたか、またはマウスイベントがメニュー要求に変換できなかったなら、 E_REQUEST_DENIED が返されます。
アプリケーション定義コマンド
2 つめの引数が印刷可能なものでも上記のあらかじめ定義されたメニュー要求あるいは KEY_MOUSE のうちの 1 つでもない場合、ドライバは、それがアプリケーションに特有のコマンドで E_UNKNOWN_COMMAND を返す、と仮定します。アプリケーションに定義されたコマンドは、 MAX_COMMAND に関連する定義されるべきです。これは、あらかじめ定義された要求の最大の値です。戻り値
menu_driver は、次のエラーコードの一つを返します:- E_OK
- ルーチンが成功した。
- E_SYSTEM_ERROR
- システムエラーが生じた ( errno 参照)。
- E_BAD_ARGUMENT
- ルーチンは、正しくないか範囲外の引数を検知しました。
- E_BAD_STATE
- ルーチンは、初期化または終了の関数から呼ばれました。
- E_NOT_POSTED
- メニューは、記入されていません。
- E_UNKNOWN_COMMAND
- メニュードライバコードは、未知の要求コードを合いました。
- E_NO_MATCH
- 文字は、一致しませんでした。
- E_REQUEST_DENIED
- メニュードライバは、要求を処理することができませんでした。