changeset 13395:7e8c437b29cb

Incorporated John Swenses code for a filesystem view dock.
author Jacob Dawid <jacob.dawid@googlemail.com>
date Mon, 11 Apr 2011 14:39:26 +0200
parents 7a5998cebef3
children a02705c67ec2
files gui//Quint.pro gui//src/FilesDockWidget.cpp gui//src/FilesDockWidget.h gui//src/MainWindow.cpp gui//src/MainWindow.h gui//src/OctaveLink.cpp gui//src/OctaveLink.h gui//src/QTerminalWidget.h
diffstat 8 files changed, 166 insertions(+), 23 deletions(-) [+]
line wrap: on
line diff
--- a/gui//Quint.pro	Mon Apr 11 14:11:46 2011 +0200
+++ b/gui//Quint.pro	Mon Apr 11 14:39:26 2011 +0200
@@ -41,7 +41,8 @@
         src/ProcessInfo.cpp \
     src/OctaveTerminal.cpp \
     src/VariablesDockWidget.cpp \
-    src/HistoryDockWidget.cpp
+    src/HistoryDockWidget.cpp \
+    src/FilesDockWidget.cpp
 
 HEADERS += \
         src/TerminalCharacterDecoder.h \
@@ -79,7 +80,8 @@
         src/kdecore_export.h \
     src/OctaveTerminal.h \
     src/VariablesDockWidget.h \
-    src/HistoryDockWidget.h
+    src/HistoryDockWidget.h \
+    src/FilesDockWidget.h
 
 INCFLAGS = -g3 $$system(mkoctfile -p INCFLAGS)
 LFLAGS = $$system(mkoctfile -p LFLAGS) \
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gui//src/FilesDockWidget.cpp	Mon Apr 11 14:39:26 2011 +0200
@@ -0,0 +1,76 @@
+#include "FilesDockWidget.h"
+
+#include <QApplication>
+
+FilesDockWidget::FilesDockWidget(QWidget *parent)
+  : QDockWidget(parent)
+{
+    setWidget(new QWidget(this));
+
+  // Create a toolbar
+  toolbar = new QToolBar ("", widget());
+  toolbar->setAllowedAreas (Qt::TopToolBarArea);
+  toolbar->setMovable (false);
+  toolbar->setIconSize (QSize (20,20));
+
+  // Add a button to the toolbar with the QT standard icon for up-directory
+  // TODO: Maybe change this to be an up-directory icon that is OS specific???
+  QStyle *style = QApplication::style();
+  dirIcon = style->standardIcon(QStyle::SP_FileDialogToParent);
+  dirAction = new QAction (dirIcon, "", toolbar);
+  
+  toolbar->addAction (dirAction);
+  connect(dirAction, SIGNAL(triggered()), this, SLOT(onUpDirectory()));
+  
+  // TODO: Add other buttons for creating directories
+
+  // Create the QFileSystemModel starting in the home directory
+  QString homePath = QDir::homePath ();
+  // TODO: This should occur after Octave has been initialized and the startup directory of Octave is established
+
+  fileSystemModel = new QFileSystemModel(this);
+  fileSystemModel->setFilter (QDir::NoDotAndDotDot | QDir::AllEntries);
+  QModelIndex rootPathIndex = fileSystemModel->setRootPath (homePath);
+
+  // Attach the model to the QTreeView and set the root index
+  fileTreeView = new QTreeView(widget());
+  fileTreeView->setModel (fileSystemModel);
+  fileTreeView->setRootIndex (rootPathIndex);
+  fileTreeView->setSortingEnabled (true);
+
+  connect( fileTreeView, SIGNAL(doubleClicked(const QModelIndex &) ), this, SLOT( itemDoubleClicked(const QModelIndex &) ) );
+  // TODO: Maybe also add a keyPress event handler so users can navigate manually
+
+
+  // Layout the widgets vertically with the toolbar on top
+  layout = new QVBoxLayout();
+  layout->setSpacing(0);
+  layout->addWidget(toolbar);
+  layout->addWidget(fileTreeView);
+    widget()->setLayout(layout);
+  // TODO: Add right-click contextual menus for copying, pasting, deleting files (and others)
+}
+
+void FilesDockWidget::itemDoubleClicked(const QModelIndex &index)
+{
+  QFileInfo fileInfo = fileSystemModel->fileInfo (index);
+  if (fileInfo.isDir ())
+    {
+      fileSystemModel->setRootPath (fileInfo.absolutePath ());
+      fileTreeView->setRootIndex (index);
+    }
+  else
+    {
+      // TODO: Open the file appropriately based on the mime type
+    }
+}
+
+void FilesDockWidget::onUpDirectory(void)
+{
+  // Move up an index node
+  QDir dir = QDir(fileSystemModel->filePath(fileTreeView->rootIndex()));
+  dir.cdUp();
+  fileTreeView->setRootIndex(fileSystemModel->index(dir.absolutePath()));
+  
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gui//src/FilesDockWidget.h	Mon Apr 11 14:39:26 2011 +0200
@@ -0,0 +1,78 @@
+#ifndef FILESDOCKWIDGET_H
+#define FILESDOCKWIDGET_H
+
+#include <QListView>
+#include <QDate>
+#include <QObject>
+#include <QWidget>
+#include <QListWidget>
+#include <QFileSystemModel>
+#include <QToolBar>
+#include <QToolButton>
+#include <QVBoxLayout>
+#include <QAction>
+#include <QTreeView>
+
+#include <vector>
+#include <string>
+
+#undef PACKAGE_BUGREPORT
+#undef PACKAGE_NAME
+#undef PACKAGE_STRING
+#undef PACKAGE_TARNAME
+#undef PACKAGE_VERSION
+#include "octave/config.h"
+#include "octave/octave.h"
+#include "octave/str-vec.h"
+#include "octave/cmd-hist.h"
+#include <QDockWidget>
+
+class FilesDockWidget :  public QDockWidget  {
+  Q_OBJECT
+    
+public :
+  FilesDockWidget(QWidget *parent = 0);
+
+  void setDirectory (QString dir);
+  
+public slots:
+  /**
+   * Slot for handling a change in directory via double click
+   */
+  void itemDoubleClicked(const QModelIndex &index);
+
+  /**
+   * Slot for handling the up-directory button in the toolbar
+   */
+  void onUpDirectory(void);
+    
+private:
+  // Layout widget for packing the toolbar and treeview widgets
+  QVBoxLayout *layout;
+
+  // TODO: Add toolbar with buttons for navigating the path, creating dirs, etc
+
+  /**
+   * Toolbar for file and directory manipulation
+   */
+  QToolBar *toolbar;
+
+  /**
+   * Variables for the up-directory action.
+   */
+  QIcon dirIcon;
+  QAction *dirAction;
+  QToolButton *upDirectoryButton;
+
+  /**
+   * The file system model.
+   */
+  QFileSystemModel *fileSystemModel;
+
+  /**
+   * The file system view.
+   */
+  QTreeView *fileTreeView;
+};
+
+#endif // FILESDOCKWIDGET_H
--- a/gui//src/MainWindow.cpp	Mon Apr 11 14:11:46 2011 +0200
+++ b/gui//src/MainWindow.cpp	Mon Apr 11 14:39:26 2011 +0200
@@ -38,11 +38,14 @@
     m_octaveTerminal = new OctaveTerminal(this);
     m_variablesDockWidget = new VariablesDockWidget(this);
     m_historyDockWidget = new HistoryDockWidget(this);
-    setWindowTitle("Quint");
+    m_filesDockWidget = new FilesDockWidget(this);
+
+    setWindowTitle("Octave");
     setCentralWidget(m_octaveTerminal);
 
     addDockWidget(Qt::LeftDockWidgetArea, m_variablesDockWidget);
     addDockWidget(Qt::LeftDockWidgetArea, m_historyDockWidget);
+    addDockWidget(Qt::RightDockWidgetArea, m_filesDockWidget);
 }
 
 void MainWindow::establishOctaveLink() {
--- a/gui//src/MainWindow.h	Mon Apr 11 14:11:46 2011 +0200
+++ b/gui//src/MainWindow.h	Mon Apr 11 14:39:26 2011 +0200
@@ -25,6 +25,7 @@
 #include "OctaveLink.h"
 #include "VariablesDockWidget.h"
 #include "HistoryDockWidget.h"
+#include "FilesDockWidget.h"
 
 // Octave includes
 #undef PACKAGE_BUGREPORT
@@ -88,6 +89,7 @@
     OctaveTerminal *octaveTerminal() { return m_octaveTerminal; }
     VariablesDockWidget *variablesDockWidget() { return m_variablesDockWidget; }
     HistoryDockWidget *historyDockWidget() { return m_historyDockWidget; }
+    FilesDockWidget *filesDockWidget() { return m_filesDockWidget; }
 
 public slots:
 private:
@@ -96,6 +98,7 @@
     OctaveTerminal *m_octaveTerminal;
     VariablesDockWidget *m_variablesDockWidget;
     HistoryDockWidget *m_historyDockWidget;
+    FilesDockWidget *m_filesDockWidget;
 
     // Threads for running octave and managing the data interaction.
     OctaveMainThread *m_octaveMainThread;
--- a/gui//src/OctaveLink.cpp	Mon Apr 11 14:11:46 2011 +0200
+++ b/gui//src/OctaveLink.cpp	Mon Apr 11 14:39:26 2011 +0200
@@ -115,8 +115,7 @@
 
 //*************************************************************************
 OctaveLink::OctaveLink()
-    : m_previousHistoryLength(0),
-      m_isProcessingServerData(false) {
+    : m_previousHistoryLength(0) {
 }
 
 OctaveLink::~OctaveLink() {
@@ -251,8 +250,6 @@
 
   QMutexLocker mutexLocker(&m_internalAccessMutex);
 
-  m_isProcessingServerData = true;
-  
   process_breakpoint_action();
   processBreakpointAndRemoveModify();
   processRequestedVariables();
@@ -260,8 +257,6 @@
   setHistoryList();
   setBreakPointList();
 
-  m_isProcessingServerData = false;
-
 #ifndef __WIN32__
   gettimeofday(&stop, NULL);
   double elapsed = stop.tv_sec - start.tv_sec + 1E-6 * (stop.tv_usec - start.tv_usec);
--- a/gui//src/OctaveLink.h	Mon Apr 11 14:11:46 2011 +0200
+++ b/gui//src/OctaveLink.h	Mon Apr 11 14:39:26 2011 +0200
@@ -112,8 +112,6 @@
         }
     } VariableMetaData;
 
-    bool isProcessing(void) { return m_isProcessingServerData; }
-
     // Functions used to access data form the client side.
     /** Debugging related methods. */
 
@@ -228,8 +226,6 @@
     /** History related member variables. */
     string_vector m_historyList;
     int m_previousHistoryLength;
-
-    bool m_isProcessingServerData;
     static OctaveLink m_singleton;
 };
 #endif // OCTAVELINK_H
--- a/gui//src/QTerminalWidget.h	Mon Apr 11 14:11:46 2011 +0200
+++ b/gui//src/QTerminalWidget.h	Mon Apr 11 14:39:26 2011 +0200
@@ -31,16 +31,6 @@
     Q_OBJECT
 public:
     /**
-      * \enum ColorScheme
-      * Different color schemes for the terminal.
-      */
-    enum ColorScheme {
-        WhiteOnBlack,
-        GreenOnBlack,
-        BlackOnLightYellow
-    };
-
-    /**
       * \enum ScrollBarPosition
       * Defines the scrollbar position of the terminal.
       */