changeset 16500:605d7f0ee0d8

Added Filesdockwidget recently viewed directory pulldownlist * libgui/src/files-dockwidget.h (files_dock_widget::_current_directory): Changed from QLineEdit to QComboBox * libgui/src/files-dockwidget.cc (files_dock_widget::files_dock_widget): Changed _current_directory to QComboBox and additional signal processing for index selection. Added load/populate of comboxbox from saved settings. (files_dock_widget::~files_dock_widget): added save of _current_directory to settings. (files_dock_widget::accept_directory_line_edit): change for QComboBox. files_dock_widget::display_directory): added insertion of displayed directory into combox list.
author John Donoghue <john.donoghue@ieee.org>
date Sat, 06 Apr 2013 01:14:53 -0400
parents 9ff3181e671c
children facf00ce97d3
files libgui/src/files-dock-widget.cc libgui/src/files-dock-widget.h
diffstat 2 files changed, 39 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/libgui/src/files-dock-widget.cc
+++ b/libgui/src/files-dock-widget.cc
@@ -34,6 +34,8 @@
 #include <QProcess>
 #include <QDebug>
 #include <QHeaderView>
+#include <QLineEdit>
+#include <QSizePolicy>
 
 files_dock_widget::files_dock_widget (QWidget *p)
   : octave_dock_widget (p)
@@ -67,8 +69,13 @@
   _directory_up_action = new QAction (_directory_icon, "", _navigation_tool_bar);
   _directory_up_action->setStatusTip (tr ("Move up one directory."));
 
-  _current_directory = new QLineEdit (_navigation_tool_bar);
+  _current_directory = new QComboBox (_navigation_tool_bar);
   _current_directory->setStatusTip (tr ("Enter the path or filename."));
+  _current_directory->setEditable(true);
+  _current_directory->setMaxCount(MaxMRUDirs);
+  _current_directory->setInsertPolicy(QComboBox::NoInsert);
+  QSizePolicy sizePol(QSizePolicy::Expanding, QSizePolicy::Preferred);
+  _current_directory->setSizePolicy(sizePol);
 
   _navigation_tool_bar->addAction (_directory_up_action);
   _navigation_tool_bar->addWidget (_current_directory);
@@ -102,7 +109,10 @@
   );
   _file_tree_view->header ()->restoreState (settings->value ("filesdockwidget/column_state").toByteArray ());
   
-  _current_directory->setText(_file_system_model->fileInfo (rootPathIndex).
+  QStringList mru_dirs = settings->value ("filesdockwidget/mru_dir_list").toStringList ();
+  _current_directory->addItems(mru_dirs);
+
+  _current_directory->setEditText(_file_system_model->fileInfo (rootPathIndex).
                               absoluteFilePath ());
 
   connect (_file_tree_view, SIGNAL (doubleClicked (const QModelIndex &)),
@@ -119,8 +129,11 @@
 
   // TODO: Add right-click contextual menus for copying, pasting, deleting files (and others)
 
-  connect (_current_directory, SIGNAL (returnPressed ()),
-           this, SLOT (accept_directory_line_edit ()));
+  connect (_current_directory->lineEdit(), SIGNAL (returnPressed ()),
+            this, SLOT (accept_directory_line_edit ()));
+
+  connect (_current_directory, SIGNAL (activated (const QString &)),
+           this, SLOT (set_current_directory (const QString &)));
 
   QCompleter *completer = new QCompleter (_file_system_model, this);
   _current_directory->setCompleter (completer);
@@ -136,6 +149,14 @@
   settings->setValue ("filesdockwidget/sort_files_by_column", sort_column);
   settings->setValue ("filesdockwidget/sort_files_by_order", sort_order);
   settings->setValue ("filesdockwidget/column_state", _file_tree_view->header ()->saveState ());
+
+  QStringList dirs;
+  for(int i=0; i< _current_directory->count(); i++)
+  {
+    dirs.append(_current_directory->itemText(i));
+  }
+  settings->setValue ("filesdockwidget/mru_dir_list", dirs);
+
   settings->sync ();
 }
 
@@ -159,7 +180,7 @@
 void
 files_dock_widget::accept_directory_line_edit (void)
 {
-  display_directory (_current_directory->text ());
+  display_directory (_current_directory->currentText ());
 }
 
 void
@@ -182,7 +203,15 @@
                                          index (fileInfo.absoluteFilePath ()));
           _file_system_model->setRootPath (fileInfo.absoluteFilePath ());
           _file_system_model->sort (0, Qt::AscendingOrder);
-          _current_directory->setText (fileInfo.absoluteFilePath ());
+
+          // see if its in the list, and if it is, remove it and then, put at top of the list
+          int index = _current_directory->findText(fileInfo.absoluteFilePath ());
+          if(index != -1)
+          {
+             _current_directory->removeItem(index);
+          }
+          _current_directory->insertItem(0, fileInfo.absoluteFilePath ());
+          _current_directory->setCurrentIndex(0);
         }
       else
         {
--- a/libgui/src/files-dock-widget.h
+++ b/libgui/src/files-dock-widget.h
@@ -36,7 +36,7 @@
 #include <QTreeView>
 #include <QSettings>
 
-#include <QLineEdit>
+#include <QComboBox>
 #include "octave-dock-widget.h"
 
 /**
@@ -97,7 +97,9 @@
 
   /** The file system view. */
   QTreeView *       _file_tree_view;
-  QLineEdit *       _current_directory;
+  QComboBox *       _current_directory;
+
+  enum { MaxMRUDirs = 10 };
 };
 
 #endif // FILESDOCKWIDGET_H