Files
qt-creator/src/plugins/qt4projectmanager/qt-s60/s60emulatorrunconfiguration.h
dt ab8fc52d0b Use exact and aysnc .pro file evaluate
This is a big change touching almost all of our .pro file parsing.
With this patch we only evaluate once exact for all needs and once
greedy for the filelist. That is the qt runconfigurations don't have own
evaluaters but reuse the project wide exact evaluation.

We reevaluate if the user changes the build directory, the qmake
buildconfiguration or the qmake arguments. That is if you open src.pro
(or projects.pro) of qt with a shadow build you still don't get all the
files, but after correcting the build directory, we reevaluate the .pro
files and find all files. So for a suitable definition of fixed, that
bug is now fixed.

We now get the exact defines of all .pro files instead of all defines for all
buildconfigurations. We still don't distinguish in which
.pro file a DEFINE is set. So the code model now knows about all the
defines set for the given configuration but not for which files it is
actually set. Also that includes all DEFINES set in .qmake.cache or the
mkspecs. This means all defines from .pro files should now work.

The intial loading is still synchronous. I haven't looked into it to
deeply, but it seems possible to make it also async.There are probably a
few issues which need to be solved fist.

Also due to the asynchronous nature of the code, the executable is
updated a few seconds after actually changing the build configuration
2010-03-10 17:02:24 +01:00

152 lines
4.6 KiB
C++

/**************************************************************************
**
** 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 S60EMULATORRUNCONFIGURATION_H
#define S60EMULATORRUNCONFIGURATION_H
#include <projectexplorer/runconfiguration.h>
#include <projectexplorer/applicationlauncher.h>
#include <QtCore/QVariantMap>
#include <QtGui/QWidget>
QT_BEGIN_NAMESPACE
class QLabel;
class QLineEdit;
QT_END_NAMESPACE
namespace Utils {
class DetailsWidget;
}
namespace Qt4ProjectManager {
class Qt4Project;
namespace Internal {
class Qt4ProFileNode;
class Qt4Target;
class S60EmulatorRunConfigurationFactory;
class S60EmulatorRunConfiguration : public ProjectExplorer::RunConfiguration
{
Q_OBJECT
friend class S60EmulatorRunConfigurationFactory;
public:
S60EmulatorRunConfiguration(ProjectExplorer::Target *parent, const QString &proFilePath);
virtual ~S60EmulatorRunConfiguration();
Qt4Target *qt4Target() const;
bool isEnabled(ProjectExplorer::BuildConfiguration *configuration) const;
QWidget *configurationWidget();
QString executable() const;
QVariantMap toMap() const;
signals:
void targetInformationChanged();
private slots:
void proFileUpdate(Qt4ProjectManager::Internal::Qt4ProFileNode *pro);
protected:
S60EmulatorRunConfiguration(ProjectExplorer::Target *parent, S60EmulatorRunConfiguration *source);
virtual bool fromMap(const QVariantMap &map);
private:
void ctor();
void updateTarget();
QString m_proFilePath;
};
class S60EmulatorRunConfigurationWidget : public QWidget
{
Q_OBJECT
public:
S60EmulatorRunConfigurationWidget(S60EmulatorRunConfiguration *runConfiguration,
QWidget *parent = 0);
private slots:
void displayNameEdited(const QString &text);
void updateTargetInformation();
private:
S60EmulatorRunConfiguration *m_runConfiguration;
Utils::DetailsWidget *m_detailsWidget;
QLineEdit *m_nameLineEdit;
QLabel *m_executableLabel;
};
class S60EmulatorRunConfigurationFactory : public ProjectExplorer::IRunConfigurationFactory
{
Q_OBJECT
public:
explicit S60EmulatorRunConfigurationFactory(QObject *parent = 0);
~S60EmulatorRunConfigurationFactory();
bool canCreate(ProjectExplorer::Target *project, const QString &id) const;
ProjectExplorer::RunConfiguration *create(ProjectExplorer::Target *parent, const QString &id);
bool canRestore(ProjectExplorer::Target *parent, const QVariantMap &map) const;
ProjectExplorer::RunConfiguration *restore(ProjectExplorer::Target *parent, const QVariantMap &map);
bool canClone(ProjectExplorer::Target *parent, ProjectExplorer::RunConfiguration *source) const;
ProjectExplorer::RunConfiguration *clone(ProjectExplorer::Target *parent, ProjectExplorer::RunConfiguration *source);
QStringList availableCreationIds(ProjectExplorer::Target *pro) const;
// used to translate the ids to names to display to the user
QString displayNameForId(const QString &id) const;
};
class S60EmulatorRunControl : public ProjectExplorer::RunControl
{
Q_OBJECT
public:
explicit S60EmulatorRunControl(S60EmulatorRunConfiguration *runConfiguration);
~S60EmulatorRunControl() {}
void start();
void stop();
bool isRunning() const;
private slots:
void processExited(int exitCode);
void slotAddToOutputWindow(const QString &line);
void slotError(const QString & error);
private:
ProjectExplorer::ApplicationLauncher m_applicationLauncher;
QString m_executable;
};
} // namespace Internal
} // namespace Qt4ProjectManager
#endif // S60EMULATORRUNCONFIGURATION_H