1/****************************************************************************
2**
3** Copyright (C) 2016 The Qt Company Ltd.
4** Contact: https://www.qt.io/licensing/
5**
6** This file is part of the Qt Designer of the Qt Toolkit.
7**
8** $QT_BEGIN_LICENSE:GPL-EXCEPT$
9** Commercial License Usage
10** Licensees holding valid commercial Qt licenses may use this file in
11** accordance with the commercial license agreement provided with the
12** Software or, alternatively, in accordance with the terms contained in
13** a written agreement between you and The Qt Company. For licensing terms
14** and conditions see https://www.qt.io/terms-conditions. For further
15** information use the contact form at https://www.qt.io/contact-us.
16**
17** GNU General Public License Usage
18** Alternatively, this file may be used under the terms of the GNU
19** General Public License version 3 as published by the Free Software
20** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
21** included in the packaging of this file. Please review the following
22** information to ensure the GNU General Public License requirements will
23** be met: https://www.gnu.org/licenses/gpl-3.0.html.
24**
25** $QT_END_LICENSE$
26**
27****************************************************************************/
28
29//
30// W A R N I N G
31// -------------
32//
33// This file is not part of the Qt API. It exists for the convenience
34// of Qt Designer. This header
35// file may change from version to version without notice, or even be removed.
36//
37// We mean it.
38//
39
40#ifndef QSIMPLERESOURCE_H
41#define QSIMPLERESOURCE_H
42
43#include "shared_global_p.h"
44#include "abstractformbuilder.h"
45#include <QtCore/qstringlist.h>
46#include <QtCore/qvector.h>
47
48QT_BEGIN_NAMESPACE
49
50class DomCustomWidgets;
51class DomCustomWidget;
52class DomSlots;
53
54class QDesignerFormEditorInterface;
55
56namespace qdesigner_internal {
57
58class WidgetDataBaseItem;
59
60class QDESIGNER_SHARED_EXPORT QSimpleResource : public QAbstractFormBuilder
61{
62public:
63 explicit QSimpleResource(QDesignerFormEditorInterface *core);
64 ~QSimpleResource() override;
65
66 QBrush setupBrush(DomBrush *brush);
67 DomBrush *saveBrush(const QBrush &brush);
68
69 inline QDesignerFormEditorInterface *core() const
70 { return m_core; }
71
72 // Query extensions for additional data
73 static void addExtensionDataToDOM(QAbstractFormBuilder *afb,
74 QDesignerFormEditorInterface *core,
75 DomWidget *ui_widget, QWidget *widget);
76 static void applyExtensionDataFromDOM(QAbstractFormBuilder *afb,
77 QDesignerFormEditorInterface *core,
78 DomWidget *ui_widget, QWidget *widget);
79 // Return the script returned by the CustomWidget codeTemplate API
80 static QString customWidgetScript(QDesignerFormEditorInterface *core, QObject *object);
81 static QString customWidgetScript(QDesignerFormEditorInterface *core, const QString &className);
82 static bool hasCustomWidgetScript(QDesignerFormEditorInterface *core, QObject *object);
83
84 // Implementation for FormBuilder::createDomCustomWidgets() that adds
85 // the custom widgets to the widget database
86 static void handleDomCustomWidgets(const QDesignerFormEditorInterface *core,
87 const DomCustomWidgets *dom_custom_widgets);
88
89protected:
90 static bool addFakeMethods(const DomSlots *domSlots, QStringList &fakeSlots, QStringList &fakeSignals);
91
92private:
93 static void addCustomWidgetsToWidgetDatabase(const QDesignerFormEditorInterface *core,
94 QVector<DomCustomWidget *> &custom_widget_list);
95 static void addFakeMethodsToWidgetDataBase(const DomCustomWidget *domCustomWidget, WidgetDataBaseItem *item);
96
97 static bool m_warningsEnabled;
98 QDesignerFormEditorInterface *m_core;
99};
100
101// Contents of clipboard for formbuilder copy and paste operations
102// (Actions and widgets)
103struct QDESIGNER_SHARED_EXPORT FormBuilderClipboard {
104 using ActionList = QList<QAction *>;
105
106 FormBuilderClipboard() = default;
107 FormBuilderClipboard(QWidget *w);
108
109 bool empty() const;
110
111 QWidgetList m_widgets;
112 ActionList m_actions;
113};
114
115// Base class for a form builder used in the editor that
116// provides copy and paste.(move into base interface)
117class QDESIGNER_SHARED_EXPORT QEditorFormBuilder : public QSimpleResource
118{
119public:
120 explicit QEditorFormBuilder(QDesignerFormEditorInterface *core) : QSimpleResource(core) {}
121
122 virtual bool copy(QIODevice *dev, const FormBuilderClipboard &selection) = 0;
123 virtual DomUI *copy(const FormBuilderClipboard &selection) = 0;
124
125 // A widget parent needs to be specified, otherwise, the widget factory cannot locate the form window via parent
126 // and thus is not able to construct special widgets (QLayoutWidget).
127 virtual FormBuilderClipboard paste(DomUI *ui, QWidget *widgetParent, QObject *actionParent = nullptr) = 0;
128 virtual FormBuilderClipboard paste(QIODevice *dev, QWidget *widgetParent, QObject *actionParent = nullptr) = 0;
129};
130
131} // namespace qdesigner_internal
132
133QT_END_NAMESPACE
134
135#endif
136

source code of qttools/src/designer/src/lib/shared/qsimpleresource_p.h