aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKnud Dollereder <knud.dollereder@qt.io>2024-04-17 16:53:43 +0200
committerKnud Dollereder <knud.dollereder@qt.io>2024-04-19 10:22:42 +0000
commit487eda9019631e7c7292dc72be7985130f7de0ae (patch)
treef1c167af0bcbb705f0b1a1820a12711b81a05923 /src
parent2cd9efee63bfa79a26604b4f496534f495732c8c (diff)
QmlProjectManager: Remove old cmake generator
and suppress warnings about .hints files not being part of the project Fixes: QDS-12507 Fixes: QDS-12508 Change-Id: If3c2f5ce716b8744dd4fee91ec7bba5293163a97 Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/plugins/qmlprojectmanager/CMakeLists.txt7
-rw-r--r--src/plugins/qmlprojectmanager/cmakegen/boilerplate.qrc11
-rw-r--r--src/plugins/qmlprojectmanager/cmakegen/checkablefiletreeitem.cpp45
-rw-r--r--src/plugins/qmlprojectmanager/cmakegen/checkablefiletreeitem.h31
-rw-r--r--src/plugins/qmlprojectmanager/cmakegen/cmakegenerator.cpp8
-rw-r--r--src/plugins/qmlprojectmanager/cmakegen/cmakegenerator.h1
-rw-r--r--src/plugins/qmlprojectmanager/cmakegen/cmakegeneratordialog.cpp168
-rw-r--r--src/plugins/qmlprojectmanager/cmakegen/cmakegeneratordialog.h51
-rw-r--r--src/plugins/qmlprojectmanager/cmakegen/cmakegeneratordialogtreemodel.cpp174
-rw-r--r--src/plugins/qmlprojectmanager/cmakegen/cmakegeneratordialogtreemodel.h51
-rw-r--r--src/plugins/qmlprojectmanager/cmakegen/cmakeprojectconverter.cpp422
-rw-r--r--src/plugins/qmlprojectmanager/cmakegen/cmakeprojectconverter.h77
-rw-r--r--src/plugins/qmlprojectmanager/cmakegen/cmakeprojectconverterdialog.cpp180
-rw-r--r--src/plugins/qmlprojectmanager/cmakegen/cmakeprojectconverterdialog.h47
-rw-r--r--src/plugins/qmlprojectmanager/cmakegen/cmakewriter.cpp25
-rw-r--r--src/plugins/qmlprojectmanager/cmakegen/cmakewriter.h5
-rw-r--r--src/plugins/qmlprojectmanager/cmakegen/cmakewriterv0.cpp3
-rw-r--r--src/plugins/qmlprojectmanager/cmakegen/cmakewriterv1.cpp3
-rw-r--r--src/plugins/qmlprojectmanager/cmakegen/generatecmakelists.cpp668
-rw-r--r--src/plugins/qmlprojectmanager/cmakegen/generatecmakelists.h80
-rw-r--r--src/plugins/qmlprojectmanager/cmakegen/generatecmakelistsconstants.h42
-rw-r--r--src/plugins/qmlprojectmanager/cmakegen/qmlprojectappmainqml.tpl14
-rw-r--r--src/plugins/qmlprojectmanager/cmakegen/qmlprojectenvheader.tpl11
-rw-r--r--src/plugins/qmlprojectmanager/cmakegen/qmlprojectmaincmakelists.tpl52
-rw-r--r--src/plugins/qmlprojectmanager/cmakegen/qmlprojectmaincpp.tpl35
-rw-r--r--src/plugins/qmlprojectmanager/cmakegen/qmlprojectmaincppheader.tpl8
-rw-r--r--src/plugins/qmlprojectmanager/cmakegen/qmlprojectmainqml.tpl6
-rw-r--r--src/plugins/qmlprojectmanager/cmakegen/qmlprojectmodulecmakelists.tpl12
-rw-r--r--src/plugins/qmlprojectmanager/cmakegen/qmlprojectmodules.tpl16
-rw-r--r--src/plugins/qmlprojectmanager/qmlprojectgen/qmlprojectgenerator.cpp4
-rw-r--r--src/plugins/qmlprojectmanager/qmlprojectmanager.qbs7
-rw-r--r--src/plugins/qmlprojectmanager/qmlprojectplugin.cpp7
32 files changed, 29 insertions, 2242 deletions
diff --git a/src/plugins/qmlprojectmanager/CMakeLists.txt b/src/plugins/qmlprojectmanager/CMakeLists.txt
index b3eb298f3b..77f3932609 100644
--- a/src/plugins/qmlprojectmanager/CMakeLists.txt
+++ b/src/plugins/qmlprojectmanager/CMakeLists.txt
@@ -42,13 +42,6 @@ extend_qtc_plugin(QmlProjectManager
PUBLIC_INCLUDES ${CMAKE_CURRENT_LIST_DIR}/cmakegen
SOURCES_PREFIX ${CMAKE_CURRENT_LIST_DIR}/cmakegen
SOURCES
- checkablefiletreeitem.cpp checkablefiletreeitem.h
- cmakegeneratordialog.cpp cmakegeneratordialog.h
- cmakegeneratordialogtreemodel.cpp cmakegeneratordialogtreemodel.h
- cmakeprojectconverter.cpp cmakeprojectconverter.h
- cmakeprojectconverterdialog.cpp cmakeprojectconverterdialog.h
- generatecmakelists.cpp generatecmakelists.h
- generatecmakelistsconstants.h
cmakegenerator.cpp cmakegenerator.h
cmakewriter.cpp cmakewriter.h
cmakewriterv0.cpp cmakewriterv0.h
diff --git a/src/plugins/qmlprojectmanager/cmakegen/boilerplate.qrc b/src/plugins/qmlprojectmanager/cmakegen/boilerplate.qrc
index b4eb027e83..4960324ab7 100644
--- a/src/plugins/qmlprojectmanager/cmakegen/boilerplate.qrc
+++ b/src/plugins/qmlprojectmanager/cmakegen/boilerplate.qrc
@@ -12,15 +12,4 @@
<file alias="qtquickcontrols_conf">templates/qtquickcontrols2_conf.tpl</file>
<file alias="cmake_shared">templates/cmakelists_txt_shared.tpl</file>
</qresource>
-
- <qresource prefix="/boilerplatetemplates">
- <file>qmlprojectmaincpp.tpl</file>
- <file>qmlprojectmaincppheader.tpl</file>
- <file>qmlprojectenvheader.tpl</file>
- <file>qmlprojectmodules.tpl</file>
- <file>qmlprojectmaincmakelists.tpl</file>
- <file>qmlprojectmodulecmakelists.tpl</file>
- <file>qmlprojectmainqml.tpl</file>
- <file>qmlprojectappmainqml.tpl</file>
- </qresource>
</RCC>
diff --git a/src/plugins/qmlprojectmanager/cmakegen/checkablefiletreeitem.cpp b/src/plugins/qmlprojectmanager/cmakegen/checkablefiletreeitem.cpp
deleted file mode 100644
index 9eb45d9150..0000000000
--- a/src/plugins/qmlprojectmanager/cmakegen/checkablefiletreeitem.cpp
+++ /dev/null
@@ -1,45 +0,0 @@
-// 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 "checkablefiletreeitem.h"
-
-using namespace Utils;
-
-namespace QmlProjectManager {
-
-CheckableFileTreeItem::CheckableFileTreeItem(const FilePath &filePath)
- :QStandardItem(filePath.toString())
-{
- Qt::ItemFlags itemFlags = flags();
- if (!isDir())
- itemFlags |= Qt::ItemIsUserCheckable;
- itemFlags &= ~(Qt::ItemIsEditable | Qt::ItemIsSelectable);
- setFlags(itemFlags);
-}
-
-const FilePath CheckableFileTreeItem::toFilePath() const
-{
- return FilePath::fromString(text());
-}
-
-bool CheckableFileTreeItem::isFile() const
-{
- return FilePath::fromString(text()).isFile();
-}
-
-bool CheckableFileTreeItem::isDir() const
-{
- return FilePath::fromString(text()).isDir();
-}
-
-void CheckableFileTreeItem::setChecked(bool checked)
-{
- this->checked = checked;
-}
-
-bool CheckableFileTreeItem::isChecked() const
-{
- return this->checked;
-}
-
-} //QmlProjectManager
diff --git a/src/plugins/qmlprojectmanager/cmakegen/checkablefiletreeitem.h b/src/plugins/qmlprojectmanager/cmakegen/checkablefiletreeitem.h
deleted file mode 100644
index c3c5145301..0000000000
--- a/src/plugins/qmlprojectmanager/cmakegen/checkablefiletreeitem.h
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
-
-#ifndef CHECKABLEFILETREEITEM_H
-#define CHECKABLEFILETREEITEM_H
-
-#include <utils/fileutils.h>
-
-#include <QStandardItem>
-
-namespace QmlProjectManager {
-
-class CheckableFileTreeItem : public QStandardItem
-{
-public:
- explicit CheckableFileTreeItem(const Utils::FilePath &text = Utils::FilePath());
-
- const Utils::FilePath toFilePath() const;
- bool isFile() const;
- bool isDir() const;
-
- bool isChecked() const;
- void setChecked(bool checked);
-
-private:
- bool checked;
-};
-
-} //QmlProjectManager
-
-#endif // CHECKABLEFILETREEITEM_H
diff --git a/src/plugins/qmlprojectmanager/cmakegen/cmakegenerator.cpp b/src/plugins/qmlprojectmanager/cmakegen/cmakegenerator.cpp
index 6a3f4afda0..8e77cde4f7 100644
--- a/src/plugins/qmlprojectmanager/cmakegen/cmakegenerator.cpp
+++ b/src/plugins/qmlprojectmanager/cmakegen/cmakegenerator.cpp
@@ -208,6 +208,12 @@ bool CMakeGenerator::isResource(const Utils::FilePath &path) const
return suffixes.contains(path.suffix(), Qt::CaseInsensitive);
}
+bool CMakeGenerator::ignoreFile(const Utils::FilePath &path) const
+{
+ static const QStringList suffixes = { "hints" };
+ return suffixes.contains(path.suffix(), Qt::CaseInsensitive);
+}
+
void CMakeGenerator::createCMakeFiles(const NodePtr &node) const
{
QTC_ASSERT(m_writer, return);
@@ -481,7 +487,7 @@ void CMakeGenerator::compareWithFileSystem(const NodePtr &node) const
while (iter.hasNext()) {
auto next = Utils::FilePath::fromString(iter.next());
- if (isResource(next) && !findFile(next))
+ if (isResource(next) && !findFile(next) && !ignoreFile(next))
files.push_back(next);
}
diff --git a/src/plugins/qmlprojectmanager/cmakegen/cmakegenerator.h b/src/plugins/qmlprojectmanager/cmakegen/cmakegenerator.h
index fd7b7dfd5b..6077166d5b 100644
--- a/src/plugins/qmlprojectmanager/cmakegen/cmakegenerator.h
+++ b/src/plugins/qmlprojectmanager/cmakegen/cmakegenerator.h
@@ -47,6 +47,7 @@ public:
private:
bool isQml(const Utils::FilePath &path) const;
bool isResource(const Utils::FilePath &path) const;
+ bool ignoreFile(const Utils::FilePath &path) const;
void createCMakeFiles(const NodePtr &node) const;
void createSourceFiles() const;
diff --git a/src/plugins/qmlprojectmanager/cmakegen/cmakegeneratordialog.cpp b/src/plugins/qmlprojectmanager/cmakegen/cmakegeneratordialog.cpp
deleted file mode 100644
index aa733b68af..0000000000
--- a/src/plugins/qmlprojectmanager/cmakegen/cmakegeneratordialog.cpp
+++ /dev/null
@@ -1,168 +0,0 @@
-// 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 "cmakegeneratordialog.h"
-#include "../qmlprojectmanagertr.h"
-#include "cmakegeneratordialogtreemodel.h"
-
-#include <utils/utilsicons.h>
-#include <utils/detailswidget.h>
-
-#include <QDialogButtonBox>
-#include <QPushButton>
-#include <QLayout>
-#include <QLabel>
-
-#include <QSplitter>
-
-using namespace Utils;
-
-namespace QmlProjectManager {
-namespace GenerateCmake {
-
-CmakeGeneratorDialog::CmakeGeneratorDialog(const FilePath &rootDir,
- const FilePaths &files,
- const FilePaths invalidFiles)
- : QDialog(), m_rootDir(rootDir), m_files(files), m_invalidFiles(invalidFiles)
-{
- setWindowTitle(Tr::tr("Select Files to Generate"));
-
- QLabel *mainLabel = new QLabel(Tr::tr("Start CMakeFiles.txt generation"), this);
- mainLabel->setMargin(30);
-
- QVBoxLayout *dialogLayout = new QVBoxLayout(this);
- dialogLayout->addWidget(mainLabel);
- dialogLayout->addWidget(createDetailsWidget());
- dialogLayout->addWidget(createButtons());
- setLayout(dialogLayout);
-
- setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
- setMaximumHeight(layout()->totalSizeHint().height());
-
- refreshNotificationText();
-}
-
-QTreeView* CmakeGeneratorDialog::createFileTree()
-{
- m_model = new CMakeGeneratorDialogTreeModel(m_rootDir, m_files, this);
-
- QTreeView *tree = new QTreeView(this);
- tree->setModel(m_model);
- tree->expandAll();
- tree->setHeaderHidden(true);
-
- return tree;
-}
-
-QWidget* CmakeGeneratorDialog::createDetailsWidget()
-{
- QTreeView* tree = createFileTree();
-
- m_notifications = new QTextEdit(this);
- m_warningIcon = Utils::Icons::WARNING.pixmap();
-
- QSplitter *advancedInnerWidget = new QSplitter(this);
- advancedInnerWidget->addWidget(tree);
- advancedInnerWidget->addWidget(m_notifications);
- advancedInnerWidget->setStretchFactor(0, 2);
- advancedInnerWidget->setStretchFactor(1, 1);
- advancedInnerWidget->setOrientation(Qt::Vertical);
- advancedInnerWidget->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::MinimumExpanding);
-
- DetailsWidget *advancedWidget = new DetailsWidget(this);
- advancedWidget->setMinimumWidth(600);
- advancedWidget->setWidget(advancedInnerWidget);
- advancedWidget->setSummaryText(Tr::tr("Advanced Options"));
- connect(advancedWidget, &DetailsWidget::expanded, this, &CmakeGeneratorDialog::advancedVisibilityChanged);
-
- return advancedWidget;
-}
-
-QWidget* CmakeGeneratorDialog::createButtons()
-{
- QDialogButtonBox *buttons = new QDialogButtonBox(QDialogButtonBox::Ok|QDialogButtonBox::Cancel);
- auto *okButton = buttons->button(QDialogButtonBox::Ok);
- okButton->setDefault(true);
-
- connect(buttons, &QDialogButtonBox::accepted, this, &QDialog::accept);
- connect(buttons, &QDialogButtonBox::rejected, this, &QDialog::reject);
- connect(m_model, &CMakeGeneratorDialogTreeModel::checkedStateChanged, this, &CmakeGeneratorDialog::refreshNotificationText);
-
- return buttons;
-}
-
-FilePaths CmakeGeneratorDialog::getFilePaths()
-{
- FilePaths paths;
-
- QList<CheckableFileTreeItem*> items = m_model->checkedItems();
- for (CheckableFileTreeItem *item: items) {
- paths.append(FilePath::fromString(item->text()));
- }
-
- return paths;
-}
-
-const QString FILE_CREATE_NOTIFICATION = Tr::tr("File %1 will be created.\n");
-const QString FILE_OVERWRITE_NOTIFICATION = Tr::tr("File %1 will be overwritten.\n");
-const QString FILE_INVALID_NOTIFICATION = Tr::tr(
- "File %1 contains invalid characters and will be skipped.\n");
-
-void CmakeGeneratorDialog::refreshNotificationText()
-{
- QTextDocument *document = m_notifications->document();
- document->clear();
- document->addResource(QTextDocument::ImageResource, QUrl("cmakegendialog://warningicon"), m_warningIcon);
-
- QTextCursor cursor = m_notifications->textCursor();
- QTextImageFormat iformat;
- iformat.setName("cmakegendialog://warningicon");
-
- QList<CheckableFileTreeItem*> nodes = m_model->items();
-
- for (const auto &file : m_invalidFiles) {
- cursor.insertImage(iformat);
- cursor.insertText(QString(FILE_INVALID_NOTIFICATION).arg(file.displayName()));
- }
-
- for (CheckableFileTreeItem *node : nodes) {
- if (!m_files.contains(node->toFilePath()))
- continue;
-
- if (!node->toFilePath().exists() && node->isChecked()) {
- QString relativePath = QString(node->toFilePath().toString()).remove(m_rootDir.toString()+'/');
- cursor.insertText(QString(FILE_CREATE_NOTIFICATION).arg(relativePath));
- }
- }
-
- if (!document->toPlainText().isEmpty())
- cursor.insertBlock();
-
- for (CheckableFileTreeItem *node : nodes) {
- if (!m_files.contains(node->toFilePath()))
- continue;
-
- if (node->toFilePath().exists() && node->isChecked()) {
- QString relativePath = node->toFilePath().relativePathFrom(m_rootDir).toString();
- cursor.insertImage(iformat);
- cursor.insertText(QString(FILE_OVERWRITE_NOTIFICATION).arg(relativePath));
- }
- }
-}
-
-void CmakeGeneratorDialog::advancedVisibilityChanged(bool visible)
-{
- if (visible) {
- setMaximumHeight(QWIDGETSIZE_MAX);
- setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
- }
- else {
- setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
- int height = layout()->totalSizeHint().height();
- setMaximumHeight(height);
- resize(width(), height);
- }
-}
-
-} //GenerateCmake
-} //QmlProjectManager
diff --git a/src/plugins/qmlprojectmanager/cmakegen/cmakegeneratordialog.h b/src/plugins/qmlprojectmanager/cmakegen/cmakegeneratordialog.h
deleted file mode 100644
index fb15ec4de7..0000000000
--- a/src/plugins/qmlprojectmanager/cmakegen/cmakegeneratordialog.h
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
-
-
-#ifndef CMAKEGENERATORDIALOG_H
-#define CMAKEGENERATORDIALOG_H
-
-#include "cmakegeneratordialogtreemodel.h"
-
-#include <utils/fileutils.h>
-
-#include <QDialog>
-#include <QTextEdit>
-#include <QTreeView>
-#include <QLabel>
-
-namespace QmlProjectManager {
-namespace GenerateCmake {
-
-class CmakeGeneratorDialog : public QDialog
-{
- Q_OBJECT
-
-public:
- CmakeGeneratorDialog(const Utils::FilePath &rootDir,
- const Utils::FilePaths &files,
- const Utils::FilePaths invalidFiles);
- Utils::FilePaths getFilePaths();
-
-public slots:
- void refreshNotificationText();
- void advancedVisibilityChanged(bool visible);
-
-private:
- QTreeView* createFileTree();
- QWidget* createDetailsWidget();
- QWidget* createButtons();
-
-private:
- CMakeGeneratorDialogTreeModel *m_model;
- QTextEdit *m_notifications;
- QVariant m_warningIcon;
- Utils::FilePath m_rootDir;
- Utils::FilePaths m_files;
- Utils::FilePaths m_invalidFiles;
-};
-
-} //GenerateCmake
-} //QmlProjectManager
-
-#endif // CMAKEGENERATORDIALOG_H
diff --git a/src/plugins/qmlprojectmanager/cmakegen/cmakegeneratordialogtreemodel.cpp b/src/plugins/qmlprojectmanager/cmakegen/cmakegeneratordialogtreemodel.cpp
deleted file mode 100644
index 525230bdfd..0000000000
--- a/src/plugins/qmlprojectmanager/cmakegen/cmakegeneratordialogtreemodel.cpp
+++ /dev/null
@@ -1,174 +0,0 @@
-// 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 "cmakegeneratordialogtreemodel.h"
-#include "generatecmakelistsconstants.h"
-#include "checkablefiletreeitem.h"
-#include "../qmlprojectmanagertr.h"
-
-#include <utils/utilsicons.h>
-
-using namespace Utils;
-
-namespace QmlProjectManager {
-namespace GenerateCmake {
-
-CMakeGeneratorDialogTreeModel::CMakeGeneratorDialogTreeModel(const FilePath &rootDir,
- const FilePaths &files, QObject *parent)
- :QStandardItemModel(parent),
- rootDir(rootDir),
- m_icons(new QFileIconProvider())
-{
- createNodes(files, invisibleRootItem());
-}
-
-CMakeGeneratorDialogTreeModel::~CMakeGeneratorDialogTreeModel()
-{
- delete m_icons;
-}
-
-QVariant CMakeGeneratorDialogTreeModel::data(const QModelIndex &index, int role) const
-{
- if (index.isValid()) {
- const CheckableFileTreeItem *node = constNodeForIndex(index);
- if (role == Qt::CheckStateRole) {
- if (!node->isDir())
- return node->isChecked() ? Qt::Checked : Qt::Unchecked;
- return {};
- }
- else if (role == Qt::DisplayRole) {
- FilePath fullPath = node->toFilePath();
- return QVariant(fullPath.fileName());
- }
- else if (role == Qt::DecorationRole) {
- if (node->isFile())
- return Utils::Icons::WARNING.icon();
- if (node->isDir())
- return m_icons->icon(QFileIconProvider::Folder);
- else
- return Utils::Icons::NEWFILE.icon();
- }
- else if (role == Qt::ToolTipRole) {
- if (node->isFile())
- return Tr::tr("This file already exists and will be overwritten.");
- if (!node->toFilePath().exists())
- return Tr::tr("This file or folder will be created.");
- }
- }
-
- return QStandardItemModel::data(index, role);
-}
-
-bool CMakeGeneratorDialogTreeModel::setData(const QModelIndex &index, const QVariant &value, int role)
-{
- if (index.isValid()) {
- CheckableFileTreeItem *node = nodeForIndex(index);
- if (role == Qt::CheckStateRole) {
- node->setChecked(value.value<bool>());
- emit checkedStateChanged(node);
- return true;
- }
- }
-
- return QStandardItemModel::setData(index, value, role);;
-}
-
-const QList<CheckableFileTreeItem*> CMakeGeneratorDialogTreeModel::items() const
-{
- QList<QStandardItem*> standardItems = findItems(".*", Qt::MatchRegularExpression | Qt::MatchRecursive);
- QList<CheckableFileTreeItem*> checkableItems;
- for (QStandardItem *item : standardItems)
- checkableItems.append(static_cast<CheckableFileTreeItem*>(item));
-
- return checkableItems;
-}
-
-const QList<CheckableFileTreeItem*> CMakeGeneratorDialogTreeModel::checkedItems() const
-{
- QList<CheckableFileTreeItem*> allItems = items();
-
- QList<CheckableFileTreeItem*> checkedItems;
- for (CheckableFileTreeItem *item : allItems) {
- if (item->isChecked())
- checkedItems.append(item);
- }
-
- return checkedItems;
-}
-
-bool CMakeGeneratorDialogTreeModel::checkedByDefault(const Utils::FilePath &file) const
-{
- if (file.exists()) {
- QString relativePath = file.relativeChildPath(rootDir).toString();
- if (relativePath.compare(QmlProjectManager::GenerateCmake::Constants::FILENAME_CMAKELISTS) == 0)
- return false;
- if (relativePath.endsWith(QmlProjectManager::GenerateCmake::Constants::FILENAME_CMAKELISTS)
- && relativePath.length() > QString(QmlProjectManager::GenerateCmake::Constants::FILENAME_CMAKELISTS).length())
- return true;
- if (relativePath.compare(QmlProjectManager::GenerateCmake::Constants::FILENAME_MODULES) == 0)
- return true;
- if (relativePath.compare(
- FilePath::fromString(QmlProjectManager::GenerateCmake::Constants::DIRNAME_CPP)
- .pathAppended(QmlProjectManager::GenerateCmake::Constants::FILENAME_MAINCPP_HEADER)
- .toString())
- == 0)
- return true;
- }
-
- return !file.exists();
-}
-
-void CMakeGeneratorDialogTreeModel::createNodes(const FilePaths &candidates, QStandardItem *parent)
-{
- if (!parent)
- return;
-
- CheckableFileTreeItem *checkParent = dynamic_cast<CheckableFileTreeItem*>(parent);
- FilePath thisDir = (parent == invisibleRootItem()) ? rootDir : checkParent->toFilePath();
-
- for (const FilePath &file : candidates) {
- if (file.parentDir() == thisDir) {
- CheckableFileTreeItem *fileNode = new CheckableFileTreeItem(file);
- fileNode->setChecked(checkedByDefault(file));
- if (!file.exists())
- fileNode->setChecked(true);
- parent->appendRow(fileNode);
- }
- }
-
- FilePaths directSubDirs;
- for (const FilePath &file : candidates) {
- FilePath dir = file.parentDir();
- if (dir.parentDir() == thisDir && !directSubDirs.contains(dir))
- directSubDirs.append(dir);
- }
-
- for (const FilePath &subDir : directSubDirs) {
- CheckableFileTreeItem *dirNode = new CheckableFileTreeItem(subDir);
- parent->appendRow(dirNode);
-
- FilePaths subDirCandidates;
- for (const FilePath &file : candidates)
- if (file.isChildOf(subDir))
- subDirCandidates.append(file);
-
- createNodes(subDirCandidates, dirNode);
- }
-}
-
-const CheckableFileTreeItem* CMakeGeneratorDialogTreeModel::constNodeForIndex(const QModelIndex &index) const
-{
- const QStandardItem *parent = static_cast<const QStandardItem*>(index.internalPointer());
- const QStandardItem *item = parent->child(index.row(), index.column());
- return static_cast<const CheckableFileTreeItem*>(item);
-}
-
-CheckableFileTreeItem* CMakeGeneratorDialogTreeModel::nodeForIndex(const QModelIndex &index)
-{
- QStandardItem *parent = static_cast<QStandardItem*>(index.internalPointer());
- QStandardItem *item = parent->child(index.row(), index.column());
- return static_cast<CheckableFileTreeItem*>(item);
-}
-
-} //GenerateCmake
-} //QmlProjectManager
diff --git a/src/plugins/qmlprojectmanager/cmakegen/cmakegeneratordialogtreemodel.h b/src/plugins/qmlprojectmanager/cmakegen/cmakegeneratordialogtreemodel.h
deleted file mode 100644
index 3fb79c2b96..0000000000
--- a/src/plugins/qmlprojectmanager/cmakegen/cmakegeneratordialogtreemodel.h
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
-
-#ifndef CMAKEGENERATORDIALOGTREEMODEL_H
-#define CMAKEGENERATORDIALOGTREEMODEL_H
-
-#include "checkablefiletreeitem.h"
-
-#include <QFileIconProvider>
-#include <QStandardItemModel>
-
-#include <utils/fileutils.h>
-
-namespace QmlProjectManager {
-namespace GenerateCmake {
-
-class CMakeGeneratorDialogTreeModel : public QStandardItemModel
-{
- Q_OBJECT
-
-public:
- CMakeGeneratorDialogTreeModel(const Utils::FilePath &rootDir,
- const Utils::FilePaths &files, QObject *parent = nullptr);
- ~CMakeGeneratorDialogTreeModel();
-
- QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
- bool setData(const QModelIndex &index, const QVariant &value, int role);
-
- const QList<CheckableFileTreeItem*> items() const;
- const QList<CheckableFileTreeItem*> checkedItems() const;
- const CheckableFileTreeItem* constNodeForIndex(const QModelIndex &index) const;
- CheckableFileTreeItem* nodeForIndex(const QModelIndex &index);
-
-signals:
- void checkedStateChanged(CheckableFileTreeItem *item);
-
-protected:
- bool checkedByDefault(const Utils::FilePath &file) const;
- Utils::FilePath rootDir;
-
-private:
- void createNodes(const Utils::FilePaths &candidates, QStandardItem *parent);
-
- QFileIconProvider* m_icons;
-};
-
-} //GenerateCmake
-} //QmlProjectManager
-
-
-#endif // CMAKEGENERATORDIALOGTREEMODEL_H
diff --git a/src/plugins/qmlprojectmanager/cmakegen/cmakeprojectconverter.cpp b/src/plugins/qmlprojectmanager/cmakegen/cmakeprojectconverter.cpp
deleted file mode 100644
index f6bf1a4975..0000000000
--- a/src/plugins/qmlprojectmanager/cmakegen/cmakeprojectconverter.cpp
+++ /dev/null
@@ -1,422 +0,0 @@
-// Copyright (C) 2022 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
-
-#include "cmakeprojectconverter.h"
-#include "cmakeprojectconverterdialog.h"
-#include "generatecmakelists.h"
-#include "generatecmakelistsconstants.h"
-#include "../qmlprojectmanagertr.h"
-
-#include <coreplugin/actionmanager/actionmanager.h>
-#include <coreplugin/actionmanager/actioncontainer.h>
-#include <coreplugin/icore.h>
-
-#include <projectexplorer/projectexplorer.h>
-#include <projectexplorer/projectmanager.h>
-#include <projectexplorer/target.h>
-
-#include <qmlprojectmanager/qmlprojectconstants.h>
-
-#include <QAction>
-#include <QMessageBox>
-#include <QRegularExpression>
-
-using namespace Utils;
-using namespace QmlProjectManager::GenerateCmake::Constants;
-
-namespace QmlProjectManager {
-namespace GenerateCmake {
-
-const QString MENU_ITEM_CONVERT = Tr::tr("Export as Latest Project Format...");
-const QString ERROR_TITLE = Tr::tr("Creating Project");
-const QString SUCCESS_TITLE = Tr::tr("Creating Project");
-const QString ERROR_TEXT = Tr::tr("Creating project failed.\n%1");
-const QString SUCCESS_TEXT = Tr::tr("Creating project succeeded.");
-
-void CmakeProjectConverter::generateMenuEntry(QObject *parent)
-{
- Core::ActionContainer *exportMenu = Core::ActionManager::actionContainer(
- QmlProjectManager::Constants::EXPORT_MENU);
- auto action = new QAction(MENU_ITEM_CONVERT, parent);
- QObject::connect(action, &QAction::triggered, CmakeProjectConverter::onConvertProject);
- Core::Command *cmd = Core::ActionManager::registerAction(action, "QmlProject.ConvertToCmakeProject");
- exportMenu->addAction(cmd, QmlProjectManager::Constants::G_EXPORT_CONVERT);
-
- action->setEnabled(isProjectConvertable(ProjectExplorer::ProjectManager::startupProject()));
- QObject::connect(ProjectExplorer::ProjectManager::instance(),
- &ProjectExplorer::ProjectManager::startupProjectChanged,
- [action]() {
- auto currentBuildSystem = QmlBuildSystem::getStartupBuildSystem();
- bool isMCU = currentBuildSystem ? currentBuildSystem->qtForMCUs() : false;
-
- action->setEnabled(isMCU
- && isProjectConvertable(
- ProjectExplorer::ProjectManager::startupProject()));
- });
-}
-
-bool CmakeProjectConverter::isProjectConvertable(const ProjectExplorer::Project *project)
-{
- if (!project)
- return false;
-
- return !isProjectCurrentFormat(project);
-}
-
-const QStringList sanityCheckFiles({FILENAME_CMAKELISTS,
- FILENAME_MODULES,
- FILENAME_MAINQML,
- QString(DIRNAME_CONTENT)+'/'+FILENAME_CMAKELISTS,
- QString(DIRNAME_IMPORT)+'/'+FILENAME_CMAKELISTS,
- QString(DIRNAME_CPP)+'/'+FILENAME_MAINCPP,
- QString(DIRNAME_CPP)+'/'+FILENAME_ENV_HEADER,
- QString(DIRNAME_CPP)+'/'+FILENAME_MAINCPP_HEADER
- });
-
-bool CmakeProjectConverter::isProjectCurrentFormat(const ProjectExplorer::Project *project)
-{
- const QmlProjectManager::QmlProject *qmlprj = qobject_cast<const QmlProjectManager::QmlProject*>(project);
-
- if (!qmlprj)
- return false;
-
- FilePath rootDir = qmlprj->rootProjectDirectory();
- for (const QString &file : sanityCheckFiles)
- if (!rootDir.pathAppended(file).exists())
- return false;
-
- return true;
-}
-
-void CmakeProjectConverter::onConvertProject()
-{
- ProjectExplorer::Project *project = ProjectExplorer::ProjectManager::startupProject();
- const QmlProjectManager::QmlProject *qmlProject =
- qobject_cast<const QmlProjectManager::QmlProject*>(project);
- if (qmlProject) {
- CmakeProjectConverterDialog dialog(qmlProject);
- if (dialog.exec()) {
- FilePath newProjectPath = dialog.newPath();
- CmakeProjectConverter converter;
- converter.convertProject(qmlProject, newProjectPath);
- }
- }
-}
-
-bool CmakeProjectConverter::convertProject(const QmlProjectManager::QmlProject *project,
- const FilePath &targetDir)
-{
- m_converterObjects.clear();
- m_projectDir = project->projectDirectory();
- m_newProjectDir = targetDir;
- m_project = project;
-
- m_rootDirFiles = QStringList(FILENAME_FILTER_QMLPROJECT);
- const QString confFile = GenerateCmake::projectEnvironmentVariable(ENV_VARIABLE_CONTROLCONF);
- if (!confFile.isEmpty())
- m_rootDirFiles.append(confFile);
-
- bool retVal = prepareAndExecute();
-
- if (retVal) {
- QMessageBox::information(Core::ICore::dialogParent(), SUCCESS_TITLE, SUCCESS_TEXT);
- ProjectExplorer::OpenProjectResult result
- = ProjectExplorer::ProjectExplorerPlugin::openProject(newProjectFile());
- if (!result)
- ProjectExplorer::ProjectExplorerPlugin::showOpenProjectError(result);
- }
- else {
- QMessageBox::critical(Core::ICore::dialogParent(), ERROR_TITLE, ERROR_TEXT.arg(m_errorText));
- }
-
- return retVal;
-}
-
-bool CmakeProjectConverter::prepareAndExecute()
-{
- GenerateCmake::CmakeFileGenerator cmakeGenerator;
-
- if (!performSanityCheck())
- return false;
- if (!prepareBaseDirectoryStructure())
- return false;
- if (!prepareCopy())
- return false;
- if (!createPreparedProject())
- return false;
- if (!cmakeGenerator.prepare(m_newProjectDir, false))
- return false;
- if (!cmakeGenerator.execute())
- return false;
- if (!modifyNewFiles())
- return false;
-
- return true;
-}
-
-bool CmakeProjectConverter::isFileBlacklisted(const Utils::FilePath &file) const
-{
- if (!file.fileName().compare(FILENAME_CMAKELISTS))
- return true;
- if (!file.suffix().compare(FILENAME_SUFFIX_QMLPROJECT))
- return true;
- if (!file.suffix().compare(FILENAME_SUFFIX_USER))
- return true;
- if (m_rootDirFiles.contains(file.fileName()))
- return true;
-
- return false;
-}
-
-bool CmakeProjectConverter::isDirBlacklisted(const Utils::FilePath &dir) const
-{
- if (!dir.isDir())
- return true;
-
- return false;
-}
-
-const QString ERROR_CANNOT_WRITE_DIR = Tr::tr("Unable to write to directory\n%1.");
-
-bool CmakeProjectConverter::performSanityCheck()
-{
- if (!m_newProjectDir.parentDir().isWritableDir()) {
- m_errorText = ERROR_CANNOT_WRITE_DIR.arg(m_newProjectDir.parentDir().toString());
- return false;
- }
-
- return true;
-}
-
-bool CmakeProjectConverter::prepareBaseDirectoryStructure()
-{
- addDirectory(m_newProjectDir);
- addDirectory(contentDir());
- addDirectory(sourceDir());
- addDirectory(importDir());
- addDirectory(assetDir());
- addDirectory(assetImportDir());
- addFile(contentDir().pathAppended(FILENAME_APPMAINQML));
-
- return true;
-}
-
-bool CmakeProjectConverter::prepareCopy()
-{
- FilePaths rootFiles = m_projectDir.dirEntries({m_rootDirFiles, QDir::Files});
- for (const FilePath &file : rootFiles) {
- addFile(file, m_newProjectDir.pathAppended(file.fileName()));
- }
-
- prepareCopyDirFiles(m_projectDir, contentDir());
-
- FilePaths subDirs = m_projectDir.dirEntries(QDir::Dirs|QDir::NoDotAndDotDot);
- for (FilePath &subDir : subDirs) {
- if (subDir.fileName() == DIRNAME_IMPORT) {
- prepareCopyDirTree(subDir, importDir());
- }
- else if (subDir.fileName() == DIRNAME_CPP) {
- prepareCopyDirTree(subDir, sourceDir());
- }
- else if (subDir.fileName() == DIRNAME_ASSET) {
- prepareCopyDirTree(subDir, assetDir());
- }
- else if (subDir.fileName() == DIRNAME_ASSETIMPORT) {
- prepareCopyDirTree(subDir, assetImportDir());
- }
- else {
- prepareCopyDirTree(subDir, contentDir().pathAppended(subDir.fileName()));
- }
- }
-
- return true;
-}
-
-bool CmakeProjectConverter::prepareCopyDirFiles(const FilePath &dir, const FilePath &targetDir)
-{
- FilePaths dirFiles = dir.dirEntries(QDir::Files);
- for (FilePath file : dirFiles) {
- if (!isFileBlacklisted(file))
- addFile(file, targetDir.pathAppended(file.fileName()));
- }
-
- return true;
-}
-
-bool CmakeProjectConverter::prepareCopyDirTree(const FilePath &dir, const FilePath &targetDir)
-{
- prepareCopyDirFiles(dir, targetDir);
- FilePaths subDirs = dir.dirEntries(QDir::Dirs|QDir::NoDotAndDotDot);
- for (FilePath &subDir : subDirs) {
- if (isDirBlacklisted(subDir))
- continue;
- addDirectory(targetDir.pathAppended(subDir.fileName()));
- prepareCopyDirFiles(subDir, targetDir.pathAppended(subDir.fileName()));
- prepareCopyDirTree(subDir, targetDir.pathAppended(subDir.fileName()));
- }
-
- return true;
-}
-
-bool CmakeProjectConverter::addDirectory(const Utils::FilePath &target)
-{
- return addObject(ProjectConverterObjectType::Directory, FilePath(), target);
-}
-
-bool CmakeProjectConverter::addFile(const Utils::FilePath &target)
-{
- return addFile(FilePath(), target);
-}
-
-bool CmakeProjectConverter::addFile(const Utils::FilePath &original, const Utils::FilePath &target)
-{
- addDirectory(target.parentDir());
- return addObject(ProjectConverterObjectType::File, original, target);
-}
-
-bool CmakeProjectConverter::addObject(ProjectConverterObjectType type,
- const Utils::FilePath &original, const Utils::FilePath &target)
-{
- if (target.isChildOf(m_projectDir))
- return false;
-
- if (!target.isChildOf(m_newProjectDir) &&
- ((type == ProjectConverterObjectType::Directory) && (target != m_newProjectDir))) {
- return false;
- }
-
- for (ProjectConverterObject &o : m_converterObjects) {
- if (o.target == target)
- return false;
- }
-
- ProjectConverterObject object;
- object.type = type;
- object.target = target;
- object.original = original;
-
- m_converterObjects.append(object);
-
- return true;
-}
-
-bool CmakeProjectConverter::createPreparedProject()
-{
- for (ProjectConverterObject &pco : m_converterObjects) {
- if (pco.type == ProjectConverterObjectType::Directory) {
- pco.target.createDir();
- }
- else if (pco.type == ProjectConverterObjectType::File) {
- if (pco.original.isEmpty()) {
- QFile newFile(pco.target.toString());
- newFile.open(QIODevice::WriteOnly);
- newFile.close();
- }
- else {
- pco.original.copyFile(pco.target);
- }
- }
- }
-
- return true;
-}
-
-const FilePath CmakeProjectConverter::contentDir() const
-{
- return m_newProjectDir.pathAppended(DIRNAME_CONTENT);
-}
-
-const FilePath CmakeProjectConverter::sourceDir() const
-{
- return m_newProjectDir.pathAppended(DIRNAME_CPP);
-}
-
-const FilePath CmakeProjectConverter::importDir() const
-{
- return m_newProjectDir.pathAppended(DIRNAME_IMPORT);
-}
-
-const FilePath CmakeProjectConverter::assetDir() const
-{
- return contentDir().pathAppended(DIRNAME_ASSET);
-}
-
-const FilePath CmakeProjectConverter::assetImportDir() const
-{
- return m_newProjectDir.pathAppended(DIRNAME_ASSETIMPORT);
-}
-
-const FilePath CmakeProjectConverter::newProjectFile() const
-{
- return m_newProjectDir.pathAppended(m_project->projectFilePath().fileName());
-}
-
-const FilePath CmakeProjectConverter::projectMainFile() const
-{
- auto *target = m_project->activeTarget();
- if (target && target->buildSystem()) {
- auto buildSystem = qobject_cast<QmlProjectManager::QmlBuildSystem *>(target->buildSystem());
- if (buildSystem) {
- return buildSystem->mainFilePath();
- }
- }
- return {};
-}
-
-const QString CmakeProjectConverter::projectMainClass() const
-{
- return projectMainFile().baseName();
-}
-
-bool CmakeProjectConverter::modifyNewFiles()
-{
- return modifyAppMainQml() && modifyProjectFile();
-}
-
-const char APPMAIN_QMLFILE_TEMPLATE_PATH[] = ":/boilerplatetemplates/qmlprojectappmainqml.tpl";
-
-bool CmakeProjectConverter::modifyAppMainQml()
-{
- QString appMainQmlPath = contentDir().pathAppended(FILENAME_APPMAINQML).toString();
- QFile appMainQml(appMainQmlPath);
- appMainQml.open(QIODevice::ReadWrite);
- if (!appMainQml.isOpen())
- return false;
-
- QString templateContent = GenerateCmake::readTemplate(APPMAIN_QMLFILE_TEMPLATE_PATH);
- QString appMainQmlContent = templateContent.arg(projectMainClass());
-
- appMainQml.reset();
- appMainQml.write(appMainQmlContent.toUtf8());
- appMainQml.close();
-
- return true;
-}
-
-bool CmakeProjectConverter::modifyProjectFile()
-{
- QString projectFileName = m_project->projectFilePath().fileName();
- FilePath projectFilePath = m_newProjectDir.pathAppended(projectFileName);
- QFile projectFile(projectFilePath.toString());
- projectFile.open(QIODevice::ReadOnly);
- if (!projectFile.isOpen())
- return false;
- QString projectFileContent = QString::fromUtf8(projectFile.readAll());
- projectFile.close();
-
- const QRegularExpression mainFilePattern("^\\s*mainFile:\\s*\".*\"", QRegularExpression::MultilineOption);
- const QString mainFileString(" mainFile: \"content/App.qml\"");
-
- projectFileContent.replace(mainFilePattern, mainFileString);
-
- projectFile.open(QIODevice::WriteOnly|QIODevice::Truncate);
- if (!projectFile.isOpen())
- return false;
- projectFile.write(projectFileContent.toUtf8());
- projectFile.close();
-
- return true;
-}
-
-} //GenerateCmake
-} //QmlProjectManager
diff --git a/src/plugins/qmlprojectmanager/cmakegen/cmakeprojectconverter.h b/src/plugins/qmlprojectmanager/cmakegen/cmakeprojectconverter.h
deleted file mode 100644
index 415123db70..0000000000
--- a/src/plugins/qmlprojectmanager/cmakegen/cmakeprojectconverter.h
+++ /dev/null
@@ -1,77 +0,0 @@
-// Copyright (C) 2022 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
-
-#ifndef CMAKEPROJECTCONVERTER_H
-#define CMAKEPROJECTCONVERTER_H
-
-#include <utils/fileutils.h>
-#include <qmlprojectmanager/qmlproject.h>
-
-namespace QmlProjectManager {
-
-namespace GenerateCmake {
-
-enum ProjectConverterObjectType {
- File,
- Directory
-};
-
-struct ProjectConverterObject {
- ProjectConverterObjectType type;
- Utils::FilePath target;
- Utils::FilePath original;
-};
-
-class CmakeProjectConverter {
-
-public:
- bool convertProject(const QmlProjectManager::QmlProject *project,
- const Utils::FilePath &targetDir);
- static void generateMenuEntry(QObject *parent);
- static void onConvertProject();
- static bool isProjectConvertable(const ProjectExplorer::Project *project);
- static bool isProjectCurrentFormat(const ProjectExplorer::Project *project);
-
-private:
- bool prepareAndExecute();
- bool isFileBlacklisted(const Utils::FilePath &file) const;
- bool isDirBlacklisted(const Utils::FilePath &dir) const;
- bool performSanityCheck();
- bool prepareBaseDirectoryStructure();
- bool prepareCopyDirFiles(const Utils::FilePath &dir, const Utils::FilePath &targetDir);
- bool prepareCopyDirTree(const Utils::FilePath &dir, const Utils::FilePath &targetDir);
- bool prepareCopy();
- bool addDirectory(const Utils::FilePath &target);
- bool addFile(const Utils::FilePath &target);
- bool addFile(const Utils::FilePath &original, const Utils::FilePath &target);
- bool addObject(ProjectConverterObjectType type,
- const Utils::FilePath &original, const Utils::FilePath &target);
- bool createPreparedProject();
-
- const Utils::FilePath contentDir() const;
- const Utils::FilePath sourceDir() const;
- const Utils::FilePath importDir() const;
- const Utils::FilePath assetDir() const;
- const Utils::FilePath assetImportDir() const;
- const Utils::FilePath newProjectFile() const;
-
- const QString environmentVariable(const QString &key) const;
- const Utils::FilePath projectMainFile() const;
- const QString projectMainClass() const;
- bool modifyNewFiles();
- bool modifyAppMainQml();
- bool modifyProjectFile();
-
-private:
- QList<ProjectConverterObject> m_converterObjects;
- QStringList m_rootDirFiles;
- Utils::FilePath m_projectDir;
- Utils::FilePath m_newProjectDir;
- const QmlProjectManager::QmlProject *m_project;
- QString m_errorText;
-};
-
-} //GenerateCmake
-} //QmlProjectManager
-
-#endif // CMAKEPROJECTCONVERTER_H
diff --git a/src/plugins/qmlprojectmanager/cmakegen/cmakeprojectconverterdialog.cpp b/src/plugins/qmlprojectmanager/cmakegen/cmakeprojectconverterdialog.cpp
deleted file mode 100644
index 1d67a92b39..0000000000
--- a/src/plugins/qmlprojectmanager/cmakegen/cmakeprojectconverterdialog.cpp
+++ /dev/null
@@ -1,180 +0,0 @@
-// Copyright (C) 2022 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
-
-#include "cmakeprojectconverterdialog.h"
-#include "../qmlprojectmanagertr.h"
-
-#include <coreplugin/documentmanager.h>
-
-#include <QDialog>
-#include <QDialogButtonBox>
-#include <QFormLayout>
-#include <QGroupBox>
-#include <QLabel>
-#include <QPushButton>
-#include <QRegularExpression>
-
-using namespace Utils;
-
-namespace QmlProjectManager {
-namespace GenerateCmake {
-
-const QRegularExpression projectNameRegexp("^(?!(import))(?!(QtQml))(?!(QtQuick))(?:[A-Z][a-zA-Z0-9-_]*)$");
-
-static bool projectNameValidationFunction(FancyLineEdit *editor, QString *)
-{
- return editor->text().count(projectNameRegexp);
-}
-
-static bool dirValidationFunction(FancyLineEdit *editor, QString *)
-{
- return FilePath::fromString(editor->text()).isWritableDir();
-}
-
-const QString EXPLANATION_TEXT = Tr::tr("This process creates a copy of the existing project. The new project's folder structure is adjusted for CMake build process and necessary related new files are generated.\n\nThe new project can be opened in Qt Creator using the main CMakeLists.txt file.");
-const QString PROJECT_NAME_LABEL = Tr::tr("Name:");
-const QString PARENT_DIR_LABEL = Tr::tr("Create in:");
-
-CmakeProjectConverterDialog::CmakeProjectConverterDialog(const QmlProjectManager::QmlProject *oldProject)
- : QDialog()
-{
- const FilePath defaultDir = Core::DocumentManager::projectsDirectory();
- const QString defaultName = uniqueProjectName(defaultDir, oldProject->displayName());
-
- QLabel *mainLabel = new QLabel(EXPLANATION_TEXT, this);
- mainLabel->setWordWrap(true);
-
- mainLabel->setMargin(20);
- mainLabel->setMinimumWidth(600);
-
- m_errorLabel = new InfoLabel();
- m_errorLabel->setType(InfoLabel::InfoType::None);
-
- m_nameEditor = new FancyLineEdit();
- m_nameEditor->setValidationFunction(projectNameValidationFunction);
- m_nameEditor->setText(defaultName);
-
- m_dirSelector = new PathChooser();
- m_dirSelector->setExpectedKind(PathChooser::Directory);
- m_dirSelector->setValidationFunction(dirValidationFunction);
- m_dirSelector->setFilePath(defaultDir);
-
- QDialogButtonBox *buttons = new QDialogButtonBox(QDialogButtonBox::Ok|QDialogButtonBox::Cancel);
- m_okButton = buttons->button(QDialogButtonBox::Ok);
- m_okButton->setDefault(true);
-
- connect(buttons, &QDialogButtonBox::accepted, this, &QDialog::accept);
- connect(buttons, &QDialogButtonBox::rejected, this, &QDialog::reject);
- connect(m_nameEditor, &FancyLineEdit::textChanged, this, &CmakeProjectConverterDialog::pathValidChanged);
- connect(m_dirSelector->lineEdit(), &FancyLineEdit::textChanged, this, &CmakeProjectConverterDialog::pathValidChanged);
-
- QGroupBox *form = new QGroupBox();
- QFormLayout *formLayout = new QFormLayout(form);
- formLayout->addRow(PROJECT_NAME_LABEL, m_nameEditor);
- formLayout->addRow(PARENT_DIR_LABEL, m_dirSelector);
-
- QVBoxLayout *dialogLayout = new QVBoxLayout(this);
- dialogLayout->addWidget(mainLabel);
- dialogLayout->addWidget(form);
- dialogLayout->addWidget(m_errorLabel);
- dialogLayout->addWidget(buttons);
-
- pathValidChanged();
-}
-
-void CmakeProjectConverterDialog::pathValidChanged()
-{
- bool valid = isValid();
-
- if (valid)
- m_newProjectDir = m_dirSelector->filePath().pathAppended(m_nameEditor->text());
- else
- m_newProjectDir = FilePath();
-
- const QString error = errorText();
- m_errorLabel->setType(error.isEmpty() ? InfoLabel::None : InfoLabel::Warning);
- m_errorLabel->setText(error);
- m_okButton->setEnabled(valid);
-}
-
-const FilePath CmakeProjectConverterDialog::newPath() const
-{
- return m_newProjectDir;
-}
-
-const QStringList blackListedStarts = {"import","QtQml","QtQuick"};
-
-const QString CmakeProjectConverterDialog::startsWithBlacklisted(const QString &text) const
-{
- for (const QString &badWord : blackListedStarts) {
- if (text.startsWith(badWord))
- return badWord;
- }
-
- return {};
-}
-
-const QString ERROR_TEXT_NAME_EMPTY = Tr::tr("Name is empty.");
-const QString ERROR_TEXT_NAME_BAD_START = Tr::tr("Name must not start with \"%1\".");
-const QString ERROR_TEXT_NAME_LOWERCASE_START = Tr::tr("Name must begin with a capital letter");
-const QString ERROR_TEXT_NAME_BAD_CHARACTERS = Tr::tr("Name must contain only letters, numbers or characters - _.");
-
-const QString ERROR_DIR_NOT_DIR = Tr::tr("Target is not a directory.");
-const QString ERROR_DIR_NOT_WRITABLE = Tr::tr("Cannot write to target directory.");
-const QString ERROR_DIR_EXISTS = Tr::tr("Project directory already exists.");
-
-const QString CmakeProjectConverterDialog::errorText() const
-{
- QString text;
-
- if (!m_nameEditor->isValid()) {
- QString name = m_nameEditor->text();
-
- if (name.isEmpty())
- return ERROR_TEXT_NAME_EMPTY;
-
- const QString badStart = startsWithBlacklisted(text);
- if (!badStart.isEmpty())
- return ERROR_TEXT_NAME_BAD_START.arg(badStart);
-
- if (name[0].isLower())
- return ERROR_TEXT_NAME_LOWERCASE_START;
-
- return ERROR_TEXT_NAME_BAD_CHARACTERS;
-
- }
-
- if (!m_dirSelector->isValid()) {
- FilePath path = m_dirSelector->filePath();
- if (!path.isDir())
- return ERROR_DIR_NOT_DIR;
- if (!path.isWritableDir())
- return ERROR_DIR_NOT_WRITABLE;
- }
-
- if (m_dirSelector->filePath().pathAppended(m_nameEditor->text()).exists())
- return ERROR_DIR_EXISTS;
-
- return text;
-}
-
-const QString CmakeProjectConverterDialog::uniqueProjectName(const FilePath &dir, const QString &oldName) const
-{
- for (unsigned i = 0; ; ++i) {
- QString name = oldName;
- if (i)
- name += QString::number(i);
- if (!dir.pathAppended(name).exists())
- return name;
- }
- return oldName;
-}
-
-bool CmakeProjectConverterDialog::isValid()
-{
- FilePath newPath = m_dirSelector->filePath().pathAppended(m_nameEditor->text());
- return m_dirSelector->isValid() && m_nameEditor->isValid() && !newPath.exists();
-}
-
-} //GenerateCmake
-} //QmlProjectManager
diff --git a/src/plugins/qmlprojectmanager/cmakegen/cmakeprojectconverterdialog.h b/src/plugins/qmlprojectmanager/cmakegen/cmakeprojectconverterdialog.h
deleted file mode 100644
index 071eec481a..0000000000
--- a/src/plugins/qmlprojectmanager/cmakegen/cmakeprojectconverterdialog.h
+++ /dev/null
@@ -1,47 +0,0 @@
-// Copyright (C) 2022 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
-
-
-#ifndef CMAKEPROJECTCONVERTERDIALOG_H
-#define CMAKEPROJECTCONVERTERDIALOG_H
-
-#include <qmlprojectmanager/qmlproject.h>
-#include <utils/fancylineedit.h>
-#include <utils/filepath.h>
-#include <utils/infolabel.h>
-#include <utils/pathchooser.h>
-
-#include <QDialog>
-
-namespace QmlProjectManager {
-namespace GenerateCmake {
-
-class CmakeProjectConverterDialog : public QDialog
-{
- Q_OBJECT
-
-public:
- CmakeProjectConverterDialog(const QmlProjectManager::QmlProject *oldProject);
- const Utils::FilePath newPath() const;
-
-public slots:
- void pathValidChanged();
-
-private:
- const QString startsWithBlacklisted(const QString &text) const;
- const QString errorText() const;
- const QString uniqueProjectName(const Utils::FilePath &dir, const QString &oldName) const;
- bool isValid();
-
-private:
- Utils::FilePath m_newProjectDir;
- Utils::FancyLineEdit *m_nameEditor;
- Utils::PathChooser *m_dirSelector;
- Utils::InfoLabel *m_errorLabel;
- QPushButton *m_okButton;
-};
-
-} //GenerateCmake
-} //QmlProjectManager
-
-#endif // CMAKEPROJECTCONVERTERDIALOG_H
diff --git a/src/plugins/qmlprojectmanager/cmakegen/cmakewriter.cpp b/src/plugins/qmlprojectmanager/cmakegen/cmakewriter.cpp
index 80ea56dfb9..0b1d0c4c60 100644
--- a/src/plugins/qmlprojectmanager/cmakegen/cmakewriter.cpp
+++ b/src/plugins/qmlprojectmanager/cmakegen/cmakewriter.cpp
@@ -4,7 +4,6 @@
#include "cmakegenerator.h"
#include "cmakewriterv0.h"
#include "cmakewriterv1.h"
-#include "generatecmakelistsconstants.h"
#include "qmlprojectmanager/qmlproject.h"
#include "qmlprojectmanager/buildsystem/qmlbuildsystem.h"
@@ -42,6 +41,16 @@ CMakeWriter::Ptr CMakeWriter::create(CMakeGenerator *parent)
return std::make_unique<CMakeWriterV0>(parent);
}
+QString CMakeWriter::readTemplate(const QString &templatePath)
+{
+ QFile templatefile(templatePath);
+ templatefile.open(QIODevice::ReadOnly);
+ QTextStream stream(&templatefile);
+ QString content = stream.readAll();
+ templatefile.close();
+ return content;
+}
+
CMakeWriter::CMakeWriter(CMakeGenerator *parent)
: m_parent(parent)
{}
@@ -60,7 +69,7 @@ bool CMakeWriter::isPlugin(const NodePtr &node) const
QString CMakeWriter::sourceDirName() const
{
- return Constants::DIRNAME_CPP;
+ return "src";
}
void CMakeWriter::transformNode(NodePtr &) const
@@ -173,7 +182,7 @@ QString CMakeWriter::makeSetEnvironmentFn() const
QTC_ASSERT(parent()->buildSystem(), return {});
const QmlBuildSystem *buildSystem = parent()->buildSystem();
- const QString configFile = getEnvironmentVariable(Constants::ENV_VARIABLE_CONTROLCONF);
+ const QString configFile = getEnvironmentVariable(ENV_VARIABLE_CONTROLCONF);
QString out("inline void set_qt_environment() {\n");
for (Utils::EnvironmentItem &envItem : buildSystem->environment()) {
@@ -223,16 +232,6 @@ std::tuple<QString, QString> CMakeWriter::makeResourcesBlocks(const NodePtr &nod
return {resourcesOut, bigResourcesOut};
}
-QString CMakeWriter::readTemplate(const QString &templatePath) const
-{
- QFile templatefile(templatePath);
- templatefile.open(QIODevice::ReadOnly);
- QTextStream stream(&templatefile);
- QString content = stream.readAll();
- templatefile.close();
- return content;
-}
-
void CMakeWriter::writeFile(const Utils::FilePath &path, const QString &content) const
{
QFile fileHandle(path.toString());
diff --git a/src/plugins/qmlprojectmanager/cmakegen/cmakewriter.h b/src/plugins/qmlprojectmanager/cmakegen/cmakewriter.h
index 86f6403d13..8766df0dcd 100644
--- a/src/plugins/qmlprojectmanager/cmakegen/cmakewriter.h
+++ b/src/plugins/qmlprojectmanager/cmakegen/cmakewriter.h
@@ -41,6 +41,9 @@ using FileGetter = std::function<std::vector<Utils::FilePath>(const NodePtr &)>;
class CMakeGenerator;
+const char ENV_VARIABLE_CONTROLCONF[] =
+ "QT_QUICK_CONTROLS_CONF";
+
const char DO_NOT_EDIT_FILE[] =
"### This file is automatically generated by Qt Design Studio.\n"
"### Do not change\n\n";
@@ -56,6 +59,7 @@ public:
using Ptr = std::shared_ptr<CMakeWriter>;
static Ptr create(CMakeGenerator *parent);
+ static QString readTemplate(const QString &templatePath);
CMakeWriter(CMakeGenerator *parent);
const CMakeGenerator *parent() const;
@@ -85,7 +89,6 @@ protected:
QString makeSetEnvironmentFn() const;
std::tuple<QString, QString> makeResourcesBlocks(const NodePtr &node) const;
- QString readTemplate(const QString &templatePath) const;
void writeFile(const Utils::FilePath &path, const QString &content) const;
private:
diff --git a/src/plugins/qmlprojectmanager/cmakegen/cmakewriterv0.cpp b/src/plugins/qmlprojectmanager/cmakegen/cmakewriterv0.cpp
index feac91f587..5cb17d1e1b 100644
--- a/src/plugins/qmlprojectmanager/cmakegen/cmakewriterv0.cpp
+++ b/src/plugins/qmlprojectmanager/cmakegen/cmakewriterv0.cpp
@@ -2,7 +2,6 @@
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "cmakewriterv0.h"
#include "cmakegenerator.h"
-#include "generatecmakelistsconstants.h"
namespace QmlProjectManager {
@@ -70,7 +69,7 @@ void CMakeWriterV0::writeRootCMakeFile(const NodePtr &node) const
}
const QString appName = parent()->projectName() + "App";
- const QString qtcontrolsConfFile = getEnvironmentVariable(Constants::ENV_VARIABLE_CONTROLCONF);
+ const QString qtcontrolsConfFile = getEnvironmentVariable(ENV_VARIABLE_CONTROLCONF);
QString fileSection = "";
if (!qtcontrolsConfFile.isEmpty())
diff --git a/src/plugins/qmlprojectmanager/cmakegen/cmakewriterv1.cpp b/src/plugins/qmlprojectmanager/cmakegen/cmakewriterv1.cpp
index 096ceb5d19..220d8622bf 100644
--- a/src/plugins/qmlprojectmanager/cmakegen/cmakewriterv1.cpp
+++ b/src/plugins/qmlprojectmanager/cmakegen/cmakewriterv1.cpp
@@ -2,7 +2,6 @@
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "cmakewriterv1.h"
#include "cmakegenerator.h"
-#include "generatecmakelistsconstants.h"
#include "qmlprojectmanager/buildsystem/qmlbuildsystem.h"
@@ -62,7 +61,7 @@ void CMakeWriterV1::writeRootCMakeFile(const NodePtr &node) const
const QString appName = parent()->projectName() + "App";
QString fileSection = "";
- const QString configFile = getEnvironmentVariable(Constants::ENV_VARIABLE_CONTROLCONF);
+ const QString configFile = getEnvironmentVariable(ENV_VARIABLE_CONTROLCONF);
if (!configFile.isEmpty())
fileSection = QString("\t\t%1").arg(configFile);
diff --git a/src/plugins/qmlprojectmanager/cmakegen/generatecmakelists.cpp b/src/plugins/qmlprojectmanager/cmakegen/generatecmakelists.cpp
deleted file mode 100644
index f46b508c8c..0000000000
--- a/src/plugins/qmlprojectmanager/cmakegen/generatecmakelists.cpp
+++ /dev/null
@@ -1,668 +0,0 @@
-// 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 "generatecmakelists.h"
-
-#include "generatecmakelistsconstants.h"
-#include "cmakegeneratordialog.h"
-#include "../qmlprojectmanagertr.h"
-
-#include <coreplugin/actionmanager/actionmanager.h>
-#include <coreplugin/actionmanager/actioncontainer.h>
-
-#include <projectexplorer/buildsystem.h>
-#include <projectexplorer/project.h>
-#include <projectexplorer/projectexplorerconstants.h>
-#include <projectexplorer/projectmanager.h>
-#include <projectexplorer/target.h>
-
-#include <qmlprojectmanager/buildsystem/qmlbuildsystem.h>
-#include <qmlprojectmanager/qmlmainfileaspect.h>
-#include <qmlprojectmanager/qmlproject.h>
-#include <qmlprojectmanager/qmlprojectconstants.h>
-
-#include <extensionsystem/iplugin.h>
-#include <extensionsystem/pluginmanager.h>
-#include <extensionsystem/pluginspec.h>
-
-#include <utils/fileutils.h>
-
-#include <QAction>
-#include <QMenu>
-#include <QMessageBox>
-#include <QRegularExpression>
-#include <QStringList>
-#include <QTextStream>
-#include <QtConcurrent>
-
-using namespace Utils;
-using namespace QmlProjectManager::GenerateCmake::Constants;
-
-namespace QmlProjectManager {
-
-namespace GenerateCmake {
-
-static bool isQmlDesigner(const ExtensionSystem::PluginSpec *spec)
-{
- if (!spec)
- return false;
-
- return spec->name().contains("QmlDesigner");
-}
-
-static void trackUsage(const QString &id)
-{
- const auto plugins = ExtensionSystem::PluginManager::plugins();
- const auto it = std::find_if(plugins.begin(), plugins.end(), &isQmlDesigner);
- if (it != plugins.end()) {
- QObject *qmlDesignerPlugin = (*it)->plugin();
- QMetaObject::invokeMethod(qmlDesignerPlugin,
- "usageStatisticsNotifier",
- Qt::DirectConnection,
- Q_ARG(QString, id));
- }
-}
-
-bool operator==(const GeneratableFile &left, const GeneratableFile &right)
-{
- return (left.filePath == right.filePath && left.content == right.content);
-}
-
-enum ProjectDirectoryError {
- NoError = 0,
- MissingContentDir = 1<<1,
- MissingImportDir = 1<<2,
- MissingAssetDir = 1<<3,
- MissingAssetImportDir = 1<<4,
- MissingCppDir = 1<<5,
- MissingMainCMake = 1<<6,
- MissingMainQml = 1<<7,
- MissingAppMainQml = 1<<8,
- MissingQmlModules = 1<<9,
- MissingMainCpp = 1<<10,
- MissingMainCppHeader = 1<<11,
- MissingEnvHeader = 1<<12
-};
-
-const QString MENU_ITEM_GENERATE = Tr::tr("Generate CMake Build Files...");
-
-void generateMenuEntry(QObject *parent)
-{
- Core::ActionContainer *menu = Core::ActionManager::actionContainer(Core::Constants::M_FILE);
-
- Core::ActionContainer *exportMenu = Core::ActionManager::createMenu(
- QmlProjectManager::Constants::EXPORT_MENU);
-
- exportMenu->menu()->setTitle(Tr::tr("Export Project"));
- menu->addMenu(exportMenu, Core::Constants::G_FILE_EXPORT);
-
- exportMenu->appendGroup(QmlProjectManager::Constants::G_EXPORT_GENERATE);
- exportMenu->appendGroup(QmlProjectManager::Constants::G_EXPORT_CONVERT);
- exportMenu->addSeparator(QmlProjectManager::Constants::G_EXPORT_CONVERT);
-
- auto action = new QAction(MENU_ITEM_GENERATE, parent);
- QObject::connect(action, &QAction::triggered, GenerateCmake::onGenerateCmakeLists);
- Core::Command *cmd = Core::ActionManager::registerAction(action, "QmlProject.CreateCMakeLists");
- exportMenu->addAction(cmd, QmlProjectManager::Constants::G_EXPORT_GENERATE);
-
- action->setEnabled(false);
- QObject::connect(ProjectExplorer::ProjectManager::instance(),
- &ProjectExplorer::ProjectManager::startupProjectChanged,
- [action]() {
- if (auto buildSystem = QmlBuildSystem::getStartupBuildSystem())
- action->setEnabled(!buildSystem->qtForMCUs());
- });
-}
-
-void onGenerateCmakeLists()
-{
- trackUsage("generateCMakeProjectDialogOpened");
- FilePath rootDir = ProjectExplorer::ProjectManager::startupProject()->projectDirectory();
-
- int projectDirErrors = isProjectCorrectlyFormed(rootDir);
- if (projectDirErrors != NoError) {
- showProjectDirErrorDialog(projectDirErrors);
- if (isErrorFatal(projectDirErrors))
- return;
- }
-
- CmakeFileGenerator cmakeGen;
- cmakeGen.prepare(rootDir);
-
- FilePaths allFiles;
- for (const GeneratableFile &file: cmakeGen.fileQueue().queuedFiles())
- allFiles.append(file.filePath);
-
- CmakeGeneratorDialog dialog(rootDir, allFiles, cmakeGen.invalidFileNames());
- if (dialog.exec()) {
- FilePaths confirmedFiles = dialog.getFilePaths();
- cmakeGen.filterFileQueue(confirmedFiles);
- cmakeGen.execute();
- }
-
- trackUsage("generateCMakeProjectExecuted");
-}
-
-bool isErrorFatal(int error)
-{
- if (error & MissingContentDir ||
- error & MissingImportDir ||
- error & MissingCppDir ||
- error & MissingAppMainQml)
- return true;
-
- return false;
-}
-
-int isProjectCorrectlyFormed(const FilePath &rootDir)
-{
- int errors = NoError;
-
- if (!rootDir.pathAppended(DIRNAME_CONTENT).exists())
- errors |= MissingContentDir;
- if (!rootDir.pathAppended(DIRNAME_CONTENT).pathAppended(FILENAME_APPMAINQML).exists())
- errors |= MissingAppMainQml;
-
- if (!rootDir.pathAppended(DIRNAME_IMPORT).exists())
- errors |= MissingImportDir;
- if (!rootDir.pathAppended(DIRNAME_ASSETIMPORT).exists())
- errors |= MissingAssetImportDir;
-
- if (!rootDir.pathAppended(DIRNAME_CPP).exists())
- errors |= MissingCppDir;
- if (!rootDir.pathAppended(DIRNAME_CPP).pathAppended(FILENAME_MAINCPP).exists())
- errors |= MissingMainCpp;
- if (!rootDir.pathAppended(DIRNAME_CPP).pathAppended(FILENAME_MAINCPP_HEADER).exists())
- errors |= MissingMainCppHeader;
- if (!rootDir.pathAppended(DIRNAME_CPP).pathAppended(FILENAME_ENV_HEADER).exists())
- errors |= MissingEnvHeader;
-
- if (!rootDir.pathAppended(FILENAME_CMAKELISTS).exists())
- errors |= MissingMainCMake;
- if (!rootDir.pathAppended(FILENAME_MODULES).exists())
- errors |= MissingQmlModules;
- if (!rootDir.pathAppended(FILENAME_MAINQML).exists())
- errors |= MissingMainQml;
-
- return errors;
-}
-
-const QString WARNING_MISSING_STRUCTURE_FATAL = Tr::tr("The project is not properly structured for automatically generating CMake files.\n\nAborting process.\n\nThe following files or directories are missing:\n\n%1");
-//const QString WARNING_MISSING_STRUCTURE_NONFATAL = Tr::tr("The project is not properly structured for automatically generating CMake files.\n\nThe following files or directories are missing and may be created:\n\n%1");
-const QString WARNING_TITLE_FATAL = Tr::tr("Cannot Generate CMake Files");
-//const QString WARNING_TITLE_NONFATAL = Tr::tr("Problems with Generating CMake Files");
-
-void showProjectDirErrorDialog(int error)
-{
- bool isFatal = isErrorFatal(error);
-
- if (isFatal) {
- QString fatalList;
-
- if (error & MissingContentDir)
- fatalList.append(QString(DIRNAME_CONTENT) + "\n");
- if (error & MissingAppMainQml)
- fatalList.append(QString(DIRNAME_CONTENT)
- + QDir::separator()
- + QString(FILENAME_APPMAINQML)
- + "\n");
- if (error & MissingCppDir)
- fatalList.append(QString(DIRNAME_CPP) + "\n");
- if (error & MissingImportDir)
- fatalList.append(QString(DIRNAME_IMPORT) + "\n");
-
- QMessageBox::critical(nullptr,
- WARNING_TITLE_FATAL,
- WARNING_MISSING_STRUCTURE_FATAL.arg(fatalList));
- }
-}
-
-bool FileQueue::queueFile(const FilePath &filePath, const QString &fileContent)
-{
- GeneratableFile file;
- file.filePath = filePath;
- file.content = fileContent;
- file.fileExists = filePath.exists();
- m_queuedFiles.append(file);
-
- return true;
-}
-
-const QVector<GeneratableFile> FileQueue::queuedFiles() const
-{
- return m_queuedFiles;
-}
-
-bool FileQueue::writeQueuedFiles()
-{
- for (GeneratableFile &file: m_queuedFiles)
- if (!writeFile(file))
- return false;
-
- return true;
-}
-
-bool FileQueue::writeFile(const GeneratableFile &file)
-{
- QFile fileHandle(file.filePath.toString());
- fileHandle.open(QIODevice::WriteOnly);
- QTextStream stream(&fileHandle);
- stream << file.content;
- fileHandle.close();
-
- return true;
-}
-
-void FileQueue::filterFiles(const Utils::FilePaths keepFiles)
-{
- QtConcurrent::blockingFilter(m_queuedFiles, [keepFiles](const GeneratableFile &qf) {
- return keepFiles.contains(qf.filePath);
- });
-}
-
-QString readTemplate(const QString &templatePath)
-{
- QFile templatefile(templatePath);
- templatefile.open(QIODevice::ReadOnly);
- QTextStream stream(&templatefile);
- QString content = stream.readAll();
- templatefile.close();
-
- return content;
-}
-
-const QString projectEnvironmentVariable(const QString &key)
-{
- QString value = {};
-
- if (auto buildSystem = QmlBuildSystem::getStartupBuildSystem()) {
- auto envItems = buildSystem->environment();
- auto confEnv = std::find_if(envItems.begin(), envItems.end(), [key](EnvironmentItem &item) {
- return item.name == key;
- });
- if (confEnv != envItems.end())
- value = confEnv->value;
- }
-
- return value;
-}
-
-const QDir::Filters FILES_ONLY = QDir::Files;
-const QDir::Filters DIRS_ONLY = QDir::Dirs|QDir::Readable|QDir::NoDotAndDotDot;
-
-const char MAIN_CMAKEFILE_TEMPLATE_PATH[] = ":/boilerplatetemplates/qmlprojectmaincmakelists.tpl";
-const char QMLMODULES_FILE_TEMPLATE_PATH[] = ":/boilerplatetemplates/qmlprojectmodules.tpl";
-
-bool CmakeFileGenerator::prepare(const FilePath &rootDir, bool checkFileBelongs)
-{
- m_checkFileIsInProject = checkFileBelongs;
-
- FilePath contentDir = rootDir.pathAppended(DIRNAME_CONTENT);
- FilePath importDir = rootDir.pathAppended(DIRNAME_IMPORT);
- FilePath assetImportDir = rootDir.pathAppended(DIRNAME_ASSETIMPORT);
-
- generateModuleCmake(contentDir);
- generateImportCmake(importDir);
- generateImportCmake(assetImportDir);
- generateMainCmake(rootDir);
- generateEntryPointFiles(rootDir);
-
- return true;
-}
-
-const FileQueue CmakeFileGenerator::fileQueue() const
-{
- return m_fileQueue;
-}
-
-void CmakeFileGenerator::filterFileQueue(const Utils::FilePaths &keepFiles)
-{
- m_fileQueue.filterFiles(keepFiles);
-}
-
-bool CmakeFileGenerator::execute()
-{
- return m_fileQueue.writeQueuedFiles();
-}
-
-FilePaths CmakeFileGenerator::invalidFileNames() const
-{
- return m_invalidFileNames;
-}
-
-const char DO_NOT_EDIT_FILE_COMMENT[] = "### This file is automatically generated by Qt Design Studio.\n### Do not change\n\n";
-const char ADD_SUBDIR[] = "add_subdirectory(%1)\n";
-
-void CmakeFileGenerator::generateMainCmake(const FilePath &rootDir)
-{
- //TODO startupProject() may be a terrible way to try to get "current project". It's not necessarily the same thing at all.
- QString projectName = ProjectExplorer::ProjectManager::startupProject()->displayName();
- QString appName = projectName + "App";
-
- QString fileSection = "";
- const QString qtcontrolsConfFile = GenerateCmake::projectEnvironmentVariable(ENV_VARIABLE_CONTROLCONF);
- if (!qtcontrolsConfFile.isEmpty())
- fileSection = QString(" FILES\n %1").arg(qtcontrolsConfFile);
-
- QString cmakeFileContent = GenerateCmake::readTemplate(MAIN_CMAKEFILE_TEMPLATE_PATH)
- .arg(appName)
- .arg(fileSection);
-
- queueCmakeFile(rootDir, cmakeFileContent);
-
- QString subdirIncludes;
- subdirIncludes.append(QString(ADD_SUBDIR).arg(DIRNAME_CONTENT));
- subdirIncludes.append(QString(ADD_SUBDIR).arg(DIRNAME_IMPORT));
- if (rootDir.pathAppended(DIRNAME_ASSETIMPORT).exists())
- subdirIncludes.append(QString(ADD_SUBDIR).arg(DIRNAME_ASSETIMPORT));
-
- QString modulesAsPlugins;
- for (const QString &moduleName : m_moduleNames)
- modulesAsPlugins.append(" " + moduleName + "plugin\n");
-
- QString moduleFileContent = GenerateCmake::readTemplate(QMLMODULES_FILE_TEMPLATE_PATH)
- .arg(appName)
- .arg(subdirIncludes)
- .arg(modulesAsPlugins);
-
- m_fileQueue.queueFile(rootDir.pathAppended(FILENAME_MODULES), moduleFileContent);
-}
-
-void CmakeFileGenerator::generateImportCmake(const FilePath &dir, const QString &modulePrefix)
-{
- if (!dir.exists())
- return;
-
- QString fileContent;
-
- fileContent.append(DO_NOT_EDIT_FILE_COMMENT);
- FilePaths subDirs = dir.dirEntries(DIRS_ONLY);
- for (FilePath &subDir : subDirs) {
- if (isDirBlacklisted(subDir))
- continue;
- if (getDirectoryTreeQmls(subDir).isEmpty() && getDirectoryTreeResources(subDir).isEmpty())
- continue;
- fileContent.append(QString(ADD_SUBDIR).arg(subDir.fileName()));
- QString prefix = modulePrefix.isEmpty() ?
- QString(modulePrefix % subDir.fileName()) :
- QString(QString(modulePrefix + '.') + subDir.fileName());
- if (getDirectoryQmls(subDir).isEmpty()) {
- generateImportCmake(subDir, prefix);
- } else {
- generateModuleCmake(subDir, prefix);
- }
- }
-
- queueCmakeFile(dir, fileContent);
-}
-
-const char MODULEFILE_PROPERTY_SINGLETON[] = "QT_QML_SINGLETON_TYPE";
-const char MODULEFILE_PROPERTY_SET[] = "set_source_files_properties(%1\n PROPERTIES\n %2 %3\n)\n\n";
-const char MODULEFILE_TEMPLATE_PATH[] = ":/boilerplatetemplates/qmlprojectmodulecmakelists.tpl";
-
-void CmakeFileGenerator::generateModuleCmake(const FilePath &dir, const QString &uri)
-{
- QString fileTemplate = GenerateCmake::readTemplate(MODULEFILE_TEMPLATE_PATH);
-
- QString singletonContent;
- FilePaths qmldirFileList = dir.dirEntries({QStringList(FILENAME_QMLDIR), FILES_ONLY});
- if (!qmldirFileList.isEmpty()) {
- QStringList singletons = getSingletonsFromQmldirFile(qmldirFileList.first());
- for (QString &singleton : singletons) {
- singletonContent.append(QString(MODULEFILE_PROPERTY_SET).arg(singleton).arg(MODULEFILE_PROPERTY_SINGLETON).arg("true"));
- }
- }
-
- QStringList qmlFileList = getDirectoryTreeQmls(dir);
- QString qmlFiles;
- for (QString &qmlFile : qmlFileList)
- qmlFiles.append(QString(" %1\n").arg(qmlFile));
-
- QStringList resourceFileList = getDirectoryTreeResources(dir);
- QString resourceFiles;
- for (QString &resourceFile : resourceFileList)
- resourceFiles.append(QString(" %1\n").arg(resourceFile));
-
- QString moduleContent;
- if (!qmlFiles.isEmpty()) {
- moduleContent.append(QString(" QML_FILES\n%1").arg(qmlFiles));
- }
- if (!resourceFiles.isEmpty()) {
- moduleContent.append(QString(" RESOURCES\n%1").arg(resourceFiles));
- }
-
- QString moduleUri = uri.isEmpty() ?
- dir.fileName() :
- uri;
-
- QString moduleName = QString(moduleUri).replace('.', '_');
- m_moduleNames.append(moduleName);
-
- QString fileContent;
- fileContent.append(fileTemplate.arg(singletonContent, moduleName, moduleUri, moduleContent));
- queueCmakeFile(dir, fileContent);
-}
-
-QStringList CmakeFileGenerator::getSingletonsFromQmldirFile(const FilePath &filePath)
-{
- QStringList singletons;
- QFile f(filePath.toString());
- f.open(QIODevice::ReadOnly);
- QTextStream stream(&f);
-
- while (!stream.atEnd()) {
- QString line = stream.readLine();
- if (line.startsWith("singleton", Qt::CaseInsensitive)) {
- QStringList tokenizedLine = line.split(QRegularExpression("\\s+"));
- QString fileName = tokenizedLine.last();
- if (fileName.endsWith(".qml", Qt::CaseInsensitive)) {
- singletons.append(fileName);
- }
- }
- }
-
- f.close();
-
- return singletons;
-}
-
-QStringList CmakeFileGenerator::getDirectoryQmls(const FilePath &dir)
-{
- QStringList moduleFiles;
-
- const QStringList qmlFilesOnly(FILENAME_FILTER_QML);
- FilePaths allFiles = dir.dirEntries({qmlFilesOnly, FILES_ONLY});
- for (FilePath &file : allFiles) {
- if (includeFile(file)) {
- moduleFiles.append(file.fileName());
- }
- }
-
- return moduleFiles;
-}
-
-QStringList CmakeFileGenerator::getDirectoryResources(const FilePath &dir)
-{
- QStringList moduleFiles;
-
- FilePaths allFiles = dir.dirEntries(FILES_ONLY);
- for (FilePath &file : allFiles) {
- if (!file.fileName().endsWith(".qml", Qt::CaseInsensitive) && includeFile(file)) {
- moduleFiles.append(file.fileName());
- }
- }
-
- return moduleFiles;
-}
-
-QStringList CmakeFileGenerator::getDirectoryTreeQmls(const FilePath &dir)
-{
- QStringList qmlFileList;
-
- qmlFileList.append(getDirectoryQmls(dir));
-
- FilePaths subDirsList = dir.dirEntries(DIRS_ONLY);
- for (FilePath &subDir : subDirsList) {
- if (isDirBlacklisted(subDir))
- continue;
- QStringList subDirQmlFiles = getDirectoryTreeQmls(subDir);
- for (QString &qmlFile : subDirQmlFiles) {
- qmlFileList.append(subDir.fileName().append('/').append(qmlFile));
- }
- }
-
- return qmlFileList;
-}
-
-static void appendWidthQuotes(QStringList &list, const QString &string)
-{
- if (string.contains(' '))
- list.append("\"" + string + "\"");
- else
- list.append(string);
-}
-
-QStringList CmakeFileGenerator::getDirectoryTreeResources(const FilePath &dir)
-{
- QStringList resourceFileList;
-
- //for (const auto &string : getDirectoryResources(dir))
- // appendWidthQuotes(resourceFileList, string);
- resourceFileList.append(getDirectoryResources(dir));
-
- FilePaths subDirsList = dir.dirEntries(DIRS_ONLY);
- for (FilePath &subDir : subDirsList) {
- if (isDirBlacklisted(subDir))
- continue;
- QStringList subDirResources = getDirectoryTreeResources(subDir);
- for (QString &resource : subDirResources) {
- appendWidthQuotes(resourceFileList, subDir.fileName().append('/').append(resource));
- }
- }
-
- return resourceFileList;
-}
-
-void CmakeFileGenerator::queueCmakeFile(const FilePath &dir, const QString &content)
-{
- FilePath filePath = dir.pathAppended(FILENAME_CMAKELISTS);
- m_fileQueue.queueFile(filePath, content);
-}
-
-bool CmakeFileGenerator::isFileBlacklisted(const QString &fileName)
-{
- return (!fileName.compare(FILENAME_QMLDIR) ||
- !fileName.compare(FILENAME_CMAKELISTS));
-}
-
-bool CmakeFileGenerator::isDirBlacklisted(const FilePath &dir)
-{
- return (!dir.fileName().compare(DIRNAME_DESIGNER));
-}
-
-bool CmakeFileGenerator::validFileName(const Utils::FilePath &filePath)
-{
- QStringList invalidChars = {"!", "\"", "£", "$", "%", "!", "^", "&", "*", "(", ")", "=", "+",
- "'", ",", ";", ":", "#", "~", "{", "{", "[", "]", "<", ">", "?"};
- const QString baseName = filePath.baseName();
- for (const auto &c : invalidChars) {
- if (baseName.contains(c))
- return false;
- }
- return true;
-}
-
-bool CmakeFileGenerator::includeFile(const FilePath &filePath)
-{
- if (m_checkFileIsInProject) {
- ProjectExplorer::Project *project = ProjectExplorer::ProjectManager::startupProject();
- if (!project->isKnownFile(filePath))
- return false;
- }
-
- if (validFileName(filePath))
- return !isFileBlacklisted(filePath.fileName());
- else
- m_invalidFileNames.append(filePath);
-
- return false;
-}
-
-bool CmakeFileGenerator::generateEntryPointFiles(const FilePath &dir)
-{
- const QString qtcontrolsConf = GenerateCmake::projectEnvironmentVariable(ENV_VARIABLE_CONTROLCONF);
- if (!qtcontrolsConf.isEmpty())
- m_resourceFileLocations.append(qtcontrolsConf);
-
- bool cppOk = generateMainCpp(dir);
- bool qmlOk = generateMainQml(dir);
-
- return cppOk && qmlOk;
-}
-
-const char MAIN_CPPFILE_TEMPLATE_PATH[] = ":/boilerplatetemplates/qmlprojectmaincpp.tpl";
-const char MAIN_CPPFILE_HEADER_TEMPLATE_PATH[] = ":/boilerplatetemplates/qmlprojectmaincppheader.tpl";
-const char MAIN_CPPFILE_HEADER_PLUGIN_LINE[] = "Q_IMPORT_QML_PLUGIN(%1)\n";
-const char ENV_HEADER_TEMPLATE_PATH[] = ":/boilerplatetemplates/qmlprojectenvheader.tpl";
-const char ENV_HEADER_VARIABLE_LINE[] = " qputenv(\"%1\", \"%2\");\n";
-
-bool CmakeFileGenerator::generateMainCpp(const FilePath &dir)
-{
- FilePath srcDir = dir.pathAppended(DIRNAME_CPP);
-
- QString cppContent = GenerateCmake::readTemplate(MAIN_CPPFILE_TEMPLATE_PATH);
- FilePath cppFilePath = srcDir.pathAppended(FILENAME_MAINCPP);
- bool cppOk = m_fileQueue.queueFile(cppFilePath, cppContent);
-
- QString modulesAsPlugins;
- for (const QString &moduleName : m_moduleNames)
- modulesAsPlugins.append(
- QString(MAIN_CPPFILE_HEADER_PLUGIN_LINE).arg(moduleName + "Plugin"));
-
- QString headerContent = GenerateCmake::readTemplate(MAIN_CPPFILE_HEADER_TEMPLATE_PATH)
- .arg(modulesAsPlugins);
- FilePath headerFilePath = srcDir.pathAppended(FILENAME_MAINCPP_HEADER);
- bool pluginHeaderOk = m_fileQueue.queueFile(headerFilePath, headerContent);
-
- bool envHeaderOk = true;
- QString environment;
-
- if (auto buildSystem = QmlBuildSystem::getStartupBuildSystem()) {
- for (EnvironmentItem &envItem : buildSystem->environment()) {
- QString key = envItem.name;
- QString value = envItem.value;
- if (isFileResource(value))
- value.prepend(":/");
- environment.append(QString(ENV_HEADER_VARIABLE_LINE).arg(key).arg(value));
- }
- QString envHeaderContent = GenerateCmake::readTemplate(ENV_HEADER_TEMPLATE_PATH)
- .arg(environment);
- FilePath envHeaderPath = srcDir.pathAppended(FILENAME_ENV_HEADER);
- envHeaderOk = m_fileQueue.queueFile(envHeaderPath, envHeaderContent);
- }
-
- return cppOk && pluginHeaderOk && envHeaderOk;
-}
-
-const char MAIN_QMLFILE_TEMPLATE_PATH[] = ":/boilerplatetemplates/qmlprojectmainqml.tpl";
-
-bool CmakeFileGenerator::generateMainQml(const FilePath &dir)
-{
- QString content = GenerateCmake::readTemplate(MAIN_QMLFILE_TEMPLATE_PATH);
- FilePath filePath = dir.pathAppended(FILENAME_MAINQML);
- return m_fileQueue.queueFile(filePath, content);
-}
-
-bool CmakeFileGenerator::isFileResource(const QString &relativeFilePath)
-{
- if (m_resourceFileLocations.contains(relativeFilePath))
- return true;
-
- return false;
-}
-
-
-
-} //GenerateCmake
-} //QmlProjectManager
-
diff --git a/src/plugins/qmlprojectmanager/cmakegen/generatecmakelists.h b/src/plugins/qmlprojectmanager/cmakegen/generatecmakelists.h
deleted file mode 100644
index db025daa27..0000000000
--- a/src/plugins/qmlprojectmanager/cmakegen/generatecmakelists.h
+++ /dev/null
@@ -1,80 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
-
-#pragma once
-
-#include <projectexplorer/project.h>
-
-#include <utils/fileutils.h>
-
-namespace QmlProjectManager {
-namespace GenerateCmake {
-struct GeneratableFile {
- Utils::FilePath filePath;
- QString content;
- bool fileExists;
-};
-
-bool operator==(const GeneratableFile &left, const GeneratableFile &right);
-
-void generateMenuEntry(QObject *parent);
-void onGenerateCmakeLists();
-bool isErrorFatal(int error);
-int isProjectCorrectlyFormed(const Utils::FilePath &rootDir);
-void showProjectDirErrorDialog(int error);
-QString readTemplate(const QString &templatePath);
-const QString projectEnvironmentVariable(const QString &key);
-
-class FileQueue {
-public:
- bool queueFile(const Utils::FilePath &filePath, const QString &fileContent);
- const QVector<GeneratableFile> queuedFiles() const;
- bool writeQueuedFiles();
- void filterFiles(const Utils::FilePaths keepFiles);
-
-private:
- bool writeFile(const GeneratableFile &file);
-
-private:
- QVector<GeneratableFile> m_queuedFiles;
-};
-
-class CmakeFileGenerator {
-public:
- bool prepare(const Utils::FilePath &rootDir, bool check = true);
- const FileQueue fileQueue() const;
- void filterFileQueue(const Utils::FilePaths &keepFiles);
- bool execute();
- Utils::FilePaths invalidFileNames() const;
-
-private:
- void generateMainCmake(const Utils::FilePath &rootDir);
- void generateImportCmake(const Utils::FilePath &dir, const QString &modulePrefix = QString());
- void generateModuleCmake(const Utils::FilePath &dir, const QString &moduleUri = QString());
- bool generateEntryPointFiles(const Utils::FilePath &dir);
- bool generateMainCpp(const Utils::FilePath &dir);
- bool generateMainQml(const Utils::FilePath &dir);
- QStringList getDirectoryQmls(const Utils::FilePath &dir);
- QStringList getDirectoryResources(const Utils::FilePath &dir);
- QStringList getSingletonsFromQmldirFile(const Utils::FilePath &filePath);
- QStringList getDirectoryTreeQmls(const Utils::FilePath &dir);
- QStringList getDirectoryTreeResources(const Utils::FilePath &dir);
- void queueCmakeFile(const Utils::FilePath &filePath, const QString &content);
- bool isFileResource(const QString &relativeFilePath);
- bool isFileBlacklisted(const QString &fileName);
- bool isDirBlacklisted(const Utils::FilePath &dir);
- bool includeFile(const Utils::FilePath &filePath);
- bool validFileName(const Utils::FilePath &filePath);
-
-private:
- FileQueue m_fileQueue;
- QStringList m_resourceFileLocations;
- QStringList m_moduleNames;
- bool m_checkFileIsInProject;
-
- Utils::FilePaths m_invalidFileNames;
-};
-
-} //GenerateCmake
-
-} //QmlProjectManager
diff --git a/src/plugins/qmlprojectmanager/cmakegen/generatecmakelistsconstants.h b/src/plugins/qmlprojectmanager/cmakegen/generatecmakelistsconstants.h
deleted file mode 100644
index b983ce7fec..0000000000
--- a/src/plugins/qmlprojectmanager/cmakegen/generatecmakelistsconstants.h
+++ /dev/null
@@ -1,42 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
-
-#ifndef GENERATECMAKELISTSCONSTANTS_H
-#define GENERATECMAKELISTSCONSTANTS_H
-
-#pragma once
-
-namespace QmlProjectManager {
-namespace GenerateCmake {
-namespace Constants {
-
-const char DIRNAME_CONTENT[] = "content";
-const char DIRNAME_IMPORT[] = "imports";
-const char DIRNAME_ASSET[] = "assets";
-const char DIRNAME_ASSETIMPORT[] = "asset_imports";
-const char DIRNAME_CPP[] = "src";
-const char DIRNAME_DESIGNER[] = "designer";
-
-const char FILENAME_CMAKELISTS[] = "CMakeLists.txt";
-const char FILENAME_APPMAINQML[] = "App.qml";
-const char FILENAME_MAINQML[] = "main.qml";
-const char FILENAME_MAINCPP[] = "main.cpp";
-const char FILENAME_MAINCPP_HEADER[] = "import_qml_plugins.h";
-const char FILENAME_MODULES[] = "qmlmodules";
-const char FILENAME_QMLDIR[] = "qmldir";
-const char FILENAME_ENV_HEADER[] = "app_environment.h";
-
-const char FILENAME_SUFFIX_QMLPROJECT[] = "qmlproject";
-const char FILENAME_SUFFIX_QML[] = "qml";
-const char FILENAME_SUFFIX_USER[] = "user";
-
-const char FILENAME_FILTER_QMLPROJECT[] = "*.qmlproject";
-const char FILENAME_FILTER_QML[] = "*.qml";
-
-const char ENV_VARIABLE_CONTROLCONF[] = "QT_QUICK_CONTROLS_CONF";
-
-} //Constants
-} //GenerateCmake
-} //QmlProjectManager
-
-#endif // GENERATECMAKELISTSCONSTANTS_H
diff --git a/src/plugins/qmlprojectmanager/cmakegen/qmlprojectappmainqml.tpl b/src/plugins/qmlprojectmanager/cmakegen/qmlprojectappmainqml.tpl
deleted file mode 100644
index 35f8218dc6..0000000000
--- a/src/plugins/qmlprojectmanager/cmakegen/qmlprojectappmainqml.tpl
+++ /dev/null
@@ -1,14 +0,0 @@
-import QtQuick
-import QtQuick.Window
-
-Window {
- visible: true
- title: "%1"
- width: mainScreen.width
- height: mainScreen.height
-
- %1 {
- id: mainScreen
- }
-
-}
diff --git a/src/plugins/qmlprojectmanager/cmakegen/qmlprojectenvheader.tpl b/src/plugins/qmlprojectmanager/cmakegen/qmlprojectenvheader.tpl
deleted file mode 100644
index bf60adb4ac..0000000000
--- a/src/plugins/qmlprojectmanager/cmakegen/qmlprojectenvheader.tpl
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
- * This file is automatically generated by Qt Design Studio.
- * Do not change.
-*/
-
-#include <QGuiApplication>
-
-void set_qt_environment()
-{
-%1
-}
diff --git a/src/plugins/qmlprojectmanager/cmakegen/qmlprojectmaincmakelists.tpl b/src/plugins/qmlprojectmanager/cmakegen/qmlprojectmaincmakelists.tpl
deleted file mode 100644
index 9ca0ace63b..0000000000
--- a/src/plugins/qmlprojectmanager/cmakegen/qmlprojectmaincmakelists.tpl
+++ /dev/null
@@ -1,52 +0,0 @@
-cmake_minimum_required(VERSION 3.21.1)
-
-option(LINK_INSIGHT "Link Qt Insight Tracker library" ON)
-option(BUILD_QDS_COMPONENTS "Build design studio components" ON)
-
-project(%1 LANGUAGES CXX)
-
-set(CMAKE_AUTOMOC ON)
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-set(QT_QML_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/qml)
-set(QML_IMPORT_PATH ${QT_QML_OUTPUT_DIRECTORY}
- CACHE STRING "Import paths for Qt Creator's code model"
- FORCE
-)
-
-find_package(Qt6 6.2 REQUIRED COMPONENTS Core Gui Qml Quick)
-
-if (Qt6_VERSION VERSION_GREATER_EQUAL 6.3)
- qt_standard_project_setup()
-endif()
-
-qt_add_executable(%1 src/main.cpp)
-
-qt_add_resources(%1 "configuration"
- PREFIX "/"
-%2
-)
-
-target_link_libraries(%1 PRIVATE
- Qt${QT_VERSION_MAJOR}::Core
- Qt${QT_VERSION_MAJOR}::Gui
- Qt${QT_VERSION_MAJOR}::Quick
- Qt${QT_VERSION_MAJOR}::Qml
-)
-
-if (BUILD_QDS_COMPONENTS)
- include(${CMAKE_CURRENT_SOURCE_DIR}/qmlcomponents)
-endif()
-
-include(${CMAKE_CURRENT_SOURCE_DIR}/qmlmodules)
-
-if (LINK_INSIGHT)
- include(${CMAKE_CURRENT_SOURCE_DIR}/insight)
-endif ()
-
-include(GNUInstallDirs)
-install(TARGETS %1
- BUNDLE DESTINATION .
- LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
- RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
-)
-
diff --git a/src/plugins/qmlprojectmanager/cmakegen/qmlprojectmaincpp.tpl b/src/plugins/qmlprojectmanager/cmakegen/qmlprojectmaincpp.tpl
deleted file mode 100644
index 0ff9201d91..0000000000
--- a/src/plugins/qmlprojectmanager/cmakegen/qmlprojectmaincpp.tpl
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright (C) 2021 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
-
-#include <QGuiApplication>
-#include <QQmlApplicationEngine>
-
-#include "app_environment.h"
-#include "import_qml_plugins.h"
-
-int main(int argc, char *argv[])
-{
- set_qt_environment();
- QGuiApplication app(argc, argv);
-
- QQmlApplicationEngine engine;
- const QUrl url(u"qrc:/qt/qml/Main/main.qml"_qs);
- QObject::connect(
- &engine, &QQmlApplicationEngine::objectCreated, &app,
- [url](QObject *obj, const QUrl &objUrl) {
- if (!obj && url == objUrl)
- QCoreApplication::exit(-1);
- },
- Qt::QueuedConnection);
-
- engine.addImportPath(QCoreApplication::applicationDirPath() + "/qml");
- engine.addImportPath(":/");
-
- engine.load(url);
-
- if (engine.rootObjects().isEmpty()) {
- return -1;
- }
-
- return app.exec();
-}
diff --git a/src/plugins/qmlprojectmanager/cmakegen/qmlprojectmaincppheader.tpl b/src/plugins/qmlprojectmanager/cmakegen/qmlprojectmaincppheader.tpl
deleted file mode 100644
index 60cef09a82..0000000000
--- a/src/plugins/qmlprojectmanager/cmakegen/qmlprojectmaincppheader.tpl
+++ /dev/null
@@ -1,8 +0,0 @@
-/*
- * This file is automatically generated by Qt Design Studio.
- * Do not change.
-*/
-
-#include <QtQml/qqmlextensionplugin.h>
-
-%1
diff --git a/src/plugins/qmlprojectmanager/cmakegen/qmlprojectmainqml.tpl b/src/plugins/qmlprojectmanager/cmakegen/qmlprojectmainqml.tpl
deleted file mode 100644
index fa8f6d1cc1..0000000000
--- a/src/plugins/qmlprojectmanager/cmakegen/qmlprojectmainqml.tpl
+++ /dev/null
@@ -1,6 +0,0 @@
-import QtQuick
-import content
-
-App {
-}
-
diff --git a/src/plugins/qmlprojectmanager/cmakegen/qmlprojectmodulecmakelists.tpl b/src/plugins/qmlprojectmanager/cmakegen/qmlprojectmodulecmakelists.tpl
deleted file mode 100644
index 93573a1ed7..0000000000
--- a/src/plugins/qmlprojectmanager/cmakegen/qmlprojectmodulecmakelists.tpl
+++ /dev/null
@@ -1,12 +0,0 @@
-### This file is automatically generated by Qt Design Studio.
-### Do not change
-
-%1
-
-qt_add_library(%2 STATIC)
-qt6_add_qml_module(%2
- URI "%3"
- VERSION 1.0
- RESOURCE_PREFIX "/qt/qml"
-%4
-)
diff --git a/src/plugins/qmlprojectmanager/cmakegen/qmlprojectmodules.tpl b/src/plugins/qmlprojectmanager/cmakegen/qmlprojectmodules.tpl
deleted file mode 100644
index 2b74c49af3..0000000000
--- a/src/plugins/qmlprojectmanager/cmakegen/qmlprojectmodules.tpl
+++ /dev/null
@@ -1,16 +0,0 @@
-### This file is automatically generated by Qt Design Studio.
-### Do not change
-
-qt6_add_qml_module(%1
- URI "Main"
- VERSION 1.0
- RESOURCE_PREFIX "/qt/qml"
- NO_PLUGIN
- QML_FILES main.qml
-)
-
-%2
-
-target_link_libraries(%1 PRIVATE
-%3
-)
diff --git a/src/plugins/qmlprojectmanager/qmlprojectgen/qmlprojectgenerator.cpp b/src/plugins/qmlprojectmanager/qmlprojectgen/qmlprojectgenerator.cpp
index 32506183fa..0270a290fd 100644
--- a/src/plugins/qmlprojectmanager/qmlprojectgen/qmlprojectgenerator.cpp
+++ b/src/plugins/qmlprojectmanager/qmlprojectgen/qmlprojectgenerator.cpp
@@ -2,7 +2,7 @@
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "qmlprojectgenerator.h"
-#include "../cmakegen/generatecmakelists.h"
+#include "../cmakegen/cmakewriter.h"
#include "../qmlprojectmanagertr.h"
#include <coreplugin/documentmanager.h>
@@ -61,7 +61,7 @@ bool QmlProjectFileGenerator::execute()
importDirs.removeAll("content");
const QString importPaths = createDirArrayEntry("importPaths", importDirs);
- const QString fileContent = GenerateCmake::readTemplate(QMLPROJECT_FILE_TEMPLATE_PATH)
+ const QString fileContent = GenerateCmake::CMakeWriter::readTemplate(QMLPROJECT_FILE_TEMPLATE_PATH)
.arg(contentEntry, imageEntry, jsEntry, assetEntry, importPaths);
QFile file(m_targetFile.toString());
diff --git a/src/plugins/qmlprojectmanager/qmlprojectmanager.qbs b/src/plugins/qmlprojectmanager/qmlprojectmanager.qbs
index 271b8828ab..0fa49b5102 100644
--- a/src/plugins/qmlprojectmanager/qmlprojectmanager.qbs
+++ b/src/plugins/qmlprojectmanager/qmlprojectmanager.qbs
@@ -47,13 +47,6 @@ QtcPlugin {
name: "CMake Generator"
prefix: "cmakegen/"
files: [
- "generatecmakelists.cpp", "generatecmakelists.h",
- "generatecmakelistsconstants.h",
- "checkablefiletreeitem.cpp", "checkablefiletreeitem.h",
- "cmakegeneratordialogtreemodel.cpp", "cmakegeneratordialogtreemodel.h",
- "cmakegeneratordialog.cpp", "cmakegeneratordialog.h",
- "cmakeprojectconverter.cpp", "cmakeprojectconverter.h",
- "cmakeprojectconverterdialog.cpp", "cmakeprojectconverterdialog.h",
"cmakegenerator.cpp", "cmakegenerator.h",
"cmakewriter.cpp", "cmakewriter.h",
"cmakewriterv0.cpp", "cmakewriterv0.h",
diff --git a/src/plugins/qmlprojectmanager/qmlprojectplugin.cpp b/src/plugins/qmlprojectmanager/qmlprojectplugin.cpp
index 14ac6060b3..9cd1bae9c6 100644
--- a/src/plugins/qmlprojectmanager/qmlprojectplugin.cpp
+++ b/src/plugins/qmlprojectmanager/qmlprojectplugin.cpp
@@ -9,8 +9,7 @@
#include "qmlprojectmanagertr.h"
#include "qmlprojectrunconfiguration.h"
#include "projectfilecontenttools.h"
-#include "cmakegen/cmakeprojectconverter.h"
-#include "cmakegen/generatecmakelists.h"
+#include "cmakegen/cmakegenerator.h"
#include <coreplugin/actionmanager/actioncontainer.h>
#include <coreplugin/actionmanager/actionmanager.h>
@@ -389,10 +388,6 @@ void QmlProjectPlugin::initialize()
GenerateCmake::CMakeGenerator::createMenuAction(this);
}
-
- GenerateCmake::generateMenuEntry(this);
- if (ICore::isQtDesignStudio())
- GenerateCmake::CmakeProjectConverter::generateMenuEntry(this);
}
void QmlProjectPlugin::displayQmlLandingPage()