changeset 27442:6e4519df0be2

group functions by category in interpreter_events and event_manager classes * event-manager.h (interpreter_events, event_manager): Reorder functions according to category. * qt-interpreter-events.h, qt-interpreter-events.cc (qt_interpreter_events): Likewise, so the ordering matches the ordering in the base class.
author John W. Eaton <jwe@octave.org>
date Wed, 25 Sep 2019 13:02:50 -0400
parents a36cb488fc97
children 075602880383
files libgui/src/qt-interpreter-events.cc libgui/src/qt-interpreter-events.h libinterp/corefcn/event-manager.h
diffstat 3 files changed, 503 insertions(+), 484 deletions(-) [+]
line wrap: on
line diff
--- a/libgui/src/qt-interpreter-events.cc	Wed Sep 25 10:27:33 2019 -0400
+++ b/libgui/src/qt-interpreter-events.cc	Wed Sep 25 13:02:50 2019 -0400
@@ -56,147 +56,6 @@
 
 namespace octave
 {
-  qt_interpreter_events::qt_interpreter_events (void)
-    : interpreter_events (), m_shutdown_confirm_result (false)
-  {
-    qRegisterMetaType<octave_value> ("octave_value");
-    qRegisterMetaType<symbol_info_list> ("symbol_info_list");
-
-    qRegisterMetaType<fcn_callback> ("fcn_callback");
-    qRegisterMetaType<meth_callback> ("meth_callback");
-  }
-
-  bool qt_interpreter_events::confirm_shutdown (void)
-  {
-    // Lock the mutex before emitting signal.
-    lock ();
-
-    emit confirm_shutdown_signal ();
-
-    // Wait while the GUI shuts down.
-    wait ();
-
-    // The GUI has sent a signal and the thread has been awakened.
-
-    unlock ();
-
-    return m_shutdown_confirm_result;
-  }
-
-  bool qt_interpreter_events::copy_image_to_clipboard (const std::string& file)
-  {
-    emit copy_image_to_clipboard_signal (QString::fromStdString (file), true);
-
-    return true;
-  }
-
-  bool qt_interpreter_events::edit_file (const std::string& file)
-  {
-    emit edit_file_signal (QString::fromStdString (file));
-
-    return true;
-  }
-
-  bool qt_interpreter_events::prompt_new_edit_file (const std::string& file)
-  {
-    QSettings *settings = resource_manager::get_settings ();
-
-    if (! settings || settings->value ("editor/create_new_file",false).toBool ())
-      return true;
-
-    std::string abs_fname = sys::env::make_absolute (file);
-
-    QStringList btn;
-    QStringList role;
-    role << "YesRole" << "RejectRole";
-    btn << tr ("Create") << tr ("Cancel");
-
-    // Lock mutex before signaling.
-    uiwidget_creator.lock ();
-
-    uiwidget_creator.signal_dialog
-      (tr ("File\n%1\ndoes not exist. Do you want to create it?").
-       arg (QString::fromStdString (abs_fname)),
-       tr ("Octave Editor"), "quest", btn, tr ("Create"), role);
-
-    // Wait while the user is responding to message box.
-    uiwidget_creator.wait ();
-
-    // The GUI has sent a signal and the thread has been awakened.
-
-    QString answer = uiwidget_creator.get_dialog_button ();
-
-    uiwidget_creator.unlock ();
-
-    return (answer == tr ("Create"));
-  }
-
-  uint8NDArray qt_interpreter_events::get_named_icon (const std::string& icon_name)
-  {
-    uint8NDArray retval;
-    QIcon icon = resource_manager::icon (QString::fromStdString (icon_name));
-    if (! icon.isNull ())
-      {
-        QImage img = icon.pixmap (QSize (32, 32)).toImage ();
-
-        if (img.format () == QImage::Format_ARGB32_Premultiplied)
-          {
-            retval.resize (dim_vector (img.height (), img.width (), 4), 0);
-            uint8_t* bits = img.bits ();
-            for (int i = 0; i < img.height (); i++)
-              for (int j = 0; j < img.width (); j++)
-                {
-                  retval(i,j,2) = bits[0];
-                  retval(i,j,1) = bits[1];
-                  retval(i,j,0) = bits[2];
-                  retval(i,j,3) = bits[3];
-                  bits += 4;
-                }
-          }
-      }
-    return retval;
-  }
-
-  std::string
-  qt_interpreter_events::question_dialog (const std::string& msg,
-                                          const std::string& title,
-                                          const std::string& btn1,
-                                          const std::string& btn2,
-                                          const std::string& btn3,
-                                          const std::string& btndef)
-  {
-    QStringList btn;
-    QStringList role;
-    // Must use ResetRole which is left-aligned for all OS and WM.
-    role << "ResetRole" << "ResetRole" << "ResetRole";
-    btn << QString::fromStdString (btn1);
-    if (btn2 == "")
-      role.removeAt (0);
-    else
-      btn << QString::fromStdString (btn2);
-    btn << QString::fromStdString (btn3);
-
-    // Lock mutex before signaling.
-    uiwidget_creator.lock ();
-
-    uiwidget_creator.signal_dialog (QString::fromStdString (msg),
-                                    QString::fromStdString (title),
-                                    "quest", btn,
-                                    QString::fromStdString (btndef),
-                                    role);
-
-    // Wait while the user is responding to message box.
-    uiwidget_creator.wait ();
-
-    // The GUI has sent a signal and the thread has been awakened.
-
-    std::string answer = uiwidget_creator.get_dialog_button ().toStdString ();
-
-    uiwidget_creator.unlock ();
-
-    return answer;
-  }
-
   static QStringList
   make_qstring_list (const std::list<std::string>& lst)
   {
@@ -241,72 +100,14 @@
     return retval;
   }
 
-  std::pair<std::list<int>, int>
-  qt_interpreter_events::list_dialog (const std::list<std::string>& list,
-                                      const std::string& mode,
-                                      int width, int height,
-                                      const std::list<int>& initial,
-                                      const std::string& name,
-                                      const std::list<std::string>& prompt,
-                                      const std::string& ok_string,
-                                      const std::string& cancel_string)
+  qt_interpreter_events::qt_interpreter_events (void)
+    : interpreter_events (), m_shutdown_confirm_result (false)
   {
-    // Lock mutex before signaling.
-    uiwidget_creator.lock ();
-
-    uiwidget_creator.signal_listview (make_qstring_list (list),
-                                      QString::fromStdString (mode),
-                                      width, height,
-                                      QList<int>::fromStdList (initial),
-                                      QString::fromStdString (name),
-                                      make_qstring_list (prompt),
-                                      QString::fromStdString (ok_string),
-                                      QString::fromStdString (cancel_string));
-
-    // Wait while the user is responding to message box.
-    uiwidget_creator.wait ();
-
-    // The GUI has sent a signal and the thread has been awakened.
-
-    const QIntList *selected = uiwidget_creator.get_list_index ();
-    int ok = uiwidget_creator.get_dialog_result ();
-
-    uiwidget_creator.unlock ();
+    qRegisterMetaType<octave_value> ("octave_value");
+    qRegisterMetaType<symbol_info_list> ("symbol_info_list");
 
-    return std::pair<std::list<int>, int> (selected->toStdList (), ok);
-  }
-
-  std::list<std::string>
-  qt_interpreter_events::input_dialog (const std::list<std::string>& prompt,
-                                       const std::string& title,
-                                       const std::list<float>& nr,
-                                       const std::list<float>& nc,
-                                       const std::list<std::string>& defaults)
-  {
-    std::list<std::string> retval;
-
-    // Lock mutex before signaling.
-    uiwidget_creator.lock ();
-
-    uiwidget_creator.signal_inputlayout (make_qstring_list (prompt),
-                                         QString::fromStdString (title),
-                                         QFloatList::fromStdList (nr),
-                                         QFloatList::fromStdList (nc),
-                                         make_qstring_list (defaults));
-
-    // Wait while the user is responding to message box.
-    uiwidget_creator.wait ();
-
-    // The GUI has sent a signal and the thread has been awakened.
-
-    const QStringList *inputLine = uiwidget_creator.get_string_list ();
-
-    uiwidget_creator.unlock ();
-
-    for (auto it = inputLine->begin (); it != inputLine->end (); it++)
-      retval.push_back (it->toStdString ());
-
-    return retval;
+    qRegisterMetaType<fcn_callback> ("fcn_callback");
+    qRegisterMetaType<meth_callback> ("meth_callback");
   }
 
   std::list<std::string>
@@ -346,6 +147,193 @@
     return retval;
   }
 
+  std::list<std::string>
+  qt_interpreter_events::input_dialog (const std::list<std::string>& prompt,
+                                       const std::string& title,
+                                       const std::list<float>& nr,
+                                       const std::list<float>& nc,
+                                       const std::list<std::string>& defaults)
+  {
+    std::list<std::string> retval;
+
+    // Lock mutex before signaling.
+    uiwidget_creator.lock ();
+
+    uiwidget_creator.signal_inputlayout (make_qstring_list (prompt),
+                                         QString::fromStdString (title),
+                                         QFloatList::fromStdList (nr),
+                                         QFloatList::fromStdList (nc),
+                                         make_qstring_list (defaults));
+
+    // Wait while the user is responding to message box.
+    uiwidget_creator.wait ();
+
+    // The GUI has sent a signal and the thread has been awakened.
+
+    const QStringList *inputLine = uiwidget_creator.get_string_list ();
+
+    uiwidget_creator.unlock ();
+
+    for (auto it = inputLine->begin (); it != inputLine->end (); it++)
+      retval.push_back (it->toStdString ());
+
+    return retval;
+  }
+
+  std::pair<std::list<int>, int>
+  qt_interpreter_events::list_dialog (const std::list<std::string>& list,
+                                      const std::string& mode,
+                                      int width, int height,
+                                      const std::list<int>& initial,
+                                      const std::string& name,
+                                      const std::list<std::string>& prompt,
+                                      const std::string& ok_string,
+                                      const std::string& cancel_string)
+  {
+    // Lock mutex before signaling.
+    uiwidget_creator.lock ();
+
+    uiwidget_creator.signal_listview (make_qstring_list (list),
+                                      QString::fromStdString (mode),
+                                      width, height,
+                                      QList<int>::fromStdList (initial),
+                                      QString::fromStdString (name),
+                                      make_qstring_list (prompt),
+                                      QString::fromStdString (ok_string),
+                                      QString::fromStdString (cancel_string));
+
+    // Wait while the user is responding to message box.
+    uiwidget_creator.wait ();
+
+    // The GUI has sent a signal and the thread has been awakened.
+
+    const QIntList *selected = uiwidget_creator.get_list_index ();
+    int ok = uiwidget_creator.get_dialog_result ();
+
+    uiwidget_creator.unlock ();
+
+    return std::pair<std::list<int>, int> (selected->toStdList (), ok);
+  }
+
+  std::string
+  qt_interpreter_events::question_dialog (const std::string& msg,
+                                          const std::string& title,
+                                          const std::string& btn1,
+                                          const std::string& btn2,
+                                          const std::string& btn3,
+                                          const std::string& btndef)
+  {
+    QStringList btn;
+    QStringList role;
+    // Must use ResetRole which is left-aligned for all OS and WM.
+    role << "ResetRole" << "ResetRole" << "ResetRole";
+    btn << QString::fromStdString (btn1);
+    if (btn2 == "")
+      role.removeAt (0);
+    else
+      btn << QString::fromStdString (btn2);
+    btn << QString::fromStdString (btn3);
+
+    // Lock mutex before signaling.
+    uiwidget_creator.lock ();
+
+    uiwidget_creator.signal_dialog (QString::fromStdString (msg),
+                                    QString::fromStdString (title),
+                                    "quest", btn,
+                                    QString::fromStdString (btndef),
+                                    role);
+
+    // Wait while the user is responding to message box.
+    uiwidget_creator.wait ();
+
+    // The GUI has sent a signal and the thread has been awakened.
+
+    std::string answer = uiwidget_creator.get_dialog_button ().toStdString ();
+
+    uiwidget_creator.unlock ();
+
+    return answer;
+  }
+
+  void qt_interpreter_events::update_path_dialog (void)
+  {
+    emit update_path_dialog_signal ();
+  }
+
+  void qt_interpreter_events::show_preferences (void)
+  {
+    emit show_preferences_signal ();
+  }
+
+  void qt_interpreter_events::show_doc (const std::string& file)
+  {
+    emit show_doc_signal (QString::fromStdString (file));
+  }
+
+  bool qt_interpreter_events::edit_file (const std::string& file)
+  {
+    emit edit_file_signal (QString::fromStdString (file));
+
+    return true;
+  }
+
+  void qt_interpreter_events::edit_variable (const std::string& expr,
+                                             const octave_value& val)
+  {
+    emit edit_variable_signal (QString::fromStdString (expr), val);
+  }
+
+  bool qt_interpreter_events::confirm_shutdown (void)
+  {
+    // Lock the mutex before emitting signal.
+    lock ();
+
+    emit confirm_shutdown_signal ();
+
+    // Wait while the GUI shuts down.
+    wait ();
+
+    // The GUI has sent a signal and the thread has been awakened.
+
+    unlock ();
+
+    return m_shutdown_confirm_result;
+  }
+
+  bool qt_interpreter_events::prompt_new_edit_file (const std::string& file)
+  {
+    QSettings *settings = resource_manager::get_settings ();
+
+    if (! settings || settings->value ("editor/create_new_file",false).toBool ())
+      return true;
+
+    std::string abs_fname = sys::env::make_absolute (file);
+
+    QStringList btn;
+    QStringList role;
+    role << "YesRole" << "RejectRole";
+    btn << tr ("Create") << tr ("Cancel");
+
+    // Lock mutex before signaling.
+    uiwidget_creator.lock ();
+
+    uiwidget_creator.signal_dialog
+      (tr ("File\n%1\ndoes not exist. Do you want to create it?").
+       arg (QString::fromStdString (abs_fname)),
+       tr ("Octave Editor"), "quest", btn, tr ("Create"), role);
+
+    // Wait while the user is responding to message box.
+    uiwidget_creator.wait ();
+
+    // The GUI has sent a signal and the thread has been awakened.
+
+    QString answer = uiwidget_creator.get_dialog_button ();
+
+    uiwidget_creator.unlock ();
+
+    return (answer == tr ("Create"));
+  }
+
   // Prompt to allow file to be run by setting cwd (or if
   // addpath_option==true, alternatively setting the path).  This uses a
   // QMessageBox unlike other functions in this file, because
@@ -407,16 +395,80 @@
     return retval;
   }
 
+  uint8NDArray qt_interpreter_events::get_named_icon (const std::string& icon_name)
+  {
+    uint8NDArray retval;
+    QIcon icon = resource_manager::icon (QString::fromStdString (icon_name));
+    if (! icon.isNull ())
+      {
+        QImage img = icon.pixmap (QSize (32, 32)).toImage ();
+
+        if (img.format () == QImage::Format_ARGB32_Premultiplied)
+          {
+            retval.resize (dim_vector (img.height (), img.width (), 4), 0);
+            uint8_t* bits = img.bits ();
+            for (int i = 0; i < img.height (); i++)
+              for (int j = 0; j < img.width (); j++)
+                {
+                  retval(i,j,2) = bits[0];
+                  retval(i,j,1) = bits[1];
+                  retval(i,j,0) = bits[2];
+                  retval(i,j,3) = bits[3];
+                  bits += 4;
+                }
+          }
+      }
+    return retval;
+  }
+
+  std::string
+  qt_interpreter_events::gui_preference (const std::string& key,
+                                         const std::string& value)
+  {
+    QString pref_value;
+
+    // Lock the mutex before signaling
+    lock ();
+
+    // Emit the signal for changing or getting a preference
+    emit gui_preference_signal (QString::fromStdString (key),
+                                QString::fromStdString (value), &pref_value);
+
+    // Wait for the GUI and unlock when resumed
+    wait ();
+    unlock ();
+
+    return pref_value.toStdString ();
+  }
+
+  bool qt_interpreter_events::copy_image_to_clipboard (const std::string& file)
+  {
+    emit copy_image_to_clipboard_signal (QString::fromStdString (file), true);
+
+    return true;
+  }
+
+  void qt_interpreter_events::execute_command_in_terminal
+  (const std::string& command)
+  {
+    emit execute_command_in_terminal_signal (QString::fromStdString (command));
+  }
+
+  void qt_interpreter_events::register_doc (const std::string& file)
+  {
+    emit register_doc_signal (QString::fromStdString (file));
+  }
+
+  void qt_interpreter_events::unregister_doc (const std::string& file)
+  {
+    emit unregister_doc_signal (QString::fromStdString (file));
+  }
+
   void qt_interpreter_events::directory_changed (const std::string& dir)
   {
     emit directory_changed_signal (QString::fromStdString (dir));
   }
 
-  void qt_interpreter_events::update_path_dialog (void)
-  {
-    emit update_path_dialog_signal ();
-  }
-
   void qt_interpreter_events::file_remove (const std::string& old_name,
                                            const std::string& new_name)
   {
@@ -437,12 +489,6 @@
     emit file_renamed_signal (load_new);
   }
 
-  void qt_interpreter_events::execute_command_in_terminal
-  (const std::string& command)
-  {
-    emit execute_command_in_terminal_signal (QString::fromStdString (command));
-  }
-
   void qt_interpreter_events::set_workspace (bool top_level, bool debug,
                                              const symbol_info_list& syminfo,
                                              bool update_variable_editor)
@@ -522,52 +568,6 @@
                                           line, QString::fromStdString (cond));
   }
 
-  void qt_interpreter_events::show_preferences (void)
-  {
-    emit show_preferences_signal ();
-  }
-
-  std::string
-  qt_interpreter_events::gui_preference (const std::string& key,
-                                         const std::string& value)
-  {
-    QString pref_value;
-
-    // Lock the mutex before signaling
-    lock ();
-
-    // Emit the signal for changing or getting a preference
-    emit gui_preference_signal (QString::fromStdString (key),
-                                QString::fromStdString (value), &pref_value);
-
-    // Wait for the GUI and unlock when resumed
-    wait ();
-    unlock ();
-
-    return pref_value.toStdString ();
-  }
-
-  void qt_interpreter_events::show_doc (const std::string& file)
-  {
-    emit show_doc_signal (QString::fromStdString (file));
-  }
-
-  void qt_interpreter_events::register_doc (const std::string& file)
-  {
-    emit register_doc_signal (QString::fromStdString (file));
-  }
-
-  void qt_interpreter_events::unregister_doc (const std::string& file)
-  {
-    emit unregister_doc_signal (QString::fromStdString (file));
-  }
-
-  void qt_interpreter_events::edit_variable (const std::string& expr,
-                                             const octave_value& val)
-  {
-    emit edit_variable_signal (QString::fromStdString (expr), val);
-  }
-
   void
   qt_interpreter_events::insert_debugger_pointer (const std::string& file,
                                                   int line)
--- a/libgui/src/qt-interpreter-events.h	Wed Sep 25 10:27:33 2019 -0400
+++ b/libgui/src/qt-interpreter-events.h	Wed Sep 25 13:02:50 2019 -0400
@@ -75,18 +75,16 @@
 
     ~qt_interpreter_events (void) = default;
 
-    bool confirm_shutdown (void);
-
-    bool copy_image_to_clipboard (const std::string& file);
-
-    bool edit_file (const std::string& file);
+    std::list<std::string>
+    file_dialog (const filter_list& filter, const std::string& title,
+                 const std::string& filename, const std::string& pathname,
+                 const std::string& multimode);
 
-    bool prompt_new_edit_file (const std::string& file);
-
-    std::string
-    question_dialog (const std::string& msg, const std::string& title,
-                     const std::string& btn1, const std::string& btn2,
-                     const std::string& btn3, const std::string& btndef);
+    std::list<std::string>
+    input_dialog (const std::list<std::string>& prompt,
+                  const std::string& title, const std::list<float>& nr,
+                  const std::list<float>& nc,
+                  const std::list<std::string>& defaults);
 
     std::pair<std::list<int>, int>
     list_dialog (const std::list<std::string>& list,
@@ -97,34 +95,49 @@
                  const std::string& ok_string,
                  const std::string& cancel_string);
 
-    std::list<std::string>
-    input_dialog (const std::list<std::string>& prompt,
-                  const std::string& title, const std::list<float>& nr,
-                  const std::list<float>& nc,
-                  const std::list<std::string>& defaults);
+    std::string
+    question_dialog (const std::string& msg, const std::string& title,
+                     const std::string& btn1, const std::string& btn2,
+                     const std::string& btn3, const std::string& btndef);
+
+    void update_path_dialog (void);
+
+    void show_preferences (void);
 
-    std::list<std::string>
-    file_dialog (const filter_list& filter, const std::string& title,
-                 const std::string& filename, const std::string& pathname,
-                 const std::string& multimode);
+    void show_doc (const std::string& file);
+
+    bool edit_file (const std::string& file);
+
+    void edit_variable (const std::string& name, const octave_value& val);
+
+    bool confirm_shutdown (void);
+
+    bool prompt_new_edit_file (const std::string& file);
 
     int debug_cd_or_addpath_error (const std::string& file,
                                    const std::string& dir,
                                    bool addpath_option);
 
-    void directory_changed (const std::string& dir);
+    uint8NDArray get_named_icon (const std::string& icon_name);
+
+    std::string gui_preference (const std::string& key,
+                                const std::string& value);
+
+    bool copy_image_to_clipboard (const std::string& file);
 
-    void update_path_dialog (void);
+    void execute_command_in_terminal (const std::string& command);
+
+    void register_doc (const std::string& file);
+
+    void unregister_doc (const std::string& file);
+
+    void directory_changed (const std::string& dir);
 
     void file_remove (const std::string& old_name,
                       const std::string& new_name);
 
     void file_renamed (bool load_new = true);
 
-    void execute_command_in_terminal (const std::string& command);
-
-    uint8NDArray get_named_icon (const std::string& icon_name);
-
     void set_workspace (bool top_level, bool debug,
                         const symbol_info_list& syminfo,
                         bool update_variable_editor);
@@ -151,19 +164,6 @@
     void update_breakpoint (bool insert, const std::string& file, int line,
                             const std::string& cond);
 
-    void show_preferences (void);
-
-    std::string gui_preference (const std::string& key,
-                                const std::string& value);
-
-    void show_doc (const std::string& file);
-
-    void register_doc (const std::string& file);
-
-    void unregister_doc (const std::string& file);
-
-    void edit_variable (const std::string& name, const octave_value& val);
-
     void shutdown_confirmation (bool sd) { m_shutdown_confirm_result = sd; }
 
     void lock (void) { m_mutex.lock (); }
--- a/libinterp/corefcn/event-manager.h	Wed Sep 25 10:27:33 2019 -0400
+++ b/libinterp/corefcn/event-manager.h	Wed Sep 25 13:02:50 2019 -0400
@@ -84,28 +84,28 @@
 
     virtual ~interpreter_events (void) = default;
 
-    virtual void update_path_dialog (void) {  }
+    // Dialogs.
 
-    virtual bool confirm_shutdown (void) { return false; }
+    typedef std::list<std::pair<std::string, std::string>> filter_list;
 
-    virtual bool copy_image_to_clipboard (const std::string& /*file*/)
+    virtual std::list<std::string>
+    file_dialog (const filter_list& /*filter*/,
+                 const std::string& /*title*/,
+                 const std::string& /*filename*/,
+                 const std::string& /*dirname*/,
+                 const std::string& /*multimode*/)
     {
-      return false;
+      return std::list<std::string> ();
     }
 
-    virtual bool edit_file (const std::string& /*file*/) { return false; }
-
-    virtual bool prompt_new_edit_file (const std::string& /*file*/)
+    virtual std::list<std::string>
+    input_dialog (const std::list<std::string>& /*prompt*/,
+                  const std::string& /*title*/,
+                  const std::list<float>& /*nr*/,
+                  const std::list<float>& /*nc*/,
+                  const std::list<std::string>& /*defaults*/)
     {
-      return false;
-    }
-
-    virtual std::string
-    question_dialog (const std::string& /*msg*/, const std::string& /*title*/,
-                     const std::string& /*btn1*/, const std::string& /*btn2*/,
-                     const std::string& /*btn3*/, const std::string& /*btndef*/)
-    {
-      return "";
+      return std::list<std::string> ();
     }
 
     virtual std::pair<std::list<int>, int>
@@ -120,26 +120,35 @@
       return std::pair<std::list<int>, int> ();
     }
 
-    virtual std::list<std::string>
-    input_dialog (const std::list<std::string>& /*prompt*/,
-                  const std::string& /*title*/,
-                  const std::list<float>& /*nr*/,
-                  const std::list<float>& /*nc*/,
-                  const std::list<std::string>& /*defaults*/)
+    virtual std::string
+    question_dialog (const std::string& /*msg*/, const std::string& /*title*/,
+                     const std::string& /*btn1*/, const std::string& /*btn2*/,
+                     const std::string& /*btn3*/, const std::string& /*btndef*/)
     {
-      return std::list<std::string> ();
+      return "";
     }
 
-    typedef std::list<std::pair<std::string, std::string>> filter_list;
+    virtual void update_path_dialog (void) {  }
+
+    virtual void show_preferences (void) { }
+
+    virtual void show_doc (const std::string& /*file*/) { }
+
+    virtual bool edit_file (const std::string& /*file*/) { return false; }
 
-    virtual std::list<std::string>
-    file_dialog (const filter_list& /*filter*/,
-                 const std::string& /*title*/,
-                 const std::string& /*filename*/,
-                 const std::string& /*dirname*/,
-                 const std::string& /*multimode*/)
+    virtual void
+    edit_variable (const std::string& /*name*/, const octave_value& /*val*/)
+    { }
+
+    // Other requests for user interaction, usually some kind of
+    // confirmation before another action.  Could these be reformulated
+    // using the question_dialog action?
+
+    virtual bool confirm_shutdown (void) { return false; }
+
+    virtual bool prompt_new_edit_file (const std::string& /*file*/)
     {
-      return std::list<std::string> ();
+      return false;
     }
 
     virtual int
@@ -150,6 +159,39 @@
       return -1;
     }
 
+    // Requests for information normally stored in the GUI.
+
+    virtual uint8NDArray get_named_icon (const std::string& /*icon_name*/)
+    {
+      return uint8NDArray ();
+    }
+
+    virtual std::string gui_preference (const std::string& /*key*/,
+                                        const std::string& /*value*/)
+    {
+      return "";
+    }
+
+    // Requests for GUI action that do not require user interaction.
+    // These are different from other notifications in that they are not
+    // associated with changes in the interpreter state (like a change
+    // in the current working directory or command history).
+
+    virtual bool copy_image_to_clipboard (const std::string& /*file*/)
+    {
+      return false;
+    }
+
+    virtual void
+    execute_command_in_terminal (const std::string& /*command*/) { }
+
+    virtual void register_doc (const std::string& /*file*/) { }
+
+    virtual void unregister_doc (const std::string& /*file*/) { }
+
+    // Notifications of events in the interpreter that a GUI will
+    // normally wish to respond to.
+
     virtual void directory_changed (const std::string& /*dir*/) { }
 
     virtual void
@@ -159,14 +201,6 @@
     virtual void file_renamed (bool) { }
 
     virtual void
-    execute_command_in_terminal (const std::string& /*command*/) { }
-
-    virtual uint8NDArray get_named_icon (const std::string& /*icon_name*/)
-    {
-      return uint8NDArray ();
-    }
-
-    virtual void
     set_workspace (bool /*top_level*/, bool /*debug*/,
                    const octave::symbol_info_list& /*syminfo*/,
                    bool /*update_variable_editor*/)
@@ -199,24 +233,6 @@
     update_breakpoint (bool /*insert*/, const std::string& /*file*/,
                        int /*line*/, const std::string& /*cond*/)
     { }
-
-    virtual void show_preferences (void) { }
-
-    virtual std::string gui_preference (const std::string& /*key*/,
-                                        const std::string& /*value*/)
-    {
-      return "";
-    }
-
-    virtual void show_doc (const std::string& /*file*/) { }
-
-    virtual void register_doc (const std::string& /*file*/) { }
-
-    virtual void unregister_doc (const std::string& /*file*/) { }
-
-    virtual void
-    edit_variable (const std::string& /*name*/, const octave_value& /*val*/)
-    { }
   };
 
   //! Provides threadsafe access to octave.
@@ -289,46 +305,32 @@
     // (directory or workspace changed, for example) or to request the
     // GUI to perform some action (display a dialog, for example).
 
-    void update_path_dialog (void)
-    {
-      if (octave::application::is_gui_running () && enabled ())
-        instance->update_path_dialog ();
-    }
+    // Please keep this list of declarations in the same order as the
+    // ones above in the interpreter_events class.
+
+    typedef std::list<std::pair<std::string, std::string>> filter_list;
 
-    bool confirm_shutdown (void)
+    std::list<std::string>
+    file_dialog (const filter_list& filter, const std::string& title,
+                 const std::string& filename, const std::string& dirname,
+                 const std::string& multimode)
     {
-      bool retval = true;
-
-      if (enabled ())
-        retval = instance->confirm_shutdown ();
-
-      return retval;
+      return (enabled ()
+              ? instance->file_dialog (filter, title, filename, dirname,
+                                       multimode)
+              : std::list<std::string> ());
     }
 
-    bool copy_image_to_clipboard (const std::string& file)
-    {
-      return enabled () ? instance->copy_image_to_clipboard (file) : false;
-    }
-
-    bool edit_file (const std::string& file)
-    {
-      return enabled () ? instance->edit_file (file) : false;
-    }
-
-    bool prompt_new_edit_file (const std::string& file)
-    {
-      return enabled () ? instance->prompt_new_edit_file (file) : false;
-    }
-
-    std::string
-    question_dialog (const std::string& msg, const std::string& title,
-                     const std::string& btn1, const std::string& btn2,
-                     const std::string& btn3, const std::string& btndef)
+    std::list<std::string>
+    input_dialog (const std::list<std::string>& prompt,
+                  const std::string& title,
+                  const std::list<float>& nr,
+                  const std::list<float>& nc,
+                  const std::list<std::string>& defaults)
     {
       return (enabled ()
-              ? instance->question_dialog (msg, title, btn1,
-                                           btn2, btn3, btndef)
-              : "");
+              ? instance->input_dialog (prompt, title, nr, nc, defaults)
+              : std::list<std::string> ());
     }
 
     std::pair<std::list<int>, int>
@@ -348,29 +350,74 @@
               : std::pair<std::list<int>, int> ());
     }
 
-    std::list<std::string>
-    input_dialog (const std::list<std::string>& prompt,
-                  const std::string& title,
-                  const std::list<float>& nr,
-                  const std::list<float>& nc,
-                  const std::list<std::string>& defaults)
+    std::string
+    question_dialog (const std::string& msg, const std::string& title,
+                     const std::string& btn1, const std::string& btn2,
+                     const std::string& btn3, const std::string& btndef)
     {
       return (enabled ()
-              ? instance->input_dialog (prompt, title, nr, nc, defaults)
-              : std::list<std::string> ());
+              ? instance->question_dialog (msg, title, btn1,
+                                           btn2, btn3, btndef)
+              : "");
+    }
+
+    void update_path_dialog (void)
+    {
+      if (octave::application::is_gui_running () && enabled ())
+        instance->update_path_dialog ();
+    }
+
+    bool show_preferences (void)
+    {
+      if (enabled ())
+        {
+          instance->show_preferences ();
+          return true;
+        }
+      else
+        return false;
     }
 
-    typedef std::list<std::pair<std::string, std::string>> filter_list;
+    bool show_doc (const std::string& file)
+    {
+      if (enabled ())
+        {
+          instance->show_doc (file);
+          return true;
+        }
+      else
+        return false;
+    }
+
+    bool edit_file (const std::string& file)
+    {
+      return enabled () ? instance->edit_file (file) : false;
+    }
 
-    std::list<std::string>
-    file_dialog (const filter_list& filter, const std::string& title,
-                 const std::string& filename, const std::string& dirname,
-                 const std::string& multimode)
+    bool edit_variable (const std::string& name, const octave_value& val)
     {
-      return (enabled ()
-              ? instance->file_dialog (filter, title, filename, dirname,
-                                       multimode)
-              : std::list<std::string> ());
+      if (enabled ())
+        {
+          instance->edit_variable (name, val);
+          return true;
+        }
+      else
+        return false;
+    }
+
+    bool confirm_shutdown (void)
+    {
+      bool retval = true;
+
+      if (enabled ())
+        retval = instance->confirm_shutdown ();
+
+      return retval;
+    }
+
+    bool prompt_new_edit_file (const std::string& file)
+    {
+      return enabled () ? instance->prompt_new_edit_file (file) : false;
     }
 
     int debug_cd_or_addpath_error (const std::string& file,
@@ -381,6 +428,53 @@
               : 0);
     }
 
+    uint8NDArray get_named_icon (const std::string& icon_name)
+    {
+      return (enabled ()
+              ? instance->get_named_icon (icon_name) : uint8NDArray ());
+    }
+
+    std::string gui_preference (const std::string& key,
+                                const std::string& value)
+    {
+      return enabled () ? instance->gui_preference (key, value) : "";
+    }
+
+    bool copy_image_to_clipboard (const std::string& file)
+    {
+      return enabled () ? instance->copy_image_to_clipboard (file) : false;
+    }
+
+    // Preserves pending input.
+    void execute_command_in_terminal (const std::string& command)
+    {
+      if (enabled ())
+        instance->execute_command_in_terminal (command);
+    }
+
+    bool register_doc (const std::string& file)
+    {
+      if (enabled ())
+        {
+          instance->register_doc (file);
+          return true;
+        }
+      else
+        return false;
+    }
+
+    bool unregister_doc (const std::string& file)
+    {
+      if (enabled ())
+        {
+          instance->unregister_doc (file);
+          return true;
+        }
+      else
+        return false;
+
+    }
+
     void directory_changed (const std::string& dir)
     {
       if (enabled ())
@@ -400,19 +494,6 @@
         instance->file_renamed (load_new);
     }
 
-    // Preserves pending input.
-    void execute_command_in_terminal (const std::string& command)
-    {
-      if (enabled ())
-        instance->execute_command_in_terminal (command);
-    }
-
-    uint8NDArray get_named_icon (const std::string& icon_name)
-    {
-      return (enabled ()
-              ? instance->get_named_icon (icon_name) : uint8NDArray ());
-    }
-
     void set_workspace (void);
 
     void set_workspace (bool top_level, const octave::symbol_info_list& syminfo,
@@ -493,68 +574,6 @@
         instance->update_breakpoint (insert, file, line, cond);
     }
 
-    bool show_preferences (void)
-    {
-      if (enabled ())
-        {
-          instance->show_preferences ();
-          return true;
-        }
-      else
-        return false;
-    }
-
-    std::string gui_preference (const std::string& key,
-                                const std::string& value)
-    {
-      return enabled () ? instance->gui_preference (key, value) : "";
-    }
-
-    bool show_doc (const std::string& file)
-    {
-      if (enabled ())
-        {
-          instance->show_doc (file);
-          return true;
-        }
-      else
-        return false;
-    }
-
-    bool register_doc (const std::string& file)
-    {
-      if (enabled ())
-        {
-          instance->register_doc (file);
-          return true;
-        }
-      else
-        return false;
-    }
-
-    bool unregister_doc (const std::string& file)
-    {
-      if (enabled ())
-        {
-          instance->unregister_doc (file);
-          return true;
-        }
-      else
-        return false;
-
-    }
-
-    bool edit_variable (const std::string& name, const octave_value& val)
-    {
-      if (enabled ())
-        {
-          instance->edit_variable (name, val);
-          return true;
-        }
-      else
-        return false;
-    }
-
   private:
 
     interpreter& m_interpreter;