File indexing completed on 2024-04-28 17:06:18

0001 /*
0002     SPDX-FileCopyrightText: 2000-2008 Csaba Karai <krusader@users.sourceforge.net>
0003     SPDX-FileCopyrightText: 2004-2022 Krusader Krew <https://krusader.org>
0004 
0005     SPDX-License-Identifier: GPL-2.0-or-later
0006 */
0007 
0008 #ifndef KRVIEWFACTORY_H
0009 #define KRVIEWFACTORY_H
0010 
0011 // QtCore
0012 #include <QList>
0013 #include <QString>
0014 // QtGui
0015 #include <QKeySequence>
0016 // QtWidgets
0017 #include <QWidget>
0018 
0019 class KrView;
0020 class KConfig;
0021 
0022 /** Abstract container for KrView implementation classes. Created internally by KrViewFactory. */
0023 class KrViewInstance
0024 {
0025     friend class KrView;
0026 
0027 public:
0028     inline int id() const
0029     {
0030         return m_id;
0031     }
0032     inline QString name() const
0033     {
0034         return m_name;
0035     }
0036     inline QString description() const
0037     {
0038         return m_description;
0039     }
0040     inline QString iconName() const
0041     {
0042         return m_iconName;
0043     }
0044     inline QKeySequence shortcut() const
0045     {
0046         return m_shortcut;
0047     }
0048 
0049     virtual KrView *create(QWidget *w, KConfig *cfg) = 0;
0050 
0051 protected:
0052     KrViewInstance(int id, const QString &name, const QString &desc, const QString &iconName, const QKeySequence &shortcut);
0053     virtual ~KrViewInstance()
0054     {
0055     }
0056 
0057 private:
0058     const int m_id;
0059     const QString m_name;
0060     const QString m_description;
0061     const QString m_iconName;
0062     const QKeySequence m_shortcut;
0063 
0064     QList<KrView *> m_objects; // direct access in KrView
0065 };
0066 
0067 /** Factory for KrView implementations. This is a hidden singleton. */
0068 class KrViewFactory
0069 {
0070     friend class KrViewInstance;
0071 
0072 public:
0073     static KrView *createView(int id, QWidget *widget, KConfig *cfg);
0074     static const QList<KrViewInstance *> &registeredViews()
0075     {
0076         return self().m_registeredViews;
0077     }
0078     static int defaultViewId()
0079     {
0080         return self().m_defaultViewId;
0081     }
0082 
0083 private:
0084     KrViewFactory();
0085     void init();
0086     void registerView(KrViewInstance *);
0087     KrViewInstance *viewInstance(int id);
0088 
0089     static KrViewFactory &self();
0090 
0091     QList<KrViewInstance *> m_registeredViews;
0092     int m_defaultViewId;
0093 };
0094 
0095 #endif /* __KRVIEWFACTORY_H__ */