/* This file is part of KDevelop Copyright 2009 Andreas Pakulat Copyright 2009 Niko Sams This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "plasmoidexecutionjob.h" #include "executeplasmoidplugin.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace KDevelop; PlasmoidExecutionJob::PlasmoidExecutionJob(ExecutePlasmoidPlugin* iface, ILaunchConfiguration* cfg) : OutputJob( iface ) { QString identifier = cfg->config().readEntry("PlasmoidIdentifier", ""); Q_ASSERT(!identifier.isEmpty()); setToolTitle(i18n("Plasmoid Viewer")); setCapabilities(Killable); setStandardToolView( IOutputView::RunView ); setBehaviours(IOutputView::AllowUserClose | IOutputView::AutoScroll ); setObjectName("plasmoidviewer "+identifier); setDelegate(new OutputDelegate); m_process = new CommandExecutor(executable(cfg), this); m_process->setArguments( arguments(cfg) ); m_process->setWorkingDirectory(workingDirectory(cfg)); OutputModel* model = new OutputModel(m_process->workingDirectory(), this); model->setFilteringStrategy(OutputModel::CompilerFilter); setModel( model ); connect(m_process, SIGNAL(receivedStandardError(QStringList)), model, SLOT(appendLines(QStringList)) ); connect(m_process, SIGNAL(receivedStandardOutput(QStringList)), model, SLOT(appendLines(QStringList)) ); connect( m_process, SIGNAL(failed(QProcess::ProcessError)), SLOT(slotFailed(QProcess::ProcessError)) ); connect( m_process, SIGNAL(completed(int)), SLOT(slotCompleted(int)) ); } void PlasmoidExecutionJob::start() { startOutput(); model()->appendLine( m_process->workingDirectory() + "> " + m_process->command() + " " + m_process->arguments().join(" ") ); m_process->start(); } bool PlasmoidExecutionJob::doKill() { m_process->kill(); model()->appendLine( i18n("** Killed **") ); return true; } OutputModel* PlasmoidExecutionJob::model() { return qobject_cast( OutputJob::model() ); } void PlasmoidExecutionJob::slotCompleted(int code) { if( code != 0 ) { setError( FailedShownError ); model()->appendLine( i18n("*** Failed ***") ); } else { model()->appendLine( i18n("*** Finished ***") ); } emitResult(); } void PlasmoidExecutionJob::slotFailed(QProcess::ProcessError error) { setError(error); // FIXME need more detail setErrorText(i18n("Ninja failed to compile %1", m_process->workingDirectory())); model()->appendLine( i18n("*** Failed ***") ); emitResult(); } QString PlasmoidExecutionJob::executable(ILaunchConfiguration*) { return KStandardDirs::findExe("plasmoidviewer"); } QStringList PlasmoidExecutionJob::arguments(ILaunchConfiguration* cfg) { QStringList arguments = cfg->config().readEntry("Arguments", QStringList()); if(workingDirectory(cfg) == QDir::tempPath()) { QString identifier = cfg->config().readEntry("PlasmoidIdentifier", ""); arguments += identifier; } return arguments; } QString PlasmoidExecutionJob::workingDirectory(ILaunchConfiguration* cfg) { QString workingDirectory; IProject* p = cfg->project(); if(p) { QString identifier = cfg->config().readEntry("PlasmoidIdentifier", ""); QString possiblePath = KUrl(p->folder(), identifier).toLocalFile(); if(QFileInfo(possiblePath).isDir()) { workingDirectory = possiblePath; } } if(workingDirectory.isEmpty()) { workingDirectory = QDir::tempPath(); } return workingDirectory; }