diff options
Diffstat (limited to 'desktop-utilities/lumina-terminal/TerminalWidget.cpp')
-rw-r--r-- | desktop-utilities/lumina-terminal/TerminalWidget.cpp | 92 |
1 files changed, 63 insertions, 29 deletions
diff --git a/desktop-utilities/lumina-terminal/TerminalWidget.cpp b/desktop-utilities/lumina-terminal/TerminalWidget.cpp index 4cfd3849..589d3fa3 100644 --- a/desktop-utilities/lumina-terminal/TerminalWidget.cpp +++ b/desktop-utilities/lumina-terminal/TerminalWidget.cpp @@ -13,18 +13,43 @@ TerminalWidget::TerminalWidget(QWidget *parent, QString dir) : QTextEdit(parent){ //Setup the text widget this->setLineWrapMode(QTextEdit::WidgetWidth); - this->setReadOnly(true); //the key event catch will do the process/widget forwarding - this->setPlainText("WARNING: This utility is still incomplete and does not function properly yet"); - //Create/launch the process + //this->setReadOnly(true); //the key event catch will do the process/widget forwarding + //this->setPlainText("WARNING: This utility is still incomplete and does not function properly yet"); + + //Create/open the serial port + /*PROC = new QSerialPort(this); + QList<QSerialPortInfo> openports = QSerialPortInfo::availablePorts(); + //Now print out all the information + if(openports.isEmpty()){ this->setEnabled(false);} + else{ + //Go through the open ports until we find one that can be used + for(int i=0; i<openports.length(); i++){ + qDebug() << "Port:" << openports[i].description(); + qDebug() << "Name:" << openports[i].portName(); + qDebug() << "Serial Number:" << openports[i].serialNumber(); + qDebug() << "System Location:" << openports[i].systemLocation(); + PROC->setPort(openports[i]); + if(PROC->open(QIODevice::ReadWrite) ){ break; } + } + } + this->setEnabled(PROC->isOpen()); + //Connect the signals/slots + connect(PROC, SIGNAL(readyRead()), this, SLOT(UpdateText()) ); + connect(PROC, SIGNAL(aboutToClose()), this, SLOT(ShellClosed()) ); + */ + + //Create/launch the process PROC = new QProcess(this); + PROC->setProcessChannelMode(QProcess::MergedChannels); PROC->setProcessEnvironment(QProcessEnvironment::systemEnvironment()); + PROC->setProgram( PROC->processEnvironment().value("SHELL","/bin/sh") ); PROC->setWorkingDirectory(dir); - PROC->setProcessChannelMode(QProcess::MergedChannels); //Connect the signals/slots connect(PROC, SIGNAL(readyReadStandardOutput()), this, SLOT(UpdateText()) ); - connect(PROC, SIGNAL(finished(int,QProcess::ExitStatus)), this, SLOT(ShellClosed()) ); + connect(PROC, SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(ShellClosed()) ); //Now start the shell - PROC->start( PROC->processEnvironment().value("SHELL","/bin/sh"), QIODevice::ReadWrite); + //PROC->start("login" , QStringList() << "-f" << getlogin(), QIODevice::ReadWrite); + PROC->start(QIODevice::ReadWrite); } @@ -33,19 +58,21 @@ TerminalWidget::~TerminalWidget(){ } void TerminalWidget::aboutToClose(){ - if(PROC->state()!=QProcess::NotRunning){ PROC->close(); } + //if(PROC->isOpen()){ PROC->close(); } if(PROC->state()!=QProcess::NotRunning){ PROC->kill(); } - if(PROC->state()!=QProcess::NotRunning){ PROC->terminate(); } } // ================== // PRIVATE SLOTS // ================== void TerminalWidget::UpdateText(){ - while(PROC->canReadLine()){ - QString line = PROC->readLine(); - this->insertPlainText( line ); - } + //read the data from the process + //QByteArray data = PROC->readAll(); + qDebug() << "Process Data Available"; + QByteArray data = PROC->readAllStandardOutput(); + this->insertPlainText(QString(data)); + //adjust the scrollbar as needed + } void TerminalWidget::ShellClosed(){ @@ -56,28 +83,35 @@ void TerminalWidget::ShellClosed(){ // PROTECTED // ================== void TerminalWidget::keyPressEvent(QKeyEvent *ev){ - //The way this works is by printing the keys directly to the text edit widget - // While also keeping an internal "buffer" of the input string so it can all be written to the process at the same time - - QString key = ev->text(); //Check for special key combinations first + QString txt = ev->text(); switch(ev->key()){ - case Qt::Key_Enter: - case Qt::Key_Return: - //send the current input buffer to the process - qDebug() << "Write to process:" << inBuffer; - this->insertPlainText("\n"); - PROC->write( QString(inBuffer+"\n").toLocal8Bit() ); - inBuffer.clear(); - qDebug() << "Current Dir:" << PROC->workingDirectory(); - break; case Qt::Key_Backspace: - inBuffer.chop(1); + case Qt::Key_Left: + case Qt::Key_Right: + case Qt::Key_Up: + case Qt::Key_Down: break; + case Qt::Key_Return: + case Qt::Key_Enter: + txt = "\r"; default: - this->insertPlainText(key); - inBuffer.append(key); + //All other events can get echoed onto the widget (non-movement) + QTextEdit::keyPressEvent(ev); //echo the input on the widget } + qDebug() << "Forward Input:" << txt << ev->key(); + PROC->write(txt.toLocal8Bit()); +} + +void TerminalWidget::mousePressEvent(QMouseEvent *ev){ + this->setFocus(); + Q_UNUSED(ev); +} + +void TerminalWidget::mouseDoubleClickEvent(QMouseEvent *ev){ + Q_UNUSED(ev); +} - ev->ignore(); +void TerminalWidget::contextMenuEvent(QContextMenuEvent *ev){ + Q_UNUSED(ev); }
\ No newline at end of file |