GNU Octave  6.2.0
A high-level interpreted language, primarily intended for numerical computations, mostly compatible with Matlab
TerminalView.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2007 by Robert Knight <robertknight@gmail.com>
3  Copyright (C) 1997,1998 by Lars Doelle <lars.doelle@on-line.de>
4 
5  Rewritten for QT4 by e_k <e_k at users.sourceforge.net>, Copyright (C)2008
6  Copyright (C) 2012-2019 Jacob Dawid <jacob.dawid@cybercatalyst.com>
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 2 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, write to the Free Software
20  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
21  02110-1301 USA.
22 */
23 
24 #ifndef TERMINALVIEW_H
25 #define TERMINALVIEW_H
26 
27 // Qt
28 #include <QColor>
29 #include <QtCore/QPointer>
30 #include <QWidget>
31 
32 // Konsole
33 #include "unix/Filter.h"
34 #include "unix/Character.h"
35 
36 class QDrag;
37 class QDragEnterEvent;
38 class QDropEvent;
39 class QLabel;
40 class QTimer;
41 class QEvent;
42 class QFrame;
43 class QGridLayout;
44 class QKeyEvent;
45 class QScrollBar;
46 class QShowEvent;
47 class QHideEvent;
48 class QWidget;
49 
50 extern unsigned short vt100_graphics[32];
51 
52 class ScreenWindow;
53 
54 /**
55  * A widget which displays output from a terminal emulation and sends input keypresses and mouse activity
56  * to the terminal.
57  *
58  * When the terminal emulation receives new output from the program running in the terminal,
59  * it will update the display by calling updateImage().
60  *
61  * TODO More documentation
62  */
63 class TerminalView : public QWidget
64 {
65  Q_OBJECT
66 
67 public:
68  /** Constructs a new terminal display widget with the specified parent. */
69  TerminalView(QWidget *parent = nullptr);
70  virtual ~TerminalView();
71 
72  /** Returns the terminal color palette used by the display. */
73  const ColorEntry* colorTable() const;
74  /** Sets the terminal color palette used by the display. */
75  void setColorTable(const ColorEntry table[]);
76  /**
77  * Sets the seed used to generate random colors for the display
78  * (in color schemes that support them).
79  */
80  void setRandomSeed(uint seed);
81  /**
82  * Returns the seed used to generate random colors for the display
83  * (in color schemes that support them).
84  */
85  uint randomSeed() const;
86 
87 
88  /**
89  * This enum describes the location where the scroll bar is positioned in the display widget.
90  */
92  {
93  /** Do not show the scroll bar. */
95  /** Show the scroll bar on the left side of the display. */
97  /** Show the scroll bar on the right side of the display. */
99  };
100  /**
101  * Specifies whether the terminal display has a vertical scroll bar, and if so whether it
102  * is shown on the left or right side of the display.
103  */
105 
106  /**
107  * Sets the current position and range of the display's scroll bar.
108  *
109  * @param cursor The position of the scroll bar's thumb.
110  * @param lines The maximum value of the scroll bar.
111  */
112  void setScroll(int cursor, int lines);
113 
114  /**
115  * Returns the display's filter chain. When the image for the display is updated,
116  * the text is passed through each filter in the chain. Each filter can define
117  * hotspots which correspond to certain strings (such as URLs or particular words).
118  * Depending on the type of the hotspots created by the filter ( returned by Filter::Hotspot::type() )
119  * the view will draw visual cues such as underlines on mouse-over for links or translucent
120  * rectangles for markers.
121  *
122  * To add a new filter to the view, call:
123  * viewWidget->filterChain()->addFilter( filterObject );
124  */
125  FilterChain* filterChain() const;
126 
127  /**
128  * Returns a list of menu actions created by the filters for the content
129  * at the given @p position.
130  */
131  QList<QAction*> filterActions(const QPoint& position);
132 
133  /** Returns true if the cursor is set to blink or false otherwise. */
135  /** Specifies whether or not the cursor blinks. */
136  void setBlinkingCursor(bool blink);
137  void setBlinkingCursorState(bool blink);
138 
139  void setCtrlDrag(bool enable) { _ctrlDrag=enable; }
140  bool ctrlDrag() { return _ctrlDrag; }
141 
142  /**
143  * This enum describes the methods for selecting text when
144  * the user triple-clicks within the display.
145  */
147  {
148  /** Select the whole line underneath the cursor. */
150  /** Select from the current cursor position to the end of the line. */
152  };
153  /** Sets how the text is selected when the user triple clicks within the display. */
155  /** See setTripleClickSelectionMode() */
157 
158  void setLineSpacing(uint);
159  uint lineSpacing() const;
160 
161  void emitSelection(bool useXselection,bool appendReturn);
162 
163  /** change and wrap text corresponding to paste mode **/
164  void bracketText(QString& text);
165 
166  /**
167  * This enum describes the available shapes for the keyboard cursor.
168  * See setKeyboardCursorShape()
169  */
171  {
172  /** A rectangular block which covers the entire area of the cursor character. */
174  /**
175  * A single flat line which occupies the space at the bottom of the cursor
176  * character's area.
177  */
179  /**
180  * An cursor shaped like the capital letter 'I', similar to the IBeam
181  * cursor used in Qt/KDE text editors.
182  */
184  };
185  /**
186  * Sets the shape of the keyboard cursor. This is the cursor drawn
187  * at the position in the terminal where keyboard input will appear.
188  *
189  * In addition the terminal display widget also has a cursor for
190  * the mouse pointer, which can be set using the QWidget::setCursor()
191  * method.
192  *
193  * Defaults to BlockCursor
194  */
196  /**
197  * Returns the shape of the keyboard cursor. See setKeyboardCursorShape()
198  */
200 
201  /**
202  * Sets the color used to draw the keyboard cursor.
203  *
204  * The keyboard cursor defaults to using the foreground color of the character
205  * underneath it.
206  *
207  * @param useForegroundColor If true, the cursor color will change to match
208  * the foreground color of the character underneath it as it is moved, in this
209  * case, the @p color parameter is ignored and the color of the character
210  * under the cursor is inverted to ensure that it is still readable.
211  * @param color The color to use to draw the cursor. This is only taken into
212  * account if @p useForegroundColor is false.
213  */
214  void setKeyboardCursorColor(bool useForegroundColor , const QColor& color);
215 
216  /**
217  * Returns the color of the keyboard cursor, or an invalid color if the keyboard
218  * cursor color is set to change according to the foreground color of the character
219  * underneath it.
220  */
221  QColor keyboardCursorColor() const;
222 
223  /**
224  * Returns the number of lines of text which can be displayed in the widget.
225  *
226  * This will depend upon the height of the widget and the current font.
227  * See fontHeight()
228  */
229  int lines() { return _lines; }
230  /**
231  * Returns the number of characters of text which can be displayed on
232  * each line in the widget.
233  *
234  * This will depend upon the width of the widget and the current font.
235  * See fontWidth()
236  */
237  int columns() { return _columns; }
238 
239  /**
240  * Returns the height of the characters in the font used to draw the text in the display.
241  */
242  int fontHeight() { return _fontHeight; }
243  /**
244  * Returns the width of the characters in the display.
245  * This assumes the use of a fixed-width font.
246  */
247  int fontWidth() { return _fontWidth; }
248 
249  void setSize(int cols, int lins);
250  void setFixedSize(int cols, int lins);
251 
252  // reimplemented
253  QSize sizeHint() const;
254 
255  /**
256  * Sets which characters, in addition to letters and numbers,
257  * are regarded as being part of a word for the purposes
258  * of selecting words in the display by double clicking on them.
259  *
260  * The word boundaries occur at the first and last characters which
261  * are either a letter, number, or a character in @p wc
262  *
263  * @param wc An array of characters which are to be considered parts
264  * of a word ( in addition to letters and numbers ).
265  */
266  void setWordCharacters(const QString& wc);
267  /**
268  * Returns the characters which are considered part of a word for the
269  * purpose of selecting words in the display with the mouse.
270  *
271  * @see setWordCharacters()
272  */
273  QString wordCharacters() { return _wordCharacters; }
274 
275  /**
276  * Sets the type of effect used to alert the user when a 'bell' occurs in the
277  * terminal session.
278  *
279  * The terminal session can trigger the bell effect by calling bell() with
280  * the alert message.
281  */
282  void setBellMode(int mode);
283  /**
284  * Returns the type of effect used to alert the user when a 'bell' occurs in
285  * the terminal session.
286  *
287  * See setBellMode()
288  */
289  int bellMode() { return _bellMode; }
290 
291  /**
292  * This enum describes the different types of sounds and visual effects which
293  * can be used to alert the user when a 'bell' occurs in the terminal
294  * session.
295  */
296  enum BellMode
297  {
298  /** A system beep. */
300  /**
301  * KDE notification. This may play a sound, show a passive popup
302  * or perform some other action depending on the user's settings.
303  */
305  /** A silent, visual bell (eg. inverting the display's colors briefly) */
307  /** No bell effects */
308  NoBell=3
309  };
310 
311  void setSelection(const QString &t);
312 
313  QString selectedText ();
314 
315  /**
316  * Reimplemented. Has no effect. Use setVTFont() to change the font
317  * used to draw characters in the display.
318  */
319  virtual void setFont(const QFont &);
320 
321 
322  /** Returns the font used to draw characters in the display */
323  QFont getVTFont() { return font(); }
324 
325  /**
326  * Sets the font used to draw the display. Has no effect if @p font
327  * is larger than the size of the display itself.
328  */
329  void setVTFont(const QFont& font);
330 
331 
332  /**
333  * Specified whether terminal widget should be at read-only mode
334  * Defaults to false.
335  */
336  void setReadOnly( bool readonly) { _readonly = readonly; }
337 
338  /**
339  * Specified whether anti-aliasing of text in the terminal display
340  * is enabled or not. Defaults to enabled.
341  */
342  static void setAntialias( bool antialias ) { _antialiasText = antialias; }
343  /**
344  * Returns true if anti-aliasing of text in the terminal is enabled.
345  */
346  static bool antialias() { return _antialiasText; }
347 
348  /**
349  * Sets whether or not the current height and width of the
350  * terminal in lines and columns is displayed whilst the widget
351  * is being resized.
352  */
354  /**
355  * Returns whether or not the current height and width of
356  * the terminal in lines and columns is displayed whilst the widget
357  * is being resized.
358  */
360  /**
361  * Sets whether the terminal size display is shown briefly
362  * after the widget is first shown.
363  *
364  * See setTerminalSizeHint() , isTerminalSizeHint()
365  */
367 
368  /**
369  * Sets the terminal screen section which is displayed in this widget.
370  * When updateImage() is called, the display fetches the latest character image from the
371  * the associated terminal screen window.
372  *
373  * In terms of the model-view paradigm, the ScreenWindow is the model which is rendered
374  * by the TerminalDisplay.
375  */
376  void setScreenWindow( ScreenWindow* window );
377  /** Returns the terminal screen section which is displayed in this widget. See setScreenWindow() */
378  ScreenWindow* screenWindow() const;
379 
380  /** Is called, when the terminal's visibility has changed in order to
381  * stop orstart timers etc.
382  */
383  void visibility_changed (bool visible);
384 
385  void disableBracketedPasteMode(bool disable) { _disabledBracketedPasteMode = disable; }
387 
388 public slots:
389 
390  /**
391  * Updates the filters in the display's filter chain. This will cause
392  * the hotspots to be updated to match the current image.
393  *
394  * WARNING: This function can be expensive depending on the
395  * image size and number of filters in the filterChain()
396  *
397  * TODO - This API does not really allow efficient usage. Revise it so
398  * that the processing can be done in a better way.
399  *
400  * eg:
401  * - Area of interest may be known ( eg. mouse cursor hovering
402  * over an area )
403  */
404  void processFilters();
405 
406  /**
407  * Causes the terminal display to fetch the latest character image from the associated
408  * terminal screen ( see setScreenWindow() ) and redraw the display.
409  */
410  void updateImage();
411  /**
412  * Causes the terminal display to fetch the latest line status flags from the
413  * associated terminal screen ( see setScreenWindow() ).
414  */
415  void updateLineProperties();
416 
417  /** Copies the selected text to the clipboard. */
418  void copyClipboard (bool extra_interrupt);
419  /**
420  * Pastes the content of the clipboard into the
421  * display.
422  */
423  void pasteClipboard();
424  /**
425  * Pastes the content of the selection into the
426  * display.
427  */
428  void pasteSelection();
429 
430  /**
431  * selects all content
432  */
433  void selectAll();
434 
435  /**
436  * Causes the widget to display or hide a message informing the user that terminal
437  * output has been suspended (by using the flow control key combination Ctrl+S)
438  *
439  * @param suspended True if terminal output has been suspended and the warning message should
440  * be shown or false to indicate that terminal output has been resumed and that
441  * the warning message should disappear.
442  */
443  void outputSuspended(bool suspended);
444 
445  /**
446  * Sets whether the program whoose output is being displayed in the view
447  * is interested in mouse events.
448  *
449  * If this is set to true, mouse signals will be emitted by the view when the user clicks, drags
450  * or otherwise moves the mouse inside the view.
451  * The user interaction needed to create selections will also change, and the user will be required
452  * to hold down the shift key to create a selection or perform other mouse activities inside the
453  * view area - since the program running in the terminal is being allowed to handle normal mouse
454  * events itself.
455  *
456  * @param usesMouse Set to true if the program running in the terminal is interested in mouse events
457  * or false otherwise.
458  */
459  void setUsesMouse(bool usesMouse);
460 
461  /** See setUsesMouse() */
462  bool usesMouse() const;
463 
465  bool bracketedPasteMode() const;
466 
467 signals:
468 
469  void interrupt_signal (void);
470 
471  /**
472  * Emitted when the user presses a key whilst the terminal widget has focus.
473  */
474  void keyPressedSignal(QKeyEvent *e);
475 
476  /**
477  * A mouse event occurred.
478  * @param button The mouse button (0 for left button, 1 for middle button, 2 for right button, 3 for release)
479  * @param column The character column where the event occurred
480  * @param line The character row where the event occurred
481  * @param eventType The type of event. 0 for a mouse press / release or 1 for mouse motion
482  */
483  void mouseSignal(int button, int column, int line, int eventType);
484  void changedFontMetricSignal(int height, int width);
485  void changedContentSizeSignal(int height, int width);
486 
487  /**
488  * Emitted when the user right clicks on the display, or right-clicks with the Shift
489  * key held down if usesMouse() is true.
490  *
491  * This can be used to display a context menu.
492  */
493  void configureRequest( TerminalView*, int state, const QPoint& position );
494 
495  void isBusySelecting(bool);
496  void sendStringToEmu(const char*);
497 
498  void tripleClicked( const QString& text );
499 
500  /**
501  * Emitted when focus changes
502  */
504 
505 
506 protected:
507  virtual void paintEvent( QPaintEvent * );
508 
509  void focusInEvent(QFocusEvent *focusEvent);
510  void focusOutEvent(QFocusEvent *focusEvent);
511 
512  virtual void showEvent(QShowEvent*);
513  virtual void hideEvent(QHideEvent*);
514  virtual void resizeEvent(QResizeEvent*);
515 
516  virtual void fontChange(const QFont &font);
517 
518  virtual void keyPressEvent(QKeyEvent* event);
519  virtual void mouseDoubleClickEvent(QMouseEvent* ev);
520  virtual void mousePressEvent( QMouseEvent* );
521  virtual void mouseReleaseEvent( QMouseEvent* );
522  virtual void mouseMoveEvent( QMouseEvent* );
523  virtual void extendSelection( const QPoint& pos );
524  virtual void wheelEvent( QWheelEvent* );
525 
526  virtual bool focusNextPrevChild( bool next );
527 
528  // drag and drop
529  virtual void dragEnterEvent(QDragEnterEvent* event);
530  virtual void dropEvent(QDropEvent* event);
531  void doDrag();
533 
534  struct _dragInfo {
536  QPoint start;
537  QDrag *dragObject;
539 
540  virtual int charClass(quint16) const;
541 
542  void clearImage();
543 
544  void mouseTripleClickEvent(QMouseEvent* ev);
545 
546  // reimplemented
547  virtual void inputMethodEvent ( QInputMethodEvent* event );
548  virtual QVariant inputMethodQuery( Qt::InputMethodQuery query ) const;
549 
550 protected slots:
551 
552  void scrollBarPositionChanged(int value);
553  void blinkEvent();
554  void blinkCursorEvent();
555 
556  //Renables bell noises and visuals. Used to disable further bells for a short period of time
557  //after emitting the first in a sequence of bell events.
558  void enableBell();
559 
560 private slots:
561 
562  void swapColorTable();
563  void tripleClickTimeout(); // resets possibleTripleClick
564 
565 private:
566 
567  // -- Drawing helpers --
568 
569  // divides the part of the display specified by 'rect' into
570  // fragments according to their colors and styles and calls
571  // drawTextFragment() to draw the fragments
572  void drawContents(QPainter &paint, const QRect &rect);
573  // draws a section of text, all the text in this section
574  // has a common color and style
575  void drawTextFragment(QPainter& painter, const QRect& rect,
576  const QString& text, const Character* style);
577  // draws the background for a text fragment
578  // if useOpacitySetting is true then the color's alpha value will be set to
579  // the display's transparency (set with setOpacity()), otherwise the background
580  // will be drawn fully opaque
581  void drawBackground(QPainter& painter, const QRect& rect, const QColor& color);
582  // draws the cursor character
583  void drawCursor(QPainter& painter, const QRect& rect , const QColor& foregroundColor,
584  const QColor& backgroundColor , bool& invertColors);
585  // draws the characters or line graphics in a text fragment
586  void drawCharacters(QPainter& painter, const QRect& rect, const QString& text,
587  const Character* style, bool invertCharacterColor);
588 
589  // draws the preedit string for input methods
590  void drawInputMethodPreeditString(QPainter& painter , const QRect& rect);
591 
592  // --
593 
594  // maps an area in the character image to an area on the widget
595  QRect imageToWidget(const QRect& imageArea) const;
596 
597  // maps a point on the widget to the position ( ie. line and column )
598  // of the character at that point.
599  void getCharacterPosition(const QPoint& widgetPoint,int& line,int& column) const;
600 
601  // the area where the preedit string for input methods will be draw
602  QRect preeditRect() const;
603 
604  // shows a notification window in the middle of the widget indicating the terminal's
605  // current size in columns and lines
606  void showResizeNotification();
607 
608  // scrolls the image by a number of lines.
609  // 'lines' may be positive ( to scroll the image down )
610  // or negative ( to scroll the image up )
611  // 'region' is the part of the image to scroll - currently only
612  // the top, bottom and height of 'region' are taken into account,
613  // the left and right are ignored.
614  void scrollImage(int lines , const QRect& region);
615 
616  void calcGeometry();
617  void propagateSize();
618  void updateImageSize();
619  void makeImage();
620 
621  void paintFilters(QPainter& painter);
622 
623  // returns a region covering all of the areas of the widget which contain
624  // a hotspot
625  QRegion hotSpotRegion() const;
626 
627  // returns the position of the cursor in columns and lines
628  QPoint cursorPosition() const;
629 
630  // the window onto the terminal screen which this display
631  // is currently showing.
632  QPointer<ScreenWindow> _screenWindow;
633 
635 
636  QGridLayout* _gridLayout;
637 
638  bool _fixedFont; // has fixed pitch
639 
640  double _fontHeight; // height
641  double _fontWidth; // width
642  //type double to decrease rounding errors
643 
644  int _fontAscent; // ascend
645 
646  int _leftMargin; // offset
647  int _topMargin; // offset
648 
649  int _lines; // the number of lines that can be displayed in the widget
650  int _columns; // the number of columns that can be displayed in the widget
651 
652  int _usedLines; // the number of lines that are actually being used, this will be less
653  // than 'lines' if the character image provided with setImage() is smaller
654  // than the maximum image size which can be displayed
655 
656  int _usedColumns; // the number of columns that are actually being used, this will be less
657  // than 'columns' if the character image provided with setImage() is smaller
658  // than the maximum image size which can be displayed
659 
662  Character* _image; // [lines][columns]
663  // only the area [usedLines][usedColumns] in the image contains valid data
664 
666  QVector<LineProperty> _lineProperties;
667 
670 
671  bool _resizing;
677 
678  QPoint _iPntSel; // initial selection point
679  QPoint _pntSel; // current selection point
680  QPoint _tripleSelBegin; // help avoid flicker
681  int _actSel; // selection state
686 
687  QClipboard* _clipboard;
688  QScrollBar* _scrollBar;
692 
693  bool _blinking; // hide text in paintEvent
694  bool _hasBlinker; // has characters to blink
695  bool _cursorBlinking; // hide cursor in paintEvent
696  bool _hasBlinkingCursor; // has blinking cursor enabled
697  bool _ctrlDrag; // require Ctrl key for drag
699  bool _isFixedSize; //Columns / lines are locked.
700  QTimer* _blinkTimer; // active when hasBlinker
701  QTimer* _blinkCursorTimer; // active when hasBlinkingCursor
702  QTimer* _process_filter_timer; // active when visible, filter processing
703 
704 // KMenu* _drop;
705  QString _dropText;
707 
708  bool _possibleTripleClick; // is set in mouseDoubleClickEvent and deleted
709  // after QApplication::doubleClickInterval() delay
710 
711 
712  QLabel* _resizeWidget;
713  QTimer* _resizeTimer;
714 
716 
717  //widgets related to the warning message that appears when the user presses Ctrl+S to suspend
718  //terminal output - informing them what has happened and how to resume output
720 
722 
723  bool _colorsInverted; // true during visual bell
724 
725  QSize _size;
726 
728 
729  // list of filters currently applied to the display. used for links and
730  // search highlight
733 
735 
736  // custom cursor color. if this is invalid then the foreground
737  // color of the character under the cursor is used
738  QColor _cursorColor;
739 
740 
742  {
743  QString preeditString;
745  };
747 
748  static bool _antialiasText; // do we antialias or not
749 
750  //the delay in milliseconds between redrawing blinking text
751  static const int BLINK_DELAY = 500;
752  static const int DEFAULT_LEFT_MARGIN = 2;
753  static const int DEFAULT_TOP_MARGIN = 2;
754 
755  bool _readonly;
756 };
757 
758 #endif // TERMINALVIEW_H
#define TABLE_COLORS
unsigned short vt100_graphics[32]
A single character in the terminal which consists of a unicode character value, foreground and backgr...
Definition: Character.h:56
An entry in a terminal display's color palette.
A chain which allows a group of filters to be processed as one.
Definition: Filter.h:362
Provides a window onto a section of a terminal screen.
Definition: ScreenWindow.h:52
A filter chain which processes character images from terminal displays.
Definition: Filter.h:396
A widget which displays output from a terminal emulation and sends input keypresses and mouse activit...
Definition: TerminalView.h:64
void selectAll()
selects all content
virtual void showEvent(QShowEvent *)
double _fontWidth
Definition: TerminalView.h:641
bool _flowControlWarningEnabled
Definition: TerminalView.h:715
QPoint _tripleSelBegin
Definition: TerminalView.h:680
FilterChain * filterChain() const
Returns the display's filter chain.
QGridLayout * _gridLayout
Definition: TerminalView.h:636
bool blinkingCursor()
Returns true if the cursor is set to blink or false otherwise.
Definition: TerminalView.h:134
uint randomSeed() const
Returns the seed used to generate random colors for the display (in color schemes that support them).
QRect preeditRect() const
virtual void inputMethodEvent(QInputMethodEvent *event)
bool _columnSelectionMode
Definition: TerminalView.h:685
void setWordCharacters(const QString &wc)
Sets which characters, in addition to letters and numbers, are regarded as being part of a word for t...
void processFilters()
Updates the filters in the display's filter chain.
static const int BLINK_DELAY
Definition: TerminalView.h:751
bool _colorsInverted
Definition: TerminalView.h:723
int fontHeight()
Returns the height of the characters in the font used to draw the text in the display.
Definition: TerminalView.h:242
void updateLineProperties()
Causes the terminal display to fetch the latest line status flags from the associated terminal screen...
virtual void extendSelection(const QPoint &pos)
void pasteClipboard()
Pastes the content of the clipboard into the display.
static const int DEFAULT_TOP_MARGIN
Definition: TerminalView.h:753
void sendStringToEmu(const char *)
virtual void resizeEvent(QResizeEvent *)
bool _wordSelectionMode
Definition: TerminalView.h:682
QVector< LineProperty > _lineProperties
Definition: TerminalView.h:666
void drawInputMethodPreeditString(QPainter &painter, const QRect &rect)
void drawBackground(QPainter &painter, const QRect &rect, const QColor &color)
void setTerminalSizeStartup(bool on)
Sets whether the terminal size display is shown briefly after the widget is first shown.
Definition: TerminalView.h:366
virtual void setFont(const QFont &)
Reimplemented.
void drawCursor(QPainter &painter, const QRect &rect, const QColor &foregroundColor, const QColor &backgroundColor, bool &invertColors)
void drawTextFragment(QPainter &painter, const QRect &rect, const QString &text, const Character *style)
int bellMode()
Returns the type of effect used to alert the user when a 'bell' occurs in the terminal session.
Definition: TerminalView.h:289
void getCharacterPosition(const QPoint &widgetPoint, int &line, int &column) const
virtual void hideEvent(QHideEvent *)
QTimer * _blinkCursorTimer
Definition: TerminalView.h:701
void setBellMode(int mode)
Sets the type of effect used to alert the user when a 'bell' occurs in the terminal session.
bool _bracketedPasteMode
Definition: TerminalView.h:675
void setUsesMouse(bool usesMouse)
Sets whether the program whoose output is being displayed in the view is interested in mouse events.
void changedFontMetricSignal(int height, int width)
virtual void mouseReleaseEvent(QMouseEvent *)
void scrollBarPositionChanged(int value)
static const int DEFAULT_LEFT_MARGIN
Definition: TerminalView.h:752
void setScroll(int cursor, int lines)
Sets the current position and range of the display's scroll bar.
void configureRequest(TerminalView *, int state, const QPoint &position)
Emitted when the user right clicks on the display, or right-clicks with the Shift key held down if us...
void setRandomSeed(uint seed)
Sets the seed used to generate random colors for the display (in color schemes that support them).
void isBusySelecting(bool)
void copyClipboard(bool extra_interrupt)
Copies the selected text to the clipboard.
void interrupt_signal(void)
QPoint cursorPosition() const
TripleClickMode
This enum describes the methods for selecting text when the user triple-clicks within the display.
Definition: TerminalView.h:147
@ SelectForwardsFromCursor
Select from the current cursor position to the end of the line.
Definition: TerminalView.h:151
@ SelectWholeLine
Select the whole line underneath the cursor.
Definition: TerminalView.h:149
void setColorTable(const ColorEntry table[])
Sets the terminal color palette used by the display.
QFont getVTFont()
Returns the font used to draw characters in the display.
Definition: TerminalView.h:323
void setScrollBarPosition(ScrollBarPosition position)
Specifies whether the terminal display has a vertical scroll bar, and if so whether it is shown on th...
QString wordCharacters()
Returns the characters which are considered part of a word for the purpose of selecting words in the ...
Definition: TerminalView.h:273
ScreenWindow * screenWindow() const
Returns the terminal screen section which is displayed in this widget.
void setKeyboardCursorShape(KeyboardCursorShape shape)
Sets the shape of the keyboard cursor.
bool _lineSelectionMode
Definition: TerminalView.h:683
Character * _image
Definition: TerminalView.h:662
static void setAntialias(bool antialias)
Specified whether anti-aliasing of text in the terminal display is enabled or not.
Definition: TerminalView.h:342
void focusInEvent(QFocusEvent *focusEvent)
QScrollBar * _scrollBar
Definition: TerminalView.h:688
QPointer< ScreenWindow > _screenWindow
Definition: TerminalView.h:632
TerminalImageFilterChain * _filterChain
Definition: TerminalView.h:731
virtual bool focusNextPrevChild(bool next)
void setScreenWindow(ScreenWindow *window)
Sets the terminal screen section which is displayed in this widget.
virtual int charClass(quint16) const
void setKeyboardCursorColor(bool useForegroundColor, const QColor &color)
Sets the color used to draw the keyboard cursor.
ColorEntry _colorTable[TABLE_COLORS]
Definition: TerminalView.h:668
bool _hasBlinkingCursor
Definition: TerminalView.h:696
TripleClickMode _tripleClickMode
Definition: TerminalView.h:698
bool _terminalSizeStartup
Definition: TerminalView.h:673
bool _preserveLineBreaks
Definition: TerminalView.h:684
void bracketText(QString &text)
change and wrap text corresponding to paste mode
void setVTFont(const QFont &font)
Sets the font used to draw the display.
QString selectedText()
QRect _mouseOverHotspotArea
Definition: TerminalView.h:732
QSize sizeHint() const
void updateImage()
Causes the terminal display to fetch the latest character image from the associated terminal screen (...
bool ctrlDrag()
Definition: TerminalView.h:140
int columns()
Returns the number of characters of text which can be displayed on each line in the widget.
Definition: TerminalView.h:237
virtual ~TerminalView()
void propagateSize()
void disableBracketedPasteMode(bool disable)
Definition: TerminalView.h:385
void blinkCursorEvent()
virtual void mouseMoveEvent(QMouseEvent *)
BellMode
This enum describes the different types of sounds and visual effects which can be used to alert the u...
Definition: TerminalView.h:297
@ VisualBell
A silent, visual bell (eg.
Definition: TerminalView.h:306
@ NotifyBell
KDE notification.
Definition: TerminalView.h:304
@ NoBell
No bell effects.
Definition: TerminalView.h:308
@ SystemBeepBell
A system beep.
Definition: TerminalView.h:299
InputMethodData _inputMethodData
Definition: TerminalView.h:746
void focusOutEvent(QFocusEvent *focusEvent)
void mouseSignal(int button, int column, int line, int eventType)
A mouse event occurred.
bool _cursorBlinking
Definition: TerminalView.h:695
void setReadOnly(bool readonly)
Specified whether terminal widget should be at read-only mode Defaults to false.
Definition: TerminalView.h:336
void setSelection(const QString &t)
void setBlinkingCursor(bool blink)
Specifies whether or not the cursor blinks.
void drawCharacters(QPainter &painter, const QRect &rect, const QString &text, const Character *style, bool invertCharacterColor)
bool usesMouse() const
See setUsesMouse()
virtual void mousePressEvent(QMouseEvent *)
KeyboardCursorShape _cursorShape
Definition: TerminalView.h:734
QTimer * _blinkTimer
Definition: TerminalView.h:700
virtual QVariant inputMethodQuery(Qt::InputMethodQuery query) const
virtual void mouseDoubleClickEvent(QMouseEvent *ev)
QClipboard * _clipboard
Definition: TerminalView.h:687
void paintFilters(QPainter &painter)
QList< QAction * > filterActions(const QPoint &position)
Returns a list of menu actions created by the filters for the content at the given position.
virtual void keyPressEvent(QKeyEvent *event)
void setTripleClickMode(TripleClickMode mode)
Sets how the text is selected when the user triple clicks within the display.
Definition: TerminalView.h:154
ScrollBarPosition
This enum describes the location where the scroll bar is positioned in the display widget.
Definition: TerminalView.h:92
@ ScrollBarLeft
Show the scroll bar on the left side of the display.
Definition: TerminalView.h:96
@ NoScrollBar
Do not show the scroll bar.
Definition: TerminalView.h:94
@ ScrollBarRight
Show the scroll bar on the right side of the display.
Definition: TerminalView.h:98
QPoint _pntSel
Definition: TerminalView.h:679
virtual void dropEvent(QDropEvent *event)
QRect imageToWidget(const QRect &imageArea) const
void updateImageSize()
virtual void dragEnterEvent(QDragEnterEvent *event)
void setFixedSize(int cols, int lins)
void setBlinkingCursorState(bool blink)
void set_global_shortcuts_signal(bool)
Emitted when focus changes.
void setCtrlDrag(bool enable)
Definition: TerminalView.h:139
int lines()
Returns the number of lines of text which can be displayed in the widget.
Definition: TerminalView.h:229
virtual void fontChange(const QFont &font)
void tripleClickTimeout()
virtual void wheelEvent(QWheelEvent *)
QLabel * _outputSuspendedLabel
Definition: TerminalView.h:719
struct TerminalView::_dragInfo dragInfo
bool _terminalSizeHint
Definition: TerminalView.h:672
KeyboardCursorShape
This enum describes the available shapes for the keyboard cursor.
Definition: TerminalView.h:171
@ UnderlineCursor
A single flat line which occupies the space at the bottom of the cursor character's area.
Definition: TerminalView.h:178
@ IBeamCursor
An cursor shaped like the capital letter 'I', similar to the IBeam cursor used in Qt/KDE text editors...
Definition: TerminalView.h:183
@ BlockCursor
A rectangular block which covers the entire area of the cursor character.
Definition: TerminalView.h:173
QColor keyboardCursorColor() const
Returns the color of the keyboard cursor, or an invalid color if the keyboard cursor color is set to ...
KeyboardCursorShape keyboardCursorShape() const
Returns the shape of the keyboard cursor.
void setLineSpacing(uint)
QPoint _iPntSel
Definition: TerminalView.h:678
void outputSuspended(bool suspended)
Causes the widget to display or hide a message informing the user that terminal output has been suspe...
void swapColorTable()
double _fontHeight
Definition: TerminalView.h:640
bool _disabledBracketedPasteMode
Definition: TerminalView.h:676
const ColorEntry * colorTable() const
Returns the terminal color palette used by the display.
virtual void paintEvent(QPaintEvent *)
bool bracketedPasteMode() const
void pasteSelection()
Pastes the content of the selection into the display.
bool terminalSizeHint()
Returns whether or not the current height and width of the terminal in lines and columns is displayed...
Definition: TerminalView.h:359
void visibility_changed(bool visible)
Is called, when the terminal's visibility has changed in order to stop orstart timers etc.
void tripleClicked(const QString &text)
uint lineSpacing() const
QTimer * _resizeTimer
Definition: TerminalView.h:713
void setSize(int cols, int lins)
void showResizeNotification()
QRegion hotSpotRegion() const
int fontWidth()
Returns the width of the characters in the display.
Definition: TerminalView.h:247
QString _wordCharacters
Definition: TerminalView.h:690
ScrollBarPosition _scrollbarLocation
Definition: TerminalView.h:689
QString _dropText
Definition: TerminalView.h:705
TerminalView(QWidget *parent=nullptr)
Constructs a new terminal display widget with the specified parent.
void keyPressedSignal(QKeyEvent *e)
Emitted when the user presses a key whilst the terminal widget has focus.
TripleClickMode tripleClickMode()
See setTripleClickSelectionMode()
Definition: TerminalView.h:156
void setBracketedPasteMode(bool bracketedPasteMode)
QLabel * _resizeWidget
Definition: TerminalView.h:712
void changedContentSizeSignal(int height, int width)
void mouseTripleClickEvent(QMouseEvent *ev)
static bool _antialiasText
Definition: TerminalView.h:748
void emitSelection(bool useXselection, bool appendReturn)
void drawContents(QPainter &paint, const QRect &rect)
bool _possibleTripleClick
Definition: TerminalView.h:708
bool bracketedPasteModeIsDisabled() const
Definition: TerminalView.h:386
QTimer * _process_filter_timer
Definition: TerminalView.h:702
void scrollImage(int lines, const QRect &region)
void setTerminalSizeHint(bool on)
Sets whether or not the current height and width of the terminal in lines and columns is displayed wh...
Definition: TerminalView.h:353
static bool antialias()
Returns true if anti-aliasing of text in the terminal is enabled.
Definition: TerminalView.h:346
QColor _cursorColor
Definition: TerminalView.h:738
static uint32_t state[624]
Definition: randmtzig.cc:190
static uint32_t * next
Definition: randmtzig.cc:189