diff libgui/src/octave-qt-link.cc @ 17884:766ad9be2966

Prompt for non-existent new file when using edit.m from GUI (bug #40450) * libgui/src/octave-qt-link.cc(do_prompt_new_edit_file): New function to display question dialog. * libgui/src/octave-qt-link.h(do_prompt_new_edit_file): Add function to header file. * libinterp/corefcn/octave-link.cc(__octave_link_edit_file__): If 2nd argument present, display prompt dialog. * libinterp/corefcn/octave-link.h(prompt_new_edit_file): If octave-link enabled, use prompt dialog box. * scripts/miscellaneous/edit.m: Modify to use new prompt routine. CLI behavior is unchanged.
author Torsten <ttl@justmail.de>
date Fri, 08 Nov 2013 07:40:36 -0800
parents 86e8dbccf7c7
children a38cee8f0a9b
line wrap: on
line diff
--- a/libgui/src/octave-qt-link.cc	Thu Nov 07 10:39:30 2013 -0500
+++ b/libgui/src/octave-qt-link.cc	Fri Nov 08 07:40:36 2013 -0800
@@ -27,6 +27,8 @@
 #endif
 
 #include <QStringList>
+#include <QDialog>
+#include <QDir>
 
 #include "str-vec.h"
 #include "dialog.h"
@@ -39,6 +41,8 @@
 
 #include "octave-qt-link.h"
 
+#include "resource-manager.h"
+
 octave_qt_link::octave_qt_link (octave_main_thread *mt)
   : octave_link (), main_thread (mt)
 { }
@@ -67,6 +71,34 @@
   return true;
 }
 
+bool
+octave_qt_link::do_prompt_new_edit_file (const std::string& file)
+{
+  QSettings *settings = resource_manager::get_settings ();
+
+  if (settings->value ("editor/create_new_file",false).toBool ())
+    return true;
+
+  QFileInfo file_info (QString::fromStdString (file));
+  QStringList btn;
+  QStringList role;
+  role << "AcceptRole" << "AcceptRole";
+  btn << tr ("Yes") << tr ("No");
+
+  uiwidget_creator.signal_dialog (
+    tr ("File\n%1\ndoes not exist. Do you want to create it?").
+    arg (QDir::currentPath () + QDir::separator ()
+         + QString::fromStdString (file)),
+    tr ("Octave Editor"), "quest", btn, tr ("Yes"), role );
+
+  // Wait while the user is responding to message box.
+  uiwidget_creator.wait ();
+  // The GUI has sent a signal and the process has been awakened.
+  QString answer = uiwidget_creator.get_dialog_button ();
+
+  return (answer == tr ("Yes"));
+}
+
 int
 octave_qt_link::do_message_dialog (const std::string& dlg,
                                    const std::string& msg,