13using namespace Qt::StringLiterals;
19 m_customWidgets.clear();
21 if (node->elementCustomWidgets())
32 if (node->elementClass().isEmpty())
35 m_customWidgets.insert(node->elementClass(), node);
40 if (classNameIn == baseClassName)
43 QString className = classNameIn;
44 while (
const DomCustomWidget *c = customWidget(className)) {
45 const QString extends = c->elementExtends();
46 if (className == extends)
48 if (extends == baseClassName)
56 const QStringList &baseClassNames)
const
58 if (baseClassNames.contains(classNameIn))
61 QString className = classNameIn;
62 while (
const DomCustomWidget *c = customWidget(className)) {
63 const QString extends = c->elementExtends();
64 if (className == extends)
66 if (baseClassNames.contains(extends))
75 if (
const DomCustomWidget *dcw = m_customWidgets.value(className,
nullptr))
76 if (dcw->hasElementContainer())
77 return dcw->elementContainer() != 0;
83bool CustomWidgetsInfo::isAmbiguous(
const QString &className,
const QString &signature,
84 QMetaMethod::MethodType type)
const
86 using TypeMap = QHash<QString, QMetaMethod::MethodType>;
87 struct AmbiguousInClass {
88 QLatin1StringView className;
92 static const QList<AmbiguousInClass> ambiguousList = {
94 {
"QAction"_L1, {{
"triggered"_L1, QMetaMethod::Signal}}},
95 {
"QCommandLinkButton"_L1, {{
"triggered"_L1, QMetaMethod::Signal},
96 {
"clicked"_L1, QMetaMethod::Signal}}},
97 {
"QPushButton"_L1, {{
"triggered"_L1, QMetaMethod::Signal},
98 {
"clicked"_L1, QMetaMethod::Signal}}},
99 {
"QCheckBox"_L1, {{
"triggered"_L1, QMetaMethod::Signal},
100 {
"clicked"_L1, QMetaMethod::Signal}}},
101 {
"QRadioButton"_L1, {{
"triggered"_L1, QMetaMethod::Signal},
102 {
"clicked"_L1, QMetaMethod::Signal}}},
103 {
"QToolButton"_L1, {{
"triggered"_L1, QMetaMethod::Signal},
104 {
"clicked"_L1, QMetaMethod::Signal}}},
105 {
"QLabel"_L1, {{
"setNum"_L1, QMetaMethod::Slot}}},
106 {
"QGraphicsView"_L1, {{
"invalidateScene"_L1, QMetaMethod::Slot}}},
107 {
"QListView"_L1, {{
"dataChanged"_L1, QMetaMethod::Slot}}},
108 {
"QColumnView"_L1, {{
"dataChanged"_L1, QMetaMethod::Slot}}},
109 {
"QListWidget"_L1, {{
"dataChanged"_L1, QMetaMethod::Slot},
110 {
"scrollToItem"_L1, QMetaMethod::Slot}}},
111 {
"QTableView"_L1, {{
"dataChanged"_L1, QMetaMethod::Slot}}},
112 {
"QTableWidget"_L1, {{
"dataChanged"_L1, QMetaMethod::Slot},
113 {
"scrollToItem"_L1, QMetaMethod::Slot}}},
114 {
"QTreeView"_L1, {{
"dataChanged"_L1, QMetaMethod::Slot},
115 {
"verticalScrollbarValueChanged"_L1, QMetaMethod::Slot},
116 {
"expandRecursively"_L1, QMetaMethod::Slot}}},
117 {
"QTreeWidget"_L1, {{
"dataChanged"_L1, QMetaMethod::Slot},
118 {
"verticalScrollbarValueChanged"_L1, QMetaMethod::Slot}
119 ,{
"expandRecursively"_L1, QMetaMethod::Slot}
120 ,{
"scrollToItem"_L1, QMetaMethod::Slot}}},
121 {
"QUndoView"_L1, {{
"dataChanged"_L1, QMetaMethod::Slot}}},
122 {
"QLCDNumber"_L1, {{
"display"_L1, QMetaMethod::Slot}}},
123 {
"QMenuBar"_L1, {{
"setVisible"_L1, QMetaMethod::Slot}}},
124 {
"QTextBrowser"_L1, {{
"setSource"_L1, QMetaMethod::Slot}}},
127
128
129
130
131
132
133
134
135
136
137
138
141 for (
auto it = ambiguousList.constBegin(); it != ambiguousList.constEnd(); ++it) {
142 if (extends(className, it->className)) {
143 const qsizetype pos = signature.indexOf(u'(');
144 const QString method = signature.left(pos);
145 const auto methodIterator = it->methodMap.find(method);
146 return methodIterator != it->methodMap.constEnd() && type == methodIterator.value();
155 const QString &signalSignature)
const
157 return isAmbiguous(className, signalSignature, QMetaMethod::Signal);
161 const QString &signalSignature)
const
163 return isAmbiguous(className, signalSignature, QMetaMethod::Slot);
168 if (className ==
"Line"_L1)
176 if (DomCustomWidget *dcw = m_customWidgets.value(name,
nullptr))
177 return dcw->elementAddPageMethod();
184 using AddPageMethod =
std::pair<QString, QString>;
186 static const AddPageMethod addPageMethods[] = {
187 {u"QStackedWidget"_s, u"addWidget"_s},
188 {u"QToolBar"_s, u"addWidget"_s},
189 {u"QDockWidget"_s, u"setWidget"_s},
190 {u"QScrollArea"_s, u"setWidget"_s},
191 {u"QSplitter"_s, u"addWidget"_s},
192 {u"QMdiArea"_s, u"addSubWindow"_s}
194 for (
const auto &m : addPageMethods) {
195 if (extends(name, m.first))
virtual void acceptCustomWidgets(DomCustomWidgets *customWidgets)