aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/qmlprojectmanager/buildsystem/qmlbuildsystem.h
blob: e3f9b99adb074eb27cbc9c02049150ddf484b9aa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0+ OR GPL-3.0 WITH Qt-GPL-exception-1.0
// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0+ OR GPL-3.0 WITH Qt-GPL-exception-1.0

#pragma once

#include "../qmlprojectmanager_global.h"
#include <projectexplorer/buildsystem.h>

#include "qmlprojectmanager/cmakegen/cmakegenerator.h"

namespace QmlProjectManager {

class QmlProject;
class QmlProjectItem;
class QmlProjectFile;

class QMLPROJECTMANAGER_EXPORT QmlBuildSystem : public ProjectExplorer::BuildSystem
{
    Q_OBJECT

public:
    explicit QmlBuildSystem(ProjectExplorer::Target *target);
    ~QmlBuildSystem() = default;

    void triggerParsing() final;

    bool supportsAction(ProjectExplorer::Node *context,
                        ProjectExplorer::ProjectAction action,
                        const ProjectExplorer::Node *node) const override;
    bool addFiles(ProjectExplorer::Node *context,
                  const Utils::FilePaths &filePaths,
                  Utils::FilePaths *notAdded = nullptr) override;
    bool deleteFiles(ProjectExplorer::Node *context, const Utils::FilePaths &filePaths) override;
    bool renameFile(ProjectExplorer::Node *context,
                    const Utils::FilePath &oldFilePath,
                    const Utils::FilePath &newFilePath) override;

    bool updateProjectFile();

    QString name() const override { return QLatin1String("qml"); }

    QmlProject *qmlProject() const;

    QVariant additionalData(Utils::Id id) const override;

    enum class RefreshOptions {
        NoFileRefresh,
        Files,
        Project,
    };

    void refresh(RefreshOptions options);

    bool setMainFileInProjectFile(const Utils::FilePath &newMainFilePath);
    bool setMainUiFileInProjectFile(const Utils::FilePath &newMainUiFilePath);
    bool setMainUiFileInMainFile(const Utils::FilePath &newMainUiFilePath);

    Utils::FilePath canonicalProjectDir() const;
    QString mainFile() const;
    QString mainUiFile() const;
    Utils::FilePath mainFilePath() const;
    Utils::FilePath mainUiFilePath() const;

    bool qtForMCUs() const;
    bool qt6Project() const;

    Utils::FilePath targetDirectory() const;
    Utils::FilePath targetFile(const Utils::FilePath &sourceFile) const;

    Utils::EnvironmentItems environment() const;

    QStringList importPaths() const;
    QStringList absoluteImportPaths();
    QStringList customImportPaths() const;
    QStringList customFileSelectors() const;

    bool multilanguageSupport() const;
    QStringList supportedLanguages() const;
    void setSupportedLanguages(QStringList languages);

    QString primaryLanguage() const;
    void setPrimaryLanguage(QString language);

    bool enableCMakeGeneration() const;
    void setEnableCMakeGeneration(bool enable);

    bool forceFreeType() const;
    bool widgetApp() const;

    QStringList shaderToolArgs() const;
    QStringList shaderToolFiles() const;
    Utils::FilePaths files() const;

    QString versionQt() const;
    QString versionQtQuick() const;
    QString versionDesignStudio() const;

    bool addFiles(const QStringList &filePaths);
    void refreshProjectFile();

    void refreshFiles(const QSet<QString> &added, const QSet<QString> &removed);

    bool blockFilesUpdate() const;
    void setBlockFilesUpdate(bool newBlockFilesUpdate);

    Utils::FilePath getStartupQmlFileWithFallback() const;

    static QmlBuildSystem *getStartupBuildSystem();

signals:
    void projectChanged();

private:
    bool setFileSettingInProjectFile(const QString &setting,
                                     const Utils::FilePath &mainFilePath,
                                     const QString &oldFile);

    QSharedPointer<QmlProjectItem> m_projectItem;
    bool m_blockFilesUpdate = false;

    void initProjectItem();
    void parseProjectFiles();
    void generateProjectTree();

    void registerMenuButtons();
    void updateDeploymentData();
    friend class FilesUpdateBlocker;

    GenerateCmake::CMakeGenerator* m_cmakeGen;
};

} // namespace QmlProjectManager