diff --git a/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.cpp b/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.cpp index b0c2f56aed8febf89c9a53bb87936f51ed6d4fb0..acd19d29a38fda0b14dfbaf5ed4ef9b1b4fcc2cf 100644 --- a/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.cpp +++ b/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.cpp @@ -124,15 +124,15 @@ void GettingStartedWelcomePageWidget::updateCppExamples(const QString &examplePa while (!reader.atEnd()) { switch (reader.readNext()) { case QXmlStreamReader::StartElement: - if (reader.name() == "category") { + if (reader.name() == QLatin1String("category")) { QString name = reader.attributes().value(QLatin1String("name")).toString(); - if (name.contains("tutorial")) + if (name.contains(QLatin1String("tutorial"))) break; dirName = reader.attributes().value(QLatin1String("dirname")).toString(); subMenu = menu->addMenu(name); inExamples = true; } - if (inExamples && reader.name() == "example") { + if (inExamples && reader.name() == QLatin1String("example")) { const QChar slash = QLatin1Char('/'); const QString name = reader.attributes().value(QLatin1String("name")).toString(); const QString fn = reader.attributes().value(QLatin1String("filename")).toString(); @@ -152,7 +152,7 @@ void GettingStartedWelcomePageWidget::updateCppExamples(const QString &examplePa } break; case QXmlStreamReader::EndElement: - if (reader.name() == "category") + if (reader.name() == QLatin1String("category")) inExamples = false; break; default: @@ -161,32 +161,43 @@ void GettingStartedWelcomePageWidget::updateCppExamples(const QString &examplePa } } -void GettingStartedWelcomePageWidget::updateQmlExamples(const QString &examplePath) +void GettingStartedWelcomePageWidget::updateQmlExamples(const QString &examplePath, + const QString &sourcePath) { - QDir declarativeDir(examplePath + "/declarative"); - - if (!declarativeDir.exists()) - return; - - ui->qmlExamplesButton->setEnabled(true);; ui->qmlExamplesButton->setText(tr("Choose an example...")); - - QList<QFileInfo> examples = declarativeDir.entryInfoList(QStringList(), QDir::AllDirs|QDir::NoDotAndDotDot, QDir::Name); - QMenu *menu = new QMenu(ui->qmlExamplesButton); ui->qmlExamplesButton->setMenu(menu); - foreach(const QFileInfo &example, examples) { - const QString exampleProject = example.absoluteFilePath()+'/'+example.fileName()+QLatin1String(".qmlproject"); - if (QFile::exists(exampleProject)) { - QAction *exampleAction = menu->addAction(example.fileName()); - connect(exampleAction, SIGNAL(triggered()), SLOT(slotOpenExample())); - exampleAction->setProperty(ExamplePathPropertyName, exampleProject); - // FIXME once we have help for QML examples - // exampleAction->setProperty(HelpPathPropertyName, helpPath); + QStringList roots; + roots << (examplePath + QLatin1String("/declarative")) + << (sourcePath + QLatin1String("/examples/declarative")); + QMap<QString, QString> exampleProjects; + + foreach (const QString &root, roots) { + QList<QFileInfo> examples = QDir(root).entryInfoList(QStringList(), QDir::AllDirs|QDir::NoDotAndDotDot, QDir::Name); + foreach(const QFileInfo &example, examples) { + const QString fileName = example.fileName(); + if (exampleProjects.contains(fileName)) + continue; + const QString exampleProject = example.absoluteFilePath() + + QLatin1Char('/') + fileName + + QLatin1String(".qmlproject"); + if (!QFile::exists(exampleProject)) + continue; + exampleProjects.insert(fileName, exampleProject); } } + QMapIterator<QString, QString> it(exampleProjects); + while (it.hasNext()) { + it.next(); + QAction *exampleAction = menu->addAction(it.key()); + connect(exampleAction, SIGNAL(triggered()), SLOT(slotOpenExample())); + exampleAction->setProperty(ExamplePathPropertyName, it.value()); + // FIXME once we have help for QML examples + // exampleAction->setProperty(HelpPathPropertyName, helpPath); + } + ui->qmlExamplesButton->setEnabled(!exampleProjects.isEmpty()); } void GettingStartedWelcomePageWidget::updateExamples(const QString &examplePath, @@ -200,7 +211,7 @@ void GettingStartedWelcomePageWidget::updateExamples(const QString &examplePath, return; } updateCppExamples(examplePath, sourcePath, demoxml); - updateQmlExamples(examplePath); + updateQmlExamples(examplePath, sourcePath); } diff --git a/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.h b/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.h index 872fc52f464b7242efcb6a20e920509f69db7751..5d730953c54881ac7f3eeacf3a2e5c705dafef2b 100644 --- a/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.h +++ b/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.h @@ -64,7 +64,8 @@ private: void updateCppExamples(const QString &examplePath, const QString &sourcePath, const QString &demoXml); - void updateQmlExamples(const QString &examplePath); + void updateQmlExamples(const QString &examplePath, + const QString &sourcePath); Ui::GettingStartedWelcomePageWidget *ui; int m_currentTip;