summaryrefslogtreecommitdiffstats
path: root/src/tools/uic/shared/writeincludesbase.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools/uic/shared/writeincludesbase.cpp')
-rw-r--r--src/tools/uic/shared/writeincludesbase.cpp135
1 files changed, 135 insertions, 0 deletions
diff --git a/src/tools/uic/shared/writeincludesbase.cpp b/src/tools/uic/shared/writeincludesbase.cpp
new file mode 100644
index 0000000000..78f69d5391
--- /dev/null
+++ b/src/tools/uic/shared/writeincludesbase.cpp
@@ -0,0 +1,135 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+#include "writeincludesbase.h"
+#include "ui4.h"
+#include <uic.h>
+#include <databaseinfo.h>
+
+QT_BEGIN_NAMESPACE
+
+static const ClassInfoEntry qclass_lib_map[] = {
+#define QT_CLASS_LIB(klass, module, header) { #klass, #module, #header },
+#include "qclass_lib_map.h"
+#undef QT_CLASS_LIB
+};
+
+ClassInfoEntries classInfoEntries()
+{
+ const ClassInfoEntry *classLibEnd = qclass_lib_map + sizeof(qclass_lib_map)/sizeof(ClassInfoEntry);
+ return {qclass_lib_map, classLibEnd};
+}
+
+// Base class for implementing a class that determines includes and equivalents
+// in other languages by implementing doAdd(). It makes sure all dependent
+// classes are known.
+WriteIncludesBase::WriteIncludesBase(Uic *uic) : m_uic(uic)
+{
+}
+
+void WriteIncludesBase::acceptUI(DomUI *node)
+{
+ m_knownClasses.clear();
+ m_laidOut = false;
+
+ if (node->elementIncludes())
+ acceptIncludes(node->elementIncludes());
+
+ // Populate known custom widgets first
+ if (node->elementCustomWidgets())
+ TreeWalker::acceptCustomWidgets(node->elementCustomWidgets());
+
+ add(QStringLiteral("QApplication"));
+ add(QStringLiteral("QVariant"));
+
+ if (node->elementButtonGroups())
+ add(QStringLiteral("QButtonGroup"));
+
+ TreeWalker::acceptUI(node);
+}
+
+void WriteIncludesBase::acceptWidget(DomWidget *node)
+{
+ add(node->attributeClass());
+ TreeWalker::acceptWidget(node);
+}
+
+void WriteIncludesBase::acceptLayout(DomLayout *node)
+{
+ add(node->attributeClass());
+ m_laidOut = true;
+ TreeWalker::acceptLayout(node);
+}
+
+void WriteIncludesBase::acceptSpacer(DomSpacer *node)
+{
+ add(QStringLiteral("QSpacerItem"));
+ TreeWalker::acceptSpacer(node);
+}
+
+void WriteIncludesBase::acceptProperty(DomProperty *node)
+{
+ if (node->kind() == DomProperty::Date)
+ add(QStringLiteral("QDate"));
+ if (node->kind() == DomProperty::Locale)
+ add(QStringLiteral("QLocale"));
+ if (node->kind() == DomProperty::IconSet)
+ add(QStringLiteral("QIcon"));
+ TreeWalker::acceptProperty(node);
+}
+
+void WriteIncludesBase::add(const QString &className, const DomCustomWidget *dcw)
+{
+ if (className.isEmpty() || m_knownClasses.contains(className))
+ return;
+
+ m_knownClasses.insert(className);
+
+ const CustomWidgetsInfo *cwi = m_uic->customWidgetsInfo();
+ static const QStringList treeViewsWithHeaders = {
+ QStringLiteral("QTreeView"), QStringLiteral("QTreeWidget"),
+ QStringLiteral("QTableView"), QStringLiteral("QTableWidget")
+ };
+ if (cwi->extendsOneOf(className, treeViewsWithHeaders))
+ add(QStringLiteral("QHeaderView"));
+
+ if (!m_laidOut && cwi->extends(className, "QToolBox"))
+ add(QStringLiteral("QLayout")); // spacing property of QToolBox)
+
+ if (className == QStringLiteral("Line")) { // ### hmm, deprecate me!
+ add(QStringLiteral("QFrame"));
+ return;
+ }
+
+ if (cwi->extends(className, "QDialogButtonBox"))
+ add(QStringLiteral("QAbstractButton")); // for signal "clicked(QAbstractButton*)"
+
+ doAdd(className, dcw);
+}
+
+void WriteIncludesBase::acceptCustomWidget(DomCustomWidget *node)
+{
+ const QString className = node->elementClass();
+ if (!className.isEmpty())
+ add(className, node);
+}
+
+void WriteIncludesBase::acceptActionGroup(DomActionGroup *node)
+{
+ add(QStringLiteral("QActionGroup"));
+ TreeWalker::acceptActionGroup(node);
+}
+
+void WriteIncludesBase::acceptAction(DomAction *node)
+{
+ add(QStringLiteral("QAction"));
+ TreeWalker::acceptAction(node);
+}
+
+void WriteIncludesBase::acceptActionRef(DomActionRef *node)
+{
+ add(QStringLiteral("QAction"));
+ TreeWalker::acceptActionRef(node);
+}
+
+QT_END_NAMESPACE