changeset 13336:45fa9f424737

Subclassed line edit to prepare for extended functionality.
author Jacob Dawid <jacob.dawid@googlemail.com>
date Tue, 05 Apr 2011 21:08:18 +0200
parents 609facb07bad
children e19200da9a45
files gui//octaveterminal.cpp gui//octaveterminal.h
diffstat 2 files changed, 31 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/gui//octaveterminal.cpp
+++ b/gui//octaveterminal.cpp
@@ -10,7 +10,7 @@
     setWidget(new QWidget(this));
     m_mainToolBar = new QToolBar(widget());
     m_octaveOutput = new QTextBrowser(widget());
-    m_commandLine = new QLineEdit(widget());
+    m_commandLine = new TerminalCommandLine(widget());
 
     QVBoxLayout *layout = new QVBoxLayout();
     layout->addWidget(m_mainToolBar);
@@ -25,21 +25,16 @@
     m_octaveOutput->setReadOnly(true);
 
     blockUserInput();
-    connect(m_commandLine, SIGNAL(returnPressed()), this, SLOT(sendCommand()));
+    connect(m_commandLine, SIGNAL(claimCommand(QString)), this, SLOT(sendCommand(QString)));
     connect(showEnvironmentButton, SIGNAL(clicked()), this, SLOT(showEnvironment()));
 
     m_terminalHighlighter = new TerminalHighlighter(m_octaveOutput->document());
 }
 
-void OctaveTerminal::sendCommand() {
-    QString command = m_commandLine->text();
+void OctaveTerminal::sendCommand(QString command) {
     m_octaveOutput->setFontUnderline(true);
     m_octaveOutput->append(command);
-    command.append("\n");
-
     QMetaObject::invokeMethod(m_client, "send", Q_ARG(QString, command));
-
-    m_commandLine->clear();
 }
 
 void OctaveTerminal::blockUserInput() {
--- a/gui//octaveterminal.h
+++ b/gui//octaveterminal.h
@@ -8,10 +8,36 @@
 #include <QMenuBar>
 #include <QMenu>
 #include <QToolBar>
+#include <QKeyEvent>
 
 #include "client.h"
 #include "terminalhighlighter.h"
 
+class TerminalCommandLine : public QLineEdit {
+    Q_OBJECT
+public:
+    TerminalCommandLine(QWidget *parent = 0)
+        : QLineEdit(parent) {
+    }
+
+signals:
+    void claimCommand(QString command);
+
+protected:
+    void keyPressEvent(QKeyEvent *keyEvent) {
+        switch(keyEvent->key()) {
+            case Qt::Key_Return:
+                emit claimCommand(text() + "\n");
+                setText("");
+                break;
+
+            default:
+                QLineEdit::keyPressEvent(keyEvent);
+                break;
+        }
+    }
+};
+
 class OctaveTerminal : public QMdiSubWindow {
     Q_OBJECT
 public:
@@ -20,7 +46,7 @@
 signals:
 
 public slots:
-    void sendCommand();
+    void sendCommand(QString command);
     void blockUserInput();
     void allowUserInput();
 
@@ -34,7 +60,7 @@
 private:
     QToolBar *m_mainToolBar;
     QTextBrowser *m_octaveOutput;
-    QLineEdit *m_commandLine;
+    TerminalCommandLine *m_commandLine;
     Client *m_client;
     TerminalHighlighter *m_terminalHighlighter;
 };