コールバックダイアログを使用すると、ウィジェット上に特定のユーザーアクションが実行された場合に呼び出すコールバック関数またはメソッドのリストを指定することができます。このようなコールバックまたはメソッドはユーザーが定義することができます。ダイアログはインタフェース内のユーザーイベントと、特定のアプリケーションルーチンを関連付けます。
コールバックの指定
コールバックリストとは、ユーザーアプリケーションでユーザーアクションにより引き起こされるように指定されている 1 つまたは複数のコールバック関数のリストです。ユーザーのアクションには、マウスボタンの押下、キーボード選択およびポインタの移動があります。コールバックを設定すると、ウィジェット内で特定のユーザーアクションが行われるたびにインタフェースに指示を出して、コールバックリストにある関数を呼び出すことができます。
コールバックの右側に「M」が表示されてる場合はメソッドが、「C」が表示されている場合はコールバックが宣言されていることを示します。アスタリスク (*) は、そのコールバックが Microsoft Windows ではサポートされていないことを示します。
生成済みの Java コードに適用されるコールバックは、右側に「J」が表示されます。そのコールバックメソッドは言語指定が Java の場合のみ使用可能です。
「M2.1」が表示されているコールバックは、Motif 2.1 に新しく追加されたものです。
継承されたコールバック
定義のインスタンスであるウィジェットの場合は、定義中の対応するウィジェットからコールバックを継承することができます。
継承されたコールバックは角括弧 [ ] で囲まれて表示されます。
コールバック構文
一般に、コールバックリスト内の各関数呼び出しの構文は C 構文と同じです。ただし、関数を示す ( ) は自動的に追加されるため、指定する必要はありません。
注 - 関数またはメソッドの名前に関数を示す括弧 ( ) や引数を加えた場合は、名前の一部として扱われます。
実行順序
コールバックリストは C コードのように見えますが、論理的な流れはありません。つまり、 if...else や while のような C の論理演算子は使用できず、また、コールバックが特定の順序で実行されるとは限りません。リスト内のすべての関数は、指定されたイベントが発生した場合に、それらが入力された順序とは関係なく実行されます。実行の順序が重要である場合には、必要な順序でサブルーチン呼び出しを含んでいる単一のコールバック関数を作成することができます。
クライアントデータ
「クライアントデータ」テキストボックスに指定したデータは、コールバックへ引き渡されます。コールバックで何らかのデータを必要とする場合は、大域変数ではなく、この機能を使用することをお勧めします。「クライアントデータ」テキストボックスに、引数として表示させたい文字列を入力してください。通常 C および C++ 構文でキャストされる型を追加することもできます。ただし、関数の引数を示す括弧 ( ) は自動的に追加されるため、入力する必要はありません。
注 - クライアントデータは、コールバック関数には追加できますが、コールバックメソッドには追加できません。
メソッド
「メソッド」ボタンは、選択したウィジェットが C++ クラスに包含されている場合にのみ有効になります。その場合は、「メソッドの名前」ボタンを押すと、該当するクラスですでに定義されているコールバックメソッドのリストが表示されます。リストからコールバックメソッドを選択して「了解」ボタンを押すと、選択したコールバックメソッドが「メソッドの名前」テキストフィールドに表示されます。
コードを編集
「コードを編集」ボタンを押すと、X-Designer を実行したままで、スタブファイル (生成されたファイルで、指定したコールバックを含む) を編集することができます。
様式オプションメニュー
様式オプションメニューは、「コードを編集」機能と連動しています。スタブファイルを編集する際は、使用する言語を指定する必要があります。ダイアログを呼び出すと、X-Designer が使用言語を認識し、対応するメニューを設定しようとします。しかし、1 つのデザインで 2 つの言語を使用して作業している場合など、不可能な場合があります。このメニューで正しいオプションを選択しているかどうかを常に確認してください。
削除
「削除」ボタンは、現在のコールバックリスト全体を削除します。この操作を元に戻すことはできないため、「削除」ボタンは十分に注意して使用してください。
更新
「設定の更新」を使用すると、既存のコールバックの属性を更新することができます。 コールバックを選択して変更し、新しい属性を有効にするために「設定の更新」を選択します。
設定のクリア
このオプションはダイアログをデフォルトの状態に戻します。コールバックの選択をすべて解除し、それに付随するすべての情報を削除します。
コールバック関数
ほとんどのコールバック関数は、類似した構造を持っています。代表的なコールバック関数は、以下に示す動作のいくつか、またはすべてを実行します。
コールバック関数の引数
コールバック関数は、次の 3 種類の引数を受け取ります。クライアントデータは、任意の変数または構造のアドレスを渡すために使用できるポインタです。コールバックを登録する場合、そのコールバック関数に渡されるクライアントデータ引数に対しての値を指定することができます。
X-Designer では、クライアントデータの名前は、コールバック関数の単一のオプション引数としてコールバックダイアログで指定されます。これは、適切なプレリュードで定義し、初期化した構造体へのポインタとすることができます。たとえば、典型的なプレリュードは以下のようになります。
/* メインダイアログシェルに対するマネージの前プレリュード */
/* rungrep コールバックに対するクライアントデータを定義して初期化する */
static rcdata_t rcdata = {
&hitstring,
&errorshell,
&errorform,
&errortext,
&mainshell
};
/* シェルに対するマネージの前プレリュード終わり */
rungrep((XtPointer)&rcdata)
構造体 rcdata_t の宣言は、通常はコールバック関数モジュールおよび生成されたコードに(モジュール・プレリュードとして #include を追加することで) 含まれているヘッダーファイルにあります。
コールバック関数はクライアントデータを(rcdata_t *) にキャストした後、データをアクセスすることができます。 構造体 rcdata は、変数そのものの値ではなく、ウィジェット変数に対してのポインタを含むように定義されていることに注意してください。これにより、rcdata はウィジェットが作成される前に初期化することができます。 ウィジェット変数の値がコピーされる構造体を定義することもできますが、その場合には、すべてのウィジェットが作成されるまでこの構造体は初期化されないため、注意が必要です。
C++ でのコールバック
クラスメンバー関数をコールバック関数としてウィジェットに追加することは理想的ですが、残念ながらこれは不可能です。コールバック関数は C ライブラリによって呼び出され、クラスメンバー関数が必要とする呼び出し文脈 (this ポインタ) を提供することができないためです。 X-Designer は、コールバックから自動的に呼び出すための方法「コールバック・メソッド」を提供しています。
コールバックに関するスマートコードオプション
スマートコードとその使用法に関する詳細は、次のスマートコードリンクを使用して参照してください。スマートコードトグルを選択するときは、次の 3 種類のスマートコードの「タイプ」から 1 つを選択します。
ウィジェットのグループごとに 1 組の "getter" および "setter" 関数を提供します。
getter および setter を提供するだけでなく、X-Designer をトリガーし、ユーザーインタフェースが組み込まれたクライアントアプリケーションとスマートコードコールバックが組み込まれたサーバーアプリケーションを別個に生成します。さらに、両者の 間の通信プロトコルを処理するためのコードも生成されます。
このオプションは、上記の「thin クライアント」オプションとほとんど同じですが、サーバーアプリケーションは生成されません。このオプションを使用して、既存のサーバーに接続したり、Web ページを取り込んだりするアプリケーションを生成します。
関連項目: