Sayonara Player
SettingNotifier.h
1/* SettingNotifier.h */
2
3/* Copyright (C) 2011-2020 Michael Lugmair (Lucio Carreras)
4 *
5 * This file is part of sayonara player
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 3 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, see <http://www.gnu.org/licenses/>.
19 */
20
21#ifndef SETTINGNOTIFIER_H
22#define SETTINGNOTIFIER_H
23
24#include <functional>
25#include <QObject>
26
27#pragma once
28
29class AbstrSettingNotifier : public QObject
30{
31 Q_OBJECT
32
33signals:
34 void sigValueChanged();
35
36public:
37 template<typename T>
38 void addListener(T* c, void (T::*fn)())
39 {
40 connect(this, &AbstrSettingNotifier::sigValueChanged, c, fn);
41 }
42
43 void emit_value_changed();
44};
45
46template<typename KeyClass>
48{
49private:
50 AbstrSettingNotifier* m=nullptr;
51
54 {}
55
56 SettingNotifier(const SettingNotifier& other) = delete;
57
58public:
59 ~SettingNotifier() = default;
60
61 static SettingNotifier<KeyClass>* instance()
62 {
63 static SettingNotifier<KeyClass> inst;
64 return &inst;
65 }
66
67 void valueChanged()
68 {
69 m->emit_value_changed();
70 }
71
72 template<typename T>
73 void addListener(T* c, void (T::*fn)())
74 {
75 m->addListener(c, fn);
76 }
77};
78
79
80namespace Set
81{
82 template<typename KeyClassInstance, typename T>
83 //typename std::enable_if<std::is_base_of<SayonaraClass, T>::value, void>::type
84 void
85 listen(T* t, void (T::*fn)(), bool run=true)
86 {
88
89 if(run)
90 {
91 auto callable = std::bind(fn, t);
92 callable();
93 }
94 }
95
96 template<typename KeyClassInstance>
97 void shout()
98 {
100 }
101}
102
103
104#endif // SETTINGNOTIFIER_H
Definition: SettingNotifier.h:30
Definition: SettingNotifier.h:48