-rw-r--r-- | noncore/apps/advancedfm/advancedfm.h | 3 | ||||
-rw-r--r-- | noncore/apps/advancedfm/advancedfm.pro | 4 | ||||
-rw-r--r-- | noncore/apps/advancedfm/advancedfmMenu.cpp | 121 | ||||
-rw-r--r-- | noncore/apps/advancedfm/inputDialog.cpp | 44 | ||||
-rw-r--r-- | noncore/apps/advancedfm/inputDialog.h | 35 | ||||
-rw-r--r-- | noncore/apps/advancedfm/output.cpp | 128 | ||||
-rw-r--r-- | noncore/apps/advancedfm/output.h | 32 |
7 files changed, 220 insertions, 147 deletions
diff --git a/noncore/apps/advancedfm/advancedfm.h b/noncore/apps/advancedfm/advancedfm.h index 7bccce9..9948255 100644 --- a/noncore/apps/advancedfm/advancedfm.h +++ b/noncore/apps/advancedfm/advancedfm.h @@ -150,4 +150,7 @@ protected slots: private: QTimer menuTimer; + void startProcess(const QString &); +private slots: + void processEnded(); }; diff --git a/noncore/apps/advancedfm/advancedfm.pro b/noncore/apps/advancedfm/advancedfm.pro index bda2fdf..0e037a1 100644 --- a/noncore/apps/advancedfm/advancedfm.pro +++ b/noncore/apps/advancedfm/advancedfm.pro @@ -1,6 +1,6 @@ TEMPLATE = app CONFIG += qt warn_on release -HEADERS = advancedfm.h inputDialog.h filePermissions.h output.h -SOURCES = advancedfm.cpp advancedfmData.cpp advancedfmMenu.cpp inputDialog.cpp filePermissions.cpp output.cpp main.cpp +HEADERS = advancedfm.h filePermissions.h output.h +SOURCES = advancedfm.cpp advancedfmData.cpp advancedfmMenu.cpp filePermissions.cpp output.cpp main.cpp TARGET = advancedfm INCLUDEPATH += $(OPIEDIR)/include diff --git a/noncore/apps/advancedfm/advancedfmMenu.cpp b/noncore/apps/advancedfm/advancedfmMenu.cpp index f89ad30..0a9f921 100644 --- a/noncore/apps/advancedfm/advancedfmMenu.cpp +++ b/noncore/apps/advancedfm/advancedfmMenu.cpp @@ -11,9 +11,9 @@ ***************************************************************************/ #include "advancedfm.h" -#include "inputDialog.h" #include "output.h" #include "filePermissions.h" #include <opie/otabwidget.h> +#include <opie/oprocess.h> #include <qpe/lnkproperties.h> @@ -234,5 +234,5 @@ void AdvancedFm::localDelete() { f=f.left(f.length()-1); QString cmd="rm -rf "+f; - system( cmd.latin1()); + startProcess( (const QString)cmd.latin1() ); populateLocalView(); } @@ -256,5 +256,4 @@ void AdvancedFm::localDelete() { if(QFileInfo(myFile).fileName().find("../",0,TRUE)==-1) file.remove(); - // system( cmd.latin1()); } } @@ -299,5 +298,5 @@ void AdvancedFm::remoteDelete() { f=f.left(f.length()-1); QString cmd="rm -rf "+f; - system( cmd.latin1()); + startProcess( (const QString)cmd ); populateRemoteView(); } @@ -321,5 +320,4 @@ void AdvancedFm::remoteDelete() { if(QFileInfo(myFile).fileName().find("../",0,TRUE)==-1) file.remove(); - // system( cmd.latin1()); } } @@ -824,32 +822,18 @@ void AdvancedFm::runCommand() { fileDlg->setInputText(curFile); fileDlg->exec(); - QString command; + //QString command; + if( fileDlg->result() == 1 ) { - command = fileDlg->LineEdit1->text(); + qDebug(fileDlg->LineEdit1->text()); + QStringList command; + command << "/bin/sh"; + command << "-c"; + command << fileDlg->LineEdit1->text(); Output *outDlg; - outDlg = new Output(this, tr("AdvancedFm Output"),FALSE); + outDlg = new Output( command, this, tr("AdvancedFm Output"), true); outDlg->showMaximized(); - outDlg->show(); + outDlg->exec(); qApp->processEvents(); - FILE *fp; - char line[130]; - sleep(1); - command +=" 2>&1"; - fp = popen( (const char *) command, "r"); - if ( !fp ) { - qDebug("Could not execute '" + command + "'! err=%d", fp); - QMessageBox::warning( this, "AdvancedFm", tr("command failed!"), tr("&OK") ); - pclose(fp); - return; - } else { - while ( fgets( line, sizeof line, fp)) { - QString lineStr = line; - lineStr=lineStr.left(lineStr.length()-1); - outDlg->OutputEdit->append(lineStr); - outDlg->OutputEdit->setCursorPosition(outDlg->OutputEdit->numLines() + 1,0,FALSE); - } - } - pclose(fp); } @@ -871,9 +855,8 @@ void AdvancedFm::runCommandStd() { fileDlg->setInputText(curFile); fileDlg->exec(); - QString command; + if( fileDlg->result() == 1 ) { qApp->processEvents(); - command = fileDlg->LineEdit1->text() + " &"; - system(command.latin1()); + startProcess( (const QString)fileDlg->LineEdit1->text().latin1()); } } @@ -886,30 +869,44 @@ void AdvancedFm::fileStatus() { curFile = Remote_View->currentItem()->text(0); } - QString command = " stat -l "+ curFile +" 2>&1"; + + QStringList command; + command << "/bin/sh"; + command << "-c"; + command << "stat -l "+ curFile; + Output *outDlg; - outDlg = new Output(this, tr("AdvancedFm Output"),FALSE); + outDlg = new Output( command, this, tr("AdvancedFm Output"), true); outDlg->showMaximized(); - outDlg->show(); + outDlg->exec(); qApp->processEvents(); - FILE *fp; - char line[130]; - sleep(1); - fp = popen( (const char *) command, "r"); - if ( !fp ) { - qDebug("Could not execute '" + command + "'! err=%d", fp); - QMessageBox::warning( this, "AdvancedFm", tr("command failed!"), tr("&OK") ); - pclose(fp); - return; - } else { - while ( fgets( line, sizeof line, fp)) { - outDlg->OutputEdit->append(line); - outDlg->OutputEdit->setCursorPosition(outDlg->OutputEdit->numLines() + 1,0,FALSE); - } - } - pclose(fp); +// Output *outDlg; +// outDlg = new Output(this, tr("AdvancedFm Output"),FALSE); +// outDlg->showMaximized(); +// outDlg->show(); +// qApp->processEvents(); + +// FILE *fp; +// char line[130]; +// sleep(1); +// fp = popen( (const char *) command, "r"); +// if ( !fp ) { +// qDebug("Could not execute '" + command + "'! err=%d", fp); +// QMessageBox::warning( this, "AdvancedFm", tr("command failed!"), tr("&OK") ); +// pclose(fp); +// return; +// } else { +// while ( fgets( line, sizeof line, fp)) { +// outDlg->OutputEdit->append(line); +// outDlg->OutputEdit->setCursorPosition(outDlg->OutputEdit->numLines() + 1,0,FALSE); + +// } + +// } +// pclose(fp); } + void AdvancedFm::mkDir() { if (TabWidget->getCurrentTab() == 0) @@ -949,5 +946,5 @@ void AdvancedFm::mkSym() { cmd = "ln -s "+curFile+" "+destName; qDebug(cmd); - system(cmd.latin1() ); + startProcess( (const QString)cmd ); } populateRemoteView(); @@ -963,5 +960,5 @@ void AdvancedFm::mkSym() { cmd = "ln -s "+curFile+" "+destName; qDebug(cmd); - system(cmd.latin1() ); + startProcess( (const QString)cmd ); } populateLocalView(); @@ -1019,2 +1016,22 @@ void AdvancedFm::selectAll() { } } + +void AdvancedFm::startProcess(const QString & cmd) { + QStringList command; + OProcess *process; + process = new OProcess(); + connect(process, SIGNAL(processExited(OProcess *)), + this, SLOT( processEnded())); + + command << "/bin/sh"; + command << "-c"; + command << cmd.latin1(); + *process << command; + if(!process->start(OProcess::NotifyOnExit) ) + qDebug("could not start process"); +} + +void AdvancedFm::processEnded() { + populateLocalView(); + populateRemoteView(); +} diff --git a/noncore/apps/advancedfm/inputDialog.cpp b/noncore/apps/advancedfm/inputDialog.cpp deleted file mode 100644 index 5af0f72..0000000 --- a/noncore/apps/advancedfm/inputDialog.cpp +++ b/dev/null @@ -1,44 +0,0 @@ -/**************************************************************************** - inputDialog.cpp - ------------------- -** Created: Sat Mar 9 23:33:09 2002 - copyright : (C) 2002 by ljp - email : ljp@llornkcor.com - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation; either version 2 of the License, or * - * (at your option) any later version. * - ***************************************************************************/ - -#include "inputDialog.h" - -#include <qlineedit.h> -#include <qlayout.h> -#include <qvariant.h> -#include <qtooltip.h> -#include <qwhatsthis.h> - - -InputDialog::InputDialog( QWidget* parent, const char* name, bool modal, WFlags fl ) - : QDialog( parent, name, modal, fl ) -{ - if ( !name ) - setName( "InputDialog" ); - resize( 234, 50 ); - setMaximumSize( QSize( 240, 50 ) ); - setCaption( tr(name ) ); - - LineEdit1 = new QLineEdit( this, "LineEdit1" ); - LineEdit1->setGeometry( QRect( 10, 10, 216, 22 ) ); -} - -InputDialog::~InputDialog() -{ - inputText = LineEdit1->text(); - -} - -void InputDialog::setInputText(const QString &string) -{ -LineEdit1->setText( string); -} diff --git a/noncore/apps/advancedfm/inputDialog.h b/noncore/apps/advancedfm/inputDialog.h deleted file mode 100644 index 114a3a8..0000000 --- a/noncore/apps/advancedfm/inputDialog.h +++ b/dev/null @@ -1,35 +0,0 @@ -/*************************************************************************** - inputDialog.h - ------------------- -** Created: Sat Mar 9 23:33:09 2002 - copyright : (C) 2002 by ljp - email : ljp@llornkcor.com - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation; either version 2 of the License, or * - * (at your option) any later version. * - ***************************************************************************/ -#ifndef INPUTDIALOG_H -#define INPUTDIALOG_H - -#include <qvariant.h> -#include <qdialog.h> -class QVBoxLayout; -class QHBoxLayout; -class QGridLayout; -class QLineEdit; - -class InputDialog : public QDialog -{ - Q_OBJECT - -public: - InputDialog( QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0 ); - ~InputDialog(); - QString inputText; - QLineEdit* LineEdit1; - void setInputText(const QString &); - -}; - -#endif // INPUTDIALOG_H diff --git a/noncore/apps/advancedfm/output.cpp b/noncore/apps/advancedfm/output.cpp index 82e78a7..946d038 100644 --- a/noncore/apps/advancedfm/output.cpp +++ b/noncore/apps/advancedfm/output.cpp @@ -5,5 +5,6 @@ ****************************************************************************/ #include "output.h" -#include "inputDialog.h" + +#include <opie/oprocess.h> #include <qpe/filemanager.h> @@ -11,6 +12,8 @@ #include <qpe/applnk.h> +#include <qmessagebox.h> +#include <qstringlist.h> #include <qfile.h> - +#include <qcstring.h> #include <qlineedit.h> #include <qmultilineedit.h> @@ -19,4 +22,6 @@ #include <qvariant.h> +#include <errno.h> + /* XPM */ static char * filesave_xpm[] = { @@ -117,14 +122,19 @@ static char * filesave_xpm[] = { " +... "}; -Output::Output( QWidget* parent, const char* name, bool modal, WFlags fl ) +Output::Output( const QStringList commands, QWidget* parent, const char* name, bool modal, WFlags fl) : QDialog( parent, name, modal, fl ) { + QStringList cmmds; +// cmmds=QStringList::split( " ", commands, false); + cmmds=commands; +// qDebug("count %d", cmmds.count()); if ( !name ) - setName( "Output" ); + setName( tr("Output")); resize( 196, 269 ); setCaption( name ); + OutputLayout = new QGridLayout( this ); - OutputLayout->setSpacing( 6 ); - OutputLayout->setMargin( 11 ); + OutputLayout->setSpacing( 2); + OutputLayout->setMargin( 2); QPushButton *docButton; @@ -135,17 +145,39 @@ Output::Output( QWidget* parent, const char* name, bool modal, WFlags fl ) OutputLayout->addMultiCellWidget( docButton, 0,0,3,3 ); - OutputEdit = new QMultiLineEdit( this, "OutputEdit" ); OutputLayout->addMultiCellWidget( OutputEdit, 1,1,0,3 ); + proc = new OProcess(); + connect(proc, SIGNAL(processExited(OProcess *)), + this, SLOT( processFinished())); + + connect(proc, SIGNAL(receivedStdout(OProcess *, char *, int)), + this, SLOT(commandStdout(OProcess *, char *, int))); + + connect(proc, SIGNAL(receivedStderr(OProcess *, char *, int)), + this, SLOT(commandStderr(OProcess *, char *, int))); + +// connect( , SIGNAL(received(const QByteArray &)), +// this, SLOT(commandStdin(const QByteArray &))); + +// * proc << commands.latin1(); + for ( QStringList::Iterator it = cmmds.begin(); it != cmmds.end(); ++it ) { + qDebug( "%s", (*it).latin1() ); + * proc << (*it).latin1(); } -/* - * Destroys the object and frees any allocated resources - */ -Output::~Output() -{ - // no need to delete child widgets, Qt does it all for us + if(!proc->start(OProcess::NotifyOnExit, OProcess::All)) { + + OutputEdit->append("Process could not start"); + OutputEdit->setCursorPosition( OutputEdit->numLines() + 1,0,FALSE); + perror("Error: "); + QString errorMsg="Error\n"+(QString)strerror(errno); + OutputEdit->append( errorMsg); + OutputEdit->setCursorPosition( OutputEdit->numLines() + 1,0,FALSE); + } +} + +Output::~Output() { } @@ -176,5 +208,75 @@ void Output::saveOutput() { qWarning("Could not write file"); f.close(); + } +} + +void Output::commandStdout(OProcess*, char *buffer, int buflen) { + qWarning("received stdout %d bytes", buflen); + +// QByteArray data(buflen); +// data.fill(*buffer, buflen); +// for (uint i = 0; i < data.count(); i++ ) { +// printf("%c", buffer[i] ); +// } +// printf("\n"); + QString lineStr = buffer; + lineStr=lineStr.left(lineStr.length()-1); + OutputEdit->append(lineStr); + OutputEdit->setCursorPosition( OutputEdit->numLines() + 1,0,FALSE); } + + +void Output::commandStdin( const QByteArray &data) { + qWarning("received stdin %d bytes", data.size()); + // recieved data from the io layer goes to sz + proc->writeStdin(data.data(), data.size()); +} + +void Output::commandStderr(OProcess*, char *buffer, int buflen) { + qWarning("received stderrt %d bytes", buflen); + + QString lineStr = buffer; +// lineStr=lineStr.left(lineStr.length()-1); + OutputEdit->append(lineStr); + OutputEdit->setCursorPosition( OutputEdit->numLines() + 1,0,FALSE); +} + +void Output::processFinished() { + + delete proc; + OutputEdit->append( "\nFinished\n"); + OutputEdit->setCursorPosition( OutputEdit->numLines() + 1,0,FALSE); +// close(); +// disconnect( layer(), SIGNAL(received(const QByteArray &)), +// this, SLOT(commandStdin(const QByteArray &))); +} + +//============================== + +InputDialog::InputDialog( QWidget* parent, const char* name, bool modal, WFlags fl ) + : QDialog( parent, name, modal, fl ) +{ + if ( !name ) + setName( "InputDialog" ); + resize( 234, 50 ); + setMaximumSize( QSize( 240, 50 ) ); + setCaption( tr(name ) ); + + LineEdit1 = new QLineEdit( this, "LineEdit1" ); + LineEdit1->setGeometry( QRect( 10, 10, 216, 22 ) ); + connect(LineEdit1,SIGNAL(returnPressed()),this,SLOT(returned() )); +} + +InputDialog::~InputDialog() { + inputText = LineEdit1->text(); +} + +void InputDialog::setInputText(const QString &string) { + LineEdit1->setText( string); +} + +void InputDialog::returned() { + inputText = LineEdit1->text(); + this->accept(); } diff --git a/noncore/apps/advancedfm/output.h b/noncore/apps/advancedfm/output.h index c1e48da..199a684 100644 --- a/noncore/apps/advancedfm/output.h +++ b/noncore/apps/advancedfm/output.h @@ -12,4 +12,11 @@ #include <qvariant.h> #include <qdialog.h> +#include <qcstring.h> +#include <qstringlist.h> +#include <qlineedit.h> +#include <qwhatsthis.h> + +#include <opie/oprocess.h> + class QVBoxLayout; class QHBoxLayout; @@ -22,5 +29,5 @@ class Output : public QDialog public: - Output( QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0 ); + Output(const QStringList commands=0, QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0 ); ~Output(); @@ -29,6 +36,29 @@ public: protected: QGridLayout* OutputLayout; + OProcess *proc; protected slots: void saveOutput(); + void commandStdout(OProcess*, char *, int); + void commandStdin(const QByteArray &); + void commandStderr(OProcess*, char *, int); + void processFinished(); + private: + QString cmmd; + +}; + +class InputDialog : public QDialog +{ + Q_OBJECT + +public: + InputDialog( QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0 ); + ~InputDialog(); + QString inputText; + QLineEdit* LineEdit1; + void setInputText(const QString &); +private slots: + void returned(); + }; |