VR-Forces Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
DtSubjectAnnouncer.h
Go to the documentation of this file.
1 /******************************************************************************
2 ** Copyright (c) 2024 MAK Technologies, Inc.
3 ** All rights reserved.
4 ******************************************************************************/
5 
9 
10 #pragma once
11 
12 #include <vrvCore/DtDe.h>
13 #include <vrvCore/DtDisplay.h>
16 
17 #include <vrvUtil/signalslib.h>
18 #include <boost/bind/bind.hpp>
19 #include <list>
20 
21 namespace makVrv
22 {
23 
24  class DtDe;
25  class DtDisplay;
26  class DtDeCommunicator;
27 
29  template<class T>
31  {
32 
33  public:
34 
35  virtual ~DtSubjectAnnouncer();
36 
39 
41  virtual void activate(T* subject) const;
42 
44  virtual void deactivate(T* subject) const;
45 
47  boost::signalslib::signal<void (T*)> signal_activate;
48 
50  boost::signalslib::signal<void (T*)> signal_deactivate;
51 
52  typedef std::list<T*> ActivatedList;
53 
55  virtual std::list<T*>& activatedList();
56 
57  protected:
58 
61 
64  static DtSubjectAnnouncer* create(DtDe& de);
65 
67  virtual void slot_onActivate(T* subject);
68 
70  virtual void slot_onDeactivate(T* subject);
71 
72  protected:
73 
76 
77  };
78 
79  template<class T>
81  {
82  signal_activate.connect(
83  boost::bind(&DtSubjectAnnouncer<T>::slot_onActivate, this, boost::placeholders::_1));
84 
85  signal_deactivate.connect(
86  boost::bind(&DtSubjectAnnouncer<T>::slot_onDeactivate, this, boost::placeholders::_1));
87  }
88 
89  template<class T>
91  {
92  signal_activate.disconnect(
93  boost::bind(&DtSubjectAnnouncer<T>::slot_onActivate, this, boost::placeholders::_1));
94 
95  signal_deactivate.disconnect(
96  boost::bind(&DtSubjectAnnouncer<T>::slot_onDeactivate, this, boost::placeholders::_1));
97  }
98 
99  template<class T>
101  {
102  DtSubjectAnnouncer* announcer = 0;
103  announcer = dynamic_cast<DtSubjectAnnouncer<T>*>(de.findInstance(T::className()));
104  if(!announcer)
105  {
106  announcer = create(de);
107  de.registerInstance(T::className(),announcer);
108  }
109 
110  if(!announcer)
111  {
112  DtTHROW_NEW(DtCorruptedState,"Unable to get an DtSubjectAnnouncer instance.");
113  }
114  return announcer;
115  }
116 
117  template<class T>
119  {
120  return new DtSubjectAnnouncer<T>(de);
121  }
122 
123  template<class T>
124  void DtSubjectAnnouncer<T>::activate( T* subject) const
125  {
126  signal_activate(subject);
127  }
128 
129  template<class T>
130  void DtSubjectAnnouncer<T>::deactivate( T* subject) const
131  {
132  signal_deactivate(subject);
133  }
134 
135  template<class T>
137  {
138  myActivatedList.remove(subject);
139  myActivatedList.push_back(subject);
140  }
141 
142  template<class T>
144  {
145  myActivatedList.remove(subject);
146  }
147 
148  template<class T>
150  {
151  return myActivatedList;
152  }
153 
154 
158 
159 }
160 
Virtual base class. Allows for RTTI and proper virtual destruction. Used by Creators, Factories, Providers, Assemblers and User Interfaces.
Definition: DtVirtualBaseClass.h:19
virtual std::list< T * > & activatedList()
Return the list of activated subjects.
Definition: DtSubjectAnnouncer.h:149
virtual void slot_onDeactivate(T *subject)
Connected to its own signal_deactivate which removes subjects from the activated list.
Definition: DtSubjectAnnouncer.h:143
boost::signalslib::signal< void(T *)> signal_activate
Signal with a T argument and a void return value.
Definition: DtSubjectAnnouncer.h:47
boost::signalslib::signal< void(T *)> signal_deactivate
Signal with a DtIgDisplayUserInterface argument and a void return value.
Definition: DtSubjectAnnouncer.h:50
static DtSubjectAnnouncer * findInstance(DtDe &de)
Get the instance of this object. This object is &#39;lazily created&#39;.
Definition: DtSubjectAnnouncer.h:100
std::list< T * > ActivatedList
Definition: DtSubjectAnnouncer.h:52
virtual void activate(T *subject) const
Causes the activate signal to be emitted.
Definition: DtSubjectAnnouncer.h:124
DtSubjectAnnouncer< DtDeCommunicator > DtDeCommunicatorAnnouncer
Definition: DtSubjectAnnouncer.h:156
Contains makVrv::DtDe class.
virtual DtVirtualBaseClass * findInstance(const std::string &instanceName) const
Find an instance with the given name. If no instance is found than a null pointer is returned...
Contains makVrv:DtDeCommunicator class.
DtSubjectAnnouncer(DtDe &de)
The constructor for this class is protected. Use create().
Definition: DtSubjectAnnouncer.h:80
Contains makVrv::DtVirtualBaseClass class.
virtual void registerInstance(const std::string &instanceName, DtVirtualBaseClass *instance)
Register an instance with a given name for later retrieval. Once registered, the DtDe takes ownership...
virtual void slot_onActivate(T *subject)
Connected to its own signal_activate which adds subjects to the activated list.
Definition: DtSubjectAnnouncer.h:136
ActivatedList myActivatedList
List of activated subjects.
Definition: DtSubjectAnnouncer.h:75
A DtSubjectAnnouncer tells DtSubjectObservers that the subject T is activated or deactivated.
Definition: DtSubjectAnnouncer.h:30
The DtDe is the core component of any VR-Vantage application. It owns a DtRenderer, DtDeCommunicator, as well as a DtDisplay and other things.
Definition: DtDe.h:76
virtual void deactivate(T *subject) const
Causes the deactivate signal to be emitted.
Definition: DtSubjectAnnouncer.h:130
DtSubjectAnnouncer< DtDe > DtDeAnnouncer
Definition: DtSubjectAnnouncer.h:155
virtual ~DtSubjectAnnouncer()
Definition: DtSubjectAnnouncer.h:90
DtSubjectAnnouncer< DtDisplay > DtDisplayAnnouncer
Definition: DtSubjectAnnouncer.h:157
static DtSubjectAnnouncer * create(DtDe &de)
Static creator function. This class is &#39;lazily created&#39; when needed. Creation happens during the firs...
Definition: DtSubjectAnnouncer.h:118
Contains makVrv:DtDisplay class.

Document ID: Generated on Thu Oct 23 22:29:17 EDT 2025 from SVN revision 280951
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)