diff options
author | Michael Mann <mmann78@netscape.net> | 2017-12-29 11:23:07 -0500 |
---|---|---|
committer | Roland Knall <rknall@gmail.com> | 2018-01-05 11:13:21 +0000 |
commit | 1a07d97fd70d1d0f2f22ccf41d09a1a5e0050666 (patch) | |
tree | f8fe54f0e9bb0b9fdcc3656e836c8c2cb48d10f7 /ui/qt/manager/preference_manager.h | |
parent | 1e16be7556eddc913fb1d5410a22f95a77cb37ff (diff) |
Qt: Add manager for preference dialog
Abstract out the different types of preferences into a visitor
and factory pattern to handle the preference dialog.
Change-Id: Ia611ec192dcc1ad638a997182cec1ab5bdb7859c
Reviewed-on: https://code.wireshark.org/review/25142
Petri-Dish: Roland Knall <rknall@gmail.com>
Tested-by: Petri Dish Buildbot
Reviewed-by: Roland Knall <rknall@gmail.com>
Diffstat (limited to 'ui/qt/manager/preference_manager.h')
-rw-r--r-- | ui/qt/manager/preference_manager.h | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/ui/qt/manager/preference_manager.h b/ui/qt/manager/preference_manager.h new file mode 100644 index 0000000000..6ae224ee66 --- /dev/null +++ b/ui/qt/manager/preference_manager.h @@ -0,0 +1,80 @@ +/* preference_manager.h + * + * Wireshark - Network traffic analyzer + * By Gerald Combs <gerald@wireshark.org> + * Copyright 1998 Gerald Combs + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#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 +{ + Q_OBJECT + +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 +{ + Q_OBJECT +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 + +/* + * Editor modelines + * + * Local Variables: + * c-basic-offset: 4 + * tab-width: 8 + * indent-tabs-mode: nil + * End: + * + * ex: set shiftwidth=4 tabstop=8 expandtab: + * :indentSize=4:tabSize=8:noTabs=true: + */ |