diff options
author | Daniel Teske <daniel.teske@digia.com> | 2012-10-08 16:34:00 +0200 |
---|---|---|
committer | Daniel Teske <daniel.teske@digia.com> | 2012-10-09 17:09:01 +0200 |
commit | 3ebbba2e0793d7da419353f26ff2f319c07f4f84 (patch) | |
tree | 1e4e1341d7953905807bbd71922b7e51afca7812 | |
parent | 502530dc20418c2b763ca706df2ce3d3f9295a29 (diff) |
Let uic run in the background
Change-Id: I5ea4b17a6d41e0f29bf9e9b758b154b79ea57300
Reviewed-by: Tobias Hunger <tobias.hunger@digia.com>
-rw-r--r-- | src/plugins/cpptools/uicodecompletionsupport.cpp | 57 | ||||
-rw-r--r-- | src/plugins/cpptools/uicodecompletionsupport.h | 4 |
2 files changed, 42 insertions, 19 deletions
diff --git a/src/plugins/cpptools/uicodecompletionsupport.cpp b/src/plugins/cpptools/uicodecompletionsupport.cpp index 1e67c221fe..e3d5c88c74 100644 --- a/src/plugins/cpptools/uicodecompletionsupport.cpp +++ b/src/plugins/cpptools/uicodecompletionsupport.cpp @@ -44,7 +44,8 @@ UiCodeModelSupport::UiCodeModelSupport(CppModelManagerInterface *modelmanager, : AbstractEditorSupport(modelmanager), m_sourceName(source), m_fileName(uiHeaderFile), - m_initialized(false) + m_initialized(false), + m_running(false) { if (debug) qDebug()<<"ctor UiCodeModelSupport for"<<m_sourceName<<uiHeaderFile; @@ -103,6 +104,8 @@ QByteArray UiCodeModelSupport::contents() const { if (!m_initialized) init(); + if (m_running) + finishProcess(); return m_contents; } @@ -128,42 +131,58 @@ void UiCodeModelSupport::setFileName(const QString &name) bool UiCodeModelSupport::runUic(const QString &ui) const { - QProcess process; const QString uic = uicCommand(); if (uic.isEmpty()) return false; - process.setEnvironment(environment()); + m_process.setEnvironment(environment()); if (debug) qDebug() << "UiCodeModelSupport::runUic " << uic << " on " << ui.size() << " bytes"; - process.start(uic, QStringList(), QIODevice::ReadWrite); - if (!process.waitForStarted()) + m_process.start(uic, QStringList(), QIODevice::ReadWrite); + if (!m_process.waitForStarted()) return false; - process.write(ui.toUtf8()); - if (!process.waitForBytesWritten(3000)) + m_process.write(ui.toUtf8()); + if (!m_process.waitForBytesWritten(3000)) goto error; - process.closeWriteChannel(); - if (!process.waitForFinished(3000) && process.exitStatus() != QProcess::NormalExit && process.exitCode() != 0) - goto error; - - m_contents = process.readAllStandardOutput(); - m_cacheTime = QDateTime::currentDateTime(); - if (debug) - qDebug() << "ok" << m_contents.size() << "bytes."; + m_process.closeWriteChannel(); + m_running = true; return true; error: if (debug) - qDebug() << "failed" << process.readAllStandardError(); - process.kill(); + qDebug() << "failed" << m_process.readAllStandardError(); + m_process.kill(); + m_running = false; return false; } void UiCodeModelSupport::updateFromEditor(const QString &formEditorContents) { - if (runUic(formEditorContents)) { - updateDocument(); + if (runUic(formEditorContents)) + if (finishProcess()) + updateDocument(); +} + +bool UiCodeModelSupport::finishProcess() const +{ + if (!m_running) + return false; + if (!m_process.waitForFinished(3000) + && m_process.exitStatus() != QProcess::NormalExit + && m_process.exitCode() != 0) { + if (debug) + qDebug() << "failed" << m_process.readAllStandardError(); + m_process.kill(); + m_running = false; + return false; } + + m_contents = m_process.readAllStandardOutput(); + m_cacheTime = QDateTime::currentDateTime(); + if (debug) + qDebug() << "ok" << m_contents.size() << "bytes."; + m_running = false; + return true; } void UiCodeModelSupport::updateFromBuild() diff --git a/src/plugins/cpptools/uicodecompletionsupport.h b/src/plugins/cpptools/uicodecompletionsupport.h index 4f6db3696a..afbdbac211 100644 --- a/src/plugins/cpptools/uicodecompletionsupport.h +++ b/src/plugins/cpptools/uicodecompletionsupport.h @@ -37,6 +37,7 @@ #include "ModelManagerInterface.h" #include <QDateTime> +#include <QProcess> namespace CppTools { @@ -59,11 +60,14 @@ protected: private: void init() const; bool runUic(const QString &ui) const; + bool finishProcess() const; + mutable QProcess m_process; QString m_sourceName; QString m_fileName; mutable bool m_initialized; mutable QByteArray m_contents; mutable QDateTime m_cacheTime; + mutable bool m_running; }; } // CppTools |