MINERVA superseeded IF/Prolog.
Please see
http://www.ifcomputer.co.jp/MINERVA
for details.
We discontinued to sell IF/Prolog Dec 31. 2003.
For current customers, we continue to provide
professional support for IF/Prolog until Dec 31, 2008.
xtAddCallback(+WidgetName, +CallbackName,
+Predicate, +ClientData)
xtAddCallbacks(+CallbackList)
intrinsicsのXtAddCallback(s)()と同様の働きをします。
xtAddCallback/4は、名前で識別されるコ−ルバック述語をwidgetのコ−ルバックリストに追加します。
xtAddCallback/4は、コ−ルバック述語Predicate/3の存在をチェックし、それがない場合には例外を起こします。
以下のコ−ルバック述語は組み込まれており、toolkit intrincsicsの場合と同様にポップアップに使用できます。
xtCallbackPopdown ClientData[Shell, Enable]として引き渡されたシェルをポップダウンします
xtCallbackNone ClientDataとして引き渡されたシェルをポップアップします
xtCallbackExclusive
xtCallbackNonExclusive
以下のコ−ルバック述語は、便利なので組み込まれています。
xtCallbackBreak xtBreakMainLoop/0を呼び出します
xtCallbackBye Prologを終了させます
xtCallbackSetGlobal ClientDataが[Var, Val]の場合にset_global(Var, Val)を呼び出します
コ−ルバックのディスパッチは、C言語バインディングの場合と同様に行えます。ただ1つの例外は、Cではwidgetの破壊中にコ−ルバックを破壊する述語が呼び出されますが、ここではwidgetの破壊が終了してから呼び出されます。
Predicate/3は、引き起こされたイベントがディスパッチされた場合に呼び出されます。
Predicate(WidgetName, ClientData, CallData).
コ−ルバック述語が失敗した場合には、エラ−検出のために例外"callback_predicate_failed"が起きます。
ClientDataはどのPrologの項でもよく、呼び出し時にPredicateに引き渡されます。
xtAddCallbacks/1は、CallbackList中のすべてのコ−ルバックを追加するためにxtAddCallback/4を呼び出します。
[user].
| write_callback(WidgetName, ClientData, CallData):-
write('callback from widget '),
write(WidgetName),
write(' with client_data '),
write(ClientData),
nl.
|EOF
yes
?- xtAddCallback(command_1, callback, write_callback,xxx).
yes
?- xtMainLoop.
< click with left mouse button to window >
callback from widget command_1 with client data xxx
< click with left mouse button to window >
callback from widget command_1 with client data xxx
< click with left mouse button to window >
callback from widget command_1 with client data xxx
< ctrl B in window >
yes
?- _
widget_expected WidgetNameが存在しない
atom_expected CallbackNameがアトムでない
illegal_callback_name この名前のコ−ルバックリストは存在しない
illegal_widget_callback このwidgetに存在しないコ−ルバックリストである
illegal_callback_predicate Predicate/3が定義されていない
|