手順 2:プロトタイプ・インスタンスの取得と変更
パネル内のプロトタイプ・インスタンスに行った操作のすべては、コンテナーであれマネージャーであれ、(また、プロトタイプのインスタンスのスーパークラスである
IlvGroup に対するものであれ)、すべて
IlvGroupHolder を使用しています。このクラスによって、
IlvGroup クラスのオブジェクトをパネルに追加することも、またパネルからオブジェクトを削除したり取得することもできます。
ファイルを読み込んだ後、マネージャーに関連するグループ・ホルダーを取得します。次に、グループ・ホルダーからプロトタイプのインスタンス myThermometer を取得し、その温度アトリビュートを 0.0 に初期化します。
// Insert the following code after the line:
// "the prototype instances are automatically read."
IlvGroupHolder* holder=IlvGroupHolder::Get(manager);
IlvGroup* myThermometer = holder->getGroup("myThermometer");
if (!myThermometer) {
IlvFatalError("This program expects to find an IlvGroup "
"of name 'myThermometer' in the file 'myPanel.ilv'");
return -1;
}
myThermometer->changeValue(IlvValue("temperature", 0.0));
さらに、アプリケーションによって提供される値から、温度値を定期的に更新する必要があります。このため、次の部分をプログラムの main() 関数の前 (include 命令の後) に挿入して、タイマー・ルーチンを作成します。
// Insert the following code before the main() body.
const IlUInt angleincrement = 4;
static void
TimerProc(IlvTimer*, IlvAny arg)
{
static IlUInt angle=0;
IlvGroup* thermometer=(IlvGroup*) arg;
IlDouble temperature=50.0+40.0*sin(degreesToRadians(angle));
// Feed in temperature values.
thermometer->changeValue(IlvValue("temperature", temperature));
angle = (angle + angleincrement) % 360;
}
この機能によって、温度は値 10 から 90 の間でシヌソイド関数に従って上下します。次に、このタイマーを 200ms ごとにウェイクアップし、パネルから取得した myThermometer プロトタイプのインスタンスを更新するように初期化します。次に示す行の後に、
myThermometer->changeValue(IlvValue("temperature", 0.0));
以下のコードを挿入します。
// start changing the values of the target group
IlvTimer* timer = new IlvTimer(display, 0, 200, TimerProc,
(IlvAny)myThermometer);
timer->run();
これによって定期的に温度計の値が更新されます。これで、このプログラムをコンパイルして実行できます。温度が規則的に上下して Rogue Wave Views Studio で前に設定した閾値を超えると、温度計が赤に変わるのを確認できます。
次の呼び出しで閾値を変更できます。
myThermometer->changeValue(IlvValue("threshold", 50.0));
次の呼び出しで閾値を取得できます。
IlvValue tval("threshold", (IlDouble)0.0);
IlDouble threshold = (IlDouble) myThermometer->queryValue(tval);
ソース・コード一式は、このチュートリアルにおける次の手順の出発点となる step2/program.cpp ファイルにあります。
Version 5.6
Copyright © 2012, Rogue Wave Software, Inc. All Rights Reserved.