[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: KDE/kdevelop/lib
From: Andreas Pakulat <apaku () gmx ! de>
Date: 2007-05-28 16:31:33
Message-ID: 1180369893.392027.25808.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 669145 by apaku:
Port to QProcess, later we may port to KProcess (once it is created) to have some \
convient methods.
M +33 -13 plugins/outputviews/outputviewcommand.cpp
M +7 -4 plugins/outputviews/outputviewcommand.h
M +16 -11 util/processlinemaker.cpp
M +4 -4 util/processlinemaker.h
--- trunk/KDE/kdevelop/lib/plugins/outputviews/outputviewcommand.cpp #669144:669145
@@ -30,7 +30,6 @@
#include <QAction>
#include <kurl.h>
-#include <k3process.h>
#include <kdebug.h>
OutputViewCommand::OutputViewCommand( const KUrl& workdir, const QStringList& \
command, @@ -39,7 +38,7 @@
IOutputViewItemFactory *itemFactory )
: QObject(0), m_proc(0), m_model(model)
{
- m_proc = new K3Process();
+ m_proc = new QProcess();
m_proc->setWorkingDirectory( workdir.toLocalFile() );
m_procLineMaker = new ProcessLineMaker( m_proc );
@@ -52,19 +51,19 @@
m_factory = new StandardOutputViewItemFactory<IOutputViewItem>();
}
+ QMap<QString,QString> sysenv = buildEnvMap(QProcess::systemEnvironment());
+
foreach( QString s, env.keys() )
- m_proc->setEnvironment( s, env[s] );
- foreach(QString s, command)
- if( !s.isEmpty() )
- *m_proc << s;
+ sysenv[s] = env[s];
+ m_proc->setEnvironment( buildEnvList( sysenv ) );
m_command = command.join(" ");
connect( m_procLineMaker, SIGNAL(receivedStdoutLines(const QStringList&)),
this, SLOT(procReadStdout(const QStringList&) ));
connect( m_procLineMaker, SIGNAL(receivedStderrLines(const QStringList&)),
this, SLOT(procReadStderr(const QStringList&) ));
- connect( m_proc, SIGNAL(processExited( K3Process* ) ),
- this, SLOT( procFinished( K3Process* ) ) );
+ connect( m_proc, SIGNAL(finished( int, QProcess::ExitStatus ) ),
+ this, SLOT( procFinished( int, QProcess::ExitStatus ) ) );
}
OutputViewCommand::~OutputViewCommand()
@@ -76,11 +75,32 @@
kDebug(9004) << "OutputViewCommand destructor.." << endl;
}
+QMap<QString,QString> OutputViewCommand::buildEnvMap( const QStringList& list )
+{
+ QMap<QString,QString> env;
+ foreach( QString s, list )
+ {
+ int index = s.indexOf("=");
+ env[s.left(index)] = s.right(index+1);
+ }
+ return env;
+}
+
+QStringList OutputViewCommand::buildEnvList( const QMap<QString,QString>& map )
+{
+ QStringList env;
+ foreach( QString s, map.keys() )
+ {
+ env.append(s+"="+map[s]);
+ }
+ return env;
+}
+
void OutputViewCommand::start()
{
IOutputViewItem *i = m_factory->createItem( m_command );
m_model->appendRow( i );
- m_proc->start( K3Process::OwnGroup, K3Process::AllOutput );
+ m_proc->start( m_command );
}
void OutputViewCommand::setModel( QStandardItemModel *model )
@@ -110,11 +130,11 @@
m_model->appendRow( m_factory->createItem( line ) );
}
-void OutputViewCommand::procFinished( K3Process* proc )
+void OutputViewCommand::procFinished( int exitstatus, QProcess::ExitStatus status )
{
- if( !m_proc->exitStatus() )
+ if( !exitstatus )
{
- IOutputViewItem* endItem = m_factory->createItem(QString("Finished \
(%1)").arg(m_proc->exitStatus())); + IOutputViewItem* endItem = \
m_factory->createItem(QString("Finished (%1)").arg(exitstatus)); m_model->appendRow( \
endItem ); kDebug(9004) << "Finished Sucessfully" << endl;
QString titlestring = title();
@@ -122,7 +142,7 @@
}
else
{
- IOutputViewItem* endItem = m_factory->createItem(QString("Failed \
(%1)").arg(m_proc->exitStatus())); + IOutputViewItem* endItem = \
m_factory->createItem(QString("Failed (%1)").arg(exitstatus)); m_model->appendRow( \
endItem ); kDebug(9004) << "Failed" << endl;
QString titlestring = title();
--- trunk/KDE/kdevelop/lib/plugins/outputviews/outputviewcommand.h #669144:669145
@@ -23,12 +23,12 @@
#define OUTPUTVIEWCOMMAND_H
#include <QtCore/QObject>
+#include <QtCore/QProcess>
class KUrl;
class QStringList;
class QString;
class QStandardItemModel;
-class K3Process;
class ProcessLineMaker;
template <typename T1, typename T2> class QMap;
class IOutputViewItemFactory;
@@ -46,16 +46,19 @@
void setModel( QStandardItemModel *model );
QStandardItemModel *model();
QString title();
-
+
+ static QMap<QString,QString> buildEnvMap( const QStringList& );
+ static QStringList buildEnvList( const QMap<QString,QString>& );
+
private Q_SLOTS:
void procReadStdout( const QStringList& lineList );
void procReadStderr( const QStringList& lineList );
- void procFinished( K3Process* proc );
+ void procFinished( int, QProcess::ExitStatus );
signals:
void commandFinished( const QString& command );
void commandFailed( const QString& command );
private:
- K3Process *m_proc;
+ QProcess *m_proc;
ProcessLineMaker *m_procLineMaker;
QStandardItemModel* m_model;
QString m_command;
--- trunk/KDE/kdevelop/lib/util/processlinemaker.cpp #669144:669145
@@ -20,8 +20,8 @@
#include "processlinemaker.h"
-#include <k3process.h>
-#include <QStringList>
+#include <QtCore/QProcess>
+#include <QtCore/QStringList>
class ProcessLineMakerPrivate
{
@@ -32,10 +32,12 @@
QString stdoutbuf;
QString stderrbuf;
ProcessLineMaker* p;
+ QProcess* m_proc;
- void slotReceivedStdout( K3Process*, char *buffer, int buflen )
+ void slotReadyReadStdout( )
{
- processStdOut( QString::fromLocal8Bit( buffer, buflen ) );
+ QString out = m_proc->readAllStandardOutput();
+ processStdOut( out );
}
void processStdOut( const QString& s )
@@ -61,9 +63,10 @@
emit p->receivedStdoutLines(lineList);
}
- void slotReceivedStderr( K3Process*, char *buffer, int buflen )
+ void slotReadyReadStderr( )
{
- processStdErr( QString::fromLocal8Bit(buffer, buflen) );
+ QString err = m_proc->readAllStandardError();
+ processStdErr( err );
}
void processStdErr( const QString& s )
@@ -95,14 +98,16 @@
{
}
-ProcessLineMaker::ProcessLineMaker( const K3Process* proc )
+ProcessLineMaker::ProcessLineMaker( QProcess* proc )
: d( new ProcessLineMakerPrivate( this ) )
{
- connect(proc, SIGNAL(receivedStdout(K3Process*,char*,int)),
- this, SLOT(slotReceivedStdout(K3Process*,char*,int)) );
+ d->m_proc = proc;
+ d->m_proc->setTextModeEnabled( true );
+ connect(proc, SIGNAL(readyReadStandardOutput()),
+ this, SLOT(slotReadyReadStdout()) );
- connect(proc, SIGNAL(receivedStderr(K3Process*,char*,int)),
- this, SLOT(slotReceivedStderr(K3Process*,char*,int)) );
+ connect(proc, SIGNAL(readyReadStandardError()),
+ this, SLOT(slotReadyReadStderr()) );
}
void ProcessLineMaker::slotReceivedStdout( const QString& s )
--- trunk/KDE/kdevelop/lib/util/processlinemaker.h #669144:669145
@@ -29,7 +29,7 @@
Utility objects for process output views.
*/
-class K3Process;
+class QProcess;
class QString;
class QStringList;
@@ -44,7 +44,7 @@
public:
ProcessLineMaker();
- ProcessLineMaker( const K3Process* );
+ ProcessLineMaker( QProcess* );
void clearBuffers();
public slots:
@@ -58,8 +58,8 @@
void receivedStderrLines( const QStringList& );
private:
- Q_PRIVATE_SLOT(d, void slotReceivedStdout( K3Process *, char *buffer, int buflen \
) )
- Q_PRIVATE_SLOT(d, void slotReceivedStderr( K3Process *, char *buffer, int buflen \
) ) + Q_PRIVATE_SLOT(d, void slotReadyReadStdout( ) )
+ Q_PRIVATE_SLOT(d, void slotReadyReadStderr( ) )
class ProcessLineMakerPrivate* const d;
friend class ProcessLineMakerPrivate;
};
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic