changeset 16544:016073c0cb94

Add popdown toolbutton to files-dock-window toolbar. * libgui/src/files-dock-widget.cc (files_dock_widget::files_dock_widget): added popdown button to toolbar and merged set current dir, show current dir into it as well as adding new dir and new file option. (files_dock_widget::display_directory): change to call process_set_current_dir instead of emit. (files_dock_widget::contextmenu_newfile): change to call process_new_file. (files_dock_widget::contextmenu_newdir): Change to call process_new_dir. (files_dock_widget::contextmenu_setcurrentdir): Change to call process_set_current_dir. (files_dock_widget::popdownmenu_newdir): New function. (files_dock_widget::popdownmenu_newfile): New function. (files_dock_widget::process_new_file): New function. (files_dock_widget::process_new_dir): New function. (iles_dock_widget::process_set_current_dir): New function. * libgui/src/resource.qrc: Added icons/gear.png. * libgui/src/module.mk: Added icons/gear.png. * libgui/src/icons.png: New file.
author John Donoghue <john.donoghue@ieee.org>
date Tue, 16 Apr 2013 22:16:57 -0400
parents 6afb29359968
children c58069081439
files libgui/src/files-dock-widget.cc libgui/src/files-dock-widget.h libgui/src/icons/gear.png libgui/src/module.mk libgui/src/resource.qrc
diffstat 5 files changed, 84 insertions(+), 28 deletions(-) [+]
line wrap: on
line diff
--- a/libgui/src/files-dock-widget.cc
+++ b/libgui/src/files-dock-widget.cc
@@ -39,6 +39,7 @@
 #include <QMenu>
 #include <QInputDialog>
 #include <QMessageBox>
+#include <QToolButton>
 
 files_dock_widget::files_dock_widget (QWidget *p)
   : octave_dock_widget (p)
@@ -80,19 +81,35 @@
   directory_up_action->setToolTip (tr ("Move up one directory"));
 
   _sync_browser_directory_action = new QAction (QIcon(":/actions/icons/reload.png"),
-                                                "", _navigation_tool_bar);
+                                                tr("Show octave directory"), _navigation_tool_bar);
   _sync_browser_directory_action->setToolTip (tr ("Goto current octave directory"));
   _sync_browser_directory_action->setEnabled ("false");
 
   _sync_octave_directory_action = new QAction (QIcon(":/actions/icons/ok.png"),
-                                               "", _navigation_tool_bar);
+                                               tr("Set octave directory"), _navigation_tool_bar);
   _sync_octave_directory_action->setToolTip (tr ("Set octave directroy to current browser directory"));
   _sync_octave_directory_action->setEnabled ("false");
 
+  QToolButton * popdown_button = new QToolButton();
+  popdown_button->setToolTip(tr ("Actions on current directory"));
+  QMenu * popdown_menu = new QMenu();
+  popdown_menu->addAction(_sync_browser_directory_action);
+  popdown_menu->addAction(_sync_octave_directory_action);
+  popdown_button->setMenu(popdown_menu);
+  popdown_button->setPopupMode(QToolButton::InstantPopup);
+  popdown_button->setDefaultAction(new QAction(QIcon(":/actions/icons/gear.png"),"", _navigation_tool_bar));
+
+  popdown_menu->addSeparator();
+  popdown_menu->addAction(QIcon(":/actions/icons/filenew.png"),
+                          tr ("New File"),
+                          this, SLOT(popdownmenu_newfile(bool)));
+  popdown_menu->addAction(QIcon(":/actions/icons/folder_new.png"),
+                          tr ("New Directory"),
+                          this, SLOT(popdownmenu_newdir(bool)));
+
   _navigation_tool_bar->addWidget (_current_directory);
   _navigation_tool_bar->addAction (directory_up_action);
-  _navigation_tool_bar->addAction (_sync_browser_directory_action);
-  _navigation_tool_bar->addAction (_sync_octave_directory_action);
+  _navigation_tool_bar->addWidget (popdown_button);
 
   connect (directory_up_action, SIGNAL (triggered ()), this,
            SLOT (change_directory_up ()));
@@ -101,8 +118,6 @@
   connect (_sync_browser_directory_action, SIGNAL (triggered ()), this,
            SLOT (do_sync_browser_directory ()));
 
-  // TODO: Add other buttons for creating directories
-
   // Create the QFileSystemModel starting in the actual directory
   QDir curr_dir;
   _file_system_model = new QFileSystemModel (this);
@@ -252,7 +267,7 @@
           _file_system_model->setRootPath (fileInfo.absoluteFilePath ());
           _file_system_model->sort (0, Qt::AscendingOrder);
           if (_sync_octave_dir && set_octave_dir)
-            emit displayed_directory_changed (fileInfo.absoluteFilePath ());
+            process_set_current_dir(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 ());
@@ -449,18 +464,8 @@
 
       QFileInfo info = _file_system_model->fileInfo(index);
       QString parent_dir = info.filePath();
-      bool ok;
 
-      QString name = QInputDialog::getText (this, tr("Create File"), tr("Create file in\n") + parent_dir,
-                                       QLineEdit::Normal, "New File.txt", &ok);
-      if(ok && name.length()>0)
-        {
-          name = parent_dir + "/" + name;
-
-          QFile file(name);
-          file.open(QIODevice::WriteOnly);
-          _file_system_model->revert();
-        }
+      process_new_file(parent_dir);
     }
 }
 
@@ -476,14 +481,8 @@
 
       QFileInfo info = _file_system_model->fileInfo(index);
       QString parent_dir = info.filePath();
-      bool ok;
 
-      QString name = QInputDialog::getText (this, tr("Create Directory"), tr("Create folder in\n") + parent_dir,
-                                       QLineEdit::Normal, "New Directory", &ok);
-      if(ok && name.length()>0)
-        {
-          _file_system_model->mkdir(index, name);
-        }
+      process_new_dir(parent_dir);
     }
 }
 
@@ -501,7 +500,7 @@
 
       if(info.isDir())
         {
-          emit displayed_directory_changed (info.absoluteFilePath ());
+          process_set_current_dir(info.absoluteFilePath ());
         }
     }
 }
@@ -535,3 +534,53 @@
     display_directory (_octave_dir);  // sync browser to octave dir
 
 }
+
+void
+files_dock_widget::popdownmenu_newdir (bool)
+{
+      process_new_dir(_file_system_model->rootPath());
+}
+
+void
+files_dock_widget::popdownmenu_newfile (bool)
+{
+      process_new_file(_file_system_model->rootPath());
+}
+
+void
+files_dock_widget::process_new_file (const QString &parent_dir)
+{
+  bool ok;
+
+  QString name = QInputDialog::getText (this, tr("Create File"), tr("Create file in\n") + parent_dir,
+                                       QLineEdit::Normal, "New File.txt", &ok);
+  if(ok && name.length()>0)
+    {
+      name = parent_dir + "/" + name;
+
+      QFile file(name);
+      file.open(QIODevice::WriteOnly);
+      _file_system_model->revert();
+    }
+}
+
+void
+files_dock_widget::process_new_dir (const QString &parent_dir)
+{
+  bool ok;
+
+  QString name = QInputDialog::getText (this, tr("Create Directory"), tr("Create folder in\n") + parent_dir,
+                                       QLineEdit::Normal, "New Directory", &ok);
+  if(ok && name.length()>0)
+    {
+     QDir dir(parent_dir);
+      dir.mkdir(name);
+      _file_system_model->revert();
+    }
+}
+
+void files_dock_widget::process_set_current_dir(const QString & dir)
+{
+  emit displayed_directory_changed (dir);
+}
+
--- a/libgui/src/files-dock-widget.h
+++ b/libgui/src/files-dock-widget.h
@@ -93,6 +93,10 @@
   void contextmenu_newdir (bool);
   void contextmenu_setcurrentdir (bool);
 
+  /* popdown menu options */
+  void popdownmenu_newfile(bool);
+  void popdownmenu_newdir(bool);
+
 signals:
 
   /** Emitted, whenever the user requested to open a file. */
@@ -108,8 +112,9 @@
   void run_file_signal (const QString& fileName);
 
 private:
-
-  // TODO: Add toolbar with buttons for navigating the path, creating dirs, etc
+  void process_new_file(const QString &parent_name);
+  void process_new_dir(const QString &parent_name);
+  void process_set_current_dir(const QString &parent_name);
 
   /** set a new directory or open a file **/
   void display_directory (const QString& dir, bool set_octave_dir = true);
new file mode 100755
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..430a62341c613b35c9dddc9bfa359615b2e60b39
GIT binary patch
literal 2373
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
--- a/libgui/src/module.mk
+++ b/libgui/src/module.mk
@@ -29,6 +29,7 @@
   src/icons/filesaveas.png \
   src/icons/filesave.png \
   src/icons/find.png \
+  src/icons/gear.png \
   src/icons/folder_new.png \
   src/icons/graphic_logo_DocumentationDockWidget.png \
   src/icons/graphic_logo_FileEditor.png \
--- a/libgui/src/resource.qrc
+++ b/libgui/src/resource.qrc
@@ -27,6 +27,7 @@
         <file>icons/zoom-in.png</file>
         <file>icons/zoom-out.png</file>
         <file>icons/find.png</file>
+        <file>icons/gear.png</file>
         <file>icons/chat.png</file>
         <file>icons/help_index.png</file>
         <file>icons/jabber_protocol.png</file>