forked from qt-creator/qt-creator
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
152 lines
4.6 KiB
C++
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
|