/************************************************************************** ** ** This file is part of Qt Creator ** ** Copyright (C) 2011 Kläralvdalens Datakonsult AB, a KDAB Group company. ** ** Contact: Kläralvdalens Datakonsult AB (info@kdab.com) ** ** ** GNU Lesser General Public License Usage ** ** 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. ** ** In addition, as a special exception, Nokia gives you certain additional ** rights. These rights are described in the Nokia Qt LGPL Exception ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** Other Usage ** ** Alternatively, this file may be used in accordance with the terms and ** conditions contained in a signed written agreement between you and Nokia. ** ** If you have questions regarding the use of this file, please contact ** Nokia at info@qt.nokia.com. ** **************************************************************************/ #include "scriptmanager.h" #include "scriptingconstants.h" #include "scriptrunner.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace Scripting; using namespace Scripting::Internal; ScriptManager *ScriptManager::m_instance = 0; ScriptManager::ScriptManager(QObject *parent) : QObject(parent) { m_watcher = new QFileSystemWatcher(this); connect(m_watcher, SIGNAL(directoryChanged(QString)), this, SLOT(directoryChanged(QString))); m_mapper = new QSignalMapper(this); connect(m_mapper, SIGNAL(mapped(QString)), this, SLOT(runFile(QString))); m_defaultDirectory = defaultDirectory(); if (!m_defaultDirectory.isEmpty()) { m_watcher->addPath(m_defaultDirectory); directoryChanged(m_defaultDirectory, true); } ProjectExplorer::SessionManager *sm = ProjectExplorer::ProjectExplorerPlugin::instance()->session(); connect(sm, SIGNAL(projectAdded(ProjectExplorer::Project*)), this, SLOT(slotProjectAdded(ProjectExplorer::Project*))); connect(sm, SIGNAL(projectRemoved(ProjectExplorer::Project*)), this, SLOT(slotProjectRemoved(ProjectExplorer::Project*))); m_runner = new ScriptRunner(this); m_instance = this; } ScriptManager::~ScriptManager() { } ScriptManager * ScriptManager::instance() { return m_instance; } QString ScriptManager::defaultDirectory() const { const QString &path = Core::ICore::userResourcePath() + QLatin1String("/scripts"); if (QFile::exists(path) || QDir().mkpath(path)) return path; qWarning() << "could not create " << path; return QString(); } QString ScriptManager::scriptDirectory(ProjectExplorer::Project *project) const { const QString &path = project->projectDirectory() + QLatin1Char('/') + Constants::S_SCRIPTDIRECTORY; if (QFile::exists(path)) return path; return QString(); } ScriptManager::ScriptList ScriptManager::scriptList() const { return m_scriptList; } QStringList scriptListFromDir(const QString &path) { QDir dir(path); QStringList filter; filter << QLatin1String("*.") + Constants::S_EXTENSION; QStringList files = dir.entryList(filter, QDir::Files); for (int i=0; ishowOutputPane(); Core::MessageManager::instance()->printToOutputPane(tr("Start %1...").arg(fileName), Core::MessageManager::NoModeSwitch); ErrorMessage message = m_runner->runScript(fileName); if (message.hasError) Core::MessageManager::instance()->printToOutputPane(tr("Error in %1 at line %3: %4\n").arg(message.fileName).arg(message.line).arg(message.message), Core::MessageManager::NoModeSwitch); else Core::MessageManager::instance()->printToOutputPane(tr("The script exited normally\n"), Core::MessageManager::NoModeSwitch); } void ScriptManager::directoryChanged(const QString &path, bool initialize) { QString projectName = m_projectMap.key(path); QStringList files = scriptListFromDir(path); if (!initialize) { // Remove deleted scripts QMutableListIterator