forked from qt-creator/qt-creator
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:
@@ -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
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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();
|
||||||
return true;
|
if (debug)
|
||||||
|
qDebug() << "ok" << m_contents.size() << "bytes.";
|
||||||
|
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";
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user