changeset 16504:49b059bf27c7

allow loading files from file browser * files-dock-widget.h, files-dock-widget.cc (files_dock_widget::contextmenu_requested): Create menu item for loading files. (files_dock_widget::contextmenu_load): New function. (files_dock_widget::load_file_signal): New signal. * main-window.h, main-window.cc (main_window::construct): Connect file_browser_window::load_file_signal to main_window::handle_load_workspace_request. (main_window::load_workspace_callback): Update workspace after loading file. (main_window::handle_load_workspace_request): New argument for passing file name.
author John W. Eaton <jwe@octave.org>
date Fri, 12 Apr 2013 14:51:47 -0400
parents c1ff738d606d
children ff061068a66c
files libgui/src/files-dock-widget.cc libgui/src/files-dock-widget.h libgui/src/main-window.cc libgui/src/main-window.h
diffstat 4 files changed, 35 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/libgui/src/files-dock-widget.cc	Fri Apr 12 14:51:39 2013 -0400
+++ b/libgui/src/files-dock-widget.cc	Fri Apr 12 14:51:47 2013 -0400
@@ -283,6 +283,7 @@
       QFileInfo info = _file_system_model->fileInfo(index);
 
       menu.addAction(tr("Open"), this, SLOT(contextmenu_open(bool)));
+      menu.addAction(tr("Load Data"), this, SLOT(contextmenu_load(bool)));
       menu.addSeparator();
       menu.addAction(tr("Rename"), this, SLOT(contextmenu_rename(bool)));
       menu.addAction(tr("Delete"), this, SLOT(contextmenu_delete(bool)));
@@ -313,6 +314,22 @@
 }
 
 void 
+files_dock_widget::contextmenu_load (bool)
+{
+  QItemSelectionModel *m = _file_tree_view->selectionModel ();
+  QModelIndexList rows = m->selectedRows ();
+
+  if (rows.size () > 0)
+    {
+      QModelIndex index = rows[0];
+
+      QFileInfo info = _file_system_model->fileInfo(index);
+
+      emit load_file_signal (info.fileName ());
+    }
+}
+
+void 
 files_dock_widget::contextmenu_rename (bool)
 {
   QItemSelectionModel *m = _file_tree_view->selectionModel ();
--- a/libgui/src/files-dock-widget.h	Fri Apr 12 14:51:39 2013 -0400
+++ b/libgui/src/files-dock-widget.h	Fri Apr 12 14:51:47 2013 -0400
@@ -85,6 +85,7 @@
 
   /* context menu actions */
   void contextmenu_open (bool);
+  void contextmenu_load (bool);
   void contextmenu_rename (bool);
   void contextmenu_delete (bool);
   void contextmenu_newfile (bool);
@@ -98,6 +99,9 @@
   /** Emitted, whenever the currently displayed directory changed. */
   void displayed_directory_changed (const QString& dir);
 
+  /** Emitted, whenever the user requested to load a file. */
+  void load_file_signal (const QString& fileName);
+
 private:
 
   // TODO: Add toolbar with buttons for navigating the path, creating dirs, etc
--- a/libgui/src/main-window.cc	Fri Apr 12 14:51:39 2013 -0400
+++ b/libgui/src/main-window.cc	Fri Apr 12 14:51:47 2013 -0400
@@ -134,14 +134,16 @@
 }
 
 void
-main_window::handle_load_workspace_request (void)
+main_window::handle_load_workspace_request (const QString& file_arg)
 {
-  QString selectedFile =
-    QFileDialog::getOpenFileName (this, tr ("Load Workspace"),
-                                  resource_manager::get_home_path ());
-  if (!selectedFile.isEmpty ())
+  QString file = file_arg;
+
+  if (file.isEmpty ())
+    file = QFileDialog::getOpenFileName (this, tr ("Load Workspace"),
+                                         resource_manager::get_home_path ());
+  if (! file.isEmpty ())
     octave_link::post_event (this, &main_window::load_workspace_callback,
-                             selectedFile.toStdString ());
+                             file.toStdString ());
 }
 
 void
@@ -562,6 +564,9 @@
   connect (this, SIGNAL (settings_changed (const QSettings *)),
            this, SLOT (notice_settings (const QSettings *)));
 
+  connect (file_browser_window, SIGNAL (load_file_signal (const QString&)),
+           this, SLOT (handle_load_workspace_request (const QString&)));
+
   setWindowTitle ("Octave");
 
   setDockOptions (QMainWindow::AnimatedDocks
@@ -1197,6 +1202,8 @@
 main_window::load_workspace_callback (const std::string& file)
 {
   Fload (ovl (file));
+
+  octave_link::set_workspace (true, symbol_table::workspace_info ());
 }
 
 void
--- a/libgui/src/main-window.h	Fri Apr 12 14:51:39 2013 -0400
+++ b/libgui/src/main-window.h	Fri Apr 12 14:51:47 2013 -0400
@@ -81,7 +81,7 @@
 public slots:
   void report_status_message (const QString& statusMessage);
   void handle_save_workspace_request (void);
-  void handle_load_workspace_request (void);
+  void handle_load_workspace_request (const QString& file = QString ());
   void handle_clear_workspace_request (void);
   void handle_clear_history_request (void);
   void handle_rename_variable_request (const QString& old_name,