OSF/Motifではすべてのコールバックは、アプリケーションが最終的に受け付けるデータを含むデータ構造によって呼び出されます。データは、コールバックを引き起こす理由に依存する変数です。共通のコンポーネントは、定数名で指定されている理由とイベント構造体です。理由定数とwidgetクラスとの組み合わせが引き渡されるデータを決定し、イベント構造体はコールバックを引き起こす低レベル(Xlib)のイベントを含んでいます。
IF/PrologのOSF/Motifインタフェースでは、理由だけがアトムとして、また最後の引数としてCallbackに引き渡されます。理由は、標準的な理由を変換するコンバータによって文字列表現に変換されます。
コールバック構造体の別のコンポーネントは、特別な述語によって問い合わせを行わなければならず、要求された場合にのみProlog表現に変換されます。多くの場合、アプリケーションはコールバック構造体を問い合わせる必要はありません。それは、widgetから直接同一の情報を得ることができるからです。
xmGetCallbackComponents(?CallbackComponentList) xmGetCallbackComponent(?CallbackComponent)
現在コールバックのコールバック構造体から、指定されたコンポーネントを取り出します。
CallbackComponentListは、要素component(?Value)のリストです。 'component'は問い合わせるコンポーネントを指定し、Valueはコンポーネントの値に単一化されます。C構造体の要素名に対応するアトムは、コンポーネントの指定子として使用することができます。コンポーネント名があいまいに使用されている場合には、指定子はコンポーネント名と同一ではなくなります。たとえば名前'value'が整数とXmStringの両方に使われている場合、指定子は'value'と'valueString'になります。
この述語がコールバックから呼び出されない場合には、例外処理が引き起こされます。また現在のコールバックの構造体が、要求されたコンポーネントを含んでいない場合にも例外処理が生じます。このためアプリケーションは最初に理由をチェックし、それから正しいコンポーネントを決定しなければなりません。
特別なコンポーネントの指定子 'widget'は、コールバックのwidgetを問い合わせます。
コンポーネントの指定子がcallbackstructの場合には、Valueは単純変数ではありません。それは、CallbackComponentListのようなリストになります。
イベントコンポーネントも調べることができます。この場合には、アプリケーションは最初にeventTypeをチェックしなければなりません。正しいイベント構造体のコンポーネントは、それに依存します。Prologイベントコンポーネントの指定子は、'event'の後にCイベント構造体のコンポーネント名を続け、アンダースコアの代わりに大文字によって単語を区切ったものです。 (x --> eventX, in_out_detail --> eventInOutDetail)
正しいコールバック構造体のコンポーネント、および正しいイベント構造体のコンポーネント名については、索引の一覧表を参照して下さい。
?- [user].
| breakCallback(_,_,Reason) :- write(Reason), nl, break. | EOF
yes
?- xtAddCallback(pushButton, activateCallback, breakCallback, _).
yes ?- xtMainLoop.
< click to push button > activate [2] ?- xtGetCallbackComponents([ widget(Widget), reason(Reason), eventType(Type), eventButton(Button) ]).
Widget = pushButton Reason = activate Type = KeyPress Button = buttonX
yes ?-
list_expected CallbackComponentListは、リストでなければならない illegal_component_list_elememt CallbackComponentListの要素は、アリティ1の項でなければならない。 no_callback_struct_to_analyze コールバックから呼び出されなかったか、あるいはコールバックがコールバックの構造体をもっていなかった illegal_class_component 要求されたコンポーネントがこのコールバックの構造体に存在せず、呼び出し中のwidgetのコールバックの構造体のメンバでない illegal_reason_component 要求されたコンポーネントがこのコールバックの構造体に存在せず、この理由に対して有効でない illegal_callback_component 要求されたコールバックのコンポーネントがインタフェースに登録されていない
| 冒頭へ |
|