Torc  0.1
torcobservable.cpp
Go to the documentation of this file.
1 /* Class TorcObservable
2 *
3 * This file is part of the Torc project.
4 *
5 * Copyright (C) Mark Kendall 2012-18
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
20 * USA.
21 */
22 
23 // Qt
24 #include <QCoreApplication>
25 #include <QMutex>
26 
27 // Torc
28 #include "torcobservable.h"
29 
41  : m_observerLock(QMutex::Recursive),
42  m_observers()
43 {
44 }
45 
47 void TorcObservable::AddObserver(QObject *Observer)
48 {
49  QMutexLocker locker(&m_observerLock);
50  if (!Observer || m_observers.contains(Observer))
51  return;
52  m_observers.append(Observer);
53 }
54 
56 void TorcObservable::RemoveObserver(QObject *Observer)
57 {
58  QMutexLocker locker(&m_observerLock);
59  m_observers.removeAll(Observer);
60 }
61 
64 {
65  QMutexLocker locker(&m_observerLock);
66  foreach (QObject* observer, m_observers)
67  QCoreApplication::postEvent(observer, Event.Copy());
68 }
TorcEvent * Copy(void) const
Copy this event.
Definition: torcevent.cpp:82
A general purpose event object.
Definition: torcevent.h:9
void AddObserver(QObject *Observer)
brief Register the given object to receive events.
void Notify(const TorcEvent &Event)
Brief Send the given event to each registered listener/observer.
void RemoveObserver(QObject *Observer)
brief Deregister the given object.