From 13a608f86fdd7726f0bd1328fa5a70d0f2d7cf28 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint <Friedemann.Kleint@nokia.com> Date: Fri, 26 Feb 2010 14:55:25 +0100 Subject: [PATCH] uic-Codemodel-updating: Decouple form editor. Pass around contents as string, saving repeated invocation of FormWindowEditor::contents(). Remove dependency to FormWindowEditor. Reviewed-by: dt <qtc-committer@nokia.com> --- src/plugins/qt4projectmanager/qt4nodes.cpp | 14 ++++---- src/plugins/qt4projectmanager/qt4nodes.h | 6 +--- .../qt4projectmanager/qt4projectmanager.cpp | 12 ++++--- .../qtuicodemodelsupport.cpp | 33 +++++++++---------- .../qt4projectmanager/qtuicodemodelsupport.h | 6 +--- 5 files changed, 32 insertions(+), 39 deletions(-) diff --git a/src/plugins/qt4projectmanager/qt4nodes.cpp b/src/plugins/qt4projectmanager/qt4nodes.cpp index 80fbd409b35..106f58098e9 100644 --- a/src/plugins/qt4projectmanager/qt4nodes.cpp +++ b/src/plugins/qt4projectmanager/qt4nodes.cpp @@ -1244,16 +1244,16 @@ void Qt4ProFileNode::updateCodeModelSupportFromBuild(const QStringList &files) } } -void Qt4ProFileNode::updateCodeModelSupportFromEditor(const QString &uiFileName, Designer::FormWindowEditor *fw) +void Qt4ProFileNode::updateCodeModelSupportFromEditor(const QString &uiFileName, + const QString &contents) { - QMap<QString, Qt4UiCodeModelSupport *>::const_iterator it; - it = m_uiCodeModelSupport.constFind(uiFileName); - if (it != m_uiCodeModelSupport.constEnd()) { - it.value()->updateFromEditor(fw); - } + const QMap<QString, Qt4UiCodeModelSupport *>::const_iterator it = + m_uiCodeModelSupport.constFind(uiFileName); + if (it != m_uiCodeModelSupport.constEnd()) + it.value()->updateFromEditor(contents); foreach (ProjectExplorer::ProjectNode *pro, subProjectNodes()) if (Qt4ProFileNode *qt4proFileNode = qobject_cast<Qt4ProFileNode *>(pro)) - qt4proFileNode->updateCodeModelSupportFromEditor(uiFileName, fw); + qt4proFileNode->updateCodeModelSupportFromEditor(uiFileName, contents); } QString Qt4ProFileNode::uiDirectory() const diff --git a/src/plugins/qt4projectmanager/qt4nodes.h b/src/plugins/qt4projectmanager/qt4nodes.h index 4b2d673e890..c2215238a00 100644 --- a/src/plugins/qt4projectmanager/qt4nodes.h +++ b/src/plugins/qt4projectmanager/qt4nodes.h @@ -49,10 +49,6 @@ namespace Core { class ICore; } -namespace Designer { -class FormWindowEditor; -} - namespace Qt4ProjectManager { // Import base classes into namespace @@ -207,7 +203,7 @@ public: QStringList variableValue(const Qt4Variable var) const; void updateCodeModelSupportFromBuild(const QStringList &files); - void updateCodeModelSupportFromEditor(const QString &uiFileName, Designer::FormWindowEditor *fw); + void updateCodeModelSupportFromEditor(const QString &uiFileName, const QString &contents); QString buildDir() const; diff --git a/src/plugins/qt4projectmanager/qt4projectmanager.cpp b/src/plugins/qt4projectmanager/qt4projectmanager.cpp index 0f58ec839b0..d9c8480e255 100644 --- a/src/plugins/qt4projectmanager/qt4projectmanager.cpp +++ b/src/plugins/qt4projectmanager/qt4projectmanager.cpp @@ -115,13 +115,14 @@ void Qt4Manager::init() void Qt4Manager::editorChanged(Core::IEditor *editor) { // Handle old editor - Designer::FormWindowEditor *lastEditor = qobject_cast<Designer::FormWindowEditor *>(m_lastEditor); - if (lastEditor) { - disconnect(lastEditor, SIGNAL(changed()), this, SLOT(uiEditorContentsChanged())); + Designer::FormWindowEditor *lastFormEditor = qobject_cast<Designer::FormWindowEditor *>(m_lastEditor); + if (lastFormEditor) { + disconnect(lastFormEditor, SIGNAL(changed()), this, SLOT(uiEditorContentsChanged())); if (m_dirty) { + const QString contents = lastFormEditor->contents(); foreach(Qt4Project *project, m_projects) - project->rootProjectNode()->updateCodeModelSupportFromEditor(lastEditor->file()->fileName(), lastEditor); + project->rootProjectNode()->updateCodeModelSupportFromEditor(lastFormEditor->file()->fileName(), contents); m_dirty = false; } } @@ -142,8 +143,9 @@ void Qt4Manager::editorAboutToClose(Core::IEditor *editor) if (lastEditor) { disconnect(lastEditor, SIGNAL(changed()), this, SLOT(uiEditorContentsChanged())); if (m_dirty) { + const QString contents = lastEditor->contents(); foreach(Qt4Project *project, m_projects) - project->rootProjectNode()->updateCodeModelSupportFromEditor(lastEditor->file()->fileName(), lastEditor); + project->rootProjectNode()->updateCodeModelSupportFromEditor(lastEditor->file()->fileName(), contents); m_dirty = false; } } diff --git a/src/plugins/qt4projectmanager/qtuicodemodelsupport.cpp b/src/plugins/qt4projectmanager/qtuicodemodelsupport.cpp index 173fb9d1a9a..472525dec94 100644 --- a/src/plugins/qt4projectmanager/qtuicodemodelsupport.cpp +++ b/src/plugins/qt4projectmanager/qtuicodemodelsupport.cpp @@ -33,11 +33,11 @@ #include "qt4project.h" #include "qt4target.h" -#include <designer/formwindoweditor.h> - using namespace Qt4ProjectManager; using namespace Internal; +enum { debug = 0 }; + Qt4UiCodeModelSupport::Qt4UiCodeModelSupport(CppTools::CppModelManagerInterface *modelmanager, Qt4Project *project, const QString &source, @@ -123,33 +123,32 @@ bool Qt4UiCodeModelSupport::runUic(const QString &ui) const Qt4BuildConfiguration *qt4bc = m_project->activeTarget()->activeBuildConfiguration(); QProcess uic; uic.setEnvironment(qt4bc->environment().toStringList()); - uic.start(qt4bc->qtVersion()->uicCommand(), QStringList(), QIODevice::ReadWrite); - uic.waitForStarted(); + const QString uicCommand = qt4bc->qtVersion()->uicCommand(); + if (debug) + qDebug() << "Qt4UiCodeModelSupport::runUic " << uicCommand << " on " << ui.size() << " bytes"; + uic.start(uicCommand, QStringList(), QIODevice::ReadWrite); + if (!uic.waitForStarted()) + return false; uic.write(ui.toUtf8()); uic.closeWriteChannel(); - if (uic.waitForFinished()) { + if (uic.waitForFinished() && uic.exitStatus() == QProcess::NormalExit && uic.exitCode() == 0) { m_contents = uic.readAllStandardOutput(); m_cacheTime = QDateTime::currentDateTime(); - return true; + if (debug) + qDebug() << "ok" << m_contents.size() << "bytes."; + return true; } else { -// qDebug()<<"running uic failed"<<" using uic: "<<m_project->qtVersion(m_project->activeBuildConfiguration())->uicCommand(); -// qDebug()<<uic.readAllStandardError(); -// qDebug()<<uic.readAllStandardOutput(); -// qDebug()<<uic.errorString(); -// qDebug()<<uic.error(); + if (debug) + qDebug() << "failed" << uic.readAllStandardError(); uic.kill(); } return false; } -void Qt4UiCodeModelSupport::updateFromEditor(Designer::FormWindowEditor *fw) +void Qt4UiCodeModelSupport::updateFromEditor(const QString &formEditorContents) { -// qDebug()<<"Qt4UiCodeModelSupport::updateFromEditor"<<fw; - if (runUic(fw->contents())) { -// qDebug()<<"runUic: success, updated on the fly"; + if (runUic(formEditorContents)) { updateDocument(); - } else { -// qDebug()<<"runUic: failed, not updated"; } } diff --git a/src/plugins/qt4projectmanager/qtuicodemodelsupport.h b/src/plugins/qt4projectmanager/qtuicodemodelsupport.h index d7b46518d47..e85be7c2e33 100644 --- a/src/plugins/qt4projectmanager/qtuicodemodelsupport.h +++ b/src/plugins/qt4projectmanager/qtuicodemodelsupport.h @@ -34,10 +34,6 @@ #include <QtCore/QDateTime> -namespace Designer { -class FormWindowEditor; -} - namespace Qt4ProjectManager { class Qt4Project; namespace Internal { @@ -54,7 +50,7 @@ public: void setSourceName(const QString &name); virtual QByteArray contents() const; virtual QString fileName() const; - void updateFromEditor(Designer::FormWindowEditor *); + void updateFromEditor(const QString &formEditorContents); void updateFromBuild(); private: void init(); -- GitLab