/* preference_manager.h * * Wireshark - Network traffic analyzer * By Gerald Combs * Copyright 1998 Gerald Combs * * SPDX-License-Identifier: GPL-2.0-or-later */ #ifndef PREFERENCE_MANAGER_H #define PREFERENCE_MANAGER_H #include #include #include #include #include #include #include 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 & 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