グラフィック・オブジェクト > IlvGraphic:グラフィック・オブジェクト・クラス
 
IlvGraphic:グラフィック・オブジェクト・クラス
Rogue Waveィ Views グラフィック・オブジェクトは、抽象ベース・クラス IlvGraphic からアトリビュートを継承しています。このクラスを使うと、Rogue Wave Views グラフィック・オブジェクトが、特定の宛先ポートでそれ自体を描画でき、また必要に応じて IlvTransformer クラスに関連付けられたオブジェクトに従って座標を変換します。
IlvGraphic は幾何公差を設定、変更できるメンバー関数を備えています。アプリケーション固有の目的のため、オブジェクトと関連付けできるユーザー・プロパティーを設定・取得するために多数のメンバー関数が用意されています。IlvGraphic クラスは、実際にはこれらのメンバー関数を実装していません。これらは、仮想メンバー関数として宣言し、IlvGraphic アトリビュートを継承するクラスでさまざまな動作を行うように定義します。幾何学形状やグラフィック・アトリビュートを操作するメンバー関数もありますが、そのような関数は何も行いません。
メンバー関数
IlvGraphic メンバー関数は、いくつかのグループで表されます。
*幾何学プロパティー  これらのメンバー関数は位置、サイズ、グラフィック・オブジェクトを描く IlvGraphic::draw メソッドを含む描画プロパティーを扱います。仮想 draw メソッドは、メソッド boundingBox と定義する必要があります。これは、グラフィック・オブジェクトが覆う領域全体を含む最小矩形を定義します。
*グラフィック・プロパティー  これらのメンバー関数を使用して、オブジェクトの視覚的側面、つまり色やパターンを変更します。これにはグラフィック・オブジェクトのグラフィック・プロパティーを示し、パレットを変更してグラフィック・オブジェクトに結び付けるメンバー関数を使用します。以下の例は、グラフィック・オブジェクトの背景の設定方法を示しています。
IlvButton* mybutton = new IlvButton(display,
IlvPoint(20,20),
“Quit”);
IlvColor* color = display->getColor(“gold”);
if (color) mybutton->setBackground(color);
*名前付きのプロパティー  名前付きのプロパティーは、グラフィック・オブジェクトに関連付けられたプロパティーの永続性を扱います (Chapter 12を参照)。
*ユーザー・プロパティー  IlvGraphic オブジェクトは、ソース・コードのユーザー・プロパティー一式と関連付けることができます。ユーザー・プロパティーとは キー値ペアのセットで、キーが IlSymbol オブジェクトでその値は任意の種類の情報値です。ユーザー・プロパティーに永続性はありません。
これらのメンバー関数で、グラフィック・オブジェクトをアプリケーションから取得した情報と簡単に関連付けられます。作成するオブジェクトへのポインターを格納することによってアプリケーションのグラフィック部分を追跡し、ユーザー・プロパティーによりアプリケーションのグラフィックな側面に接続できます。次にその例を示します。
IlInt index = 10;
IlSymbol* key = IlGetSymbol("objectIndex");
mybutton->addProperty(key, (IlAny)index);
メンバー関数の中にはタグ管理ができるものがあります。タグはグラフィック・オブジェクトに適用してそれらを識別するマーカーです。さまざまな Rogue Wave Views 機能を使用して、タグ付きのオブジェクトだけを操作できます。
*ガジェット・プロパティー  ガジェット・プロパティーはイベントに対するオブジェクトのセンシティビティー、オブジェクトがアクティブになった際のコールバック呼び出し、オブジェクトに格納されているクライアントのデータ、オブジェクト・クラスに関連付けられたオブジェクト・インタラクターを扱います。コールバックの使用方法については、コールバック を参照してください。
*フォーカス・チェーン・プロパティー  フォーカスは、キーボード・イベントを受け取る画面上のオブジェクトです。フォーカス・チェーンとは、フォーカスを受け取る画面上のオブジェクトの順番です。フォーカス・チェーンでは、一般的に フォーカスは Tab キーを押すと次のオブジェクトに、Shift と Tab キーを押すと前のオブジェクトに移動します。
*クラス情報  クラス IlvGraphic のサブタイプは、クラス・レベルの情報を扱います。これはつまり、特定のクラスのインスタンスはすべて同じ情報を共有できるということです。たとえば、ターゲットの IlvGraphic オブジェクトが指定されたクラス引数のサブクラスである場合、className を使うとクラス名を取得でき、isSubtypeOfIlTrue を返します。この例では、クラス名情報メンバー関数の使用方法を示しています。
IlvButton* button = new IlvButton(display,
IlvPoint(10,10),
"sample");
// Get the IlvClassInfo object associated with the button class.
IlvClassInfo* classInfo = button->getClassInfo();
 
// Get the name of the IlvGraphic class and print it: "IlvButton"
const char* name = classInfo->getClassName();
IlvPrint(name);
 
// Get the name of the super class and print it: "IlvMessageLabel"
name = classInfo->getSuperClass()->getClassName();
IlvPrint(name);
 
IlBoolean isSubtype =
classInfo->isSubtypeOf(IlvSimpleGraphic::ClassInfo());
name = isSubtype ? "It's a subtype" : "error";
IlvPrint(name);
*クラス・プロパティー  スタティック・メンバー関数および相当する非スタティック関数を使うと、クラス・レベルのプロパティーを扱うことができます。つまり、これらのプロパティーは、クラスのインスタンスごとに定義されます。いくつかのメソッドでは、IlBoolean パラメーターを使うと、一致するまでオブジェクトの各スーパークラスで反復動作できます。以下に示すのは、クラス・プロパティーを扱うメンバー関数です。
void AddProperty(const IlSymbol* key, IlAny value);
void RemoveProperty(const IlSymbol* key);
void ReplaceProperty(const IlSymbol* key, IlAny value);
void GetProperty(const IlSymbol* key,
IlBoolean checkSuperClass = IlFalse);
const IlvClassInfo* HasProperty(const IlSymbol* key,
IlBoolean checkSuperClass = IlFalse);
void addClassProperty(const IlSymbol* key, IlAny value);
IlBoolean removeClassProperty(const IlSymbol* key);
IlBoolean replaceClassProperty(const IlSymbol* key,
IlAny value);
IlAny getClassProperty(const IlSymbol* key,
IlBoolean checkSupCl = IlFalse) const;
const IlvClassInfo* hasClassProperty(const IlSymbol* key,
IlBoolean checkSupCl = IlFalse) const;
次に、クラス・プロパティーの使用方法の例を示します。
グラフィック・インスタンスがトグルに類似したセンシティブな振る舞い (Rogue Wave Views は インタラクターと呼ばれる特定のオブジェクトを提供し、これにより振る舞いをグラフィック・オブジェクトに関連付けできます) と表示されるマップを想定します。これらの要素を非センシティブにする場合があります。オブジェクトのリストをスキャンしてセンシティビティーを IlFalse に設定する代わりに、クラス・レベルのプロパティーを以下のように使用します。
myClassIlvGraphic のサブクラスとし、IlvToggleInteractor のサブクラスである myInteractor myClass に付加するインタラクターとします。
// Add the class-level property
myClass* obj = new myClass(display);
obj->addClassProperty(IlGetSymbol("sensitive"),
(IlAny)IlTrue);
適用されたコードでは、センシティビティーが反転したかどうかをアプリケーションがテストします。ステートメントはどちらも同等なため、スタティック・メンバー関数を使用してプロパティーをクラス・オブジェクトに追加する方法もあります。
if (anyValue == IlTrue)
{
myClass::AddProperty(IlGetSymbol("sensitive"),
(IlAny)IlFalse);
}
myInteractor クラスの実装ファイルで、親クラスのメソッド IlvInteractor::handleEvent を特定の振る舞いに追加する、つまりある条件下においてセンシティビティーをフリーズするように再定義します。
IlBoolean
myInteractor::handleEvent(IlvGraphic* object,
IlvEvent& event,
IlvContainer* cont,
IlvTransformer* transf)
{
// gets the sensitivity state
IlSymbol* symbol = IlGetSymbol("sensitive");
if (object->hasClassProperty(symbol))
{
if (!object->getClassProperty(symbol))
return IlFalse;
}
return IlvViewToggleInteractor::handleEvent(object,
event,
cont,
transf);
}
*入出力プロパティー  これらのメンバー関数を使うと、IlvInputFileIlvOutputFile として知られている特殊な種類のストリームでオブジェクト詳細の読み書きができます。これらのストリームは C++ ストリームでオブジェクトの読み書きを扱います。
Rogue Wave Views は、これらのクラスを基本実装しています。これらは特定の情報を簡単に追加できるように設計されています。したがって、アプリケーションに依存するデータを保存したり読み込む必要がある場合は、これら 2 つのクラスのサブタイプを独自に作成します。
*グラフィック・オブジェクトの書き込み
IlvOutputFile クラスは、オブジェクト一式の完全な詳細を出力ストリームに書き込みます。このクラスは、次のように使用できます。
// Open a file output stream
fstream outstream("image.ilv", ios::out | ios::trunc);
// Initialize the number of objects and their array of pointers
const IlvUInt n = 10;
IlvGraphic* outObjects[n];
for (IlvUInt i=0; i<n; i++)
outObjects[i] = new IlvRectangle(display,
IlvRect(0, 0, 200, 100));
// Create the IlvOutputFile
IlvOutputFile outfile(outstream);
// Write the objects and get in outTotalCount the number
// of objects actually stored
IlvUInt outTotalCount = 0;
outfile.saveObjects(n, outObjects, outTotalCount);
*グラフィック・オブジェクトの読み込み
IlvInputFile クラスは、ストリームからオブジェクトを読み込むためのメイン・クラスです。次のコードは、入力ストリームから IlvGraphic オブジェクトを読み込む方法を示しています。
// Open a file input stream
fstream instream("image.ilv", ios::in);
// Create the IlvInputFile
IlvInputFile infile(instream);
// Get the number of created objects and their array of pointers
IlUInt InTotalCount = 0;
IlvGraphic* const* inObjects = infile.readObjects(display,
InTotalCount);

Version 5.6
Copyright © 2012, Rogue Wave Software, Inc. All Rights Reserved.