Qt 6.x
The Qt SDK
Loading...
Searching...
No Matches
customwidgetsinfo.cpp
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#include "customwidgetsinfo.h"
5#include "driver.h"
6#include "ui4.h"
7#include "utils.h"
8
9#include <utility>
10
12
13using namespace Qt::StringLiterals;
14
16
18{
19 m_customWidgets.clear();
20
21 if (node->elementCustomWidgets())
23}
24
26{
28}
29
31{
32 if (node->elementClass().isEmpty())
33 return;
34
35 m_customWidgets.insert(node->elementClass(), node);
36}
37
38bool CustomWidgetsInfo::extends(const QString &classNameIn, QAnyStringView baseClassName) const
39{
40 if (classNameIn == baseClassName)
41 return true;
42
43 QString className = classNameIn;
44 while (const DomCustomWidget *c = customWidget(className)) {
45 const QString extends = c->elementExtends();
46 if (className == extends) // Faulty legacy custom widget entries exist.
47 return false;
48 if (extends == baseClassName)
49 return true;
51 }
52 return false;
53}
54
56 const QStringList &baseClassNames) const
57{
58 if (baseClassNames.contains(classNameIn))
59 return true;
60
61 QString className = classNameIn;
62 while (const DomCustomWidget *c = customWidget(className)) {
63 const QString extends = c->elementExtends();
64 if (className == extends) // Faulty legacy custom widget entries exist.
65 return false;
66 if (baseClassNames.contains(extends))
67 return true;
69 }
70 return false;
71}
72
74{
75 if (const DomCustomWidget *dcw = m_customWidgets.value(className, nullptr))
76 if (dcw->hasElementContainer())
77 return dcw->elementContainer() != 0;
78 return false;
79}
80
81// Is it ambiguous, resulting in different signals for Python
82// "QAbstractButton::clicked(checked=false)"
84 const QString &signalSignature) const
85{
86 if (signalSignature.startsWith(u"triggered") && extends(className, "QAction"))
87 return true;
88 if (signalSignature.startsWith(u"clicked(")
89 && extendsOneOf(className, {u"QCommandLinkButton"_s, u"QCheckBox"_s,
90 u"QPushButton"_s, u"QRadioButton"_s, u"QToolButton"_s})) {
91 return true;
92 }
93 return false;
94}
95
97{
98 if (className == "Line"_L1)
99 return u"QFrame"_s;
100
101 return className;
102}
103
105{
106 if (DomCustomWidget *dcw = m_customWidgets.value(name, nullptr))
107 return dcw->elementAddPageMethod();
108 return QString();
109}
110
111// add page methods for simple containers taking only the widget parameter
113{
114 using AddPageMethod = std::pair<QString, QString>;
115
116 static const AddPageMethod addPageMethods[] = {
117 {u"QStackedWidget"_s, u"addWidget"_s},
118 {u"QToolBar"_s, u"addWidget"_s},
119 {u"QDockWidget"_s, u"setWidget"_s},
120 {u"QScrollArea"_s, u"setWidget"_s},
121 {u"QSplitter"_s, u"addWidget"_s},
122 {u"QMdiArea"_s, u"addSubWindow"_s}
123 };
124 for (const auto &m : addPageMethods) {
125 if (extends(name, m.first))
126 return m.second;
127 }
128 return QString();
129}
130
bool isCustomWidgetContainer(const QString &className) const
void acceptUI(DomUI *node) override
bool isAmbiguousSignal(const QString &className, const QString &signalSignature) const
bool extendsOneOf(const QString &className, const QStringList &baseClassNames) const
QString realClassName(const QString &className) const
QString customWidgetAddPageMethod(const QString &name) const
bool extends(const QString &className, QAnyStringView baseClassName) const
QString simpleContainerAddPageMethod(const QString &name) const
void acceptCustomWidgets(DomCustomWidgets *node) override
void acceptCustomWidget(DomCustomWidget *node) override
DomCustomWidget * customWidget(const QString &name) const
QString elementClass() const
Definition ui4.h:664
Definition ui4.h:116
DomCustomWidgets * elementCustomWidgets() const
Definition ui4.h:205
\inmodule QtCore
iterator insert(const Key &key, const T &value)
Definition qmap.h:687
T value(const Key &key, const T &defaultValue=T()) const
Definition qmap.h:356
void clear()
Definition qmap.h:288
\inmodule QtCore
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:127
bool startsWith(const QString &s, Qt::CaseSensitivity cs=Qt::CaseSensitive) const
Returns true if the string starts with s; otherwise returns false.
Definition qstring.cpp:5299
bool isEmpty() const
Returns true if the string has no characters; otherwise returns false.
Definition qstring.h:1083
Combined button and popup list for selecting options.
const GLfloat * m
GLuint name
const GLubyte * c
const char className[16]
[1]
Definition qwizard.cpp:100
virtual void acceptCustomWidgets(DomCustomWidgets *customWidgets)