Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
extensionfactory_p.h
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
3
4//
5// W A R N I N G
6// -------------
7//
8// This file is not part of the Qt API. It exists for the convenience
9// of Qt Designer. This header
10// file may change from version to version without notice, or even be removed.
11//
12// We mean it.
13//
14
15#ifndef SHARED_EXTENSIONFACTORY_H
16#define SHARED_EXTENSIONFACTORY_H
17
18#include <QtDesigner/default_extensionfactory.h>
19#include <QtDesigner/qextensionmanager.h>
20
21QT_BEGIN_NAMESPACE
22
23namespace qdesigner_internal {
24
25// Extension factory for registering an extension for an object type.
26template <class ExtensionInterface, class Object, class Extension>
27class ExtensionFactory: public QExtensionFactory
28{
29public:
30 explicit ExtensionFactory(const QString &iid, QExtensionManager *parent = nullptr);
31
32 // Convenience for registering the extension. Do not use for derived classes.
33 static void registerExtension(QExtensionManager *mgr, const QString &iid);
34
35protected:
36 QObject *createExtension(QObject *qObject, const QString &iid, QObject *parent) const override;
37
38private:
39 // Can be overwritten to perform checks on the object.
40 // Default does a qobject_cast to the desired class.
41 virtual Object *checkObject(QObject *qObject) const;
42
43 const QString m_iid;
44};
45
46template <class ExtensionInterface, class Object, class Extension>
47ExtensionFactory<ExtensionInterface, Object, Extension>::ExtensionFactory(const QString &iid, QExtensionManager *parent) :
48 QExtensionFactory(parent),
49 m_iid(iid)
50{
51}
52
53template <class ExtensionInterface, class Object, class Extension>
54Object *ExtensionFactory<ExtensionInterface, Object, Extension>::checkObject(QObject *qObject) const
55{
56 return qobject_cast<Object*>(qObject);
57}
58
59template <class ExtensionInterface, class Object, class Extension>
60QObject *ExtensionFactory<ExtensionInterface, Object, Extension>::createExtension(QObject *qObject, const QString &iid, QObject *parent) const
61{
62 if (iid != m_iid)
63 return nullptr;
64
65 Object *object = checkObject(qObject);
66 if (!object)
67 return nullptr;
68
69 return new Extension(object, parent);
70}
71
72template <class ExtensionInterface, class Object, class Extension>
73void ExtensionFactory<ExtensionInterface, Object, Extension>::registerExtension(QExtensionManager *mgr, const QString &iid)
74{
75 ExtensionFactory *factory = new ExtensionFactory(iid, mgr);
76 mgr->registerExtensions(factory, iid);
77}
78} // namespace qdesigner_internal
79
80QT_END_NAMESPACE
81
82#endif // SHARED_EXTENSIONFACTORY_H
int actionIndexAt(const Widget *w, const QPoint &pos, Qt::Orientation orientation)
virtual ~QDesignerActionProviderExtension()=default
virtual QRect actionGeometry(QAction *action) const =0
virtual QAction * actionAt(const QPoint &pos) const =0
virtual void adjustIndicator(const QPoint &pos)=0
#define QT_FORMEDITOR_EXPORT
Combined button and popup list for selecting options.
Auxiliary methods to store/retrieve settings.
static QRect verticalIndicatorRect(const QRect &rect)
static QRect horizontalIndicatorRect(const QRect &rect, Qt::LayoutDirection layoutDirection)