diff --git a/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.cpp b/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.cpp index 9bee8580ac1293fda50b99229a7f9dd9dffbb2d2..1bbe67b45bc3fdaabd3973d1c5efa24fee254917 100644 --- a/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.cpp +++ b/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.cpp @@ -129,7 +129,6 @@ GettingStartedWelcomePageWidget::GettingStartedWelcomePageWidget(QWidget *parent ui->prevFeatureBtn->setEnabled(false); connect(ui->nextFeatureBtn, SIGNAL(clicked()), this, SLOT(slotNextFeature())); connect(ui->prevFeatureBtn, SIGNAL(clicked()), this, SLOT(slotPrevFeature())); - QTimer::singleShot(0, this, SLOT(slotSetPrivateQmlExamples())); } GettingStartedWelcomePageWidget::~GettingStartedWelcomePageWidget() @@ -140,28 +139,35 @@ GettingStartedWelcomePageWidget::~GettingStartedWelcomePageWidget() delete ui; } -void GettingStartedWelcomePageWidget::slotSetPrivateQmlExamples() -{ - if (!ui->qmlExamplesButton->menu()) { - const QString resPath = Core::ICore::instance()->resourcePath(); - updateQmlExamples(resPath, resPath); - } - } -void GettingStartedWelcomePageWidget::updateCppExamples(const QString &examplePath, - const QString &sourcePath, - const QString &demoXml) +void GettingStartedWelcomePageWidget::updateExamples(const QString &examplePath, + const QString &demosPath, + const QString &sourcePath) { + QString demoXml = demosPath + "/qtdemo/xml/examples.xml"; + if (!QFile::exists(demoXml)) { + demoXml = sourcePath + "/demos/qtdemo/xml/examples.xml"; + if (!QFile::exists(demoXml)) + return; + } QFile description(demoXml); if (!description.open(QFile::ReadOnly)) return; - ui->cppExamplesButton->setEnabled(true);; - ui->cppExamplesButton->setText(tr("Choose an Example...")); + const QString dropDownLabel = tr("Choose an Example..."); + + ui->qmlExamplesButton->setEnabled(true); + ui->qmlExamplesButton->setText(dropDownLabel); + + QMenu *qmlMenu = new QMenu(ui->qmlExamplesButton); + ui->qmlExamplesButton->setMenu(qmlMenu); - QMenu *menu = new QMenu(ui->cppExamplesButton); - ui->cppExamplesButton->setMenu(menu); + ui->cppExamplesButton->setEnabled(true); + ui->cppExamplesButton->setText(dropDownLabel); + + QMenu *cppMenu = new QMenu(ui->cppExamplesButton); + ui->cppExamplesButton->setMenu(cppMenu); QMenu *subMenu = 0; bool inExamples = false; @@ -170,104 +176,62 @@ void GettingStartedWelcomePageWidget::updateCppExamples(const QString &examplePa while (!reader.atEnd()) { switch (reader.readNext()) { - case QXmlStreamReader::StartElement: + case QXmlStreamReader::StartElement: if (reader.name() == QLatin1String("category")) { QString name = reader.attributes().value(QLatin1String("name")).toString(); if (name.contains(QLatin1String("tutorial"))) break; dirName = reader.attributes().value(QLatin1String("dirname")).toString(); - subMenu = menu->addMenu(name); + subMenu = new QMenu(name); inExamples = true; } if (inExamples && reader.name() == QLatin1String("example")) { const QChar slash = QLatin1Char('/'); const QString name = reader.attributes().value(QLatin1String("name")).toString(); + const bool isQml = reader.attributes().value(QLatin1String("qml")).toString() == "true"; const QString fn = reader.attributes().value(QLatin1String("filename")).toString(); - const QString relativeProPath = slash + dirName + slash + fn + slash + fn + QLatin1String(".pro"); + const QString extension = isQml ? QLatin1String(".qmlproject") : QLatin1String(".pro"); + const QString relativeProPath = slash + dirName + slash + fn + slash + fn + extension; + QString fileName = examplePath + relativeProPath; if (!QFile::exists(fileName)) fileName = sourcePath + QLatin1String("/examples") + relativeProPath; + QString dirName1 = dirName; dirName1.replace(slash, QLatin1Char('-')); QString helpPath = QLatin1String("qthelp://com.trolltech.qt/qdoc/") + - dirName1 + - QLatin1Char('-') + fn + QLatin1String(".html"); + dirName1 + + QLatin1Char('-') + fn + QLatin1String(".html"); + + QAction *exampleAction; + if (isQml) + exampleAction = qmlMenu->addAction(name); + else + exampleAction = subMenu->addAction(name); - QAction *exampleAction = subMenu->addAction(name); connect(exampleAction, SIGNAL(triggered()), SLOT(slotOpenExample())); exampleAction->setProperty(ExamplePathPropertyName, fileName); exampleAction->setProperty(HelpPathPropertyName, helpPath); + } break; - case QXmlStreamReader::EndElement: - if (reader.name() == QLatin1String("category")) + case QXmlStreamReader::EndElement: + if (reader.name() == QLatin1String("category")) { + if (subMenu->actions().isEmpty()) + delete subMenu; + else + cppMenu->addMenu(subMenu); + inExamples = false; + } break; - default: + default: break; } } } -void GettingStartedWelcomePageWidget::updateQmlExamples(const QString &examplePath, - const QString &sourcePath) -{ - ui->qmlExamplesButton->setText(tr("Choose an Example...")); - - 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); - } - } - - if (!exampleProjects.isEmpty()) { - QMenu *menu = new QMenu(ui->qmlExamplesButton); - ui->qmlExamplesButton->setMenu(menu); - - 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, - const QString &demosPath, - const QString &sourcePath) -{ - QString demoxml = demosPath + "/qtdemo/xml/examples.xml"; - if (!QFile::exists(demoxml)) { - demoxml = sourcePath + "/demos/qtdemo/xml/examples.xml"; - if (!QFile::exists(demoxml)) - return; - } - updateCppExamples(examplePath, sourcePath, demoxml); - updateQmlExamples(examplePath, sourcePath); -} - - namespace { void copyRecursive(const QDir& from, const QDir& to, const QString& dir) { diff --git a/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.h b/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.h index 8a575e795070bcb7d3760f2cce3b76d0fa8fa918..ea0fec1d49a9d93abfbff55a91084c11082dd7cb 100644 --- a/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.h +++ b/src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.h @@ -94,7 +94,6 @@ private slots: void slotNextFeature(); void slotPrevFeature(); void slotCreateNewProject(); - void slotSetPrivateQmlExamples(); void addToFeatures(const RssItem&); void showFeature(int feature = -1); @@ -103,11 +102,6 @@ signals: private: QStringList tipsOfTheDay(); - void updateCppExamples(const QString &examplePath, - const QString &sourcePath, - const QString &demoXml); - void updateQmlExamples(const QString &examplePath, - const QString &sourcePath); Ui::GettingStartedWelcomePageWidget *ui; int m_currentTip; int m_currentFeature;