X-Designer 再現ウィジェットセットの拡張

X-Designer 再現ウィジェットセットの拡張


概要

X-Designer 再現機能は、スクリプトに記録されたアクションはすぐにユーザーアクションとして認識できなければならないという方針に基づいています。

ユーザーとウィジェットとの対話方法 (マウスボタンの 1 つをクリックするなど)、またはキーボードからの入力内容など、Motif アプリケーション内で行われる大部分のアクションを記述することができます。この記述によって、Motif アプリケーションの記録および再現が非常に簡単になります。また、テストを行うユーザーもスクリプトを理解、プログラミング、保守することが簡単になります。アプリケーションで使用される非標準ウィジェットについても同様です。

この方法がすぐに適用できない Motif ウィジェット (ウィジェット内での位置が重要なもの) も多数あります。それらのウィジェットの多く (スケール、スクロールバーなど) は、1 つの機能がそのウィジェットのすべてのインスタンスに対して機能します。描画領域あるいはその他のカスタムウィジェットでは、ウィジェットのインスタンスごとにまったく動作が異なる場合があります。

たとえば、記録用ソフトウェアは描画領域内のクリックを認識しますが、ユーザーはこのアクションを別の見方でとらえています。ユーザーはアプリケーションが描画領域に描画したオブジェクトと対話しています。しかし、これらのオブジェクトはアプリケーションのコード内にのみ現われます。インタフェースの一部ではありません。

アプリケーションプログラマであれば、特定のカスタムウィジェットまたは描画領域内でのクリックの意味が正確に分かるので、ウィジェットの記録と再現を行うユーザーが理解および使用できるように、これらのアクションを記述するルーチンを簡単に作成することができます。

描画領域かそれ以外のカスタマイズされたウィジェットをプログラミングしている場合は、ウィジェット内の (x,y) 座標にあるイベントを、特定のアクションに変換するコードがあらかじめ作成されています。 X-Designer 再現が提供するインタフェースを使用してコンバータを登録すると、専用のルーチンを使用してテストを行うことができます。

X-Designer 再現機能には 2 つのコンバータを設定する必要があります。1 つはある (x,y) 座標のイベントをアクションに変換する記録用コンバータで、もう 1 つはそのアクションを (x,y) 座標に変換する再現用のコンバータです。

変換ルーチンを使用すると、(x,y) 座標をユーザーとウィジェット自体の両方にとって意味のあるものにマップすることができます。


注 - 一部のウィジェットは、ウィンドウ (x,y) 座標とウィジェット内部の構造体との間の変換を簡単に行う方法 (XmListYToPos 関数など) を提供しています。これは望ましい方法です。これ以外のウィジェットはウィジェットの状態の判断および変更を行う方法を提供しています。たとえば、XmScrollBarGetValues を使用してスクロールバー上のユーザーアクションを記録したり、XmScrollBarSetValues を使用してそのアクションを再現します。イベントを実装することが難しい場合は、コンバータを使用してウィジェットを直接プログラミングすることができます。

同じ機能がウィジェットクラス (他社のウィジェットなど) とカスタムウィジェット (Motif XmDrawingArea ウィジェットなど) の両方に使用されています。

以下の 2 つの節で、コンバータルーチンについて説明します。また、Motif XmList ウィジェットクラス用のコンバータの作成例を示します。

イベントから名前/属性への変換ルーチン

名前

xdsXyToNameProc - イベントから名前/属性の記述への変換に使用される関数のインタフェース定義

形式

    typedef int (*xdsXYToNameProc) (
      Widget widget,
      int    x,
      int    y,
      char**  name_p,
      char** attribute_p )

入力内容

用法

ルーチンは失敗すると 0 を、成功すると 1 を返します。name_p および attribute_p に割り当てられた文字列は、 X-Designer 再現機能によっては解放されません。コピーが行われるため、静的記憶域を使用することができます。

ルーチンが失敗すると、エラーがレポートされます。

名前/属性からイベントへの変換ルーチン

名前

xdsNameToXYProc - 名前/属性の記述からイベントへの変換に使用される関数のインタフェース定

形式

    typedef int (*xdsNameToXyProc) (
      Widget widget,
      char*  name,
      char* attribute,
      int*  x_p,
      int*  y_p )

入力内容

用法

ルーチンは失敗すると 0 を、成功すると 1 を返します。

注意事項

再現したい結果をウィジェット上に直接プログラムすることが非常に簡単な場合もあります。たとえば、リソース値の設定や簡易関数の呼び出しなどによってプログラムする場合がそうです。ただし、このような場合は一連のイベントを正確に模倣するのは非常に困難です。その際には、このルーチンで処理することができます。

ただし、成功を返して、(x,y) 座標を負の値に設定する必要があります。通常は、ウィジェット内のクリック動作をシミュレートすると、結果の座標を正数と見なします。

関連項目: