新しいwidgetが新しいリソ−スを追加した場合には、IF/Prologにその名前と型を登録する必要があります。もちろん、これはIF/Prologからリソ−スにアクセスしたい場合にのみ必要となります。リソ−スの登録は、$PROROOT/motif11にあるファイル'mresources.c'を編集することによって行われます。新しいリソ−スは、アルファベット順にソ−トされたテ−ブルIFXTResourceTable[]に挿入されなければなりません。このテ−ブルは、以下の形式の項目から成っています。
形式: resource-name(リソ−ス名) prolog-toolkit-converter(prolog-toolkitコンバ−タ) toolkit-prolog-converter(toolkit-prologコンバ−タ) prolog-type(prolog型) class-list(クラスリスト) resource-type(リソ−ス型) strings(文字列の集合) next(次)
resource-name(リソ−ス名) リソ−スの文字列名です。
prolog-toolkit-converter(prolog-toolkitコンバ−タ) toolkit-prolog-converter(toolkit-prologコンバ−タ) 変更手続きに対するポインタです。リソ−ス型が他の内蔵されたwidgetによってすでに使われている場合は、コンバ−タはすでに存在しており、それを使うことができます。そのリソ−ス型に対するコンバ−タが存在しない場合には、プログラマが新しいwidgetを追加することによって提供されなければなりません。コンバ−タの章を参照して下さい。
あるリソ−ス型は、特にウインドウ、フォント、ピクセルのようなXのリソ−スを含むリソ−ス型は、Xtoolkit表現からIF/Prolog表現への変換が行えない場合があるかもしれません。このようなリソ−スはPrologから設定できますが、読むことはできません。この場合には、特別な例外処理を引き起こすコンバ−タを提供することができます。この代わりにNULLを入れることもできます。これは、変換できないことをユ−ザに知らせる通常の例外処理を引き起こします。PrologからXtoolkitへの変換ができない場合にも、同じ方法を適用することができます。たとえばIF/Prologから設定できないリソ−スで、その値(デフォルトファイル中で定義されている可能性がある)がアプリケ−ションで必要とされる場合です。Prolog型 ArgInvalidが使用されている場合には、コンバ−タはチェックされず、例外処理が引き起こされます。
prolog-type(prolog型) prolog型はあるリソ−スが正しいPrologデ−タで提供され、それに対して正しいオペレ−ションが実行されているかどうかをチェックするために使われます。
prolog型が定数ArgInvalid, ArgInteger, ArgFloat, ArgAtom, ArgList, AegStructのうちのいずれかの場合には、xtSetValues/2やxtGetValues/2を使ってwidgetを生成する時に、指定されたPrologデ−タ型を使うことができます。
使用可能なPrologデ−タ型に関する情報は、ビット定数PAtom, PInteger, PFloat, PList, PStructのうちのひとつ、あるいはいくつかをor結合することによって得られます。
使用可能なオペレ−ションに関する情報は、ビット定数ArgCreate, ArgSetValues, ArgGetValuesのうちのひとつ、あるいはいくつかをor結合することによって得られます。
ビットArgConstraintが設定されると、リソ−スはあるマネ−ジャ・widget・クラスによって定義されたコンストレイント・リソ−スになります。つまり、このクラスの親の子に適用することができます。
class-list(クラスリスト) クラスリストは、widgetのクラス変数に対するポインタの配列です。リストには、同一のデ−タ型を使ってこのリソ−スを定義するすべてのwidgetクラスが含まれています。この情報は、あるリソ−スがあるwidgetに対して正しいかどうかをチェックするのに使われます。
resource-type(リソ−ス型) リソ−ス型は文字列(char *)で、通常はNULLになります。これは、1個の共通なPrologからXtoolkitへの変換手続きを、異なるリソ−ス型に使用するために使われます。これは変換手続きに対する最後の引数として引き渡されます。
strings(文字列の集合) 文字列の集合は文字列の配列(char **)で、通常はNULLになります。これは、1個の共通なXtoolkitからPrologへの変換手続きを、異なるリソ−ス型に使用するために使われます。これは変換手続きに対する最後の引数として引き渡されます。
next(次) このポインタは、通常はNULLになります。これは、リソ−スの名前の衝突(重複)を扱う場合に必要になります。つまり、異なるwidgetクラスによって同一のリソ−ス名が使われたり、リソ−スのデ−タ型が異なる場合です。この場合には、'next'が別のクラスの変換情報を示します。
| scroll to top |
|