summaryrefslogtreecommitdiffstats
path: root/ui/qt/manager/preference_manager.h
diff options
context:
space:
mode:
Diffstat (limited to 'ui/qt/manager/preference_manager.h')
-rw-r--r--ui/qt/manager/preference_manager.h64
1 files changed, 64 insertions, 0 deletions
diff --git a/ui/qt/manager/preference_manager.h b/ui/qt/manager/preference_manager.h
new file mode 100644
index 0000000..030e0fa
--- /dev/null
+++ b/ui/qt/manager/preference_manager.h
@@ -0,0 +1,64 @@
+/** @file
+ *
+ * Wireshark - Network traffic analyzer
+ * By Gerald Combs <gerald@wireshark.org>
+ * Copyright 1998 Gerald Combs
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+
+#ifndef PREFERENCE_MANAGER_H
+#define PREFERENCE_MANAGER_H
+
+#include <config.h>
+
+#include <QObject>
+#include <QMetaObject>
+#include <QHash>
+#include <QActionGroup>
+
+#include <ui/qt/models/pref_models.h>
+#include <ui/qt/capture_file.h>
+
+class PreferenceFactory;
+class WiresharkPreference;
+
+class PreferenceManager : public QObject
+{
+public:
+ static PreferenceManager* instance();
+ virtual ~PreferenceManager();
+
+ void registerType(int pref, PreferenceFactory * factory);
+ void reuseType(int pref, int reuseFor);
+ WiresharkPreference * getPreference(PrefsItem * item);
+
+protected:
+ explicit PreferenceManager(QObject * parent = Q_NULLPTR);
+
+private:
+ static QMap<int, PreferenceFactory*> & factories();
+};
+
+class PreferenceFactory : public QObject
+{
+public:
+ virtual ~PreferenceFactory();
+ virtual WiresharkPreference * create(QObject * parent = Q_NULLPTR) = 0;
+};
+
+#define REGISTER_PREFERENCE_TYPE(pref_id, preference_class) \
+ class preference_class##pref_id##Factory : public PreferenceFactory { \
+ public: \
+ preference_class##pref_id##Factory() \
+ { \
+ PreferenceManager::instance()->registerType(pref_id, this); \
+ } \
+ virtual WiresharkPreference *create(QObject * parent) { \
+ WiresharkPreference * newPrefHandler = new preference_class(parent); \
+ return newPrefHandler; \
+ } \
+ }; \
+ static preference_class##pref_id##Factory global_##preference_class##pref_id##Factory;
+
+#endif // PREFERENCE_MANAGER_H