changeset 29525:d6b2d9f9e1e0

use terminal settings for the experimental command widget * QTerminal.cc (construct): do not connect settings signal here * command-widget.cc: include gui-preferences-cs.h, gui-preferences-global.h, and gui-utils.h; (command_widget): initialize class variable for input color, move input widget to the bottom, line edit gets focus proxy; (accept_input_line): style input and output text, (notice_settings): new function for reading terminal font and colors from the settings file * command-widget.h: include gui-settings.h, new slot notice:settings, new class variable for the input color * terminal-dock-widget.cc (terminal_dock_widget): connect main windows settings signal with the related slot in QTerminal or command_widget
author Torsten Lilge <ttl-octave@mailbox.org>
date Mon, 12 Apr 2021 23:03:11 +0200
parents 730cac3d6d5a
children b65824235c7f
files libgui/qterminal/libqterminal/QTerminal.cc libgui/src/command-widget.cc libgui/src/command-widget.h libgui/src/terminal-dock-widget.cc
diffstat 4 files changed, 55 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/libgui/qterminal/libqterminal/QTerminal.cc	Sun Apr 11 19:22:31 2021 +0200
+++ b/libgui/qterminal/libqterminal/QTerminal.cc	Mon Apr 12 23:03:11 2021 +0200
@@ -335,9 +335,6 @@
   connect (this, SIGNAL (execute_command_in_terminal_signal (const QString&)),
            xparent, SLOT (execute_command_in_terminal (const QString&)));
 
-  connect (xparent, SIGNAL (settings_changed (const gui_settings *)),
-           this, SLOT (notice_settings (const gui_settings *)));
-
   connect (xparent, SIGNAL (init_terminal_size_signal ()),
            this, SLOT (init_terminal_size ()));
 
--- a/libgui/src/command-widget.cc	Sun Apr 11 19:22:31 2021 +0200
+++ b/libgui/src/command-widget.cc	Mon Apr 12 23:03:11 2021 +0200
@@ -39,6 +39,9 @@
 
 #include "cmd-edit.h"
 #include "event-manager.h"
+#include "gui-preferences-cs.h"
+#include "gui-preferences-global.h"
+#include "gui-utils.h"
 #include "input.h"
 #include "interpreter.h"
 
@@ -51,7 +54,8 @@
     : QWidget (p), m_incomplete_parse (false),
       m_prompt (new QLabel ("", this)),
       m_line_edit (new QLineEdit (this)),
-      m_output_display (new QTextBrowser (this))
+      m_output_display (new QTextBrowser (this)),
+      m_input_color (QColor ())
   {
     QPushButton *pause_button = new QPushButton (tr("Pause"), this);
     QPushButton *stop_button = new QPushButton (tr("Stop"), this);
@@ -72,11 +76,13 @@
     output_group_box->setLayout (output_layout);
 
     QVBoxLayout *main_layout = new QVBoxLayout ();
+    main_layout->addWidget (output_group_box);
     main_layout->addWidget (input_group_box);
-    main_layout->addWidget (output_group_box);
 
     setLayout (main_layout);
 
+    setFocusProxy (m_line_edit);
+
     connect (m_line_edit, SIGNAL (returnPressed (void)),
              this, SLOT (accept_input_line (void)));
 
@@ -114,12 +120,16 @@
 
     QString input_line = m_line_edit->text ();
 
+    QString style;
     if (! m_incomplete_parse)
-      cursor.insertHtml ("<b>[in]:</b> ");
-    cursor.insertText (input_line);
-    cursor.insertHtml ("<br>");
-
-    m_output_display->setTextCursor (cursor);
+      {
+        style = QString ("<div style=\"color:%1; font-weight:bold;\">[in]:</div> ")
+                .arg (m_input_color.name ());
+        m_output_display->insertHtml (style);
+      }
+    style = QString ("<div style=\"color:%1\">%2</div><br>\n")
+            .arg (m_input_color.name ()).arg (input_line);
+    m_output_display->insertHtml (style);
 
     emit interpreter_event
       ([=] (interpreter& interp)
@@ -140,4 +150,32 @@
 
     emit clear_line_edit ();
   }
+
+  void command_widget::notice_settings (const gui_settings *settings)
+  {
+    // Set terminal font:
+    QFont term_font = QFont ();
+    term_font.setStyleHint (QFont::TypeWriter);
+    QString default_font = settings->value (global_mono_font).toString ();
+    term_font.setFamily
+      (settings->value (cs_font.key, default_font).toString ());
+    term_font.setPointSize
+      (settings->value (cs_font_size).toInt ());
+
+    m_line_edit->setFont (term_font);
+    m_output_display->setFont (term_font);
+
+    // Colors
+    int mode = settings->value (cs_color_mode).toInt ();
+    QColor fgc = settings->color_value (cs_colors[0], mode);
+    QColor bgc = settings->color_value (cs_colors[1], mode);
+
+    m_output_display->setStyleSheet (QString ("color: %1; background-color:%2;")
+                                     .arg (fgc.name ()).arg (bgc.name ()));
+    m_line_edit->setStyleSheet (QString ("color: %1; background-color:%2;")
+                                .arg (fgc.name ()).arg (bgc.name ()));
+
+    m_input_color = interpolate_color (fgc, bgc, 0.75, 0.5);
+  }
+
 }
--- a/libgui/src/command-widget.h	Sun Apr 11 19:22:31 2021 +0200
+++ b/libgui/src/command-widget.h	Mon Apr 12 23:03:11 2021 +0200
@@ -29,6 +29,7 @@
 #include <QWidget>
 
 #include "octave-qobject.h"
+#include "gui-settings.h"
 
 class QLabel;
 class QLineEdit;
@@ -54,6 +55,10 @@
     void interpreter_event (const fcn_callback& fcn);
     void interpreter_event (const meth_callback& meth);
 
+  public slots:
+
+    void notice_settings (const gui_settings *settings);
+
   protected slots:
 
     void accept_input_line (void);
@@ -66,6 +71,7 @@
     QLabel *m_prompt;
     QLineEdit *m_line_edit;
     QTextBrowser *m_output_display;
+    QColor m_input_color;
   };
 }
 
--- a/libgui/src/terminal-dock-widget.cc	Sun Apr 11 19:22:31 2021 +0200
+++ b/libgui/src/terminal-dock-widget.cc	Mon Apr 12 23:03:11 2021 +0200
@@ -64,6 +64,9 @@
     setWidget (m_terminal);
     setFocusProxy (m_terminal);
 
+    connect (p, SIGNAL (settings_changed (const gui_settings *)),
+             m_terminal, SLOT (notice_settings (const gui_settings *)));
+
     if (m_experimental_terminal_widget)
       {
         // Any interpreter_event signal from the terminal widget is
@@ -131,4 +134,5 @@
     if (m_experimental_terminal_widget)
       emit update_prompt_signal (prompt);
   }
+
 }