VR-Forces 5.0.2 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) 2020 MAK Technologies, Inc.
3 ** All rights reserved.
4 ******************************************************************************/
5 
9 
10 #pragma once
11 
12 #include <vrvCore/DtDe.h>
13 #include <vrvCore/DtDisplay.h>
15 
16 #include <vrvUtil/signalslib.h>
17 #include <boost/bind.hpp>
18 #include <list>
19 
20 namespace makVrv
21 {
22 
23  class DtDe;
24  class DtDisplay;
25  class DtDeCommunicator;
26 
28  template<class T>
30  {
31 
32  public:
33 
34  virtual ~DtSubjectAnnouncer();
35 
38 
40  virtual void activate(T* subject) const;
41 
43  virtual void deactivate(T* subject) const;
44 
46  boost::signalslib::signal<void (T*)> signal_activate;
47 
49  boost::signalslib::signal<void (T*)> signal_deactivate;
50 
51  typedef std::list<T*> ActivatedList;
52 
54  virtual std::list<T*>& activatedList();
55 
56  protected:
57 
60 
63  static DtSubjectAnnouncer* create(DtDe& de);
64 
66  virtual void slot_onActivate(T* subject);
67 
69  virtual void slot_onDeactivate(T* subject);
70 
71  protected:
72 
75 
76  };
77 
78  template<class T>
80  {
81  signal_activate.connect(
83 
84  signal_deactivate.connect(
86  }
87 
88  template<class T>
90  {
91  signal_activate.disconnect(
93 
94  signal_deactivate.disconnect(
96  }
97 
98  template<class T>
100  {
101  DtSubjectAnnouncer* announcer = 0;
102  announcer = dynamic_cast<DtSubjectAnnouncer<T>*>(de.findInstance(T::className()));
103  if(!announcer)
104  {
105  announcer = create(de);
106  de.registerInstance(T::className(),announcer);
107  }
108 
109  if(!announcer)
110  {
111  DtTHROW_NEW(DtCorruptedState,"Unable to get an DtSubjectAnnouncer instance.");
112  }
113  return announcer;
114  }
115 
116  template<class T>
118  {
119  return new DtSubjectAnnouncer<T>(de);
120  }
121 
122  template<class T>
123  void DtSubjectAnnouncer<T>::activate( T* subject) const
124  {
125  signal_activate(subject);
126  }
127 
128  template<class T>
129  void DtSubjectAnnouncer<T>::deactivate( T* subject) const
130  {
131  signal_deactivate(subject);
132  }
133 
134  template<class T>
136  {
137  myActivatedList.remove(subject);
138  myActivatedList.push_back(subject);
139  }
140 
141  template<class T>
143  {
144  myActivatedList.remove(subject);
145  }
146 
147  template<class T>
149  {
150  return myActivatedList;
151  }
152 
153 
157 
158 }
159 
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:148
virtual void slot_onDeactivate(T *subject)
Connected to its own signal_deactivate which removes subjects from the activated list.
Definition: DtSubjectAnnouncer.h:142
boost::signalslib::signal< void(T *)> signal_activate
Signal with a T argument and a void return value.
Definition: DtSubjectAnnouncer.h:46
boost::signalslib::signal< void(T *)> signal_deactivate
Signal with a DtIgDisplayUserInterface argument and a void return value.
Definition: DtSubjectAnnouncer.h:49
static DtSubjectAnnouncer * findInstance(DtDe &de)
Get the instance of this object. This object is &#39;lazily created&#39;.
Definition: DtSubjectAnnouncer.h:99
std::list< T * > ActivatedList
Definition: DtSubjectAnnouncer.h:51
virtual void activate(T *subject) const
Causes the activate signal to be emitted.
Definition: DtSubjectAnnouncer.h:123
DtSubjectAnnouncer< DtDeCommunicator > DtDeCommunicatorAnnouncer
Definition: DtSubjectAnnouncer.h:155
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...
DtSubjectAnnouncer(DtDe &de)
The constructor for this class is protected. Use create().
Definition: DtSubjectAnnouncer.h:79
Contains makVrv::DtVirtualBaseClass class.
binderNoArgs< _Fn > bind(const _Fn &_Func, const _Ty &_Left)
Definition: DtSTLUtilities.h:76
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:135
ActivatedList myActivatedList
List of activated subjects.
Definition: DtSubjectAnnouncer.h:74
A DtSubjectAnnouncer tells DtSubjectObservers that the subject T is activated or deactivated.
Definition: DtSubjectAnnouncer.h:29
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:70
virtual void deactivate(T *subject) const
Causes the deactivate signal to be emitted.
Definition: DtSubjectAnnouncer.h:129
DtSubjectAnnouncer< DtDe > DtDeAnnouncer
Definition: DtSubjectAnnouncer.h:154
virtual ~DtSubjectAnnouncer()
Definition: DtSubjectAnnouncer.h:89
DtSubjectAnnouncer< DtDisplay > DtDisplayAnnouncer
Definition: DtSubjectAnnouncer.h:156
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:117
Contains makVrv:DtDisplay class.

Document ID: Generated on Sun Dec 4 20:22:03 EST 2022 from SVN revision 249613
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)