annotate libgui/qterminal/libqterminal/unix/TerminalView.cpp @ 29054:226df400639c

maint: merge stable to default.
author John W. Eaton <jwe@octave.org>
date Thu, 12 Nov 2020 02:02:39 -0500
parents 7d9a11de251f 440ace36950e
children 843b1f794544
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1 /*
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2 This file is part of Konsole, a terminal emulator for KDE.
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
3
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
4 Copyright (C) 2006-7 by Robert Knight <robertknight@gmail.com>
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
5 Copyright (C) 1997,1998 by Lars Doelle <lars.doelle@on-line.de>
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
6
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
7 Rewritten for QT4 by e_k <e_k at users.sourceforge.net>, Copyright (C)2008
26376
00f796120a6d maint: Update copyright dates in all source files.
John W. Eaton <jwe@octave.org>
parents: 26038
diff changeset
8 Copyright (C) 2012-2019 Jacob Dawid <jacob.dawid@cybercatalyst.com>
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
9
24534
194eb4bd202b maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents: 24133
diff changeset
10 This program is free software: you can redistribute it and/or modify
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
11 it under the terms of the GNU General Public License as published by
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
12 the Free Software Foundation; either version 2 of the License, or
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
13 (at your option) any later version.
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
14
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
15 This program is distributed in the hope that it will be useful,
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
18 GNU General Public License for more details.
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
19
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
20 You should have received a copy of the GNU General Public License
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
21 along with this program; if not, write to the Free Software
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
22 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
23 02110-1301 USA.
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
24 */
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
25
28845
50c112129700 avoid deprecated Qt QRegion::rects function
John W. Eaton <jwe@octave.org>
parents: 28844
diff changeset
26 #if defined (HAVE_CONFIG_H)
50c112129700 avoid deprecated Qt QRegion::rects function
John W. Eaton <jwe@octave.org>
parents: 28844
diff changeset
27 # include "config.h"
50c112129700 avoid deprecated Qt QRegion::rects function
John W. Eaton <jwe@octave.org>
parents: 28844
diff changeset
28 #endif
50c112129700 avoid deprecated Qt QRegion::rects function
John W. Eaton <jwe@octave.org>
parents: 28844
diff changeset
29
28846
2219027f5bd4 avoid deprecated Qt QFontMetrics::width function
John W. Eaton <jwe@octave.org>
parents: 28845
diff changeset
30 #include "qt-utils.h"
2219027f5bd4 avoid deprecated Qt QFontMetrics::width function
John W. Eaton <jwe@octave.org>
parents: 28845
diff changeset
31
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
32 // Own
15653
35c891dce299 Removed INCLUDEPATH.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15651
diff changeset
33 #include "unix/TerminalView.h"
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
34
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
35 // Qt
17827
2de613986374 include Qt files with <QFoo> instead of <QtGui/QFoo> (bug #40252)
John W. Eaton <jwe@octave.org>
parents: 17744
diff changeset
36 #include <QApplication>
2de613986374 include Qt files with <QFoo> instead of <QtGui/QFoo> (bug #40252)
John W. Eaton <jwe@octave.org>
parents: 17744
diff changeset
37 #include <QBoxLayout>
2de613986374 include Qt files with <QFoo> instead of <QtGui/QFoo> (bug #40252)
John W. Eaton <jwe@octave.org>
parents: 17744
diff changeset
38 #include <QClipboard>
2de613986374 include Qt files with <QFoo> instead of <QtGui/QFoo> (bug #40252)
John W. Eaton <jwe@octave.org>
parents: 17744
diff changeset
39 #include <QKeyEvent>
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
40 #include <QtCore/QEvent>
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
41 #include <QtCore/QTime>
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
42 #include <QtCore/QFile>
17827
2de613986374 include Qt files with <QFoo> instead of <QtGui/QFoo> (bug #40252)
John W. Eaton <jwe@octave.org>
parents: 17744
diff changeset
43 #include <QGridLayout>
2de613986374 include Qt files with <QFoo> instead of <QtGui/QFoo> (bug #40252)
John W. Eaton <jwe@octave.org>
parents: 17744
diff changeset
44 #include <QLabel>
2de613986374 include Qt files with <QFoo> instead of <QtGui/QFoo> (bug #40252)
John W. Eaton <jwe@octave.org>
parents: 17744
diff changeset
45 #include <QLayout>
2de613986374 include Qt files with <QFoo> instead of <QtGui/QFoo> (bug #40252)
John W. Eaton <jwe@octave.org>
parents: 17744
diff changeset
46 #include <QPainter>
2de613986374 include Qt files with <QFoo> instead of <QtGui/QFoo> (bug #40252)
John W. Eaton <jwe@octave.org>
parents: 17744
diff changeset
47 #include <QPixmap>
2de613986374 include Qt files with <QFoo> instead of <QtGui/QFoo> (bug #40252)
John W. Eaton <jwe@octave.org>
parents: 17744
diff changeset
48 #include <QScrollBar>
2de613986374 include Qt files with <QFoo> instead of <QtGui/QFoo> (bug #40252)
John W. Eaton <jwe@octave.org>
parents: 17744
diff changeset
49 #include <QStyle>
22250
2fd4f1a3f4a8 allow building with Qt5 (bug #40252)
John W. Eaton <jwe@octave.org>
parents: 20137
diff changeset
50 #include <QToolTip>
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
51 #include <QtCore>
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
52 #include <QtGui>
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
53
15653
35c891dce299 Removed INCLUDEPATH.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15651
diff changeset
54 #include "unix/Filter.h"
35c891dce299 Removed INCLUDEPATH.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15651
diff changeset
55 #include "unix/konsole_wcwidth.h"
35c891dce299 Removed INCLUDEPATH.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15651
diff changeset
56 #include "unix/ScreenWindow.h"
35c891dce299 Removed INCLUDEPATH.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15651
diff changeset
57 #include "unix/TerminalCharacterDecoder.h"
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
58
16538
8e180eac78d0 raise SIGWINCH signal in Unix GUI terminal window when size changes
John W. Eaton <jwe@octave.org>
parents: 15681
diff changeset
59 #include <signal.h>
8e180eac78d0 raise SIGWINCH signal in Unix GUI terminal window when size changes
John W. Eaton <jwe@octave.org>
parents: 15681
diff changeset
60
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
61 #ifndef loc
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
62 #define loc(X,Y) ((Y)*_columns+(X))
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
63 #endif
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
64
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
65 #define yMouseScroll 1
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
66
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
67 #define REPCHAR "ABCDEFGHIJKLMNOPQRSTUVWXYZ" \
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
68 "abcdefgjijklmnopqrstuvwxyz" \
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
69 "0123456789./+@"
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
70
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
71 // scroll increment used when dragging selection at top/bottom of window.
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
72
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
73 // static
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
74 bool TerminalView::_antialiasText = true;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
75
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
76 /* ------------------------------------------------------------------------- */
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
77 /* */
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
78 /* Colors */
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
79 /* */
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
80 /* ------------------------------------------------------------------------- */
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
81
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
82 /* Note that we use ANSI color order (bgr), while IBMPC color order is (rgb)
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
83
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
84 Code 0 1 2 3 4 5 6 7
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
85 ----------- ------- ------- ------- ------- ------- ------- ------- -------
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
86 ANSI (bgr) Black Red Green Yellow Blue Magenta Cyan White
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
87 IBMPC (rgb) Black Blue Green Cyan Red Magenta Yellow White
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
88 */
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
89
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
90 ScreenWindow* TerminalView::screenWindow() const
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
91 {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
92 return _screenWindow;
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
93 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
94 void TerminalView::setScreenWindow(ScreenWindow* window)
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
95 {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
96 // disconnect existing screen window if any
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
97 if ( _screenWindow )
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
98 {
23795
980f39c3ab90 Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23787
diff changeset
99 disconnect( _screenWindow , nullptr , this , nullptr );
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
100 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
101
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
102 _screenWindow = window;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
103
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
104 if ( window )
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
105 {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
106 //#warning "The order here is not specified - does it matter whether updateImage or updateLineProperties comes first?"
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
107 connect( _screenWindow , SIGNAL(outputChanged()) , this , SLOT(updateLineProperties()) );
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
108 connect( _screenWindow , SIGNAL(outputChanged()) , this , SLOT(updateImage()) );
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
109 window->setWindowLines(_lines);
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
110 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
111 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
112
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
113 const ColorEntry* TerminalView::colorTable() const
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
114 {
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
115 return _colorTable;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
116 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
117
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
118 void TerminalView::setColorTable(const ColorEntry table[])
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
119 {
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
120 for (int i = 0; i < TABLE_COLORS; i++)
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
121 _colorTable[i] = table[i];
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
122
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
123 QPalette p = palette();
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
124 p.setColor( backgroundRole(), _colorTable[DEFAULT_BACK_COLOR].color );
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
125 setPalette( p );
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
126
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
127 // Avoid propagating the palette change to the scroll bar
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
128 _scrollBar->setPalette( QApplication::palette() );
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
129
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
130 update();
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
131 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
132
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
133 /* ------------------------------------------------------------------------- */
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
134 /* */
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
135 /* Font */
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
136 /* */
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
137 /* ------------------------------------------------------------------------- */
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
138
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
139 /*
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
140 The VT100 has 32 special graphical characters. The usual vt100 extended
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
141 xterm fonts have these at 0x00..0x1f.
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
142
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
143 QT's iso mapping leaves 0x00..0x7f without any changes. But the graphicals
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
144 come in here as proper unicode characters.
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
145
15678
a1bcffac7fa8 fixed cursor position
Jen Stewart <jen.stewart.london@gmail.com>
parents: 15676
diff changeset
146 We treat non-iso10646 fonts as VT100 extended and do the required mapping
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
147 from unicode to 0x00..0x1f. The remaining translation is then left to the
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
148 QCodec.
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
149 */
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
150
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
151 // assert for i in [0..31] : vt100extended(vt100_graphics[i]) == i.
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
152
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
153 unsigned short vt100_graphics[32] =
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
154 { // 0/8 1/9 2/10 3/11 4/12 5/13 6/14 7/15
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
155 0x0020, 0x25C6, 0x2592, 0x2409, 0x240c, 0x240d, 0x240a, 0x00b0,
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
156 0x00b1, 0x2424, 0x240b, 0x2518, 0x2510, 0x250c, 0x2514, 0x253c,
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
157 0xF800, 0xF801, 0x2500, 0xF803, 0xF804, 0x251c, 0x2524, 0x2534,
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
158 0x252c, 0x2502, 0x2264, 0x2265, 0x03C0, 0x2260, 0x00A3, 0x00b7
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
159 };
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
160
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
161 void TerminalView::fontChange(const QFont&)
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
162 {
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
163 QFontMetrics fm(font());
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
164 _fontHeight = fm.height() + _lineSpacing;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
165
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
166
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
167 // waba TerminalDisplay 1.123:
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
168 // "Base character width on widest ASCII character. This prevents too wide
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
169 // characters in the presence of double wide (e.g. Japanese) characters."
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
170 // Get the width from representative normal width characters
28846
2219027f5bd4 avoid deprecated Qt QFontMetrics::width function
John W. Eaton <jwe@octave.org>
parents: 28845
diff changeset
171 _fontWidth = ((double)octave::qt_fontmetrics_horizontal_advance(fm, REPCHAR)
2219027f5bd4 avoid deprecated Qt QFontMetrics::width function
John W. Eaton <jwe@octave.org>
parents: 28845
diff changeset
172 / (double)strlen(REPCHAR));
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
173
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
174 _fixedFont = true;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
175
28846
2219027f5bd4 avoid deprecated Qt QFontMetrics::width function
John W. Eaton <jwe@octave.org>
parents: 28845
diff changeset
176 int fw = octave::qt_fontmetrics_horizontal_advance(fm, REPCHAR[0]);
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
177 for(unsigned int i=1; i< strlen(REPCHAR); i++)
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
178 {
28846
2219027f5bd4 avoid deprecated Qt QFontMetrics::width function
John W. Eaton <jwe@octave.org>
parents: 28845
diff changeset
179 if (fw != octave::qt_fontmetrics_horizontal_advance(fm, REPCHAR[i]))
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
180 {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
181 _fixedFont = false;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
182 break;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
183 }
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
184 }
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
185
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
186
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
187 if (_fontWidth < 1)
15678
a1bcffac7fa8 fixed cursor position
Jen Stewart <jen.stewart.london@gmail.com>
parents: 15676
diff changeset
188 _fontWidth = 1;
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
189
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
190 _fontAscent = fm.ascent();
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
191
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
192 emit changedFontMetricSignal( _fontHeight, _fontWidth );
15673
76452c97add8 Removed restriction on maximum terminal size.
Jacob Dawid <jacob.dawid@gmail.com>
parents: 15671
diff changeset
193 //parentWidget()->setFixedWidth(_fontWidth * 80 + _leftMargin);
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
194 propagateSize();
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
195 update();
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
196 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
197
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
198 void TerminalView::setVTFont(const QFont& f)
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
199 {
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
200 QFont font = f;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
201
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
202 QFontMetrics metrics(font);
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
203
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
204 if ( metrics.height() < height() && metrics.maxWidth() < width() )
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
205 {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
206 // hint that text should be drawn without anti-aliasing.
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
207 // depending on the user's font configuration, this may not be respected
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
208 if (!_antialiasText)
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
209 font.setStyleStrategy( QFont::NoAntialias );
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
210
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
211 // experimental optimization. Konsole assumes that the terminal is using a
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
212 // mono-spaced font, in which case kerning information should have an effect.
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
213 // Disabling kerning saves some computation when rendering text.
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
214 // font.setKerning(false);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
215
28846
2219027f5bd4 avoid deprecated Qt QFontMetrics::width function
John W. Eaton <jwe@octave.org>
parents: 28845
diff changeset
216 int strategy = font.styleStrategy();
18973
625e3bb65885 don't require Qt 4.7 (bug #42657)
John W. Eaton <jwe@octave.org>
parents: 18657
diff changeset
217 #if defined (HAVE_QFONT_FORCE_INTEGER_METRICS)
625e3bb65885 don't require Qt 4.7 (bug #42657)
John W. Eaton <jwe@octave.org>
parents: 18657
diff changeset
218 strategy |= QFont::ForceIntegerMetrics;
625e3bb65885 don't require Qt 4.7 (bug #42657)
John W. Eaton <jwe@octave.org>
parents: 18657
diff changeset
219 #endif
625e3bb65885 don't require Qt 4.7 (bug #42657)
John W. Eaton <jwe@octave.org>
parents: 18657
diff changeset
220 font.setStyleStrategy(QFont::StyleStrategy(strategy));
18657
5fb180e37d7c force integer font metric in gui terminal (partial fix of bug #37187)
Torsten <ttl@justmail.de>
parents: 17920
diff changeset
221
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
222 QWidget::setFont(font);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
223 fontChange(font);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
224 }
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
225 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
226
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
227 void TerminalView::setFont(const QFont &)
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
228 {
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
229 // ignore font change request if not coming from konsole itself
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
230 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
231
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
232 /* ------------------------------------------------------------------------- */
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
233 /* */
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
234 /* Constructor / Destructor */
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
235 /* */
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
236 /* ------------------------------------------------------------------------- */
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
237
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
238 TerminalView::TerminalView(QWidget *parent)
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
239 :QWidget(parent)
23796
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23795
diff changeset
240 ,_screenWindow(nullptr)
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
241 ,_allowBell(true)
23796
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23795
diff changeset
242 ,_gridLayout(nullptr)
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
243 ,_fontHeight(1)
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
244 ,_fontWidth(1)
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
245 ,_fontAscent(1)
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
246 ,_lines(1)
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
247 ,_columns(1)
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
248 ,_usedLines(1)
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
249 ,_usedColumns(1)
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
250 ,_contentHeight(1)
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
251 ,_contentWidth(1)
23796
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23795
diff changeset
252 ,_image(nullptr)
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
253 ,_randomSeed(0)
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
254 ,_resizing(false)
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
255 ,_terminalSizeHint(false)
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
256 ,_terminalSizeStartup(true)
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
257 ,_actSel(0)
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
258 ,_wordSelectionMode(false)
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
259 ,_lineSelectionMode(false)
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
260 ,_preserveLineBreaks(false)
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
261 ,_columnSelectionMode(false)
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
262 ,_scrollbarLocation(NoScrollBar)
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
263 ,_wordCharacters(":@-./_~")
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
264 ,_bellMode(SystemBeepBell)
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
265 ,_blinking(false)
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
266 ,_cursorBlinking(false)
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
267 ,_hasBlinkingCursor(false)
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
268 ,_ctrlDrag(false)
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
269 ,_tripleClickMode(SelectWholeLine)
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
270 ,_isFixedSize(false)
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
271 ,_possibleTripleClick(false)
23796
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23795
diff changeset
272 ,_resizeWidget(nullptr)
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23795
diff changeset
273 ,_resizeTimer(nullptr)
4f12819a634f Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23795
diff changeset
274 ,_outputSuspendedLabel(nullptr)
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
275 ,_lineSpacing(0)
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
276 ,_colorsInverted(false)
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
277 ,_blendColor(qRgba(0,0,0,0xff))
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
278 ,_filterChain(new TerminalImageFilterChain())
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
279 ,_cursorShape(BlockCursor)
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
280 ,_readonly(false)
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
281 {
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
282 // terminal applications are not designed with Right-To-Left in mind,
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
283 // so the layout is forced to Left-To-Right
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
284 setLayoutDirection(Qt::LeftToRight);
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
285
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
286 // The offsets are not yet calculated.
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
287 // Do not calculate these too often to be more smoothly when resizing
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
288 // konsole in opaque mode.
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
289 _topMargin = DEFAULT_TOP_MARGIN;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
290 _leftMargin = DEFAULT_LEFT_MARGIN;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
291
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
292 // create scroll bar for scrolling output up and down
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
293 // set the scroll bar's slider to occupy the whole area of the scroll bar initially
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
294 _scrollBar = new QScrollBar(this);
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
295 setScroll(0,0);
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
296 _scrollBar->setCursor( Qt::ArrowCursor );
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
297 connect(_scrollBar, SIGNAL(valueChanged(int)), this,
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
298 SLOT(scrollBarPositionChanged(int)));
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
299
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
300 // setup timers for blinking cursor and text
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
301 _blinkTimer = new QTimer(this);
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
302 connect(_blinkTimer, SIGNAL(timeout()), this, SLOT(blinkEvent()));
23808
2b1b2a795ba6 update clickable urls in terminal also when visible terminal has no focus
Torsten <mttl@mailbox.org>
parents: 23796
diff changeset
303
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
304 _blinkCursorTimer = new QTimer(this);
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
305 connect(_blinkCursorTimer, SIGNAL(timeout()), this, SLOT(blinkCursorEvent()));
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
306
23808
2b1b2a795ba6 update clickable urls in terminal also when visible terminal has no focus
Torsten <mttl@mailbox.org>
parents: 23796
diff changeset
307 _process_filter_timer = new QTimer (this);
2b1b2a795ba6 update clickable urls in terminal also when visible terminal has no focus
Torsten <mttl@mailbox.org>
parents: 23796
diff changeset
308 connect (_process_filter_timer, SIGNAL (timeout ()),
2b1b2a795ba6 update clickable urls in terminal also when visible terminal has no focus
Torsten <mttl@mailbox.org>
parents: 23796
diff changeset
309 this, SLOT (processFilters ()));
2b1b2a795ba6 update clickable urls in terminal also when visible terminal has no focus
Torsten <mttl@mailbox.org>
parents: 23796
diff changeset
310 _process_filter_timer->start (300);
2b1b2a795ba6 update clickable urls in terminal also when visible terminal has no focus
Torsten <mttl@mailbox.org>
parents: 23796
diff changeset
311
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
312 // QCursor::setAutoHideCursor( this, true );
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
313
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
314 setUsesMouse(true);
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
315 setColorTable(base_color_table);
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
316 setMouseTracking(true);
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
317
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
318 // Enable drag and drop
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
319 setAcceptDrops(true); // attempt
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
320 dragInfo.state = diNone;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
321
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
322 setFocusPolicy( Qt::WheelFocus );
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
323
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
324 // enable input method support
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
325 setAttribute(Qt::WA_InputMethodEnabled, true);
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
326
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
327 // this is an important optimization, it tells Qt
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
328 // that TerminalDisplay will handle repainting its entire area.
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
329 setAttribute(Qt::WA_OpaquePaintEvent);
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
330
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
331 _gridLayout = new QGridLayout(this);
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
332 _gridLayout->setMargin(0);
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
333
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
334 setLayout( _gridLayout );
16970
78116b88dbf5 enable readline key bindings in terminal widget of gui (bug #36986)
Torsten <ttl@justmail.de>
parents: 16956
diff changeset
335
78116b88dbf5 enable readline key bindings in terminal widget of gui (bug #36986)
Torsten <ttl@justmail.de>
parents: 16956
diff changeset
336 connect (this, SIGNAL (set_global_shortcuts_signal (bool)),
78116b88dbf5 enable readline key bindings in terminal widget of gui (bug #36986)
Torsten <ttl@justmail.de>
parents: 16956
diff changeset
337 parent->parent (), SLOT (set_global_shortcuts (bool)));
19943
88233ac3f3ea fix issue with ctrl-c for copying when editor has focus and is docked
Torsten <ttl@justmail.de>
parents: 19716
diff changeset
338 connect (this, SIGNAL (set_global_shortcuts_signal (bool)),
88233ac3f3ea fix issue with ctrl-c for copying when editor has focus and is docked
Torsten <ttl@justmail.de>
parents: 19716
diff changeset
339 parent, SLOT (set_global_shortcuts (bool)));
16970
78116b88dbf5 enable readline key bindings in terminal widget of gui (bug #36986)
Torsten <ttl@justmail.de>
parents: 16956
diff changeset
340
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
341 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
342
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
343 TerminalView::~TerminalView()
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
344 {
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
345 qApp->removeEventFilter( this );
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
346
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
347 delete[] _image;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
348
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
349 delete _gridLayout;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
350 delete _outputSuspendedLabel;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
351 delete _filterChain;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
352 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
353
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
354 /* ------------------------------------------------------------------------- */
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
355 /* */
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
356 /* Display Operations */
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
357 /* */
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
358 /* ------------------------------------------------------------------------- */
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
359
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
360 /**
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
361 A table for emulating the simple (single width) unicode drawing chars.
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
362 It represents the 250x - 257x glyphs. If it's zero, we can't use it.
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
363 if it's not, it's encoded as follows: imagine a 5x5 grid where the points are numbered
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
364 0 to 24 left to top, top to bottom. Each point is represented by the corresponding bit.
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
365
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
366 Then, the pixels basically have the following interpretation:
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
367 _|||_
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
368 -...-
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
369 -...-
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
370 -...-
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
371 _|||_
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
372
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
373 where _ = none
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
374 | = vertical line.
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
375 - = horizontal line.
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
376 */
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
377
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
378
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
379 enum LineEncode
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
380 {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
381 TopL = (1<<1),
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
382 TopC = (1<<2),
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
383 TopR = (1<<3),
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
384
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
385 LeftT = (1<<5),
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
386 Int11 = (1<<6),
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
387 Int12 = (1<<7),
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
388 Int13 = (1<<8),
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
389 RightT = (1<<9),
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
390
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
391 LeftC = (1<<10),
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
392 Int21 = (1<<11),
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
393 Int22 = (1<<12),
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
394 Int23 = (1<<13),
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
395 RightC = (1<<14),
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
396
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
397 LeftB = (1<<15),
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
398 Int31 = (1<<16),
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
399 Int32 = (1<<17),
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
400 Int33 = (1<<18),
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
401 RightB = (1<<19),
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
402
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
403 BotL = (1<<21),
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
404 BotC = (1<<22),
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
405 BotR = (1<<23)
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
406 };
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
407
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
408 void TerminalView::setKeyboardCursorShape(KeyboardCursorShape shape)
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
409 {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
410 _cursorShape = shape;
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
411 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
412 TerminalView::KeyboardCursorShape TerminalView::keyboardCursorShape() const
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
413 {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
414 return _cursorShape;
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
415 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
416 void TerminalView::setKeyboardCursorColor(bool useForegroundColor, const QColor& color)
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
417 {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
418 if (useForegroundColor)
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
419 _cursorColor = QColor(); // an invalid color means that
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
420 // the foreground color of the
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
421 // current character should
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
422 // be used
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
423
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
424 else
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
425 _cursorColor = color;
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
426 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
427 QColor TerminalView::keyboardCursorColor() const
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
428 {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
429 return _cursorColor;
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
430 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
431
15675
22bd268429d3 Cursor is now blinking in the terminal.
Jacob Dawid <jacob.dawid@gmail.com>
parents: 15673
diff changeset
432 void TerminalView::drawBackground(QPainter& painter, const QRect& rect, const QColor& backgroundColor)
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
433 {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
434 // the area of the widget showing the contents of the terminal display is drawn
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
435 // using the background color from the color scheme set with setColorTable()
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
436 //
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
437 // the area of the widget behind the scroll-bar is drawn using the background
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
438 // brush from the scroll-bar's palette, to give the effect of the scroll-bar
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
439 // being outside of the terminal display and visual consistency with other KDE
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
440 // applications.
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
441 //
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
442 QRect scrollBarArea = _scrollBar->isVisible() ?
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
443 rect.intersected(_scrollBar->geometry()) :
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
444 QRect();
15675
22bd268429d3 Cursor is now blinking in the terminal.
Jacob Dawid <jacob.dawid@gmail.com>
parents: 15673
diff changeset
445
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
446 QRegion contentsRegion = QRegion(rect).subtracted(scrollBarArea);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
447 QRect contentsRect = contentsRegion.boundingRect();
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
448
15675
22bd268429d3 Cursor is now blinking in the terminal.
Jacob Dawid <jacob.dawid@gmail.com>
parents: 15673
diff changeset
449 painter.fillRect(contentsRect, backgroundColor);
28840
99e85801d73f avoid deprecated Qt QPalette::background function
John W. Eaton <jwe@octave.org>
parents: 27829
diff changeset
450 painter.fillRect(scrollBarArea,_scrollBar->palette().window());
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
451 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
452
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
453 void TerminalView::drawCursor(QPainter& painter,
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
454 const QRect& rect,
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
455 const QColor& foregroundColor,
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
456 const QColor& /*backgroundColor*/,
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
457 bool& invertCharacterColor)
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
458 {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
459 QRect cursorRect = rect;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
460 cursorRect.setHeight(_fontHeight - _lineSpacing - 1);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
461
16609
6f7940e36322 improve handling of cursor blinking for unix GUI terminal window
John W. Eaton <jwe@octave.org>
parents: 16606
diff changeset
462 if (!_cursorBlinking)
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
463 {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
464 if ( _cursorColor.isValid() )
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
465 painter.setPen(_cursorColor);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
466 else {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
467 painter.setPen(foregroundColor);
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
468 }
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
469
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
470 if ( _cursorShape == BlockCursor )
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
471 {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
472 // draw the cursor outline, adjusting the area so that
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
473 // it is draw entirely inside 'rect'
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
474 int penWidth = qMax(1,painter.pen().width());
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
475
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
476 painter.drawRect(cursorRect.adjusted(penWidth/2,
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
477 penWidth/2,
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
478 - penWidth/2 - penWidth%2,
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
479 - penWidth/2 - penWidth%2));
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
480 if ( hasFocus() )
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
481 {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
482 painter.fillRect(cursorRect, _cursorColor.isValid() ? _cursorColor : foregroundColor);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
483
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
484 if ( !_cursorColor.isValid() )
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
485 {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
486 // invert the colour used to draw the text to ensure that the character at
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
487 // the cursor position is readable
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
488 invertCharacterColor = true;
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
489 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
490 }
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
491 }
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
492 else if ( _cursorShape == UnderlineCursor )
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
493 painter.drawLine(cursorRect.left(),
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
494 cursorRect.bottom(),
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
495 cursorRect.right(),
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
496 cursorRect.bottom());
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
497 else if ( _cursorShape == IBeamCursor )
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
498 painter.drawLine(cursorRect.left(),
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
499 cursorRect.top(),
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
500 cursorRect.left(),
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
501 cursorRect.bottom());
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
502
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
503 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
504 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
505
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
506 void TerminalView::drawCharacters(QPainter& painter,
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
507 const QRect& rect,
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
508 const QString& text,
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
509 const Character* style,
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
510 bool invertCharacterColor)
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
511 {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
512 // don't draw text which is currently blinking
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
513 if ( _blinking && (style->rendition & RE_BLINK) )
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
514 return;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
515
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
516 // setup bold and underline
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
517 bool useBold = style->rendition & RE_BOLD || style->isBold(_colorTable) || font().bold();
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
518 bool useUnderline = style->rendition & RE_UNDERLINE || font().underline();
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
519
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
520 QFont font = painter.font();
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
521 if ( font.bold() != useBold
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
522 || font.underline() != useUnderline )
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
523 {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
524 font.setBold(useBold);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
525 font.setUnderline(useUnderline);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
526 painter.setFont(font);
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
527 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
528
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
529 const CharacterColor& textColor = ( invertCharacterColor ? style->backgroundColor : style->foregroundColor );
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
530 const QColor color = textColor.color(_colorTable);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
531
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
532 QPen pen = painter.pen();
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
533 if ( pen.color() != color )
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
534 {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
535 pen.setColor(color);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
536 painter.setPen(color);
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
537 }
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
538 // draw text
27829
ba4271934b1c Remove special treatment of line drawing characters in libqterminal (bug #42136)
Markus Mützel <markus.muetzel@gmx.de>
parents: 27548
diff changeset
539 // the drawText(rect,flags,string) overload is used here with null flags
ba4271934b1c Remove special treatment of line drawing characters in libqterminal (bug #42136)
Markus Mützel <markus.muetzel@gmx.de>
parents: 27548
diff changeset
540 // instead of drawText(rect,string) because the (rect,string) overload causes
ba4271934b1c Remove special treatment of line drawing characters in libqterminal (bug #42136)
Markus Mützel <markus.muetzel@gmx.de>
parents: 27548
diff changeset
541 // the application's default layout direction to be used instead of
ba4271934b1c Remove special treatment of line drawing characters in libqterminal (bug #42136)
Markus Mützel <markus.muetzel@gmx.de>
parents: 27548
diff changeset
542 // the widget-specific layout direction, which should always be
ba4271934b1c Remove special treatment of line drawing characters in libqterminal (bug #42136)
Markus Mützel <markus.muetzel@gmx.de>
parents: 27548
diff changeset
543 // Qt::LeftToRight for this widget
ba4271934b1c Remove special treatment of line drawing characters in libqterminal (bug #42136)
Markus Mützel <markus.muetzel@gmx.de>
parents: 27548
diff changeset
544 painter.drawText(rect,0,text);
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
545 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
546
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
547 void TerminalView::drawTextFragment(QPainter& painter ,
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
548 const QRect& rect,
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
549 const QString& text,
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
550 const Character* style)
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
551 {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
552 painter.save();
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
553
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
554 // setup painter
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
555 const QColor foregroundColor = style->foregroundColor.color(_colorTable);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
556 const QColor backgroundColor = style->backgroundColor.color(_colorTable);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
557
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
558 // draw background if different from the display's background color
28840
99e85801d73f avoid deprecated Qt QPalette::background function
John W. Eaton <jwe@octave.org>
parents: 27829
diff changeset
559 if ( backgroundColor != palette().window().color() )
15675
22bd268429d3 Cursor is now blinking in the terminal.
Jacob Dawid <jacob.dawid@gmail.com>
parents: 15673
diff changeset
560 drawBackground(painter,rect,backgroundColor);
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
561
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
562 // draw cursor shape if the current character is the cursor
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
563 // this may alter the foreground and background colors
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
564 bool invertCharacterColor = false;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
565
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
566 if ( style->rendition & RE_CURSOR )
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
567 drawCursor(painter,rect,foregroundColor,backgroundColor,invertCharacterColor);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
568 // draw text
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
569 drawCharacters(painter,rect,text,style,invertCharacterColor);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
570
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
571 painter.restore();
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
572 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
573
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
574 void TerminalView::setRandomSeed(uint randomSeed) { _randomSeed = randomSeed; }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
575 uint TerminalView::randomSeed() const { return _randomSeed; }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
576
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
577 #if 0
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
578 /*!
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
579 Set XIM Position
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
580 */
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
581 void TerminalDisplay::setCursorPos(const int curx, const int cury)
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
582 {
17872
7d9a4eef8022 backout changeset 4de2eeb7d790
John W. Eaton <jwe@octave.org>
parents: 17857
diff changeset
583 QPoint tL = contentsRect().topLeft();
7d9a4eef8022 backout changeset 4de2eeb7d790
John W. Eaton <jwe@octave.org>
parents: 17857
diff changeset
584 int tLx = tL.x();
7d9a4eef8022 backout changeset 4de2eeb7d790
John W. Eaton <jwe@octave.org>
parents: 17857
diff changeset
585 int tLy = tL.y();
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
586
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
587 int xpos, ypos;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
588 ypos = _topMargin + tLy + _fontHeight*(cury-1) + _fontAscent;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
589 xpos = _leftMargin + tLx + _fontWidth*curx;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
590 //setMicroFocusHint(xpos, ypos, 0, _fontHeight); //### ???
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
591 // fprintf(stderr, "x/y = %d/%d\txpos/ypos = %d/%d\n", curx, cury, xpos, ypos);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
592 _cursorLine = cury;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
593 _cursorCol = curx;
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
594 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
595 #endif
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
596
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
597 // scrolls the image by 'lines', down if lines > 0 or up otherwise.
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
598 //
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
599 // the terminal emulation keeps track of the scrolling of the character
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
600 // image as it receives input, and when the view is updated, it calls scrollImage()
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
601 // with the final scroll amount. this improves performance because scrolling the
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
602 // display is much cheaper than re-rendering all the text for the
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
603 // part of the image which has moved up or down.
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
604 // Instead only new lines have to be drawn
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
605 //
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
606 // note: it is important that the area of the display which is
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
607 // scrolled aligns properly with the character grid -
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
608 // which has a top left point at (_leftMargin,_topMargin) ,
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
609 // a cell width of _fontWidth and a cell height of _fontHeight).
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
610 void TerminalView::scrollImage(int lines , const QRect& screenWindowRegion)
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
611 {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
612 // if the flow control warning is enabled this will interfere with the
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
613 // scrolling optimisations and cause artifacts. the simple solution here
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
614 // is to just disable the optimisation whilst it is visible
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
615 if ( _outputSuspendedLabel && _outputSuspendedLabel->isVisible() ) {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
616 return;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
617 }
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
618
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
619 // constrain the region to the display
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
620 // the bottom of the region is capped to the number of lines in the display's
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
621 // internal image - 2, so that the height of 'region' is strictly less
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
622 // than the height of the internal image.
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
623 QRect region = screenWindowRegion;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
624 region.setBottom( qMin(region.bottom(),this->_lines-2) );
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
625
23795
980f39c3ab90 Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23787
diff changeset
626 if (lines == 0
980f39c3ab90 Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23787
diff changeset
627 || _image == nullptr
980f39c3ab90 Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23787
diff changeset
628 || !region.isValid()
980f39c3ab90 Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23787
diff changeset
629 || (region.top() + abs(lines)) >= region.bottom()
980f39c3ab90 Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23787
diff changeset
630 || this->_lines <= region.height() )
980f39c3ab90 Use C++11 nullptr rather than 0 in code (bug #51565).
Rik <rik@octave.org>
parents: 23787
diff changeset
631 return;
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
632
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
633 QRect scrollRect;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
634
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
635 void* firstCharPos = &_image[ region.top() * this->_columns ];
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
636 void* lastCharPos = &_image[ (region.top() + abs(lines)) * this->_columns ];
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
637
17872
7d9a4eef8022 backout changeset 4de2eeb7d790
John W. Eaton <jwe@octave.org>
parents: 17857
diff changeset
638 int top = _topMargin + (region.top() * _fontHeight);
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
639 int linesToMove = region.height() - abs(lines);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
640 int bytesToMove = linesToMove *
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
641 this->_columns *
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
642 sizeof(Character);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
643
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
644 Q_ASSERT( linesToMove > 0 );
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
645 Q_ASSERT( bytesToMove > 0 );
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
646
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
647 //scroll internal image
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
648 if ( lines > 0 )
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
649 {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
650 // check that the memory areas that we are going to move are valid
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
651 Q_ASSERT( (char*)lastCharPos + bytesToMove <
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
652 (char*)(_image + (this->_lines * this->_columns)) );
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
653
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
654 Q_ASSERT( (lines*this->_columns) < _imageSize );
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
655
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
656 //scroll internal image down
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
657 memmove( firstCharPos , lastCharPos , bytesToMove );
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
658
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
659 //set region of display to scroll, making sure that
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
660 //the region aligns correctly to the character grid
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
661 scrollRect = QRect( _leftMargin , top,
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
662 this->_usedColumns * _fontWidth ,
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
663 linesToMove * _fontHeight );
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
664 }
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
665 else
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
666 {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
667 // check that the memory areas that we are going to move are valid
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
668 Q_ASSERT( (char*)firstCharPos + bytesToMove <
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
669 (char*)(_image + (this->_lines * this->_columns)) );
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
670
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
671 //scroll internal image up
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
672 memmove( lastCharPos , firstCharPos , bytesToMove );
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
673
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
674 //set region of the display to scroll, making sure that
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
675 //the region aligns correctly to the character grid
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
676 QPoint topPoint( _leftMargin , top + abs(lines)*_fontHeight );
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
677
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
678 scrollRect = QRect( topPoint ,
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
679 QSize( this->_usedColumns*_fontWidth ,
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
680 linesToMove * _fontHeight ));
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
681 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
682
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
683 //scroll the display vertically to match internal _image
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
684 scroll( 0 , _fontHeight * (-lines) , scrollRect );
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
685 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
686
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
687 QRegion TerminalView::hotSpotRegion() const
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
688 {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
689 QRegion region;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
690 foreach( Filter::HotSpot* hotSpot , _filterChain->hotSpots() )
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
691 {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
692 QRect rect;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
693 rect.setLeft(hotSpot->startColumn());
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
694 rect.setTop(hotSpot->startLine());
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
695 rect.setRight(hotSpot->endColumn());
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
696 rect.setBottom(hotSpot->endLine());
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
697
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
698 region |= imageToWidget(rect);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
699 }
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
700 return region;
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
701 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
702
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
703 void TerminalView::processFilters()
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
704 {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
705 if (!_screenWindow)
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
706 return;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
707
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
708 QRegion preUpdateHotSpots = hotSpotRegion();
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
709
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
710 // use _screenWindow->getImage() here rather than _image because
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
711 // other classes may call processFilters() when this display's
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
712 // ScreenWindow emits a scrolled() signal - which will happen before
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
713 // updateImage() is called on the display and therefore _image is
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
714 // out of date at this point
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
715 _filterChain->setImage( _screenWindow->getImage(),
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
716 _screenWindow->windowLines(),
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
717 _screenWindow->windowColumns(),
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
718 _screenWindow->getLineProperties() );
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
719 _filterChain->process();
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
720
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
721 QRegion postUpdateHotSpots = hotSpotRegion();
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
722
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
723 update( preUpdateHotSpots | postUpdateHotSpots );
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
724 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
725
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
726 void TerminalView::updateImage()
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
727 {
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
728 if ( !_screenWindow )
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
729 return;
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
730 updateLineProperties();
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
731
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
732 // optimization - scroll the existing image where possible and
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
733 // avoid expensive text drawing for parts of the image that
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
734 // can simply be moved up or down
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
735 scrollImage( _screenWindow->scrollCount() ,
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
736 _screenWindow->scrollRegion() );
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
737 _screenWindow->resetScrollCount();
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
738
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
739 Character* const newimg = _screenWindow->getImage();
24043
f50ef29d874e Fix heap-buffer-overflow in GUI terminal code (51948).
Rik <rik@octave.org>
parents: 23808
diff changeset
740 int lines = _screenWindow->windowLines();
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
741 int columns = _screenWindow->windowColumns();
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
742
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
743 setScroll( _screenWindow->currentLine() , _screenWindow->lineCount() );
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
744
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
745 if (!_image)
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
746 updateImageSize(); // Create _image
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
747
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
748 Q_ASSERT( this->_usedLines <= this->_lines );
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
749 Q_ASSERT( this->_usedColumns <= this->_columns );
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
750
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
751 int y,x,len;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
752
17872
7d9a4eef8022 backout changeset 4de2eeb7d790
John W. Eaton <jwe@octave.org>
parents: 17857
diff changeset
753 QPoint tL = contentsRect().topLeft();
7d9a4eef8022 backout changeset 4de2eeb7d790
John W. Eaton <jwe@octave.org>
parents: 17857
diff changeset
754
7d9a4eef8022 backout changeset 4de2eeb7d790
John W. Eaton <jwe@octave.org>
parents: 17857
diff changeset
755 int tLx = tL.x();
7d9a4eef8022 backout changeset 4de2eeb7d790
John W. Eaton <jwe@octave.org>
parents: 17857
diff changeset
756 int tLy = tL.y();
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
757 _hasBlinker = false;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
758
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
759 CharacterColor cf; // undefined
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
760 CharacterColor _clipboard; // undefined
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
761 int cr = -1; // undefined
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
762
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
763 const int linesToUpdate = qMin(this->_lines, qMax(0,lines ));
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
764 const int columnsToUpdate = qMin(this->_columns,qMax(0,columns));
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
765
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
766 QChar *disstrU = new QChar[columnsToUpdate];
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
767 char *dirtyMask = new char[columnsToUpdate+2];
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
768 QRegion dirtyRegion;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
769
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
770 // debugging variable, this records the number of lines that are found to
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
771 // be 'dirty' ( ie. have changed from the old _image to the new _image ) and
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
772 // which therefore need to be repainted
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
773 int dirtyLineCount = 0;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
774
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
775 for (y = 0; y < linesToUpdate; y++)
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
776 {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
777 const Character* currentLine = &_image[y*this->_columns];
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
778 const Character* const newLine = &newimg[y*columns];
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
779
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
780 bool updateLine = false;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
781
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
782 // The dirty mask indicates which characters need repainting. We also
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
783 // mark surrounding neighbours dirty, in case the character exceeds
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
784 // its cell boundaries
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
785 memset(dirtyMask, 0, columnsToUpdate+2);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
786
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
787 for( x = 0 ; x < columnsToUpdate ; x++)
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
788 {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
789 if ( newLine[x] != currentLine[x] )
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
790 {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
791 dirtyMask[x] = true;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
792 }
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
793 }
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
794
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
795 if (!_resizing) // not while _resizing, we're expecting a paintEvent
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
796 for (x = 0; x < columnsToUpdate; x++)
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
797 {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
798 _hasBlinker |= (newLine[x].rendition & RE_BLINK);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
799
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
800 // Start drawing if this character or the next one differs.
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
801 // We also take the next one into account to handle the situation
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
802 // where characters exceed their cell width.
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
803 if (dirtyMask[x])
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
804 {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
805 quint16 c = newLine[x+0].character;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
806 if ( !c )
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
807 continue;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
808 int p = 0;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
809 disstrU[p++] = c; //fontMap(c);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
810 bool doubleWidth = (x+1 == columnsToUpdate) ? false : (newLine[x+1].character == 0);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
811 cr = newLine[x].rendition;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
812 _clipboard = newLine[x].backgroundColor;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
813 if (newLine[x].foregroundColor != cf) cf = newLine[x].foregroundColor;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
814 int lln = columnsToUpdate - x;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
815 for (len = 1; len < lln; len++)
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
816 {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
817 const Character& ch = newLine[x+len];
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
818
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
819 if (!ch.character)
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
820 continue; // Skip trailing part of multi-col chars.
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
821
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
822 bool nextIsDoubleWidth = (x+len+1 == columnsToUpdate) ? false : (newLine[x+len+1].character == 0);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
823
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
824 if ( ch.foregroundColor != cf ||
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
825 ch.backgroundColor != _clipboard ||
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
826 ch.rendition != cr ||
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
827 !dirtyMask[x+len] ||
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
828 nextIsDoubleWidth != doubleWidth )
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
829 break;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
830
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
831 disstrU[p++] = c; //fontMap(c);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
832 }
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
833
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
834 QString unistr(disstrU, p);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
835
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
836 bool saveFixedFont = _fixedFont;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
837 if (doubleWidth)
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
838 _fixedFont = false;
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
839
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
840 updateLine = true;
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
841
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
842 _fixedFont = saveFixedFont;
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
843 x += len - 1;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
844 }
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
845
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
846 }
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
847
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
848 //both the top and bottom halves of double height _lines must always be redrawn
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
849 //although both top and bottom halves contain the same characters, only
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
850 //the top one is actually
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
851 //drawn.
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
852 if (_lineProperties.count() > y)
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
853 updateLine |= (_lineProperties[y] & LINE_DOUBLEHEIGHT);
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
854
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
855 // if the characters on the line are different in the old and the new _image
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
856 // then this line must be repainted.
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
857 if (updateLine)
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
858 {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
859 dirtyLineCount++;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
860
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
861 // add the area occupied by this line to the region which needs to be
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
862 // repainted
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
863 QRect dirtyRect = QRect( _leftMargin+tLx ,
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
864 _topMargin+tLy+_fontHeight*y ,
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
865 _fontWidth * columnsToUpdate ,
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
866 _fontHeight );
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
867
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
868 dirtyRegion |= dirtyRect;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
869 }
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
870
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
871 // replace the line of characters in the old _image with the
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
872 // current line of the new _image
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
873 memcpy((void*)currentLine,(const void*)newLine,columnsToUpdate*sizeof(Character));
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
874 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
875
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
876 // if the new _image is smaller than the previous _image, then ensure that the area
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
877 // outside the new _image is cleared
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
878 if ( linesToUpdate < _usedLines )
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
879 {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
880 dirtyRegion |= QRect( _leftMargin+tLx ,
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
881 _topMargin+tLy+_fontHeight*linesToUpdate ,
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
882 _fontWidth * this->_columns ,
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
883 _fontHeight * (_usedLines-linesToUpdate) );
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
884 }
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
885 _usedLines = linesToUpdate;
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
886
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
887 if ( columnsToUpdate < _usedColumns )
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
888 {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
889 dirtyRegion |= QRect( _leftMargin+tLx+columnsToUpdate*_fontWidth ,
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
890 _topMargin+tLy ,
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
891 _fontWidth * (_usedColumns-columnsToUpdate) ,
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
892 _fontHeight * this->_lines );
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
893 }
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
894 _usedColumns = columnsToUpdate;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
895
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
896 dirtyRegion |= _inputMethodData.previousPreeditRect;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
897
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
898 // update the parts of the display which have changed
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
899 update(dirtyRegion);
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
900
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
901 if ( _hasBlinker && !_blinkTimer->isActive()) _blinkTimer->start( BLINK_DELAY );
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
902 if (!_hasBlinker && _blinkTimer->isActive()) { _blinkTimer->stop(); _blinking = false; }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
903 delete[] dirtyMask;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
904 delete[] disstrU;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
905
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
906 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
907
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
908 void TerminalView::showResizeNotification()
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
909 {
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
910 if (_terminalSizeHint && isVisible())
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
911 {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
912 if (_terminalSizeStartup) {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
913 _terminalSizeStartup=false;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
914 return;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
915 }
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
916 if (!_resizeWidget)
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
917 {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
918 _resizeWidget = new QLabel(("Size: XXX x XXX"), this);
28846
2219027f5bd4 avoid deprecated Qt QFontMetrics::width function
John W. Eaton <jwe@octave.org>
parents: 28845
diff changeset
919 _resizeWidget->setMinimumWidth(octave::qt_fontmetrics_horizontal_advance(_resizeWidget->fontMetrics(), "Size: XXX x XXX"));
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
920 _resizeWidget->setMinimumHeight(_resizeWidget->sizeHint().height());
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
921 _resizeWidget->setAlignment(Qt::AlignCenter);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
922
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
923 _resizeWidget->setStyleSheet("background-color:palette(window);border-style:solid;border-width:1px;border-color:palette(dark)");
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
924
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
925 _resizeTimer = new QTimer(this);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
926 _resizeTimer->setSingleShot(true);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
927 connect(_resizeTimer, SIGNAL(timeout()), _resizeWidget, SLOT(hide()));
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
928
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
929 }
28844
2df0c2d86d50 avoid deprecated Qt QString::sprintf function
John W. Eaton <jwe@octave.org>
parents: 28843
diff changeset
930 QString sizeStr = QString("Size: %1 x %2").arg(_columns).arg(_lines);
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
931 _resizeWidget->setText(sizeStr);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
932 _resizeWidget->move((width()-_resizeWidget->width())/2,
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
933 (height()-_resizeWidget->height())/2+20);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
934 _resizeWidget->show();
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
935 _resizeTimer->start(1000);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
936 }
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
937 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
938
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
939 void TerminalView::setBlinkingCursor(bool blink)
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
940 {
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
941 _hasBlinkingCursor=blink;
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
942
16609
6f7940e36322 improve handling of cursor blinking for unix GUI terminal window
John W. Eaton <jwe@octave.org>
parents: 16606
diff changeset
943 setBlinkingCursorState(blink);
6f7940e36322 improve handling of cursor blinking for unix GUI terminal window
John W. Eaton <jwe@octave.org>
parents: 16606
diff changeset
944 }
6f7940e36322 improve handling of cursor blinking for unix GUI terminal window
John W. Eaton <jwe@octave.org>
parents: 16606
diff changeset
945
6f7940e36322 improve handling of cursor blinking for unix GUI terminal window
John W. Eaton <jwe@octave.org>
parents: 16606
diff changeset
946 void TerminalView::setBlinkingCursorState(bool blink)
6f7940e36322 improve handling of cursor blinking for unix GUI terminal window
John W. Eaton <jwe@octave.org>
parents: 16606
diff changeset
947 {
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
948 if (blink && !_blinkCursorTimer->isActive())
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
949 _blinkCursorTimer->start(BLINK_DELAY);
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
950
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
951 if (!blink && _blinkCursorTimer->isActive())
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
952 {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
953 _blinkCursorTimer->stop();
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
954 if (_cursorBlinking)
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
955 blinkCursorEvent();
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
956 }
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
957 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
958
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
959 void TerminalView::paintEvent( QPaintEvent* pe )
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
960 {
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
961 updateImage();
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
962 //qDebug("%s %d paintEvent", __FILE__, __LINE__);
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
963 QPainter paint(this);
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
964 //qDebug("%s %d paintEvent %d %d", __FILE__, __LINE__, paint.window().top(), paint.window().right());
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
965
28845
50c112129700 avoid deprecated Qt QRegion::rects function
John W. Eaton <jwe@octave.org>
parents: 28844
diff changeset
966 #if defined (HAVE_QREGION_ITERATORS)
50c112129700 avoid deprecated Qt QRegion::rects function
John W. Eaton <jwe@octave.org>
parents: 28844
diff changeset
967 for (QRect rect : (pe->region() & contentsRect()))
50c112129700 avoid deprecated Qt QRegion::rects function
John W. Eaton <jwe@octave.org>
parents: 28844
diff changeset
968 #else
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
969 foreach (QRect rect, (pe->region() & contentsRect()).rects())
28845
50c112129700 avoid deprecated Qt QRegion::rects function
John W. Eaton <jwe@octave.org>
parents: 28844
diff changeset
970 #endif
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
971 {
28840
99e85801d73f avoid deprecated Qt QPalette::background function
John W. Eaton <jwe@octave.org>
parents: 27829
diff changeset
972 drawBackground(paint,rect,palette().window().color());
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
973 drawContents(paint, rect);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
974 }
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
975 // drawBackground(paint,contentsRect(),palette().background().color(), true /* use opacity setting */);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
976 // drawContents(paint, contentsRect());
15675
22bd268429d3 Cursor is now blinking in the terminal.
Jacob Dawid <jacob.dawid@gmail.com>
parents: 15673
diff changeset
977 drawInputMethodPreeditString(paint,preeditRect());
22bd268429d3 Cursor is now blinking in the terminal.
Jacob Dawid <jacob.dawid@gmail.com>
parents: 15673
diff changeset
978 paintFilters(paint);
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
979 paint.end();
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
980 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
981
16609
6f7940e36322 improve handling of cursor blinking for unix GUI terminal window
John W. Eaton <jwe@octave.org>
parents: 16606
diff changeset
982 void TerminalView::focusInEvent(QFocusEvent *focusEvent)
6f7940e36322 improve handling of cursor blinking for unix GUI terminal window
John W. Eaton <jwe@octave.org>
parents: 16606
diff changeset
983 {
16970
78116b88dbf5 enable readline key bindings in terminal widget of gui (bug #36986)
Torsten <ttl@justmail.de>
parents: 16956
diff changeset
984 emit set_global_shortcuts_signal (false); // disable some shortcuts
78116b88dbf5 enable readline key bindings in terminal widget of gui (bug #36986)
Torsten <ttl@justmail.de>
parents: 16956
diff changeset
985
16609
6f7940e36322 improve handling of cursor blinking for unix GUI terminal window
John W. Eaton <jwe@octave.org>
parents: 16606
diff changeset
986 setBlinkingCursorState(true);
6f7940e36322 improve handling of cursor blinking for unix GUI terminal window
John W. Eaton <jwe@octave.org>
parents: 16606
diff changeset
987 updateImage();
6f7940e36322 improve handling of cursor blinking for unix GUI terminal window
John W. Eaton <jwe@octave.org>
parents: 16606
diff changeset
988 repaint();
6f7940e36322 improve handling of cursor blinking for unix GUI terminal window
John W. Eaton <jwe@octave.org>
parents: 16606
diff changeset
989 update();
6f7940e36322 improve handling of cursor blinking for unix GUI terminal window
John W. Eaton <jwe@octave.org>
parents: 16606
diff changeset
990
6f7940e36322 improve handling of cursor blinking for unix GUI terminal window
John W. Eaton <jwe@octave.org>
parents: 16606
diff changeset
991 QWidget::focusInEvent(focusEvent);
6f7940e36322 improve handling of cursor blinking for unix GUI terminal window
John W. Eaton <jwe@octave.org>
parents: 16606
diff changeset
992 }
6f7940e36322 improve handling of cursor blinking for unix GUI terminal window
John W. Eaton <jwe@octave.org>
parents: 16606
diff changeset
993
6f7940e36322 improve handling of cursor blinking for unix GUI terminal window
John W. Eaton <jwe@octave.org>
parents: 16606
diff changeset
994 void TerminalView::focusOutEvent(QFocusEvent *focusEvent)
6f7940e36322 improve handling of cursor blinking for unix GUI terminal window
John W. Eaton <jwe@octave.org>
parents: 16606
diff changeset
995 {
16970
78116b88dbf5 enable readline key bindings in terminal widget of gui (bug #36986)
Torsten <ttl@justmail.de>
parents: 16956
diff changeset
996 emit set_global_shortcuts_signal (true); // re-enable shortcuts
78116b88dbf5 enable readline key bindings in terminal widget of gui (bug #36986)
Torsten <ttl@justmail.de>
parents: 16956
diff changeset
997
16609
6f7940e36322 improve handling of cursor blinking for unix GUI terminal window
John W. Eaton <jwe@octave.org>
parents: 16606
diff changeset
998 // Force the cursor to be redrawn.
6f7940e36322 improve handling of cursor blinking for unix GUI terminal window
John W. Eaton <jwe@octave.org>
parents: 16606
diff changeset
999 _cursorBlinking = true;
6f7940e36322 improve handling of cursor blinking for unix GUI terminal window
John W. Eaton <jwe@octave.org>
parents: 16606
diff changeset
1000 setBlinkingCursorState(false);
6f7940e36322 improve handling of cursor blinking for unix GUI terminal window
John W. Eaton <jwe@octave.org>
parents: 16606
diff changeset
1001
6f7940e36322 improve handling of cursor blinking for unix GUI terminal window
John W. Eaton <jwe@octave.org>
parents: 16606
diff changeset
1002 QWidget::focusOutEvent(focusEvent);
6f7940e36322 improve handling of cursor blinking for unix GUI terminal window
John W. Eaton <jwe@octave.org>
parents: 16606
diff changeset
1003 }
6f7940e36322 improve handling of cursor blinking for unix GUI terminal window
John W. Eaton <jwe@octave.org>
parents: 16606
diff changeset
1004
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1005 QPoint TerminalView::cursorPosition() const
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1006 {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1007 if (_screenWindow)
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1008 return _screenWindow->cursorPosition();
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1009 else
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1010 return QPoint(0,0);
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1011 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1012
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1013 QRect TerminalView::preeditRect() const
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1014 {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1015 const int preeditLength = string_width(_inputMethodData.preeditString);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1016
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1017 if ( preeditLength == 0 )
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1018 return QRect();
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1019
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1020 return QRect(_leftMargin + _fontWidth*cursorPosition().x(),
17872
7d9a4eef8022 backout changeset 4de2eeb7d790
John W. Eaton <jwe@octave.org>
parents: 17857
diff changeset
1021 _topMargin + _fontHeight*cursorPosition().y(),
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1022 _fontWidth*preeditLength,
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1023 _fontHeight);
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
1024 }
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1025
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1026 void TerminalView::drawInputMethodPreeditString(QPainter& painter , const QRect& rect)
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1027 {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1028 if ( _inputMethodData.preeditString.isEmpty() ) {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1029 return;
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1030 }
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1031 const QPoint cursorPos = cursorPosition();
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1032
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1033 bool invertColors = false;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1034 const QColor background = _colorTable[DEFAULT_BACK_COLOR].color;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1035 const QColor foreground = _colorTable[DEFAULT_FORE_COLOR].color;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1036 const Character* style = &_image[loc(cursorPos.x(),cursorPos.y())];
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1037
15675
22bd268429d3 Cursor is now blinking in the terminal.
Jacob Dawid <jacob.dawid@gmail.com>
parents: 15673
diff changeset
1038 drawBackground(painter,rect,background);
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1039 drawCursor(painter,rect,foreground,background,invertColors);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1040 drawCharacters(painter,rect,_inputMethodData.preeditString,style,invertColors);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1041
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1042 _inputMethodData.previousPreeditRect = rect;
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1043 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1044
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1045 FilterChain* TerminalView::filterChain() const
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1046 {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1047 return _filterChain;
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1048 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1049
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1050 void TerminalView::paintFilters(QPainter& painter)
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1051 {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1052 //qDebug("%s %d paintFilters", __FILE__, __LINE__);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1053
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1054 // get color of character under mouse and use it to draw
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1055 // lines for filters
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1056 QPoint cursorPos = mapFromGlobal(QCursor::pos());
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1057 int cursorLine;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1058 int cursorColumn;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1059 getCharacterPosition( cursorPos , cursorLine , cursorColumn );
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1060 Character cursorCharacter = _image[loc(cursorColumn,cursorLine)];
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1061
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1062 painter.setPen( QPen(cursorCharacter.foregroundColor.color(colorTable())) );
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1063
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1064 // iterate over hotspots identified by the display's currently active filters
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1065 // and draw appropriate visuals to indicate the presence of the hotspot
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1066
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1067 QList<Filter::HotSpot*> spots = _filterChain->hotSpots();
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1068 QListIterator<Filter::HotSpot*> iter(spots);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1069 while (iter.hasNext())
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1070 {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1071 Filter::HotSpot* spot = iter.next();
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1072
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1073 for ( int line = spot->startLine() ; line <= spot->endLine() ; line++ )
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1074 {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1075 int startColumn = 0;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1076 int endColumn = _columns-1; // TODO use number of _columns which are actually
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1077 // occupied on this line rather than the width of the
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1078 // display in _columns
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1079
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1080 // ignore whitespace at the end of the lines
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1081 while ( QChar(_image[loc(endColumn,line)].character).isSpace() && endColumn > 0 )
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1082 endColumn--;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1083
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1084 // increment here because the column which we want to set 'endColumn' to
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1085 // is the first whitespace character at the end of the line
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1086 endColumn++;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1087
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1088 if ( line == spot->startLine() )
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1089 startColumn = spot->startColumn();
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1090 if ( line == spot->endLine() )
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1091 endColumn = spot->endColumn();
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1092
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1093 // subtract one pixel from
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1094 // the right and bottom so that
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1095 // we do not overdraw adjacent
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1096 // hotspots
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1097 //
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1098 // subtracting one pixel from all sides also prevents an edge case where
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1099 // moving the mouse outside a link could still leave it underlined
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1100 // because the check below for the position of the cursor
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1101 // finds it on the border of the target area
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1102 QRect r;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1103 r.setCoords( startColumn*_fontWidth + 1, line*_fontHeight + 1,
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1104 endColumn*_fontWidth - 1, (line+1)*_fontHeight - 1 );
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1105
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1106 // Underline link hotspots
23404
314ac710f2ae highlight error messages in gui and provide links to open files (bug #35619)
Torsten <mttl@mailbox.org>
parents: 23403
diff changeset
1107 if ( spot->type() == Filter::Link ||
314ac710f2ae highlight error messages in gui and provide links to open files (bug #35619)
Torsten <mttl@mailbox.org>
parents: 23403
diff changeset
1108 spot->type() == Filter::ErrorLink)
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1109 {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1110 QFontMetrics metrics(font());
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1111
24133
d52aa3a2794a fix link underline position in gui terminal
Torsten <mttl@mailbox.org>
parents: 24043
diff changeset
1112 // find the baseline (which is the invisible line that the
d52aa3a2794a fix link underline position in gui terminal
Torsten <mttl@mailbox.org>
parents: 24043
diff changeset
1113 // characters in the font sit on
d52aa3a2794a fix link underline position in gui terminal
Torsten <mttl@mailbox.org>
parents: 24043
diff changeset
1114 int baseline = r.bottom() + 1;
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1115 // find the position of the underline below that
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1116 int underlinePos = baseline + metrics.underlinePos();
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1117
23472
c8722519330a remove color highlight of error messages in gui console
Torsten <mttl@mailbox.org>
parents: 23404
diff changeset
1118 if (r.contains (mapFromGlobal(QCursor::pos())))
c8722519330a remove color highlight of error messages in gui console
Torsten <mttl@mailbox.org>
parents: 23404
diff changeset
1119 {
c8722519330a remove color highlight of error messages in gui console
Torsten <mttl@mailbox.org>
parents: 23404
diff changeset
1120 if (spot->type () == Filter::ErrorLink)
c8722519330a remove color highlight of error messages in gui console
Torsten <mttl@mailbox.org>
parents: 23404
diff changeset
1121 painter.setPen (QColor (255,0,0));
c8722519330a remove color highlight of error messages in gui console
Torsten <mttl@mailbox.org>
parents: 23404
diff changeset
1122 painter.drawLine (r.left(), underlinePos,
24133
d52aa3a2794a fix link underline position in gui terminal
Torsten <mttl@mailbox.org>
parents: 24043
diff changeset
1123 r.right() + 2, underlinePos);
23472
c8722519330a remove color highlight of error messages in gui console
Torsten <mttl@mailbox.org>
parents: 23404
diff changeset
1124 }
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1125 }
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1126 // Marker hotspots simply have a transparent rectanglular shape
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1127 // drawn on top of them
23472
c8722519330a remove color highlight of error messages in gui console
Torsten <mttl@mailbox.org>
parents: 23404
diff changeset
1128 else if ( spot->type() == Filter::Marker )
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1129 {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1130 //TODO - Do not use a hardcoded colour for this
23472
c8722519330a remove color highlight of error messages in gui console
Torsten <mttl@mailbox.org>
parents: 23404
diff changeset
1131 painter.fillRect(r,QBrush(QColor(255,0,0,120)));
23404
314ac710f2ae highlight error messages in gui and provide links to open files (bug #35619)
Torsten <mttl@mailbox.org>
parents: 23403
diff changeset
1132 }
314ac710f2ae highlight error messages in gui and provide links to open files (bug #35619)
Torsten <mttl@mailbox.org>
parents: 23403
diff changeset
1133
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1134 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1135 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1136 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1137 void TerminalView::drawContents(QPainter &paint, const QRect &rect)
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1138 {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1139 //qDebug("%s %d drawContents and rect x=%d y=%d w=%d h=%d", __FILE__, __LINE__, rect.x(), rect.y(),rect.width(),rect.height());
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1140
17872
7d9a4eef8022 backout changeset 4de2eeb7d790
John W. Eaton <jwe@octave.org>
parents: 17857
diff changeset
1141 QPoint topLeft = contentsRect().topLeft();
7d9a4eef8022 backout changeset 4de2eeb7d790
John W. Eaton <jwe@octave.org>
parents: 17857
diff changeset
1142 // Take the topmost vertical position for the view.
7d9a4eef8022 backout changeset 4de2eeb7d790
John W. Eaton <jwe@octave.org>
parents: 17857
diff changeset
1143 int topLeftY = topLeft.y();
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1144
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1145 // In Konsole, the view has been centered. Don't do that here, since there
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1146 // are strange hopping effects during a resize when the view does no match
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1147 // exactly the widget width.
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1148 // int topLeftX = (_contentWidth - _usedColumns * _fontWidth) / 2;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1149 int topLeftX = 0;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1150
17857
c17a3e43956b avoid partial lines at top of command window
John W. Eaton <jwe@octave.org>
parents: 17852
diff changeset
1151 int leftUpperX = qMin(_usedColumns-1, qMax(0, qFloor((rect.left() - topLeftX - _leftMargin ) / _fontWidth)));
c17a3e43956b avoid partial lines at top of command window
John W. Eaton <jwe@octave.org>
parents: 17852
diff changeset
1152 int leftUpperY = qMin(_usedLines-1, qMax(0, qFloor((rect.top() - topLeftY - _topMargin ) / _fontHeight)));
c17a3e43956b avoid partial lines at top of command window
John W. Eaton <jwe@octave.org>
parents: 17852
diff changeset
1153 int rightLowerX = qMin(_usedColumns-1, qMax(0, qFloor((rect.right() - topLeftX - _leftMargin ) / _fontWidth)));
c17a3e43956b avoid partial lines at top of command window
John W. Eaton <jwe@octave.org>
parents: 17852
diff changeset
1154 int rightLowerY = qMin(_usedLines-1, qMax(0, qFloor((rect.bottom() - topLeftY - _topMargin ) / _fontHeight)));
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1155
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1156 const int bufferSize = _usedColumns;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1157 QChar *disstrU = new QChar[bufferSize];
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1158 for (int y = leftUpperY; y <= rightLowerY; y++)
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1159 {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1160 quint16 c = _image[loc(leftUpperX,y)].character;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1161 int x = leftUpperX;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1162 if(!c && x)
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1163 x--; // Search for start of multi-column character
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1164 for (; x <= rightLowerX; x++)
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1165 {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1166 int len = 1;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1167 int p = 0;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1168
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1169 // is this a single character or a sequence of characters ?
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1170 if ( _image[loc(x,y)].rendition & RE_EXTENDED_CHAR )
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1171 {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1172 // sequence of characters
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1173 ushort extendedCharLength = 0;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1174 ushort* chars = ExtendedCharTable::instance
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1175 .lookupExtendedChar(_image[loc(x,y)].charSequence,extendedCharLength);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1176 for ( int index = 0 ; index < extendedCharLength ; index++ )
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1177 {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1178 Q_ASSERT( p < bufferSize );
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1179 disstrU[p++] = chars[index];
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1180 }
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1181 }
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1182 else
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1183 {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1184 // single character
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1185 c = _image[loc(x,y)].character;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1186 if (c)
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1187 {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1188 Q_ASSERT( p < bufferSize );
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1189 disstrU[p++] = c; //fontMap(c);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1190 }
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1191 }
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1192
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1193 bool doubleWidth = (_image[ qMin(loc(x,y)+1,_imageSize) ].character == 0);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1194 CharacterColor currentForeground = _image[loc(x,y)].foregroundColor;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1195 CharacterColor currentBackground = _image[loc(x,y)].backgroundColor;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1196 quint8 currentRendition = _image[loc(x,y)].rendition;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1197
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1198 while (x+len <= rightLowerX &&
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1199 _image[loc(x+len,y)].foregroundColor == currentForeground &&
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1200 _image[loc(x+len,y)].backgroundColor == currentBackground &&
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1201 _image[loc(x+len,y)].rendition == currentRendition &&
27829
ba4271934b1c Remove special treatment of line drawing characters in libqterminal (bug #42136)
Markus Mützel <markus.muetzel@gmx.de>
parents: 27548
diff changeset
1202 (_image[ qMin(loc(x+len,y)+1,_imageSize) ].character == 0) == doubleWidth)
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1203 {
27829
ba4271934b1c Remove special treatment of line drawing characters in libqterminal (bug #42136)
Markus Mützel <markus.muetzel@gmx.de>
parents: 27548
diff changeset
1204 c = _image[loc(x+len,y)].character;
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1205 if (c)
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1206 disstrU[p++] = c; //fontMap(c);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1207 if (doubleWidth) // assert((_image[loc(x+len,y)+1].character == 0)), see above if condition
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1208 len++; // Skip trailing part of multi-column character
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1209 len++;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1210 }
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1211 if ((x+len < _usedColumns) && (!_image[loc(x+len,y)].character))
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1212 len++; // Adjust for trailing part of multi-column character
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1213
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1214 bool save__fixedFont = _fixedFont;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1215 if (doubleWidth)
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1216 _fixedFont = false;
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1217 QString unistr(disstrU,p);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1218
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1219 if (y < _lineProperties.size())
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1220 {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1221 if (_lineProperties[y] & LINE_DOUBLEWIDTH) {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1222 paint.scale(2,1);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1223 }
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1224
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1225 if (_lineProperties[y] & LINE_DOUBLEHEIGHT) {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1226 paint.scale(1,2);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1227 }
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1228 }
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1229
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1230 // calculate the area in which the text will be drawn
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1231 QRect textArea = QRect( _leftMargin+topLeftX+_fontWidth*x ,
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1232 _topMargin+topLeftY+_fontHeight*y ,
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1233 _fontWidth*len,
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1234 _fontHeight);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1235
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1236 // move the calculated area to take account of scaling applied to the painter.
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1237 // the position of the area from the origin (0,0) is scaled
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1238 // by the opposite of whatever
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1239 // transformation has been applied to the painter. this ensures that
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1240 // painting does actually start from textArea.topLeft()
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1241 // (instead of textArea.topLeft() * painter-scale)
28843
429275a362c4 avoid deprecated Qt QDrag::start function
John W. Eaton <jwe@octave.org>
parents: 28841
diff changeset
1242 QTransform inverted = paint.transform().inverted();
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1243 textArea.moveCenter( inverted.map(textArea.center()) );
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1244
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1245
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1246 //paint text fragment
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1247 drawTextFragment( paint,
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1248 textArea,
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1249 unistr,
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1250 &_image[loc(x,y)] );
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1251
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1252
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1253 _fixedFont = save__fixedFont;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1254
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1255 //reset back to single-width, single-height _lines
28841
f1094bbf516b avoid deprecated Qt QPainter functions
John W. Eaton <jwe@octave.org>
parents: 28840
diff changeset
1256 paint.resetTransform();
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1257
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1258 if (y < _lineProperties.size()-1)
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1259 {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1260 //double-height _lines are represented by two adjacent _lines
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1261 //containing the same characters
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1262 //both _lines will have the LINE_DOUBLEHEIGHT attribute.
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1263 //If the current line has the LINE_DOUBLEHEIGHT attribute,
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1264 //we can therefore skip the next line
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1265 if (_lineProperties[y] & LINE_DOUBLEHEIGHT)
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1266 y++;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1267 }
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1268 x += len - 1;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1269 } // for x
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1270 } // for y
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1271 delete [] disstrU;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1272 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1273
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1274 void TerminalView::blinkEvent()
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1275 {
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1276 _blinking = !_blinking;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1277
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
1278 //TODO: Optimise to only repaint the areas of the widget
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1279 // where there is blinking text
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1280 // rather than repainting the whole widget.
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1281 update();
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1282 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1283
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1284 QRect TerminalView::imageToWidget(const QRect& imageArea) const
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1285 {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1286 //qDebug("%s %d imageToWidget", __FILE__, __LINE__);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1287 QRect result;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1288 result.setLeft( _leftMargin + _fontWidth * imageArea.left() );
17872
7d9a4eef8022 backout changeset 4de2eeb7d790
John W. Eaton <jwe@octave.org>
parents: 17857
diff changeset
1289 result.setTop( _topMargin + _fontHeight * imageArea.top() );
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1290 result.setWidth( _fontWidth * imageArea.width() );
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1291 result.setHeight( _fontHeight * imageArea.height() );
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1292
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1293 return result;
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1294 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1295
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1296 void TerminalView::blinkCursorEvent()
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1297 {
16609
6f7940e36322 improve handling of cursor blinking for unix GUI terminal window
John W. Eaton <jwe@octave.org>
parents: 16606
diff changeset
1298 if (_hasBlinkingCursor)
6f7940e36322 improve handling of cursor blinking for unix GUI terminal window
John W. Eaton <jwe@octave.org>
parents: 16606
diff changeset
1299 _cursorBlinking = !_cursorBlinking;
6f7940e36322 improve handling of cursor blinking for unix GUI terminal window
John W. Eaton <jwe@octave.org>
parents: 16606
diff changeset
1300 else
6f7940e36322 improve handling of cursor blinking for unix GUI terminal window
John W. Eaton <jwe@octave.org>
parents: 16606
diff changeset
1301 _cursorBlinking = false;
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1302
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
1303 QRect cursorRect = imageToWidget( QRect(cursorPosition(),QSize(1,1)) );
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1304
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1305 update(cursorRect);
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1306 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1307
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1308 /* ------------------------------------------------------------------------- */
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1309 /* */
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1310 /* Resizing */
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1311 /* */
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1312 /* ------------------------------------------------------------------------- */
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1313
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1314 void TerminalView::resizeEvent(QResizeEvent*)
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1315 {
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1316 updateImageSize();
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1317 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1318
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1319 void TerminalView::propagateSize()
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1320 {
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1321 if (_isFixedSize)
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1322 {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1323 setSize(_columns, _lines);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1324 QWidget::setFixedSize(sizeHint());
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1325 parentWidget()->adjustSize();
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1326 parentWidget()->setFixedSize(parentWidget()->sizeHint());
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1327 return;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1328 }
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1329 if (_image)
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1330 updateImageSize();
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1331 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1332
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1333 void TerminalView::updateImageSize()
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1334 {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1335 //qDebug("%s %d updateImageSize", __FILE__, __LINE__);
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1336 Character* oldimg = _image;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1337 int oldlin = _lines;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1338 int oldcol = _columns;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1339
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1340 makeImage();
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1341
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
1342
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1343 // copy the old image to reduce flicker
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1344 int lines = qMin(oldlin,_lines);
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1345 int columns = qMin(oldcol,_columns);
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1346
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1347 //qDebug("%s %d updateImageSize", __FILE__, __LINE__);
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1348 if (oldimg)
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1349 {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1350 for (int line = 0; line < lines; line++)
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1351 {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1352 memcpy((void*)&_image[_columns*line],
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1353 (void*)&oldimg[oldcol*line],columns*sizeof(Character));
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1354 }
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1355 delete[] oldimg;
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1356 }
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1357
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1358 //qDebug("%s %d updateImageSize", __FILE__, __LINE__);
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1359 if (_screenWindow)
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1360 _screenWindow->setWindowLines(_lines);
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1361
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1362 _resizing = (oldlin!=_lines) || (oldcol!=_columns);
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1363
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1364 if ( _resizing )
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1365 {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1366 //qDebug("%s %d updateImageSize", __FILE__, __LINE__);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1367 showResizeNotification();
16538
8e180eac78d0 raise SIGWINCH signal in Unix GUI terminal window when size changes
John W. Eaton <jwe@octave.org>
parents: 15681
diff changeset
1368 #if defined (SIGWINCH)
8e180eac78d0 raise SIGWINCH signal in Unix GUI terminal window when size changes
John W. Eaton <jwe@octave.org>
parents: 15681
diff changeset
1369 ::raise (SIGWINCH);
8e180eac78d0 raise SIGWINCH signal in Unix GUI terminal window when size changes
John W. Eaton <jwe@octave.org>
parents: 15681
diff changeset
1370 #endif
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1371 emit changedContentSizeSignal(_contentHeight, _contentWidth); // expose resizeEvent
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1372 }
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1373 //qDebug("%s %d updateImageSize", __FILE__, __LINE__);
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
1374
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1375 _resizing = false;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1376 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1377
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
1378 //showEvent and hideEvent are reimplemented here so that it appears to other classes that the
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1379 //display has been resized when the display is hidden or shown.
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1380 //
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
1381 //this allows
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1382 //TODO: Perhaps it would be better to have separate signals for show and hide instead of using
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
1383 //the same signal as the one for a content size change
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1384 void TerminalView::showEvent(QShowEvent*)
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1385 {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1386 emit changedContentSizeSignal(_contentHeight,_contentWidth);
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1387 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1388 void TerminalView::hideEvent(QHideEvent*)
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1389 {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1390 emit changedContentSizeSignal(_contentHeight,_contentWidth);
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1391 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1392
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1393 /* ------------------------------------------------------------------------- */
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1394 /* */
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1395 /* Scrollbar */
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1396 /* */
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1397 /* ------------------------------------------------------------------------- */
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1398
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1399 void TerminalView::scrollBarPositionChanged(int)
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1400 {
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
1401 if ( !_screenWindow )
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1402 return;
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1403
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1404 _screenWindow->scrollTo( _scrollBar->value() );
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1405
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1406 // if the thumb has been moved to the bottom of the _scrollBar then set
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
1407 // the display to automatically track new output,
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1408 // that is, scroll down automatically
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1409 // to how new _lines as they are added
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1410 const bool atEndOfOutput = (_scrollBar->value() == _scrollBar->maximum());
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1411 _screenWindow->setTrackOutput( atEndOfOutput );
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1412
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1413 updateImage();
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1414 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1415
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1416 void TerminalView::setScroll(int cursor, int slines)
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1417 {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1418 //qDebug("%s %d setScroll", __FILE__, __LINE__);
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1419 // update _scrollBar if the range or value has changed,
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1420 // otherwise return
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1421 //
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1422 // setting the range or value of a _scrollBar will always trigger
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1423 // a repaint, so it should be avoided if it is not necessary
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1424 if ( _scrollBar->minimum() == 0 &&
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1425 _scrollBar->maximum() == (slines - _lines) &&
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1426 _scrollBar->value() == cursor )
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1427 {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1428 return;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1429 }
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1430
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1431 disconnect(_scrollBar, SIGNAL(valueChanged(int)), this, SLOT(scrollBarPositionChanged(int)));
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1432 _scrollBar->setRange(0,slines - _lines);
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1433 _scrollBar->setSingleStep(1);
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1434 _scrollBar->setPageStep(_lines);
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1435 _scrollBar->setValue(cursor);
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1436 connect(_scrollBar, SIGNAL(valueChanged(int)), this, SLOT(scrollBarPositionChanged(int)));
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1437 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1438
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1439 void TerminalView::setScrollBarPosition(ScrollBarPosition position)
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1440 {
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1441 if (_scrollbarLocation == position) {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1442 // return;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1443 }
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
1444
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1445 if ( position == NoScrollBar )
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1446 _scrollBar->hide();
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
1447 else
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1448 _scrollBar->show();
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1449
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1450 _topMargin = _leftMargin = 1;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1451 _scrollbarLocation = position;
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
1452
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1453 propagateSize();
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1454 update();
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1455 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1456
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1457 void TerminalView::mousePressEvent(QMouseEvent* ev)
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1458 {
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1459 if ( _possibleTripleClick && (ev->button()==Qt::LeftButton) ) {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1460 mouseTripleClickEvent(ev);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1461 return;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1462 }
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1463
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1464 if ( !contentsRect().contains(ev->pos()) ) return;
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
1465
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1466 if ( !_screenWindow ) return;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1467
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1468 int charLine;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1469 int charColumn;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1470 getCharacterPosition(ev->pos(),charLine,charColumn);
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1471 QPoint pos = QPoint(charColumn,charLine);
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1472
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1473 if ( ev->button() == Qt::LeftButton)
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1474 {
23403
fee531225679 make url in the console window clickable under linux (bug #41076)
Torsten <mttl@mailbox.org>
parents: 22323
diff changeset
1475
fee531225679 make url in the console window clickable under linux (bug #41076)
Torsten <mttl@mailbox.org>
parents: 22323
diff changeset
1476 Filter::HotSpot* spot = _filterChain->hotSpotAt(charLine,charColumn);
23404
314ac710f2ae highlight error messages in gui and provide links to open files (bug #35619)
Torsten <mttl@mailbox.org>
parents: 23403
diff changeset
1477 if ( spot &&
314ac710f2ae highlight error messages in gui and provide links to open files (bug #35619)
Torsten <mttl@mailbox.org>
parents: 23403
diff changeset
1478 (spot->type() == Filter::Link || spot->type() == Filter::ErrorLink))
23403
fee531225679 make url in the console window clickable under linux (bug #41076)
Torsten <mttl@mailbox.org>
parents: 22323
diff changeset
1479 {
fee531225679 make url in the console window clickable under linux (bug #41076)
Torsten <mttl@mailbox.org>
parents: 22323
diff changeset
1480 QList<QAction*> actions = spot->actions ();
fee531225679 make url in the console window clickable under linux (bug #41076)
Torsten <mttl@mailbox.org>
parents: 22323
diff changeset
1481 if (actions.length ())
fee531225679 make url in the console window clickable under linux (bug #41076)
Torsten <mttl@mailbox.org>
parents: 22323
diff changeset
1482 actions.at (0)->activate (QAction::Trigger);
fee531225679 make url in the console window clickable under linux (bug #41076)
Torsten <mttl@mailbox.org>
parents: 22323
diff changeset
1483 return;
fee531225679 make url in the console window clickable under linux (bug #41076)
Torsten <mttl@mailbox.org>
parents: 22323
diff changeset
1484 }
fee531225679 make url in the console window clickable under linux (bug #41076)
Torsten <mttl@mailbox.org>
parents: 22323
diff changeset
1485
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1486 _lineSelectionMode = false;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1487 _wordSelectionMode = false;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1488
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1489 emit isBusySelecting(true); // Keep it steady...
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1490 // Drag only when the Control key is hold
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1491 bool selected = false;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1492
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1493 // The receiver of the testIsSelected() signal will adjust
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1494 // 'selected' accordingly.
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1495 //emit testIsSelected(pos.x(), pos.y(), selected);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1496
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1497 selected = _screenWindow->isSelected(pos.x(),pos.y());
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1498
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1499 if ((!_ctrlDrag || ev->modifiers() & Qt::ControlModifier) && selected ) {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1500 // The user clicked inside selected text
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1501 dragInfo.state = diPending;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1502 dragInfo.start = ev->pos();
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1503 }
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1504 else {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1505 // No reason to ever start a drag event
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1506 dragInfo.state = diNone;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1507
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1508 _preserveLineBreaks = !( ( ev->modifiers() & Qt::ControlModifier ) && !(ev->modifiers() & Qt::AltModifier) );
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1509 _columnSelectionMode = (ev->modifiers() & Qt::AltModifier) && (ev->modifiers() & Qt::ControlModifier);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1510
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1511 if (_mouseMarks || (ev->modifiers() & Qt::ShiftModifier))
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1512 {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1513 _screenWindow->clearSelection();
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1514
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1515 //emit clearSelectionSignal();
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1516 pos.ry() += _scrollBar->value();
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1517 _iPntSel = _pntSel = pos;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1518 _actSel = 1; // left mouse button pressed but nothing selected yet.
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1519
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1520 }
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1521 else
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1522 {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1523 emit mouseSignal( 0, charColumn + 1, charLine + 1 +_scrollBar->value() -_scrollBar->maximum() , 0);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1524 }
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1525 }
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1526 }
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1527 else if ( ev->button() == Qt::MidButton )
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1528 {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1529 if ( _mouseMarks || (!_mouseMarks && (ev->modifiers() & Qt::ShiftModifier)) )
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1530 emitSelection(true,ev->modifiers() & Qt::ControlModifier);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1531 else
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1532 emit mouseSignal( 1, charColumn +1, charLine +1 +_scrollBar->value() -_scrollBar->maximum() , 0);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1533 }
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1534 else if ( ev->button() == Qt::RightButton )
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1535 {
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1536 if (_mouseMarks || (ev->modifiers() & Qt::ShiftModifier))
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1537 {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1538 emit configureRequest( this,
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1539 ev->modifiers() & (Qt::ShiftModifier|Qt::ControlModifier),
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1540 ev->pos()
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1541 );
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1542 }
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1543 else
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1544 emit mouseSignal( 2, charColumn +1, charLine +1 +_scrollBar->value() -_scrollBar->maximum() , 0);
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1545 }
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
1546
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
1547 QWidget::mousePressEvent (ev);
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1548 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1549
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1550 QList<QAction*> TerminalView::filterActions(const QPoint& position)
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1551 {
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1552 int charLine, charColumn;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1553 getCharacterPosition(position,charLine,charColumn);
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1554
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1555 Filter::HotSpot* spot = _filterChain->hotSpotAt(charLine,charColumn);
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1556
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1557 return spot ? spot->actions() : QList<QAction*>();
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1558 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1559
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1560 void TerminalView::mouseMoveEvent(QMouseEvent* ev)
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1561 {
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1562 int charLine = 0;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1563 int charColumn = 0;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1564
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
1565 getCharacterPosition(ev->pos(),charLine,charColumn);
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1566
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1567 // handle filters
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1568 // change link hot-spot appearance on mouse-over
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1569 Filter::HotSpot* spot = _filterChain->hotSpotAt(charLine,charColumn);
23404
314ac710f2ae highlight error messages in gui and provide links to open files (bug #35619)
Torsten <mttl@mailbox.org>
parents: 23403
diff changeset
1570 if ( spot &&
314ac710f2ae highlight error messages in gui and provide links to open files (bug #35619)
Torsten <mttl@mailbox.org>
parents: 23403
diff changeset
1571 (spot->type() == Filter::Link || spot->type() == Filter::ErrorLink))
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1572 {
23403
fee531225679 make url in the console window clickable under linux (bug #41076)
Torsten <mttl@mailbox.org>
parents: 22323
diff changeset
1573 // change mouse cursor when mouse is over links
fee531225679 make url in the console window clickable under linux (bug #41076)
Torsten <mttl@mailbox.org>
parents: 22323
diff changeset
1574 if (! _mouseOverHotspotArea.isValid())
fee531225679 make url in the console window clickable under linux (bug #41076)
Torsten <mttl@mailbox.org>
parents: 22323
diff changeset
1575 setCursor (Qt::PointingHandCursor);
fee531225679 make url in the console window clickable under linux (bug #41076)
Torsten <mttl@mailbox.org>
parents: 22323
diff changeset
1576
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1577 QRect previousHotspotArea = _mouseOverHotspotArea;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1578 _mouseOverHotspotArea.setCoords( qMin(spot->startColumn() , spot->endColumn()) * _fontWidth,
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1579 spot->startLine() * _fontHeight,
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1580 qMax(spot->startColumn() , spot->endColumn()) * _fontHeight,
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1581 (spot->endLine()+1) * _fontHeight );
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1582
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1583 // display tooltips when mousing over links
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1584 // TODO: Extend this to work with filter types other than links
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1585 const QString& tooltip = spot->tooltip();
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1586 if ( !tooltip.isEmpty() )
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1587 {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1588 QToolTip::showText( mapToGlobal(ev->pos()) , tooltip , this , _mouseOverHotspotArea );
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1589 }
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1590
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1591 update( _mouseOverHotspotArea | previousHotspotArea );
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1592 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1593 else if ( _mouseOverHotspotArea.isValid() )
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1594 {
23403
fee531225679 make url in the console window clickable under linux (bug #41076)
Torsten <mttl@mailbox.org>
parents: 22323
diff changeset
1595 setUsesMouse (true);
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1596 update( _mouseOverHotspotArea );
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1597 // set hotspot area to an invalid rectangle
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1598 _mouseOverHotspotArea = QRect();
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1599 }
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
1600
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1601 // for auto-hiding the cursor, we need mouseTracking
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1602 if (ev->buttons() == Qt::NoButton ) return;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1603
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
1604 // if the terminal is interested in mouse movements
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1605 // then emit a mouse movement signal, unless the shift
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1606 // key is being held down, which overrides this.
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1607 if (!_mouseMarks && !(ev->modifiers() & Qt::ShiftModifier))
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1608 {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1609 int button = 3;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1610 if (ev->buttons() & Qt::LeftButton)
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1611 button = 0;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1612 if (ev->buttons() & Qt::MidButton)
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1613 button = 1;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1614 if (ev->buttons() & Qt::RightButton)
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1615 button = 2;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1616
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1617
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1618 emit mouseSignal( button,
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1619 charColumn + 1,
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1620 charLine + 1 +_scrollBar->value() -_scrollBar->maximum(),
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1621 1 );
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1622
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1623 return;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1624 }
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
1625
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
1626 if (dragInfo.state == diPending)
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1627 {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1628 // we had a mouse down, but haven't confirmed a drag yet
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1629 // if the mouse has moved sufficiently, we will confirm
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1630
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1631 int distance = 10; //KGlobalSettings::dndEventDelay();
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1632 if ( ev->x() > dragInfo.start.x() + distance || ev->x() < dragInfo.start.x() - distance ||
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1633 ev->y() > dragInfo.start.y() + distance || ev->y() < dragInfo.start.y() - distance)
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1634 {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1635 // we've left the drag square, we can start a real drag operation now
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1636 emit isBusySelecting(false); // Ok.. we can breath again.
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1637
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1638 _screenWindow->clearSelection();
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1639 doDrag();
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1640 }
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1641 return;
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1642 }
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
1643 else if (dragInfo.state == diDragging)
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1644 {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1645 // this isn't technically needed because mouseMoveEvent is suppressed during
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1646 // Qt drag operations, replaced by dragMoveEvent
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1647 return;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1648 }
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1649
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1650 if (_actSel == 0) return;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1651
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1652 // don't extend selection while pasting
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1653 if (ev->buttons() & Qt::MidButton) return;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1654
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1655 extendSelection( ev->pos() );
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1656 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1657
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1658 #if 0
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1659 void TerminalDisplay::setSelectionEnd()
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1660 {
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1661 extendSelection( _configureRequestPoint );
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1662 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1663 #endif
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1664
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1665 void TerminalView::extendSelection(const QPoint& position) {
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1666 QPoint pos = position;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1667
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1668 if (!_screenWindow) {
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1669 return;
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1670 }
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1671
17872
7d9a4eef8022 backout changeset 4de2eeb7d790
John W. Eaton <jwe@octave.org>
parents: 17857
diff changeset
1672 QPoint tL = contentsRect().topLeft();
7d9a4eef8022 backout changeset 4de2eeb7d790
John W. Eaton <jwe@octave.org>
parents: 17857
diff changeset
1673 int tLx = tL.x();
7d9a4eef8022 backout changeset 4de2eeb7d790
John W. Eaton <jwe@octave.org>
parents: 17857
diff changeset
1674 int tLy = tL.y();
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1675 int scroll = _scrollBar->value();
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1676
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1677 // we're in the process of moving the mouse with the left button pressed
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1678 // the mouse cursor will kept caught within the bounds of the text in
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1679 // this widget.
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1680
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1681 // Adjust position within text area bounds. See FIXME above.
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1682 if (pos.x() < tLx + _leftMargin) {
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1683 pos.setX(tLx + _leftMargin);
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1684 }
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1685 if (pos.x() > tLx + _leftMargin + _usedColumns * _fontWidth - 1) {
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1686 pos.setX(tLx + _leftMargin + _usedColumns * _fontWidth);
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1687 }
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1688 if (pos.y() < tLy + _topMargin) {
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1689 pos.setY(tLy + _topMargin);
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1690 }
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1691 if (pos.y() > tLy + _topMargin + _usedLines * _fontHeight - 1) {
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1692 pos.setY(tLy + _topMargin + _usedLines * _fontHeight - 1);
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1693 }
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1694
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1695 if (pos.y() == tLy + _topMargin + _usedLines * _fontHeight - 1) {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1696 _scrollBar->setValue(_scrollBar->value() + yMouseScroll); // scrollforward
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1697 }
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1698 if (pos.y() == tLy + _topMargin) {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1699 _scrollBar->setValue(_scrollBar->value() - yMouseScroll); // scrollback
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1700 }
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1701
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1702 int charColumn = 0;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1703 int charLine = 0;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1704 getCharacterPosition(pos, charLine, charColumn);
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1705
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1706 QPoint here = QPoint(charColumn, charLine);
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1707 QPoint ohere(here);
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1708 QPoint _iPntSelCorr = _iPntSel;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1709 _iPntSelCorr.ry() -= _scrollBar->value();
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1710 QPoint _pntSelCorr = _pntSel;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1711 _pntSelCorr.ry() -= _scrollBar->value();
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1712 bool swapping = false;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1713
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1714 if (_wordSelectionMode) {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1715 // Extend to word boundaries
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1716 int i = 0;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1717 int selClass = 0;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1718
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1719 bool left_not_right = (here.y() < _iPntSelCorr.y() ||
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1720 (here.y() == _iPntSelCorr.y() && here.x() < _iPntSelCorr.x()));
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1721 bool old_left_not_right = (_pntSelCorr.y() < _iPntSelCorr.y() ||
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1722 (_pntSelCorr.y() == _iPntSelCorr.y() && _pntSelCorr.x() < _iPntSelCorr.x()));
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1723 swapping = left_not_right != old_left_not_right;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1724
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1725 // Find left (left_not_right ? from here : from start)
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1726 QPoint left = left_not_right ? here : _iPntSelCorr;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1727 i = loc(left.x(), left.y());
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1728 if (i >= 0 && i <= _imageSize) {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1729 selClass = charClass(_image[i].character);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1730 while (((left.x() > 0) || (left.y() > 0 && (_lineProperties[left.y() - 1] & LINE_WRAPPED)))
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1731 && charClass(_image[i - 1].character) == selClass) {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1732 i--;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1733 if (left.x() > 0) {
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
1734 left.rx()--;
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
1735 } else {
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
1736 left.rx() = _usedColumns - 1;
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
1737 left.ry()--;
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
1738 }
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1739 }
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1740 }
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1741
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1742 // Find left (left_not_right ? from start : from here)
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1743 QPoint right = left_not_right ? _iPntSelCorr : here;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1744 i = loc(right.x(), right.y());
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1745 if (i >= 0 && i <= _imageSize) {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1746 selClass = charClass(_image[i].character);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1747 while (((right.x() < _usedColumns - 1) || (right.y() < _usedLines - 1 && (_lineProperties[right.y()] & LINE_WRAPPED)))
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1748 && charClass(_image[i + 1].character) == selClass) {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1749 i++;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1750 if (right.x() < _usedColumns - 1) {
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
1751 right.rx()++;
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
1752 } else {
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
1753 right.rx() = 0;
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
1754 right.ry()++;
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
1755 }
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1756 }
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1757 }
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1758
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1759 // Pick which is start (ohere) and which is extension (here)
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1760 if (left_not_right) {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1761 here = left;
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
1762 ohere = right;
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1763 } else {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1764 here = right;
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
1765 ohere = left;
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1766 }
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1767 ohere.rx()++;
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1768 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1769
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1770 if (_lineSelectionMode) {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1771 // Extend to complete line
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1772 bool above_not_below = (here.y() < _iPntSelCorr.y());
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1773
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1774 QPoint above = above_not_below ? here : _iPntSelCorr;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1775 QPoint below = above_not_below ? _iPntSelCorr : here;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1776
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1777 while (above.y() > 0 && (_lineProperties[above.y() - 1] & LINE_WRAPPED)) {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1778 above.ry()--;
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
1779 }
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1780 while (below.y() < _usedLines - 1 && (_lineProperties[below.y()] & LINE_WRAPPED)) {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1781 below.ry()++;
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
1782 }
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1783
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1784 above.setX(0);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1785 below.setX(_usedColumns - 1);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1786
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1787 // Pick which is start (ohere) and which is extension (here)
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1788 if (above_not_below) {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1789 here = above;
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
1790 ohere = below;
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1791 } else {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1792 here = below;
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
1793 ohere = above;
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1794 }
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1795
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1796 QPoint newSelBegin = QPoint(ohere.x(), ohere.y());
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1797 swapping = !(_tripleSelBegin == newSelBegin);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1798 _tripleSelBegin = newSelBegin;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1799
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1800 ohere.rx()++;
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1801 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1802
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1803 int offset = 0;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1804 if (!_wordSelectionMode && !_lineSelectionMode) {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1805 int i = 0;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1806 int selClass = 0;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1807
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1808 bool left_not_right = (here.y() < _iPntSelCorr.y() ||
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1809 (here.y() == _iPntSelCorr.y() && here.x() < _iPntSelCorr.x()));
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1810 bool old_left_not_right = (_pntSelCorr.y() < _iPntSelCorr.y() ||
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1811 (_pntSelCorr.y() == _iPntSelCorr.y() && _pntSelCorr.x() < _iPntSelCorr.x()));
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1812 swapping = left_not_right != old_left_not_right;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1813
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1814 // Find left (left_not_right ? from here : from start)
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1815 QPoint left = left_not_right ? here : _iPntSelCorr;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1816
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1817 // Find left (left_not_right ? from start : from here)
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1818 QPoint right = left_not_right ? _iPntSelCorr : here;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1819 if (right.x() > 0 && !_columnSelectionMode) {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1820 i = loc(right.x(), right.y());
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1821 if (i >= 0 && i <= _imageSize) {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1822 selClass = charClass(_image[i - 1].character);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1823 if (selClass == ' ') {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1824 while (right.x() < _usedColumns - 1 && charClass(_image[i + 1].character) == selClass && (right.y() < _usedLines - 1) &&
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1825 !(_lineProperties[right.y()] & LINE_WRAPPED)) {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1826 i++;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1827 right.rx()++;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1828 }
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1829 if (right.x() < _usedColumns - 1) {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1830 right = left_not_right ? _iPntSelCorr : here;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1831 } else {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1832 right.rx()++; // will be balanced later because of offset=-1;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1833 }
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1834 }
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1835 }
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1836 }
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1837
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1838 // Pick which is start (ohere) and which is extension (here)
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1839 if (left_not_right) {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1840 here = left;
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
1841 ohere = right;
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
1842 offset = 0;
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1843 } else {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1844 here = right;
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
1845 ohere = left;
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
1846 offset = -1;
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1847 }
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1848 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1849
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1850 if ((here == _pntSelCorr) && (scroll == _scrollBar->value())) {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1851 return; // not moved
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1852 }
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1853
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1854 if (here == ohere) {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1855 return; // It's not left, it's not right.
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1856 }
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1857
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1858 if (_actSel < 2 || swapping) {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1859 if (_columnSelectionMode && !_lineSelectionMode && !_wordSelectionMode) {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1860 _screenWindow->setSelectionStart(ohere.x(), ohere.y(), true);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1861 } else {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1862 _screenWindow->setSelectionStart(ohere.x() - 1 - offset , ohere.y(), false);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1863 }
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1864
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1865 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1866
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1867 _actSel = 2; // within selection
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1868 _pntSel = here;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1869 _pntSel.ry() += _scrollBar->value();
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1870
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1871 if (_columnSelectionMode && !_lineSelectionMode && !_wordSelectionMode) {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1872 _screenWindow->setSelectionEnd(here.x(), here.y());
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1873 } else {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1874 _screenWindow->setSelectionEnd(here.x() + offset, here.y());
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1875 }
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1876 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1877
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1878 void TerminalView::mouseReleaseEvent(QMouseEvent* ev)
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1879 {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1880 if ( !_screenWindow )
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1881 return;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1882
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1883 int charLine;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1884 int charColumn;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1885 getCharacterPosition(ev->pos(),charLine,charColumn);
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1886
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1887 if ( ev->button() == Qt::LeftButton)
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1888 {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1889 emit isBusySelecting(false);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1890 if(dragInfo.state == diPending)
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1891 {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1892 // We had a drag event pending but never confirmed. Kill selection
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1893 _screenWindow->clearSelection();
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1894 //emit clearSelectionSignal();
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1895 }
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1896 else
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1897 {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1898 if ( _actSel > 1 )
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1899 {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1900 setSelection( _screenWindow->selectedText(_preserveLineBreaks) );
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1901 }
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1902
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1903 _actSel = 0;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1904
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1905 //FIXME: emits a release event even if the mouse is
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1906 // outside the range. The procedure used in `mouseMoveEvent'
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1907 // applies here, too.
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1908
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1909 if (!_mouseMarks && !(ev->modifiers() & Qt::ShiftModifier))
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1910 emit mouseSignal( 3, // release
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1911 charColumn + 1,
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1912 charLine + 1 +_scrollBar->value() -_scrollBar->maximum() , 0);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1913 }
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1914 dragInfo.state = diNone;
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1915 }
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
1916
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
1917
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
1918 if ( !_mouseMarks &&
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1919 ((ev->button() == Qt::RightButton && !(ev->modifiers() & Qt::ShiftModifier))
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1920 || ev->button() == Qt::MidButton) )
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1921 {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1922 emit mouseSignal( 3,
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1923 charColumn + 1,
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1924 charLine + 1 +_scrollBar->value() -_scrollBar->maximum() ,
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1925 0);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1926 }
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
1927
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
1928 QWidget::mouseReleaseEvent(ev);
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1929 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1930
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1931 void TerminalView::getCharacterPosition(const QPoint& widgetPoint,int& line,int& column) const
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1932 {
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1933
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1934 column = (widgetPoint.x() + _fontWidth/2 -contentsRect().left()-_leftMargin) / _fontWidth;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1935 line = (widgetPoint.y()-contentsRect().top()-_topMargin) / _fontHeight;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1936
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1937 if ( line < 0 )
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1938 line = 0;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1939 if ( column < 0 )
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1940 column = 0;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1941
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1942 if ( line >= _usedLines )
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1943 line = _usedLines-1;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1944
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1945 // the column value returned can be equal to _usedColumns, which
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1946 // is the position just after the last character displayed in a line.
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1947 //
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1948 // this is required so that the user can select characters in the right-most
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1949 // column (or left-most for right-to-left input)
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1950 if ( column > _usedColumns )
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1951 column = _usedColumns;
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1952 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1953
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1954 void TerminalView::updateLineProperties()
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1955 {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1956 if ( !_screenWindow )
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1957 return;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1958
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1959 _lineProperties = _screenWindow->getLineProperties();
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1960 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1961
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1962 void TerminalView::mouseDoubleClickEvent(QMouseEvent* ev)
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1963 {
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1964 if ( ev->button() != Qt::LeftButton) return;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1965 if ( !_screenWindow ) return;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1966
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1967 int charLine = 0;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1968 int charColumn = 0;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1969
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1970 getCharacterPosition(ev->pos(),charLine,charColumn);
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1971
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1972 QPoint pos(charColumn,charLine);
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1973
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1974 // pass on double click as two clicks.
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1975 if (!_mouseMarks && !(ev->modifiers() & Qt::ShiftModifier))
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1976 {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1977 // Send just _ONE_ click event, since the first click of the double click
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1978 // was already sent by the click handler
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1979 emit mouseSignal( 0,
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1980 pos.x()+1,
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1981 pos.y()+1 +_scrollBar->value() -_scrollBar->maximum(),
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1982 0 ); // left button
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1983 return;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1984 }
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1985
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1986 _screenWindow->clearSelection();
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1987 QPoint bgnSel = pos;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1988 QPoint endSel = pos;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1989 int i = loc(bgnSel.x(),bgnSel.y());
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1990 _iPntSel = bgnSel;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1991 _iPntSel.ry() += _scrollBar->value();
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1992
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1993 _wordSelectionMode = true;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1994
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1995 // find word boundaries...
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1996 int selClass = charClass(_image[i].character);
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
1997 {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1998 // find the start of the word
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
1999 int x = bgnSel.x();
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2000 while ( ((x>0) || (bgnSel.y()>0 && (_lineProperties[bgnSel.y()-1] & LINE_WRAPPED) ))
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2001 && charClass(_image[i-1].character) == selClass )
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2002 {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2003 i--;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2004 if (x>0)
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2005 x--;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2006 else
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2007 {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2008 x=_usedColumns-1;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2009 bgnSel.ry()--;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2010 }
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2011 }
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2012
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2013 bgnSel.setX(x);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2014 _screenWindow->setSelectionStart( bgnSel.x() , bgnSel.y() , false );
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2015
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2016 // find the end of the word
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2017 i = loc( endSel.x(), endSel.y() );
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2018 x = endSel.x();
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2019 while( ((x<_usedColumns-1) || (endSel.y()<_usedLines-1 && (_lineProperties[endSel.y()] & LINE_WRAPPED) ))
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2020 && charClass(_image[i+1].character) == selClass )
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2021 {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2022 i++;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2023 if (x<_usedColumns-1)
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2024 x++;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2025 else
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2026 {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2027 x=0;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2028 endSel.ry()++;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2029 }
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2030 }
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2031
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2032 endSel.setX(x);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2033
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2034 // In word selection mode don't select @ (64) if at end of word.
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2035 if ( ( QChar( _image[i].character ) == '@' ) && ( ( endSel.x() - bgnSel.x() ) > 0 ) )
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2036 endSel.setX( x - 1 );
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2037
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2038
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2039 _actSel = 2; // within selection
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2040
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2041 _screenWindow->setSelectionEnd( endSel.x() , endSel.y() );
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2042
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2043 setSelection( _screenWindow->selectedText(_preserveLineBreaks) );
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2044 }
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2045
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2046 _possibleTripleClick=true;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2047
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2048 QTimer::singleShot(QApplication::doubleClickInterval(),this,
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2049 SLOT(tripleClickTimeout()));
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2050 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2051
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2052 void TerminalView::wheelEvent( QWheelEvent* ev )
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2053 {
29047
94396ec1a89d avoid warnings about deprecated QWheelEvent methods delta and orientation
John W. Eaton <jwe@octave.org>
parents: 28846
diff changeset
2054 #if defined (HAVE_QWHEELEVENT_ANGLEDELTA)
94396ec1a89d avoid warnings about deprecated QWheelEvent methods delta and orientation
John W. Eaton <jwe@octave.org>
parents: 28846
diff changeset
2055 if (ev->angleDelta().y() == 0)
94396ec1a89d avoid warnings about deprecated QWheelEvent methods delta and orientation
John W. Eaton <jwe@octave.org>
parents: 28846
diff changeset
2056 return;
94396ec1a89d avoid warnings about deprecated QWheelEvent methods delta and orientation
John W. Eaton <jwe@octave.org>
parents: 28846
diff changeset
2057 #else
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2058 if (ev->orientation() != Qt::Vertical)
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2059 return;
29047
94396ec1a89d avoid warnings about deprecated QWheelEvent methods delta and orientation
John W. Eaton <jwe@octave.org>
parents: 28846
diff changeset
2060 #endif
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2061
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2062 if ( _mouseMarks )
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2063 _scrollBar->event(ev);
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2064 else
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2065 {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2066 int charLine;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2067 int charColumn;
29048
440ace36950e avoid warnings about deprecated QWheelEvent::pos method
John W. Eaton <jwe@octave.org>
parents: 29047
diff changeset
2068 #if defined (HAVE_QWHEELEVENT_POSITION)
440ace36950e avoid warnings about deprecated QWheelEvent::pos method
John W. Eaton <jwe@octave.org>
parents: 29047
diff changeset
2069 QPoint pos = ev->position().toPoint();
440ace36950e avoid warnings about deprecated QWheelEvent::pos method
John W. Eaton <jwe@octave.org>
parents: 29047
diff changeset
2070 #else
440ace36950e avoid warnings about deprecated QWheelEvent::pos method
John W. Eaton <jwe@octave.org>
parents: 29047
diff changeset
2071 QPoint pos = ev->pos();
440ace36950e avoid warnings about deprecated QWheelEvent::pos method
John W. Eaton <jwe@octave.org>
parents: 29047
diff changeset
2072 #endif
440ace36950e avoid warnings about deprecated QWheelEvent::pos method
John W. Eaton <jwe@octave.org>
parents: 29047
diff changeset
2073 getCharacterPosition( pos , charLine , charColumn );
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2074
29047
94396ec1a89d avoid warnings about deprecated QWheelEvent methods delta and orientation
John W. Eaton <jwe@octave.org>
parents: 28846
diff changeset
2075 #if defined (HAVE_QWHEELEVENT_ANGLEDELTA)
94396ec1a89d avoid warnings about deprecated QWheelEvent methods delta and orientation
John W. Eaton <jwe@octave.org>
parents: 28846
diff changeset
2076 int delta = ev->angleDelta().y();
94396ec1a89d avoid warnings about deprecated QWheelEvent methods delta and orientation
John W. Eaton <jwe@octave.org>
parents: 28846
diff changeset
2077 #else
94396ec1a89d avoid warnings about deprecated QWheelEvent methods delta and orientation
John W. Eaton <jwe@octave.org>
parents: 28846
diff changeset
2078 int delta = ev->delta();
94396ec1a89d avoid warnings about deprecated QWheelEvent methods delta and orientation
John W. Eaton <jwe@octave.org>
parents: 28846
diff changeset
2079 #endif
94396ec1a89d avoid warnings about deprecated QWheelEvent methods delta and orientation
John W. Eaton <jwe@octave.org>
parents: 28846
diff changeset
2080 emit mouseSignal( delta > 0 ? 4 : 5,
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2081 charColumn + 1,
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2082 charLine + 1 +_scrollBar->value() -_scrollBar->maximum() ,
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2083 0);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2084 }
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2085 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2086
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2087 void TerminalView::tripleClickTimeout()
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2088 {
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2089 _possibleTripleClick=false;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2090 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2091
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2092 void TerminalView::mouseTripleClickEvent(QMouseEvent* ev)
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2093 {
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2094 if ( !_screenWindow ) return;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2095
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2096 int charLine;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2097 int charColumn;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2098 getCharacterPosition(ev->pos(),charLine,charColumn);
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2099 _iPntSel = QPoint(charColumn,charLine);
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2100
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2101 _screenWindow->clearSelection();
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2102
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2103 _lineSelectionMode = true;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2104 _wordSelectionMode = false;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2105
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2106 _actSel = 2; // within selection
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2107 emit isBusySelecting(true); // Keep it steady...
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2108
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2109 while (_iPntSel.y()>0 && (_lineProperties[_iPntSel.y()-1] & LINE_WRAPPED) )
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2110 _iPntSel.ry()--;
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
2111
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2112 if (_tripleClickMode == SelectForwardsFromCursor) {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2113 // find word boundary start
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2114 int i = loc(_iPntSel.x(),_iPntSel.y());
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2115 int selClass = charClass(_image[i].character);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2116 int x = _iPntSel.x();
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2117
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2118 while ( ((x>0) ||
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2119 (_iPntSel.y()>0 && (_lineProperties[_iPntSel.y()-1] & LINE_WRAPPED) )
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2120 )
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2121 && charClass(_image[i-1].character) == selClass )
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2122 {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2123 i--;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2124 if (x>0)
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
2125 x--;
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2126 else
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2127 {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2128 x=_columns-1;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2129 _iPntSel.ry()--;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2130 }
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
2131 }
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2132
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2133 _screenWindow->setSelectionStart( x , _iPntSel.y() , false );
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2134 _tripleSelBegin = QPoint( x, _iPntSel.y() );
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2135 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2136 else if (_tripleClickMode == SelectWholeLine) {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2137 _screenWindow->setSelectionStart( 0 , _iPntSel.y() , false );
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2138 _tripleSelBegin = QPoint( 0, _iPntSel.y() );
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2139 }
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2140
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2141 while (_iPntSel.y()<_lines-1 && (_lineProperties[_iPntSel.y()] & LINE_WRAPPED) )
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2142 _iPntSel.ry()++;
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
2143
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2144 _screenWindow->setSelectionEnd( _columns - 1 , _iPntSel.y() );
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2145
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2146 setSelection(_screenWindow->selectedText(_preserveLineBreaks));
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2147
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2148 _iPntSel.ry() += _scrollBar->value();
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2149
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
2150 emit tripleClicked( _screenWindow->selectedText( _preserveLineBreaks ) );
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2151 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2152
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2153
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2154 bool TerminalView::focusNextPrevChild( bool next )
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2155 {
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2156 if (next)
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2157 return false; // This disables changing the active part in konqueror
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2158 // when pressing Tab
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2159 return QWidget::focusNextPrevChild( next );
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2160 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2161
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2162
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2163 int TerminalView::charClass(quint16 ch) const
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2164 {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2165 QChar qch=QChar(ch);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2166 if ( qch.isSpace() ) return ' ';
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2167
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2168 if ( qch.isLetterOrNumber() || _wordCharacters.contains(qch, Qt::CaseInsensitive ) )
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2169 return 'a';
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2170
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2171 // Everything else is weird
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2172 return 1;
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2173 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2174
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2175 void TerminalView::setWordCharacters(const QString& wc)
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2176 {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2177 _wordCharacters = wc;
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2178 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2179
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2180 void TerminalView::setUsesMouse(bool on)
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2181 {
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2182 _mouseMarks = on;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2183 setCursor( _mouseMarks ? Qt::IBeamCursor : Qt::ArrowCursor );
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2184 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2185 bool TerminalView::usesMouse() const
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2186 {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2187 return _mouseMarks;
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2188 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2189
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2190 /* ------------------------------------------------------------------------- */
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2191 /* */
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2192 /* Clipboard */
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2193 /* */
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2194 /* ------------------------------------------------------------------------- */
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2195
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2196 #undef KeyPress
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2197
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2198 void TerminalView::emitSelection(bool useXselection,bool appendReturn)
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2199 {
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
2200 if ( !_screenWindow )
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2201 return;
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2202
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2203 // Paste Clipboard by simulating keypress events
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2204 QString text = QApplication::clipboard()->text(useXselection ? QClipboard::Selection :
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2205 QClipboard::Clipboard);
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2206 if(appendReturn)
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2207 text.append("\r");
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2208 if ( ! text.isEmpty() )
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2209 {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2210 text.replace("\n", "\r");
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2211 QKeyEvent e(QEvent::KeyPress, 0, Qt::NoModifier, text);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2212 emit keyPressedSignal(&e); // expose as a big fat keypress event
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2213
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2214 _screenWindow->clearSelection();
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2215 }
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2216 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2217
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2218 void TerminalView::setSelection(const QString& t)
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2219 {
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2220 QApplication::clipboard()->setText(t, QClipboard::Selection);
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2221 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2222
19690
bd1369a2a651 add extra action for interrupting with Ctrl-C (bug #44204)
Torsten <ttl@justmail.de>
parents: 19596
diff changeset
2223 void TerminalView::copyClipboard(bool extra_interrupt)
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2224 {
16881
944ade6e7f66 Make main window copy and paste global for current focused window
John Donoghue <john.donoghue@ieee.org>
parents: 16794
diff changeset
2225 if ( !_screenWindow || !hasFocus())
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2226 return;
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2227
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2228 QString text = _screenWindow->selectedText(_preserveLineBreaks);
16648
b04413e5a811 improve handling of interrupts, copy and paste shortcuts
John W. Eaton <jwe@octave.org>
parents: 16609
diff changeset
2229
20137
4ba6c61c8794 no copying of empty text in terminal when copy shortcut is not Ctrl-C
Torsten <ttl@justmail.de>
parents: 19943
diff changeset
2230 if (text.isEmpty ())
4ba6c61c8794 no copying of empty text in terminal when copy shortcut is not Ctrl-C
Torsten <ttl@justmail.de>
parents: 19943
diff changeset
2231 {
4ba6c61c8794 no copying of empty text in terminal when copy shortcut is not Ctrl-C
Torsten <ttl@justmail.de>
parents: 19943
diff changeset
2232 if (! extra_interrupt)
4ba6c61c8794 no copying of empty text in terminal when copy shortcut is not Ctrl-C
Torsten <ttl@justmail.de>
parents: 19943
diff changeset
2233 emit interrupt_signal ();
4ba6c61c8794 no copying of empty text in terminal when copy shortcut is not Ctrl-C
Torsten <ttl@justmail.de>
parents: 19943
diff changeset
2234 }
16648
b04413e5a811 improve handling of interrupts, copy and paste shortcuts
John W. Eaton <jwe@octave.org>
parents: 16609
diff changeset
2235 else
b04413e5a811 improve handling of interrupts, copy and paste shortcuts
John W. Eaton <jwe@octave.org>
parents: 16609
diff changeset
2236 QApplication::clipboard()->setText(text);
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2237 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2238
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2239 void TerminalView::pasteClipboard()
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2240 {
16881
944ade6e7f66 Make main window copy and paste global for current focused window
John Donoghue <john.donoghue@ieee.org>
parents: 16794
diff changeset
2241 if(hasFocus ())
944ade6e7f66 Make main window copy and paste global for current focused window
John Donoghue <john.donoghue@ieee.org>
parents: 16794
diff changeset
2242 {
944ade6e7f66 Make main window copy and paste global for current focused window
John Donoghue <john.donoghue@ieee.org>
parents: 16794
diff changeset
2243 emitSelection(false,false);
944ade6e7f66 Make main window copy and paste global for current focused window
John Donoghue <john.donoghue@ieee.org>
parents: 16794
diff changeset
2244 }
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2245 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2246
18555
2d5d0d86432e gui: Add select all menu (Bug #41797)
John Donoghue <john.donoghue@ieee.org>
parents: 17920
diff changeset
2247 void TerminalView::selectAll()
2d5d0d86432e gui: Add select all menu (Bug #41797)
John Donoghue <john.donoghue@ieee.org>
parents: 17920
diff changeset
2248 {
2d5d0d86432e gui: Add select all menu (Bug #41797)
John Donoghue <john.donoghue@ieee.org>
parents: 17920
diff changeset
2249 if ( !_screenWindow || !hasFocus())
2d5d0d86432e gui: Add select all menu (Bug #41797)
John Donoghue <john.donoghue@ieee.org>
parents: 17920
diff changeset
2250 return;
2d5d0d86432e gui: Add select all menu (Bug #41797)
John Donoghue <john.donoghue@ieee.org>
parents: 17920
diff changeset
2251
2d5d0d86432e gui: Add select all menu (Bug #41797)
John Donoghue <john.donoghue@ieee.org>
parents: 17920
diff changeset
2252 _screenWindow->setSelectionStart(0,-_screenWindow->currentLine(), false);
2d5d0d86432e gui: Add select all menu (Bug #41797)
John Donoghue <john.donoghue@ieee.org>
parents: 17920
diff changeset
2253 //_screenWindow->setSelectionEnd(_screenWindow->windowColumns(),
2d5d0d86432e gui: Add select all menu (Bug #41797)
John Donoghue <john.donoghue@ieee.org>
parents: 17920
diff changeset
2254 // _screenWindow->windowLines());
2d5d0d86432e gui: Add select all menu (Bug #41797)
John Donoghue <john.donoghue@ieee.org>
parents: 17920
diff changeset
2255
2d5d0d86432e gui: Add select all menu (Bug #41797)
John Donoghue <john.donoghue@ieee.org>
parents: 17920
diff changeset
2256 _screenWindow->setSelectionEnd(_screenWindow->columnCount(),
2d5d0d86432e gui: Add select all menu (Bug #41797)
John Donoghue <john.donoghue@ieee.org>
parents: 17920
diff changeset
2257 _screenWindow->windowLines());
2d5d0d86432e gui: Add select all menu (Bug #41797)
John Donoghue <john.donoghue@ieee.org>
parents: 17920
diff changeset
2258 }
2d5d0d86432e gui: Add select all menu (Bug #41797)
John Donoghue <john.donoghue@ieee.org>
parents: 17920
diff changeset
2259
2d5d0d86432e gui: Add select all menu (Bug #41797)
John Donoghue <john.donoghue@ieee.org>
parents: 17920
diff changeset
2260
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2261 void TerminalView::pasteSelection()
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2262 {
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2263 emitSelection(true,false);
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2264 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2265
19690
bd1369a2a651 add extra action for interrupting with Ctrl-C (bug #44204)
Torsten <ttl@justmail.de>
parents: 19596
diff changeset
2266
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2267 /* ------------------------------------------------------------------------- */
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2268 /* */
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2269 /* Keyboard */
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2270 /* */
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2271 /* ------------------------------------------------------------------------- */
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2272
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2273 void TerminalView::keyPressEvent( QKeyEvent* event )
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2274 {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2275 //qDebug("%s %d keyPressEvent and key is %d", __FILE__, __LINE__, event->key());
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2276
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2277 bool emitKeyPressSignal = true;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2278
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2279 // Keyboard-based navigation
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2280 if ( event->modifiers() == Qt::ShiftModifier )
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2281 {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2282 bool update = true;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2283
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2284 if ( event->key() == Qt::Key_PageUp )
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2285 {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2286 //qDebug("%s %d pageup", __FILE__, __LINE__);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2287 _screenWindow->scrollBy( ScreenWindow::ScrollPages , -1 );
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2288 }
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2289 else if ( event->key() == Qt::Key_PageDown )
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2290 {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2291 //qDebug("%s %d pagedown", __FILE__, __LINE__);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2292 _screenWindow->scrollBy( ScreenWindow::ScrollPages , 1 );
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2293 }
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2294 else if ( event->key() == Qt::Key_Up )
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2295 {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2296 //qDebug("%s %d keyup", __FILE__, __LINE__);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2297 _screenWindow->scrollBy( ScreenWindow::ScrollLines , -1 );
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2298 }
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2299 else if ( event->key() == Qt::Key_Down )
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2300 {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2301 //qDebug("%s %d keydown", __FILE__, __LINE__);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2302 _screenWindow->scrollBy( ScreenWindow::ScrollLines , 1 );
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2303 }
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2304 else {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2305 update = false;
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
2306 }
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2307
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2308 if ( update )
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2309 {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2310 //qDebug("%s %d updating", __FILE__, __LINE__);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2311 _screenWindow->setTrackOutput( _screenWindow->atEndOfOutput() );
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2312
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2313 updateLineProperties();
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2314 updateImage();
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2315
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2316 // do not send key press to terminal
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2317 emitKeyPressSignal = false;
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2318 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2319 }
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
2320
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2321 _screenWindow->setTrackOutput( true );
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2322
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2323 _actSel=0; // Key stroke implies a screen update, so TerminalDisplay won't
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2324 // know where the current selection is.
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2325
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2326 if (_hasBlinkingCursor)
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2327 {
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2328 _blinkCursorTimer->start(BLINK_DELAY);
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2329 if (_cursorBlinking)
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2330 blinkCursorEvent();
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2331 else
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2332 _cursorBlinking = false;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2333 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2334
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2335 if ( emitKeyPressSignal && !_readonly )
27548
35f9ffb13fd6 do not emulate cursor movements for mouse clicks in terminal (bug #55854)
Mike Miller <mtmiller@octave.org>
parents: 26376
diff changeset
2336 emit keyPressedSignal(event);
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2337
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2338 if (_readonly) {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2339 event->ignore();
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2340 }
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2341 else {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2342 event->accept();
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2343 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2344 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2345
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2346 void TerminalView::inputMethodEvent( QInputMethodEvent* event )
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2347 {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2348 QKeyEvent keyEvent(QEvent::KeyPress,0,Qt::NoModifier,event->commitString());
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2349 emit keyPressedSignal(&keyEvent);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2350
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2351 _inputMethodData.preeditString = event->preeditString();
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2352 update(preeditRect() | _inputMethodData.previousPreeditRect);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2353
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2354 event->accept();
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2355 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2356 QVariant TerminalView::inputMethodQuery( Qt::InputMethodQuery query ) const
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2357 {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2358 const QPoint cursorPos = _screenWindow ? _screenWindow->cursorPosition() : QPoint(0,0);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2359 switch ( query )
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2360 {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2361 case Qt::ImMicroFocus:
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2362 return imageToWidget(QRect(cursorPos.x(),cursorPos.y(),1,1));
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2363 break;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2364 case Qt::ImFont:
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2365 return font();
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2366 break;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2367 case Qt::ImCursorPosition:
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2368 // return the cursor position within the current line
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2369 return cursorPos.x();
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2370 break;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2371 case Qt::ImSurroundingText:
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2372 {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2373 // return the text from the current line
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2374 QString lineText;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2375 QTextStream stream(&lineText);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2376 PlainTextDecoder decoder;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2377 decoder.begin(&stream);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2378 decoder.decodeLine(&_image[loc(0,cursorPos.y())],_usedColumns,_lineProperties[cursorPos.y()]);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2379 decoder.end();
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2380 return lineText;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2381 }
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2382 break;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2383 case Qt::ImCurrentSelection:
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2384 return QString();
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2385 break;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2386 default:
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2387 break;
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2388 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2389
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2390 return QVariant();
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2391 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2392
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2393 void TerminalView::setBellMode(int mode)
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2394 {
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2395 _bellMode=mode;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2396 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2397
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2398 void TerminalView::enableBell()
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2399 {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2400 _allowBell = true;
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2401 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2402
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2403 void TerminalView::swapColorTable()
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2404 {
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2405 ColorEntry color = _colorTable[1];
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2406 _colorTable[1]=_colorTable[0];
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2407 _colorTable[0]= color;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2408 _colorsInverted = !_colorsInverted;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2409 update();
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2410 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2411
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2412 void TerminalView::clearImage()
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2413 {
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2414 // We initialize _image[_imageSize] too. See makeImage()
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2415 for (int i = 0; i <= _imageSize; i++)
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2416 {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2417 _image[i].character = ' ';
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2418 _image[i].foregroundColor = CharacterColor(COLOR_SPACE_DEFAULT,
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2419 DEFAULT_FORE_COLOR);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2420 _image[i].backgroundColor = CharacterColor(COLOR_SPACE_DEFAULT,
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2421 DEFAULT_BACK_COLOR);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2422 _image[i].rendition = DEFAULT_RENDITION;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2423 }
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2424 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2425
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2426 void TerminalView::calcGeometry()
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2427 {
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2428 _scrollBar->resize(QApplication::style()->pixelMetric(QStyle::PM_ScrollBarExtent),
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2429 contentsRect().height());
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2430 switch(_scrollbarLocation)
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2431 {
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2432 case NoScrollBar :
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2433 _leftMargin = DEFAULT_LEFT_MARGIN;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2434 _contentWidth = contentsRect().width() - 2 * DEFAULT_LEFT_MARGIN;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2435 break;
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2436 case ScrollBarLeft :
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2437 _leftMargin = DEFAULT_LEFT_MARGIN + _scrollBar->width();
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2438 _contentWidth = contentsRect().width() - 2 * DEFAULT_LEFT_MARGIN - _scrollBar->width();
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2439 _scrollBar->move(contentsRect().topLeft());
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2440 break;
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2441 case ScrollBarRight:
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2442 _leftMargin = DEFAULT_LEFT_MARGIN;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2443 _contentWidth = contentsRect().width() - 2 * DEFAULT_LEFT_MARGIN - _scrollBar->width();
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2444 _scrollBar->move(contentsRect().topRight() - QPoint(_scrollBar->width()-1,0));
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2445 break;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2446 }
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2447
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2448 _topMargin = DEFAULT_TOP_MARGIN;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2449 _contentHeight = contentsRect().height() - 2 * DEFAULT_TOP_MARGIN + /* mysterious */ 1;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2450
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2451 if (!_isFixedSize)
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2452 {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2453 // ensure that display is always at least one column wide
17857
c17a3e43956b avoid partial lines at top of command window
John W. Eaton <jwe@octave.org>
parents: 17852
diff changeset
2454 _columns = qMax(1,qFloor(_contentWidth / _fontWidth));
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2455 _usedColumns = qMin(_usedColumns,_columns);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2456
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2457 // ensure that display is always at least one line high
17857
c17a3e43956b avoid partial lines at top of command window
John W. Eaton <jwe@octave.org>
parents: 17852
diff changeset
2458 _lines = qMax(1, qFloor(_contentHeight / _fontHeight));
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2459 _usedLines = qMin(_usedLines,_lines);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2460 }
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2461 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2462
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2463 void TerminalView::makeImage()
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2464 {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2465 //qDebug("%s %d makeImage", __FILE__, __LINE__);
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2466 calcGeometry();
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2467
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
2468 // confirm that array will be of non-zero size, since the painting code
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2469 // assumes a non-zero array length
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2470 Q_ASSERT( _lines > 0 && _columns > 0 );
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2471 Q_ASSERT( _usedLines <= _lines && _usedColumns <= _columns );
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2472
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2473 _imageSize=_lines*_columns;
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
2474
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2475 // We over-commit one character so that we can be more relaxed in dealing with
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2476 // certain boundary conditions: _image[_imageSize] is a valid but unused position
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2477 _image = new Character[_imageSize+1];
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2478
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2479 clearImage();
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2480 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2481
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2482 // calculate the needed size
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2483 void TerminalView::setSize(int columns, int lines)
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2484 {
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2485 //FIXME - Not quite correct, a small amount of additional space
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2486 // will be used for margins, the scrollbar etc.
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2487 // we need to allow for this so that '_size' does allow
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2488 // enough room for the specified number of columns and lines to fit
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2489
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2490 QSize newSize = QSize( columns * _fontWidth ,
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2491 lines * _fontHeight );
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2492
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2493 if ( newSize != size() )
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2494 {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2495 _size = newSize;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2496 updateGeometry();
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2497 }
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2498 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2499
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2500 void TerminalView::setFixedSize(int cols, int lins)
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2501 {
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2502 _isFixedSize = true;
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
2503
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2504 //ensure that display is at least one line by one column in size
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2505 _columns = qMax(1,cols);
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2506 _lines = qMax(1,lins);
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2507 _usedColumns = qMin(_usedColumns,_columns);
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2508 _usedLines = qMin(_usedLines,_lines);
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2509
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2510 if (_image)
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2511 {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2512 delete[] _image;
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2513 makeImage();
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2514 }
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2515 setSize(cols, lins);
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2516 QWidget::setFixedSize(_size);
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2517 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2518
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2519 QSize TerminalView::sizeHint() const
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2520 {
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2521 return _size;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2522 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2523
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2524
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2525 /* --------------------------------------------------------------------- */
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2526 /* */
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2527 /* Drag & Drop */
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2528 /* */
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2529 /* --------------------------------------------------------------------- */
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2530
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2531 void TerminalView::dragEnterEvent(QDragEnterEvent* event)
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2532 {
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2533 if (event->mimeData()->hasFormat("text/plain"))
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2534 event->acceptProposedAction();
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2535 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2536
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2537 void TerminalView::dropEvent(QDropEvent* event)
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2538 {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2539 // KUrl::List urls = KUrl::List::fromMimeData(event->mimeData());
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2540
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2541 QString dropText;
18651
992b6354c8c6 GUI: implement file drag and drop to command and edit window (Bug #41443)
John Donoghue
parents: 18555
diff changeset
2542
992b6354c8c6 GUI: implement file drag and drop to command and edit window (Bug #41443)
John Donoghue
parents: 18555
diff changeset
2543 if (event->mimeData ()->hasUrls ())
992b6354c8c6 GUI: implement file drag and drop to command and edit window (Bug #41443)
John Donoghue
parents: 18555
diff changeset
2544 {
992b6354c8c6 GUI: implement file drag and drop to command and edit window (Bug #41443)
John Donoghue
parents: 18555
diff changeset
2545 foreach (QUrl url, event->mimeData ()->urls ())
992b6354c8c6 GUI: implement file drag and drop to command and edit window (Bug #41443)
John Donoghue
parents: 18555
diff changeset
2546 {
19595
be7ac98fab43 strip trailing whitespace from most source files
John W. Eaton <jwe@octave.org>
parents: 18975
diff changeset
2547 if(dropText.length () > 0)
23787
b481a9baeb61 Replace += "\n" with += '\n' which avoids string constructor for performance.
Rik <rik@octave.org>
parents: 23472
diff changeset
2548 dropText += '\n';
18651
992b6354c8c6 GUI: implement file drag and drop to command and edit window (Bug #41443)
John Donoghue
parents: 18555
diff changeset
2549 dropText += url.toLocalFile ();
992b6354c8c6 GUI: implement file drag and drop to command and edit window (Bug #41443)
John Donoghue
parents: 18555
diff changeset
2550 }
992b6354c8c6 GUI: implement file drag and drop to command and edit window (Bug #41443)
John Donoghue
parents: 18555
diff changeset
2551 }
992b6354c8c6 GUI: implement file drag and drop to command and edit window (Bug #41443)
John Donoghue
parents: 18555
diff changeset
2552
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2553 /* if (!urls.isEmpty())
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2554 {
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
2555 for ( int i = 0 ; i < urls.count() ; i++ )
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2556 {
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2557 KUrl url = KIO::NetAccess::mostLocalUrl( urls[i] , 0 );
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2558 QString urlText;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2559
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2560 if (url.isLocalFile())
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
2561 urlText = url.path();
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2562 else
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2563 urlText = url.url();
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
2564
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2565 // in future it may be useful to be able to insert file names with drag-and-drop
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
2566 // without quoting them (this only affects paths with spaces in)
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2567 urlText = KShell::quoteArg(urlText);
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
2568
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2569 dropText += urlText;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2570
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
2571 if ( i != urls.count()-1 )
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2572 dropText += ' ';
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2573 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2574 }
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
2575 else
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2576 {
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2577 dropText = event->mimeData()->text();
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2578 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2579 */
15669
a8ff19a82906 Added copy&paste context menu in the unix implementation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15653
diff changeset
2580 if(event->mimeData()->hasFormat("text/plain"))
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2581 {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2582 emit sendStringToEmu(dropText.toLocal8Bit());
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2583 }
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2584 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2585
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2586 void TerminalView::doDrag()
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2587 {
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2588 dragInfo.state = diDragging;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2589 dragInfo.dragObject = new QDrag(this);
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2590 QMimeData *mimeData = new QMimeData;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2591 mimeData->setText(QApplication::clipboard()->text(QClipboard::Selection));
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2592 dragInfo.dragObject->setMimeData(mimeData);
28843
429275a362c4 avoid deprecated Qt QDrag::start function
John W. Eaton <jwe@octave.org>
parents: 28841
diff changeset
2593 dragInfo.dragObject->exec(Qt::CopyAction);
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2594 // Don't delete the QTextDrag object. Qt will delete it when it's done with it.
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2595 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2596
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2597 void TerminalView::outputSuspended(bool suspended)
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2598 {
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2599 //create the label when this function is first called
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2600 if (!_outputSuspendedLabel)
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2601 {
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2602 //This label includes a link to an English language website
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2603 //describing the 'flow control' (Xon/Xoff) feature found in almost
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2604 //all terminal emulators.
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2605 //If there isn't a suitable article available in the target language the link
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2606 //can simply be removed.
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2607 _outputSuspendedLabel = new QLabel( ("<qt>Output has been "
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2608 "<a href=\"http://en.wikipedia.org/wiki/XON\">suspended</a>"
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2609 " by pressing Ctrl+S."
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2610 " Press <b>Ctrl+Q</b> to resume.</qt>"),
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2611 this );
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2612
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2613 QPalette palette(_outputSuspendedLabel->palette());
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2614
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2615 palette.setColor(QPalette::Normal, QPalette::WindowText, QColor(Qt::white));
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2616 palette.setColor(QPalette::Normal, QPalette::Window, QColor(Qt::black));
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2617 // KColorScheme::adjustForeground(palette,KColorScheme::NeutralText);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2618 // KColorScheme::adjustBackground(palette,KColorScheme::NeutralBackground);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2619 _outputSuspendedLabel->setPalette(palette);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2620 _outputSuspendedLabel->setAutoFillBackground(true);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2621 _outputSuspendedLabel->setBackgroundRole(QPalette::Base);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2622 _outputSuspendedLabel->setFont(QApplication::font());
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2623 _outputSuspendedLabel->setMargin(5);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2624
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2625 //enable activation of "Xon/Xoff" link in label
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2626 _outputSuspendedLabel->setTextInteractionFlags(Qt::LinksAccessibleByMouse |
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2627 Qt::LinksAccessibleByKeyboard);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2628 _outputSuspendedLabel->setOpenExternalLinks(true);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2629 _outputSuspendedLabel->setVisible(false);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2630
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2631 _gridLayout->addWidget(_outputSuspendedLabel);
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2632 _gridLayout->addItem( new QSpacerItem(0,0,QSizePolicy::Expanding,
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2633 QSizePolicy::Expanding),
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2634 1,0);
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2635
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2636 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2637
15671
14da85a0d1c3 Set terminal to fixed width, renamed some variables.
Jacob Dawid <jacob.dawid@googlemail.com>
parents: 15669
diff changeset
2638 _outputSuspendedLabel->setVisible(suspended);
15651
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2639 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2640
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2641 uint TerminalView::lineSpacing() const
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2642 {
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2643 return _lineSpacing;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2644 }
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2645
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2646 void TerminalView::setLineSpacing(uint i)
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2647 {
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2648 _lineSpacing = i;
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2649 setVTFont(font()); // Trigger an update.
845cebf281aa Added files of QConsole.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff changeset
2650 }
16794
1d1f02e0f6b4 GUI: enable clipboard content detection for terminal window context menu
John Donoghue <john.donoghue@ieee.org>
parents: 16648
diff changeset
2651
1d1f02e0f6b4 GUI: enable clipboard content detection for terminal window context menu
John Donoghue <john.donoghue@ieee.org>
parents: 16648
diff changeset
2652 QString TerminalView::selectedText ()
1d1f02e0f6b4 GUI: enable clipboard content detection for terminal window context menu
John Donoghue <john.donoghue@ieee.org>
parents: 16648
diff changeset
2653 {
1d1f02e0f6b4 GUI: enable clipboard content detection for terminal window context menu
John Donoghue <john.donoghue@ieee.org>
parents: 16648
diff changeset
2654 QString text = _screenWindow->selectedText (_preserveLineBreaks);
1d1f02e0f6b4 GUI: enable clipboard content detection for terminal window context menu
John Donoghue <john.donoghue@ieee.org>
parents: 16648
diff changeset
2655 return text;
1d1f02e0f6b4 GUI: enable clipboard content detection for terminal window context menu
John Donoghue <john.donoghue@ieee.org>
parents: 16648
diff changeset
2656 }
23808
2b1b2a795ba6 update clickable urls in terminal also when visible terminal has no focus
Torsten <mttl@mailbox.org>
parents: 23796
diff changeset
2657
2b1b2a795ba6 update clickable urls in terminal also when visible terminal has no focus
Torsten <mttl@mailbox.org>
parents: 23796
diff changeset
2658 void
2b1b2a795ba6 update clickable urls in terminal also when visible terminal has no focus
Torsten <mttl@mailbox.org>
parents: 23796
diff changeset
2659 TerminalView::visibility_changed (bool visible)
2b1b2a795ba6 update clickable urls in terminal also when visible terminal has no focus
Torsten <mttl@mailbox.org>
parents: 23796
diff changeset
2660 {
2b1b2a795ba6 update clickable urls in terminal also when visible terminal has no focus
Torsten <mttl@mailbox.org>
parents: 23796
diff changeset
2661 // Disable the timer for processing the filter chain, since this might time
2b1b2a795ba6 update clickable urls in terminal also when visible terminal has no focus
Torsten <mttl@mailbox.org>
parents: 23796
diff changeset
2662 // consuming
2b1b2a795ba6 update clickable urls in terminal also when visible terminal has no focus
Torsten <mttl@mailbox.org>
parents: 23796
diff changeset
2663 if (visible)
2b1b2a795ba6 update clickable urls in terminal also when visible terminal has no focus
Torsten <mttl@mailbox.org>
parents: 23796
diff changeset
2664 _process_filter_timer->start (300);
2b1b2a795ba6 update clickable urls in terminal also when visible terminal has no focus
Torsten <mttl@mailbox.org>
parents: 23796
diff changeset
2665 else
2b1b2a795ba6 update clickable urls in terminal also when visible terminal has no focus
Torsten <mttl@mailbox.org>
parents: 23796
diff changeset
2666 _process_filter_timer->stop ();
2b1b2a795ba6 update clickable urls in terminal also when visible terminal has no focus
Torsten <mttl@mailbox.org>
parents: 23796
diff changeset
2667 }