OSDN Git Service

Add QML examples to welcome page
authorDaniel Molkentin <daniel.molkentin@nokia.com>
Thu, 29 Apr 2010 12:08:09 +0000 (14:08 +0200)
committerDaniel Molkentin <daniel.molkentin@nokia.com>
Thu, 29 Apr 2010 12:39:26 +0000 (14:39 +0200)
Reviewed-By: Jens Bache-Wiig
src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.cpp
src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.h
src/plugins/qt4projectmanager/gettingstartedwelcomepagewidget.ui

index 8fc897a..816408c 100644 (file)
@@ -94,25 +94,20 @@ GettingStartedWelcomePageWidget::~GettingStartedWelcomePageWidget()
     delete ui;
 }
 
-void GettingStartedWelcomePageWidget::updateExamples(const QString &examplePath,
-                                                     const QString &demosPath,
-                                                     const QString &sourcePath)
+void GettingStartedWelcomePageWidget::updateCppExamples(const QString &examplePath,
+                                                        const QString &sourcePath,
+                                                        const QString &demoXml)
 {
-    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);
+    QFile description(demoXml);
     if (!description.open(QFile::ReadOnly))
         return;
 
-    ui->examplesButton->setEnabled(true);
-    ui->examplesButton->setText(tr("Choose an example..."));
-    QMenu *menu = new QMenu;
-    ui->examplesButton->setMenu(menu);
+    ui->cppExamplesButton->setEnabled(true);;
+    ui->cppExamplesButton->setText(tr("Choose an example..."));
+
+    QMenu *menu = new QMenu(ui->cppExamplesButton);
+    ui->cppExamplesButton->setMenu(menu);
 
     QMenu *subMenu = 0;
     bool inExamples = false;
@@ -159,6 +154,48 @@ void GettingStartedWelcomePageWidget::updateExamples(const QString &examplePath,
     }
 }
 
+void GettingStartedWelcomePageWidget::updateQmlExamples(const QString &examplePath)
+{
+    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);
+        }
+    }
+
+}
+
+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);
+}
+
 
 namespace {
 void copyRecursive(const QDir& from, const QDir& to, const QString& dir)
@@ -250,10 +287,16 @@ void GettingStartedWelcomePageWidget::slotOpenExample()
     files << proFile;
     if(!QFile::exists(tryFile))
         tryFile = proFileInfo.path() + '/' + proFileInfo.baseName() + ".cpp";
+    // maybe it's a QML project?
+    if(!QFile::exists(tryFile))
+        tryFile = proFileInfo.path() + '/' + "/main.qml";
+    if(!QFile::exists(tryFile))
+        tryFile = proFileInfo.path() + '/' + proFileInfo.baseName() + ".qml";
     if(QFile::exists(tryFile))
         files << tryFile;
     Core::ICore::instance()->openFiles(files);
-    slotOpenContextHelpPage(helpFile);
+    if (!helpFile.isEmpty())
+        slotOpenContextHelpPage(helpFile);
 }
 
 void GettingStartedWelcomePageWidget::slotOpenHelpPage(const QString& url)
index d3b59b6..872fc52 100644 (file)
@@ -61,6 +61,10 @@ private slots:
 
 private:
     QStringList tipsOfTheDay();
+    void updateCppExamples(const QString &examplePath,
+                           const QString &sourcePath,
+                           const QString &demoXml);
+    void updateQmlExamples(const QString &examplePath);
 
     Ui::GettingStartedWelcomePageWidget *ui;
     int m_currentTip;
index c62a653..6cf9b13 100644 (file)
      <property name="frameShadow">
       <enum>QFrame::Raised</enum>
      </property>
-     <layout class="QGridLayout" name="gridLayout_3">
-      <item row="0" column="0">
-       <layout class="QGridLayout" name="gridLayout">
-        <item row="0" column="0" rowspan="2">
-         <widget class="QFrame" name="tutorialsFrame">
-          <property name="sizePolicy">
-           <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
-            <horstretch>0</horstretch>
-            <verstretch>0</verstretch>
-           </sizepolicy>
-          </property>
-          <property name="styleSheet">
-           <string/>
-          </property>
-          <layout class="QGridLayout" name="gridLayout_6">
-           <property name="verticalSpacing">
-            <number>12</number>
+     <layout class="QGridLayout" name="gridLayout">
+      <item row="0" column="0" rowspan="3">
+       <widget class="QFrame" name="tutorialsFrame">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="styleSheet">
+         <string/>
+        </property>
+        <layout class="QGridLayout" name="gridLayout_6">
+         <property name="verticalSpacing">
+          <number>12</number>
+         </property>
+         <item row="0" column="0">
+          <widget class="Utils::WelcomeModeLabel" name="tutorialsTitleLabel">
+           <property name="text">
+            <string>Tutorials</string>
            </property>
-           <item row="0" column="0">
-            <widget class="Utils::WelcomeModeLabel" name="tutorialsTitleLabel">
-             <property name="text">
-              <string>Tutorials</string>
-             </property>
-            </widget>
-           </item>
-           <item row="1" column="0">
-            <widget class="Utils::WelcomeModeTreeWidget" name="tutorialTreeWidget"/>
-           </item>
-          </layout>
-         </widget>
-        </item>
-        <item row="0" column="1">
-         <widget class="QFrame" name="demosExamplesFrame">
-          <property name="sizePolicy">
-           <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
-            <horstretch>0</horstretch>
-            <verstretch>0</verstretch>
-           </sizepolicy>
-          </property>
-          <property name="maximumSize">
-           <size>
-            <width>400</width>
-            <height>16777215</height>
-           </size>
-          </property>
-          <property name="styleSheet">
-           <string/>
-          </property>
-          <layout class="QGridLayout" name="gridLayout_8">
-           <property name="rightMargin">
-            <number>8</number>
+          </widget>
+         </item>
+         <item row="1" column="0">
+          <widget class="Utils::WelcomeModeTreeWidget" name="tutorialTreeWidget" native="true"/>
+         </item>
+        </layout>
+       </widget>
+      </item>
+      <item row="0" column="1">
+       <widget class="QFrame" name="demosExamplesFrame">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="maximumSize">
+         <size>
+          <width>400</width>
+          <height>16777215</height>
+         </size>
+        </property>
+        <property name="styleSheet">
+         <string/>
+        </property>
+        <layout class="QVBoxLayout" name="verticalLayout_2">
+         <item>
+          <widget class="Utils::WelcomeModeLabel" name="demoTitleLabel">
+           <property name="text">
+            <string>Explore Qt C++ Examples</string>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QPushButton" name="cppExamplesButton">
+           <property name="enabled">
+            <bool>false</bool>
+           </property>
+           <property name="sizePolicy">
+            <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
+             <horstretch>0</horstretch>
+             <verstretch>0</verstretch>
+            </sizepolicy>
+           </property>
+           <property name="minimumSize">
+            <size>
+             <width>0</width>
+             <height>30</height>
+            </size>
            </property>
-           <property name="horizontalSpacing">
+           <property name="text">
+            <string>Examples not installed...</string>
+           </property>
+          </widget>
+         </item>
+        </layout>
+       </widget>
+      </item>
+      <item row="1" column="1">
+       <widget class="QFrame" name="demosExamplesFrame_2">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="maximumSize">
+         <size>
+          <width>400</width>
+          <height>16777215</height>
+         </size>
+        </property>
+        <property name="styleSheet">
+         <string/>
+        </property>
+        <layout class="QVBoxLayout" name="verticalLayout_3">
+         <item>
+          <widget class="Utils::WelcomeModeLabel" name="demoTitleLabel_2">
+           <property name="text">
+            <string>Explore Qt Quick Examples</string>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QPushButton" name="qmlExamplesButton">
+           <property name="enabled">
+            <bool>false</bool>
+           </property>
+           <property name="sizePolicy">
+            <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
+             <horstretch>0</horstretch>
+             <verstretch>0</verstretch>
+            </sizepolicy>
+           </property>
+           <property name="minimumSize">
+            <size>
+             <width>0</width>
+             <height>30</height>
+            </size>
+           </property>
+           <property name="text">
+            <string>Examples not installed...</string>
+           </property>
+          </widget>
+         </item>
+        </layout>
+       </widget>
+      </item>
+      <item row="2" column="1">
+       <widget class="QFrame" name="didyouKnowFrame">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="maximumSize">
+         <size>
+          <width>400</width>
+          <height>16777215</height>
+         </size>
+        </property>
+        <property name="styleSheet">
+         <string/>
+        </property>
+        <layout class="QGridLayout" name="gridLayout_11">
+         <property name="verticalSpacing">
+          <number>12</number>
+         </property>
+         <property name="rightMargin">
+          <number>9</number>
+         </property>
+         <item row="0" column="1">
+          <layout class="QGridLayout" name="gridLayout_10">
+           <property name="spacing">
             <number>0</number>
            </property>
-           <item row="1" column="0">
-            <widget class="Utils::WelcomeModeLabel" name="demoTitleLabel">
-             <property name="text">
-              <string>Explore Qt Examples</string>
-             </property>
-            </widget>
-           </item>
-           <item row="2" column="0">
-            <widget class="QPushButton" name="examplesButton">
-             <property name="enabled">
-              <bool>false</bool>
+           <item row="0" column="0" colspan="2">
+            <spacer name="verticalSpacer_4">
+             <property name="orientation">
+              <enum>Qt::Vertical</enum>
              </property>
-             <property name="sizePolicy">
-              <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
-               <horstretch>0</horstretch>
-               <verstretch>0</verstretch>
-              </sizepolicy>
+             <property name="sizeType">
+              <enum>QSizePolicy::Preferred</enum>
              </property>
-             <property name="minimumSize">
+             <property name="sizeHint" stdset="0">
               <size>
-               <width>0</width>
-               <height>30</height>
+               <width>20</width>
+               <height>13</height>
               </size>
              </property>
-             <property name="text">
-              <string>Examples not installed...</string>
-             </property>
-            </widget>
+            </spacer>
            </item>
-          </layout>
-         </widget>
-        </item>
-        <item row="1" column="1">
-         <widget class="QFrame" name="didyouKnowFrame">
-          <property name="sizePolicy">
-           <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
-            <horstretch>0</horstretch>
-            <verstretch>0</verstretch>
-           </sizepolicy>
-          </property>
-          <property name="maximumSize">
-           <size>
-            <width>400</width>
-            <height>16777215</height>
-           </size>
-          </property>
-          <property name="styleSheet">
-           <string/>
-          </property>
-          <layout class="QGridLayout" name="gridLayout_11">
-           <property name="rightMargin">
-            <number>9</number>
-           </property>
-           <property name="verticalSpacing">
-            <number>12</number>
-           </property>
-           <item row="0" column="1">
-            <layout class="QGridLayout" name="gridLayout_10">
-             <property name="spacing">
-              <number>0</number>
-             </property>
-             <item row="0" column="0" colspan="2">
-              <spacer name="verticalSpacer_4">
-               <property name="orientation">
-                <enum>Qt::Vertical</enum>
-               </property>
-               <property name="sizeType">
-                <enum>QSizePolicy::Preferred</enum>
-               </property>
-               <property name="sizeHint" stdset="0">
-                <size>
-                 <width>20</width>
-                 <height>13</height>
-                </size>
-               </property>
-              </spacer>
-             </item>
-             <item row="1" column="1">
-              <widget class="QToolButton" name="nextTipBtn">
-               <property name="styleSheet">
-                <string notr="true">QToolButton{
+           <item row="1" column="1">
+            <widget class="QToolButton" name="nextTipBtn">
+             <property name="styleSheet">
+              <string notr="true">QToolButton{
        border-left:solid 0 px;
        height:16px;
        width:12px;
 }
 </string>
-               </property>
-               <property name="text">
-                <string/>
-               </property>
-               <property name="icon">
-                <iconset resource="../welcome/welcome.qrc">
-                 <normaloff>:/welcome/images/arrow-right.png</normaloff>:/welcome/images/arrow-right.png</iconset>
-               </property>
-               <property name="arrowType">
-                <enum>Qt::NoArrow</enum>
-               </property>
-              </widget>
-             </item>
-             <item row="1" column="0">
-              <widget class="QToolButton" name="prevTipBtn">
-               <property name="styleSheet">
-                <string notr="true">QToolButton{
+             </property>
+             <property name="text">
+              <string/>
+             </property>
+             <property name="icon">
+              <iconset resource="../welcome/welcome.qrc">
+               <normaloff>:/welcome/images/arrow-right.png</normaloff>:/welcome/images/arrow-right.png</iconset>
+             </property>
+             <property name="arrowType">
+              <enum>Qt::NoArrow</enum>
+             </property>
+            </widget>
+           </item>
+           <item row="1" column="0">
+            <widget class="QToolButton" name="prevTipBtn">
+             <property name="styleSheet">
+              <string notr="true">QToolButton{
        border-right:solid 0 px;
        height:16px;
        width:12px;
 }
 </string>
-               </property>
-               <property name="text">
-                <string/>
-               </property>
-               <property name="icon">
-                <iconset resource="../welcome/welcome.qrc">
-                 <normaloff>:/welcome/images/arrow-left.png</normaloff>:/welcome/images/arrow-left.png</iconset>
-               </property>
-               <property name="arrowType">
-                <enum>Qt::NoArrow</enum>
-               </property>
-              </widget>
-             </item>
-             <item row="2" column="0" colspan="2">
-              <spacer name="verticalSpacer_3">
-               <property name="orientation">
-                <enum>Qt::Vertical</enum>
-               </property>
-               <property name="sizeHint" stdset="0">
-                <size>
-                 <width>20</width>
-                 <height>13</height>
-                </size>
-               </property>
-              </spacer>
-             </item>
-            </layout>
-           </item>
-           <item row="1" column="0" colspan="2">
-            <widget class="QTextBrowser" name="didYouKnowTextBrowser">
-             <property name="sizePolicy">
-              <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
-               <horstretch>0</horstretch>
-               <verstretch>0</verstretch>
-              </sizepolicy>
              </property>
-             <property name="frameShape">
-              <enum>QFrame::NoFrame</enum>
+             <property name="text">
+              <string/>
+             </property>
+             <property name="icon">
+              <iconset resource="../welcome/welcome.qrc">
+               <normaloff>:/welcome/images/arrow-left.png</normaloff>:/welcome/images/arrow-left.png</iconset>
+             </property>
+             <property name="arrowType">
+              <enum>Qt::NoArrow</enum>
+             </property>
+            </widget>
+           </item>
+           <item row="2" column="0" colspan="2">
+            <spacer name="verticalSpacer_3">
+             <property name="orientation">
+              <enum>Qt::Vertical</enum>
              </property>
-             <property name="frameShadow">
-              <enum>QFrame::Plain</enum>
+             <property name="sizeHint" stdset="0">
+              <size>
+               <width>20</width>
+               <height>13</height>
+              </size>
              </property>
-             <property name="verticalScrollBarPolicy">
-              <enum>Qt::ScrollBarAlwaysOff</enum>
+            </spacer>
+           </item>
+          </layout>
+         </item>
+         <item row="1" column="0" colspan="2">
+          <widget class="QTextBrowser" name="didYouKnowTextBrowser">
+           <property name="sizePolicy">
+            <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
+             <horstretch>0</horstretch>
+             <verstretch>0</verstretch>
+            </sizepolicy>
+           </property>
+           <property name="frameShape">
+            <enum>QFrame::NoFrame</enum>
+           </property>
+           <property name="frameShadow">
+            <enum>QFrame::Plain</enum>
+           </property>
+           <property name="verticalScrollBarPolicy">
+            <enum>Qt::ScrollBarAlwaysOff</enum>
+           </property>
+           <property name="horizontalScrollBarPolicy">
+            <enum>Qt::ScrollBarAlwaysOff</enum>
+           </property>
+           <property name="openExternalLinks">
+            <bool>true</bool>
+           </property>
+          </widget>
+         </item>
+         <item row="0" column="0">
+          <layout class="QVBoxLayout" name="verticalLayout">
+           <item>
+            <spacer name="verticalSpacer_2">
+             <property name="orientation">
+              <enum>Qt::Vertical</enum>
              </property>
-             <property name="horizontalScrollBarPolicy">
-              <enum>Qt::ScrollBarAlwaysOff</enum>
+             <property name="sizeHint" stdset="0">
+              <size>
+               <width>0</width>
+               <height>0</height>
+              </size>
              </property>
-             <property name="openExternalLinks">
-              <bool>true</bool>
+            </spacer>
+           </item>
+           <item>
+            <widget class="Utils::WelcomeModeLabel" name="didYouKnowTitleLabel">
+             <property name="text">
+              <string>Did You Know?</string>
              </property>
             </widget>
            </item>
-           <item row="0" column="0">
-            <layout class="QVBoxLayout" name="verticalLayout">
-             <item>
-              <spacer name="verticalSpacer_2">
-               <property name="orientation">
-                <enum>Qt::Vertical</enum>
-               </property>
-               <property name="sizeHint" stdset="0">
-                <size>
-                 <width>0</width>
-                 <height>0</height>
-                </size>
-               </property>
-              </spacer>
-             </item>
-             <item>
-              <widget class="Utils::WelcomeModeLabel" name="didYouKnowTitleLabel">
-               <property name="text">
-                <string>Did You Know?</string>
-               </property>
-              </widget>
-             </item>
-             <item>
-              <spacer name="verticalSpacer">
-               <property name="orientation">
-                <enum>Qt::Vertical</enum>
-               </property>
-              </spacer>
-             </item>
-            </layout>
+           <item>
+            <spacer name="verticalSpacer">
+             <property name="orientation">
+              <enum>Qt::Vertical</enum>
+             </property>
+             <property name="sizeHint" stdset="0">
+              <size>
+               <width>0</width>
+               <height>0</height>
+              </size>
+             </property>
+            </spacer>
            </item>
           </layout>
-         </widget>
-        </item>
-       </layout>
+         </item>
+        </layout>
+       </widget>
       </item>
-      <item row="1" column="0">
+      <item row="3" column="0" colspan="2">
        <layout class="QHBoxLayout" name="horizontalLayout_2">
         <property name="spacing">
          <number>6</number>
    <class>Utils::WelcomeModeTreeWidget</class>
    <extends>QWidget</extends>
    <header location="global">utils/welcomemodetreewidget.h</header>
+   <container>1</container>
   </customwidget>
   <customwidget>
    <class>Utils::WelcomeModeLabel</class>