X-Designer 再現機能は、スクリプトに記録されたアクションはすぐにユーザーアクションとして認識できなければならないという方針に基づいています。
ユーザーとウィジェットとの対話方法 (マウスボタンの 1 つをクリックするなど)、またはキーボードからの入力内容など、Motif アプリケーション内で行われる大部分のアクションを記述することができます。この記述によって、Motif アプリケーションの記録および再現が非常に簡単になります。また、テストを行うユーザーもスクリプトを理解、プログラミング、保守することが簡単になります。アプリケーションで使用される非標準ウィジェットについても同様です。
この方法がすぐに適用できない Motif ウィジェット (ウィジェット内での位置が重要なもの) も多数あります。それらのウィジェットの多く (スケール、スクロールバーなど) は、1 つの機能がそのウィジェットのすべてのインスタンスに対して機能します。描画領域あるいはその他のカスタムウィジェットでは、ウィジェットのインスタンスごとにまったく動作が異なる場合があります。
たとえば、記録用ソフトウェアは描画領域内のクリックを認識しますが、ユーザーはこのアクションを別の見方でとらえています。ユーザーはアプリケーションが描画領域に描画したオブジェクトと対話しています。しかし、これらのオブジェクトはアプリケーションのコード内にのみ現われます。インタフェースの一部ではありません。
アプリケーションプログラマであれば、特定のカスタムウィジェットまたは描画領域内でのクリックの意味が正確に分かるので、ウィジェットの記録と再現を行うユーザーが理解および使用できるように、これらのアクションを記述するルーチンを簡単に作成することができます。
描画領域かそれ以外のカスタマイズされたウィジェットをプログラミングしている場合は、ウィジェット内の (x,y) 座標にあるイベントを、特定のアクションに変換するコードがあらかじめ作成されています。 X-Designer 再現が提供するインタフェースを使用してコンバータを登録すると、専用のルーチンを使用してテストを行うことができます。
X-Designer 再現機能には 2 つのコンバータを設定する必要があります。1 つはある (x,y) 座標のイベントをアクションに変換する記録用コンバータで、もう 1 つはそのアクションを (x,y) 座標に変換する再現用のコンバータです。
変換ルーチンを使用すると、(x,y) 座標をユーザーとウィジェット自体の両方にとって意味のあるものにマップすることができます。
同じ機能がウィジェットクラス (他社のウィジェットなど) とカスタムウィジェット (Motif XmDrawingArea ウィジェットなど) の両方に使用されています。
以下の 2 つの節で、コンバータルーチンについて説明します。また、Motif XmList ウィジェットクラス用のコンバータの作成例を示します。
typedef int (*xdsXYToNameProc) ( Widget widget, int x, int y, char** name_p, char** attribute_p )
ルーチンは失敗すると 0 を、成功すると 1 を返します。name_p
および attribute_p
に割り当てられた文字列は、 X-Designer 再現機能によっては解放されません。コピーが行われるため、静的記憶域を使用することができます。
ルーチンが失敗すると、エラーがレポートされます。
typedef int (*xdsNameToXyProc) ( Widget widget, char* name, char* attribute, int* x_p, int* y_p )
ルーチンは失敗すると 0 を、成功すると 1 を返します。
再現したい結果をウィジェット上に直接プログラムすることが非常に簡単な場合もあります。たとえば、リソース値の設定や簡易関数の呼び出しなどによってプログラムする場合がそうです。ただし、このような場合は一連のイベントを正確に模倣するのは非常に困難です。その際には、このルーチンで処理することができます。
ただし、成功を返して、(x,y) 座標を負の値に設定する必要があります。通常は、ウィジェット内のクリック動作をシミュレートすると、結果の座標を正数と見なします。
関連項目: