GNU Octave  4.4.1
A high-level interpreted language, primarily intended for numerical computations, mostly compatible with Matlab
QTerminal.h
Go to the documentation of this file.
1 /*
2 
3 Copyright (C) 2012-2018 Michael Goffioul.
4 Copyright (C) 2012-2018 Jacob Dawid.
5 
6 This file is part of QTerminal.
7 
8 This program is free software: you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation, either version 3 of the License, or
11 (at your option) any later version.
12 
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17 
18 You should have received a copy of the GNU General Public License
19 along with this program. If not,
20 see <https://www.gnu.org/licenses/>.
21 
22 */
23 
24 #ifndef QTERMINAL_H
25 #define QTERMINAL_H
26 
27 #include <QSettings>
28 #include <QKeySequence>
29 #include <QWidget>
30 #include <QStringList>
31 #include <QColor>
32 #include <QList>
33 #include <QMenu>
34 #include <QClipboard>
35 #include <QApplication>
36 #include <QAction>
37 
38 #include "resource-manager.h"
39 
40 class QTerminal : public QWidget
41 {
42  Q_OBJECT
43 
44 public:
45 
46  static QTerminal *create (QWidget *xparent = nullptr);
47 
48  static QList<QColor> default_colors (void);
49 
50  static QStringList color_names (void);
51 
52  virtual ~QTerminal (void) = default;
53 
54  virtual void setTerminalFont (const QFont& font) = 0;
55 
56  virtual void setSize (int h, int v) = 0;
57 
58  virtual void sendText (const QString& text) = 0;
59 
60  virtual QString selectedText () = 0;
61 
62  virtual void has_extra_interrupt (bool extra) = 0;
63 
64  virtual QList<QAction*> get_hotspot_actions (const QPoint&)
65  { return QList<QAction*> (); }
66 
68  {
72  };
73 
74  virtual void setCursorType (CursorType type, bool blinking)
75  {
76  // Provide empty default impl in order to avoid conflicts with the
77  // win impl.
78 
79  Q_UNUSED (type);
80  Q_UNUSED (blinking);
81  }
82 
83  virtual void setBackgroundColor (const QColor& color) = 0;
84 
85  virtual void setForegroundColor (const QColor& color) = 0;
86 
87  virtual void setSelectionColor (const QColor& color) = 0;
88 
89  virtual void setCursorColor (bool useForegroundColor,
90  const QColor& color) = 0;
91 
92  virtual void setScrollBufferSize(int value=1000) = 0;
93 
94 signals:
95 
96  void report_status_message (const QString&);
97 
98  void interrupt_signal (void);
99 
100  void edit_mfile_request (const QString&, int);
101 
102 public slots:
103 
104  virtual void copyClipboard (void) = 0;
105 
106  virtual void pasteClipboard (void) = 0;
107 
108  virtual void selectAll (void) = 0;
109 
110  virtual void handleCustomContextMenuRequested (const QPoint& at);
111 
112  void notice_settings (const QSettings *settings);
113 
114  virtual void init_terminal_size (void) { }
115 
116  void terminal_interrupt (void) { emit interrupt_signal (); }
117 
118  void set_global_shortcuts (bool focus_out);
119 
120  void edit_file (void);
121 
122  virtual void handle_visibility_changed (bool) { };
123 
124 protected:
125 
126  QTerminal (QWidget *xparent = nullptr) : QWidget (xparent)
127  {
128  // context menu
129  setContextMenuPolicy (Qt::CustomContextMenu);
130 
131  _contextMenu = new QMenu (this);
132 
133  _copy_action = _contextMenu->addAction (
134  resource_manager::icon ("edit-copy"),
135  tr ("Copy"), this, SLOT (copyClipboard ()));
136 
137  _paste_action = _contextMenu->addAction (
138  resource_manager::icon ("edit-paste"),
139  tr ("Paste"), this, SLOT (pasteClipboard ()));
140 
141  _contextMenu->addSeparator ();
142 
143  _selectall_action = _contextMenu->addAction (
144  tr ("Select All"), this, SLOT (selectAll ()));
145 
146  _edit_action = _contextMenu->addAction (
147  tr (""), this, SLOT (edit_file ()));
148 
149  _contextMenu->addSeparator ();
150 
151  _contextMenu->addAction (tr ("Clear Window"), parent (),
152  SLOT (handle_clear_command_window_request ()));
153 
154  connect (this, SIGNAL (customContextMenuRequested (QPoint)),
155  this, SLOT (handleCustomContextMenuRequested (QPoint)));
156 
157  connect (this, SIGNAL (report_status_message (const QString&)),
158  xparent, SLOT (report_status_message (const QString&)));
159 
160  connect (this, SIGNAL (edit_mfile_request (const QString&, int)),
161  xparent, SLOT (edit_mfile (const QString&, int)));
162 
163  connect (xparent, SIGNAL (settings_changed (const QSettings *)),
164  this, SLOT (notice_settings (const QSettings *)));
165 
166  connect (xparent, SIGNAL (init_terminal_size_signal ()),
167  this, SLOT (init_terminal_size ()));
168 
169  connect (xparent, SIGNAL (copyClipboard_signal ()),
170  this, SLOT (copyClipboard ()));
171 
172  connect (xparent, SIGNAL (pasteClipboard_signal ()),
173  this, SLOT (pasteClipboard ()));
174 
175  connect (xparent, SIGNAL (selectAll_signal ()),
176  this, SLOT (selectAll ()));
177 
178  // extra interrupt action
179  _interrupt_action = new QAction (this);
180  addAction (_interrupt_action);
181 
182  _interrupt_action->setShortcut (
183  QKeySequence (Qt::ControlModifier + Qt::Key_C));
184 
185  connect (_interrupt_action, SIGNAL (triggered ()),
186  this, SLOT (terminal_interrupt ()));
187 
188  // dummy (nop) action catching Ctrl-D in terminal, no connection
189  _nop_action = new QAction (this);
190  addAction (_nop_action);
191 
192  _nop_action->setShortcut (
193  QKeySequence (Qt::ControlModifier + Qt::Key_D));
194  }
195 
196 private:
197 
199  QAction * _copy_action;
200  QAction * _paste_action;
201  QAction * _selectall_action;
202  QAction * _edit_action;
203 
205  QAction *_nop_action;
206 };
207 
208 #endif // QTERMINAL_H
void edit_mfile_request(const QString &, int)
virtual void sendText(const QString &text)=0
void edit_file(void)
Definition: QTerminal.cc:147
virtual void setScrollBufferSize(int value=1000)=0
virtual void init_terminal_size(void)
Definition: QTerminal.h:114
void interrupt_signal(void)
virtual ~QTerminal(void)=default
QAction * _selectall_action
Definition: QTerminal.h:201
virtual void setForegroundColor(const QColor &color)=0
void terminal_interrupt(void)
Definition: QTerminal.h:116
static QTerminal * create(QWidget *xparent=nullptr)
Definition: QTerminal.cc:33
QTerminal(QWidget *xparent=nullptr)
Definition: QTerminal.h:126
virtual void pasteClipboard(void)=0
QAction * _interrupt_action
Definition: QTerminal.h:204
QAction * _nop_action
Definition: QTerminal.h:205
virtual void setSelectionColor(const QColor &color)=0
virtual void selectAll(void)=0
virtual void has_extra_interrupt(bool extra)=0
virtual void copyClipboard(void)=0
QMenu * _contextMenu
Definition: QTerminal.h:198
virtual void handle_visibility_changed(bool)
Definition: QTerminal.h:122
double h
Definition: graphics.cc:11808
QAction * _edit_action
Definition: QTerminal.h:202
virtual QString selectedText()=0
void report_status_message(const QString &)
void set_global_shortcuts(bool focus_out)
Definition: QTerminal.cc:76
QAction * _copy_action
Definition: QTerminal.h:199
virtual void setSize(int h, int v)=0
QAction * _paste_action
Definition: QTerminal.h:200
virtual QList< QAction * > get_hotspot_actions(const QPoint &)
Definition: QTerminal.h:64
virtual void setCursorColor(bool useForegroundColor, const QColor &color)=0
OCTAVE_EXPORT octave_value_list at
Definition: time.cc:115
void notice_settings(const QSettings *settings)
Definition: QTerminal.cc:156
idx type
Definition: ov.cc:3114
static QStringList color_names(void)
Definition: QTerminal.cc:59
virtual void setTerminalFont(const QFont &font)=0
static QList< QColor > default_colors(void)
Definition: QTerminal.cc:43
virtual void setBackgroundColor(const QColor &color)=0
virtual void setCursorType(CursorType type, bool blinking)
Definition: QTerminal.h:74
nd group nd example For each display the value
Definition: sysdep.cc:866
virtual void handleCustomContextMenuRequested(const QPoint &at)
Definition: QTerminal.cc:94