Prototype > C++ アプリケーションでプロトタイプを使用する > プロトタイプの高度な使用 > コーディングによるプロトタイプの作成
 
コーディングによるプロトタイプの作成
プロトタイプは、Rogue Wave® Views Studio を使用してグラフィカルにデザインするものです。しかし、場合によっては、C++ プログラムからプロトタイプを作成したり、既存のプロトタイプを変更する必要があります。このセクションでは、Rogue Wave Views Studio でデザインするのではなく、C++ のコーディングによるプロトタイプの作成方法について説明します。
新規プロトタイプの作成
プロトタイプは、IlvPrototype クラスのインスタンスで表現されています。新規プロトタイプを作成するには、次のコンストラクターを使用します。
IlvPrototype* proto = new IlvPrototype("myPrototype");
グラフィック・ノードの追加
最初の手順は、プロトタイプのグラフィック外観を定義することです。これは、グラフィック・オブジェクトを含むノードを追加して行います。これには、IlvGraphicNode クラスのインスタンスを作成し、これらを addNode メソッドでプロトタイプに追加します。
IlvLabel* label = new IlvLabel(display, 100, 100, "Hello");
IlvGraphicNode* node = new IlvGraphicNode(label, "label", IlTrue);
proto->addNode(node);
IlvGraphicNode コンストラクターには 3 つのパラメーターがあります。
*IlvGraphic:プロトタイプに含めるグラフィック・オブジェクト。
*文字列。ノード名。
*ブール型。ローカル・トランスフォーマーをグラフィック・ノードに関連付けるべきかどうかを指定します(詳細は、IlvGraphicNode クラスを参照してください)。
アクセサー・パラメーターでプロトタイプのグラフィック・ノードを参照する必要がある場合、それらに異なる名前を付けます。
サブグループの追加
プロトタイプにサブグループを追加して階層オブジェクトを作成することができます。これを行うには、IlvSubGroupNode クラスのインスタンスであるノードを追加します。このサブグループは、グラフィック・ノードを追加して独自に構築した IlvGroup にすることができます。あるいは、他のプロトタイプのインスタンスにすることもできます。
// Add a sub-group:
IlvGroup* subgroup = new IlvGroup("subgroup");
IlvLine* line1 = new IlvLine(display, IlvPoint(100, 100),
IlvPoint(200, 200));
subgroup->addNode(new IlvGraphicNode(line1, "line1"));
IlvLine* line2 = new IlvLine(display, IlvPoint(100, 200),
IlvPoint(200, 100));
subgroup->addNode(new IlvGraphicNode(line2, "line2"));
proto->addNode(new IlvSubGroupNode(subgroup));
// Add a prototype instance as a sub-group:
IlvPrototype* proto = IlvLoadPrototype("samples.pump", display);
IlvProtoInstance* instance = proto->clone();
proto->addNode(new IlvSubGroupNode(instance));
アクセサー・オブジェクトの追加
グラフィック・オブジェクトをプロトタイプに追加してプロトタイプを「描く」と、そのプロパティーを定義してプロパティーの変更の効果を指定することができます。これを行うには、プロトタイプにアクセサー・オブジェクトを追加します。アクセサー・オブジェクトは、IlvUserAccessor のサブクラスのインスタンスです。
アクセサー・オブジェクトをプロトタイプに追加するには、IlvUserAccessor の適切なサブクラスのインスタンスを作成して、addAccessor メソッドを呼び出します。たとえば次のコードは、プロトタイプに 2 つのアクセサー・オブジェクトを追加します。値を保存する IlvValueAccessor と条件をテストし、その結果に応じてアトリビュートを変更する IlvConditionAccessor
proto->addAccessor(new IlvValueAccessor("v", IlvValueFloatType));
proto->addAccessor(new IlvConditionAccessor("v", IlvValueFloatType,
display,
IlvConditionAccessor::IlvCondGreaterThan,
"100",
"label.label",
"Greater than 100",
"Smaller than 100"));
各アクセサー・クラスの完全な説明は、定義済みアクセサー および Rogue Wave Views Prototypes リファレンス・マニュアルを参照してください。
ライブラリーにプロトタイプを追加する
保存して後で再読み込みができるように、プロトタイプは、プロトタイプ・ライブラリーに保存しなくてはなりません。
新規のプロトタイプ・ライブラリーを作成するには、IlvProtoLibrary クラスを使用します。
IlvProtoLibrary* protoLib = new IlvProtoLibrary(display,
"myLib",
"/usr/home/myhome/protos");
プロトタイプ・ライブラリーは、プロトタイプをファイル・システム・ディレクトリーに保存します (前の例の "/usr/home/myhome/protos")。このディレクトリーを後で、setPath メソッドを使用して変更することができます。
プロトタイプを新規ライブラリーに追加するには、addPrototype メソッドを呼び出します。
protoLib->addPrototype(proto);
プロトタイプの保存
プロトタイプを保存するには、IlvAbstractProtoLibrary::save メソッドを呼び出します。
myLib->save(0, IlTrue);
最初のパラメーターはオプションの出力ストリームで、ここにライブラリー記述ファイルが保存されます。記述ファイルがそのデフォルトの位置に保存されるように、これを 0 に設定します (前の例の "/usr/home/myhome/protos/myLib.ipl")。2 番目のパラメーターは IlTrue に設定して、すべてのプロトタイプが保存されるように指定します。

Version 6.0
Copyright © 2015, Rogue Wave Software, Inc. All Rights Reserved.