From de7bc1d9cfdfef41c8e8fbeef9edc84f94804d1b Mon Sep 17 00:00:00 2001 From: ck <qt-info@nokia.com> Date: Wed, 19 May 2010 11:00:43 +0200 Subject: [PATCH] Maemo: Give more information to user about Qemu state. Reviewed-by: kh1 --- .../qt-maemo/maemoconstants.h | 8 ++- .../qt-maemo/maemomanager.cpp | 58 +++++++++++++++---- .../qt4projectmanager/qt-maemo/maemomanager.h | 5 +- .../qt-maemo/maemorunconfiguration.cpp | 20 +++++-- .../qt-maemo/maemorunconfiguration.h | 5 +- .../qt-maemo/maemorunfactories.cpp | 2 +- 6 files changed, 77 insertions(+), 21 deletions(-) diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemoconstants.h b/src/plugins/qt4projectmanager/qt-maemo/maemoconstants.h index 4661e29aca2..afae1bfbc66 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 4c25e303d0b..d5f36137c67 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 9d8a70839f0..88b0f4f90dc 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 89df7fb9af5..f26690eadaa 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 1e39b54395d..66949259a70 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 9ef5380410c..6dc3b6c170e 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); } -- GitLab