/************************************************************************** ** ** This file is part of Qt Creator ** ** Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). ** ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** Commercial Usage ** ** Licensees holding valid Qt Commercial licenses may use this file in ** accordance with the Qt Commercial License Agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and Nokia. ** ** GNU Lesser General Public License Usage ** ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 2.1 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ** If you are unsure which license is appropriate for your use, please ** contact the sales department at http://qt.nokia.com/contact. ** **************************************************************************/ #include "qtuicodemodelsupport.h" #include "qt4buildconfiguration.h" #include "qt4project.h" #include "qt4target.h" #include using namespace Qt4ProjectManager; using namespace Internal; enum { debug = 0 }; Qt4UiCodeModelSupport::Qt4UiCodeModelSupport(CppTools::CppModelManagerInterface *modelmanager, Qt4Project *project, const QString &source, const QString &uiHeaderFile) : CppTools::AbstractEditorSupport(modelmanager), m_project(project), m_sourceName(source), m_fileName(uiHeaderFile), m_updateIncludingFiles(false) { // qDebug()<<"ctor Qt4UiCodeModelSupport for"< sourceTime)) { QFile file(m_fileName); if (file.open(QFile::ReadOnly)) { // qDebug()<<"ui*h file is more recent then source file, using information from ui*h file"<activeTarget()->activeBuildConfiguration(); QProcess uic; uic.setEnvironment(qt4bc->environment().toStringList()); 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() && uic.exitStatus() == QProcess::NormalExit && uic.exitCode() == 0) { m_contents = uic.readAllStandardOutput(); m_cacheTime = QDateTime::currentDateTime(); if (debug) qDebug() << "ok" << m_contents.size() << "bytes."; return true; } else { if (debug) qDebug() << "failed" << uic.readAllStandardError(); uic.kill(); } return false; } void Qt4UiCodeModelSupport::updateFromEditor(const QString &formEditorContents) { if (runUic(formEditorContents)) { updateDocument(); } } void Qt4UiCodeModelSupport::updateFromBuild() { // qDebug()<<"Qt4UiCodeModelSupport::updateFromBuild() for file"<= sourceTime) { // qDebug()<<"Cache is still more recent then source"; return; } else { QFileInfo fi(m_fileName); QDateTime uiHeaderTime = fi.exists() ? fi.lastModified() : QDateTime(); if (uiHeaderTime.isValid() && (uiHeaderTime > sourceTime)) { if (m_cacheTime >= uiHeaderTime) return; // qDebug()<<"found ui*h updating from it"; QFile file(m_fileName); if (file.open(QFile::ReadOnly)) { QTextStream stream(&file); m_contents = stream.readAll().toUtf8(); m_cacheTime = uiHeaderTime; updateDocument(); return; } } // qDebug()<<"ui*h not found or not more recent then source not changing anything"; } }