changeset 31697:dd904ce6f53f

use interpreter event to display documentation in terminal and editor widgets * QTerminal.h, QTerminal.cc (QTerminal::doc_on_expression): Use interpreter_event to display doc browser instead of calling base_qobject::show_documentation_window. (QTerminal::interpreter_event): New signals. * command-widget.h, command-widget.cc (console::interpreter_event): New signals. (command_widget::command_widget): Forward console interpreter_event signals to command_widget interpreter_event signals. * octave-qscintilla.cc (octave_qscintilla::contextmenu_help_doc): Use interpreter_event to display doc browser instead of calling base_qobject::show_documentation_window. * octave-qobject.cc (base_qobject::terminal_widget): Also call connect_interpreter_events for QTerminal. * terminal-dock-widget.h, terminal-dock-widget.cc (terminal_dock_widget::interpreter_event): New signals. (terminal_dock_widget::terminal_dock_widget): Forward QTerminal interpreter_event signals to terminal_dock_widget interpreter_event signals.
author John W. Eaton <jwe@octave.org>
date Fri, 30 Dec 2022 23:13:00 -0500
parents 8fed04d0607c
children 276a992d0c08
files libgui/qterminal/libqterminal/QTerminal.cc libgui/qterminal/libqterminal/QTerminal.h libgui/src/command-widget.cc libgui/src/command-widget.h libgui/src/m-editor/octave-qscintilla.cc libgui/src/octave-qobject.cc libgui/src/terminal-dock-widget.cc libgui/src/terminal-dock-widget.h
diffstat 8 files changed, 54 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/libgui/qterminal/libqterminal/QTerminal.cc	Mon Dec 26 17:29:59 2022 -0500
+++ b/libgui/qterminal/libqterminal/QTerminal.cc	Fri Dec 30 23:13:00 2022 -0500
@@ -41,6 +41,9 @@
 #include "gui-settings.h"
 #include "octave-qobject.h"
 
+#include "builtin-defun-decls.h"
+#include "interpreter.h"
+
 #include "QTerminal.h"
 #if defined (Q_OS_WIN32)
 # include "win32/QWinTerminalImpl.h"
@@ -194,8 +197,15 @@
 // slot for showing documentation on selected epxression
 void QTerminal::doc_on_expression ()
 {
-  QString expr = m_doc_selected_action->data ().toString ();
-  m_octave_qobj.show_documentation_window (expr);
+  std::string expr = m_doc_selected_action->data ().toString ().toStdString ();
+
+  emit interpreter_event
+    ([=] (octave::interpreter& interp)
+     {
+       // INTERPRETER THREAD
+
+       octave::F__event_manager_show_documentation__ (interp, ovl (expr));
+     });
 }
 
 void
--- a/libgui/qterminal/libqterminal/QTerminal.h	Mon Dec 26 17:29:59 2022 -0500
+++ b/libgui/qterminal/libqterminal/QTerminal.h	Fri Dec 30 23:13:00 2022 -0500
@@ -24,12 +24,16 @@
 #ifndef QTERMINAL_H
 #define QTERMINAL_H
 
+#include "octave-config.h"
+
 #include <QColor>
 #include <QList>
 #include <QPoint>
 #include <QString>
 #include <QWidget>
 
+#include "qt-interpreter-events.h"
+
 namespace octave
 {
   class base_qobject;
@@ -109,6 +113,9 @@
 
   void clear_command_window_request (void);
 
+  void interpreter_event (const octave::fcn_callback& fcn);
+  void interpreter_event (const octave::meth_callback& meth);
+
 public slots:
 
   virtual void copyClipboard (void) = 0;
--- a/libgui/src/command-widget.cc	Mon Dec 26 17:29:59 2022 -0500
+++ b/libgui/src/command-widget.cc	Fri Dec 30 23:13:00 2022 -0500
@@ -87,6 +87,12 @@
     connect (this, &command_widget::new_command_line_signal,
              m_console, &console::new_command_line);
 
+    connect (m_console, QOverload<const fcn_callback&>::of (&console::interpreter_event),
+             this, QOverload<const fcn_callback&>::of (&command_widget::interpreter_event));
+
+    connect (m_console, QOverload<const meth_callback&>::of (&console::interpreter_event),
+             this, QOverload<const meth_callback&>::of (&command_widget::interpreter_event));
+
     insert_interpreter_output ("\n\n    Welcome to Octave\n\n");
 
   }
--- a/libgui/src/command-widget.h	Mon Dec 26 17:29:59 2022 -0500
+++ b/libgui/src/command-widget.h	Fri Dec 30 23:13:00 2022 -0500
@@ -51,6 +51,11 @@
 
     console (command_widget *p, base_qobject& oct_qobj);
 
+  signals:
+
+    void interpreter_event (const fcn_callback& fcn);
+    void interpreter_event (const meth_callback& meth);
+
   public slots:
 
     void cursor_position_changed (int line, int col);
@@ -103,11 +108,11 @@
     void interpreter_resume (void);
     void interpreter_stop (void);
 
+    void new_command_line_signal (const QString& command = QString ());
+
     void interpreter_event (const fcn_callback& fcn);
     void interpreter_event (const meth_callback& meth);
 
-    void new_command_line_signal (const QString& command = QString ());
-
   public slots:
 
     void process_input_line (const QString& input_line);
--- a/libgui/src/m-editor/octave-qscintilla.cc	Mon Dec 26 17:29:59 2022 -0500
+++ b/libgui/src/m-editor/octave-qscintilla.cc	Fri Dec 30 23:13:00 2022 -0500
@@ -336,7 +336,17 @@
   void octave_qscintilla::contextmenu_help_doc (bool documentation)
   {
     if (documentation)
-      m_octave_qobj.show_documentation_window (m_word_at_cursor);
+      {
+        std::string name = m_word_at_cursor.toStdString ();
+
+        emit interpreter_event
+          ([=] (interpreter& interp)
+           {
+             // INTERPRETER THREAD
+
+             F__event_manager_show_documentation__ (interp, ovl (name));
+           });
+      }
     else
       emit execute_command_in_terminal_signal ("help " + m_word_at_cursor);
   }
--- a/libgui/src/octave-qobject.cc	Mon Dec 26 17:29:59 2022 -0500
+++ b/libgui/src/octave-qobject.cc	Fri Dec 30 23:13:00 2022 -0500
@@ -489,6 +489,8 @@
             // Connect the interrupt signal (emitted by Ctrl-C)
             connect (cmd_widget, &QTerminal::interrupt_signal,
                      this, &base_qobject::interpreter_interrupt);
+
+            connect_interpreter_events (cmd_widget);
           }
       }
 
--- a/libgui/src/terminal-dock-widget.cc	Mon Dec 26 17:29:59 2022 -0500
+++ b/libgui/src/terminal-dock-widget.cc	Fri Dec 30 23:13:00 2022 -0500
@@ -92,6 +92,12 @@
         connect (this, &terminal_dock_widget::visibilityChanged,
                  widget, &QTerminal::handle_visibility_changed);
 
+        connect (widget, QOverload<const fcn_callback&>::of (&QTerminal::interpreter_event),
+                 this, QOverload<const fcn_callback&>::of (&terminal_dock_widget::interpreter_event));
+
+        connect (widget, QOverload<const meth_callback&>::of (&QTerminal::interpreter_event),
+                 this, QOverload<const meth_callback&>::of (&terminal_dock_widget::interpreter_event));
+
         m_terminal = widget;
       }
 
--- a/libgui/src/terminal-dock-widget.h	Mon Dec 26 17:29:59 2022 -0500
+++ b/libgui/src/terminal-dock-widget.h	Fri Dec 30 23:13:00 2022 -0500
@@ -80,6 +80,9 @@
 
     void execute_command_signal (const QString&);
 
+    void interpreter_event (const fcn_callback& fcn);
+    void interpreter_event (const meth_callback& meth);
+
   public slots:
 
     void notice_settings (void);