template <class EventType> class TJEventSource
イベントソース
継承:
Public メンバ
- typedef TJEventListener <EventType> ListenerType
- リスナの型
Public メソッド
- virtual ~TJEventSource()
- デストラクタ
- virtual void addEventListener(ListenerType* l)
- イベントリスナを登録する
- virtual void removeEventListener(ListenerType* l)
- イベントリスナを削除する
- virtual void removeEventListeners()
- 登録されているすべての Listener を削除する
- virtual bool hasEventListener(const ListenerType* l) const
- Listner を持っているかどうかの検査
- virtual void destroyEventListeners() const
- 登録されている Listener を delete (デストラクタ呼び出し)する
- virtual unsigned countEventListeners() const
- 現在の Listener の数を返す
文書
イベントソース.各種イベントのソース(発生源)の実装を支援するためのテンプレートであり, イベントを型引数としている.EventListener と組で Java のイベントモデル java.util.EventObject / java.util.EventListener をサポートする.
C++ では多重継承を用いることができるため,イベントソース側 にも継承できるサポートクラスとしてこのクラスを用意した. (java.beans.PropertyChangesSupportを参照)
登録されたリスナへの通知の順序は規定されていない.
登録された Listener の delete(デストラクタ呼び出し) については, 基本的にはアプリケーションの責任とするが,明示的に destroyListeners を 呼ぶことで全 Listener に対して delete を呼び出すことができる.
Event, Listener, Source の使用例を示す.
* * // アプリケーション定義のイベント型 * class XxxEvent { * TJEventSource<XxxEvent>* source; * int value; * public: * XxxEvent(TJEventSource<XxxEvent>* s, int v): * source(s), value(v) { } * TJEventSource<XxxEvent>* getSource() const { * return source; * } * int getValue() const { return value; } * }; * * // アプリケーション定義のイベントリスナ * #include "TJEventListener.h" * class XxxListener : public TJEventListener<XxxEvent> { * public: * virtual void eventHappened(const XxxEvent& ev) { * cout << "ev.value=" << ev.getValue() << endl; * // マルチスレッド環境では this オブジェクトの操作は危険 * } * }; * * // アプリケーション定義のイベントソース * #include "TJEventSource.h" * class XxxSource : public TJEventSource<XxxEvent> { * public: * void foo() { * // ........ * // イベント発生 * XxxEvent ev(this, 2); * fireEvent(ev); // eventHappened を呼び出す * } * }; * * // ソースとリスナの連結 * XxxSource source; * XxxListener listener; * source.addListener(&listener); * *Listener, Source の呼び出し関係は以下のようになる.
* * XxxSource XxxListener * method() | | * ---------> | | * |--+ | * | |fireEvent() | * |<-+ | * | | * | eventHappend() | * |-------------------------------->| * | | * *[ロック方針]
このクラスは,マルチスレッドに関するロックを全く意識しない. 必要であれば TJEventSource を見よ.
- typedef TJEventListener <EventType> ListenerType
- リスナの型
- vector <ListenerType*> listeners
- リスナ列
- virtual ~TJEventSource()
-
デストラクタ.
Listener のデストラクタは呼び出さないことに注意.
- 参照 :
- destroyEventListeners()
- virtual void addEventListener(ListenerType* l)
-
イベントリスナを登録する.
- パラメータ:
- l - 登録するリスナ.null なら無視
- virtual void removeEventListener(ListenerType* l)
-
イベントリスナを削除する.
- パラメータ:
- l - 削除するリスナ.null なら無視
- virtual void removeEventListeners()
-
登録されているすべての Listener を削除する.
このメソッドが呼ばれた後,通知すべき Listener のリストは空になる.
各 Listener の delete (デストラクタ呼び出し)は行わない.
- virtual bool hasEventListener(const ListenerType* l) const
-
Listner を持っているかどうかの検査.
- パラメータ:
- l - Listener オブジェクト
- virtual void destroyEventListeners() const
-
登録されている Listener を delete (デストラクタ呼び出し)する.
基本的に Listener の delete はアプリケーションの責任とするが, アプリケーションが Listener 列の管理をしたくない場合,このメソッド が delete を支援する. Listener が自動変数の場合は,当然これを使用してはならない.
- virtual unsigned countEventListeners() const
-
現在の Listener の数を返す.
- 返す値 :
- 現在の Listener の数
- virtual void fireEvent(const EventType& ev)
- イベントリスナにイベントを通知する.
- パラメータ:
- ev - リスナに通知するイベント
- 直接の子クラス:
- TJSafeEventSource
- 作者 :
- tokui, hiranabe @date 1998,7/31 @date 1999,4/1
- 参照 :
- TJSafeEventSource
TJEventListener
索引(アルファベット順) HTMLクラス継承 または Java
This page was generated with the help of DOC++.