iLab Neuromorphic Robotics Toolkit  0.1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
ParamChangedListener.H
Go to the documentation of this file.
1 /*! @file
2  @author Laurent Itti
3  @copyright GNU Public License (GPL v3)
4  @section License
5  @verbatim
6  // ////////////////////////////////////////////////////////////////////////
7  // The iLab Neuromorphic Robotics Toolkit (NRT) //
8  // Copyright 2010-2012 by the University of Southern California (USC) //
9  // and the iLab at USC. //
10  // //
11  // iLab - University of Southern California //
12  // Hedco Neurociences Building, Room HNB-10 //
13  // Los Angeles, Ca 90089-2520 - USA //
14  // //
15  // See http://ilab.usc.edu for information about this project. //
16  // ////////////////////////////////////////////////////////////////////////
17  // This file is part of The iLab Neuromorphic Robotics Toolkit. //
18  // //
19  // The iLab Neuromorphic Robotics Toolkit is free software: you can //
20  // redistribute it and/or modify it under the terms of the GNU General //
21  // Public License as published by the Free Software Foundation, either //
22  // version 3 of the License, or (at your option) any later version. //
23  // //
24  // The iLab Neuromorphic Robotics Toolkit is distributed in the hope //
25  // that it will be useful, but WITHOUT ANY WARRANTY; without even the //
26  // implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //
27  // PURPOSE. See the GNU General Public License for more details. //
28  // //
29  // You should have received a copy of the GNU General Public License //
30  // along with The iLab Neuromorphic Robotics Toolkit. If not, see //
31  // <http://www.gnu.org/licenses/>. //
32  // ////////////////////////////////////////////////////////////////////////
33  @endverbatim */
34 
35 
36 #ifndef INCLUDE_NRT_CORE_MODEL_PARAMCHANGEDLISTENER_H
37 #define INCLUDE_NRT_CORE_MODEL_PARAMCHANGEDLISTENER_H
38 
40 
41 namespace nrt
42 {
43  //! Base class for a listener for Parameter changes on a Blackboard
44  /*! Parameter listeners get called each time a parameter value changes on the Blackboard they monitor. Typically, a
45  graphical user interface would register a listener for the Blackboard that holds the Module (and possible
46  sub-components/sub-modules) whose parameters are displayed in the user interface, so that the values of these
47  parameters gets updated in real time.
48 
49  \ingroup parameter */
51  {
52  public:
53  //! No default constructor
54  ParamChangedListener() = delete;
55 
56  //! Constructor specifying which Module on which Blackboard to monitor
57  /*! After construction, the listener needs to be activated by calling activate(). This is not done during
58  construction as objects that derive from ParamChangeListener and overload onParamChanged() will not be
59  fully constructed yet by the time the base class constructor is invoked, which would result in a
60  pure virtual function called fatal error. */
61  ParamChangedListener(std::string const & bbuid, std::string const & module);
62 
63  //! Activate the listener (start listening)
64  /*! onParamChanged() may be called immediately upon activation. */
65  void activate();
66 
67  //! De-activate the listener (stop listening)
68  void deactivate();
69 
70  //! Virtual destructor for safe inheritance
71  /*! If needed, this will automatically deactivate() first. */
72  virtual ~ParamChangedListener();
73 
74  //! Recover the Blackboard uid that we are listening on
75  std::string const & bbuid() const;
76 
77  //! Recover the Module uid that we are listening on
78  std::string const & module() const;
79 
80  //! Callback function called when a parameter of the monitored Module is changed
81  /*! Derived classes must overload this function and take the desired action upon Parameter change. */
82  virtual void onParamChanged(nrt::ParameterState const state, nrt::ParameterSummary const & ps) = 0;
83 
84  private:
85  bool activated;
86  std::string const itsBBuid;
87  std::string const itsModule;
88  };
89 }
90 
91 #endif // INCLUDE_NRT_CORE_MODEL_PARAMCHANGEDLISTENER_H