From f4ae2546618caa7c2932918dacc1b1d181e9919c Mon Sep 17 00:00:00 2001 From: Daniel Molkentin Date: Fri, 25 Nov 2011 13:40:10 +0100 Subject: Copy dependencies specified in manifest file. Change-Id: I7e97af90cb7cd4c93abe2330cfbd92581b2be22e Reviewed-by: Eike Ziller --- .../qtcreator/welcomescreen/widgets/ExampleDelegate.qml | 2 +- src/plugins/qtsupport/exampleslistmodel.cpp | 17 +++++++++++++---- src/plugins/qtsupport/exampleslistmodel.h | 3 ++- src/plugins/qtsupport/gettingstartedwelcomepage.cpp | 17 ++++++++++++++--- src/plugins/qtsupport/gettingstartedwelcomepage.h | 5 +++-- 5 files changed, 33 insertions(+), 11 deletions(-) diff --git a/share/qtcreator/welcomescreen/widgets/ExampleDelegate.qml b/share/qtcreator/welcomescreen/widgets/ExampleDelegate.qml index 72a30ae622..fb5769d624 100644 --- a/share/qtcreator/welcomescreen/widgets/ExampleDelegate.qml +++ b/share/qtcreator/welcomescreen/widgets/ExampleDelegate.qml @@ -294,7 +294,7 @@ Item { script: { delegate.state = ""; if (model.hasSourceCode) - gettingStarted.openProject(model.projectPath, model.filesToOpen, model.docUrl) + gettingStarted.openProject(model.projectPath, model.filesToOpen, model.docUrl, model.dependencies) else gettingStarted.openSplitHelp(model.docUrl); } diff --git a/src/plugins/qtsupport/exampleslistmodel.cpp b/src/plugins/qtsupport/exampleslistmodel.cpp index 9c0d967fa3..88820bea26 100644 --- a/src/plugins/qtsupport/exampleslistmodel.cpp +++ b/src/plugins/qtsupport/exampleslistmodel.cpp @@ -65,6 +65,7 @@ ExamplesListModel::ExamplesListModel(QObject *parent) : roleNames[Difficulty] = "difficulty"; roleNames[Type] = "type"; roleNames[HasSourceCode] = "hasSourceCode"; + roleNames[Dependencies] = "dependencies"; setRoleNames(roleNames); connect(QtVersionManager::instance(), SIGNAL(updateExamples(QString,QString,QString)), @@ -73,7 +74,7 @@ ExamplesListModel::ExamplesListModel(QObject *parent) : SLOT(helpInitialized())); } -static inline QString fixSTringForTags(const QString &string) +static inline QString fixStringForTags(const QString &string) { QString returnString = string; returnString.remove(QLatin1String("")); @@ -104,7 +105,9 @@ QList ExamplesListModel::parseExamples(QXmlStreamReader* reader, co } else if (reader->name() == QLatin1String("fileToOpen")) { item.filesToOpen.append(projectsOffset + '/' + reader->readElementText(QXmlStreamReader::ErrorOnUnexpectedElement)); } else if (reader->name() == QLatin1String("description")) { - item.description = fixSTringForTags(reader->readElementText(QXmlStreamReader::ErrorOnUnexpectedElement)); + item.description = fixStringForTags(reader->readElementText(QXmlStreamReader::ErrorOnUnexpectedElement)); + } else if (reader->name() == QLatin1String("dependency")) { + item.dependencies.append(projectsOffset + '/' + reader->readElementText(QXmlStreamReader::ErrorOnUnexpectedElement)); } else if (reader->name() == QLatin1String("tags")) { item.tags = reader->readElementText(QXmlStreamReader::ErrorOnUnexpectedElement).split(","); m_tags.append(item.tags); @@ -144,7 +147,9 @@ QList ExamplesListModel::parseDemos(QXmlStreamReader* reader, const } else if (reader->name() == QLatin1String("fileToOpen")) { item.filesToOpen.append(projectsOffset + '/' + reader->readElementText(QXmlStreamReader::ErrorOnUnexpectedElement)); } else if (reader->name() == QLatin1String("description")) { - item.description = fixSTringForTags(reader->readElementText(QXmlStreamReader::ErrorOnUnexpectedElement)); + item.description = fixStringForTags(reader->readElementText(QXmlStreamReader::ErrorOnUnexpectedElement)); + } else if (reader->name() == QLatin1String("dependency")) { + item.dependencies.append(projectsOffset + '/' + reader->readElementText(QXmlStreamReader::ErrorOnUnexpectedElement)); } else if (reader->name() == QLatin1String("tags")) { item.tags = reader->readElementText(QXmlStreamReader::ErrorOnUnexpectedElement).split(","); } @@ -183,7 +188,9 @@ QList ExamplesListModel::parseTutorials(QXmlStreamReader* reader, c } else if (reader->name() == QLatin1String("fileToOpen")) { item.filesToOpen.append(projectsOffset + '/' + reader->readElementText(QXmlStreamReader::ErrorOnUnexpectedElement)); } else if (reader->name() == QLatin1String("description")) { - item.description = fixSTringForTags(reader->readElementText(QXmlStreamReader::ErrorOnUnexpectedElement)); + item.description = fixStringForTags(reader->readElementText(QXmlStreamReader::ErrorOnUnexpectedElement)); + } else if (reader->name() == QLatin1String("dependency")) { + item.dependencies.append(projectsOffset + '/' + reader->readElementText(QXmlStreamReader::ErrorOnUnexpectedElement)); } else if (reader->name() == QLatin1String("tags")) { item.tags = reader->readElementText(QXmlStreamReader::ErrorOnUnexpectedElement).split(","); } @@ -362,6 +369,8 @@ QVariant ExamplesListModel::data(const QModelIndex &index, int role) const return item.tags; case Difficulty: return item.difficulty; + case Dependencies: + return item.dependencies; case HasSourceCode: return item.hasSourceCode; case Type: diff --git a/src/plugins/qtsupport/exampleslistmodel.h b/src/plugins/qtsupport/exampleslistmodel.h index 2c9fad97b7..12db413af3 100644 --- a/src/plugins/qtsupport/exampleslistmodel.h +++ b/src/plugins/qtsupport/exampleslistmodel.h @@ -42,7 +42,7 @@ namespace QtSupport { namespace Internal { enum ExampleRoles { Name=Qt::UserRole, ProjectPath, Description, ImageUrl, - DocUrl, FilesToOpen, Tags, Difficulty, HasSourceCode, Type }; + DocUrl, FilesToOpen, Tags, Difficulty, HasSourceCode, Type, Dependencies }; enum InstructionalType { Example=0, Demo, Tutorial }; @@ -56,6 +56,7 @@ struct ExampleItem { QString docUrl; QStringList filesToOpen; QStringList tags; + QStringList dependencies; int difficulty; bool hasSourceCode; }; diff --git a/src/plugins/qtsupport/gettingstartedwelcomepage.cpp b/src/plugins/qtsupport/gettingstartedwelcomepage.cpp index de33e6e959..3f96fc4ca1 100644 --- a/src/plugins/qtsupport/gettingstartedwelcomepage.cpp +++ b/src/plugins/qtsupport/gettingstartedwelcomepage.cpp @@ -47,6 +47,7 @@ #include #include #include +#include #include #include #include @@ -254,7 +255,7 @@ QStringList GettingStartedWelcomePage::tagList() const return examplesModel()->tags(); } -QString GettingStartedWelcomePage::copyToAlternativeLocation(const QFileInfo& proFileInfo, QStringList &filesToOpen) +QString GettingStartedWelcomePage::copyToAlternativeLocation(const QFileInfo& proFileInfo, QStringList &filesToOpen, const QStringList& dependencies) { const QString projectDir = proFileInfo.canonicalPath(); QDialog d(Core::ICore::instance()->mainWindow()); @@ -309,6 +310,15 @@ QString GettingStartedWelcomePage::copyToAlternativeLocation(const QFileInfo& pr for (it = filesToOpen.begin(); it != filesToOpen.end(); ++it) it->replace(projectDir, targetDir); + foreach (const QString &dependency, dependencies) { + QString dirName = QDir(dependency).dirName(); + if (!Utils::FileUtils::copyRecursively(dependency, targetDir + QDir::separator()+ dirName, &error)) { + QMessageBox::warning(Core::ICore::instance()->mainWindow(), tr("Cannot Copy Project"), error); + // do not fail, just warn; + } + } + + return targetDir+ '/' + proFileInfo.fileName(); } else { QMessageBox::warning(Core::ICore::instance()->mainWindow(), tr("Cannot Copy Project"), error); @@ -320,7 +330,8 @@ QString GettingStartedWelcomePage::copyToAlternativeLocation(const QFileInfo& pr } -void GettingStartedWelcomePage::openProject(const QString &projectFile, const QStringList &additionalFilesToOpen, const QUrl &help) +void GettingStartedWelcomePage::openProject(const QString &projectFile, const QStringList &additionalFilesToOpen, + const QUrl &help, const QStringList &dependencies) { QString proFile = projectFile; if (proFile.isEmpty()) @@ -330,7 +341,7 @@ void GettingStartedWelcomePage::openProject(const QString &projectFile, const QS QFileInfo proFileInfo(proFile); // If the Qt is a distro Qt on Linux, it will not be writable, hence compilation will fail if (!proFileInfo.isWritable()) - proFile = copyToAlternativeLocation(proFileInfo, filesToOpen); + proFile = copyToAlternativeLocation(proFileInfo, filesToOpen, dependencies); // don't try to load help and files if loading the help request is being cancelled QString errorMessage; diff --git a/src/plugins/qtsupport/gettingstartedwelcomepage.h b/src/plugins/qtsupport/gettingstartedwelcomepage.h index 0c84f6420a..02715e6219 100644 --- a/src/plugins/qtsupport/gettingstartedwelcomepage.h +++ b/src/plugins/qtsupport/gettingstartedwelcomepage.h @@ -68,12 +68,13 @@ signals: public slots: void openSplitHelp(const QUrl &help); - void openProject(const QString& projectFile, const QStringList& additionalFilesToOpen, const QUrl& help); + void openProject(const QString& projectFile, const QStringList& additionalFilesToOpen, + const QUrl& help, const QStringList &dependencies); void updateTagsModel(); private: ExamplesListModel *examplesModel() const; - QString copyToAlternativeLocation(const QFileInfo &fileInfo, QStringList &filesToOpen); + QString copyToAlternativeLocation(const QFileInfo &fileInfo, QStringList &filesToOpen, const QStringList &dependencies); QDeclarativeEngine *m_engine; bool m_showExamples; }; -- cgit v1.2.1