changeset 13343:0c9cf8be675e

Extended pending request skeleton to support other types of requests.
author Jacob Dawid <jacob.dawid@googlemail.com>
date Wed, 06 Apr 2011 16:16:17 +0200
parents 642978643d3f
children 0a3a2d4e3d86
files gui//client.h gui//octaveterminal.cpp
diffstat 2 files changed, 19 insertions(+), 16 deletions(-) [+]
line wrap: on
line diff
--- a/gui//client.h
+++ b/gui//client.h
@@ -82,26 +82,25 @@
         return content;
     }
 
-    void query(QString request) {
+    void query(QString request, QRegExp terminator = QRegExp("(\r\n | \n\r | \n)+")) {
+        m_terminator = terminator;
         QMetaObject::invokeMethod(m_client, "send", Q_ARG(QString, request));
     }
 
 signals:
-    void dataIncome();
+    void answered();
 
 private slots:
     void receiveData(QString data) {
-        QRegExp octavePrompt("octave:[0-9]+>");
         m_dataBuffer += data;
-        if(octavePrompt.indexIn(m_dataBuffer) != -1)
-            emit dataIncome();
+        if(m_terminator.indexIn(m_dataBuffer) != -1)
+            emit answered();
     }
 
     void receiveError(QString error) {
-        QRegExp octavePrompt("octave:[0-9]+>");
         m_errorBuffer += error;
-        if(octavePrompt.indexIn(m_dataBuffer) != -1)
-            emit dataIncome();
+        if(m_terminator.indexIn(m_dataBuffer) != -1)
+            emit answered();
     }
 
 private:
@@ -109,6 +108,7 @@
     QString m_dataBuffer;
     QString m_errorBuffer;
     QString m_request;
+    QRegExp m_terminator;
 };
 
 #endif // CLIENT_H
--- a/gui//octaveterminal.cpp
+++ b/gui//octaveterminal.cpp
@@ -66,13 +66,23 @@
 void OctaveTerminal::assignClient(Client *client) {
     m_client = client;
     allowUserInput();
-    addRequest("info\n");
+
+    // Sends an empty command to make the welcome message show up.
+    addRequest("\n");
 }
 
 void OctaveTerminal::showEnvironment() {
     addRequest("who\n");
 }
 
+
+void OctaveTerminal::addRequest(QString command) {
+    blockUserInput();
+    m_pendingRequest = new PendingRequest(m_client);
+    connect(m_pendingRequest, SIGNAL(answered()), this, SLOT(handleAnsweredRequest()));
+    m_pendingRequest->query(command, QRegExp("octave:[0-9]+>"));
+}
+
 void OctaveTerminal::handleAnsweredRequest() {
     allowUserInput();
     QString data = m_pendingRequest->fetchData();
@@ -81,10 +91,3 @@
     m_octaveOutput->append(error);
     delete m_pendingRequest;
 }
-
-void OctaveTerminal::addRequest(QString command) {
-    blockUserInput();
-    m_pendingRequest = new PendingRequest(m_client);
-    connect(m_pendingRequest, SIGNAL(dataIncome()), this, SLOT(handleAnsweredRequest()));
-    m_pendingRequest->query(command);
-}