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>
This commit is contained in:
Friedemann Kleint
2010-02-26 14:55:25 +01:00
parent f1192c419e
commit 13a608f86f
5 changed files with 32 additions and 39 deletions

View File

@@ -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; const QMap<QString, Qt4UiCodeModelSupport *>::const_iterator it =
it = m_uiCodeModelSupport.constFind(uiFileName); m_uiCodeModelSupport.constFind(uiFileName);
if (it != m_uiCodeModelSupport.constEnd()) { if (it != m_uiCodeModelSupport.constEnd())
it.value()->updateFromEditor(fw); it.value()->updateFromEditor(contents);
}
foreach (ProjectExplorer::ProjectNode *pro, subProjectNodes()) foreach (ProjectExplorer::ProjectNode *pro, subProjectNodes())
if (Qt4ProFileNode *qt4proFileNode = qobject_cast<Qt4ProFileNode *>(pro)) if (Qt4ProFileNode *qt4proFileNode = qobject_cast<Qt4ProFileNode *>(pro))
qt4proFileNode->updateCodeModelSupportFromEditor(uiFileName, fw); qt4proFileNode->updateCodeModelSupportFromEditor(uiFileName, contents);
} }
QString Qt4ProFileNode::uiDirectory() const QString Qt4ProFileNode::uiDirectory() const

View File

@@ -49,10 +49,6 @@ namespace Core {
class ICore; class ICore;
} }
namespace Designer {
class FormWindowEditor;
}
namespace Qt4ProjectManager { namespace Qt4ProjectManager {
// Import base classes into namespace // Import base classes into namespace
@@ -207,7 +203,7 @@ public:
QStringList variableValue(const Qt4Variable var) const; QStringList variableValue(const Qt4Variable var) const;
void updateCodeModelSupportFromBuild(const QStringList &files); void updateCodeModelSupportFromBuild(const QStringList &files);
void updateCodeModelSupportFromEditor(const QString &uiFileName, Designer::FormWindowEditor *fw); void updateCodeModelSupportFromEditor(const QString &uiFileName, const QString &contents);
QString buildDir() const; QString buildDir() const;

View File

@@ -115,13 +115,14 @@ void Qt4Manager::init()
void Qt4Manager::editorChanged(Core::IEditor *editor) void Qt4Manager::editorChanged(Core::IEditor *editor)
{ {
// Handle old editor // Handle old editor
Designer::FormWindowEditor *lastEditor = qobject_cast<Designer::FormWindowEditor *>(m_lastEditor); Designer::FormWindowEditor *lastFormEditor = qobject_cast<Designer::FormWindowEditor *>(m_lastEditor);
if (lastEditor) { if (lastFormEditor) {
disconnect(lastEditor, SIGNAL(changed()), this, SLOT(uiEditorContentsChanged())); disconnect(lastFormEditor, SIGNAL(changed()), this, SLOT(uiEditorContentsChanged()));
if (m_dirty) { if (m_dirty) {
const QString contents = lastFormEditor->contents();
foreach(Qt4Project *project, m_projects) foreach(Qt4Project *project, m_projects)
project->rootProjectNode()->updateCodeModelSupportFromEditor(lastEditor->file()->fileName(), lastEditor); project->rootProjectNode()->updateCodeModelSupportFromEditor(lastFormEditor->file()->fileName(), contents);
m_dirty = false; m_dirty = false;
} }
} }
@@ -142,8 +143,9 @@ void Qt4Manager::editorAboutToClose(Core::IEditor *editor)
if (lastEditor) { if (lastEditor) {
disconnect(lastEditor, SIGNAL(changed()), this, SLOT(uiEditorContentsChanged())); disconnect(lastEditor, SIGNAL(changed()), this, SLOT(uiEditorContentsChanged()));
if (m_dirty) { if (m_dirty) {
const QString contents = lastEditor->contents();
foreach(Qt4Project *project, m_projects) foreach(Qt4Project *project, m_projects)
project->rootProjectNode()->updateCodeModelSupportFromEditor(lastEditor->file()->fileName(), lastEditor); project->rootProjectNode()->updateCodeModelSupportFromEditor(lastEditor->file()->fileName(), contents);
m_dirty = false; m_dirty = false;
} }
} }

View File

@@ -33,11 +33,11 @@
#include "qt4project.h" #include "qt4project.h"
#include "qt4target.h" #include "qt4target.h"
#include <designer/formwindoweditor.h>
using namespace Qt4ProjectManager; using namespace Qt4ProjectManager;
using namespace Internal; using namespace Internal;
enum { debug = 0 };
Qt4UiCodeModelSupport::Qt4UiCodeModelSupport(CppTools::CppModelManagerInterface *modelmanager, Qt4UiCodeModelSupport::Qt4UiCodeModelSupport(CppTools::CppModelManagerInterface *modelmanager,
Qt4Project *project, Qt4Project *project,
const QString &source, const QString &source,
@@ -123,33 +123,32 @@ bool Qt4UiCodeModelSupport::runUic(const QString &ui) const
Qt4BuildConfiguration *qt4bc = m_project->activeTarget()->activeBuildConfiguration(); Qt4BuildConfiguration *qt4bc = m_project->activeTarget()->activeBuildConfiguration();
QProcess uic; QProcess uic;
uic.setEnvironment(qt4bc->environment().toStringList()); uic.setEnvironment(qt4bc->environment().toStringList());
uic.start(qt4bc->qtVersion()->uicCommand(), QStringList(), QIODevice::ReadWrite); const QString uicCommand = qt4bc->qtVersion()->uicCommand();
uic.waitForStarted(); 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.write(ui.toUtf8());
uic.closeWriteChannel(); uic.closeWriteChannel();
if (uic.waitForFinished()) { if (uic.waitForFinished() && uic.exitStatus() == QProcess::NormalExit && uic.exitCode() == 0) {
m_contents = uic.readAllStandardOutput(); m_contents = uic.readAllStandardOutput();
m_cacheTime = QDateTime::currentDateTime(); m_cacheTime = QDateTime::currentDateTime();
if (debug)
qDebug() << "ok" << m_contents.size() << "bytes.";
return true; return true;
} else { } else {
// qDebug()<<"running uic failed"<<" using uic: "<<m_project->qtVersion(m_project->activeBuildConfiguration())->uicCommand(); if (debug)
// qDebug()<<uic.readAllStandardError(); qDebug() << "failed" << uic.readAllStandardError();
// qDebug()<<uic.readAllStandardOutput();
// qDebug()<<uic.errorString();
// qDebug()<<uic.error();
uic.kill(); uic.kill();
} }
return false; return false;
} }
void Qt4UiCodeModelSupport::updateFromEditor(Designer::FormWindowEditor *fw) void Qt4UiCodeModelSupport::updateFromEditor(const QString &formEditorContents)
{ {
// qDebug()<<"Qt4UiCodeModelSupport::updateFromEditor"<<fw; if (runUic(formEditorContents)) {
if (runUic(fw->contents())) {
// qDebug()<<"runUic: success, updated on the fly";
updateDocument(); updateDocument();
} else {
// qDebug()<<"runUic: failed, not updated";
} }
} }

View File

@@ -34,10 +34,6 @@
#include <QtCore/QDateTime> #include <QtCore/QDateTime>
namespace Designer {
class FormWindowEditor;
}
namespace Qt4ProjectManager { namespace Qt4ProjectManager {
class Qt4Project; class Qt4Project;
namespace Internal { namespace Internal {
@@ -54,7 +50,7 @@ public:
void setSourceName(const QString &name); void setSourceName(const QString &name);
virtual QByteArray contents() const; virtual QByteArray contents() const;
virtual QString fileName() const; virtual QString fileName() const;
void updateFromEditor(Designer::FormWindowEditor *); void updateFromEditor(const QString &formEditorContents);
void updateFromBuild(); void updateFromBuild();
private: private:
void init(); void init();