Browse Source

ENH:

For bug #7191.
Improvements to the dialog that sets up the first configure.
Fixing the large size of it by breaking it up into a wizard.
Also incorporated suggestions from bug report.
Clinton Stimpson 17 years ago
parent
commit
64b377d707

+ 0 - 244
Source/QtDialog/CMakeFirstConfigure.cxx

@@ -1,244 +0,0 @@
-
-#include "CMakeFirstConfigure.h"
-
-#include <QSettings>
-
-CMakeFirstConfigure::CMakeFirstConfigure()
-{
-  this->UI.setupUi(this);
-  this->UI.useDefaults->setChecked(true);
-  this->updatePage();
-  
-  this->UI.useToolChainFile->setChecked(true);
-  this->updateToolChainPage();
-
-  QObject::connect(this->UI.useDefaults, SIGNAL(toggled(bool)),
-                   this, SLOT(updatePage()));
-  QObject::connect(this->UI.compilerSetup, SIGNAL(toggled(bool)),
-                   this, SLOT(updatePage()));
-  QObject::connect(this->UI.crossCompilerSetup, SIGNAL(toggled(bool)),
-                   this, SLOT(updatePage()));
-  
-  QObject::connect(this->UI.useToolChainFile, SIGNAL(toggled(bool)),
-                   this, SLOT(updateToolChainPage()));
-}
-
-CMakeFirstConfigure::~CMakeFirstConfigure()
-{
-}
-
-void CMakeFirstConfigure::setGenerators(const QStringList& gens)
-{
-  this->UI.generators->clear();
-  this->UI.generators->addItems(gens);
-}
-
-QString CMakeFirstConfigure::getGenerator() const
-{
-  return this->UI.generators->currentText();
-}
-
-void CMakeFirstConfigure::loadFromSettings()
-{
-  QSettings settings;
-  settings.beginGroup("Settings/StartPath");
-
-  // restore generator
-  QString lastGen = settings.value("LastGenerator").toString();
-  int idx = this->UI.generators->findText(lastGen);
-  if(idx != -1)
-    {
-    this->UI.generators->setCurrentIndex(idx);
-    }
-  settings.endGroup();
-
-  // restore compiler setup
-  settings.beginGroup("Settings/Compiler");
-  this->UI.CCompiler->setText(settings.value("CCompiler").toString());
-  this->UI.CXXCompiler->setText(settings.value("CXXCompiler").toString());
-  this->UI.FortranCompiler->setText(settings.value("FortranCompiler").toString());
-  settings.endGroup();
-
-  // restore cross compiler setup
-  settings.beginGroup("Settings/CrossCompiler");
-  this->UI.crossCCompiler->setText(settings.value("CCompiler").toString());
-  this->UI.crossCXXCompiler->setText(settings.value("CXXCompiler").toString());
-  this->UI.crossFortranCompiler->setText(settings.value("FortranCompiler").toString());
-  this->UI.useToolChainFile->setChecked(settings.value("UseToolChainFile", true).toBool());
-  this->UI.toolChainFile->setText(settings.value("ToolChainFile").toString());
-  this->UI.systemName->setText(settings.value("SystemName").toString());
-  this->UI.systemVersion->setText(settings.value("SystemVersion").toString());
-  this->UI.systemProcessor->setText(settings.value("SystemProcessor").toString());
-  this->UI.crossFindRoot->setText(settings.value("FindRoot").toString());
-  this->UI.crossProgramMode->setCurrentIndex(settings.value("ProgramMode", 0).toInt());
-  this->UI.crossLibraryMode->setCurrentIndex(settings.value("LibraryMode", 0).toInt());
-  this->UI.crossIncludeMode->setCurrentIndex(settings.value("IncludeMode", 0).toInt());
-  settings.endGroup();
-}
-
-void CMakeFirstConfigure::saveToSettings()
-{
-  QSettings settings;
-  settings.beginGroup("Settings/StartPath");
-
-  // save generator
-  QString lastGen = this->UI.generators->currentText();
-  settings.setValue("LastGenerator", lastGen);
-
-  settings.endGroup();
-
-  // save compiler setup 
-  settings.beginGroup("Settings/Compiler");
-  settings.setValue("CCompiler", this->UI.CCompiler->text());
-  settings.setValue("CXXCompiler", this->UI.CXXCompiler->text());
-  settings.setValue("FortranCompiler", this->UI.FortranCompiler->text());
-  settings.endGroup();
-
-  // save cross compiler setup
-  settings.beginGroup("Settings/CrossCompiler");
-  settings.setValue("CCompiler", this->UI.crossCCompiler->text());
-  settings.setValue("CXXCompiler", this->UI.crossCXXCompiler->text());
-  settings.setValue("FortranCompiler", this->UI.crossFortranCompiler->text());
-  settings.setValue("UseToolChainFile", this->UI.useToolChainFile->isChecked());
-  settings.setValue("ToolChainFile", this->UI.toolChainFile->text());
-  settings.setValue("SystemName", this->UI.systemName->text());
-  settings.setValue("SystemVersion", this->UI.systemVersion->text());
-  settings.setValue("SystemProcessor", this->UI.systemProcessor->text());
-  settings.setValue("FindRoot", this->UI.crossFindRoot->text());
-  settings.setValue("ProgramMode", this->UI.crossProgramMode->currentIndex());
-  settings.setValue("LibraryMode", this->UI.crossLibraryMode->currentIndex());
-  settings.setValue("IncludeMode", this->UI.crossIncludeMode->currentIndex());
-  settings.endGroup();
-}
-
-void CMakeFirstConfigure::updatePage()
-{
-  if(this->UI.useDefaults->isChecked())
-    {
-    this->UI.stackedWidget->setCurrentIndex(0);
-    }
-  else if(this->UI.compilerSetup->isChecked())
-    {
-    this->UI.stackedWidget->setCurrentIndex(1);
-    }
-  else if(this->UI.crossCompilerSetup->isChecked())
-    {
-    this->UI.stackedWidget->setCurrentIndex(2);
-    }
-}
-
-void CMakeFirstConfigure::updateToolChainPage()
-{
-  if(this->UI.useToolChainFile->isChecked())
-    {
-    this->UI.toolChainStack->setCurrentIndex(0);
-    }
-  else
-    {
-    this->UI.toolChainStack->setCurrentIndex(1);
-    }
-}
-
-bool CMakeFirstConfigure::defaultSetup() const
-{
-  return this->UI.useDefaults->isChecked();
-}
-
-bool CMakeFirstConfigure::compilerSetup() const
-{
-  return this->UI.compilerSetup->isChecked();
-}
-
-bool CMakeFirstConfigure::crossCompilerSetup() const
-{
-  return this->UI.crossCompilerSetup->isChecked();
-}
-
-QString CMakeFirstConfigure::crossCompilerToolChainFile() const
-{
-  if(this->UI.useToolChainFile->isChecked())
-    {
-    return this->UI.toolChainFile->text();
-    }
-  return QString();
-}
-
-QString CMakeFirstConfigure::getSystemName() const
-{
-  return this->UI.systemName->text();
-}
-
-QString CMakeFirstConfigure::getCCompiler() const
-{
-  if(this->compilerSetup())
-    {
-    return this->UI.CCompiler->text();
-    }
-  else if(this->crossCompilerSetup())
-    {
-    return this->UI.crossCCompiler->text();
-    }
-  return QString();
-}
-
-QString CMakeFirstConfigure::getCXXCompiler() const
-{
-  if(this->compilerSetup())
-    {
-    return this->UI.CXXCompiler->text();
-    }
-  else if(this->crossCompilerSetup())
-    {
-    return this->UI.crossCXXCompiler->text();
-    }
-  return QString();
-}
-
-QString CMakeFirstConfigure::getFortranCompiler() const
-{
-  if(this->compilerSetup())
-    {
-    return this->UI.FortranCompiler->text();
-    }
-  else if(this->crossCompilerSetup())
-    {
-    return this->UI.crossFortranCompiler->text();
-    }
-  return QString();
-}
-
-
-QString CMakeFirstConfigure::getSystemVersion() const
-{
-  return this->UI.systemVersion->text();
-}
-
-QString CMakeFirstConfigure::getSystemProcessor() const
-{
-  return this->UI.systemProcessor->text();
-}
-
-
-QString CMakeFirstConfigure::getCrossRoot() const
-{
-  return this->UI.crossFindRoot->text();
-}
-
-static const char* crossModes[3] = {"BOTH", "ONLY", "NEVER" };
-
-QString CMakeFirstConfigure::getCrossProgramMode() const
-{
-  return crossModes[this->UI.crossProgramMode->currentIndex()];
-}
-
-QString CMakeFirstConfigure::getCrossLibraryMode() const
-{
-  return crossModes[this->UI.crossLibraryMode->currentIndex()];
-}
-
-QString CMakeFirstConfigure::getCrossIncludeMode() const
-{
-  return crossModes[this->UI.crossIncludeMode->currentIndex()];
-}
-
-

+ 0 - 48
Source/QtDialog/CMakeFirstConfigure.h

@@ -1,48 +0,0 @@
-
-#ifndef CMakeFirstConfigure_h
-#define CMakeFirstConfigure_h
-
-#include <QDialog>
-#include "ui_CMakeFirstConfigure.h"
-
-class CMakeFirstConfigure : public QDialog
-{
-  Q_OBJECT
-public:
-  CMakeFirstConfigure();
-  ~CMakeFirstConfigure();
-
-  void setGenerators(const QStringList& gens);
-  QString getGenerator() const;
-
-  bool defaultSetup() const;
-  bool compilerSetup() const;
-  bool crossCompilerSetup() const;
-  QString crossCompilerToolChainFile() const;
-
-  QString getCCompiler() const;
-  QString getCXXCompiler() const;
-  QString getFortranCompiler() const;
-  
-  QString getSystemName() const;
-  QString getSystemVersion() const;
-  QString getSystemProcessor() const;
-  
-  QString getCrossRoot() const;
-  QString getCrossProgramMode() const;
-  QString getCrossLibraryMode() const;
-  QString getCrossIncludeMode() const;
-
-  void loadFromSettings();
-  void saveToSettings();
-
-protected slots:
-  void updatePage();
-  void updateToolChainPage();
-
-protected:
-  Ui::CMakeFirstConfigure UI;
-};
-
-#endif // CMakeFirstConfigure_h
-

+ 0 - 606
Source/QtDialog/CMakeFirstConfigure.ui

@@ -1,606 +0,0 @@
-<ui version="4.0" >
- <class>CMakeFirstConfigure</class>
- <widget class="QDialog" name="CMakeFirstConfigure" >
-  <property name="geometry" >
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>609</width>
-    <height>547</height>
-   </rect>
-  </property>
-  <property name="windowTitle" >
-   <string>First Configure Setup</string>
-  </property>
-  <layout class="QGridLayout" >
-   <item row="0" column="0" >
-    <widget class="QLabel" name="label" >
-     <property name="sizePolicy" >
-      <sizepolicy vsizetype="Minimum" hsizetype="Preferred" >
-       <horstretch>0</horstretch>
-       <verstretch>0</verstretch>
-      </sizepolicy>
-     </property>
-     <property name="text" >
-      <string>Please select what build system you want CMake to generate files for.  You should select the tool that you will use to build the project.</string>
-     </property>
-     <property name="wordWrap" >
-      <bool>true</bool>
-     </property>
-    </widget>
-   </item>
-   <item row="1" column="0" >
-    <layout class="QHBoxLayout" >
-     <item>
-      <widget class="QComboBox" name="generators" />
-     </item>
-     <item>
-      <spacer>
-       <property name="orientation" >
-        <enum>Qt::Horizontal</enum>
-       </property>
-       <property name="sizeHint" >
-        <size>
-         <width>40</width>
-         <height>20</height>
-        </size>
-       </property>
-      </spacer>
-     </item>
-    </layout>
-   </item>
-   <item row="2" column="0" >
-    <layout class="QVBoxLayout" >
-     <item>
-      <widget class="QRadioButton" name="useDefaults" >
-       <property name="text" >
-        <string>Use Defaults</string>
-       </property>
-       <property name="checked" >
-        <bool>true</bool>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <widget class="QRadioButton" name="compilerSetup" >
-       <property name="text" >
-        <string>Compiler Setup</string>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <widget class="QRadioButton" name="crossCompilerSetup" >
-       <property name="text" >
-        <string>Cross Compiler Setup</string>
-       </property>
-      </widget>
-     </item>
-    </layout>
-   </item>
-   <item row="3" column="0" >
-    <widget class="Line" name="line" >
-     <property name="orientation" >
-      <enum>Qt::Horizontal</enum>
-     </property>
-    </widget>
-   </item>
-   <item row="4" column="0" >
-    <widget class="QStackedWidget" name="stackedWidget" >
-     <property name="sizePolicy" >
-      <sizepolicy vsizetype="Preferred" hsizetype="Preferred" >
-       <horstretch>0</horstretch>
-       <verstretch>0</verstretch>
-      </sizepolicy>
-     </property>
-     <property name="currentIndex" >
-      <number>2</number>
-     </property>
-     <widget class="QWidget" name="defaultPage" >
-      <layout class="QGridLayout" >
-       <property name="leftMargin" >
-        <number>0</number>
-       </property>
-       <property name="topMargin" >
-        <number>0</number>
-       </property>
-       <property name="rightMargin" >
-        <number>0</number>
-       </property>
-       <property name="bottomMargin" >
-        <number>0</number>
-       </property>
-       <item row="0" column="1" >
-        <widget class="QLabel" name="label_2" >
-         <property name="text" >
-          <string>The default compilers will be used.</string>
-         </property>
-         <property name="alignment" >
-          <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
-         </property>
-         <property name="wordWrap" >
-          <bool>true</bool>
-         </property>
-        </widget>
-       </item>
-       <item row="1" column="1" >
-        <spacer>
-         <property name="orientation" >
-          <enum>Qt::Vertical</enum>
-         </property>
-         <property name="sizeHint" >
-          <size>
-           <width>20</width>
-           <height>40</height>
-          </size>
-         </property>
-        </spacer>
-       </item>
-      </layout>
-     </widget>
-     <widget class="QWidget" name="compilerPage" >
-      <layout class="QGridLayout" >
-       <item row="0" column="0" >
-        <widget class="QGroupBox" name="groupBox_4" >
-         <property name="title" >
-          <string>Compilers</string>
-         </property>
-         <layout class="QGridLayout" >
-          <item row="0" column="0" >
-           <widget class="QLabel" name="label_16" >
-            <property name="text" >
-             <string>C</string>
-            </property>
-           </widget>
-          </item>
-          <item row="0" column="1" >
-           <widget class="QCMakeFilePathEditor" name="CCompiler" />
-          </item>
-          <item row="0" column="2" >
-           <widget class="QLabel" name="label_17" >
-            <property name="text" >
-             <string>C++</string>
-            </property>
-           </widget>
-          </item>
-          <item row="0" column="3" >
-           <widget class="QCMakeFilePathEditor" name="CXXCompiler" />
-          </item>
-          <item row="1" column="0" >
-           <widget class="QLabel" name="label_18" >
-            <property name="text" >
-             <string>Fortran</string>
-            </property>
-           </widget>
-          </item>
-          <item row="1" column="1" >
-           <widget class="QCMakeFilePathEditor" name="FortranCompiler" />
-          </item>
-         </layout>
-        </widget>
-       </item>
-       <item row="1" column="0" >
-        <spacer>
-         <property name="orientation" >
-          <enum>Qt::Vertical</enum>
-         </property>
-         <property name="sizeHint" >
-          <size>
-           <width>566</width>
-           <height>71</height>
-          </size>
-         </property>
-        </spacer>
-       </item>
-      </layout>
-     </widget>
-     <widget class="QWidget" name="crossCompilerPage" >
-      <layout class="QGridLayout" >
-       <property name="leftMargin" >
-        <number>0</number>
-       </property>
-       <property name="topMargin" >
-        <number>0</number>
-       </property>
-       <property name="rightMargin" >
-        <number>0</number>
-       </property>
-       <property name="bottomMargin" >
-        <number>0</number>
-       </property>
-       <item row="1" column="0" >
-        <widget class="QStackedWidget" name="toolChainStack" >
-         <property name="sizePolicy" >
-          <sizepolicy vsizetype="Preferred" hsizetype="Preferred" >
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="currentIndex" >
-          <number>1</number>
-         </property>
-         <widget class="QWidget" name="page" >
-          <layout class="QGridLayout" >
-           <property name="leftMargin" >
-            <number>9</number>
-           </property>
-           <property name="topMargin" >
-            <number>9</number>
-           </property>
-           <property name="rightMargin" >
-            <number>9</number>
-           </property>
-           <property name="bottomMargin" >
-            <number>9</number>
-           </property>
-           <item row="0" column="1" >
-            <widget class="QCMakeFilePathEditor" name="toolChainFile" />
-           </item>
-           <item row="1" column="1" >
-            <spacer>
-             <property name="orientation" >
-              <enum>Qt::Vertical</enum>
-             </property>
-             <property name="sizeHint" >
-              <size>
-               <width>20</width>
-               <height>40</height>
-              </size>
-             </property>
-            </spacer>
-           </item>
-           <item row="0" column="0" >
-            <widget class="QLabel" name="label_5" >
-             <property name="text" >
-              <string>Tool Chain File</string>
-             </property>
-             <property name="wordWrap" >
-              <bool>true</bool>
-             </property>
-            </widget>
-           </item>
-          </layout>
-         </widget>
-         <widget class="QWidget" name="page_2" >
-          <layout class="QGridLayout" >
-           <item row="0" column="0" >
-            <widget class="QGroupBox" name="groupBox" >
-             <property name="sizePolicy" >
-              <sizepolicy vsizetype="Preferred" hsizetype="Preferred" >
-               <horstretch>0</horstretch>
-               <verstretch>0</verstretch>
-              </sizepolicy>
-             </property>
-             <property name="title" >
-              <string>System</string>
-             </property>
-             <layout class="QGridLayout" >
-              <item row="0" column="0" >
-               <layout class="QHBoxLayout" >
-                <item>
-                 <widget class="QLabel" name="label_6" >
-                  <property name="sizePolicy" >
-                   <sizepolicy vsizetype="Fixed" hsizetype="Preferred" >
-                    <horstretch>0</horstretch>
-                    <verstretch>0</verstretch>
-                   </sizepolicy>
-                  </property>
-                  <property name="text" >
-                   <string>Name</string>
-                  </property>
-                 </widget>
-                </item>
-                <item>
-                 <widget class="QLineEdit" name="systemName" />
-                </item>
-                <item>
-                 <widget class="QLabel" name="label_10" >
-                  <property name="sizePolicy" >
-                   <sizepolicy vsizetype="Fixed" hsizetype="Preferred" >
-                    <horstretch>0</horstretch>
-                    <verstretch>0</verstretch>
-                   </sizepolicy>
-                  </property>
-                  <property name="text" >
-                   <string>Version</string>
-                  </property>
-                  <property name="wordWrap" >
-                   <bool>true</bool>
-                  </property>
-                 </widget>
-                </item>
-                <item>
-                 <widget class="QLineEdit" name="systemVersion" />
-                </item>
-                <item>
-                 <widget class="QLabel" name="label_11" >
-                  <property name="sizePolicy" >
-                   <sizepolicy vsizetype="Fixed" hsizetype="Preferred" >
-                    <horstretch>0</horstretch>
-                    <verstretch>0</verstretch>
-                   </sizepolicy>
-                  </property>
-                  <property name="text" >
-                   <string>Processor</string>
-                  </property>
-                  <property name="wordWrap" >
-                   <bool>true</bool>
-                  </property>
-                 </widget>
-                </item>
-                <item>
-                 <widget class="QLineEdit" name="systemProcessor" />
-                </item>
-               </layout>
-              </item>
-             </layout>
-            </widget>
-           </item>
-           <item row="1" column="0" >
-            <widget class="QGroupBox" name="groupBox_3" >
-             <property name="sizePolicy" >
-              <sizepolicy vsizetype="Preferred" hsizetype="Preferred" >
-               <horstretch>0</horstretch>
-               <verstretch>0</verstretch>
-              </sizepolicy>
-             </property>
-             <property name="title" >
-              <string>Compilers</string>
-             </property>
-             <layout class="QGridLayout" >
-              <item row="0" column="0" >
-               <widget class="QLabel" name="label_8" >
-                <property name="text" >
-                 <string>C</string>
-                </property>
-               </widget>
-              </item>
-              <item row="0" column="1" >
-               <widget class="QCMakeFilePathEditor" name="crossCCompiler" />
-              </item>
-              <item row="0" column="2" >
-               <widget class="QLabel" name="label_7" >
-                <property name="text" >
-                 <string>C++</string>
-                </property>
-               </widget>
-              </item>
-              <item row="0" column="3" >
-               <widget class="QCMakeFilePathEditor" name="crossCXXCompiler" />
-              </item>
-              <item row="1" column="0" >
-               <widget class="QLabel" name="label_15" >
-                <property name="text" >
-                 <string>Fortran</string>
-                </property>
-               </widget>
-              </item>
-              <item row="1" column="1" >
-               <widget class="QCMakeFilePathEditor" name="crossFortranCompiler" />
-              </item>
-             </layout>
-            </widget>
-           </item>
-           <item row="2" column="0" >
-            <widget class="QGroupBox" name="groupBox_2" >
-             <property name="sizePolicy" >
-              <sizepolicy vsizetype="Preferred" hsizetype="Preferred" >
-               <horstretch>0</horstretch>
-               <verstretch>0</verstretch>
-              </sizepolicy>
-             </property>
-             <property name="title" >
-              <string>Find Program/Library/Include</string>
-             </property>
-             <layout class="QGridLayout" >
-              <item row="0" column="0" >
-               <widget class="QLabel" name="label_9" >
-                <property name="sizePolicy" >
-                 <sizepolicy vsizetype="Fixed" hsizetype="Preferred" >
-                  <horstretch>0</horstretch>
-                  <verstretch>0</verstretch>
-                 </sizepolicy>
-                </property>
-                <property name="text" >
-                 <string>Root</string>
-                </property>
-                <property name="wordWrap" >
-                 <bool>true</bool>
-                </property>
-               </widget>
-              </item>
-              <item row="0" column="1" >
-               <widget class="QCMakePathEditor" name="crossFindRoot" />
-              </item>
-              <item row="0" column="2" >
-               <widget class="QLabel" name="label_12" >
-                <property name="sizePolicy" >
-                 <sizepolicy vsizetype="Fixed" hsizetype="Preferred" >
-                  <horstretch>0</horstretch>
-                  <verstretch>0</verstretch>
-                 </sizepolicy>
-                </property>
-                <property name="text" >
-                 <string>Program Mode</string>
-                </property>
-               </widget>
-              </item>
-              <item row="0" column="3" >
-               <widget class="QComboBox" name="crossProgramMode" >
-                <item>
-                 <property name="text" >
-                  <string>Find from Root then system</string>
-                 </property>
-                </item>
-                <item>
-                 <property name="text" >
-                  <string>Only find from Root</string>
-                 </property>
-                </item>
-                <item>
-                 <property name="text" >
-                  <string>Don't find from Root</string>
-                 </property>
-                </item>
-               </widget>
-              </item>
-              <item row="1" column="0" >
-               <widget class="QLabel" name="label_13" >
-                <property name="sizePolicy" >
-                 <sizepolicy vsizetype="Fixed" hsizetype="Preferred" >
-                  <horstretch>0</horstretch>
-                  <verstretch>0</verstretch>
-                 </sizepolicy>
-                </property>
-                <property name="text" >
-                 <string>Library Mode</string>
-                </property>
-               </widget>
-              </item>
-              <item row="1" column="1" >
-               <widget class="QComboBox" name="crossLibraryMode" >
-                <item>
-                 <property name="text" >
-                  <string>Find from Root then system</string>
-                 </property>
-                </item>
-                <item>
-                 <property name="text" >
-                  <string>Only find from Root</string>
-                 </property>
-                </item>
-                <item>
-                 <property name="text" >
-                  <string>Don't find from Root</string>
-                 </property>
-                </item>
-               </widget>
-              </item>
-              <item row="1" column="2" >
-               <widget class="QLabel" name="label_14" >
-                <property name="sizePolicy" >
-                 <sizepolicy vsizetype="Fixed" hsizetype="Preferred" >
-                  <horstretch>0</horstretch>
-                  <verstretch>0</verstretch>
-                 </sizepolicy>
-                </property>
-                <property name="text" >
-                 <string>Include Mode</string>
-                </property>
-               </widget>
-              </item>
-              <item row="1" column="3" >
-               <widget class="QComboBox" name="crossIncludeMode" >
-                <item>
-                 <property name="text" >
-                  <string>Find from Root then system</string>
-                 </property>
-                </item>
-                <item>
-                 <property name="text" >
-                  <string>Only find from Root</string>
-                 </property>
-                </item>
-                <item>
-                 <property name="text" >
-                  <string>Don't find from Root</string>
-                 </property>
-                </item>
-               </widget>
-              </item>
-             </layout>
-            </widget>
-           </item>
-          </layout>
-         </widget>
-        </widget>
-       </item>
-       <item row="0" column="0" >
-        <widget class="QCheckBox" name="useToolChainFile" >
-         <property name="text" >
-          <string>Use ToolChain File</string>
-         </property>
-         <property name="checked" >
-          <bool>true</bool>
-         </property>
-        </widget>
-       </item>
-      </layout>
-     </widget>
-    </widget>
-   </item>
-   <item row="6" column="0" >
-    <widget class="QDialogButtonBox" name="buttonBox" >
-     <property name="orientation" >
-      <enum>Qt::Horizontal</enum>
-     </property>
-     <property name="standardButtons" >
-      <set>QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok</set>
-     </property>
-    </widget>
-   </item>
-   <item row="5" column="0" >
-    <spacer>
-     <property name="orientation" >
-      <enum>Qt::Vertical</enum>
-     </property>
-     <property name="sizeType" >
-      <enum>QSizePolicy::Expanding</enum>
-     </property>
-     <property name="sizeHint" >
-      <size>
-       <width>0</width>
-       <height>20</height>
-      </size>
-     </property>
-    </spacer>
-   </item>
-  </layout>
- </widget>
- <customwidgets>
-  <customwidget>
-   <class>QCMakeFilePathEditor</class>
-   <extends>QLineEdit</extends>
-   <header>QCMakeWidgets.h</header>
-  </customwidget>
-  <customwidget>
-   <class>QCMakePathEditor</class>
-   <extends>QLineEdit</extends>
-   <header>QCMakeWidgets.h</header>
-  </customwidget>
- </customwidgets>
- <resources/>
- <connections>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>accepted()</signal>
-   <receiver>CMakeFirstConfigure</receiver>
-   <slot>accept()</slot>
-   <hints>
-    <hint type="sourcelabel" >
-     <x>227</x>
-     <y>284</y>
-    </hint>
-    <hint type="destinationlabel" >
-     <x>157</x>
-     <y>274</y>
-    </hint>
-   </hints>
-  </connection>
-  <connection>
-   <sender>buttonBox</sender>
-   <signal>rejected()</signal>
-   <receiver>CMakeFirstConfigure</receiver>
-   <slot>reject()</slot>
-   <hints>
-    <hint type="sourcelabel" >
-     <x>295</x>
-     <y>290</y>
-    </hint>
-    <hint type="destinationlabel" >
-     <x>286</x>
-     <y>274</y>
-    </hint>
-   </hints>
-  </connection>
- </connections>
-</ui>

+ 6 - 4
Source/QtDialog/CMakeLists.txt

@@ -16,11 +16,11 @@ ELSE(NOT QT4_FOUND)
   SET(SRCS
     AddCacheEntry.cxx
     AddCacheEntry.h
-    CMakeFirstConfigure.cxx
-    CMakeFirstConfigure.h
     CMakeSetup.cxx
     CMakeSetupDialog.cxx
     CMakeSetupDialog.h
+    FirstConfigure.cxx
+    FirstConfigure.h
     QCMake.cxx
     QCMake.h
     QCMakeCacheView.cxx
@@ -31,15 +31,17 @@ ELSE(NOT QT4_FOUND)
     QMacInstallDialog.h
     )
   QT4_WRAP_UI(UI_SRCS 
-    CMakeFirstConfigure.ui
     CMakeSetupDialog.ui
+    Compilers.ui
+    CrossCompiler.ui
     AddCacheEntry.ui
     MacInstallDialog.ui
     )
   QT4_WRAP_CPP(MOC_SRCS 
     AddCacheEntry.h
-    CMakeFirstConfigure.h
+    Compilers.h
     CMakeSetupDialog.h
+    FirstConfigure.h
     QCMake.h
     QCMakeCacheView.h
     QCMakeWidgets.h

+ 37 - 40
Source/QtDialog/CMakeSetupDialog.cxx

@@ -36,7 +36,7 @@
 #include "QCMake.h"
 #include "QCMakeCacheView.h"
 #include "AddCacheEntry.h"
-#include "CMakeFirstConfigure.h"
+#include "FirstConfigure.h"
 
 QCMakeThread::QCMakeThread(QObject* p) 
   : QThread(p), CMakeInstance(NULL)
@@ -552,7 +552,7 @@ void CMakeSetupDialog::setEnabledState(bool enabled)
 
 bool CMakeSetupDialog::setupFirstConfigure()
 {
-  CMakeFirstConfigure dialog;
+  FirstConfigure dialog;
 
   // initialize dialog and restore saved settings
 
@@ -561,7 +561,7 @@ bool CMakeSetupDialog::setupFirstConfigure()
 
   // restore from settings
   dialog.loadFromSettings();
-  
+
   if(dialog.exec() == QDialog::Accepted)
     {
     dialog.saveToSettings();
@@ -593,45 +593,42 @@ bool CMakeSetupDialog::setupFirstConfigure()
       }
     else if(dialog.crossCompilerSetup())
       {
-      QString toolchainFile = dialog.crossCompilerToolChainFile();
-      if(!toolchainFile.isEmpty())
-        {
-        m->insertProperty(QCMakeProperty::FILEPATH, "CMAKE_TOOLCHAIN_FILE", 
-                          "Cross Compile ToolChain File", toolchainFile, false);
-        }
-      else
+      QString fortranCompiler = dialog.getFortranCompiler();
+      if(!fortranCompiler.isEmpty())
         {
-        QString fortranCompiler = dialog.getFortranCompiler();
-        if(!fortranCompiler.isEmpty())
-          {
-          m->insertProperty(QCMakeProperty::FILEPATH, "CMAKE_Fortran_COMPILER", 
-                            "Fortran compiler.", fortranCompiler, false);
-          }
-
-        QString mode = dialog.getCrossIncludeMode();
-        m->insertProperty(QCMakeProperty::STRING, "CMAKE_FIND_ROOT_PATH_MODE_INCLUDE", 
-                          "CMake Find Include Mode", mode, false);
-        mode = dialog.getCrossLibraryMode();
-        m->insertProperty(QCMakeProperty::STRING, "CMAKE_FIND_ROOT_PATH_MODE_LIBRARY", 
-                          "CMake Find Library Mode", mode, false);
-        mode = dialog.getCrossProgramMode();
-        m->insertProperty(QCMakeProperty::STRING, "CMAKE_FIND_ROOT_PATH_MODE_PROGRAM", 
-                          "CMake Find Program Mode", mode, false);
-        
-        QString rootPath = dialog.getCrossRoot();
-        m->insertProperty(QCMakeProperty::PATH, "CMAKE_FIND_ROOT_PATH", 
-                          "CMake Find Root Path", rootPath, false);
-
-        QString systemName = dialog.getSystemName();
-        m->insertProperty(QCMakeProperty::STRING, "CMAKE_SYSTEM_NAME", 
-                          "CMake System Name", systemName, false);
-        QString cxxCompiler = dialog.getCXXCompiler();
-        m->insertProperty(QCMakeProperty::FILEPATH, "CMAKE_CXX_COMPILER", 
-                          "CXX compiler.", cxxCompiler, false);
-        QString cCompiler = dialog.getCCompiler();
-        m->insertProperty(QCMakeProperty::FILEPATH, "CMAKE_C_COMPILER", 
-                          "C compiler.", cCompiler, false);
+        m->insertProperty(QCMakeProperty::FILEPATH, "CMAKE_Fortran_COMPILER", 
+                          "Fortran compiler.", fortranCompiler, false);
         }
+
+      QString mode = dialog.getCrossIncludeMode();
+      m->insertProperty(QCMakeProperty::STRING, "CMAKE_FIND_ROOT_PATH_MODE_INCLUDE", 
+                        "CMake Find Include Mode", mode, false);
+      mode = dialog.getCrossLibraryMode();
+      m->insertProperty(QCMakeProperty::STRING, "CMAKE_FIND_ROOT_PATH_MODE_LIBRARY", 
+                        "CMake Find Library Mode", mode, false);
+      mode = dialog.getCrossProgramMode();
+      m->insertProperty(QCMakeProperty::STRING, "CMAKE_FIND_ROOT_PATH_MODE_PROGRAM", 
+                        "CMake Find Program Mode", mode, false);
+      
+      QString rootPath = dialog.getCrossRoot();
+      m->insertProperty(QCMakeProperty::PATH, "CMAKE_FIND_ROOT_PATH", 
+                        "CMake Find Root Path", rootPath, false);
+
+      QString systemName = dialog.getSystemName();
+      m->insertProperty(QCMakeProperty::STRING, "CMAKE_SYSTEM_NAME", 
+                        "CMake System Name", systemName, false);
+      QString cxxCompiler = dialog.getCXXCompiler();
+      m->insertProperty(QCMakeProperty::FILEPATH, "CMAKE_CXX_COMPILER", 
+                        "CXX compiler.", cxxCompiler, false);
+      QString cCompiler = dialog.getCCompiler();
+      m->insertProperty(QCMakeProperty::FILEPATH, "CMAKE_C_COMPILER", 
+                        "C compiler.", cCompiler, false);
+      }
+    else if(dialog.crossCompilerToolChainFile())
+      {
+      QString toolchainFile = dialog.getCrossCompilerToolChainFile();
+      m->insertProperty(QCMakeProperty::FILEPATH, "CMAKE_TOOLCHAIN_FILE", 
+                        "Cross Compile ToolChain File", toolchainFile, false);
       }
     return true;
     }

+ 21 - 0
Source/QtDialog/Compilers.h

@@ -0,0 +1,21 @@
+
+
+#ifndef COMPILERS_HPP
+#define COMPILERS_HPP
+
+#include <QWidget>
+#include <ui_Compilers.h>
+
+class Compilers : public QWidget, public Ui::Compilers
+{
+  Q_OBJECT
+public:
+  Compilers(QWidget* p=NULL) : 
+    QWidget(p)
+  {
+    this->setupUi(this);
+  }
+};
+
+#endif
+

+ 87 - 0
Source/QtDialog/Compilers.ui

@@ -0,0 +1,87 @@
+<ui version="4.0" >
+ <class>Compilers</class>
+ <widget class="QWidget" name="Compilers" >
+  <property name="geometry" >
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>506</width>
+    <height>115</height>
+   </rect>
+  </property>
+  <property name="windowTitle" >
+   <string>Form</string>
+  </property>
+  <layout class="QGridLayout" >
+   <property name="leftMargin" >
+    <number>0</number>
+   </property>
+   <property name="topMargin" >
+    <number>0</number>
+   </property>
+   <property name="rightMargin" >
+    <number>0</number>
+   </property>
+   <property name="bottomMargin" >
+    <number>0</number>
+   </property>
+   <item row="0" column="0" >
+    <widget class="QGroupBox" name="groupBox_4" >
+     <property name="title" >
+      <string>Compilers</string>
+     </property>
+     <layout class="QGridLayout" >
+      <property name="leftMargin" >
+       <number>4</number>
+      </property>
+      <property name="topMargin" >
+       <number>4</number>
+      </property>
+      <property name="rightMargin" >
+       <number>4</number>
+      </property>
+      <item row="0" column="0" >
+       <widget class="QLabel" name="label_16" >
+        <property name="text" >
+         <string>C</string>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="1" >
+       <widget class="QCMakeFilePathEditor" name="CCompiler" />
+      </item>
+      <item row="0" column="2" >
+       <widget class="QLabel" name="label_17" >
+        <property name="text" >
+         <string>C++</string>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="3" >
+       <widget class="QCMakeFilePathEditor" name="CXXCompiler" />
+      </item>
+      <item row="1" column="0" >
+       <widget class="QLabel" name="label_18" >
+        <property name="text" >
+         <string>Fortran</string>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="1" >
+       <widget class="QCMakeFilePathEditor" name="FortranCompiler" />
+      </item>
+     </layout>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <customwidgets>
+  <customwidget>
+   <class>QCMakeFilePathEditor</class>
+   <extends>QLineEdit</extends>
+   <header>QCMakeWidgets.h</header>
+  </customwidget>
+ </customwidgets>
+ <resources/>
+ <connections/>
+</ui>

+ 218 - 0
Source/QtDialog/CrossCompiler.ui

@@ -0,0 +1,218 @@
+<ui version="4.0" >
+ <class>CrossCompiler</class>
+ <widget class="QWidget" name="CrossCompiler" >
+  <property name="geometry" >
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>433</width>
+    <height>319</height>
+   </rect>
+  </property>
+  <property name="windowTitle" >
+   <string>CrossCompiler</string>
+  </property>
+  <layout class="QGridLayout" >
+   <item row="0" column="0" >
+    <widget class="QGroupBox" name="groupBox" >
+     <property name="sizePolicy" >
+      <sizepolicy vsizetype="Preferred" hsizetype="Preferred" >
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="title" >
+      <string>Target System</string>
+     </property>
+     <layout class="QGridLayout" >
+      <item row="0" column="0" >
+       <widget class="QLabel" name="label_6" >
+        <property name="sizePolicy" >
+         <sizepolicy vsizetype="Fixed" hsizetype="Preferred" >
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="text" >
+         <string>Operating System</string>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="1" >
+       <widget class="QCMakeFilePathEditor" name="systemName" />
+      </item>
+      <item row="0" column="2" colspan="2" >
+       <spacer>
+        <property name="orientation" >
+         <enum>Qt::Horizontal</enum>
+        </property>
+        <property name="sizeHint" >
+         <size>
+          <width>40</width>
+          <height>20</height>
+         </size>
+        </property>
+       </spacer>
+      </item>
+      <item row="1" column="0" >
+       <widget class="QLabel" name="label_10" >
+        <property name="sizePolicy" >
+         <sizepolicy vsizetype="Fixed" hsizetype="Preferred" >
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="text" >
+         <string>Version</string>
+        </property>
+        <property name="wordWrap" >
+         <bool>true</bool>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="1" >
+       <widget class="QLineEdit" name="systemVersion" />
+      </item>
+      <item row="1" column="2" >
+       <widget class="QLabel" name="label_11" >
+        <property name="sizePolicy" >
+         <sizepolicy vsizetype="Fixed" hsizetype="Preferred" >
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="text" >
+         <string>Processor</string>
+        </property>
+        <property name="wordWrap" >
+         <bool>true</bool>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="3" >
+       <widget class="QLineEdit" name="systemProcessor" />
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item row="2" column="0" >
+    <widget class="QGroupBox" name="groupBox_2" >
+     <property name="sizePolicy" >
+      <sizepolicy vsizetype="Preferred" hsizetype="Preferred" >
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="title" >
+      <string>Find Program/Library/Include</string>
+     </property>
+     <layout class="QGridLayout" >
+      <item row="0" column="0" >
+       <widget class="QLabel" name="label_9" >
+        <property name="sizePolicy" >
+         <sizepolicy vsizetype="Fixed" hsizetype="Preferred" >
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="text" >
+         <string>Target Root</string>
+        </property>
+        <property name="wordWrap" >
+         <bool>true</bool>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="1" >
+       <widget class="QCMakePathEditor" name="crossFindRoot" />
+      </item>
+      <item row="0" column="2" >
+       <widget class="QLabel" name="label_12" >
+        <property name="sizePolicy" >
+         <sizepolicy vsizetype="Fixed" hsizetype="Preferred" >
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="text" >
+         <string>Program Mode</string>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="3" >
+       <widget class="QComboBox" name="crossProgramMode" />
+      </item>
+      <item row="1" column="0" >
+       <widget class="QLabel" name="label_13" >
+        <property name="sizePolicy" >
+         <sizepolicy vsizetype="Fixed" hsizetype="Preferred" >
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="text" >
+         <string>Library Mode</string>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="1" >
+       <widget class="QComboBox" name="crossLibraryMode" />
+      </item>
+      <item row="1" column="2" >
+       <widget class="QLabel" name="label_14" >
+        <property name="sizePolicy" >
+         <sizepolicy vsizetype="Fixed" hsizetype="Preferred" >
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="text" >
+         <string>Include Mode</string>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="3" >
+       <widget class="QComboBox" name="crossIncludeMode" />
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item row="1" column="0" >
+    <widget class="Compilers" native="1" name="CrossCompilers" >
+     <property name="focusPolicy" >
+      <enum>Qt::TabFocus</enum>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <customwidgets>
+  <customwidget>
+   <class>QCMakePathEditor</class>
+   <extends>QLineEdit</extends>
+   <header>QCMakeWidgets.h</header>
+  </customwidget>
+  <customwidget>
+   <class>Compilers</class>
+   <extends>QWidget</extends>
+   <header>Compilers.h</header>
+   <container>1</container>
+  </customwidget>
+  <customwidget>
+   <class>QCMakeFilePathEditor</class>
+   <extends>QLineEdit</extends>
+   <header>QCMakeWidgets.h</header>
+  </customwidget>
+ </customwidgets>
+ <tabstops>
+  <tabstop>systemVersion</tabstop>
+  <tabstop>systemProcessor</tabstop>
+  <tabstop>CrossCompilers</tabstop>
+  <tabstop>crossFindRoot</tabstop>
+  <tabstop>crossProgramMode</tabstop>
+  <tabstop>crossLibraryMode</tabstop>
+  <tabstop>crossIncludeMode</tabstop>
+ </tabstops>
+ <resources/>
+ <connections/>
+</ui>

+ 509 - 0
Source/QtDialog/FirstConfigure.cxx

@@ -0,0 +1,509 @@
+
+#include "FirstConfigure.h"
+#include "Compilers.h"
+
+#include <QSettings>
+#include <QRadioButton>
+#include <QComboBox>
+#include <QVBoxLayout>
+
+
+StartCompilerSetup::StartCompilerSetup(QWidget* p)
+  : QWizardPage(p)
+{
+  QVBoxLayout* l = new QVBoxLayout(this);
+  l->addWidget(new QLabel(tr("Specify the generator for this project")));
+  this->GeneratorOptions = new QComboBox(this);
+  l->addWidget(this->GeneratorOptions);
+  l->addSpacing(6);
+
+  this->CompilerSetupOptions[0] = new QRadioButton("Use default native compilers", this);
+  this->CompilerSetupOptions[1] = new QRadioButton("Specify native compilers", this);
+  this->CompilerSetupOptions[2] = new QRadioButton("Specify toolchain file for cross-compiling", this);
+  this->CompilerSetupOptions[3] = new QRadioButton("Specify options for cross-compiling", this);
+  l->addWidget(this->CompilerSetupOptions[0]);
+  l->addWidget(this->CompilerSetupOptions[1]);
+  l->addWidget(this->CompilerSetupOptions[2]);
+  l->addWidget(this->CompilerSetupOptions[3]);
+  
+  this->CompilerSetupOptions[0]->setChecked(true);
+
+  QObject::connect(this->CompilerSetupOptions[0], SIGNAL(toggled(bool)),
+                   this, SLOT(onSelectionChanged(bool)));
+  QObject::connect(this->CompilerSetupOptions[1], SIGNAL(toggled(bool)),
+                   this, SLOT(onSelectionChanged(bool)));
+  QObject::connect(this->CompilerSetupOptions[2], SIGNAL(toggled(bool)),
+                   this, SLOT(onSelectionChanged(bool)));
+  QObject::connect(this->CompilerSetupOptions[3], SIGNAL(toggled(bool)),
+                   this, SLOT(onSelectionChanged(bool)));
+}
+
+StartCompilerSetup::~StartCompilerSetup()
+{
+}
+
+void StartCompilerSetup::setGenerators(const QStringList& gens)
+{
+  this->GeneratorOptions->clear();
+  this->GeneratorOptions->addItems(gens);
+};
+    
+void StartCompilerSetup::setCurrentGenerator(const QString& gen)
+{
+  int idx = this->GeneratorOptions->findText(gen);
+  if(idx != -1)
+  {
+    this->GeneratorOptions->setCurrentIndex(idx);
+  }
+}
+
+QString StartCompilerSetup::getGenerator() const
+{
+  return this->GeneratorOptions->currentText();
+};
+
+bool StartCompilerSetup::defaultSetup() const
+{
+  return this->CompilerSetupOptions[0]->isChecked();
+}
+
+bool StartCompilerSetup::compilerSetup() const
+{
+  return this->CompilerSetupOptions[1]->isChecked();
+}
+
+bool StartCompilerSetup::crossCompilerToolChainFile() const
+{
+  return this->CompilerSetupOptions[2]->isChecked();
+}
+
+bool StartCompilerSetup::crossCompilerSetup() const
+{
+  return this->CompilerSetupOptions[3]->isChecked();
+}
+
+void StartCompilerSetup::onSelectionChanged(bool on)
+{
+  if(on)
+    selectionChanged();
+}
+
+int StartCompilerSetup::nextId() const
+{
+  if(compilerSetup())
+    return NativeSetup;
+  if(crossCompilerSetup())
+    return CrossSetup;
+  if(crossCompilerToolChainFile())
+    return ToolchainSetup;
+  return -1;
+}
+
+NativeCompilerSetup::NativeCompilerSetup(QWidget* p)
+  : QWizardPage(p)
+{
+  QVBoxLayout* l = new QVBoxLayout(this);
+  QWidget* c = new QWidget(this);
+  l->addWidget(c);
+  this->setupUi(c);
+}
+
+NativeCompilerSetup::~NativeCompilerSetup()
+{
+}
+
+QString NativeCompilerSetup::getCCompiler() const
+{
+  return this->CCompiler->text();
+}
+
+void NativeCompilerSetup::setCCompiler(const QString& s)
+{
+  this->CCompiler->setText(s);
+}
+
+QString NativeCompilerSetup::getCXXCompiler() const
+{
+  return this->CXXCompiler->text();
+}
+
+void NativeCompilerSetup::setCXXCompiler(const QString& s)
+{
+  this->CXXCompiler->setText(s);
+}
+
+QString NativeCompilerSetup::getFortranCompiler() const
+{
+  return this->FortranCompiler->text();
+}
+
+void NativeCompilerSetup::setFortranCompiler(const QString& s)
+{
+  this->FortranCompiler->setText(s);
+}
+
+
+CrossCompilerSetup::CrossCompilerSetup(QWidget* p)
+  : QWizardPage(p)
+{
+  this->setupUi(this);
+  QWidget::setTabOrder(systemName, systemVersion);
+  QWidget::setTabOrder(systemVersion, systemProcessor);
+  QWidget::setTabOrder(systemProcessor, CrossCompilers->CCompiler);
+  QWidget::setTabOrder(CrossCompilers->CCompiler, CrossCompilers->CXXCompiler);
+  QWidget::setTabOrder(CrossCompilers->CXXCompiler, CrossCompilers->FortranCompiler);
+  QWidget::setTabOrder(CrossCompilers->FortranCompiler, crossFindRoot);
+  QWidget::setTabOrder(crossFindRoot, crossProgramMode);
+  QWidget::setTabOrder(crossProgramMode, crossLibraryMode);
+  QWidget::setTabOrder(crossLibraryMode, crossIncludeMode);
+
+  // fill in combo boxes
+  QStringList modes;
+  modes << "Search in Target Root, then native system";
+  modes << "Search only in Target Root";
+  modes << "Search only in native system";
+  crossProgramMode->addItems(modes);
+  crossLibraryMode->addItems(modes);
+  crossIncludeMode->addItems(modes);
+  crossProgramMode->setCurrentIndex(2);
+  crossLibraryMode->setCurrentIndex(1);
+  crossIncludeMode->setCurrentIndex(1);
+
+  this->registerField("systemName*", this->systemName);
+}
+
+CrossCompilerSetup::~CrossCompilerSetup()
+{
+}
+
+QString CrossCompilerSetup::getCCompiler() const
+{
+  return this->CrossCompilers->CCompiler->text();
+}
+
+void CrossCompilerSetup::setCCompiler(const QString& s)
+{
+  this->CrossCompilers->CCompiler->setText(s);
+}
+
+QString CrossCompilerSetup::getCXXCompiler() const
+{
+  return this->CrossCompilers->CXXCompiler->text();
+}
+
+void CrossCompilerSetup::setCXXCompiler(const QString& s)
+{
+  this->CrossCompilers->CXXCompiler->setText(s);
+}
+
+QString CrossCompilerSetup::getFortranCompiler() const
+{
+  return this->CrossCompilers->FortranCompiler->text();
+}
+
+void CrossCompilerSetup::setFortranCompiler(const QString& s)
+{
+  this->CrossCompilers->FortranCompiler->setText(s);
+}
+
+QString CrossCompilerSetup::getSystem() const
+{
+  return this->systemName->text();
+}
+
+void CrossCompilerSetup::setSystem(const QString& t)
+{
+  this->systemName->setText(t);
+}
+
+
+QString CrossCompilerSetup::getVersion() const
+{
+  return this->systemVersion->text();
+}
+
+void CrossCompilerSetup::setVersion(const QString& t)
+{
+  this->systemVersion->setText(t);
+}
+
+
+QString CrossCompilerSetup::getProcessor() const
+{
+  return this->systemProcessor->text();
+}
+
+void CrossCompilerSetup::setProcessor(const QString& t)
+{
+  this->systemProcessor->setText(t);
+}
+    
+QString CrossCompilerSetup::getFindRoot() const
+{
+  return this->crossFindRoot->text();
+}
+
+void CrossCompilerSetup::setFindRoot(const QString& t)
+{
+  return this->crossFindRoot->setText(t);
+}
+
+int CrossCompilerSetup::getProgramMode() const
+{
+  return this->crossProgramMode->currentIndex();
+}
+
+int CrossCompilerSetup::getLibraryMode() const
+{
+  return this->crossLibraryMode->currentIndex();
+}
+
+int CrossCompilerSetup::getIncludeMode() const
+{
+  return this->crossIncludeMode->currentIndex();
+}
+
+void CrossCompilerSetup::setProgramMode(int m)
+{
+  this->crossProgramMode->setCurrentIndex(m);
+}
+
+void CrossCompilerSetup::setLibraryMode(int m)
+{
+  this->crossLibraryMode->setCurrentIndex(m);
+}
+
+void CrossCompilerSetup::setIncludeMode(int m)
+{
+  this->crossIncludeMode->setCurrentIndex(m);
+}
+
+ToolchainCompilerSetup::ToolchainCompilerSetup(QWidget* p)
+  : QWizardPage(p)
+{
+  QVBoxLayout* l = new QVBoxLayout(this);
+  l->addWidget(new QLabel(tr("Specify the Toolchain file")));
+  this->ToolchainFile = new QCMakeFilePathEditor(this);
+  l->addWidget(this->ToolchainFile);
+}
+
+ToolchainCompilerSetup::~ToolchainCompilerSetup()
+{
+}
+
+QString ToolchainCompilerSetup::toolchainFile() const
+{
+  return this->ToolchainFile->text();
+}
+
+void ToolchainCompilerSetup::setToolchainFile(const QString& t)
+{
+  this->ToolchainFile->setText(t);
+}
+
+
+
+FirstConfigure::FirstConfigure()
+{
+  //this->setOption(QWizard::HaveFinishButtonOnEarlyPages, true);
+  this->mStartCompilerSetupPage = new StartCompilerSetup(this);
+  this->setPage(Start, this->mStartCompilerSetupPage);
+  QObject::connect(this->mStartCompilerSetupPage, SIGNAL(selectionChanged()),
+                   this, SLOT(restart()));
+
+  this->mNativeCompilerSetupPage = new NativeCompilerSetup(this);
+  this->setPage(NativeSetup, this->mNativeCompilerSetupPage);
+  
+  this->mCrossCompilerSetupPage = new CrossCompilerSetup(this);
+  this->setPage(CrossSetup, this->mCrossCompilerSetupPage);
+  
+  this->mToolchainCompilerSetupPage = new ToolchainCompilerSetup(this);
+  this->setPage(ToolchainSetup, this->mToolchainCompilerSetupPage);
+}
+
+FirstConfigure::~FirstConfigure()
+{
+}
+
+void FirstConfigure::setGenerators(const QStringList& gens)
+{
+  this->mStartCompilerSetupPage->setGenerators(gens);
+}
+
+QString FirstConfigure::getGenerator() const
+{
+  return this->mStartCompilerSetupPage->getGenerator();
+}
+
+void FirstConfigure::loadFromSettings()
+{
+  QSettings settings;
+  // restore generator
+  settings.beginGroup("Settings/StartPath");
+  QString lastGen = settings.value("LastGenerator").toString();
+  this->mStartCompilerSetupPage->setCurrentGenerator(lastGen);
+  settings.endGroup();
+
+  // restore compiler setup
+  settings.beginGroup("Settings/Compiler");
+  this->mNativeCompilerSetupPage->setCCompiler(settings.value("CCompiler").toString());
+  this->mNativeCompilerSetupPage->setCXXCompiler(settings.value("CXXCompiler").toString());
+  this->mNativeCompilerSetupPage->setFortranCompiler(settings.value("FortranCompiler").toString());
+  settings.endGroup();
+
+  // restore cross compiler setup
+  settings.beginGroup("Settings/CrossCompiler");
+  this->mCrossCompilerSetupPage->setCCompiler(settings.value("CCompiler").toString());
+  this->mCrossCompilerSetupPage->setCXXCompiler(settings.value("CXXCompiler").toString());
+  this->mCrossCompilerSetupPage->setFortranCompiler(settings.value("FortranCompiler").toString());
+  this->mToolchainCompilerSetupPage->setToolchainFile(settings.value("ToolChainFile").toString());
+  this->mCrossCompilerSetupPage->setSystem(settings.value("SystemName").toString());
+  this->mCrossCompilerSetupPage->setVersion(settings.value("SystemVersion").toString());
+  this->mCrossCompilerSetupPage->setProcessor(settings.value("SystemProcessor").toString());
+  this->mCrossCompilerSetupPage->setFindRoot(settings.value("FindRoot").toString());
+  this->mCrossCompilerSetupPage->setProgramMode(settings.value("ProgramMode", 0).toInt());
+  this->mCrossCompilerSetupPage->setLibraryMode(settings.value("LibraryMode", 0).toInt());
+  this->mCrossCompilerSetupPage->setIncludeMode(settings.value("IncludeMode", 0).toInt());
+  settings.endGroup();
+}
+
+void FirstConfigure::saveToSettings()
+{
+  QSettings settings;
+  
+  // save generator
+  settings.beginGroup("Settings/StartPath");
+  QString lastGen = this->mStartCompilerSetupPage->getGenerator();
+  settings.setValue("LastGenerator", lastGen);
+  settings.endGroup();
+
+  // save compiler setup 
+  settings.beginGroup("Settings/Compiler");
+  settings.setValue("CCompiler", this->mNativeCompilerSetupPage->getCCompiler());
+  settings.setValue("CXXCompiler", this->mNativeCompilerSetupPage->getCXXCompiler());
+  settings.setValue("FortranCompiler", this->mNativeCompilerSetupPage->getFortranCompiler());
+  settings.endGroup();
+
+  // save cross compiler setup
+  settings.beginGroup("Settings/CrossCompiler");
+  settings.setValue("CCompiler", this->mCrossCompilerSetupPage->getCCompiler());
+  settings.setValue("CXXCompiler", this->mCrossCompilerSetupPage->getCXXCompiler());
+  settings.setValue("FortranCompiler", this->mCrossCompilerSetupPage->getFortranCompiler());
+  settings.setValue("ToolChainFile", this->getCrossCompilerToolChainFile());
+  settings.setValue("SystemName", this->mCrossCompilerSetupPage->getSystem());
+  settings.setValue("SystemVersion", this->mCrossCompilerSetupPage->getVersion());
+  settings.setValue("SystemProcessor", this->mCrossCompilerSetupPage->getProcessor());
+  settings.setValue("FindRoot", this->mCrossCompilerSetupPage->getFindRoot());
+  settings.setValue("ProgramMode", this->mCrossCompilerSetupPage->getProgramMode());
+  settings.setValue("LibraryMode", this->mCrossCompilerSetupPage->getLibraryMode());
+  settings.setValue("IncludeMode", this->mCrossCompilerSetupPage->getIncludeMode());
+  settings.endGroup();
+}
+
+bool FirstConfigure::defaultSetup() const
+{
+  return this->mStartCompilerSetupPage->defaultSetup();
+}
+
+bool FirstConfigure::compilerSetup() const
+{
+  return this->mStartCompilerSetupPage->compilerSetup();
+}
+
+bool FirstConfigure::crossCompilerSetup() const
+{
+  return this->mStartCompilerSetupPage->crossCompilerSetup();
+}
+
+bool FirstConfigure::crossCompilerToolChainFile() const
+{
+  return this->mStartCompilerSetupPage->crossCompilerToolChainFile();
+}
+  
+QString FirstConfigure::getCrossCompilerToolChainFile() const
+{
+  return this->mToolchainCompilerSetupPage->toolchainFile();
+}
+
+QString FirstConfigure::getSystemName() const
+{
+  return this->mCrossCompilerSetupPage->getSystem();
+}
+
+QString FirstConfigure::getCCompiler() const
+{
+  if(this->compilerSetup())
+    {
+    return this->mNativeCompilerSetupPage->getCCompiler();
+    }
+  else if(this->crossCompilerSetup())
+    {
+    return this->mCrossCompilerSetupPage->getCCompiler();
+    }
+  return QString();
+}
+
+QString FirstConfigure::getCXXCompiler() const
+{
+  if(this->compilerSetup())
+    {
+    return this->mNativeCompilerSetupPage->getCXXCompiler();
+    }
+  else if(this->crossCompilerSetup())
+    {
+    return this->mCrossCompilerSetupPage->getCXXCompiler();
+    }
+  return QString();
+}
+
+QString FirstConfigure::getFortranCompiler() const
+{
+  if(this->compilerSetup())
+    {
+    return this->mNativeCompilerSetupPage->getFortranCompiler();
+    }
+  else if(this->crossCompilerSetup())
+    {
+    return this->mCrossCompilerSetupPage->getFortranCompiler();
+    }
+  return QString();
+}
+
+
+QString FirstConfigure::getSystemVersion() const
+{
+  return this->mCrossCompilerSetupPage->getVersion();
+}
+
+QString FirstConfigure::getSystemProcessor() const
+{
+  return this->mCrossCompilerSetupPage->getProcessor();
+}
+
+QString FirstConfigure::getCrossRoot() const
+{
+  return this->mCrossCompilerSetupPage->getFindRoot();
+}
+
+const QString CrossModes[] =
+{
+  "BOTH",
+  "ONLY",
+  "NEVER"
+};
+
+QString FirstConfigure::getCrossProgramMode() const
+{
+  return CrossModes[this->mCrossCompilerSetupPage->getProgramMode()];
+}
+
+QString FirstConfigure::getCrossLibraryMode() const
+{
+  return CrossModes[this->mCrossCompilerSetupPage->getLibraryMode()];
+}
+
+QString FirstConfigure::getCrossIncludeMode() const
+{
+  return CrossModes[this->mCrossCompilerSetupPage->getIncludeMode()];
+}
+

+ 177 - 0
Source/QtDialog/FirstConfigure.h

@@ -0,0 +1,177 @@
+
+#ifndef FirstConfigure_h
+#define FirstConfigure_h
+
+#include <QWizard>
+#include <QWizardPage>
+#include "ui_Compilers.h"
+#include "ui_CrossCompiler.h"
+
+class QRadioButton;
+class QComboBox;
+
+//! the wizard pages we'll use for the first configure of a build
+enum FirstConfigurePages
+{
+  Start,
+  NativeSetup,
+  ToolchainSetup,
+  CrossSetup,
+  Done
+};
+
+//! the first page that gives basic options for what compilers setup to choose from
+class StartCompilerSetup : public QWizardPage
+{
+  Q_OBJECT
+  public:
+    StartCompilerSetup(QWidget* p);
+    ~StartCompilerSetup();
+    void setGenerators(const QStringList& gens);
+    void setCurrentGenerator(const QString& gen);
+    QString getGenerator() const;
+    
+    bool defaultSetup() const;
+    bool compilerSetup() const;
+    bool crossCompilerSetup() const;
+    bool crossCompilerToolChainFile() const;
+
+    int nextId() const;
+  
+  signals:
+    void selectionChanged();
+
+  protected slots:
+    void onSelectionChanged(bool);
+
+  protected:
+    QComboBox* GeneratorOptions;
+    QRadioButton* CompilerSetupOptions[4];
+};
+
+//! the page that gives basic options for native compilers
+class NativeCompilerSetup : public QWizardPage, protected Ui::Compilers
+{
+  Q_OBJECT
+  public:
+    NativeCompilerSetup(QWidget* p);
+    ~NativeCompilerSetup();
+    
+    QString getCCompiler() const;
+    void setCCompiler(const QString&);
+
+    QString getCXXCompiler() const;
+    void setCXXCompiler(const QString&);
+
+    QString getFortranCompiler() const;
+    void setFortranCompiler(const QString&);
+    
+    int nextId() const { return -1; }
+};
+
+//! the page that gives options for cross compilers
+class CrossCompilerSetup : public QWizardPage, protected Ui::CrossCompiler
+{
+  Q_OBJECT
+  public:
+    CrossCompilerSetup(QWidget* p);
+    ~CrossCompilerSetup();
+    
+    QString getSystem() const;
+    void setSystem(const QString&);
+    
+    QString getVersion() const;
+    void setVersion(const QString&);
+    
+    QString getProcessor() const;
+    void setProcessor(const QString&);
+
+    QString getCCompiler() const;
+    void setCCompiler(const QString&);
+
+    QString getCXXCompiler() const;
+    void setCXXCompiler(const QString&);
+
+    QString getFortranCompiler() const;
+    void setFortranCompiler(const QString&);
+    
+    QString getFindRoot() const;
+    void setFindRoot(const QString&);
+
+    enum CrossMode
+      {
+        BOTH,
+        ONLY,
+        NEVER
+      };
+  
+    int getProgramMode() const;
+    void setProgramMode(int);
+    int getLibraryMode() const;
+    void setLibraryMode(int);
+    int getIncludeMode() const;
+    void setIncludeMode(int);
+    
+    int nextId() const { return -1; }
+};
+
+//! the page that gives options for a toolchain file
+class ToolchainCompilerSetup : public QWizardPage
+{
+  Q_OBJECT
+  public:
+    ToolchainCompilerSetup(QWidget* p);
+    ~ToolchainCompilerSetup();
+
+    QString toolchainFile() const;
+    void setToolchainFile(const QString&);
+
+    int nextId() const { return -1; }
+    
+  protected:
+    QCMakeFilePathEditor* ToolchainFile;
+};
+
+//! the wizard with the pages
+class FirstConfigure : public QWizard
+{
+  Q_OBJECT
+public:
+  FirstConfigure();
+  ~FirstConfigure();
+
+  void setGenerators(const QStringList& gens);
+  QString getGenerator() const;
+
+  bool defaultSetup() const;
+  bool compilerSetup() const;
+  bool crossCompilerSetup() const;
+  bool crossCompilerToolChainFile() const;
+
+  QString getCCompiler() const;
+  QString getCXXCompiler() const;
+  QString getFortranCompiler() const;
+  
+  QString getSystemName() const;
+  QString getSystemVersion() const;
+  QString getSystemProcessor() const;
+  QString getCrossRoot() const;
+  QString getCrossProgramMode() const;
+  QString getCrossLibraryMode() const;
+  QString getCrossIncludeMode() const;
+  
+  QString getCrossCompilerToolChainFile() const;
+
+  void loadFromSettings();
+  void saveToSettings();
+
+protected:
+  StartCompilerSetup* mStartCompilerSetupPage;
+  NativeCompilerSetup* mNativeCompilerSetupPage;
+  CrossCompilerSetup* mCrossCompilerSetupPage;
+  ToolchainCompilerSetup* mToolchainCompilerSetupPage;
+
+};
+
+#endif // FirstConfigure_h
+