[PVR][Estuary] Timer settings dialog: Show client name in timer type selection dialog...
[xbmc.git] / xbmc / utils / Observer.h
blob71adddd5b3651c442c8004915773938acbb0b498
1 /*
2 * Copyright (C) 2005-2018 Team Kodi
3 * This file is part of Kodi - https://kodi.tv
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 * See LICENSES/README.md for more information.
7 */
9 #pragma once
11 #include "threads/CriticalSection.h"
13 #include <atomic>
14 #include <vector>
16 class Observable;
17 class ObservableMessageJob;
19 typedef enum
21 ObservableMessageNone,
22 ObservableMessagePeripheralsChanged,
23 ObservableMessageSettingsChanged,
24 ObservableMessageButtonMapsChanged,
25 // Used for example when the subtitle alignment position change
26 ObservableMessagePositionChanged,
27 ObservableMessageGamePortsChanged,
28 ObservableMessageGameAgentsChanged,
29 } ObservableMessage;
31 class Observer
33 public:
34 Observer() = default;
35 virtual ~Observer() = default;
36 /*!
37 * @brief Process a message from an observable.
38 * @param obs The observable that sends the message.
39 * @param msg The message.
41 virtual void Notify(const Observable &obs, const ObservableMessage msg) = 0;
44 class Observable
46 friend class ObservableMessageJob;
48 public:
49 Observable() = default;
50 virtual ~Observable() = default;
51 virtual Observable &operator=(const Observable &observable);
53 /*!
54 * @brief Register an observer.
55 * @param obs The observer to register.
57 virtual void RegisterObserver(Observer *obs);
59 /*!
60 * @brief Unregister an observer.
61 * @param obs The observer to unregister.
63 virtual void UnregisterObserver(Observer *obs);
65 /*!
66 * @brief Send a message to all observers when m_bObservableChanged is true.
67 * @param message The message to send.
69 virtual void NotifyObservers(const ObservableMessage message = ObservableMessageNone);
71 /*!
72 * @brief Mark an observable changed.
73 * @param bSetTo True to mark the observable changed, false to mark it as unchanged.
75 virtual void SetChanged(bool bSetTo = true);
77 /*!
78 * @brief Check whether this observable is being observed by an observer.
79 * @param obs The observer to check.
80 * @return True if this observable is being observed by the given observer, false otherwise.
82 virtual bool IsObserving(const Observer &obs) const;
84 protected:
85 /*!
86 * @brief Send a message to all observer when m_bObservableChanged is true.
87 * @param obs The observer that sends the message.
88 * @param message The message to send.
90 void SendMessage(const ObservableMessage message);
92 std::atomic<bool> m_bObservableChanged{false}; /*!< true when the observable is marked as changed, false otherwise */
93 std::vector<Observer *> m_observers; /*!< all observers */
94 mutable CCriticalSection m_obsCritSection; /*!< mutex */