summaryrefslogtreecommitdiff
path: root/src/plugins/cpptools/cppprojects.h
diff options
context:
space:
mode:
authorNikolai Kosjar <nikolai.kosjar@digia.com>2014-07-30 17:13:45 +0200
committerErik Verbruggen <erik.verbruggen@digia.com>2014-08-20 10:28:35 +0200
commit6b5298faf9f605e76e1872c89c594ab1cb9b5363 (patch)
tree5cf5d018005d75bb072c3d2a006f9a4c72130b28 /src/plugins/cpptools/cppprojects.h
parentb8a6a4dd4e2a02d9afd54303550570f1fcbcb586 (diff)
downloadqt-creator-6b5298faf9f605e76e1872c89c594ab1cb9b5363.tar.gz
CppTools: Move Project{Part,Info} to new cppprojects.{h,cpp}
Change-Id: Ieff216017b9da1e6a12121688ea9572bdd81fd9b Reviewed-by: Erik Verbruggen <erik.verbruggen@digia.com>
Diffstat (limited to 'src/plugins/cpptools/cppprojects.h')
-rw-r--r--src/plugins/cpptools/cppprojects.h164
1 files changed, 164 insertions, 0 deletions
diff --git a/src/plugins/cpptools/cppprojects.h b/src/plugins/cpptools/cppprojects.h
new file mode 100644
index 0000000000..da11f695ab
--- /dev/null
+++ b/src/plugins/cpptools/cppprojects.h
@@ -0,0 +1,164 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+****************************************************************************/
+
+#ifndef CPPPROJECTPART_H
+#define CPPPROJECTPART_H
+
+#include "cpptools_global.h"
+
+#include "cppprojectfile.h"
+
+#include <projectexplorer/project.h>
+#include <projectexplorer/toolchain.h>
+
+#include <QPointer>
+
+namespace CppTools {
+
+class CPPTOOLS_EXPORT ProjectPart
+{
+public:
+ typedef QSharedPointer<ProjectPart> Ptr;
+
+public:
+ ProjectPart();
+
+ void evaluateToolchain(const ProjectExplorer::ToolChain *tc,
+ const QStringList &cxxflags,
+ const QStringList &cflags,
+ const Utils::FileName &sysRoot);
+
+public:
+ enum CVersion {
+ C89,
+ C99,
+ C11
+ };
+
+ enum CXXVersion {
+ CXX98,
+ CXX11
+ };
+
+ enum CXXExtension {
+ NoExtensions = 0x0,
+ GnuExtensions = 0x1,
+ MicrosoftExtensions = 0x2,
+ BorlandExtensions = 0x4,
+ OpenMPExtensions = 0x8,
+
+ AllExtensions = GnuExtensions | MicrosoftExtensions | BorlandExtensions | OpenMPExtensions
+ };
+ Q_DECLARE_FLAGS(CXXExtensions, CXXExtension)
+
+ enum QtVersion {
+ UnknownQt = -1,
+ NoQt = 0,
+ Qt4 = 1,
+ Qt5 = 2
+ };
+
+ class HeaderPath
+ {
+ public:
+ enum Type { InvalidPath, IncludePath, FrameworkPath };
+
+ QString path;
+ Type type;
+
+ HeaderPath(): type(InvalidPath) {}
+ HeaderPath(const QString &path, Type type): path(path), type(type) {}
+
+ bool isValid() const { return type != InvalidPath; }
+ bool isFrameworkPath() const { return type == FrameworkPath; }
+
+ bool operator==(const HeaderPath &other) const
+ { return path == other.path && type == other.type; }
+
+ bool operator!=(const HeaderPath &other) const
+ { return !(*this == other); }
+ };
+ typedef QList<HeaderPath> HeaderPaths;
+
+public:
+ static QByteArray readProjectConfigFile(const ProjectPart::Ptr &part);
+
+public:
+ QString displayName;
+ QString projectFile;
+ ProjectExplorer::Project *project;
+ QList<ProjectFile> files;
+ QString projectConfigFile; // currently only used by the Generic Project Manager
+ QByteArray projectDefines;
+ QByteArray toolchainDefines;
+ QList<HeaderPath> headerPaths;
+ QStringList precompiledHeaders;
+ CVersion cVersion;
+ CXXVersion cxxVersion;
+ CXXExtensions cxxExtensions;
+ QtVersion qtVersion;
+ ProjectExplorer::ToolChain::WarningFlags cWarningFlags;
+ ProjectExplorer::ToolChain::WarningFlags cxxWarningFlags;
+};
+
+inline uint qHash(const ProjectPart::HeaderPath &key, uint seed = 0)
+{ return ((qHash(key.path) << 2) | key.type) ^ seed; }
+
+class CPPTOOLS_EXPORT ProjectInfo
+{
+public:
+ ProjectInfo();
+ ProjectInfo(QPointer<ProjectExplorer::Project> project);
+
+ operator bool() const;
+ bool isValid() const;
+ bool isNull() const;
+
+ QPointer<ProjectExplorer::Project> project() const;
+ const QList<ProjectPart::Ptr> projectParts() const;
+
+ void appendProjectPart(const ProjectPart::Ptr &part);
+ void clearProjectParts();
+
+ const ProjectPart::HeaderPaths headerPaths() const;
+ const QStringList sourceFiles() const;
+ const QByteArray defines() const;
+
+private:
+ QPointer<ProjectExplorer::Project> m_project;
+ QList<ProjectPart::Ptr> m_projectParts;
+ // The members below are (re)calculated from the project parts once a part is appended.
+ ProjectPart::HeaderPaths m_headerPaths;
+ QStringList m_sourceFiles;
+ QByteArray m_defines;
+};
+
+} // namespace CppTools
+
+#endif // CPPPROJECTPART_H