14using namespace Qt::StringLiterals;
20 m_customWidgets.clear();
22 if (node->elementCustomWidgets())
33 if (node->elementClass().isEmpty())
36 m_customWidgets.insert(node->elementClass(), node);
41 if (classNameIn == baseClassName)
44 QString className = classNameIn;
45 while (
const DomCustomWidget *c = customWidget(className)) {
46 const QString extends = c->elementExtends();
47 if (className == extends)
49 if (extends == baseClassName)
57 const QStringList &baseClassNames)
const
59 if (baseClassNames.contains(classNameIn))
62 QString className = classNameIn;
63 while (
const DomCustomWidget *c = customWidget(className)) {
64 const QString extends = c->elementExtends();
65 if (className == extends)
67 if (baseClassNames.contains(extends))
76 if (
const DomCustomWidget *dcw = m_customWidgets.value(className,
nullptr))
77 if (dcw->hasElementContainer())
78 return dcw->elementContainer() != 0;
84bool CustomWidgetsInfo::isAmbiguous(
const QString &className,
const QString &signature,
85 QMetaMethod::MethodType type)
const
87 using TypeMap = QHash<QString, QMetaMethod::MethodType>;
88 struct AmbiguousInClass {
89 QLatin1StringView className;
93 static const QList<AmbiguousInClass> ambiguousList = {
95 {
"QAction"_L1, {{
"triggered"_L1, QMetaMethod::Signal}}},
96 {
"QCommandLinkButton"_L1, {{
"triggered"_L1, QMetaMethod::Signal},
97 {
"clicked"_L1, QMetaMethod::Signal}}},
98 {
"QPushButton"_L1, {{
"triggered"_L1, QMetaMethod::Signal},
99 {
"clicked"_L1, QMetaMethod::Signal}}},
100 {
"QCheckBox"_L1, {{
"triggered"_L1, QMetaMethod::Signal},
101 {
"clicked"_L1, QMetaMethod::Signal}}},
102 {
"QRadioButton"_L1, {{
"triggered"_L1, QMetaMethod::Signal},
103 {
"clicked"_L1, QMetaMethod::Signal}}},
104 {
"QToolButton"_L1, {{
"triggered"_L1, QMetaMethod::Signal},
105 {
"clicked"_L1, QMetaMethod::Signal}}},
106 {
"QLabel"_L1, {{
"setNum"_L1, QMetaMethod::Slot}}},
107 {
"QGraphicsView"_L1, {{
"invalidateScene"_L1, QMetaMethod::Slot}}},
108 {
"QListView"_L1, {{
"dataChanged"_L1, QMetaMethod::Slot}}},
109 {
"QColumnView"_L1, {{
"dataChanged"_L1, QMetaMethod::Slot}}},
110 {
"QListWidget"_L1, {{
"dataChanged"_L1, QMetaMethod::Slot},
111 {
"scrollToItem"_L1, QMetaMethod::Slot}}},
112 {
"QTableView"_L1, {{
"dataChanged"_L1, QMetaMethod::Slot}}},
113 {
"QTableWidget"_L1, {{
"dataChanged"_L1, QMetaMethod::Slot},
114 {
"scrollToItem"_L1, QMetaMethod::Slot}}},
115 {
"QTreeView"_L1, {{
"dataChanged"_L1, QMetaMethod::Slot},
116 {
"verticalScrollbarValueChanged"_L1, QMetaMethod::Slot},
117 {
"expandRecursively"_L1, QMetaMethod::Slot}}},
118 {
"QTreeWidget"_L1, {{
"dataChanged"_L1, QMetaMethod::Slot},
119 {
"verticalScrollbarValueChanged"_L1, QMetaMethod::Slot}
120 ,{
"expandRecursively"_L1, QMetaMethod::Slot}
121 ,{
"scrollToItem"_L1, QMetaMethod::Slot}}},
122 {
"QUndoView"_L1, {{
"dataChanged"_L1, QMetaMethod::Slot}}},
123 {
"QLCDNumber"_L1, {{
"display"_L1, QMetaMethod::Slot}}},
124 {
"QMenuBar"_L1, {{
"setVisible"_L1, QMetaMethod::Slot}}},
125 {
"QTextBrowser"_L1, {{
"setSource"_L1, QMetaMethod::Slot}}},
128
129
130
131
132
133
134
135
136
137
138
139
142 for (
auto it = ambiguousList.constBegin(); it != ambiguousList.constEnd(); ++it) {
143 if (extends(className, it->className)) {
144 const qsizetype pos = signature.indexOf(u'(');
145 const QString method = signature.left(pos);
146 const auto methodIterator = it->methodMap.find(method);
147 return methodIterator != it->methodMap.constEnd() && type == methodIterator.value();
156 const QString &signalSignature)
const
158 return isAmbiguous(className, signalSignature, QMetaMethod::Signal);
162 const QString &signalSignature)
const
164 return isAmbiguous(className, signalSignature, QMetaMethod::Slot);
169 if (className ==
"Line"_L1)
177 if (DomCustomWidget *dcw = m_customWidgets.value(name,
nullptr))
178 return dcw->elementAddPageMethod();
185 using AddPageMethod =
std::pair<QString, QString>;
187 static const AddPageMethod addPageMethods[] = {
188 {u"QStackedWidget"_s, u"addWidget"_s},
189 {u"QToolBar"_s, u"addWidget"_s},
190 {u"QDockWidget"_s, u"setWidget"_s},
191 {u"QScrollArea"_s, u"setWidget"_s},
192 {u"QSplitter"_s, u"addWidget"_s},
193 {u"QMdiArea"_s, u"addSubWindow"_s}
195 for (
const auto &m : addPageMethods) {
196 if (extends(name, m.first))
Combined button and popup list for selecting options.
virtual void acceptCustomWidgets(DomCustomWidgets *customWidgets)