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// Qt-Security score:significant reason:default
4
5//
6// W A R N I N G
7// -------------
8//
9// This file is not part of the Qt API. It exists for the convenience
10// of Qt Designer. This header
11// file may change from version to version without notice, or even be removed.
12//
13// We mean it.
14//
15
16#ifndef SHARED_EXTENSIONFACTORY_H
17#define SHARED_EXTENSIONFACTORY_H
18
19#include <QtDesigner/default_extensionfactory.h>
20#include <QtDesigner/qextensionmanager.h>
21
22QT_BEGIN_NAMESPACE
23
24namespace qdesigner_internal {
25
26// Extension factory for registering an extension for an object type.
27template <class ExtensionInterface, class Object, class Extension>
28class ExtensionFactory: public QExtensionFactory
29{
30public:
31 explicit ExtensionFactory(const QString &iid, QExtensionManager *parent = nullptr);
32
33 // Convenience for registering the extension. Do not use for derived classes.
34 static void registerExtension(QExtensionManager *mgr, const QString &iid);
35
36protected:
37 QObject *createExtension(QObject *qObject, const QString &iid, QObject *parent) const override;
38
39private:
40 // Can be overwritten to perform checks on the object.
41 // Default does a qobject_cast to the desired class.
42 virtual Object *checkObject(QObject *qObject) const;
43
44 const QString m_iid;
45};
46
47template <class ExtensionInterface, class Object, class Extension>
48ExtensionFactory<ExtensionInterface, Object, Extension>::ExtensionFactory(const QString &iid, QExtensionManager *parent) :
49 QExtensionFactory(parent),
50 m_iid(iid)
51{
52}
53
54template <class ExtensionInterface, class Object, class Extension>
55Object *ExtensionFactory<ExtensionInterface, Object, Extension>::checkObject(QObject *qObject) const
56{
57 return qobject_cast<Object*>(qObject);
58}
59
60template <class ExtensionInterface, class Object, class Extension>
61QObject *ExtensionFactory<ExtensionInterface, Object, Extension>::createExtension(QObject *qObject, const QString &iid, QObject *parent) const
62{
63 if (iid != m_iid)
64 return nullptr;
65
66 Object *object = checkObject(qObject);
67 if (!object)
68 return nullptr;
69
70 return new Extension(object, parent);
71}
72
73template <class ExtensionInterface, class Object, class Extension>
74void ExtensionFactory<ExtensionInterface, Object, Extension>::registerExtension(QExtensionManager *mgr, const QString &iid)
75{
76 auto *factory = new ExtensionFactory(iid, mgr);
77 mgr->registerExtensions(factory, iid);
78}
79} // namespace qdesigner_internal
80
81QT_END_NAMESPACE
82
83#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)