changeset 13330:583c15dd487b

Initial commit.
author Jacob Dawid <jacob.dawid@googlemail.com>
date Tue, 05 Apr 2011 00:12:18 +0200
parents
children 30469264a58f
files gui//Quint.pro gui//README gui//client.cpp gui//client.h gui//clientmanager.cpp gui//clientmanager.h gui//main.cpp gui//mainwindow.cpp gui//mainwindow.h gui//octaveterminal.cpp gui//octaveterminal.h
diffstat 10 files changed, 302 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gui//Quint.pro	Tue Apr 05 00:12:18 2011 +0200
@@ -0,0 +1,22 @@
+#-------------------------------------------------
+#
+# Project created by QtCreator 2011-04-04T12:17:52
+#
+#-------------------------------------------------
+
+QT       += core gui webkit
+
+TARGET = Quint
+TEMPLATE = app
+
+
+SOURCES += main.cpp\
+        mainwindow.cpp \
+    octaveterminal.cpp \
+    clientmanager.cpp \
+    client.cpp
+
+HEADERS  += mainwindow.h \
+    octaveterminal.h \
+    clientmanager.h \
+    client.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gui//client.cpp	Tue Apr 05 00:12:18 2011 +0200
@@ -0,0 +1,29 @@
+#include "client.h"
+
+Client::Client(QString command) {
+    m_process.start(command, QProcess::ReadWrite);
+    connect(&m_process, SIGNAL(readyRead()), this, SLOT(reemitDataAvailable()));
+}
+
+void Client::send(QString content) {
+    m_process.write(content.toLocal8Bit());
+}
+
+QString Client::fetch() {
+    QString fetchedInput(m_process.readAllStandardOutput());
+    return fetchedInput;
+}
+
+QString Client::errorMessage() {
+    QString error(m_process.readAllStandardError());
+    return error;
+}
+
+void Client::reemitDataAvailable() {
+    emit dataAvailable();
+}
+
+void Client::reemitErrorAvailable() {
+    emit errorAvailable();
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gui//client.h	Tue Apr 05 00:12:18 2011 +0200
@@ -0,0 +1,34 @@
+#ifndef CLIENT_H
+#define CLIENT_H
+
+#include "clientmanager.h"
+#include <QProcess>
+#include <QObject>
+#include <QMutex>
+
+class Client : public QObject {
+    Q_OBJECT
+    friend class ClientManager;
+
+public:
+    void send(QString content);
+    QString fetch();
+    QString errorMessage();
+
+signals:
+    void dataAvailable();
+    void errorAvailable();
+
+protected:
+    Client(QString command);
+
+private slots:
+    void reemitDataAvailable();
+    void reemitErrorAvailable();
+
+private:
+    QProcess m_process;
+    QMutex m_clientInRequest;
+};
+
+#endif // CLIENT_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gui//clientmanager.cpp	Tue Apr 05 00:12:18 2011 +0200
@@ -0,0 +1,16 @@
+#include "clientmanager.h"
+
+ClientManager ClientManager::m_clientManager;
+
+ClientManager::ClientManager() {
+}
+
+ClientManager& ClientManager::clientManager() {
+    return ClientManager::m_clientManager;
+}
+
+Client *ClientManager::startProcess(QString command) {
+    Client *client = new Client(command);
+    m_activeClients.push_back(client);
+    return client;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gui//clientmanager.h	Tue Apr 05 00:12:18 2011 +0200
@@ -0,0 +1,21 @@
+#ifndef CLIENTMANAGER_H
+#define CLIENTMANAGER_H
+
+#include <QList>
+#include <QObject>
+#include "client.h"
+
+class Client;
+class ClientManager : public QObject {
+    Q_OBJECT
+public:
+    static ClientManager& clientManager();
+    Client *startProcess(QString command);
+
+private:
+    ClientManager();
+    static ClientManager m_clientManager;
+    QList<Client*> m_activeClients;
+};
+
+#endif // CLIENTMANAGER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gui//main.cpp	Tue Apr 05 00:12:18 2011 +0200
@@ -0,0 +1,11 @@
+#include <QtGui/QApplication>
+#include "mainwindow.h"
+
+int main(int argc, char *argv[])
+{
+    QApplication a(argc, argv);
+    MainWindow w;
+    w.show();
+
+    return a.exec();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gui//mainwindow.cpp	Tue Apr 05 00:12:18 2011 +0200
@@ -0,0 +1,37 @@
+#include "mainwindow.h"
+#include "octaveterminal.h"
+
+#include <QMenuBar>
+#include <QMenu>
+#include <QAction>
+#include <QtWebKit/QWebView>
+
+MainWindow::MainWindow(QWidget *parent)
+    : QMainWindow(parent) {
+    showMaximized();
+    m_mdiArea = new QMdiArea();
+    setCentralWidget(m_mdiArea);
+
+    addOctaveTerminal();
+    loadWebPage("Online Manual", "http://www.gnu.org/software/octave/doc/interpreter/");
+    m_mdiArea->setViewMode(QMdiArea::TabbedView);
+}
+
+MainWindow::~MainWindow() {
+
+}
+
+void MainWindow::addOctaveTerminal() {
+    OctaveTerminal *octaveTerminal = new OctaveTerminal;
+    m_mdiArea->addSubWindow(octaveTerminal);
+    Client *octaveClient = ClientManager::clientManager().startProcess("octave");
+    octaveTerminal->assignClient(octaveClient);
+}
+
+void MainWindow::loadWebPage(QString title, QString url) {
+
+    QWebView *webView = new QWebView();
+    webView->setWindowTitle(title);
+    webView->load(QUrl(url));
+    m_mdiArea->addSubWindow(webView);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gui//mainwindow.h	Tue Apr 05 00:12:18 2011 +0200
@@ -0,0 +1,22 @@
+#ifndef MAINWINDOW_H
+#define MAINWINDOW_H
+
+#include <QtGui/QMainWindow>
+#include <QMdiArea>
+
+class MainWindow : public QMainWindow
+{
+    Q_OBJECT
+
+public:
+    MainWindow(QWidget *parent = 0);
+    ~MainWindow();
+
+    void addOctaveTerminal();
+    void loadWebPage(QString title, QString url);
+
+private:
+    QMdiArea *m_mdiArea;
+};
+
+#endif // MAINWINDOW_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gui//octaveterminal.cpp	Tue Apr 05 00:12:18 2011 +0200
@@ -0,0 +1,71 @@
+#include "octaveterminal.h"
+#include <QVBoxLayout>
+
+
+OctaveTerminal::OctaveTerminal(QWidget *parent) :
+    QMdiSubWindow(parent),
+    m_client(0) {
+    setWindowTitle("Octave Terminal");
+
+    setWidget(new QWidget(this));
+    m_menuBar = new QMenuBar(widget());
+    m_octaveOutput = new QTextBrowser(widget());
+    m_commandLine = new QLineEdit(widget());
+
+    QVBoxLayout *layout = new QVBoxLayout();
+    layout->addWidget(m_menuBar);
+    layout->addWidget(m_octaveOutput);
+    layout->addWidget(m_commandLine);
+    widget()->setLayout(layout);
+
+    QMenu *octaveMenu = m_menuBar->addMenu("Octave");
+    QAction *showEnvironmentAction = octaveMenu->addAction("Show Environment (who)");
+
+    m_octaveOutput->setFontFamily("Monospace");
+    m_octaveOutput->setReadOnly(true);
+
+    blockUserInput();
+    connect(m_commandLine, SIGNAL(returnPressed()), this, SLOT(sendCommand()));
+    connect(showEnvironmentAction, SIGNAL(triggered()), this, SLOT(showEnvironment()));
+}
+
+void OctaveTerminal::sendCommand() {
+    QString command = m_commandLine->text();
+    m_octaveOutput->setFontUnderline(true);
+    m_octaveOutput->append(command);
+    command.append("\n");
+    m_client->send(command);
+    m_commandLine->clear();
+}
+
+void OctaveTerminal::blockUserInput() {
+    m_commandLine->setEnabled(false);
+}
+
+void OctaveTerminal::allowUserInput() {
+    m_commandLine->setEnabled(true);
+    m_commandLine->setFocus();
+}
+
+void OctaveTerminal::assignClient(Client *client) {
+    m_client = client;
+    connect(client, SIGNAL(dataAvailable()), this, SLOT(fetchDataFromClient()));
+    connect(client, SIGNAL(errorAvailable()), this, SLOT(fetchErrorFromClient()));
+    allowUserInput();
+}
+
+void OctaveTerminal::showEnvironment() {
+    m_client->send("who\n");
+}
+
+void OctaveTerminal::fetchDataFromClient() {
+    QString fetchedData = m_client->fetch();
+    m_octaveOutput->setFontUnderline(false);
+    m_octaveOutput->append(fetchedData);
+}
+
+void OctaveTerminal::fetchErrorFromClient() {
+    QString error = m_client->errorMessage();
+    m_octaveOutput->setFontUnderline(false);
+    m_octaveOutput->append(error);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gui//octaveterminal.h	Tue Apr 05 00:12:18 2011 +0200
@@ -0,0 +1,39 @@
+#ifndef OCTAVETERMINAL_H
+#define OCTAVETERMINAL_H
+
+#include <QMdiSubWindow>
+#include <QLineEdit>
+#include <QTextBrowser>
+#include <QAction>
+#include <QMenuBar>
+#include <QMenu>
+
+#include "client.h"
+
+class OctaveTerminal : public QMdiSubWindow {
+    Q_OBJECT
+public:
+    explicit OctaveTerminal(QWidget *parent = 0);
+
+signals:
+
+public slots:
+    void sendCommand();
+    void blockUserInput();
+    void allowUserInput();
+
+    void assignClient(Client* client);
+    void showEnvironment();
+
+protected slots:
+    void fetchDataFromClient();
+    void fetchErrorFromClient();
+
+private:
+    QMenuBar *m_menuBar;
+    QTextBrowser *m_octaveOutput;
+    QLineEdit *m_commandLine;
+    Client *m_client;
+};
+
+#endif // OCTAVETERMINAL_H