changeset 13465:3542af417878

Added buttons to load, save and clear the workspace. Double-clicking an item in the history list will now send the command to the console.
author Jacob Dawid <jacob.dawid@googlemail.com>
date Sun, 17 Apr 2011 22:12:02 +0200
parents 661f66fb26a7
children 32e2bc78ae77
files gui//src/HistoryDockWidget.cpp gui//src/HistoryDockWidget.h gui//src/MainWindow.cpp gui//src/MainWindow.h gui//src/VariablesDockWidget.cpp gui//src/VariablesDockWidget.h
diffstat 6 files changed, 82 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/gui//src/HistoryDockWidget.cpp
+++ b/gui//src/HistoryDockWidget.cpp
@@ -25,12 +25,17 @@
     construct();
 }
 
+void HistoryDockWidget::handleListViewItemDoubleClicked(QModelIndex modelIndex) {
+    QString command = m_historyListModel->data(modelIndex, 0).toString();
+    emit commandDoubleClicked(command);
+}
+
 void HistoryDockWidget::construct() {
     m_historyListModel = new QStringListModel();
     m_historyListView = new QListView(this);
     m_historyListView->setModel(m_historyListModel);
     m_historyListView->setAlternatingRowColors(true);
-
+    m_historyListView->setEditTriggers(QAbstractItemView::NoEditTriggers);
     QHBoxLayout *layout = new QHBoxLayout();
 
     setWindowTitle("Command History");
@@ -40,14 +45,16 @@
     layout->setMargin(2);
 
     widget()->setLayout(layout);
+    connect(m_historyListView, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(handleListViewItemDoubleClicked(QModelIndex)));
 }
 
 void HistoryDockWidget::updateHistory(string_vector historyEntries) {
     QStringList stringList = m_historyListModel->stringList();
     for(size_t i = 0; i < historyEntries.length(); i++) {
         QString command(historyEntries[i].c_str());
-        if(!command.startsWith("#"))
-            stringList.push_front(QString("%1: ").arg(stringList.size() + 1) + command);
+        if(!command.startsWith("#")) {
+            stringList.push_front(command);
+        }
     }
     m_historyListModel->setStringList(stringList);
     emit information("History updated.");
--- a/gui//src/HistoryDockWidget.h
+++ b/gui//src/HistoryDockWidget.h
@@ -41,6 +41,10 @@
 
 signals:
     void information(QString message);
+    void commandDoubleClicked(QString command);
+
+private slots:
+    void handleListViewItemDoubleClicked(QModelIndex modelIndex);
 
 private:
     void construct();
--- a/gui//src/MainWindow.cpp
+++ b/gui//src/MainWindow.cpp
@@ -62,6 +62,22 @@
     m_browserWidget->load(QUrl(url));
 }
 
+void MainWindow::handleSaveWorkspaceRequest() {
+    // TODO: Handle saving of workspace.
+}
+
+void MainWindow::handleLoadWorkspaceRequest() {
+    // TODO: Handle loading of workspace.
+}
+
+void MainWindow::handleClearWorkspaceRequest() {
+    // TODO: Handle clearing of workspace.
+}
+
+void MainWindow::handleCommandDoubleClicked(QString command) {
+    m_octaveTerminal->sendText(command);
+}
+
 void MainWindow::closeEvent(QCloseEvent *closeEvent) {
     m_isRunning = false;
     reportStatusMessage("Saving data and shutting down.");
@@ -123,6 +139,10 @@
 
     connect(m_filesDockWidget, SIGNAL(openFile(QString)), this, SLOT(handleOpenFileRequest(QString)));
     connect(m_historyDockWidget, SIGNAL(information(QString)), this, SLOT(reportStatusMessage(QString)));
+    connect(m_historyDockWidget, SIGNAL(commandDoubleClicked(QString)), this, SLOT(handleCommandDoubleClicked(QString)));
+    connect(m_variablesDockWidget, SIGNAL(saveWorkspace()), this, SLOT(handleSaveWorkspaceRequest()));
+    connect(m_variablesDockWidget, SIGNAL(loadWorkspace()), this, SLOT(handleLoadWorkspaceRequest()));
+    connect(m_variablesDockWidget, SIGNAL(clearWorkspace()), this, SLOT(handleClearWorkspaceRequest()));
 
     openWebPage("http://www.gnu.org/software/octave/doc/interpreter/");
     m_serviceWidget->load(QUrl("http://savannah.gnu.org/bugs/?group=octave"));
--- a/gui//src/MainWindow.h
+++ b/gui//src/MainWindow.h
@@ -100,6 +100,10 @@
     void handleOpenFileRequest(QString fileName);
     void reportStatusMessage(QString statusMessage);
     void openWebPage(QString url);
+    void handleSaveWorkspaceRequest();
+    void handleLoadWorkspaceRequest();
+    void handleClearWorkspaceRequest();
+    void handleCommandDoubleClicked(QString command);
 
 protected:
     void closeEvent(QCloseEvent *closeEvent);
--- a/gui//src/VariablesDockWidget.cpp
+++ b/gui//src/VariablesDockWidget.cpp
@@ -1,5 +1,7 @@
 #include "VariablesDockWidget.h"
 #include <QHBoxLayout>
+#include <QVBoxLayout>
+#include <QPushButton>
 
 VariablesDockWidget::VariablesDockWidget(QWidget *parent)
     : QDockWidget(parent) {
@@ -14,16 +16,32 @@
     m_variablesTreeWidget = new QTreeWidget(this);
     m_variablesTreeWidget->setHeaderHidden(false);
     m_variablesTreeWidget->setHeaderLabels(headerLabels);
-    QHBoxLayout *layout = new QHBoxLayout();
+    QVBoxLayout *layout = new QVBoxLayout();
 
     setWindowTitle("Workspace");
     setWidget(new QWidget());
 
     layout->addWidget(m_variablesTreeWidget);
-    layout->setMargin(2);
+    QWidget *buttonBar = new QWidget(this);
+    layout->addWidget(buttonBar);
 
+        QHBoxLayout *buttonBarLayout = new QHBoxLayout();
+        QPushButton *saveWorkspaceButton = new QPushButton("Save", buttonBar);
+        QPushButton *loadWorkspaceButton = new QPushButton("Load", buttonBar);
+        QPushButton *clearWorkspaceButton = new QPushButton("Clear", buttonBar);
+        buttonBarLayout->addWidget(saveWorkspaceButton);
+        buttonBarLayout->addWidget(loadWorkspaceButton);
+        buttonBarLayout->addWidget(clearWorkspaceButton);
+        buttonBarLayout->setMargin(2);
+        buttonBar->setLayout(buttonBarLayout);
+
+    layout->setMargin(2);
     widget()->setLayout(layout);
 
+    connect(saveWorkspaceButton, SIGNAL(clicked()), this, SLOT(emitSaveWorkspace()));
+    connect(loadWorkspaceButton, SIGNAL(clicked()), this, SLOT(emitLoadWorkspace()));
+    connect(clearWorkspaceButton, SIGNAL(clicked()), this, SLOT(emitClearWorkspace()));
+
     QTreeWidgetItem *treeWidgetItem = new QTreeWidgetItem();
     treeWidgetItem->setData(0, 0, QString("Local"));
     m_variablesTreeWidget->insertTopLevelItem(0, treeWidgetItem);
@@ -42,7 +60,7 @@
 
     m_variablesTreeWidget->expandAll();
     m_variablesTreeWidget->setAlternatingRowColors(true);
-    m_variablesTreeWidget->setAnimated(true);
+    m_variablesTreeWidget->setAnimated(true);    
 }
 
 void VariablesDockWidget::updateTreeEntry(QTreeWidgetItem *treeItem, SymbolRecord symbolRecord) {
@@ -136,3 +154,15 @@
         }
     }
 }
+
+void VariablesDockWidget::emitSaveWorkspace() {
+    emit saveWorkspace();
+}
+
+void VariablesDockWidget::emitLoadWorkspace() {
+    emit loadWorkspace();
+}
+
+void VariablesDockWidget::emitClearWorkspace() {
+    emit clearWorkspace();
+}
--- a/gui//src/VariablesDockWidget.h
+++ b/gui//src/VariablesDockWidget.h
@@ -8,10 +8,21 @@
 
 class VariablesDockWidget : public QDockWidget
 {
+    Q_OBJECT
 public:
     VariablesDockWidget(QWidget *parent = 0);
     void setVariablesList(QList<SymbolRecord> symbolTable);
 
+signals:
+    void saveWorkspace();
+    void loadWorkspace();
+    void clearWorkspace();
+
+private slots:
+    void emitSaveWorkspace();
+    void emitLoadWorkspace();
+    void emitClearWorkspace();
+
 private:
     void construct();
     void updateTreeEntry(QTreeWidgetItem *treeItem, SymbolRecord symbolRecord);