Ya muestra la salida de los comandos correctamente.

También se han añadido commandwithconfirmation: para que pida confirmación antes de ejecutar un comando.


git-svn-id: https://opengnsys.es/svn/trunk@1231 a21b9725-9963-47de-94b9-378ad31fedc9
remotes/github/master
adelcastillo 2010-09-23 13:44:40 +00:00
parent ce529cb180
commit 9d6a1e3aa6
2 changed files with 50 additions and 43 deletions

View File

@ -17,8 +17,7 @@
#include "qtermwidget.h"
#define BUFFERSIZE 2048
#define EXPREG_RESET "^\\[(\\d+),(\\d+)\\]\\n"
#define EXPREG_A_PASS "^\\[(\\d+)\\]\\s"
#define REGEXP_STRING "^\\[(\\d+)\\]"
#define CURRENT_TIME() QDateTime::currentDateTime().toString("dd/MM/yy hh:mm:ss")
@ -48,12 +47,12 @@ MainWindow::MainWindow(QWidget *parent)
// TabWidget
m_tabs=new QTabWidget(dock);
QPushButton *button=new QPushButton(tr("&New Term"));
QPushButton *button=new QPushButton(tr("&Nueva Terminal"));
button->setFocusPolicy(Qt::TabFocus);
m_tabs->setCornerWidget(button);
m_tabs->setFocusPolicy(Qt::NoFocus);
m_tabs->addTab(m_output,tr("Output"));
m_tabs->addTab(m_output,tr("Salida"));
slotCreateTerminal();
// Las pestanyas al dock
@ -84,6 +83,8 @@ MainWindow::MainWindow(QWidget *parent)
QStatusBar* st=statusBar();
st->setSizeGripEnabled(false);
m_progressBar=new QProgressBar(this);
m_progressBar->setMinimum(0);
m_progressBar->setMaximum(100);
m_web->page()->setLinkDelegationPolicy(QWebPage::DelegateAllLinks);
@ -119,7 +120,7 @@ MainWindow::MainWindow(QWidget *parent)
QIODevice::Append))
{
delete file;
print(tr("The log file couldn't be opened: ")+m_env["OGLOGFILE"]+".");
print(tr("El fichero de log no ha podido ser abierto: ")+m_env["OGLOGFILE"]+".");
}
else
{
@ -149,23 +150,27 @@ void MainWindow::slotLinkHandle(const QUrl &url)
// Si ya hay un proceso ejectuandose
if(m_process->state()!=QProcess::NotRunning)
{
print(tr("There is a process running. Please wait a moment."));
print(tr("Hay otro proceso en ejecución. Por favor espere."));
return;
}
QString urlString = url.toString();
// Si es un link del tipo PROTOCOL lo ejecutamos
if(urlString.startsWith(PROTOCOL))
// Si es un link del tipo COMMAND lo ejecutamos
if(urlString.startsWith(COMMAND))
{
urlString=urlString.remove(0,QString(PROTOCOL).length());
QStringList list=urlString.split(" ",QString::SkipEmptyParts);
QString program=list.takeFirst();
m_process->setReadChannel(QProcess::StandardOutput);
// Le ponemos el mismo entorno que tiene el browser ahora mismo
m_process->setEnvironment(QProcess::systemEnvironment());
m_process->start(program,list);
print(tr("Launching the command: ")+program+" "+list.join(" ")+".");
startProgressBar();
executeCommand(urlString.remove(0,QString(COMMAND).length()));
}
else if(urlString.startsWith(COMMAND_WITH_CONFIRMATION))
{
QMessageBox msgBox;
msgBox.setText(tr("La acción puede tardar varios minutos. Por favor no apague el ordenador."));
msgBox.setInformativeText(tr("¿Estás seguro que quieres continuar?"));
msgBox.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel);
msgBox.setDefaultButton(QMessageBox::Ok);
if (msgBox.exec() == QMessageBox::Ok)
{
executeCommand(urlString.remove(0,QString(COMMAND_WITH_CONFIRMATION).length()));
}
}
else
{
@ -176,9 +181,7 @@ void MainWindow::slotLinkHandle(const QUrl &url)
void MainWindow::slotWebLoadStarted()
{
startProgressBar();
m_progressBar->setFormat("%p% Loading");
m_progressBar->setMinimum(0);
m_progressBar->setMaximum(100);
m_progressBar->setFormat("%p% Cargando");
}
void MainWindow::slotWebLoadProgress(int progress)
@ -194,9 +197,9 @@ void MainWindow::slotWebLoadFinished(bool ok)
if(ok == false)
{
QMessageBox msgBox;
msgBox.setText(tr("The web page couldn't load. What do you want to do?"));
msgBox.setText(tr("La pagina web no pudo ser cargada. ¿Qué quieres hacer?"));
QPushButton *reloadButton = msgBox.addButton(tr("Reload"), QMessageBox::ActionRole);
QPushButton *reloadButton = msgBox.addButton(tr("Recargar"), QMessageBox::ActionRole);
msgBox.addButton(QMessageBox::Abort);
msgBox.exec();
@ -223,10 +226,8 @@ void MainWindow::slotUrlChanged(const QUrl &url)
void MainWindow::slotProcessStarted()
{
print(tr("Launched successfully."));
print(tr("Lanzado satisfactoriamente."));
startProgressBar();
m_progressBar->setMinimum(0);
m_progressBar->setMaximum(0);
}
void MainWindow::slotProcessOutput()
@ -255,11 +256,11 @@ void MainWindow::slotProcessFinished(int code,QProcess::ExitStatus status)
{
if(status==QProcess::NormalExit)
{
print(tr("Process fisnished correctly. Return value: ")+QString::number(code));
print(tr("Proceso acabado correctamente. Valor de retorno: ")+QString::number(code));
}
else
{
print(tr("Process crashed. Output: "+code));
print(tr("El proceso falló inesperadamente. Output: "+code));
}
finishProgressBar();
}
@ -269,7 +270,7 @@ void MainWindow::slotProcessError(QProcess::ProcessError error)
switch(error)
{
case QProcess::FailedToStart:
print(tr("Impossible to launch the process."));
print(tr("Imposible lanzar el proceso."));
break;
case QProcess::WriteError:
print(tr("Write error happened in the process."));
@ -373,22 +374,13 @@ void MainWindow::captureOutputForStatusBar(QString output)
// Capturar para modificar status bar
output=output.trimmed();
QRegExp rxReset(EXPREG_RESET);
QRegExp rxPass(EXPREG_A_PASS);
if(rxReset.exactMatch(output))
QRegExp regexp(REGEXP_STRING);
if(regexp.indexIn(output) != -1)
{
int minimum=rxReset.cap(1).toInt();
int maximum=rxReset.cap(2).toInt();
m_progressBar->setMinimum(minimum);
m_progressBar->setMaximum(maximum);
m_progressBar->setValue(minimum);
}
else if(rxPass.indexIn(output)!=-1)
{
int pass=rxPass.cap(1).toInt();
output.replace(rxPass,"");
int pass=regexp.cap(1).toInt();
output.replace(regexp,"");
m_progressBar->setValue(pass);
m_progressBar->setFormat("%p% "+output);
m_progressBar->setFormat("%p%"+output);
}
}
@ -408,3 +400,16 @@ void MainWindow::finishProgressBar()
st->showMessage(tr("Ready"));
m_web->setEnabled(true);
}
void MainWindow::executeCommand(QString &string)
{
QStringList list=string.split(" ",QString::SkipEmptyParts);
QString program=list.takeFirst();
m_process->setReadChannel(QProcess::StandardOutput);
// Le ponemos el mismo entorno que tiene el browser ahora mismo
m_process->setEnvironment(QProcess::systemEnvironment());
m_process->start(program,list);
print(tr("Lanzando el comando: ")+program+" "+list.join(" ")+".");
startProgressBar();
}

View File

@ -1,7 +1,8 @@
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#define PROTOCOL "command:"
#define COMMAND "command:"
#define COMMAND_WITH_CONFIRMATION "commandwithconfirmation:"
#define ENVIRONMENT "OGLOGFILE,boot"
//#define ENVIRONMENT "OGIP,OGSERVER,OGLOG"
@ -60,6 +61,7 @@ class MainWindow : public QMainWindow
void captureOutputForStatusBar(QString output);
void startProgressBar();
void finishProgressBar();
void executeCommand(QString &string);
protected: