プレリュードは、X-Designer が生成されたコードに挿入するコードの断片です。論理的には、プレリュードは生成されたコードの関連部分の #include 文に相当します。
「コードプレリュード」ダイアログ
「コードプレリュード」ダイアログには、選択したウィジェットの生成コードを表すテキストが表示されます。このコードは見本用で、プレリュードが追加される位置を確認することができます。これは、実際の生成コードではありません。
このダイアログには、C コード (「コードプレリュード」ラベル) 用と、C++ (「メソッドプレリュード」ラベル) 用の 2 つの領域があります。テキストの両方の領域内にあるトグルを使用して、各種プレリュードを編集するかどうかを選択することができます。C で使用できるコードプレリュードには、「作成の前」と「マネージの前」の 2 種類があります。
また、C++ で使用されるメソッドプレリュードには「公開」、「限定公開」、「非公開」 の 3 種類があります。
「コードプレリュード」または「メソッド・プレリュード」をクリックすると、対応するテキスト領域がフォールドされ、別の種類のプレリュードだけが表示されます。
コードプレリュードの追加
見本のテキストに表示されるトグルの 1 つを選択すると、その種類のプレリュードを編集することができます。コードプレリュードは、次の 2 つの方法で追加することができます。
「コードを直接編集」トグルをオフにしている場合は、ダイアログの右側に大きなテキストウィジェットが表示されます。ここに、コードを入力します。テキストエディタを使用して別のコードを入力するときと同じように正しく生成前コードを入力してください。すなわち、行末マーカー、括弧規約などを含め、対象とする言語の規則および規約に準拠する必要があります。
「作成の前」プレリュード
「作成の前」プレリュードは、選択されたウィジェットが作成される前に、コードに挿入されます。
選択されたウィジェットがシェルウィジェットではない場合は、「作成の前」プレリュードはウィジェットの親であるシェルの作成関数に挿入され、制限されることなく任意のコードを提供することができます。「作成の前」プレリュードは一般的に、ウィジェット作成時にのみ設定することができるリソースを設定する場合に使用されます。以下に示す生成されたコードの断片は、「作成の前」プレリュードが追加される場所を示します。
/* xdesigner: prelude for rowcol1: pre-create */
ここに「作成の前」プレリュードを入力
/* pre-create ends. */
rowcol1 = XmCreateRowColumn ( widget1, "rowcol1", al, ac );
...
「コードを直接編集」を選択して、かつ生成コードを直接編集している場合は、コードを必ず特別なコメントに囲まれた領域に入力してください。こうしておくと、コードの再生成時にこのコードが保持されます。特別なコメントは変更および削除しないでください。
シェルの「作成の前」プレリュード
シェル用のコードプレリュードは、他のウィジェットのコードプレリュードとは多少異なります。「作成の前」プレリュードは、シェルの作成関数の関数ヘッダを置き換えるために使用されます。そして必要に応じて、追加引数を定義することができます。
デフォルトの関数ヘッダでは、生成された関数の本体は引数として渡される変数の 1 つまたは複数を参照します。これらの変数は有効範囲内に存在している必要がありますが、引数として引き渡すか、または大域変数として宣言するかを選択することができます。以下の変数も有効範囲内に存在している必要があります。
アプリケーションシェルに必要な変数:
Display *display;
char *app_name;
int app_argc;
char **app_argv;
ダイアログシェルまたは最上位シェルに必要な変数:
Widget parent;
UIL に対する C に必要な変数:
MrmHierarchy hierarchy_id;
MrmCode *class;
シェルウィジェットに生成前プレリュードを指定しないと、作成関数名はデフォルトで create_<ウィジェット変数名> に設定され、引数は必須引数だけになります。
注 - シェルの「作成の前」プレリュードは Motif XP および MFC コードでは直接編集することができません。コードプレリュードにはプラットフォーム独自のコードが含まれているため、通常クロスプラットフォームのデザインにはコードプレリュードを使用することはお勧めしません。
「マネージの前」プレリュード
「マネージの前」プレリュードは、「作成の前」プレリュードの少し後方の、ウィジェットコールバックが追加される直前に挿入されます。このプレリュードは、コールバックに対してクライアントデータを設定する場合などに使用されます。その他には、テキストウィジェットの値の設定、ScrollingList の記入、あるいはその他の動的初期化などに使用されます。以下の例は、マネージの前プレリュードが挿入される箇所を示す、生成されたコードの断片です。
...
/* prelude for shell1: pre-manage */
ここに「作成の前」コードを入力
/* pre-manage ends. */
XtSetArg(al[ac], XmNallowShellResize, TRUE); ac++;
XtSetArg(al[ac], XmNargc, app_argc); ac++;
XtSetArg(al[ac], XmNargv, app_argv); ac++;
...
「コードを直接編集」を選択して、かつ生成コードを直接編集している場合は、コードを必ず特別なコメントに囲まれた領域に入力してください。こうしておくと、コードの再生成時にこのコードが保持されます。特別なコメントは変更および削除しないでください。
シェルの「マネージの前」プレリュード
シェルの「マネージの前」プレリュードは、関数中の局所的宣言の直後に挿入されます。それ以外の点では、他のウィジェットに対する場合と同様です。