changeset 16596:3ce0c312a40b

contextmenu for opening files in default applications * files-dock-widget.h, files-dock-widget.cc (files_dock_widget::contextmenu_open_in_app, files_dock_widget::open_item_in_app): New functions. (files_dock_widget::contextmenu_requested): New action for opening file in default external application.
author John W. Eaton <jwe@octave.org>
date Mon, 29 Apr 2013 18:39:07 -0400
parents e13051d7a472
children 8abae9ea4cb5 645672f1c873
files libgui/src/files-dock-widget.cc libgui/src/files-dock-widget.h
diffstat 2 files changed, 31 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/libgui/src/files-dock-widget.cc
+++ b/libgui/src/files-dock-widget.cc
@@ -40,6 +40,8 @@
 #include <QInputDialog>
 #include <QMessageBox>
 #include <QToolButton>
+#include <QUrl>
+#include <QDesktopServices>
 
 #include "load-save.h"
 
@@ -295,6 +297,17 @@
     }
 }
 
+void
+files_dock_widget::open_item_in_app (const QModelIndex& index)
+{
+  // Retrieve the file info associated with the model index.
+  QFileInfo fileInfo = _file_system_model->fileInfo (index);
+
+  QString file = fileInfo.absoluteFilePath ();
+
+  QDesktopServices::openUrl (QUrl::fromLocalFile (file));
+}
+
 void 
 files_dock_widget::contextmenu_requested (const QPoint& mpos)
 {
@@ -310,9 +323,14 @@
 
       menu.addAction (QIcon (":/actions/icons/fileopen.png"), tr("Open"),
                      this, SLOT(contextmenu_open(bool)));
+
+      menu.addAction (tr("Open in Default Application"),
+                      this, SLOT (contextmenu_open_in_app (bool)));
+
       if (info.isFile () && info.suffix () == "m")
         menu.addAction (QIcon (":/actions/icons/artsbuilderexecute.png"),
                         tr("Run"), this, SLOT(contextmenu_run(bool)));
+
       if (info.isFile ())
         menu.addAction (tr("Load Data"), this, SLOT(contextmenu_load(bool)));
 
@@ -359,6 +377,16 @@
 }
 
 void
+files_dock_widget::contextmenu_open_in_app (bool)
+{
+  QItemSelectionModel *m = _file_tree_view->selectionModel ();
+  QModelIndexList rows = m->selectedRows ();
+
+  for (QModelIndexList::iterator it = rows.begin (); it != rows.end (); it++)
+    open_item_in_app (*it);
+}
+
+void
 files_dock_widget::contextmenu_load (bool)
 {
   QItemSelectionModel *m = _file_tree_view->selectionModel ();
--- a/libgui/src/files-dock-widget.h
+++ b/libgui/src/files-dock-widget.h
@@ -85,6 +85,7 @@
 
   /* context menu actions */
   void contextmenu_open (bool);
+  void contextmenu_open_in_app (bool);
   void contextmenu_run (bool);
   void contextmenu_load (bool);
   void contextmenu_rename (bool);
@@ -119,6 +120,8 @@
   /** set a new directory or open a file **/
   void display_directory (const QString& dir, bool set_octave_dir = true);
 
+  void open_item_in_app (const QModelIndex& index);
+
   /** Variables for the actions **/
   QToolBar *        _navigation_tool_bar;
   QAction *         _sync_octave_directory_action;