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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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