Mercurial > hg > octave-thorsten
annotate gui/qtermwidget/lib/Emulation.cpp @ 14240:a9992bc3c3f7 gui
GUI: Added qtermwidget snapshot as a subproject to build as a library that links with Octave GUI.
author | Jacob Dawid <jacob.dawid@googlemail.com> |
---|---|
date | Sat, 21 Jan 2012 11:26:36 +0100 |
parents | fd14634f9c1e |
children |
rev | line source |
---|---|
13347
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
1 /* |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
2 This file is part of Konsole, an X terminal. |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
3 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
4 Copyright (C) 2007 Robert Knight <robertknight@gmail.com> |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
5 Copyright (C) 1997,1998 by Lars Doelle <lars.doelle@on-line.de> |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
6 Copyright (C) 1996 by Matthias Ettrich <ettrich@kde.org> |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
7 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
8 Rewritten for QT4 by e_k <e_k at users.sourceforge.net>, Copyright (C)2008 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
9 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
10 This program is free software; you can redistribute it and/or modify |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
11 it under the terms of the GNU General Public License as published by |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
12 the Free Software Foundation; either version 2 of the License, or |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
13 (at your option) any later version. |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
14 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
15 This program is distributed in the hope that it will be useful, |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
16 but WITHOUT ANY WARRANTY; without even the implied warranty of |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
18 GNU General Public License for more details. |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
19 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
20 You should have received a copy of the GNU General Public License |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
21 along with this program; if not, write to the Free Software |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
22 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
23 02110-1301 USA. |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
24 */ |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
25 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
26 // Own |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
27 #include "Emulation.h" |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
28 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
29 // System |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
30 #include <assert.h> |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
31 #include <stdio.h> |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
32 #include <stdlib.h> |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
33 #include <unistd.h> |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
34 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
35 // Qt |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
36 #include <QtGui/QApplication> |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
37 #include <QtGui/QClipboard> |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
38 #include <QtCore/QHash> |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
39 #include <QtGui/QKeyEvent> |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
40 #include <QtCore/QRegExp> |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
41 #include <QtCore/QTextStream> |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
42 #include <QtCore/QThread> |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
43 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
44 #include <QtCore/QTime> |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
45 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
46 // Konsole |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
47 #include "KeyboardTranslator.h" |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
48 #include "Screen.h" |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
49 #include "TerminalCharacterDecoder.h" |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
50 #include "ScreenWindow.h" |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
51 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
52 using namespace Konsole; |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
53 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
54 /* ------------------------------------------------------------------------- */ |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
55 /* */ |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
56 /* Emulation */ |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
57 /* */ |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
58 /* ------------------------------------------------------------------------- */ |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
59 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
60 //#define CNTL(c) ((c)-'@') |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
61 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
62 /*! |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
63 */ |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
64 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
65 Emulation::Emulation() : |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
66 _currentScreen(0), |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
67 _codec(0), |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
68 _decoder(0), |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
69 _keyTranslator(0), |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
70 _usesMouse(false) |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
71 { |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
72 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
73 // create screens with a default size |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
74 _screen[0] = new Screen(40,80); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
75 _screen[1] = new Screen(40,80); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
76 _currentScreen = _screen[0]; |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
77 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
78 QObject::connect(&_bulkTimer1, SIGNAL(timeout()), this, SLOT(showBulk()) ); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
79 QObject::connect(&_bulkTimer2, SIGNAL(timeout()), this, SLOT(showBulk()) ); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
80 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
81 // listen for mouse status changes |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
82 connect( this , SIGNAL(programUsesMouseChanged(bool)) , |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
83 SLOT(usesMouseChanged(bool)) ); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
84 } |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
85 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
86 bool Emulation::programUsesMouse() const |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
87 { |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
88 return _usesMouse; |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
89 } |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
90 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
91 void Emulation::usesMouseChanged(bool usesMouse) |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
92 { |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
93 _usesMouse = usesMouse; |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
94 } |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
95 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
96 ScreenWindow* Emulation::createWindow() |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
97 { |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
98 ScreenWindow* window = new ScreenWindow(); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
99 window->setScreen(_currentScreen); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
100 _windows << window; |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
101 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
102 connect(window , SIGNAL(selectionChanged()), |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
103 this , SLOT(bufferedUpdate())); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
104 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
105 connect(this , SIGNAL(outputChanged()), |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
106 window , SLOT(notifyOutputChanged()) ); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
107 return window; |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
108 } |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
109 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
110 /*! |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
111 */ |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
112 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
113 Emulation::~Emulation() |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
114 { |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
115 QListIterator<ScreenWindow*> windowIter(_windows); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
116 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
117 while (windowIter.hasNext()) |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
118 { |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
119 delete windowIter.next(); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
120 } |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
121 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
122 delete _screen[0]; |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
123 delete _screen[1]; |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
124 delete _decoder; |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
125 } |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
126 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
127 /*! change between primary and alternate _screen |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
128 */ |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
129 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
130 void Emulation::setScreen(int n) |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
131 { |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
132 Screen *old = _currentScreen; |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
133 _currentScreen = _screen[n&1]; |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
134 if (_currentScreen != old) |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
135 { |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
136 old->setBusySelecting(false); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
137 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
138 // tell all windows onto this emulation to switch to the newly active _screen |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
139 QListIterator<ScreenWindow*> windowIter(_windows); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
140 while ( windowIter.hasNext() ) |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
141 { |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
142 windowIter.next()->setScreen(_currentScreen); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
143 } |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
144 } |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
145 } |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
146 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
147 void Emulation::clearHistory() |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
148 { |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
149 _screen[0]->setScroll( _screen[0]->getScroll() , false ); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
150 } |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
151 void Emulation::setHistory(const HistoryType& t) |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
152 { |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
153 _screen[0]->setScroll(t); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
154 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
155 showBulk(); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
156 } |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
157 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
158 const HistoryType& Emulation::history() |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
159 { |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
160 return _screen[0]->getScroll(); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
161 } |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
162 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
163 void Emulation::setCodec(const QTextCodec * qtc) |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
164 { |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
165 Q_ASSERT( qtc ); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
166 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
167 _codec = qtc; |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
168 delete _decoder; |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
169 _decoder = _codec->makeDecoder(); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
170 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
171 emit useUtf8Request(utf8()); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
172 } |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
173 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
174 void Emulation::setCodec(EmulationCodec codec) |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
175 { |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
176 if ( codec == Utf8Codec ) |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
177 setCodec( QTextCodec::codecForName("utf8") ); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
178 else if ( codec == LocaleCodec ) |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
179 setCodec( QTextCodec::codecForLocale() ); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
180 } |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
181 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
182 void Emulation::setKeyBindings(const QString& name) |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
183 { |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
184 _keyTranslator = KeyboardTranslatorManager::instance()->findTranslator(name); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
185 } |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
186 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
187 QString Emulation::keyBindings() |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
188 { |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
189 return _keyTranslator->name(); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
190 } |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
191 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
192 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
193 // Interpreting Codes --------------------------------------------------------- |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
194 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
195 /* |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
196 This section deals with decoding the incoming character stream. |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
197 Decoding means here, that the stream is first separated into `tokens' |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
198 which are then mapped to a `meaning' provided as operations by the |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
199 `Screen' class. |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
200 */ |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
201 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
202 /*! |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
203 */ |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
204 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
205 void Emulation::receiveChar(int c) |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
206 // process application unicode input to terminal |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
207 // this is a trivial scanner |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
208 { |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
209 c &= 0xff; |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
210 switch (c) |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
211 { |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
212 case '\b' : _currentScreen->BackSpace(); break; |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
213 case '\t' : _currentScreen->Tabulate(); break; |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
214 case '\n' : _currentScreen->NewLine(); break; |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
215 case '\r' : _currentScreen->Return(); break; |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
216 case 0x07 : emit stateSet(NOTIFYBELL); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
217 break; |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
218 default : _currentScreen->ShowCharacter(c); break; |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
219 }; |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
220 } |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
221 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
222 /* ------------------------------------------------------------------------- */ |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
223 /* */ |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
224 /* Keyboard Handling */ |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
225 /* */ |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
226 /* ------------------------------------------------------------------------- */ |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
227 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
228 /*! |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
229 */ |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
230 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
231 void Emulation::sendKeyEvent( QKeyEvent* ev ) |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
232 { |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
233 emit stateSet(NOTIFYNORMAL); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
234 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
235 if (!ev->text().isEmpty()) |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
236 { // A block of text |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
237 // Note that the text is proper unicode. |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
238 // We should do a conversion here, but since this |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
239 // routine will never be used, we simply emit plain ascii. |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
240 //emit sendBlock(ev->text().toAscii(),ev->text().length()); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
241 emit sendData(ev->text().toUtf8(),ev->text().length()); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
242 } |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
243 } |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
244 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
245 void Emulation::sendString(const char*,int) |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
246 { |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
247 // default implementation does nothing |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
248 } |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
249 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
250 void Emulation::sendMouseEvent(int /*buttons*/, int /*column*/, int /*row*/, int /*eventType*/) |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
251 { |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
252 // default implementation does nothing |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
253 } |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
254 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
255 // Unblocking, Byte to Unicode translation --------------------------------- -- |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
256 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
257 /* |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
258 We are doing code conversion from locale to unicode first. |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
259 TODO: Character composition from the old code. See #96536 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
260 */ |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
261 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
262 void Emulation::receiveData(const char* text, int length) |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
263 { |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
264 emit stateSet(NOTIFYACTIVITY); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
265 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
266 bufferedUpdate(); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
267 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
268 QString unicodeText = _decoder->toUnicode(text,length); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
269 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
270 //send characters to terminal emulator |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
271 for (int i=0;i<unicodeText.length();i++) |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
272 { |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
273 receiveChar(unicodeText[i].unicode()); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
274 } |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
275 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
276 //look for z-modem indicator |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
277 //-- someone who understands more about z-modems that I do may be able to move |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
278 //this check into the above for loop? |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
279 for (int i=0;i<length;i++) |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
280 { |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
281 if (text[i] == '\030') |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
282 { |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
283 if ((length-i-1 > 3) && (strncmp(text+i+1, "B00", 3) == 0)) |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
284 emit zmodemDetected(); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
285 } |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
286 } |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
287 } |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
288 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
289 //OLDER VERSION |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
290 //This version of onRcvBlock was commented out because |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
291 // a) It decoded incoming characters one-by-one, which is slow in the current version of Qt (4.2 tech preview) |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
292 // b) It messed up decoding of non-ASCII characters, with the result that (for example) chinese characters |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
293 // were not printed properly. |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
294 // |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
295 //There is something about stopping the _decoder if "we get a control code halfway a multi-byte sequence" (see below) |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
296 //which hasn't been ported into the newer function (above). Hopefully someone who understands this better |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
297 //can find an alternative way of handling the check. |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
298 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
299 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
300 /*void Emulation::onRcvBlock(const char *s, int len) |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
301 { |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
302 emit notifySessionState(NOTIFYACTIVITY); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
303 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
304 bufferedUpdate(); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
305 for (int i = 0; i < len; i++) |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
306 { |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
307 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
308 QString result = _decoder->toUnicode(&s[i],1); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
309 int reslen = result.length(); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
310 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
311 // If we get a control code halfway a multi-byte sequence |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
312 // we flush the _decoder and continue with the control code. |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
313 if ((s[i] < 32) && (s[i] > 0)) |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
314 { |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
315 // Flush _decoder |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
316 while(!result.length()) |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
317 result = _decoder->toUnicode(&s[i],1); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
318 reslen = 1; |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
319 result.resize(reslen); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
320 result[0] = QChar(s[i]); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
321 } |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
322 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
323 for (int j = 0; j < reslen; j++) |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
324 { |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
325 if (result[j].characterategory() == QChar::Mark_NonSpacing) |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
326 _currentScreen->compose(result.mid(j,1)); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
327 else |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
328 onRcvChar(result[j].unicode()); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
329 } |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
330 if (s[i] == '\030') |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
331 { |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
332 if ((len-i-1 > 3) && (strncmp(s+i+1, "B00", 3) == 0)) |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
333 emit zmodemDetected(); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
334 } |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
335 } |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
336 }*/ |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
337 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
338 // Selection --------------------------------------------------------------- -- |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
339 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
340 #if 0 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
341 void Emulation::onSelectionBegin(const int x, const int y, const bool columnmode) { |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
342 if (!connected) return; |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
343 _currentScreen->setSelectionStart( x,y,columnmode); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
344 showBulk(); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
345 } |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
346 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
347 void Emulation::onSelectionExtend(const int x, const int y) { |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
348 if (!connected) return; |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
349 _currentScreen->setSelectionEnd(x,y); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
350 showBulk(); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
351 } |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
352 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
353 void Emulation::setSelection(const bool preserve_line_breaks) { |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
354 if (!connected) return; |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
355 QString t = _currentScreen->selectedText(preserve_line_breaks); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
356 if (!t.isNull()) |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
357 { |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
358 QListIterator< TerminalDisplay* > viewIter(_views); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
359 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
360 while (viewIter.hasNext()) |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
361 viewIter.next()->setSelection(t); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
362 } |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
363 } |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
364 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
365 void Emulation::testIsSelected(const int x, const int y, bool &selected) |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
366 { |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
367 if (!connected) return; |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
368 selected=_currentScreen->isSelected(x,y); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
369 } |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
370 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
371 void Emulation::clearSelection() { |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
372 if (!connected) return; |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
373 _currentScreen->clearSelection(); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
374 showBulk(); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
375 } |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
376 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
377 #endif |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
378 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
379 void Emulation::writeToStream( TerminalCharacterDecoder* _decoder , |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
380 int startLine , |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
381 int endLine) |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
382 { |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
383 _currentScreen->writeToStream(_decoder,startLine,endLine); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
384 } |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
385 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
386 int Emulation::lineCount() |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
387 { |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
388 // sum number of lines currently on _screen plus number of lines in history |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
389 return _currentScreen->getLines() + _currentScreen->getHistLines(); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
390 } |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
391 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
392 // Refreshing -------------------------------------------------------------- -- |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
393 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
394 #define BULK_TIMEOUT1 10 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
395 #define BULK_TIMEOUT2 40 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
396 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
397 /*! |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
398 */ |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
399 void Emulation::showBulk() |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
400 { |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
401 _bulkTimer1.stop(); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
402 _bulkTimer2.stop(); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
403 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
404 emit outputChanged(); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
405 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
406 _currentScreen->resetScrolledLines(); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
407 _currentScreen->resetDroppedLines(); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
408 } |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
409 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
410 void Emulation::bufferedUpdate() |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
411 { |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
412 _bulkTimer1.setSingleShot(true); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
413 _bulkTimer1.start(BULK_TIMEOUT1); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
414 if (!_bulkTimer2.isActive()) |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
415 { |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
416 _bulkTimer2.setSingleShot(true); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
417 _bulkTimer2.start(BULK_TIMEOUT2); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
418 } |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
419 } |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
420 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
421 char Emulation::getErase() const |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
422 { |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
423 return '\b'; |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
424 } |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
425 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
426 void Emulation::setImageSize(int lines, int columns) |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
427 { |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
428 //kDebug() << "Resizing image to: " << lines << "by" << columns << QTime::currentTime().msec(); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
429 Q_ASSERT( lines > 0 ); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
430 Q_ASSERT( columns > 0 ); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
431 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
432 _screen[0]->resizeImage(lines,columns); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
433 _screen[1]->resizeImage(lines,columns); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
434 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
435 emit imageSizeChanged(lines,columns); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
436 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
437 bufferedUpdate(); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
438 } |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
439 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
440 QSize Emulation::imageSize() |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
441 { |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
442 return QSize(_currentScreen->getColumns(), _currentScreen->getLines()); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
443 } |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
444 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
445 ushort ExtendedCharTable::extendedCharHash(ushort* unicodePoints , ushort length) const |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
446 { |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
447 ushort hash = 0; |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
448 for ( ushort i = 0 ; i < length ; i++ ) |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
449 { |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
450 hash = 31*hash + unicodePoints[i]; |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
451 } |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
452 return hash; |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
453 } |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
454 bool ExtendedCharTable::extendedCharMatch(ushort hash , ushort* unicodePoints , ushort length) const |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
455 { |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
456 ushort* entry = extendedCharTable[hash]; |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
457 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
458 // compare given length with stored sequence length ( given as the first ushort in the |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
459 // stored buffer ) |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
460 if ( entry == 0 || entry[0] != length ) |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
461 return false; |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
462 // if the lengths match, each character must be checked. the stored buffer starts at |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
463 // entry[1] |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
464 for ( int i = 0 ; i < length ; i++ ) |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
465 { |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
466 if ( entry[i+1] != unicodePoints[i] ) |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
467 return false; |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
468 } |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
469 return true; |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
470 } |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
471 ushort ExtendedCharTable::createExtendedChar(ushort* unicodePoints , ushort length) |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
472 { |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
473 // look for this sequence of points in the table |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
474 ushort hash = extendedCharHash(unicodePoints,length); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
475 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
476 // check existing entry for match |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
477 while ( extendedCharTable.contains(hash) ) |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
478 { |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
479 if ( extendedCharMatch(hash,unicodePoints,length) ) |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
480 { |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
481 // this sequence already has an entry in the table, |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
482 // return its hash |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
483 return hash; |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
484 } |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
485 else |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
486 { |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
487 // if hash is already used by another, different sequence of unicode character |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
488 // points then try next hash |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
489 hash++; |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
490 } |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
491 } |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
492 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
493 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
494 // add the new sequence to the table and |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
495 // return that index |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
496 ushort* buffer = new ushort[length+1]; |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
497 buffer[0] = length; |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
498 for ( int i = 0 ; i < length ; i++ ) |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
499 buffer[i+1] = unicodePoints[i]; |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
500 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
501 extendedCharTable.insert(hash,buffer); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
502 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
503 return hash; |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
504 } |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
505 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
506 ushort* ExtendedCharTable::lookupExtendedChar(ushort hash , ushort& length) const |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
507 { |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
508 // lookup index in table and if found, set the length |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
509 // argument and return a pointer to the character sequence |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
510 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
511 ushort* buffer = extendedCharTable[hash]; |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
512 if ( buffer ) |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
513 { |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
514 length = buffer[0]; |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
515 return buffer+1; |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
516 } |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
517 else |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
518 { |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
519 length = 0; |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
520 return 0; |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
521 } |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
522 } |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
523 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
524 ExtendedCharTable::ExtendedCharTable() |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
525 { |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
526 } |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
527 ExtendedCharTable::~ExtendedCharTable() |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
528 { |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
529 // free all allocated character buffers |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
530 QHashIterator<ushort,ushort*> iter(extendedCharTable); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
531 while ( iter.hasNext() ) |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
532 { |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
533 iter.next(); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
534 delete[] iter.value(); |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
535 } |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
536 } |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
537 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
538 // global instance |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
539 ExtendedCharTable ExtendedCharTable::instance; |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
540 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
541 |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
542 //#include "moc_Emulation.cpp" |
fd14634f9c1e
Integrated qtermwidget terminal emulation.
Jacob Dawid <jacob.dawid@googlemail.com>
parents:
diff
changeset
|
543 |