Manager > マネージャーの高度な機能 > オブザーバー
 
オブザーバー
マネージャーの状態の変更時にアプリケーションに通知することができます。この通知機構は、IlvObserver のサブクラスである IlvManagerObserver に基づいています。オブザーバーはアプリケーションにより作成され、マネージャーに設定されます。マネージャーは理由と呼ばれる特定の状況でオブザーバーへのメッセージ送信を管理します。
通知メッセージは理由に応じて異なるカテゴリーに分類されます。オブザーバーにインタレスト・マスク (interest mask) を設定することにより、1 つまたは複数のカテゴリーのメッセージを受信するよう選択することができます。通知理由がオブザーバーのインタレスト・マスクのカテゴリーに属している場合、マネージャーはオブザーバーにメッセージを送信します。これらのカテゴリーを Table 3.1 に示します。
通知カテゴリー
カテゴリーの説明
マスク
一般
IlvMgrMsgGeneralMask
マネージャー・ビュー
IlvMgrMsgViewMask
マネージャー・レイヤー
IlvMgrMsgLayerMask
マネージャーの内容
IlvMgrMsgContentsMask
オブジェクト・ジオメトリー
IlvMgrMsgObjectGeometryMask
通知メッセージを受け取るアプリケーションには、IlvManagerObserver のサブクラスを定義し、仮想メンバー関数 update をオーバーロードする必要があります。オブザーバーはこのメンバー関数で、理由および通知に関する追加情報を含む IlvManagerMessage のインスタンスまたはサブクラスを受け取ります。
一般通知
このカテゴリーはマネージャーについての一般的な通知です。
Interest mask:IlvMgrMsgGeneralMask
*マネージャーを削除します。
理由:IlvMgrMsgDelete
メッセージ・タイプ:IlvManagerMessage
マネージャー・ビュー通知
このカテゴリーはマネージャー・ビューで行われた操作についての通知です。
Interest mask:IlvMgrMsgViewMask
*ビューをマネージャーに追加します。
理由:IlvMgrMsgAddView
メッセージ・タイプ:IlvManagerAddViewMessage
*マネージャーからビューを削除します。
理由:IlvMgrMsgRemoveView
メッセージ・タイプ:IlvManagerRemoveViewMessage
*ビューのインタラクターを設定します。
理由:IlvMgrMsgSetInteractor
メッセージ・タイプ:IlvManagerSetInteractorMessage
*ビューのトランスフォーマーを設定します。
理由:IlvMgrMsgSetTransformer
メッセージ・タイプ:IlvManagerSetTransformerMessage
マネージャー・レイヤー通知
このカテゴリーはマネージャー・レイヤーで行われた操作についての通知です。
Interest mask:IlvMgrMsgLayerMask
*レイヤーをマネージャーに追加します。
理由:IlvMgrMsgAddLayer
メッセージ・タイプ:IlvManagerLayerMessage
*マネージャーからレイヤーを削除します。
理由:IlvMgrMsgRemoveLayer
メッセージ・タイプ:IlvManagerLayerMessage
*レイヤーのインデックスを変更します。
理由:IlvMgrMsgMoveLayer
メッセージ・タイプ:IlvManagerMoveLayerMessage
*2 つのレイヤー間でインデックスを交換します。
理由:IlvMgrMsgSwapLayer
メッセージ・タイプ:IlvManagerSwapLayerMessage
*レイヤーの名前を設定します。
理由:IlvMgrMsgLayerName
メッセージ・タイプ:IlvManagerLayerNameMessage
*レイヤーの可視性を設定します。
理由:IlvMgrMsgLayerVisibility
メッセージ・タイプ:IlvManagerLayerVisibilityMessage
*レイヤーの選択性を設定します。
理由:IlvMgrMsgLayerSelectability
メッセージ・タイプ:IlvManagerLayerMessage
マネージャーの内容通知
このカテゴリーはマネージャーの内容の変更についての通知です。
Interest mask:IlvMgrMsgContentsMask
*グラフィック・オブジェクトをマネージャーに追加します。
理由:IlvMgrMsgAddObject
メッセージ・タイプ:IlvManagerContentsMessage
*マネージャーからグラフィック・オブジェクトを削除します。
理由:IlvMgrMsgRemoveObject
メッセージ・タイプ:IlvManagerContentsMessage
*グラフィック・オブジェクトのレイヤーを設定します。
理由:IlvMgrMsgObjectLayer
メッセージ・タイプ:IlvManagerObjectLayerMessage
グラフィック・オブジェクト・ジオメトリー通知
このカテゴリーはオブジェクトのジオメトリーの変更についての通知です (たとえば、移動、リサイズおよび回転)。
Interest mask:IlvMgrMsgObjectGeometryMask
*グラフィック・オブジェクトのジオメトリーを変更します。
理由:IlvMgrMsgObjectGeometry
メッセージ・タイプ:IlvManagerObjectGeometryMessage
レイヤーおよびビューの追加または削除についての通知を受信するオブザーバーの実装は次のようになります。
class MyManagerObserver
: public IlvManagerObserver
{
public:
MyManagerObserver(IlvManager* manager)
: IlvManagerObserver(manager,
IlvMgrMsgLayerMask | IlvMgrMsgViewMask)
{}
virtual void update(IlvObservable* o, IlAny arg);
};
update メンバー関数:
void MyManagerObserver::update(IlvObservable* obs, IlAny arg)
{
IlvManager* manager = ((IlvManagerObservable*)obs)->getManager();
switch(((IlvManagerMessage*) arg)->_reason) {
// __ Notification on manager view
case IlvMgrMsgAddView:
IlvPrint("Add view notification");
break;
case IlvMgrMsgRemoveView:
IlvPrint("Remove view notification");
break;
// __ Notification on manager layer
case IlvMgrMsgAddLayer:
IlvPrint("Add layer notification:%d",
((IlvManagerLayerMessage*)arg)->getLayer());
break;
case IlvMgrMsgRemoveLayer:
IlvPrint("Remove layer notification:%d",
((IlvManagerLayerMessage*)arg)->getLayer());
break;
default:
IlvPrint("Unhandled notification");
break;
}
}
オブザーバーをマネージャーに付加します。
MyManagerObserver* observer = new MyManagerObserver(manager);

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