Skip to content
Snippets Groups Projects
Commit e9e84fc1 authored by Tobias Hunger's avatar Tobias Hunger
Browse files

Update wizards to use targetsetuppage

parent 2319f57c
No related branches found
No related tags found
No related merge requests found
Showing with 62 additions and 330 deletions
......@@ -52,7 +52,7 @@ CustomWidgetWizardDialog::CustomWidgetWizardDialog(const QString &templateName,
setIntroDescription(tr("This wizard generates a Qt4 Designer Custom Widget "
"or a Qt4 Designer Custom Widget Collection project."));
addTargetsPage(BaseQt4ProjectWizardDialog::desktopTarget());
addTargetSetupPage(BaseQt4ProjectWizardDialog::desktopTarget());
m_widgetPageId = addPage(m_widgetsPage);
m_pluginPageId = addPage(m_pluginPage);
......
......@@ -52,7 +52,7 @@ ConsoleAppWizardDialog::ConsoleAppWizardDialog(const QString &templateName,
"provide a GUI."));
addModulesPage();
addTargetsPage();
addTargetSetupPage();
foreach (QWizardPage *p, extensionPages)
addPage(p);
......
......@@ -45,7 +45,7 @@ EmptyProjectWizardDialog::EmptyProjectWizardDialog(const QString &templateName,
setIntroDescription(tr("This wizard generates an empty Qt4 project. "
"Add files to it later on by using the other wizards."));
addTargetsPage();
addTargetSetupPage();
foreach (QWizardPage *p, extensionPages)
addPage(p);
......
......@@ -62,7 +62,7 @@ GuiAppWizardDialog::GuiAppWizardDialog(const QString &templateName,
"and includes an empty widget."));
addModulesPage();
addTargetsPage();
addTargetSetupPage();
m_filesPage->setFormInputCheckable(true);
m_filesPage->setClassTypeComboVisible(false);
......@@ -110,12 +110,11 @@ GuiAppParameters GuiAppWizardDialog::parameters() const
rc.formFileName = m_filesPage->formFileName();
rc.designerForm = m_filesPage->formInputChecked();
rc.isMobileApplication = true;
QSet<QString> targets = selectedTargets();
if (targets.contains(QLatin1String(Constants::MAEMO_DEVICE_TARGET_ID))) {
if (isTargetSelected(QLatin1String(Constants::MAEMO_DEVICE_TARGET_ID))) {
rc.widgetWidth = 800;
rc.widgetHeight = 480;
} else if (targets.contains(QLatin1String(Constants::S60_DEVICE_TARGET_ID)) ||
targets.contains(QLatin1String(Constants::S60_EMULATOR_TARGET_ID))) {
} else if (isTargetSelected(QLatin1String(Constants::S60_DEVICE_TARGET_ID)) ||
isTargetSelected(QLatin1String(Constants::S60_EMULATOR_TARGET_ID))) {
rc.widgetWidth = 360;
rc.widgetHeight = 640;
} else {
......
......@@ -146,7 +146,7 @@ LibraryWizardDialog::LibraryWizardDialog(const QString &templateName,
// Use the intro page instead, set up initially
setIntroDescription(tr("This wizard generates a C++ library project."));
m_targetPageId = addTargetsPage();
m_targetPageId = addTargetSetupPage();
m_modulesPageId = addModulesPage();
m_filesPage->setNamespacesEnabled(true);
......
......@@ -30,10 +30,11 @@
#include "qtwizard.h"
#include "qt4project.h"
#include "qt4projectmanager.h"
#include "qt4projectmanagerconstants.h"
#include "qt4target.h"
#include "modulespage.h"
#include "targetspage.h"
#include "targetsetuppage.h"
#include <coreplugin/icore.h>
#include <cpptools/cpptoolsconstants.h>
......@@ -164,7 +165,7 @@ QWizard *CustomQt4ProjectWizard::createWizardDialog(QWidget *parent,
initProjectWizardDialog(wizard, defaultPath, extensionPages);
if (wizard->pageIds().contains(targetPageId))
qWarning("CustomQt4ProjectWizard: Unable to insert target page at %d", int(targetPageId));
wizard->addTargetsPage(QSet<QString>(), targetPageId);
wizard->addTargetSetupPage(QSet<QString>(), targetPageId);
return wizard;
}
......@@ -182,7 +183,7 @@ void CustomQt4ProjectWizard::registerSelf()
BaseQt4ProjectWizardDialog::BaseQt4ProjectWizardDialog(bool showModulesPage, QWidget *parent) :
ProjectExplorer::BaseProjectWizardDialog(parent),
m_modulesPage(0),
m_targetsPage(0)
m_targetSetupPage(0)
{
init(showModulesPage);
}
......@@ -192,15 +193,15 @@ BaseQt4ProjectWizardDialog::BaseQt4ProjectWizardDialog(bool showModulesPage,
int introId, QWidget *parent) :
ProjectExplorer::BaseProjectWizardDialog(introPage, introId, parent),
m_modulesPage(0),
m_targetsPage(0)
m_targetSetupPage(0)
{
init(showModulesPage);
}
BaseQt4ProjectWizardDialog::~BaseQt4ProjectWizardDialog()
{
if (m_targetsPage && !m_targetsPage->parent())
delete m_targetsPage;
if (m_targetSetupPage && !m_targetSetupPage->parent())
delete m_targetSetupPage;
if (m_modulesPage && !m_modulesPage->parent())
delete m_modulesPage;
}
......@@ -209,7 +210,6 @@ void BaseQt4ProjectWizardDialog::init(bool showModulesPage)
{
if (showModulesPage)
m_modulesPage = new ModulesPage;
m_targetsPage = new TargetsPage;
}
int BaseQt4ProjectWizardDialog::addModulesPage(int id)
......@@ -223,18 +223,26 @@ int BaseQt4ProjectWizardDialog::addModulesPage(int id)
return addPage(m_modulesPage);
}
int BaseQt4ProjectWizardDialog::addTargetsPage(QSet<QString> targets, int id)
int BaseQt4ProjectWizardDialog::addTargetSetupPage(QSet<QString> targets, int id)
{
m_targetsPage->setValidTargets(targets);
if (!m_targetsPage->needToDisplayPage())
m_targetSetupPage = new TargetSetupPage;
QList<TargetSetupPage::ImportInfo> infos = TargetSetupPage::importInfosForKnownQtVersions(0);
if (!targets.isEmpty())
infos = TargetSetupPage::filterImportInfos(targets, infos);
m_targetSetupPage->setImportDirectoryBrowsingEnabled(false);
m_targetSetupPage->setShowLocationInformation(false);
if (infos.count() <= 1)
return -1;
if (id >= 0) {
setPage(id, m_targetsPage);
return id;
}
return addPage(m_targetsPage);
m_targetSetupPage->setImportInfos(infos);
if (id >= 0)
setPage(id, m_targetSetupPage);
else
id = addPage(m_targetSetupPage);
return id;
}
QString BaseQt4ProjectWizardDialog::selectedModules() const
......@@ -269,18 +277,30 @@ void BaseQt4ProjectWizardDialog::setDeselectedModules(const QString &modules)
}
}
void BaseQt4ProjectWizardDialog::writeUserFile(const QString &proFileName) const
bool BaseQt4ProjectWizardDialog::writeUserFile(const QString &proFileName) const
{
if (!m_targetSetupPage)
return false;
Qt4Manager *manager = ExtensionSystem::PluginManager::instance()->getObject<Qt4Manager>();
Q_ASSERT(manager);
Qt4Project *pro = new Qt4Project(manager, proFileName);
bool success = m_targetSetupPage->setupProject(pro);
if (success)
pro->saveSettings();
delete pro;
return success;
}
bool BaseQt4ProjectWizardDialog::setupProject(Qt4Project *project) const
{
if (m_targetsPage)
m_targetsPage->writeUserFile(proFileName);
return m_targetSetupPage->setupProject(project);
}
QSet<QString> BaseQt4ProjectWizardDialog::selectedTargets() const
bool BaseQt4ProjectWizardDialog::isTargetSelected(const QString &targetid) const
{
QSet<QString> targets;
if (m_targetsPage)
targets = m_targetsPage->selectedTargets();
return targets;
return m_targetSetupPage->isTargetSelected(targetid);
}
QSet<QString> BaseQt4ProjectWizardDialog::desktopTarget()
......
......@@ -39,10 +39,13 @@
#include <QtCore/QSet>
namespace Qt4ProjectManager {
class Qt4Project;
namespace Internal {
class ModulesPage;
class TargetsPage;
class TargetSetupPage;
/* Base class for wizard creating Qt projects using QtProjectParameters.
* To implement a project wizard, overwrite:
......@@ -125,7 +128,7 @@ public:
virtual ~BaseQt4ProjectWizardDialog();
int addModulesPage(int id = -1);
int addTargetsPage(QSet<QString> targets = QSet<QString>(), int id = -1);
int addTargetSetupPage(QSet<QString> targets = QSet<QString>(), int id = -1);
static QSet<QString> desktopTarget();
......@@ -135,14 +138,15 @@ public:
QString deselectedModules() const;
void setDeselectedModules(const QString &);
void writeUserFile(const QString &proFileName) const;
QSet<QString> selectedTargets() const;
bool writeUserFile(const QString &proFileName) const;
bool setupProject(Qt4Project *project) const;
bool isTargetSelected(const QString &targetid) const;
private:
inline void init(bool showModulesPage);
ModulesPage *m_modulesPage;
TargetsPage *m_targetsPage;
TargetSetupPage *m_targetSetupPage;
QString m_selectedModules;
QString m_deselectedModules;
};
......
/**************************************************************************
**
** This file is part of Qt Creator
**
** Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
**
** Contact: Nokia Corporation (qt-info@nokia.com)
**
** Commercial Usage
**
** Licensees holding valid Qt Commercial licenses may use this file in
** accordance with the Qt Commercial License Agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and Nokia.
**
** GNU Lesser General Public License Usage
**
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 2.1 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** If you are unsure which license is appropriate for your use, please
** contact the sales department at http://qt.nokia.com/contact.
**
**************************************************************************/
#include "targetspage.h"
#include "qt4projectmanager/qt4project.h"
#include "qt4projectmanager/qt4projectmanager.h"
#include "qt4projectmanager/qt4target.h"
#include "qt4projectmanager/qtversionmanager.h"
#include "qt4projectmanager/qt4projectmanagerconstants.h"
#include <extensionsystem/pluginmanager.h>
#include <QtCore/QSet>
#include <QtCore/QString>
#include <QtGui/QTreeWidget>
#include <QtGui/QLabel>
#include <QtGui/QLayout>
using namespace Qt4ProjectManager::Internal;
TargetsPage::TargetsPage(QWidget *parent)
: QWizardPage(parent)
{
setTitle(tr("Choose Qt versions"));
QVBoxLayout *vbox = new QVBoxLayout(this);
setTitle(tr("Select required Qt versions"));
QLabel *label = new QLabel(tr("Select the Qt versions to use in your project."), this);
label->setWordWrap(true);
vbox->addWidget(label);
m_treeWidget = new QTreeWidget(this);
m_treeWidget->setHeaderHidden(true);
vbox->addWidget(m_treeWidget);
QtVersionManager *vm = QtVersionManager::instance();
QStringList targets = vm->supportedTargetIds().toList();
qSort(targets.begin(), targets.end());
Qt4TargetFactory factory;
foreach (const QString &t, targets) {
QTreeWidgetItem *targetItem = new QTreeWidgetItem(m_treeWidget);
targetItem->setText(0, factory.displayNameForId(t));
targetItem->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable);
targetItem->setData(0, Qt::UserRole, t);
targetItem->setExpanded(true);
foreach (QtVersion *v, vm->versionsForTargetId(t)) {
QTreeWidgetItem *versionItem = new QTreeWidgetItem(targetItem);
versionItem->setText(0, v->displayName());
versionItem->setFlags(Qt::ItemIsUserCheckable | Qt::ItemIsEnabled | Qt::ItemIsSelectable);
versionItem->setData(0, Qt::UserRole, v->uniqueId());
versionItem->setCheckState(0, Qt::Unchecked);
}
}
connect(m_treeWidget, SIGNAL(itemChanged(QTreeWidgetItem*,int)),
this, SLOT(itemWasChanged()));
emit completeChanged();
}
void TargetsPage::setValidTargets(const QSet<QString> &targets)
{
if (targets.isEmpty())
return;
for (int i = 0; i < m_treeWidget->topLevelItemCount(); ++i) {
QTreeWidgetItem *currentTargetItem = m_treeWidget->topLevelItem(i);
QString currentTarget = currentTargetItem->data(0, Qt::UserRole).toString();
if (targets.contains(currentTarget))
currentTargetItem->setHidden(false);
else
currentTargetItem->setHidden(true);
}
// Make sure we have something checked!
if (selectedTargets().isEmpty()) {
for (int i = 0; i < m_treeWidget->topLevelItemCount(); ++i) {
QTreeWidgetItem *currentTargetItem = m_treeWidget->topLevelItem(i);
QString currentTarget = currentTargetItem->data(0, Qt::UserRole).toString();
if (targets.contains(currentTarget) && currentTargetItem->childCount() >= 1) {
currentTargetItem->child(0)->setCheckState(0, Qt::Checked);
break;
}
}
}
emit completeChanged();
}
QSet<QString> TargetsPage::selectedTargets() const
{
QSet<QString> result;
for (int i = 0; i < m_treeWidget->topLevelItemCount(); ++i) {
QTreeWidgetItem * targetItem = m_treeWidget->topLevelItem(i);
QString target = targetItem->data(0, Qt::UserRole).toString();
QList<int> versions = selectedQtVersionIdsForTarget(target);
if (!versions.isEmpty())
result.insert(target);
}
return result;
}
QList<int> TargetsPage::selectedQtVersionIdsForTarget(const QString &t) const
{
QList<int> result;
for (int i = 0; i < m_treeWidget->topLevelItemCount(); ++i) {
QTreeWidgetItem * current = m_treeWidget->topLevelItem(i);
QString target = current->data(0, Qt::UserRole).toString();
if (t != target || current->isHidden())
continue;
for (int j = 0; j < current->childCount(); ++j) {
QTreeWidgetItem * child = current->child(j);
if (child->checkState(0) != Qt::Checked)
continue;
result.append(child->data(0, Qt::UserRole).toInt());
}
}
return result;
}
void TargetsPage::itemWasChanged()
{
emit completeChanged();
}
bool TargetsPage::isComplete() const
{
return !selectedTargets().isEmpty();
}
bool TargetsPage::needToDisplayPage() const
{
int targetCount = 0;
for (int i = 0; i < m_treeWidget->topLevelItemCount(); ++i) {
QTreeWidgetItem * current = m_treeWidget->topLevelItem(i);
if (current->isHidden())
continue;
++targetCount;
if (targetCount > 1)
return true;
if (current->childCount() > 1)
return true;
}
return false;
}
void TargetsPage::writeUserFile(const QString &proFileName) const
{
Qt4Manager *manager = ExtensionSystem::PluginManager::instance()->getObject<Qt4Manager>();
Q_ASSERT(manager);
Qt4Project *pro = new Qt4Project(manager, proFileName);
if (setupProject(pro))
pro->saveSettings();
delete pro;
}
bool TargetsPage::setupProject(Qt4ProjectManager::Qt4Project *project) const
{
if (!project)
return false;
// Generate user settings:
QSet<QString> targets = selectedTargets();
if (targets.isEmpty())
return false;
QtVersionManager *vm = QtVersionManager::instance();
foreach (const QString &targetId, targets) {
QList<int> versionIds = selectedQtVersionIdsForTarget(targetId);
QList<QtVersion *> versions;
foreach (int id, versionIds)
versions.append(vm->version(id));
Qt4Target * target = project->targetFactory()->create(project, targetId, versions);
project->addTarget(target);
}
return true;
}
/**************************************************************************
**
** This file is part of Qt Creator
**
** Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
**
** Contact: Nokia Corporation (qt-info@nokia.com)
**
** Commercial Usage
**
** Licensees holding valid Qt Commercial licenses may use this file in
** accordance with the Qt Commercial License Agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and Nokia.
**
** GNU Lesser General Public License Usage
**
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 2.1 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** If you are unsure which license is appropriate for your use, please
** contact the sales department at http://qt.nokia.com/contact.
**
**************************************************************************/
#ifndef TARGETSPAGE_H
#define TARGETSPAGE_H
#include <QtCore/QList>
#include <QtCore/QSet>
#include <QtCore/QString>
#include <QtGui/QWizard>
QT_BEGIN_NAMESPACE
class QTreeWidget;
QT_END_NAMESPACE
namespace Qt4ProjectManager {
class Qt4Project;
namespace Internal {
class TargetsPage : public QWizardPage
{
Q_OBJECT
public:
explicit TargetsPage(QWidget* parent = 0);
void setValidTargets(const QSet<QString> &targets);
QSet<QString> selectedTargets() const;
QList<int> selectedQtVersionIdsForTarget(const QString &) const;
bool isComplete() const;
bool needToDisplayPage() const;
void writeUserFile(const QString &proFileName) const;
bool setupProject(Qt4Project *project) const;
private slots:
void itemWasChanged();
private:
QSet<QString> m_validTargets;
QTreeWidget * m_treeWidget;
};
} // namespace Internal
} // namespace Qt4ProjectManager
#endif // TARGETSPAGE_H
......@@ -60,7 +60,7 @@ TestWizardDialog::TestWizardDialog(const QString &templateName,
setWindowIcon(icon);
setWindowTitle(templateName);
setSelectedModules(QLatin1String("core testlib"), true);
addTargetsPage();
addTargetSetupPage();
m_testPageId = addPage(m_testPage);
m_modulesPageId = addModulesPage();
foreach (QWizardPage *p, extensionPages)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment