[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