]> vaikene.ee Git - evaf/blob - src/libs/Common/registry.cpp
Warning fixes and copyright update.
[evaf] / src / libs / Common / registry.cpp
1 /**
2 * @file Common/registry.cpp
3 * @brief Common registry implementation
4 * @author Enar Vaikene
5 *
6 * Copyright (c) 2011-2019 Enar Vaikene
7 *
8 * This file is part of the eVaf C++ cross-platform application development framework.
9 *
10 * This file can be used under the terms of the GNU General Public License
11 * version 3.0 as published by the Free Software Foundation and appearing in
12 * the file LICENSE included in the packaging of this file. Please review the
13 * the following information to ensure the GNU General Public License version
14 * 3.0 requirements will be met: http://www.gnu.org/copyleft/gpl.html.
15 *
16 * Alternatively, this file may be used in accordance with the Commercial License
17 * Agreement provided with the Software.
18 */
19
20 #include "registry.h"
21 #include "globals.h"
22 #include "version.h"
23
24 #include <QtCore>
25
26 //-------------------------------------------------------------------
27
28 using namespace eVaf::Common;
29
30 iRegistry * iRegistry::instance()
31 {
32 static Internal::Registry singleton;
33 return &singleton;
34 }
35
36
37 //-------------------------------------------------------------------
38
39 using namespace eVaf::Common::Internal;
40
41 Registry::Registry()
42 : iRegistry()
43 {
44 setObjectName(QString("%1-iRegistry").arg(VER_MODULE_NAME_STR));
45
46 // Register our own interface
47 registerInterface("iRegistry", this);
48 }
49
50 Registry::~Registry()
51 {
52 mInterfaces.clear();
53 }
54
55 bool Registry::registerInterface(QString const & name, QObject * obj)
56 {
57 // Add the interface to the list of registered interfaces and connect to
58 // the destroyed() signal.
59 mInterfaces.insert(name, obj);
60 connect(obj, SIGNAL(destroyed(QObject *)), this, SLOT(interfaceDestroyed(QObject *)));
61
62 return true;
63 }
64
65 QObject * Registry::queryInterface(QString const & name) const
66 {
67 Interfaces::const_iterator it = mInterfaces.constFind(name);
68 return it != mInterfaces.constEnd() ? *it : nullptr;
69 }
70
71 void Registry::interfaceDestroyed(QObject * obj)
72 {
73 // Interface object destroyed. Remove it from the list of registered
74 // interfaces.
75 Interfaces::iterator it = mInterfaces.begin();
76 Interfaces::const_iterator e = mInterfaces.end();
77 while (it != e) {
78 if (*it == obj) {
79 it = mInterfaces.erase(it);
80 }
81 else {
82 ++it;
83 }
84 }
85 }