diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemoconstants.h b/src/plugins/qt4projectmanager/qt-maemo/maemoconstants.h index 4661e29aca29fb4d75cea708a741f52fbd50ff5f..afae1bfbc6680112d02b5562e19ad1d6ffa035b2 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemoconstants.h +++ b/src/plugins/qt4projectmanager/qt-maemo/maemoconstants.h @@ -34,8 +34,12 @@ #ifndef MAEMOCONSTANTS_H #define MAEMOCONSTANTS_H +#include <QLatin1String> + namespace Qt4ProjectManager { - namespace Internal { +namespace Internal { + +enum QemuStatus { QemuStarting, QemuFailedToStart, QemuFinished, QemuCrashed }; #define PREFIX "Qt4ProjectManager.MaemoRunConfiguration" @@ -49,7 +53,7 @@ static const QLatin1String LastDeployedKey(PREFIX ".LastDeployed"); static const QLatin1String DebuggingHelpersLastDeployedKey(PREFIX ".DebuggingHelpersLastDeployed"); static const QLatin1String ProFileKey(".ProFile"); - } // namespace Internal +} // namespace Internal } // namespace Qt4ProjectManager #endif // MAEMOCONSTANTS_H diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemomanager.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemomanager.cpp index 4c25e303d0b8debd3fe335163c52aa761005eb83..d5f36137c67c71e836cc4d2c58b3829e0e132f55 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemomanager.cpp +++ b/src/plugins/qt4projectmanager/qt-maemo/maemomanager.cpp @@ -51,6 +51,7 @@ #include <QtCore/QTextStream> #include <QtGui/QAction> +#include <QtGui/QMessageBox> namespace Qt4ProjectManager { namespace Internal { @@ -187,20 +188,55 @@ MaemoManager::triggered() } void -MaemoManager::updateQemuSimulatorStarter(bool running) +MaemoManager::qemuStatusChanged(QemuStatus status, const QString &error) { - if (m_qemuAction) { - QIcon::State state = QIcon::Off; - QString toolTip(tr("Start Maemo Emulator")); - if (running) { - state = QIcon::On; - toolTip = tr("Stop Maemo Emulator"); - } + if (!m_qemuAction) + return; - m_qemuAction->setToolTip(toolTip); - m_qemuAction->setIcon(icon.pixmap(iconSize, QIcon::Normal, state)); + bool running; + QString message; + switch (status) { + case QemuStarting: + running = true; + break; + case QemuFailedToStart: + running = false; + message = tr("Qemu failed to start: %1").arg(error); + break; + case QemuCrashed: + running = false; + message = tr("Qemu crashed"); + break; + case QemuFinished: + running = false; + break; + default: + Q_ASSERT(!"Missing handling of Qemu status"); } + + if (!message.isEmpty()) + QMessageBox::warning(0, tr("Qemu error"), message); + updateQemuIcon(running); +} + +void MaemoManager::updateQemuIcon(bool running) +{ + if (!m_qemuAction) + return; + + QIcon::State state; + QString toolTip; + if (running) { + state = QIcon::On; + toolTip = tr("Stop Maemo Emulator"); + } else { + state = QIcon::Off; + toolTip = tr("Start Maemo Emulator"); + } + + m_qemuAction->setToolTip(toolTip); + m_qemuAction->setIcon(icon.pixmap(iconSize, QIcon::Normal, state)); } - } // namespace Internal +} // namespace Internal } // namespace Qt4ProjectManager diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemomanager.h b/src/plugins/qt4projectmanager/qt-maemo/maemomanager.h index 9d8a70839f04118acf7a5e0855597494bb5aac92..88b0f4f90dc7764096144364e90a746e753c41cc 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemomanager.h +++ b/src/plugins/qt4projectmanager/qt-maemo/maemomanager.h @@ -30,6 +30,8 @@ #ifndef MAEMOMANAGER_H #define MAEMOMANAGER_H +#include "maemoconstants.h" + #include <QtCore/QObject> #include <QtCore/QSet> @@ -69,12 +71,13 @@ public: void removeQemuSimulatorStarter(Project *project); void setQemuSimulatorStarterEnabled(bool state); + void updateQemuIcon(bool running); MaemoSettingsPage *settingsPage() const { return m_settingsPage; } public slots: void triggered(); - void updateQemuSimulatorStarter(bool running); + void qemuStatusChanged(QemuStatus status, const QString &error); signals: void startStopQemu(); diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp index 89df7fb9af54032a5963f181771760e3facb429e..f26690eadaa44ee80d7231adc8724e24c4aec1ef 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp +++ b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.cpp @@ -100,13 +100,16 @@ void MaemoRunConfiguration::init() this, SLOT(proFileUpdate(Qt4ProjectManager::Internal::Qt4ProFileNode*))); qemu = new QProcess(this); + connect(qemu, SIGNAL(error(QProcess::ProcessError)), this, + SLOT(qemuProcessError(QProcess::ProcessError))); connect(qemu, SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(qemuProcessFinished())); connect(&MaemoManager::instance(), SIGNAL(startStopQemu()), this, SLOT(startStopQemu())); - connect(this, SIGNAL(qemuProcessStatus(bool)), &MaemoManager::instance(), - SLOT(updateQemuSimulatorStarter(bool))); + connect(this, SIGNAL(qemuProcessStatus(QemuStatus, QString)), + &MaemoManager::instance(), + SLOT(qemuStatusChanged(QemuStatus,QString))); } MaemoRunConfiguration::~MaemoRunConfiguration() @@ -475,7 +478,6 @@ void MaemoRunConfiguration::startStopQemu() if (qemu->state() == QProcess::Running) { qemu->terminate(); qemu->kill(); - emit qemuProcessStatus(false); } return; } @@ -505,12 +507,20 @@ void MaemoRunConfiguration::startStopQemu() ; // keep qemu->start(app % QLatin1Char(' ') % simulatorArgs(), QIODevice::ReadWrite); - emit qemuProcessStatus(qemu->waitForStarted()); + emit qemuProcessStatus(QemuStarting); } void MaemoRunConfiguration::qemuProcessFinished() { - emit qemuProcessStatus(false); + const QemuStatus status + = qemu->exitStatus() == QProcess::CrashExit ? QemuCrashed : QemuFinished; + emit qemuProcessStatus(status); +} + +void MaemoRunConfiguration::qemuProcessError(QProcess::ProcessError error) +{ + if (error == QProcess::FailedToStart) + emit qemuProcessStatus(QemuFailedToStart, qemu->errorString()); } void MaemoRunConfiguration::updateDeviceConfigurations() diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.h b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.h index 1e39b54395d87721bc72367f0b78e4719176e04c..66949259a70cdeecb9c99d27391a5dee5cd3a98b 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.h +++ b/src/plugins/qt4projectmanager/qt-maemo/maemorunconfiguration.h @@ -30,11 +30,13 @@ #ifndef MAEMORUNCONFIGURATION_H #define MAEMORUNCONFIGURATION_H +#include "maemoconstants.h" #include "maemodeviceconfigurations.h" #include <projectexplorer/runconfiguration.h> #include <QtCore/QDateTime> +#include <QtCore/QProcess> #include <QtCore/QStringList> QT_FORWARD_DECLARE_CLASS(QProcess) @@ -108,7 +110,7 @@ signals: void deviceConfigurationChanged(ProjectExplorer::Target *target); void targetInformationChanged() const; void cachedSimulatorInformationChanged() const; - void qemuProcessStatus(bool running); + void qemuProcessStatus(QemuStatus, const QString &error = QString()); protected: MaemoRunConfiguration(Qt4Target *parent, MaemoRunConfiguration *source); @@ -120,6 +122,7 @@ private slots: void startStopQemu(); void qemuProcessFinished(); + void qemuProcessError(QProcess::ProcessError error); private: void init(); diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemorunfactories.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemorunfactories.cpp index 9ef5380410c3f25a8355d46ee968ade1c110c2a0..6dc3b6c170eb18790492a9c105126fc45679481c 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemorunfactories.cpp +++ b/src/plugins/qt4projectmanager/qt-maemo/maemorunfactories.cpp @@ -243,7 +243,7 @@ void MaemoRunConfigurationFactory::updateMaemoEmulatorStarter(Target *target) co } } - MaemoManager::instance().updateQemuSimulatorStarter(isRunning); + MaemoManager::instance().updateQemuIcon(isRunning); MaemoManager::instance().setQemuSimulatorStarterEnabled(enable); }