summaryrefslogtreecommitdiff
authorharlekin <harlekin>2004-02-01 12:52:08 (UTC)
committer harlekin <harlekin>2004-02-01 12:52:08 (UTC)
commit29220ef88ff2f93cef17695e3733da62c16d89ca (patch) (unidiff)
treec98007f673dfcf3480ac7e1a61746ce7d68c5b45
parentda02269f0d59e4cc932b9dbc7294374e3398ecad (diff)
downloadopie-29220ef88ff2f93cef17695e3733da62c16d89ca.zip
opie-29220ef88ff2f93cef17695e3733da62c16d89ca.tar.gz
opie-29220ef88ff2f93cef17695e3733da62c16d89ca.tar.bz2
less includes
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/apps/opie-console/MyPty.cpp2
-rw-r--r--noncore/apps/opie-console/TEWidget.cpp8
-rw-r--r--noncore/apps/opie-console/TEmuVt102.cpp5
-rw-r--r--noncore/apps/opie-console/TEmulation.cpp3
-rw-r--r--noncore/apps/opie-console/configdialog.cpp3
-rw-r--r--noncore/apps/opie-console/consoleconfigwidget.cpp2
-rw-r--r--noncore/apps/opie-console/default.cpp1
-rw-r--r--noncore/apps/opie-console/dialdialog.cpp3
-rw-r--r--noncore/apps/opie-console/emulation_handler.cpp3
-rw-r--r--noncore/apps/opie-console/emulation_layer.cpp3
-rw-r--r--noncore/apps/opie-console/emulation_widget.cpp8
-rw-r--r--noncore/apps/opie-console/file_layer.cpp1
-rw-r--r--noncore/apps/opie-console/filetransfer.cpp1
-rw-r--r--noncore/apps/opie-console/function_keyboard.cpp8
-rw-r--r--noncore/apps/opie-console/iolayerbase.cpp2
-rw-r--r--noncore/apps/opie-console/main.cpp1
-rw-r--r--noncore/apps/opie-console/mainwindow.cpp10
-rw-r--r--noncore/apps/opie-console/metafactory.cpp1
-rw-r--r--noncore/apps/opie-console/modemconfigwidget.cpp2
-rw-r--r--noncore/apps/opie-console/profileeditordialog.cpp1
-rw-r--r--noncore/apps/opie-console/profilemanager.cpp5
-rw-r--r--noncore/apps/opie-console/receive_layer.cpp3
-rw-r--r--noncore/apps/opie-console/script.cpp1
-rw-r--r--noncore/apps/opie-console/session.cpp2
-rw-r--r--noncore/apps/opie-console/terminalwidget.cpp4
-rw-r--r--noncore/apps/opie-console/transferdialog.cpp2
-rw-r--r--noncore/apps/opie-console/vt102emulation.cpp5
-rw-r--r--noncore/apps/opie-console/widget.cpp8
-rw-r--r--noncore/apps/opie-console/widget_layer.cpp4
29 files changed, 0 insertions, 102 deletions
diff --git a/noncore/apps/opie-console/MyPty.cpp b/noncore/apps/opie-console/MyPty.cpp
index b2f6a74..a37f980 100644
--- a/noncore/apps/opie-console/MyPty.cpp
+++ b/noncore/apps/opie-console/MyPty.cpp
@@ -1,261 +1,259 @@
1/* -------------------------------------------------------------------------- */ 1/* -------------------------------------------------------------------------- */
2/* */ 2/* */
3/* [MyPty.C] Pseudo Terminal Device */ 3/* [MyPty.C] Pseudo Terminal Device */
4/* */ 4/* */
5/* -------------------------------------------------------------------------- */ 5/* -------------------------------------------------------------------------- */
6/* */ 6/* */
7/* Copyright (c) 1997,1998 by Lars Doelle <lars.doelle@on-line.de> */ 7/* Copyright (c) 1997,1998 by Lars Doelle <lars.doelle@on-line.de> */
8/* */ 8/* */
9/* This file is part of Konsole - an X terminal for KDE */ 9/* This file is part of Konsole - an X terminal for KDE */
10/* -------------------------------------------------------------------------- */ 10/* -------------------------------------------------------------------------- */
11 /* */ 11 /* */
12/* Ported Konsole to Qt/Embedded */ 12/* Ported Konsole to Qt/Embedded */
13 /* */ 13 /* */
14/* Copyright (C) 2000 by John Ryland <jryland@trolltech.com> */ 14/* Copyright (C) 2000 by John Ryland <jryland@trolltech.com> */
15 /* */ 15 /* */
16/* -------------------------------------------------------------------------- */ 16/* -------------------------------------------------------------------------- */
17 17
18/* If you're compiling konsole on non-Linux platforms and find 18/* If you're compiling konsole on non-Linux platforms and find
19 problems that you can track down to this file, please have 19 problems that you can track down to this file, please have
20 a look into ../README.ports, too. 20 a look into ../README.ports, too.
21*/ 21*/
22 22
23/*! \file 23/*! \file
24*/ 24*/
25 25
26/*! \class TEPty 26/*! \class TEPty
27 27
28 \brief Ptys provide a pseudo terminal connection to a program. 28 \brief Ptys provide a pseudo terminal connection to a program.
29 29
30 Although closely related to pipes, these pseudo terminal connections have 30 Although closely related to pipes, these pseudo terminal connections have
31 some ability, that makes it nessesary to uses them. Most importent, they 31 some ability, that makes it nessesary to uses them. Most importent, they
32 know about changing screen sizes and UNIX job control. 32 know about changing screen sizes and UNIX job control.
33 33
34 Within the terminal emulation framework, this class represents the 34 Within the terminal emulation framework, this class represents the
35 host side of the terminal together with the connecting serial line. 35 host side of the terminal together with the connecting serial line.
36 36
37 One can create many instances of this class within a program. 37 One can create many instances of this class within a program.
38 As a side effect of using this class, a signal(2) handler is 38 As a side effect of using this class, a signal(2) handler is
39 installed on SIGCHLD. 39 installed on SIGCHLD.
40 40
41 \par FIXME 41 \par FIXME
42 42
43 [NOTE: much of the technical stuff below will be replaced by forkpty.] 43 [NOTE: much of the technical stuff below will be replaced by forkpty.]
44 44
45 publish the SIGCHLD signal if not related to an instance. 45 publish the SIGCHLD signal if not related to an instance.
46 46
47 clearify TEPty::done vs. TEPty::~TEPty semantics. 47 clearify TEPty::done vs. TEPty::~TEPty semantics.
48 check if pty is restartable via run after done. 48 check if pty is restartable via run after done.
49 49
50 \par Pseudo terminals 50 \par Pseudo terminals
51 51
52 Pseudo terminals are a unique feature of UNIX, and always come in form of 52 Pseudo terminals are a unique feature of UNIX, and always come in form of
53 pairs of devices (/dev/ptyXX and /dev/ttyXX), which are connected to each 53 pairs of devices (/dev/ptyXX and /dev/ttyXX), which are connected to each
54 other by the operating system. One may think of them as two serial devices 54 other by the operating system. One may think of them as two serial devices
55 linked by a null-modem cable. Being based on devices the number of 55 linked by a null-modem cable. Being based on devices the number of
56 simultanous instances of this class is (globally) limited by the number of 56 simultanous instances of this class is (globally) limited by the number of
57 those device pairs, which is 256. 57 those device pairs, which is 256.
58 58
59 Another technic are UNIX 98 PTY's. These are supported also, and prefered 59 Another technic are UNIX 98 PTY's. These are supported also, and prefered
60 over the (obsolete) predecessor. 60 over the (obsolete) predecessor.
61 61
62 There's a sinister ioctl(2), signal(2) and job control stuff 62 There's a sinister ioctl(2), signal(2) and job control stuff
63 nessesary to make everything work as it should. 63 nessesary to make everything work as it should.
64*/ 64*/
65 65
66 66
67#include <qapplication.h>
68#include <qsocketnotifier.h> 67#include <qsocketnotifier.h>
69#include <qstring.h>
70#include <qfile.h> 68#include <qfile.h>
71 69
72#include <stdlib.h> 70#include <stdlib.h>
73#include <stdio.h> 71#include <stdio.h>
74#include <signal.h> 72#include <signal.h>
75#include <fcntl.h> 73#include <fcntl.h>
76#include <unistd.h> 74#include <unistd.h>
77#include <termios.h> 75#include <termios.h>
78#include <sys/types.h> 76#include <sys/types.h>
79#include <sys/ioctl.h> 77#include <sys/ioctl.h>
80#include <sys/wait.h> 78#include <sys/wait.h>
81 79
82#ifdef HAVE_OPENPTY 80#ifdef HAVE_OPENPTY
83#include <pty.h> 81#include <pty.h>
84#endif 82#endif
85 83
86#include "procctl.h" 84#include "procctl.h"
87#include "MyPty.h" 85#include "MyPty.h"
88 86
89 87
90#undef VERBOSE_DEBUG 88#undef VERBOSE_DEBUG
91 89
92 90
93/* -------------------------------------------------------------------------- */ 91/* -------------------------------------------------------------------------- */
94 92
95/*! 93/*!
96 Informs the client program about the 94 Informs the client program about the
97 actual size of the window. 95 actual size of the window.
98*/ 96*/
99 97
100void MyPty::setSize(int lines, int columns) 98void MyPty::setSize(int lines, int columns)
101{ 99{
102 qWarning("setting size"); 100 qWarning("setting size");
103 struct winsize wsize; 101 struct winsize wsize;
104 wsize.ws_row = (unsigned short)lines; 102 wsize.ws_row = (unsigned short)lines;
105 wsize.ws_col = (unsigned short)columns; 103 wsize.ws_col = (unsigned short)columns;
106 if(m_fd < 0) return; 104 if(m_fd < 0) return;
107 ioctl(m_fd,TIOCSWINSZ,(char *)&wsize); 105 ioctl(m_fd,TIOCSWINSZ,(char *)&wsize);
108} 106}
109 107
110 108
111void MyPty::donePty() 109void MyPty::donePty()
112{ 110{
113 // This is code from the Qt DumbTerminal example 111 // This is code from the Qt DumbTerminal example
114 112
115 ::close(m_fd); 113 ::close(m_fd);
116 114
117 if (m_cpid) { 115 if (m_cpid) {
118 kill(m_cpid, SIGHUP); 116 kill(m_cpid, SIGHUP);
119 //waitpid(m_cpid, &status, 0); 117 //waitpid(m_cpid, &status, 0);
120 delete m_sn_e; 118 delete m_sn_e;
121 delete m_sn_r; 119 delete m_sn_r;
122 m_sn_e = 0l; 120 m_sn_e = 0l;
123 m_sn_r = 0l; 121 m_sn_r = 0l;
124 } 122 }
125 123
126 m_cpid = 0; 124 m_cpid = 0;
127 m_fd = -1; 125 m_fd = -1;
128// emit done(status); 126// emit done(status);
129} 127}
130 128
131 129
132const char* MyPty::deviceName() 130const char* MyPty::deviceName()
133{ 131{
134 return m_ttynam; 132 return m_ttynam;
135} 133}
136 134
137 135
138void MyPty::error() 136void MyPty::error()
139{ 137{
140 // This is code from the Qt DumbTerminal example 138 // This is code from the Qt DumbTerminal example
141 donePty(); 139 donePty();
142} 140}
143 141
144void MyPty::start() { 142void MyPty::start() {
145 QStrList lis; 143 QStrList lis;
146 int r =run(m_cmd.latin1(), lis, 0, 0); 144 int r =run(m_cmd.latin1(), lis, 0, 0);
147 r = r; 145 r = r;
148} 146}
149/*! 147/*!
150 start the client program. 148 start the client program.
151*/ 149*/
152int MyPty::run(const char* cmd, QStrList &, const char*, int) 150int MyPty::run(const char* cmd, QStrList &, const char*, int)
153{ 151{
154 // This is code from the Qt DumbTerminal example 152 // This is code from the Qt DumbTerminal example
155 m_cpid = fork(); 153 m_cpid = fork();
156 154
157 if ( !m_cpid ) { 155 if ( !m_cpid ) {
158 // child - exec shell on tty 156 // child - exec shell on tty
159 for (int sig = 1; sig < NSIG; sig++) signal(sig,SIG_DFL); 157 for (int sig = 1; sig < NSIG; sig++) signal(sig,SIG_DFL);
160 int ttyfd = ::open(m_ttynam, O_RDWR); 158 int ttyfd = ::open(m_ttynam, O_RDWR);
161 dup2(ttyfd, STDIN_FILENO); 159 dup2(ttyfd, STDIN_FILENO);
162 dup2(ttyfd, STDOUT_FILENO); 160 dup2(ttyfd, STDOUT_FILENO);
163 dup2(ttyfd, STDERR_FILENO); 161 dup2(ttyfd, STDERR_FILENO);
164 // should be done with tty, so close it 162 // should be done with tty, so close it
165 ::close(ttyfd); 163 ::close(ttyfd);
166 static struct termios ttmode; 164 static struct termios ttmode;
167 if ( setsid() < 0 ) 165 if ( setsid() < 0 )
168 perror( "failed to set process group" ); 166 perror( "failed to set process group" );
169#if defined (TIOCSCTTY) 167#if defined (TIOCSCTTY)
170 // grabbed from APUE by Stevens 168 // grabbed from APUE by Stevens
171 ioctl(STDIN_FILENO, TIOCSCTTY, 0); 169 ioctl(STDIN_FILENO, TIOCSCTTY, 0);
172#endif 170#endif
173 tcgetattr( STDIN_FILENO, &ttmode ); 171 tcgetattr( STDIN_FILENO, &ttmode );
174 ttmode.c_cc[VINTR] = 3; 172 ttmode.c_cc[VINTR] = 3;
175 ttmode.c_cc[VERASE] = 8; 173 ttmode.c_cc[VERASE] = 8;
176 tcsetattr( STDIN_FILENO, TCSANOW, &ttmode ); 174 tcsetattr( STDIN_FILENO, TCSANOW, &ttmode );
177 setenv("TERM",m_term,1); 175 setenv("TERM",m_term,1);
178 setenv("COLORTERM","0",1); 176 setenv("COLORTERM","0",1);
179 EnvironmentMap::Iterator it; 177 EnvironmentMap::Iterator it;
180 for (it = m_env.begin(); it != m_env.end(); it++) { 178 for (it = m_env.begin(); it != m_env.end(); it++) {
181 setenv(it.key().latin1(), it.data().latin1(), 1); 179 setenv(it.key().latin1(), it.data().latin1(), 1);
182 } 180 }
183 if (getuid() == 0) { 181 if (getuid() == 0) {
184 char msg[] = "WARNING: You are running this shell as root!\n"; 182 char msg[] = "WARNING: You are running this shell as root!\n";
185 write(ttyfd, msg, sizeof(msg)); 183 write(ttyfd, msg, sizeof(msg));
186 } 184 }
187 execl(cmd, cmd, 0); 185 execl(cmd, cmd, 0);
188 186
189 donePty(); 187 donePty();
190 exit(-1); 188 exit(-1);
191 } 189 }
192 190
193 // parent - continue as a widget 191 // parent - continue as a widget
194 delete m_sn_r; 192 delete m_sn_r;
195 m_sn_r = new QSocketNotifier(m_fd,QSocketNotifier::Read,this); 193 m_sn_r = new QSocketNotifier(m_fd,QSocketNotifier::Read,this);
196 delete m_sn_e; 194 delete m_sn_e;
197 m_sn_e = new QSocketNotifier(m_fd,QSocketNotifier::Exception,this); 195 m_sn_e = new QSocketNotifier(m_fd,QSocketNotifier::Exception,this);
198 connect(m_sn_r,SIGNAL(activated(int)),this,SLOT(readPty())); 196 connect(m_sn_r,SIGNAL(activated(int)),this,SLOT(readPty()));
199 connect(m_sn_e,SIGNAL(activated(int)),this,SLOT(error())); 197 connect(m_sn_e,SIGNAL(activated(int)),this,SLOT(error()));
200 198
201 return 0; 199 return 0;
202} 200}
203 201
204int MyPty::openPty() 202int MyPty::openPty()
205{ 203{
206 // This is code from the Qt DumbTerminal example 204 // This is code from the Qt DumbTerminal example
207 int ptyfd = -1; 205 int ptyfd = -1;
208 206
209#ifdef HAVE_OPENPTY 207#ifdef HAVE_OPENPTY
210 int ttyfd; 208 int ttyfd;
211 if ( openpty(&ptyfd,&ttyfd,m_ttynam,0,0) ) 209 if ( openpty(&ptyfd,&ttyfd,m_ttynam,0,0) )
212 ptyfd = -1; 210 ptyfd = -1;
213 else 211 else
214 ::close(ttyfd); // we open the ttynam ourselves. 212 ::close(ttyfd); // we open the ttynam ourselves.
215#else 213#else
216 for (const char* c0 = "pqrstuvwxyzabcde"; ptyfd < 0 && *c0 != 0; c0++) { 214 for (const char* c0 = "pqrstuvwxyzabcde"; ptyfd < 0 && *c0 != 0; c0++) {
217 for (const char* c1 = "0123456789abcdef"; ptyfd < 0 && *c1 != 0; c1++) { 215 for (const char* c1 = "0123456789abcdef"; ptyfd < 0 && *c1 != 0; c1++) {
218 sprintf(m_ptynam,"/dev/pty%c%c",*c0,*c1); 216 sprintf(m_ptynam,"/dev/pty%c%c",*c0,*c1);
219 sprintf(m_ttynam,"/dev/tty%c%c",*c0,*c1); 217 sprintf(m_ttynam,"/dev/tty%c%c",*c0,*c1);
220 if ((ptyfd = ::open(m_ptynam,O_RDWR)) >= 0) { 218 if ((ptyfd = ::open(m_ptynam,O_RDWR)) >= 0) {
221 if (geteuid() != 0 && !access(m_ttynam,R_OK|W_OK) == 0) { 219 if (geteuid() != 0 && !access(m_ttynam,R_OK|W_OK) == 0) {
222 ::close(ptyfd); 220 ::close(ptyfd);
223 ptyfd = -1; 221 ptyfd = -1;
224 } 222 }
225 } 223 }
226 } 224 }
227 } 225 }
228#endif 226#endif
229 227
230 if ( ptyfd < 0 ) { 228 if ( ptyfd < 0 ) {
231 //qApp->exit(1); 229 //qApp->exit(1);
232 return -1; 230 return -1;
233 } 231 }
234 232
235 return ptyfd; 233 return ptyfd;
236} 234}
237 235
238/*! 236/*!
239 Create an instance. 237 Create an instance.
240*/ 238*/
241MyPty::MyPty(const Profile& prof) : m_cpid(0) 239MyPty::MyPty(const Profile& prof) : m_cpid(0)
242{ 240{
243 241
244 int term = prof.readNumEntry("Terminal", Profile::VT100 ); 242 int term = prof.readNumEntry("Terminal", Profile::VT100 );
245 switch( term ) { 243 switch( term ) {
246 default: 244 default:
247 case Profile::VT100: 245 case Profile::VT100:
248 case Profile::VT102: 246 case Profile::VT102:
249 m_term = "vt100"; 247 m_term = "vt100";
250 break; 248 break;
251 case Profile::Linux: 249 case Profile::Linux:
252 m_term = "linux"; 250 m_term = "linux";
253 break; 251 break;
254 case Profile::XTerm: 252 case Profile::XTerm:
255 m_term = "xterm"; 253 m_term = "xterm";
256 break; 254 break;
257 } 255 }
258 m_sn_e = 0l; 256 m_sn_e = 0l;
259 m_sn_r = 0l; 257 m_sn_r = 0l;
260 m_fd = openPty(); 258 m_fd = openPty();
261 ProcCtl* ctl = ProcCtl::self(); 259 ProcCtl* ctl = ProcCtl::self();
diff --git a/noncore/apps/opie-console/TEWidget.cpp b/noncore/apps/opie-console/TEWidget.cpp
index 444924b..e535296 100644
--- a/noncore/apps/opie-console/TEWidget.cpp
+++ b/noncore/apps/opie-console/TEWidget.cpp
@@ -1,255 +1,247 @@
1/* ------------------------------------------------------------------------ */ 1/* ------------------------------------------------------------------------ */
2/* */ 2/* */
3/* [TEWidget.C] Terminal Emulation Widget */ 3/* [TEWidget.C] Terminal Emulation Widget */
4/* */ 4/* */
5/* ------------------------------------------------------------------------ */ 5/* ------------------------------------------------------------------------ */
6/* */ 6/* */
7/* Copyright (c) 1997,1998 by Lars Doelle <lars.doelle@on-line.de> */ 7/* Copyright (c) 1997,1998 by Lars Doelle <lars.doelle@on-line.de> */
8/* */ 8/* */
9/* This file is part of Konsole - an X terminal for KDE */ 9/* This file is part of Konsole - an X terminal for KDE */
10/* */ 10/* */
11/* ------------------------------------------------------------------------ */ 11/* ------------------------------------------------------------------------ */
12/* */ 12/* */
13/* Ported Konsole to Qt/Embedded */ 13/* Ported Konsole to Qt/Embedded */
14/* */ 14/* */
15/* Copyright (C) 2000 by John Ryland <jryland@trolltech.com> */ 15/* Copyright (C) 2000 by John Ryland <jryland@trolltech.com> */
16/* */ 16/* */
17/* -------------------------------------------------------------------------- */ 17/* -------------------------------------------------------------------------- */
18/*! \class TEWidget 18/*! \class TEWidget
19 19
20 \brief Visible screen contents 20 \brief Visible screen contents
21 21
22 This class is responsible to map the `image' of a terminal emulation to the 22 This class is responsible to map the `image' of a terminal emulation to the
23 display. All the dependency of the emulation to a specific GUI or toolkit is 23 display. All the dependency of the emulation to a specific GUI or toolkit is
24 localized here. Further, this widget has no knowledge about being part of an 24 localized here. Further, this widget has no knowledge about being part of an
25 emulation, it simply work within the terminal emulation framework by exposing 25 emulation, it simply work within the terminal emulation framework by exposing
26 size and key events and by being ordered to show a new image. 26 size and key events and by being ordered to show a new image.
27 27
28 <ul> 28 <ul>
29 <li> The internal image has the size of the widget (evtl. rounded up) 29 <li> The internal image has the size of the widget (evtl. rounded up)
30 <li> The external image used in setImage can have any size. 30 <li> The external image used in setImage can have any size.
31 <li> (internally) the external image is simply copied to the internal 31 <li> (internally) the external image is simply copied to the internal
32 when a setImage happens. During a resizeEvent no painting is done 32 when a setImage happens. During a resizeEvent no painting is done
33 a paintEvent is expected to follow anyway. 33 a paintEvent is expected to follow anyway.
34 </ul> 34 </ul>
35 35
36 \sa TEScreen \sa Emulation 36 \sa TEScreen \sa Emulation
37*/ 37*/
38 38
39/* FIXME: 39/* FIXME:
40 - 'image' may also be used uninitialized (it isn't in fact) in resizeEvent 40 - 'image' may also be used uninitialized (it isn't in fact) in resizeEvent
41 - 'font_a' not used in mouse events 41 - 'font_a' not used in mouse events
42 - add destructor 42 - add destructor
43*/ 43*/
44 44
45/* TODO 45/* TODO
46 - evtl. be sensitive to `paletteChange' while using default colors. 46 - evtl. be sensitive to `paletteChange' while using default colors.
47 - set different 'rounding' styles? I.e. have a mode to show clipped chars? 47 - set different 'rounding' styles? I.e. have a mode to show clipped chars?
48*/ 48*/
49 49
50// #include "config.h" 50// #include "config.h"
51#include "TEWidget.h" 51#include "TEWidget.h"
52#include "session.h"
53#include <qpe/config.h> 52#include <qpe/config.h>
54 53
55#include <qapplication.h> 54#include <qapplication.h>
56#include <qcursor.h>
57#include <qregexp.h>
58#include <qpainter.h>
59#include <qclipboard.h> 55#include <qclipboard.h>
60#include <qstyle.h>
61#include <qfile.h>
62#include <qdragobject.h>
63#include <qvbox.h>
64 56
65#include <stdio.h> 57#include <stdio.h>
66#include <stdlib.h> 58#include <stdlib.h>
67#include <unistd.h> 59#include <unistd.h>
68#include <ctype.h> 60#include <ctype.h>
69#include <sys/stat.h> 61#include <sys/stat.h>
70#include <sys/types.h> 62#include <sys/types.h>
71#include <signal.h> 63#include <signal.h>
72 64
73#include <assert.h> 65#include <assert.h>
74 66
75 67
76 68
77// #include "TEWidget.moc" 69// #include "TEWidget.moc"
78//#include <kapp.h> 70//#include <kapp.h>
79//#include <kcursor.h> 71//#include <kcursor.h>
80//#include <kurl.h> 72//#include <kurl.h>
81//#include <kdebug.h> 73//#include <kdebug.h>
82//#include <klocale.h> 74//#include <klocale.h>
83 75
84#define HERE printf("%s(%d): %s\n",__FILE__,__LINE__,__FUNCTION__) 76#define HERE printf("%s(%d): %s\n",__FILE__,__LINE__,__FUNCTION__)
85#define HCNT(Name) // { static int cnt = 1; printf("%s(%d): %s %d\n",__FILE__,__LINE__,Name,cnt++); } 77#define HCNT(Name) // { static int cnt = 1; printf("%s(%d): %s %d\n",__FILE__,__LINE__,Name,cnt++); }
86 78
87#define loc(X,Y) ((Y)*columns+(X)) 79#define loc(X,Y) ((Y)*columns+(X))
88 80
89//FIXME: the rim should normally be 1, 0 only when running in full screen mode. 81//FIXME: the rim should normally be 1, 0 only when running in full screen mode.
90#define rimX 0 // left/right rim width 82#define rimX 0 // left/right rim width
91#define rimY 0 // top/bottom rim high 83#define rimY 0 // top/bottom rim high
92 84
93#define yMouseScroll 1 85#define yMouseScroll 1
94// scroll increment used when dragging selection at top/bottom of window. 86// scroll increment used when dragging selection at top/bottom of window.
95 87
96/* Button XPM */ 88/* Button XPM */
97namespace { 89namespace {
98static char * menu_xpm[] = { 90static char * menu_xpm[] = {
99"12 12 5 1", 91"12 12 5 1",
100 " c None", 92 " c None",
101 ".c #000000", 93 ".c #000000",
102 "+c #FFFDAD", 94 "+c #FFFDAD",
103 "@c #FFFF00", 95 "@c #FFFF00",
104 "#c #E5E100", 96 "#c #E5E100",
105" ", 97" ",
106" ", 98" ",
107" ......... ", 99" ......... ",
108" .+++++++. ", 100" .+++++++. ",
109" .+@@@@#. ", 101" .+@@@@#. ",
110" .+@@@#. ", 102" .+@@@#. ",
111" .+@@#. ", 103" .+@@#. ",
112" .+@#. ", 104" .+@#. ",
113" .+#. ", 105" .+#. ",
114" .+. ", 106" .+. ",
115" .. ", 107" .. ",
116" "}; 108" "};
117 109
118} 110}
119 111
120 112
121/* ------------------------------------------------------------------------- */ 113/* ------------------------------------------------------------------------- */
122/* */ 114/* */
123/* Colors */ 115/* Colors */
124/* */ 116/* */
125/* ------------------------------------------------------------------------- */ 117/* ------------------------------------------------------------------------- */
126 118
127//FIXME: the default color table is in session.C now. 119//FIXME: the default color table is in session.C now.
128// We need a way to get rid of this one, here. 120// We need a way to get rid of this one, here.
129static const ColorEntry base_color_table[TABLE_COLORS] = 121static const ColorEntry base_color_table[TABLE_COLORS] =
130// The following are almost IBM standard color codes, with some slight 122// The following are almost IBM standard color codes, with some slight
131// gamma correction for the dim colors to compensate for bright X screens. 123// gamma correction for the dim colors to compensate for bright X screens.
132// It contains the 8 ansiterm/xterm colors in 2 intensities. 124// It contains the 8 ansiterm/xterm colors in 2 intensities.
133{ 125{
134 // Fixme: could add faint colors here, also. 126 // Fixme: could add faint colors here, also.
135 // normal 127 // normal
136 ColorEntry(QColor(0x00,0x00,0x00), 0, 0 ), ColorEntry( QColor(0xB2,0xB2,0xB2), 1, 0 ), // Dfore, Dback 128 ColorEntry(QColor(0x00,0x00,0x00), 0, 0 ), ColorEntry( QColor(0xB2,0xB2,0xB2), 1, 0 ), // Dfore, Dback
137 ColorEntry(QColor(0x00,0x00,0x00), 0, 0 ), ColorEntry( QColor(0xB2,0x18,0x18), 0, 0 ), // Black, Red 129 ColorEntry(QColor(0x00,0x00,0x00), 0, 0 ), ColorEntry( QColor(0xB2,0x18,0x18), 0, 0 ), // Black, Red
138 ColorEntry(QColor(0x18,0xB2,0x18), 0, 0 ), ColorEntry( QColor(0xB2,0x68,0x18), 0, 0 ), // Green, Yellow 130 ColorEntry(QColor(0x18,0xB2,0x18), 0, 0 ), ColorEntry( QColor(0xB2,0x68,0x18), 0, 0 ), // Green, Yellow
139 ColorEntry(QColor(0x18,0x18,0xB2), 0, 0 ), ColorEntry( QColor(0xB2,0x18,0xB2), 0, 0 ), // Blue, Magenta 131 ColorEntry(QColor(0x18,0x18,0xB2), 0, 0 ), ColorEntry( QColor(0xB2,0x18,0xB2), 0, 0 ), // Blue, Magenta
140 ColorEntry(QColor(0x18,0xB2,0xB2), 0, 0 ), ColorEntry( QColor(0xB2,0xB2,0xB2), 0, 0 ), // Cyan, White 132 ColorEntry(QColor(0x18,0xB2,0xB2), 0, 0 ), ColorEntry( QColor(0xB2,0xB2,0xB2), 0, 0 ), // Cyan, White
141 // intensiv 133 // intensiv
142 ColorEntry(QColor(0x00,0x00,0x00), 0, 1 ), ColorEntry( QColor(0xFF,0xFF,0xFF), 1, 0 ), 134 ColorEntry(QColor(0x00,0x00,0x00), 0, 1 ), ColorEntry( QColor(0xFF,0xFF,0xFF), 1, 0 ),
143 ColorEntry(QColor(0x68,0x68,0x68), 0, 0 ), ColorEntry( QColor(0xFF,0x54,0x54), 0, 0 ), 135 ColorEntry(QColor(0x68,0x68,0x68), 0, 0 ), ColorEntry( QColor(0xFF,0x54,0x54), 0, 0 ),
144 ColorEntry(QColor(0x54,0xFF,0x54), 0, 0 ), ColorEntry( QColor(0xFF,0xFF,0x54), 0, 0 ), 136 ColorEntry(QColor(0x54,0xFF,0x54), 0, 0 ), ColorEntry( QColor(0xFF,0xFF,0x54), 0, 0 ),
145 ColorEntry(QColor(0x54,0x54,0xFF), 0, 0 ), ColorEntry( QColor(0xB2,0x18,0xB2), 0, 0 ), 137 ColorEntry(QColor(0x54,0x54,0xFF), 0, 0 ), ColorEntry( QColor(0xB2,0x18,0xB2), 0, 0 ),
146 ColorEntry(QColor(0x54,0xFF,0xFF), 0, 0 ), ColorEntry( QColor(0xFF,0xFF,0xFF), 0, 0 ) 138 ColorEntry(QColor(0x54,0xFF,0xFF), 0, 0 ), ColorEntry( QColor(0xFF,0xFF,0xFF), 0, 0 )
147}; 139};
148 140
149/* Note that we use ANSI color order (bgr), while IBMPC color order is (rgb) 141/* Note that we use ANSI color order (bgr), while IBMPC color order is (rgb)
150 142
151 Code 0 1 2 3 4 5 6 7 143 Code 0 1 2 3 4 5 6 7
152 ----------- ------- ------- ------- ------- ------- ------- ------- ------- 144 ----------- ------- ------- ------- ------- ------- ------- ------- -------
153 ANSI (bgr) Black Red Green Yellow Blue Magenta Cyan White 145 ANSI (bgr) Black Red Green Yellow Blue Magenta Cyan White
154 IBMPC (rgb) Black Blue Green Cyan Red Magenta Yellow White 146 IBMPC (rgb) Black Blue Green Cyan Red Magenta Yellow White
155*/ 147*/
156 148
157QColor TEWidget::getDefaultBackColor() 149QColor TEWidget::getDefaultBackColor()
158{ 150{
159 return color_table[DEFAULT_BACK_COLOR].color; 151 return color_table[DEFAULT_BACK_COLOR].color;
160} 152}
161 153
162const ColorEntry* TEWidget::getColorTable() const 154const ColorEntry* TEWidget::getColorTable() const
163{ 155{
164 return color_table; 156 return color_table;
165} 157}
166 158
167const ColorEntry* TEWidget::getdefaultColorTable() const 159const ColorEntry* TEWidget::getdefaultColorTable() const
168{ 160{
169 return base_color_table; 161 return base_color_table;
170} 162}
171 163
172 164
173const QPixmap *TEWidget::backgroundPixmap() 165const QPixmap *TEWidget::backgroundPixmap()
174{ 166{
175 static QPixmap *bg = new QPixmap("~/qpim/main/pics/faded_bg.xpm"); 167 static QPixmap *bg = new QPixmap("~/qpim/main/pics/faded_bg.xpm");
176 const QPixmap *pm = bg; 168 const QPixmap *pm = bg;
177 return pm; 169 return pm;
178} 170}
179 171
180void TEWidget::setColorTable(const ColorEntry table[]) 172void TEWidget::setColorTable(const ColorEntry table[])
181{ 173{
182 for (int i = 0; i < TABLE_COLORS; i++) color_table[i] = table[i]; 174 for (int i = 0; i < TABLE_COLORS; i++) color_table[i] = table[i];
183 175
184 const QPixmap* pm = backgroundPixmap(); 176 const QPixmap* pm = backgroundPixmap();
185 if (!pm) setBackgroundColor(color_table[DEFAULT_BACK_COLOR].color); 177 if (!pm) setBackgroundColor(color_table[DEFAULT_BACK_COLOR].color);
186 update(); 178 update();
187} 179}
188 180
189//FIXME: add backgroundPixmapChanged. 181//FIXME: add backgroundPixmapChanged.
190 182
191/* ------------------------------------------------------------------------- */ 183/* ------------------------------------------------------------------------- */
192/* */ 184/* */
193/* Font */ 185/* Font */
194/* */ 186/* */
195/* ------------------------------------------------------------------------- */ 187/* ------------------------------------------------------------------------- */
196 188
197/* 189/*
198 The VT100 has 32 special graphical characters. The usual vt100 extended 190 The VT100 has 32 special graphical characters. The usual vt100 extended
199 xterm fonts have these at 0x00..0x1f. 191 xterm fonts have these at 0x00..0x1f.
200 192
201 QT's iso mapping leaves 0x00..0x7f without any changes. But the graphicals 193 QT's iso mapping leaves 0x00..0x7f without any changes. But the graphicals
202 come in here as proper unicode characters. 194 come in here as proper unicode characters.
203 195
204 We treat non-iso10646 fonts as VT100 extended and do the requiered mapping 196 We treat non-iso10646 fonts as VT100 extended and do the requiered mapping
205 from unicode to 0x00..0x1f. The remaining translation is then left to the 197 from unicode to 0x00..0x1f. The remaining translation is then left to the
206 QCodec. 198 QCodec.
207*/ 199*/
208 200
209// assert for i in [0..31] : vt100extended(vt100_graphics[i]) == i. 201// assert for i in [0..31] : vt100extended(vt100_graphics[i]) == i.
210 202
211unsigned short vt100_graphics[32] = 203unsigned short vt100_graphics[32] =
212{ // 0/8 1/9 2/10 3/11 4/12 5/13 6/14 7/15 204{ // 0/8 1/9 2/10 3/11 4/12 5/13 6/14 7/15
213 0x0020, 0x25C6, 0x2592, 0x2409, 0x240c, 0x240d, 0x240a, 0x00b0, 205 0x0020, 0x25C6, 0x2592, 0x2409, 0x240c, 0x240d, 0x240a, 0x00b0,
214 0x00b1, 0x2424, 0x240b, 0x2518, 0x2510, 0x250c, 0x2514, 0x253c, 206 0x00b1, 0x2424, 0x240b, 0x2518, 0x2510, 0x250c, 0x2514, 0x253c,
215 0xF800, 0xF801, 0x2500, 0xF803, 0xF804, 0x251c, 0x2524, 0x2534, 207 0xF800, 0xF801, 0x2500, 0xF803, 0xF804, 0x251c, 0x2524, 0x2534,
216 0x252c, 0x2502, 0x2264, 0x2265, 0x03C0, 0x2260, 0x00A3, 0x00b7 208 0x252c, 0x2502, 0x2264, 0x2265, 0x03C0, 0x2260, 0x00A3, 0x00b7
217}; 209};
218 210
219static QChar vt100extended(QChar c) 211static QChar vt100extended(QChar c)
220{ 212{
221 switch (c.unicode()) 213 switch (c.unicode())
222 { 214 {
223 case 0x25c6 : return 1; 215 case 0x25c6 : return 1;
224 case 0x2592 : return 2; 216 case 0x2592 : return 2;
225 case 0x2409 : return 3; 217 case 0x2409 : return 3;
226 case 0x240c : return 4; 218 case 0x240c : return 4;
227 case 0x240d : return 5; 219 case 0x240d : return 5;
228 case 0x240a : return 6; 220 case 0x240a : return 6;
229 case 0x00b0 : return 7; 221 case 0x00b0 : return 7;
230 case 0x00b1 : return 8; 222 case 0x00b1 : return 8;
231 case 0x2424 : return 9; 223 case 0x2424 : return 9;
232 case 0x240b : return 10; 224 case 0x240b : return 10;
233 case 0x2518 : return 11; 225 case 0x2518 : return 11;
234 case 0x2510 : return 12; 226 case 0x2510 : return 12;
235 case 0x250c : return 13; 227 case 0x250c : return 13;
236 case 0x2514 : return 14; 228 case 0x2514 : return 14;
237 case 0x253c : return 15; 229 case 0x253c : return 15;
238 case 0xf800 : return 16; 230 case 0xf800 : return 16;
239 case 0xf801 : return 17; 231 case 0xf801 : return 17;
240 case 0x2500 : return 18; 232 case 0x2500 : return 18;
241 case 0xf803 : return 19; 233 case 0xf803 : return 19;
242 case 0xf804 : return 20; 234 case 0xf804 : return 20;
243 case 0x251c : return 21; 235 case 0x251c : return 21;
244 case 0x2524 : return 22; 236 case 0x2524 : return 22;
245 case 0x2534 : return 23; 237 case 0x2534 : return 23;
246 case 0x252c : return 24; 238 case 0x252c : return 24;
247 case 0x2502 : return 25; 239 case 0x2502 : return 25;
248 case 0x2264 : return 26; 240 case 0x2264 : return 26;
249 case 0x2265 : return 27; 241 case 0x2265 : return 27;
250 case 0x03c0 : return 28; 242 case 0x03c0 : return 28;
251 case 0x2260 : return 29; 243 case 0x2260 : return 29;
252 case 0x00a3 : return 30; 244 case 0x00a3 : return 30;
253 case 0x00b7 : return 31; 245 case 0x00b7 : return 31;
254 } 246 }
255 return c; 247 return c;
diff --git a/noncore/apps/opie-console/TEmuVt102.cpp b/noncore/apps/opie-console/TEmuVt102.cpp
index 275c18d..0d6aef5 100644
--- a/noncore/apps/opie-console/TEmuVt102.cpp
+++ b/noncore/apps/opie-console/TEmuVt102.cpp
@@ -1,226 +1,221 @@
1/* ------------------------------------------------------------------------- */ 1/* ------------------------------------------------------------------------- */
2/* */ 2/* */
3/* [TEmuVt102.C] VT102 Terminal Emulation */ 3/* [TEmuVt102.C] VT102 Terminal Emulation */
4/* */ 4/* */
5/* ------------------------------------------------------------------------- */ 5/* ------------------------------------------------------------------------- */
6/* */ 6/* */
7/* Copyright (c) 1997,1998 by Lars Doelle <lars.doelle@on-line.de> */ 7/* Copyright (c) 1997,1998 by Lars Doelle <lars.doelle@on-line.de> */
8/* */ 8/* */
9/* This file is part of Konsole - an X terminal for KDE */ 9/* This file is part of Konsole - an X terminal for KDE */
10/* */ 10/* */
11/* ------------------------------------------------------------------------- */ 11/* ------------------------------------------------------------------------- */
12/* */ 12/* */
13/* Ported Konsole to Qt/Embedded */ 13/* Ported Konsole to Qt/Embedded */
14/* */ 14/* */
15/* Copyright (C) 2000 by John Ryland <jryland@trolltech.com> */ 15/* Copyright (C) 2000 by John Ryland <jryland@trolltech.com> */
16/* */ 16/* */
17/* -------------------------------------------------------------------------- */ 17/* -------------------------------------------------------------------------- */
18 18
19/*! \class TEmuVt102 19/*! \class TEmuVt102
20 20
21 \brief Actual Emulation for Konsole 21 \brief Actual Emulation for Konsole
22 22
23 \sa TEWidget \sa TEScreen 23 \sa TEWidget \sa TEScreen
24*/ 24*/
25 25
26#include "TEmuVt102.h" 26#include "TEmuVt102.h"
27#include "TEWidget.h"
28#include "TEScreen.h"
29#include "keytrans.h"
30 27
31#include <stdio.h> 28#include <stdio.h>
32#include <unistd.h> 29#include <unistd.h>
33#include <qkeycode.h>
34#include <qtextcodec.h>
35 30
36 31
37/* VT102 Terminal Emulation 32/* VT102 Terminal Emulation
38 33
39 This class puts together the screens, the pty and the widget to a 34 This class puts together the screens, the pty and the widget to a
40 complete terminal emulation. Beside combining it's componentes, it 35 complete terminal emulation. Beside combining it's componentes, it
41 handles the emulations's protocol. 36 handles the emulations's protocol.
42 37
43 This module consists of the following sections: 38 This module consists of the following sections:
44 39
45 - Constructor/Destructor 40 - Constructor/Destructor
46 - Incoming Bytes Event pipeline 41 - Incoming Bytes Event pipeline
47 - Outgoing Bytes 42 - Outgoing Bytes
48 - Mouse Events 43 - Mouse Events
49 - Keyboard Events 44 - Keyboard Events
50 - Modes and Charset State 45 - Modes and Charset State
51 - Diagnostics 46 - Diagnostics
52*/ 47*/
53 48
54 49
55/* ------------------------------------------------------------------------- */ 50/* ------------------------------------------------------------------------- */
56/* */ 51/* */
57/* Constructor / Destructor */ 52/* Constructor / Destructor */
58/* */ 53/* */
59/* ------------------------------------------------------------------------- */ 54/* ------------------------------------------------------------------------- */
60 55
61/* 56/*
62 Nothing really intesting happens here. 57 Nothing really intesting happens here.
63*/ 58*/
64 59
65/*! 60/*!
66*/ 61*/
67 62
68TEmuVt102::TEmuVt102(TEWidget* gui) : TEmulation(gui) 63TEmuVt102::TEmuVt102(TEWidget* gui) : TEmulation(gui)
69{ 64{
70 QObject::connect(gui,SIGNAL(mouseSignal(int,int,int)), 65 QObject::connect(gui,SIGNAL(mouseSignal(int,int,int)),
71 this,SLOT(onMouse(int,int,int))); 66 this,SLOT(onMouse(int,int,int)));
72 initTokenizer(); 67 initTokenizer();
73 reset(); 68 reset();
74} 69}
75 70
76/*! 71/*!
77*/ 72*/
78 73
79TEmuVt102::~TEmuVt102() 74TEmuVt102::~TEmuVt102()
80{ 75{
81} 76}
82 77
83/*! 78/*!
84*/ 79*/
85 80
86void TEmuVt102::reset() 81void TEmuVt102::reset()
87{ 82{
88 resetToken(); 83 resetToken();
89 resetModes(); 84 resetModes();
90 resetCharset(0); screen[0]->reset(); 85 resetCharset(0); screen[0]->reset();
91 resetCharset(1); screen[0]->reset(); 86 resetCharset(1); screen[0]->reset();
92 setCodec(0); 87 setCodec(0);
93 setKeytrans("linux.keytab"); 88 setKeytrans("linux.keytab");
94} 89}
95 90
96/* ------------------------------------------------------------------------- */ 91/* ------------------------------------------------------------------------- */
97/* */ 92/* */
98/* Processing the incoming byte stream */ 93/* Processing the incoming byte stream */
99/* */ 94/* */
100/* ------------------------------------------------------------------------- */ 95/* ------------------------------------------------------------------------- */
101 96
102/* Incoming Bytes Event pipeline 97/* Incoming Bytes Event pipeline
103 98
104 This section deals with decoding the incoming character stream. 99 This section deals with decoding the incoming character stream.
105 Decoding means here, that the stream is first seperated into `tokens' 100 Decoding means here, that the stream is first seperated into `tokens'
106 which are then mapped to a `meaning' provided as operations by the 101 which are then mapped to a `meaning' provided as operations by the
107 `TEScreen' class or by the emulation class itself. 102 `TEScreen' class or by the emulation class itself.
108 103
109 The pipeline proceeds as follows: 104 The pipeline proceeds as follows:
110 105
111 - Tokenizing the ESC codes (onRcvChar) 106 - Tokenizing the ESC codes (onRcvChar)
112 - VT100 code page translation of plain characters (applyCharset) 107 - VT100 code page translation of plain characters (applyCharset)
113 - Interpretation of ESC codes (tau) 108 - Interpretation of ESC codes (tau)
114 109
115 The escape codes and their meaning are described in the 110 The escape codes and their meaning are described in the
116 technical reference of this program. 111 technical reference of this program.
117*/ 112*/
118 113
119// Tokens ------------------------------------------------------------------ -- 114// Tokens ------------------------------------------------------------------ --
120 115
121/* 116/*
122 Since the tokens are the central notion if this section, we've put them 117 Since the tokens are the central notion if this section, we've put them
123 in front. They provide the syntactical elements used to represent the 118 in front. They provide the syntactical elements used to represent the
124 terminals operations as byte sequences. 119 terminals operations as byte sequences.
125 120
126 They are encodes here into a single machine word, so that we can later 121 They are encodes here into a single machine word, so that we can later
127 switch over them easily. Depending on the token itself, additional 122 switch over them easily. Depending on the token itself, additional
128 argument variables are filled with parameter values. 123 argument variables are filled with parameter values.
129 124
130 The tokens are defined below: 125 The tokens are defined below:
131 126
132 - CHR - Printable characters (32..255 but DEL (=127)) 127 - CHR - Printable characters (32..255 but DEL (=127))
133 - CTL - Control characters (0..31 but ESC (= 27), DEL) 128 - CTL - Control characters (0..31 but ESC (= 27), DEL)
134 - ESC - Escape codes of the form <ESC><CHR but `[]()+*#'> 129 - ESC - Escape codes of the form <ESC><CHR but `[]()+*#'>
135 - ESC_DE - Escape codes of the form <ESC><any of `()+*#%'> C 130 - ESC_DE - Escape codes of the form <ESC><any of `()+*#%'> C
136 - CSI_PN - Escape codes of the form <ESC>'[' {Pn} ';' {Pn} C 131 - CSI_PN - Escape codes of the form <ESC>'[' {Pn} ';' {Pn} C
137 - CSI_PS - Escape codes of the form <ESC>'[' {Pn} ';' ... C 132 - CSI_PS - Escape codes of the form <ESC>'[' {Pn} ';' ... C
138 - CSI_PR - Escape codes of the form <ESC>'[' '?' {Pn} ';' ... C 133 - CSI_PR - Escape codes of the form <ESC>'[' '?' {Pn} ';' ... C
139 - VT52 - VT52 escape codes 134 - VT52 - VT52 escape codes
140 - <ESC><Chr> 135 - <ESC><Chr>
141 - <ESC>'Y'{Pc}{Pc} 136 - <ESC>'Y'{Pc}{Pc}
142 - XTE_HA - Xterm hacks <ESC>`]' {Pn} `;' {Text} <BEL> 137 - XTE_HA - Xterm hacks <ESC>`]' {Pn} `;' {Text} <BEL>
143 note that this is handled differently 138 note that this is handled differently
144 139
145 The last two forms allow list of arguments. Since the elements of 140 The last two forms allow list of arguments. Since the elements of
146 the lists are treated individually the same way, they are passed 141 the lists are treated individually the same way, they are passed
147 as individual tokens to the interpretation. Further, because the 142 as individual tokens to the interpretation. Further, because the
148 meaning of the parameters are names (althought represented as numbers), 143 meaning of the parameters are names (althought represented as numbers),
149 they are includes within the token ('N'). 144 they are includes within the token ('N').
150 145
151*/ 146*/
152 147
153#define TY_CONSTR(T,A,N) ( ((((int)N) & 0xffff) << 16) | ((((int)A) & 0xff) << 8) | (((int)T) & 0xff) ) 148#define TY_CONSTR(T,A,N) ( ((((int)N) & 0xffff) << 16) | ((((int)A) & 0xff) << 8) | (((int)T) & 0xff) )
154 149
155#define TY_CHR___( ) TY_CONSTR(0,0,0) 150#define TY_CHR___( ) TY_CONSTR(0,0,0)
156#define TY_CTL___(A ) TY_CONSTR(1,A,0) 151#define TY_CTL___(A ) TY_CONSTR(1,A,0)
157#define TY_ESC___(A ) TY_CONSTR(2,A,0) 152#define TY_ESC___(A ) TY_CONSTR(2,A,0)
158#define TY_ESC_CS(A,B) TY_CONSTR(3,A,B) 153#define TY_ESC_CS(A,B) TY_CONSTR(3,A,B)
159#define TY_ESC_DE(A ) TY_CONSTR(4,A,0) 154#define TY_ESC_DE(A ) TY_CONSTR(4,A,0)
160#define TY_CSI_PS(A,N) TY_CONSTR(5,A,N) 155#define TY_CSI_PS(A,N) TY_CONSTR(5,A,N)
161#define TY_CSI_PN(A ) TY_CONSTR(6,A,0) 156#define TY_CSI_PN(A ) TY_CONSTR(6,A,0)
162#define TY_CSI_PR(A,N) TY_CONSTR(7,A,N) 157#define TY_CSI_PR(A,N) TY_CONSTR(7,A,N)
163 158
164#define TY_VT52__(A ) TY_CONSTR(8,A,0) 159#define TY_VT52__(A ) TY_CONSTR(8,A,0)
165 160
166// Tokenizer --------------------------------------------------------------- -- 161// Tokenizer --------------------------------------------------------------- --
167 162
168/* The tokenizers state 163/* The tokenizers state
169 164
170 The state is represented by the buffer (pbuf, ppos), 165 The state is represented by the buffer (pbuf, ppos),
171 and accompanied by decoded arguments kept in (argv,argc). 166 and accompanied by decoded arguments kept in (argv,argc).
172 Note that they are kept internal in the tokenizer. 167 Note that they are kept internal in the tokenizer.
173*/ 168*/
174 169
175void TEmuVt102::resetToken() 170void TEmuVt102::resetToken()
176{ 171{
177 ppos = 0; argc = 0; argv[0] = 0; argv[1] = 0; 172 ppos = 0; argc = 0; argv[0] = 0; argv[1] = 0;
178} 173}
179 174
180void TEmuVt102::addDigit(int dig) 175void TEmuVt102::addDigit(int dig)
181{ 176{
182 argv[argc] = 10*argv[argc] + dig; 177 argv[argc] = 10*argv[argc] + dig;
183} 178}
184 179
185void TEmuVt102::addArgument() 180void TEmuVt102::addArgument()
186{ 181{
187 argc = QMIN(argc+1,MAXARGS-1); 182 argc = QMIN(argc+1,MAXARGS-1);
188 argv[argc] = 0; 183 argv[argc] = 0;
189} 184}
190 185
191void TEmuVt102::pushToToken(int cc) 186void TEmuVt102::pushToToken(int cc)
192{ 187{
193 pbuf[ppos] = cc; 188 pbuf[ppos] = cc;
194 ppos = QMIN(ppos+1,MAXPBUF-1); 189 ppos = QMIN(ppos+1,MAXPBUF-1);
195} 190}
196 191
197// Character Classes used while decoding 192// Character Classes used while decoding
198 193
199#define CTL 1 194#define CTL 1
200#define CHR 2 195#define CHR 2
201#define CPN 4 196#define CPN 4
202#define DIG 8 197#define DIG 8
203#define SCS 16 198#define SCS 16
204#define GRP 32 199#define GRP 32
205 200
206void TEmuVt102::initTokenizer() 201void TEmuVt102::initTokenizer()
207{ int i; UINT8* s; 202{ int i; UINT8* s;
208 for(i = 0; i < 256; i++) tbl[ i] = 0; 203 for(i = 0; i < 256; i++) tbl[ i] = 0;
209 for(i = 0; i < 32; i++) tbl[ i] |= CTL; 204 for(i = 0; i < 32; i++) tbl[ i] |= CTL;
210 for(i = 32; i < 256; i++) tbl[ i] |= CHR; 205 for(i = 32; i < 256; i++) tbl[ i] |= CHR;
211 for(s = (UINT8*)"@ABCDGHLMPXcdfry"; *s; s++) tbl[*s] |= CPN; 206 for(s = (UINT8*)"@ABCDGHLMPXcdfry"; *s; s++) tbl[*s] |= CPN;
212 for(s = (UINT8*)"0123456789" ; *s; s++) tbl[*s] |= DIG; 207 for(s = (UINT8*)"0123456789" ; *s; s++) tbl[*s] |= DIG;
213 for(s = (UINT8*)"()+*%" ; *s; s++) tbl[*s] |= SCS; 208 for(s = (UINT8*)"()+*%" ; *s; s++) tbl[*s] |= SCS;
214 for(s = (UINT8*)"()+*#[]%" ; *s; s++) tbl[*s] |= GRP; 209 for(s = (UINT8*)"()+*#[]%" ; *s; s++) tbl[*s] |= GRP;
215 resetToken(); 210 resetToken();
216} 211}
217 212
218/* Ok, here comes the nasty part of the decoder. 213/* Ok, here comes the nasty part of the decoder.
219 214
220 Instead of keeping an explicit state, we deduce it from the 215 Instead of keeping an explicit state, we deduce it from the
221 token scanned so far. It is then immediately combined with 216 token scanned so far. It is then immediately combined with
222 the current character to form a scanning decision. 217 the current character to form a scanning decision.
223 218
224 This is done by the following defines. 219 This is done by the following defines.
225 220
226 - P is the length of the token scanned so far. 221 - P is the length of the token scanned so far.
diff --git a/noncore/apps/opie-console/TEmulation.cpp b/noncore/apps/opie-console/TEmulation.cpp
index 3b1b9e1..d0169d7 100644
--- a/noncore/apps/opie-console/TEmulation.cpp
+++ b/noncore/apps/opie-console/TEmulation.cpp
@@ -1,270 +1,267 @@
1/* -------------------------------------------------------------------------- */ 1/* -------------------------------------------------------------------------- */
2/* */ 2/* */
3/* [TEmulation.cpp] Terminal Emulation Decoder */ 3/* [TEmulation.cpp] Terminal Emulation Decoder */
4/* */ 4/* */
5/* -------------------------------------------------------------------------- */ 5/* -------------------------------------------------------------------------- */
6/* */ 6/* */
7/* Copyright (c) 1997,1998 by Lars Doelle <lars.doelle@on-line.de> */ 7/* Copyright (c) 1997,1998 by Lars Doelle <lars.doelle@on-line.de> */
8/* */ 8/* */
9/* This file is part of Konsole - an X terminal for KDE */ 9/* This file is part of Konsole - an X terminal for KDE */
10/* */ 10/* */
11/* -------------------------------------------------------------------------- */ 11/* -------------------------------------------------------------------------- */
12 /* */ 12 /* */
13/* Ported Konsole to Qt/Embedded */ 13/* Ported Konsole to Qt/Embedded */
14 /* */ 14 /* */
15/* Copyright (C) 2000 by John Ryland <jryland@trolltech.com> */ 15/* Copyright (C) 2000 by John Ryland <jryland@trolltech.com> */
16 /* */ 16 /* */
17/* -------------------------------------------------------------------------- */ 17/* -------------------------------------------------------------------------- */
18 18
19/*! \class TEmulation 19/*! \class TEmulation
20 20
21 \brief Mediator between TEWidget and TEScreen. 21 \brief Mediator between TEWidget and TEScreen.
22 22
23 This class is responsible to scan the escapes sequences of the terminal 23 This class is responsible to scan the escapes sequences of the terminal
24 emulation and to map it to their corresponding semantic complements. 24 emulation and to map it to their corresponding semantic complements.
25 Thus this module knows mainly about decoding escapes sequences and 25 Thus this module knows mainly about decoding escapes sequences and
26 is a stateless device w.r.t. the semantics. 26 is a stateless device w.r.t. the semantics.
27 27
28 It is also responsible to refresh the TEWidget by certain rules. 28 It is also responsible to refresh the TEWidget by certain rules.
29 29
30 \sa TEWidget \sa TEScreen 30 \sa TEWidget \sa TEScreen
31 31
32 \par A note on refreshing 32 \par A note on refreshing
33 33
34 Although the modifications to the current screen image could immediately 34 Although the modifications to the current screen image could immediately
35 be propagated via `TEWidget' to the graphical surface, we have chosen 35 be propagated via `TEWidget' to the graphical surface, we have chosen
36 another way here. 36 another way here.
37 37
38 The reason for doing so is twofold. 38 The reason for doing so is twofold.
39 39
40 First, experiments show that directly displaying the operation results 40 First, experiments show that directly displaying the operation results
41 in slowing down the overall performance of emulations. Displaying 41 in slowing down the overall performance of emulations. Displaying
42 individual characters using X11 creates a lot of overhead. 42 individual characters using X11 creates a lot of overhead.
43 43
44 Second, by using the following refreshing method, the screen operations 44 Second, by using the following refreshing method, the screen operations
45 can be completely separated from the displaying. This greatly simplifies 45 can be completely separated from the displaying. This greatly simplifies
46 the programmer's task of coding and maintaining the screen operations, 46 the programmer's task of coding and maintaining the screen operations,
47 since one need not worry about differential modifications on the 47 since one need not worry about differential modifications on the
48 display affecting the operation of concern. 48 display affecting the operation of concern.
49 49
50 We use a refreshing algorithm here that has been adoped from rxvt/kvt. 50 We use a refreshing algorithm here that has been adoped from rxvt/kvt.
51 51
52 By this, refreshing is driven by a timer, which is (re)started whenever 52 By this, refreshing is driven by a timer, which is (re)started whenever
53 a new bunch of data to be interpreted by the emulation arives at `onRcvBlock'. 53 a new bunch of data to be interpreted by the emulation arives at `onRcvBlock'.
54 As soon as no more data arrive for `BULK_TIMEOUT' milliseconds, we trigger 54 As soon as no more data arrive for `BULK_TIMEOUT' milliseconds, we trigger
55 refresh. This rule suits both bulk display operation as done by curses as 55 refresh. This rule suits both bulk display operation as done by curses as
56 well as individual characters typed. 56 well as individual characters typed.
57 (BULK_TIMEOUT < 1000 / max characters received from keyboard per second). 57 (BULK_TIMEOUT < 1000 / max characters received from keyboard per second).
58 58
59 Additionally, we trigger refreshing by newlines comming in to make visual 59 Additionally, we trigger refreshing by newlines comming in to make visual
60 snapshots of lists as produced by `cat', `ls' and likely programs, thereby 60 snapshots of lists as produced by `cat', `ls' and likely programs, thereby
61 producing the illusion of a permanent and immediate display operation. 61 producing the illusion of a permanent and immediate display operation.
62 62
63 As a sort of catch-all needed for cases where none of the above 63 As a sort of catch-all needed for cases where none of the above
64 conditions catch, the screen refresh is also triggered by a count 64 conditions catch, the screen refresh is also triggered by a count
65 of incoming bulks (`bulk_incnt'). 65 of incoming bulks (`bulk_incnt').
66*/ 66*/
67 67
68/* FIXME 68/* FIXME
69 - evtl. the bulk operations could be made more transparent. 69 - evtl. the bulk operations could be made more transparent.
70*/ 70*/
71 71
72#include "TEmulation.h" 72#include "TEmulation.h"
73#include "TEWidget.h"
74#include "TEScreen.h"
75#include <stdio.h> 73#include <stdio.h>
76#include <stdlib.h> 74#include <stdlib.h>
77#include <unistd.h> 75#include <unistd.h>
78#include <qkeycode.h>
79 76
80 77
81/* ------------------------------------------------------------------------- */ 78/* ------------------------------------------------------------------------- */
82/* */ 79/* */
83/* TEmulation */ 80/* TEmulation */
84/* */ 81/* */
85/* ------------------------------------------------------------------------- */ 82/* ------------------------------------------------------------------------- */
86 83
87#define CNTL(c) ((c)-'@') 84#define CNTL(c) ((c)-'@')
88 85
89/*! 86/*!
90*/ 87*/
91 88
92TEmulation::TEmulation(TEWidget* gui) 89TEmulation::TEmulation(TEWidget* gui)
93: decoder((QTextDecoder*)NULL) 90: decoder((QTextDecoder*)NULL)
94{ 91{
95 this->gui = gui; 92 this->gui = gui;
96 93
97 screen[0] = new TEScreen(gui->Lines(),gui->Columns()); 94 screen[0] = new TEScreen(gui->Lines(),gui->Columns());
98 screen[1] = new TEScreen(gui->Lines(),gui->Columns()); 95 screen[1] = new TEScreen(gui->Lines(),gui->Columns());
99 scr = screen[0]; 96 scr = screen[0];
100 97
101 bulk_nlcnt = 0; // reset bulk newline counter 98 bulk_nlcnt = 0; // reset bulk newline counter
102 bulk_incnt = 0; // reset bulk counter 99 bulk_incnt = 0; // reset bulk counter
103 connected = FALSE; 100 connected = FALSE;
104 101
105 QObject::connect(&bulk_timer, SIGNAL(timeout()), this, SLOT(showBulk()) ); 102 QObject::connect(&bulk_timer, SIGNAL(timeout()), this, SLOT(showBulk()) );
106 QObject::connect(gui,SIGNAL(changedImageSizeSignal(int,int)), 103 QObject::connect(gui,SIGNAL(changedImageSizeSignal(int,int)),
107 this,SLOT(onImageSizeChange(int,int))); 104 this,SLOT(onImageSizeChange(int,int)));
108 QObject::connect(gui,SIGNAL(changedHistoryCursor(int)), 105 QObject::connect(gui,SIGNAL(changedHistoryCursor(int)),
109 this,SLOT(onHistoryCursorChange(int))); 106 this,SLOT(onHistoryCursorChange(int)));
110 QObject::connect(gui,SIGNAL(keyPressedSignal(QKeyEvent*)), 107 QObject::connect(gui,SIGNAL(keyPressedSignal(QKeyEvent*)),
111 this,SLOT(onKeyPress(QKeyEvent*))); 108 this,SLOT(onKeyPress(QKeyEvent*)));
112 QObject::connect(gui,SIGNAL(beginSelectionSignal(const int,const int)), 109 QObject::connect(gui,SIGNAL(beginSelectionSignal(const int,const int)),
113 this,SLOT(onSelectionBegin(const int,const int)) ); 110 this,SLOT(onSelectionBegin(const int,const int)) );
114 QObject::connect(gui,SIGNAL(extendSelectionSignal(const int,const int)), 111 QObject::connect(gui,SIGNAL(extendSelectionSignal(const int,const int)),
115 this,SLOT(onSelectionExtend(const int,const int)) ); 112 this,SLOT(onSelectionExtend(const int,const int)) );
116 QObject::connect(gui,SIGNAL(endSelectionSignal(const BOOL)), 113 QObject::connect(gui,SIGNAL(endSelectionSignal(const BOOL)),
117 this,SLOT(setSelection(const BOOL)) ); 114 this,SLOT(setSelection(const BOOL)) );
118 QObject::connect(gui,SIGNAL(clearSelectionSignal()), 115 QObject::connect(gui,SIGNAL(clearSelectionSignal()),
119 this,SLOT(clearSelection()) ); 116 this,SLOT(clearSelection()) );
120} 117}
121 118
122/*! 119/*!
123*/ 120*/
124 121
125TEmulation::~TEmulation() 122TEmulation::~TEmulation()
126{ 123{
127 delete screen[0]; 124 delete screen[0];
128 delete screen[1]; 125 delete screen[1];
129 bulk_timer.stop(); 126 bulk_timer.stop();
130} 127}
131 128
132/*! change between primary and alternate screen 129/*! change between primary and alternate screen
133*/ 130*/
134 131
135void TEmulation::setScreen(int n) 132void TEmulation::setScreen(int n)
136{ 133{
137 scr = screen[n&1]; 134 scr = screen[n&1];
138} 135}
139 136
140void TEmulation::setHistory(bool on) 137void TEmulation::setHistory(bool on)
141{ 138{
142 screen[0]->setScroll(on); 139 screen[0]->setScroll(on);
143 if (!connected) return; 140 if (!connected) return;
144 showBulk(); 141 showBulk();
145} 142}
146 143
147bool TEmulation::history() 144bool TEmulation::history()
148{ 145{
149 return screen[0]->hasScroll(); 146 return screen[0]->hasScroll();
150} 147}
151 148
152void TEmulation::setCodec(int c) 149void TEmulation::setCodec(int c)
153{ 150{
154 //FIXME: check whether we have to free codec 151 //FIXME: check whether we have to free codec
155 codec = c ? QTextCodec::codecForName("utf8") 152 codec = c ? QTextCodec::codecForName("utf8")
156 : QTextCodec::codecForLocale(); 153 : QTextCodec::codecForLocale();
157 if (decoder) delete decoder; 154 if (decoder) delete decoder;
158 decoder = codec->makeDecoder(); 155 decoder = codec->makeDecoder();
159} 156}
160 157
161void TEmulation::setKeytrans(int no) 158void TEmulation::setKeytrans(int no)
162{ 159{
163 keytrans = KeyTrans::find(no); 160 keytrans = KeyTrans::find(no);
164} 161}
165 162
166void TEmulation::setKeytrans(const char * no) 163void TEmulation::setKeytrans(const char * no)
167{ 164{
168 keytrans = KeyTrans::find(no); 165 keytrans = KeyTrans::find(no);
169} 166}
170 167
171// Interpreting Codes --------------------------------------------------------- 168// Interpreting Codes ---------------------------------------------------------
172 169
173/* 170/*
174 This section deals with decoding the incoming character stream. 171 This section deals with decoding the incoming character stream.
175 Decoding means here, that the stream is first seperated into `tokens' 172 Decoding means here, that the stream is first seperated into `tokens'
176 which are then mapped to a `meaning' provided as operations by the 173 which are then mapped to a `meaning' provided as operations by the
177 `Screen' class. 174 `Screen' class.
178*/ 175*/
179 176
180/*! 177/*!
181*/ 178*/
182 179
183void TEmulation::onRcvChar(int c) 180void TEmulation::onRcvChar(int c)
184// process application unicode input to terminal 181// process application unicode input to terminal
185// this is a trivial scanner 182// this is a trivial scanner
186{ 183{
187 c &= 0xff; 184 c &= 0xff;
188 switch (c) 185 switch (c)
189 { 186 {
190 case '\b' : scr->BackSpace(); break; 187 case '\b' : scr->BackSpace(); break;
191 case '\t' : scr->Tabulate(); break; 188 case '\t' : scr->Tabulate(); break;
192 case '\n' : scr->NewLine(); break; 189 case '\n' : scr->NewLine(); break;
193 case '\r' : scr->Return(); break; 190 case '\r' : scr->Return(); break;
194 case 0x07 : gui->Bell(); break; 191 case 0x07 : gui->Bell(); break;
195 default : scr->ShowCharacter(c); break; 192 default : scr->ShowCharacter(c); break;
196 }; 193 };
197} 194}
198 195
199/* ------------------------------------------------------------------------- */ 196/* ------------------------------------------------------------------------- */
200/* */ 197/* */
201/* Keyboard Handling */ 198/* Keyboard Handling */
202/* */ 199/* */
203/* ------------------------------------------------------------------------- */ 200/* ------------------------------------------------------------------------- */
204 201
205/*! 202/*!
206*/ 203*/
207 204
208void TEmulation::onKeyPress( QKeyEvent* ev ) 205void TEmulation::onKeyPress( QKeyEvent* ev )
209{ 206{
210 qWarning("onKeyPress,...."); 207 qWarning("onKeyPress,....");
211 if (!connected) return; // someone else gets the keys 208 if (!connected) return; // someone else gets the keys
212 if (scr->getHistCursor() != scr->getHistLines()); 209 if (scr->getHistCursor() != scr->getHistLines());
213 scr->setHistCursor(scr->getHistLines()); 210 scr->setHistCursor(scr->getHistLines());
214 if (!ev->text().isEmpty()) 211 if (!ev->text().isEmpty())
215 { // A block of text 212 { // A block of text
216 // Note that the text is proper unicode. 213 // Note that the text is proper unicode.
217 // We should do a conversion here, but since this 214 // We should do a conversion here, but since this
218 // routine will never be used, we simply emit plain ascii. 215 // routine will never be used, we simply emit plain ascii.
219 emit sndBlock(ev->text().ascii(),ev->text().length()); 216 emit sndBlock(ev->text().ascii(),ev->text().length());
220 } 217 }
221 else if (ev->ascii()>0) 218 else if (ev->ascii()>0)
222 { unsigned char c[1]; 219 { unsigned char c[1];
223 c[0] = ev->ascii(); 220 c[0] = ev->ascii();
224 emit sndBlock((char*)c,1); 221 emit sndBlock((char*)c,1);
225 } 222 }
226} 223}
227 224
228// Unblocking, Byte to Unicode translation --------------------------------- -- 225// Unblocking, Byte to Unicode translation --------------------------------- --
229 226
230/* 227/*
231 We are doing code conversion from locale to unicode first. 228 We are doing code conversion from locale to unicode first.
232*/ 229*/
233 230
234void TEmulation::onRcvBlock(const char *s, int len) 231void TEmulation::onRcvBlock(const char *s, int len)
235{ 232{
236 bulkStart(); 233 bulkStart();
237 bulk_incnt += 1; 234 bulk_incnt += 1;
238 for (int i = 0; i < len; i++) 235 for (int i = 0; i < len; i++)
239 { 236 {
240 QString result = decoder->toUnicode(&s[i],1); 237 QString result = decoder->toUnicode(&s[i],1);
241 int reslen = result.length(); 238 int reslen = result.length();
242 for (int j = 0; j < reslen; j++) 239 for (int j = 0; j < reslen; j++)
243 onRcvChar(result[j].unicode()); 240 onRcvChar(result[j].unicode());
244 if (s[i] == '\n') bulkNewline(); 241 if (s[i] == '\n') bulkNewline();
245 } 242 }
246 bulkEnd(); 243 bulkEnd();
247} 244}
248 245
249// Selection --------------------------------------------------------------- -- 246// Selection --------------------------------------------------------------- --
250 247
251void TEmulation::onSelectionBegin(const int x, const int y) { 248void TEmulation::onSelectionBegin(const int x, const int y) {
252 if (!connected) return; 249 if (!connected) return;
253 scr->setSelBeginXY(x,y); 250 scr->setSelBeginXY(x,y);
254 showBulk(); 251 showBulk();
255} 252}
256 253
257void TEmulation::onSelectionExtend(const int x, const int y) { 254void TEmulation::onSelectionExtend(const int x, const int y) {
258 if (!connected) return; 255 if (!connected) return;
259 scr->setSelExtentXY(x,y); 256 scr->setSelExtentXY(x,y);
260 showBulk(); 257 showBulk();
261} 258}
262 259
263void TEmulation::setSelection(const BOOL preserve_line_breaks) { 260void TEmulation::setSelection(const BOOL preserve_line_breaks) {
264 if (!connected) return; 261 if (!connected) return;
265 QString t = scr->getSelText(preserve_line_breaks); 262 QString t = scr->getSelText(preserve_line_breaks);
266 if (!t.isNull()) gui->setSelection(t); 263 if (!t.isNull()) gui->setSelection(t);
267} 264}
268 265
269void TEmulation::clearSelection() { 266void TEmulation::clearSelection() {
270 if (!connected) return; 267 if (!connected) return;
diff --git a/noncore/apps/opie-console/configdialog.cpp b/noncore/apps/opie-console/configdialog.cpp
index 53b3853..b23f4d0 100644
--- a/noncore/apps/opie-console/configdialog.cpp
+++ b/noncore/apps/opie-console/configdialog.cpp
@@ -1,114 +1,111 @@
1#include <qdialog.h>
2#include <qlistview.h> 1#include <qlistview.h>
3 2
4 3
5#include "profile.h"
6#include "configdialog.h" 4#include "configdialog.h"
7#include "metafactory.h"
8#include "profileeditordialog.h" 5#include "profileeditordialog.h"
9 6
10class ConfigListItem : public QListViewItem { 7class ConfigListItem : public QListViewItem {
11public: 8public:
12 ConfigListItem( QListView* item, const Profile& ); 9 ConfigListItem( QListView* item, const Profile& );
13 ~ConfigListItem(); 10 ~ConfigListItem();
14 Profile profile()const; 11 Profile profile()const;
15 12
16private: 13private:
17 Profile m_prof; 14 Profile m_prof;
18}; 15};
19ConfigListItem::ConfigListItem( QListView* item, const Profile& prof ) 16ConfigListItem::ConfigListItem( QListView* item, const Profile& prof )
20 : QListViewItem( item ), m_prof( prof ) 17 : QListViewItem( item ), m_prof( prof )
21{ 18{
22 setText(0, prof.name() ); 19 setText(0, prof.name() );
23} 20}
24ConfigListItem::~ConfigListItem() { 21ConfigListItem::~ConfigListItem() {
25 22
26} 23}
27Profile ConfigListItem::profile()const { 24Profile ConfigListItem::profile()const {
28 return m_prof; 25 return m_prof;
29} 26}
30 27
31/* Dialog */ 28/* Dialog */
32 29
33ConfigDialog::ConfigDialog( const Profile::ValueList& lis, MetaFactory* fa, 30ConfigDialog::ConfigDialog( const Profile::ValueList& lis, MetaFactory* fa,
34 QWidget* parent ) 31 QWidget* parent )
35 : ConfigureBase( parent, 0, TRUE ), m_fact( fa ) 32 : ConfigureBase( parent, 0, TRUE ), m_fact( fa )
36{ 33{
37 //init(); 34 //init();
38 { 35 {
39 Profile::ValueList::ConstIterator it; 36 Profile::ValueList::ConstIterator it;
40 for (it = lis.begin(); it != lis.end(); ++it ) { 37 for (it = lis.begin(); it != lis.end(); ++it ) {
41 new ConfigListItem( lstView, (*it) ); 38 new ConfigListItem( lstView, (*it) );
42 } 39 }
43 } 40 }
44} 41}
45ConfigDialog::~ConfigDialog() { 42ConfigDialog::~ConfigDialog() {
46 43
47} 44}
48Profile::ValueList ConfigDialog::list()const { 45Profile::ValueList ConfigDialog::list()const {
49/* iterate over the list */ 46/* iterate over the list */
50 Profile::ValueList lst; 47 Profile::ValueList lst;
51 QListViewItemIterator it(lstView); 48 QListViewItemIterator it(lstView);
52 for ( ; it.current(); ++it ) { 49 for ( ; it.current(); ++it ) {
53 ConfigListItem* item = (ConfigListItem*)it.current(); 50 ConfigListItem* item = (ConfigListItem*)it.current();
54 lst.append( item->profile() ); 51 lst.append( item->profile() );
55 } 52 }
56 return lst; 53 return lst;
57} 54}
58/* our slots */ 55/* our slots */
59void ConfigDialog::slotRemove() { 56void ConfigDialog::slotRemove() {
60 ConfigListItem* item = (ConfigListItem*)lstView->currentItem(); 57 ConfigListItem* item = (ConfigListItem*)lstView->currentItem();
61 if (!item ) 58 if (!item )
62 return; 59 return;
63 60
64 lstView->takeItem( item ); 61 lstView->takeItem( item );
65 delete item; 62 delete item;
66} 63}
67 64
68void ConfigDialog::slotEdit() { 65void ConfigDialog::slotEdit() {
69 Profile p; 66 Profile p;
70 67
71 if(!lstView->currentItem()) return; 68 if(!lstView->currentItem()) return;
72 69
73 // Load profile 70 // Load profile
74 p = ((ConfigListItem*)lstView->currentItem())->profile(); 71 p = ((ConfigListItem*)lstView->currentItem())->profile();
75 72
76 ProfileEditorDialog dlg(m_fact, p); 73 ProfileEditorDialog dlg(m_fact, p);
77 74
78 dlg.setCaption(tr("Edit Connection Profile")); 75 dlg.setCaption(tr("Edit Connection Profile"));
79 dlg.showMaximized(); 76 dlg.showMaximized();
80 int ret = dlg.exec(); 77 int ret = dlg.exec();
81 78
82 if(ret == QDialog::Accepted) 79 if(ret == QDialog::Accepted)
83 { 80 {
84 if(lstView->currentItem()) delete lstView->currentItem(); 81 if(lstView->currentItem()) delete lstView->currentItem();
85 82
86 // use dlg.terminal()! 83 // use dlg.terminal()!
87 Profile p = dlg.profile(); 84 Profile p = dlg.profile();
88 85
89 new ConfigListItem(lstView, p); 86 new ConfigListItem(lstView, p);
90 } 87 }
91} 88}
92 89
93 90
94void ConfigDialog::slotAdd() { 91void ConfigDialog::slotAdd() {
95 ProfileEditorDialog dlg(m_fact); 92 ProfileEditorDialog dlg(m_fact);
96 93
97 dlg.setCaption(tr("New Connection")); 94 dlg.setCaption(tr("New Connection"));
98 dlg.showMaximized(); 95 dlg.showMaximized();
99 int ret = dlg.exec(); 96 int ret = dlg.exec();
100 97
101 if(ret == QDialog::Accepted) 98 if(ret == QDialog::Accepted)
102 { 99 {
103 // TODO: Move into general profile save part 100 // TODO: Move into general profile save part
104 // assignments 101 // assignments
105 //QString type = dlg.term_type(); 102 //QString type = dlg.term_type();
106 //if(type == "VT102") profile = Profile::VT102; 103 //if(type == "VT102") profile = Profile::VT102;
107 104
108 // get profile from editor 105 // get profile from editor
109 Profile p = dlg.profile(); 106 Profile p = dlg.profile();
110 107
111 new ConfigListItem(lstView, p); 108 new ConfigListItem(lstView, p);
112 } 109 }
113} 110}
114 111
diff --git a/noncore/apps/opie-console/consoleconfigwidget.cpp b/noncore/apps/opie-console/consoleconfigwidget.cpp
index faedc58..a6ad8d2 100644
--- a/noncore/apps/opie-console/consoleconfigwidget.cpp
+++ b/noncore/apps/opie-console/consoleconfigwidget.cpp
@@ -1,111 +1,109 @@
1#include <qlabel.h> 1#include <qlabel.h>
2#include <qlayout.h> 2#include <qlayout.h>
3#include <qcombobox.h>
4#include <qlineedit.h> 3#include <qlineedit.h>
5#include <qpushbutton.h> 4#include <qpushbutton.h>
6#include <qlistview.h> 5#include <qlistview.h>
7#include <qhbox.h> 6#include <qhbox.h>
8#include <qregexp.h>
9#include <stdio.h> 7#include <stdio.h>
10 8
11#include <pwd.h> 9#include <pwd.h>
12#include <sys/types.h> 10#include <sys/types.h>
13 11
14 12
15#include "consoleconfigwidget.h" 13#include "consoleconfigwidget.h"
16 14
17ConsoleConfigWidget::ConsoleConfigWidget( const QString& name, QWidget* parent, 15ConsoleConfigWidget::ConsoleConfigWidget( const QString& name, QWidget* parent,
18 const char* na ) 16 const char* na )
19 : ProfileDialogConnectionWidget( name, parent, na ) { 17 : ProfileDialogConnectionWidget( name, parent, na ) {
20 m_lay = new QVBoxLayout( this ); 18 m_lay = new QVBoxLayout( this );
21 QLabel *label = new QLabel(tr("Command to execute"), this); 19 QLabel *label = new QLabel(tr("Command to execute"), this);
22 m_lay->addWidget(label); 20 m_lay->addWidget(label);
23 m_cmd = new QLineEdit(this); 21 m_cmd = new QLineEdit(this);
24 m_lay->addWidget(m_cmd); 22 m_lay->addWidget(m_cmd);
25 label = new QLabel(tr("Environment Variables"), this); 23 label = new QLabel(tr("Environment Variables"), this);
26 m_lay->addWidget(label); 24 m_lay->addWidget(label);
27 m_env = new QListView(this); 25 m_env = new QListView(this);
28 m_env->addColumn(tr("Name")); 26 m_env->addColumn(tr("Name"));
29 m_env->addColumn(tr("Value")); 27 m_env->addColumn(tr("Value"));
30 m_lay->addWidget(m_env); 28 m_lay->addWidget(m_env);
31 29
32 QHBox *hbox = new QHBox(this); 30 QHBox *hbox = new QHBox(this);
33 label = new QLabel(tr("Name :"), hbox); 31 label = new QLabel(tr("Name :"), hbox);
34 m_name = new QLineEdit(hbox); 32 m_name = new QLineEdit(hbox);
35 m_lay->addWidget(hbox); 33 m_lay->addWidget(hbox);
36 34
37 hbox = new QHBox(this); 35 hbox = new QHBox(this);
38 label = new QLabel(tr("Value :"), hbox); 36 label = new QLabel(tr("Value :"), hbox);
39 m_value = new QLineEdit(hbox); 37 m_value = new QLineEdit(hbox);
40 m_lay->addWidget(hbox); 38 m_lay->addWidget(hbox);
41 39
42 hbox = new QHBox(this); 40 hbox = new QHBox(this);
43 hbox->setSpacing(10); 41 hbox->setSpacing(10);
44 m_remove = new QPushButton(tr("Remove"), hbox); 42 m_remove = new QPushButton(tr("Remove"), hbox);
45 connect(m_remove, SIGNAL(clicked()), this, SLOT(slotRemove())); 43 connect(m_remove, SIGNAL(clicked()), this, SLOT(slotRemove()));
46 m_add = new QPushButton(tr("Add"), hbox); 44 m_add = new QPushButton(tr("Add"), hbox);
47 connect(m_add, SIGNAL(clicked()), this, SLOT(slotAdd())); 45 connect(m_add, SIGNAL(clicked()), this, SLOT(slotAdd()));
48 m_lay->addWidget(hbox); 46 m_lay->addWidget(hbox);
49} 47}
50 48
51void ConsoleConfigWidget::slotAdd() { 49void ConsoleConfigWidget::slotAdd() {
52 if (!(m_name->text().isEmpty() || m_value->text().isEmpty())) { 50 if (!(m_name->text().isEmpty() || m_value->text().isEmpty())) {
53 QListViewItem *item = new QListViewItem(m_env); 51 QListViewItem *item = new QListViewItem(m_env);
54 item->setText(0, m_name->text()); 52 item->setText(0, m_name->text());
55 item->setText(1, m_value->text()); 53 item->setText(1, m_value->text());
56 m_env->insertItem(item); 54 m_env->insertItem(item);
57 } 55 }
58} 56}
59 57
60void ConsoleConfigWidget::slotRemove() { 58void ConsoleConfigWidget::slotRemove() {
61 QListViewItem *item = m_env->currentItem(); 59 QListViewItem *item = m_env->currentItem();
62 if (item) { 60 if (item) {
63 m_env->takeItem(item); 61 m_env->takeItem(item);
64 } 62 }
65} 63}
66 64
67ConsoleConfigWidget::~ConsoleConfigWidget() { 65ConsoleConfigWidget::~ConsoleConfigWidget() {
68} 66}
69 67
70void ConsoleConfigWidget::load( const Profile& prof ) { 68void ConsoleConfigWidget::load( const Profile& prof ) {
71 /* 69 /*
72 * default to the users default shell 70 * default to the users default shell
73 */ 71 */
74 struct passwd *ent = 0; 72 struct passwd *ent = 0;
75 char *shell = "/bin/sh"; 73 char *shell = "/bin/sh";
76 74
77 while ( (ent = getpwent()) != 0 ) { 75 while ( (ent = getpwent()) != 0 ) {
78 if (ent->pw_shell != "") { 76 if (ent->pw_shell != "") {
79 shell = ent->pw_shell; 77 shell = ent->pw_shell;
80 } 78 }
81 } 79 }
82 80
83 m_cmd->setText(prof.readEntry("Command", shell )); 81 m_cmd->setText(prof.readEntry("Command", shell ));
84 int envcount = prof.readNumEntry("EnvVars", 0); 82 int envcount = prof.readNumEntry("EnvVars", 0);
85 for (int i=0; i<envcount; i++) { 83 for (int i=0; i<envcount; i++) {
86 QString name = prof.readEntry("Env_Name_" + QString::number(i), ""); 84 QString name = prof.readEntry("Env_Name_" + QString::number(i), "");
87 QString value = prof.readEntry("Env_Value_" + QString::number(i), ""); 85 QString value = prof.readEntry("Env_Value_" + QString::number(i), "");
88 if (!(name.isEmpty() || value.isEmpty())) { 86 if (!(name.isEmpty() || value.isEmpty())) {
89 QListViewItem *item = new QListViewItem(m_env); 87 QListViewItem *item = new QListViewItem(m_env);
90 item->setText(0, name); 88 item->setText(0, name);
91 item->setText(1, value); 89 item->setText(1, value);
92 m_env->insertItem(item); 90 m_env->insertItem(item);
93 } 91 }
94 } 92 }
95} 93}
96 94
97void ConsoleConfigWidget::save( Profile& prof ) { 95void ConsoleConfigWidget::save( Profile& prof ) {
98 prof.writeEntry( "Command", m_cmd->text()); 96 prof.writeEntry( "Command", m_cmd->text());
99 QListViewItem *item = m_env->firstChild(); 97 QListViewItem *item = m_env->firstChild();
100 int counter = 0; 98 int counter = 0;
101 while (item) { 99 while (item) {
102 QString name = item->text(0); 100 QString name = item->text(0);
103 QString value = item->text(1); 101 QString value = item->text(1);
104 prof.writeEntry("Env_Name_" + QString::number(counter), name); 102 prof.writeEntry("Env_Name_" + QString::number(counter), name);
105 prof.writeEntry("Env_Value_" + QString::number(counter), value); 103 prof.writeEntry("Env_Value_" + QString::number(counter), value);
106 item = item->nextSibling(); 104 item = item->nextSibling();
107 counter++; 105 counter++;
108 } 106 }
109 prof.writeEntry("EnvVars", QString::number(counter)); 107 prof.writeEntry("EnvVars", QString::number(counter));
110} 108}
111 109
diff --git a/noncore/apps/opie-console/default.cpp b/noncore/apps/opie-console/default.cpp
index b060139..c237575 100644
--- a/noncore/apps/opie-console/default.cpp
+++ b/noncore/apps/opie-console/default.cpp
@@ -1,122 +1,121 @@
1#include "io_serial.h"
2#include "io_irda.h" 1#include "io_irda.h"
3#include "io_bt.h" 2#include "io_bt.h"
4#include "io_modem.h" 3#include "io_modem.h"
5#include "filetransfer.h" 4#include "filetransfer.h"
6#include "filereceive.h" 5#include "filereceive.h"
7#include "serialconfigwidget.h" 6#include "serialconfigwidget.h"
8#include "irdaconfigwidget.h" 7#include "irdaconfigwidget.h"
9#include "btconfigwidget.h" 8#include "btconfigwidget.h"
10#include "modemconfigwidget.h" 9#include "modemconfigwidget.h"
11#include "terminalwidget.h" 10#include "terminalwidget.h"
12#include "function_keyboard.h" 11#include "function_keyboard.h"
13#include "consoleconfigwidget.h" 12#include "consoleconfigwidget.h"
14#include "MyPty.h" 13#include "MyPty.h"
15 14
16#include "default.h" 15#include "default.h"
17 16
18extern "C" { 17extern "C" {
19 // FILE Transfer Stuff 18 // FILE Transfer Stuff
20 FileTransferLayer* newSZTransfer(IOLayer* lay) { 19 FileTransferLayer* newSZTransfer(IOLayer* lay) {
21 return new FileTransfer( FileTransfer::SZ, lay ); 20 return new FileTransfer( FileTransfer::SZ, lay );
22 } 21 }
23 FileTransferLayer* newSYTransfer(IOLayer* lay) { 22 FileTransferLayer* newSYTransfer(IOLayer* lay) {
24 return new FileTransfer( FileTransfer::SY, lay ); 23 return new FileTransfer( FileTransfer::SY, lay );
25 } 24 }
26 FileTransferLayer* newSXTransfer(IOLayer* lay) { 25 FileTransferLayer* newSXTransfer(IOLayer* lay) {
27 return new FileTransfer(FileTransfer ::SX, lay ); 26 return new FileTransfer(FileTransfer ::SX, lay );
28 } 27 }
29 28
30 // FILE Transfer Receive Stuff 29 // FILE Transfer Receive Stuff
31 ReceiveLayer* newSZReceive(IOLayer* lay) { 30 ReceiveLayer* newSZReceive(IOLayer* lay) {
32 return new FileReceive( FileReceive::SZ, lay ); 31 return new FileReceive( FileReceive::SZ, lay );
33 } 32 }
34 ReceiveLayer* newSYReceive(IOLayer* lay) { 33 ReceiveLayer* newSYReceive(IOLayer* lay) {
35 return new FileReceive( FileReceive::SY, lay ); 34 return new FileReceive( FileReceive::SY, lay );
36 } 35 }
37 ReceiveLayer* newSXReceive(IOLayer* lay) { 36 ReceiveLayer* newSXReceive(IOLayer* lay) {
38 return new FileReceive(FileReceive::SX, lay ); 37 return new FileReceive(FileReceive::SX, lay );
39 } 38 }
40 39
41 // Layer stuff 40 // Layer stuff
42 IOLayer* newSerialLayer( const Profile& prof) { 41 IOLayer* newSerialLayer( const Profile& prof) {
43 return new IOSerial( prof ); 42 return new IOSerial( prof );
44 } 43 }
45 IOLayer* newBTLayer( const Profile& prof ) { 44 IOLayer* newBTLayer( const Profile& prof ) {
46 return new IOBt( prof ); 45 return new IOBt( prof );
47 } 46 }
48 IOLayer* newIrDaLayer( const Profile& prof ) { 47 IOLayer* newIrDaLayer( const Profile& prof ) {
49 return new IOIrda( prof ); 48 return new IOIrda( prof );
50 } 49 }
51 IOLayer* newModemLayer( const Profile& prof ) { 50 IOLayer* newModemLayer( const Profile& prof ) {
52 return new IOModem( prof ); 51 return new IOModem( prof );
53 } 52 }
54 IOLayer* newConsole( const Profile& prof ) { 53 IOLayer* newConsole( const Profile& prof ) {
55 return new MyPty( prof ); 54 return new MyPty( prof );
56 } 55 }
57 56
58 // Connection Widgets 57 // Connection Widgets
59 ProfileDialogWidget* newSerialWidget( const QString& str, QWidget* wid ) { 58 ProfileDialogWidget* newSerialWidget( const QString& str, QWidget* wid ) {
60 return new SerialConfigWidget( str, wid ); 59 return new SerialConfigWidget( str, wid );
61 } 60 }
62 ProfileDialogWidget* newIrDaWidget( const QString& str, QWidget* wid ) { 61 ProfileDialogWidget* newIrDaWidget( const QString& str, QWidget* wid ) {
63 return new IrdaConfigWidget( str, wid ); 62 return new IrdaConfigWidget( str, wid );
64 } 63 }
65 ProfileDialogWidget* newModemWidget( const QString& str, QWidget* wid ) { 64 ProfileDialogWidget* newModemWidget( const QString& str, QWidget* wid ) {
66 return new ModemConfigWidget(str, wid ); 65 return new ModemConfigWidget(str, wid );
67 } 66 }
68 ProfileDialogWidget* newBTWidget( const QString& str, QWidget* wid ) { 67 ProfileDialogWidget* newBTWidget( const QString& str, QWidget* wid ) {
69 return new BTConfigWidget(str, wid ); 68 return new BTConfigWidget(str, wid );
70 } 69 }
71 ProfileDialogWidget* newConsoleWid( const QString& str, QWidget* wid ) { 70 ProfileDialogWidget* newConsoleWid( const QString& str, QWidget* wid ) {
72 return new ConsoleConfigWidget(str, wid ); 71 return new ConsoleConfigWidget(str, wid );
73 } 72 }
74 73
75 74
76 // Terminal Widget(s) 75 // Terminal Widget(s)
77 ProfileDialogWidget* newTerminalWidget(const QString& na, QWidget* wid) { 76 ProfileDialogWidget* newTerminalWidget(const QString& na, QWidget* wid) {
78 return new TerminalWidget(na, wid,0 ); 77 return new TerminalWidget(na, wid,0 );
79 } 78 }
80 79
81 // Function Keyboard Widget 80 // Function Keyboard Widget
82 ProfileDialogWidget* newKeyboardWidget(const QString& na, QWidget *wid) { 81 ProfileDialogWidget* newKeyboardWidget(const QString& na, QWidget *wid) {
83 return new FunctionKeyboardConfig(na, wid); 82 return new FunctionKeyboardConfig(na, wid);
84 } 83 }
85 84
86/* // VT Emulations 85/* // VT Emulations
87 EmulationLayer* newVT102( WidgetLayer* wid ) { 86 EmulationLayer* newVT102( WidgetLayer* wid ) {
88 return new Vt102Emulation( wid ); 87 return new Vt102Emulation( wid );
89 } 88 }
90*/ 89*/
91}; 90};
92 91
93Default::Default( MetaFactory* fact ) { 92Default::Default( MetaFactory* fact ) {
94 fact->addFileTransferLayer( "SZ", QObject::tr("Z-Modem"), newSZTransfer ); 93 fact->addFileTransferLayer( "SZ", QObject::tr("Z-Modem"), newSZTransfer );
95 fact->addFileTransferLayer( "SY", QObject::tr("Y-Modem"), newSYTransfer ); 94 fact->addFileTransferLayer( "SY", QObject::tr("Y-Modem"), newSYTransfer );
96 fact->addFileTransferLayer( "SX", QObject::tr("X-Modem"), newSXTransfer ); 95 fact->addFileTransferLayer( "SX", QObject::tr("X-Modem"), newSXTransfer );
97 96
98 fact->addReceiveLayer( "SZ", QObject::tr("Z-Modem"), newSZReceive ); 97 fact->addReceiveLayer( "SZ", QObject::tr("Z-Modem"), newSZReceive );
99 fact->addReceiveLayer( "SY", QObject::tr("Y-Modem"), newSYReceive ); 98 fact->addReceiveLayer( "SY", QObject::tr("Y-Modem"), newSYReceive );
100 fact->addReceiveLayer( "SX", QObject::tr("X-Modem"), newSXReceive ); 99 fact->addReceiveLayer( "SX", QObject::tr("X-Modem"), newSXReceive );
101 100
102 fact->addIOLayerFactory( "serial", QObject::tr("Serial"), newSerialLayer ); 101 fact->addIOLayerFactory( "serial", QObject::tr("Serial"), newSerialLayer );
103// fact->addIOLayerFactory( "irda", QObject::tr("Infrared"), newIrDaLayer ); 102// fact->addIOLayerFactory( "irda", QObject::tr("Infrared"), newIrDaLayer );
104// fact->addIOLayerFactory( "bt", QObject::tr("Bluetooth"), newBTLayer ); 103// fact->addIOLayerFactory( "bt", QObject::tr("Bluetooth"), newBTLayer );
105 fact->addIOLayerFactory( "modem", QObject::tr("Modem"), newModemLayer ); 104 fact->addIOLayerFactory( "modem", QObject::tr("Modem"), newModemLayer );
106 fact->addIOLayerFactory( "console", QObject::tr("Local Console"), newConsole ); 105 fact->addIOLayerFactory( "console", QObject::tr("Local Console"), newConsole );
107 106
108 fact->addConnectionWidgetFactory( "serial", QObject::tr("Serial"), newSerialWidget ); 107 fact->addConnectionWidgetFactory( "serial", QObject::tr("Serial"), newSerialWidget );
109// fact->addConnectionWidgetFactory( "irda", QObject::tr("Infrared"), newIrDaWidget ); 108// fact->addConnectionWidgetFactory( "irda", QObject::tr("Infrared"), newIrDaWidget );
110 fact->addConnectionWidgetFactory( "modem", QObject::tr("Modem"), newModemWidget ); 109 fact->addConnectionWidgetFactory( "modem", QObject::tr("Modem"), newModemWidget );
111// fact->addConnectionWidgetFactory( "bt", QObject::tr("Bluetooth"), newBTWidget ); 110// fact->addConnectionWidgetFactory( "bt", QObject::tr("Bluetooth"), newBTWidget );
112 fact->addConnectionWidgetFactory( "console", QObject::tr("Local Console"), newConsoleWid ); 111 fact->addConnectionWidgetFactory( "console", QObject::tr("Local Console"), newConsoleWid );
113 112
114 fact->addTerminalWidgetFactory( "default", QObject::tr("Default Terminal"), newTerminalWidget ); 113 fact->addTerminalWidgetFactory( "default", QObject::tr("Default Terminal"), newTerminalWidget );
115 fact->addKeyboardWidgetFactory( "defaultKeys", QObject::tr("Default Keyboard"), 114 fact->addKeyboardWidgetFactory( "defaultKeys", QObject::tr("Default Keyboard"),
116 newKeyboardWidget ); 115 newKeyboardWidget );
117 116
118// fact->addEmulationLayer( "default", QObject::tr("Default Terminal"), newVT102 ); 117// fact->addEmulationLayer( "default", QObject::tr("Default Terminal"), newVT102 );
119} 118}
120Default::~Default() { 119Default::~Default() {
121 120
122} 121}
diff --git a/noncore/apps/opie-console/dialdialog.cpp b/noncore/apps/opie-console/dialdialog.cpp
index b91727b..6bc1240 100644
--- a/noncore/apps/opie-console/dialdialog.cpp
+++ b/noncore/apps/opie-console/dialdialog.cpp
@@ -1,101 +1,98 @@
1 1
2 2
3#include <qlayout.h> 3#include <qlayout.h>
4#include <qlabel.h> 4#include <qlabel.h>
5#include <qcombobox.h>
6#include <qscrollview.h>
7#include <qpushbutton.h> 5#include <qpushbutton.h>
8#include <qfont.h>
9#include <qbuttongroup.h> 6#include <qbuttongroup.h>
10 7
11#include "dialdialog.h" 8#include "dialdialog.h"
12 9
13 10
14 11
15DialDialog::DialDialog( QWidget* parent, const char* name, bool modal, WFlags fl ) 12DialDialog::DialDialog( QWidget* parent, const char* name, bool modal, WFlags fl )
16 : QDialog( parent, name, modal, fl ) { 13 : QDialog( parent, name, modal, fl ) {
17 14
18 setCaption( tr( "Enter number" ) ); 15 setCaption( tr( "Enter number" ) );
19 16
20 QVBoxLayout *mainLayout = new QVBoxLayout( this ); 17 QVBoxLayout *mainLayout = new QVBoxLayout( this );
21 18
22 QLabel *textLabel = new QLabel( this ); 19 QLabel *textLabel = new QLabel( this );
23 textLabel->setTextFormat( QLabel::RichText ); 20 textLabel->setTextFormat( QLabel::RichText );
24 textLabel->setText( tr("Enter the number you want to dial. When finished, press ok") ); 21 textLabel->setText( tr("Enter the number you want to dial. When finished, press ok") );
25 22
26 m_dialLine = new QLineEdit( this ); 23 m_dialLine = new QLineEdit( this );
27 m_dialLine->setReadOnly( true ); 24 m_dialLine->setReadOnly( true );
28 m_dialLine->setFrame( false ); 25 m_dialLine->setFrame( false );
29 m_dialLine->setAlignment( Qt::AlignLeft ); 26 m_dialLine->setAlignment( Qt::AlignLeft );
30 QFont dialLine_font( m_dialLine->font() ); 27 QFont dialLine_font( m_dialLine->font() );
31 dialLine_font.setBold( TRUE ); 28 dialLine_font.setBold( TRUE );
32 dialLine_font.setPointSize( 18 ); 29 dialLine_font.setPointSize( 18 );
33 m_dialLine->setFont( dialLine_font ); 30 m_dialLine->setFont( dialLine_font );
34 31
35 QWidget* dialWidget = new QWidget( this ); 32 QWidget* dialWidget = new QWidget( this );
36 QGridLayout *layout = new QGridLayout( dialWidget , 4, 3 ); 33 QGridLayout *layout = new QGridLayout( dialWidget , 4, 3 );
37 34
38 QButtonGroup *dialButtons = new QButtonGroup( ); 35 QButtonGroup *dialButtons = new QButtonGroup( );
39 36
40 QPushButton *number0 = new QPushButton( dialWidget ); 37 QPushButton *number0 = new QPushButton( dialWidget );
41 number0->setText( QString( "0" ) ); 38 number0->setText( QString( "0" ) );
42 QFont number0_font( number0->font() ); 39 QFont number0_font( number0->font() );
43 number0_font.setBold( TRUE ); 40 number0_font.setBold( TRUE );
44 number0->setFont( number0_font ); 41 number0->setFont( number0_font );
45 layout->addWidget( number0, 4, 1 ); 42 layout->addWidget( number0, 4, 1 );
46 dialButtons->insert( number0 ); 43 dialButtons->insert( number0 );
47 44
48 int x = 0, y = 0; 45 int x = 0, y = 0;
49 for ( int i = 0 ; i < 9; i++ ) { 46 for ( int i = 0 ; i < 9; i++ ) {
50 QPushButton *number = new QPushButton( dialWidget ); 47 QPushButton *number = new QPushButton( dialWidget );
51 number->setText( QString( "%1" ).arg( i + 1 ) ); 48 number->setText( QString( "%1" ).arg( i + 1 ) );
52 QFont number_font( number->font() ); 49 QFont number_font( number->font() );
53 number_font.setBold( TRUE ); 50 number_font.setBold( TRUE );
54 number->setFont( number_font ); 51 number->setFont( number_font );
55 52
56 dialButtons->insert( number ); 53 dialButtons->insert( number );
57 54
58 layout->addWidget( number, x, y ); 55 layout->addWidget( number, x, y );
59 56
60 if ( y < 2 ) { 57 if ( y < 2 ) {
61 y++; 58 y++;
62 } else { 59 } else {
63 x++; 60 x++;
64 y = 0; 61 y = 0;
65 } 62 }
66 } 63 }
67 64
68 connect( dialButtons, SIGNAL( clicked( int ) ), this, SLOT( slotEnterNumber( int ) ) ); 65 connect( dialButtons, SIGNAL( clicked( int ) ), this, SLOT( slotEnterNumber( int ) ) );
69 66
70 mainLayout->addStretch( 2 ); 67 mainLayout->addStretch( 2 );
71 mainLayout->addWidget( textLabel ); 68 mainLayout->addWidget( textLabel );
72 mainLayout->addStretch( 1 ); 69 mainLayout->addStretch( 1 );
73 mainLayout->addWidget( m_dialLine ); 70 mainLayout->addWidget( m_dialLine );
74 mainLayout->addStretch( 2 ); 71 mainLayout->addStretch( 2 );
75 mainLayout->addWidget( dialWidget ); 72 mainLayout->addWidget( dialWidget );
76 mainLayout->addStretch( 4 ); 73 mainLayout->addStretch( 4 );
77} 74}
78 75
79 76
80void DialDialog::slotEnterNumber( int number ) { 77void DialDialog::slotEnterNumber( int number ) {
81 78
82 // pretty stupid, just for testing .-) 79 // pretty stupid, just for testing .-)
83 80
84 m_number.append(QString("%1").arg(number)); 81 m_number.append(QString("%1").arg(number));
85 82
86 setNumber(m_number); 83 setNumber(m_number);
87} 84}
88 85
89DialDialog::~DialDialog() { 86DialDialog::~DialDialog() {
90} 87}
91 88
92QString DialDialog::number() { 89QString DialDialog::number() {
93 return m_number; 90 return m_number;
94 91
95} 92}
96 93
97void DialDialog::setNumber( QString number ) 94void DialDialog::setNumber( QString number )
98{ 95{
99 m_dialLine->setText( QString("%1").arg( number ) ); 96 m_dialLine->setText( QString("%1").arg( number ) );
100} 97}
101 98
diff --git a/noncore/apps/opie-console/emulation_handler.cpp b/noncore/apps/opie-console/emulation_handler.cpp
index 235facb..2c1d888 100644
--- a/noncore/apps/opie-console/emulation_handler.cpp
+++ b/noncore/apps/opie-console/emulation_handler.cpp
@@ -1,196 +1,193 @@
1#include <qwidget.h>
2#include <qpushbutton.h>
3 1
4#include "TEWidget.h"
5#include "TEmuVt102.h" 2#include "TEmuVt102.h"
6 3
7#include "profile.h" 4#include "profile.h"
8#include "emulation_handler.h" 5#include "emulation_handler.h"
9#include "script.h" 6#include "script.h"
10 7
11EmulationHandler::EmulationHandler( const Profile& prof, QWidget* parent,const char* name ) 8EmulationHandler::EmulationHandler( const Profile& prof, QWidget* parent,const char* name )
12 : QObject(0, name ) 9 : QObject(0, name )
13{ 10{
14 m_teWid = new TEWidget( parent, "TerminalMain"); 11 m_teWid = new TEWidget( parent, "TerminalMain");
15 // use setWrapAt(0) for classic behaviour (wrap at screen width, no scrollbar) 12 // use setWrapAt(0) for classic behaviour (wrap at screen width, no scrollbar)
16 // use setWrapAt(80) for normal console with scrollbar 13 // use setWrapAt(80) for normal console with scrollbar
17 setWrap(prof.readNumEntry("Wrap", 0) ? 0 : 80); 14 setWrap(prof.readNumEntry("Wrap", 0) ? 0 : 80);
18 m_teWid->setMinimumSize(150, 70 ); 15 m_teWid->setMinimumSize(150, 70 );
19 m_script = 0; 16 m_script = 0;
20 parent->resize( m_teWid->calcSize(80, 24 ) ); 17 parent->resize( m_teWid->calcSize(80, 24 ) );
21 m_teEmu = new TEmuVt102(m_teWid ); 18 m_teEmu = new TEmuVt102(m_teWid );
22 19
23 connect(m_teEmu,SIGNAL(ImageSizeChanged(int, int) ), 20 connect(m_teEmu,SIGNAL(ImageSizeChanged(int, int) ),
24 this, SIGNAL(changeSize(int, int) ) ); 21 this, SIGNAL(changeSize(int, int) ) );
25 connect(m_teEmu, SIGNAL(sndBlock(const char*, int) ), 22 connect(m_teEmu, SIGNAL(sndBlock(const char*, int) ),
26 this, SLOT(recvEmulation(const char*, int) ) ); 23 this, SLOT(recvEmulation(const char*, int) ) );
27 m_teEmu->setConnect( true ); 24 m_teEmu->setConnect( true );
28 m_teEmu->setHistory( TRUE ); 25 m_teEmu->setHistory( TRUE );
29 load( prof ); 26 load( prof );
30 27
31 28
32 29
33} 30}
34TEmulation* EmulationHandler::emulation() { 31TEmulation* EmulationHandler::emulation() {
35 return m_teEmu; 32 return m_teEmu;
36} 33}
37EmulationHandler::~EmulationHandler() { 34EmulationHandler::~EmulationHandler() {
38 if (isRecording()) 35 if (isRecording())
39 clearScript(); 36 clearScript();
40 delete m_teEmu; 37 delete m_teEmu;
41 delete m_teWid; 38 delete m_teWid;
42} 39}
43 40
44void EmulationHandler::load( const Profile& prof) { 41void EmulationHandler::load( const Profile& prof) {
45 m_teWid->setVTFont( font( prof.readNumEntry("Font") ) ); 42 m_teWid->setVTFont( font( prof.readNumEntry("Font") ) );
46 int num = prof.readNumEntry("Color"); 43 int num = prof.readNumEntry("Color");
47 setColor( foreColor(num), backColor(num) ); 44 setColor( foreColor(num), backColor(num) );
48 m_teWid->setBackgroundColor(backColor(num) ); 45 m_teWid->setBackgroundColor(backColor(num) );
49 46
50 int term = prof.readNumEntry("Terminal", 0) ; 47 int term = prof.readNumEntry("Terminal", 0) ;
51 switch(term) { 48 switch(term) {
52 default: 49 default:
53 case Profile::VT102: 50 case Profile::VT102:
54 case Profile::VT100: 51 case Profile::VT100:
55 m_teEmu->setKeytrans("vt100.keytab"); 52 m_teEmu->setKeytrans("vt100.keytab");
56 break; 53 break;
57 case Profile::Linux: 54 case Profile::Linux:
58 m_teEmu->setKeytrans("linux.keytab"); 55 m_teEmu->setKeytrans("linux.keytab");
59 break; 56 break;
60 case Profile::XTerm: 57 case Profile::XTerm:
61 m_teEmu->setKeytrans("default.Keytab"); 58 m_teEmu->setKeytrans("default.Keytab");
62 break; 59 break;
63 } 60 }
64} 61}
65void EmulationHandler::recv( const QByteArray& ar) { 62void EmulationHandler::recv( const QByteArray& ar) {
66 m_teEmu->onRcvBlock(ar.data(), ar.count() ); 63 m_teEmu->onRcvBlock(ar.data(), ar.count() );
67} 64}
68void EmulationHandler::recvEmulation(const char* src, int len ) { 65void EmulationHandler::recvEmulation(const char* src, int len ) {
69 QByteArray ar(len); 66 QByteArray ar(len);
70 67
71 memcpy(ar.data(), src, sizeof(char) * len ); 68 memcpy(ar.data(), src, sizeof(char) * len );
72 if (isRecording()) 69 if (isRecording())
73 m_script->append(ar); 70 m_script->append(ar);
74 emit send(ar); 71 emit send(ar);
75} 72}
76QWidget* EmulationHandler::widget() { 73QWidget* EmulationHandler::widget() {
77 return m_teWid; 74 return m_teWid;
78} 75}
79/* 76/*
80 * allocate a new table of colors 77 * allocate a new table of colors
81 */ 78 */
82void EmulationHandler::setColor( const QColor& fore, const QColor& back ) { 79void EmulationHandler::setColor( const QColor& fore, const QColor& back ) {
83 ColorEntry table[TABLE_COLORS]; 80 ColorEntry table[TABLE_COLORS];
84 const ColorEntry *defaultCt = m_teWid->getdefaultColorTable(); 81 const ColorEntry *defaultCt = m_teWid->getdefaultColorTable();
85 82
86 for (int i = 0; i < TABLE_COLORS; i++ ) { 83 for (int i = 0; i < TABLE_COLORS; i++ ) {
87 if ( i == 0 || i == 10 ) { 84 if ( i == 0 || i == 10 ) {
88 table[i].color = fore; 85 table[i].color = fore;
89 }else if ( i == 1 || i == 11 ) { 86 }else if ( i == 1 || i == 11 ) {
90 table[i].color = back; 87 table[i].color = back;
91 table[i].transparent = 0; 88 table[i].transparent = 0;
92 }else { 89 }else {
93 table[i].color = defaultCt[i].color; 90 table[i].color = defaultCt[i].color;
94 } 91 }
95 } 92 }
96 m_teWid->setColorTable(table ); 93 m_teWid->setColorTable(table );
97 m_teWid->update(); 94 m_teWid->update();
98} 95}
99QFont EmulationHandler::font( int id ) { 96QFont EmulationHandler::font( int id ) {
100 QString name; 97 QString name;
101 int size = 0; 98 int size = 0;
102 switch(id ) { 99 switch(id ) {
103 default: // fall through 100 default: // fall through
104 case 0: 101 case 0:
105 name = QString::fromLatin1("Micro"); 102 name = QString::fromLatin1("Micro");
106 size = 4; 103 size = 4;
107 break; 104 break;
108 case 1: 105 case 1:
109 name = QString::fromLatin1("Fixed"); 106 name = QString::fromLatin1("Fixed");
110 size = 7; 107 size = 7;
111 break; 108 break;
112 case 2: 109 case 2:
113 name = QString::fromLatin1("Fixed"); 110 name = QString::fromLatin1("Fixed");
114 size = 12; 111 size = 12;
115 break; 112 break;
116 } 113 }
117 QFont font(name, size, QFont::Normal ); 114 QFont font(name, size, QFont::Normal );
118 font.setFixedPitch(TRUE ); 115 font.setFixedPitch(TRUE );
119 return font; 116 return font;
120} 117}
121QColor EmulationHandler::foreColor(int col) { 118QColor EmulationHandler::foreColor(int col) {
122 QColor co; 119 QColor co;
123 /* we need to switch it */ 120 /* we need to switch it */
124 switch( col ) { 121 switch( col ) {
125 default: 122 default:
126 case Profile::White: 123 case Profile::White:
127 /* color is black */ 124 /* color is black */
128 co = Qt::white; 125 co = Qt::white;
129 break; 126 break;
130 case Profile::Black: 127 case Profile::Black:
131 co = Qt::black; 128 co = Qt::black;
132 break; 129 break;
133 case Profile::Green: 130 case Profile::Green:
134 qWarning("Foreground green"); 131 qWarning("Foreground green");
135 co = Qt::green; 132 co = Qt::green;
136 break; 133 break;
137 case Profile::Orange: 134 case Profile::Orange:
138 qWarning("Foreground orange"); 135 qWarning("Foreground orange");
139 co.setRgb( 231, 184, 98 ); 136 co.setRgb( 231, 184, 98 );
140 break; 137 break;
141 } 138 }
142 139
143 return co; 140 return co;
144} 141}
145QColor EmulationHandler::backColor(int col ) { 142QColor EmulationHandler::backColor(int col ) {
146 QColor co; 143 QColor co;
147 /* we need to switch it */ 144 /* we need to switch it */
148 switch( col ) { 145 switch( col ) {
149 default: 146 default:
150 case Profile::White: 147 case Profile::White:
151 /* color is white */ 148 /* color is white */
152 co = Qt::black; 149 co = Qt::black;
153 break; 150 break;
154 case Profile::Black: 151 case Profile::Black:
155 co = Qt::white; 152 co = Qt::white;
156 break; 153 break;
157 case Profile::Green: 154 case Profile::Green:
158 qWarning("Background black"); 155 qWarning("Background black");
159 co = Qt::black; 156 co = Qt::black;
160 break; 157 break;
161 case Profile::Orange: 158 case Profile::Orange:
162 qWarning("Background black"); 159 qWarning("Background black");
163 co = Qt::black; 160 co = Qt::black;
164 break; 161 break;
165 } 162 }
166 163
167 return co; 164 return co;
168} 165}
169 166
170QPushButton* EmulationHandler::cornerButton() { 167QPushButton* EmulationHandler::cornerButton() {
171 return m_teWid->cornerButton(); 168 return m_teWid->cornerButton();
172} 169}
173 170
174 171
175Script *EmulationHandler::script() { 172Script *EmulationHandler::script() {
176 return m_script; 173 return m_script;
177} 174}
178 175
179bool EmulationHandler::isRecording() { 176bool EmulationHandler::isRecording() {
180 return (m_script != 0); 177 return (m_script != 0);
181} 178}
182 179
183void EmulationHandler::startRecording() { 180void EmulationHandler::startRecording() {
184 if (!isRecording()) 181 if (!isRecording())
185 m_script = new Script(); 182 m_script = new Script();
186} 183}
187 184
188void EmulationHandler::clearScript() { 185void EmulationHandler::clearScript() {
189 if (isRecording()) { 186 if (isRecording()) {
190 delete m_script; 187 delete m_script;
191 m_script = 0; 188 m_script = 0;
192 } 189 }
193} 190}
194 191
195void EmulationHandler::runScript(const Script *script) { 192void EmulationHandler::runScript(const Script *script) {
196 emit send(script->script()); 193 emit send(script->script());
diff --git a/noncore/apps/opie-console/emulation_layer.cpp b/noncore/apps/opie-console/emulation_layer.cpp
index 6a2679e..2bef801 100644
--- a/noncore/apps/opie-console/emulation_layer.cpp
+++ b/noncore/apps/opie-console/emulation_layer.cpp
@@ -1,276 +1,273 @@
1/* -------------------------------------------------------------------------- */ 1/* -------------------------------------------------------------------------- */
2/* */ 2/* */
3/* [emulation_layer.cpp] Terminal Emulation Decoder */ 3/* [emulation_layer.cpp] Terminal Emulation Decoder */
4/* */ 4/* */
5/* -------------------------------------------------------------------------- */ 5/* -------------------------------------------------------------------------- */
6/* */ 6/* */
7/* Copyright (c) 1997,1998 by Lars Doelle <lars.doelle@on-line.de> */ 7/* Copyright (c) 1997,1998 by Lars Doelle <lars.doelle@on-line.de> */
8/* */ 8/* */
9/* This file is part of Konsole - an X terminal for KDE */ 9/* This file is part of Konsole - an X terminal for KDE */
10/* */ 10/* */
11/* -------------------------------------------------------------------------- */ 11/* -------------------------------------------------------------------------- */
12 /* */ 12 /* */
13/* Ported Konsole to Qt/Embedded */ 13/* Ported Konsole to Qt/Embedded */
14 /* */ 14 /* */
15/* Copyright (C) 2000 by John Ryland <jryland@trolltech.com> */ 15/* Copyright (C) 2000 by John Ryland <jryland@trolltech.com> */
16 /* */ 16 /* */
17/* -------------------------------------------------------------------------- */ 17/* -------------------------------------------------------------------------- */
18 /* */ 18 /* */
19/* Modified to suit opie-console */ 19/* Modified to suit opie-console */
20 /* */ 20 /* */
21/* Copyright (C) 2002 by opie developers <opie@handhelds.org> */ 21/* Copyright (C) 2002 by opie developers <opie@handhelds.org> */
22 /* */ 22 /* */
23/* -------------------------------------------------------------------------- */ 23/* -------------------------------------------------------------------------- */
24 24
25/*! \class EmulationLayer 25/*! \class EmulationLayer
26 26
27 \brief Mediator between Widget and Screen. 27 \brief Mediator between Widget and Screen.
28 28
29 This class is responsible to scan the escapes sequences of the terminal 29 This class is responsible to scan the escapes sequences of the terminal
30 emulation and to map it to their corresponding semantic complements. 30 emulation and to map it to their corresponding semantic complements.
31 Thus this module knows mainly about decoding escapes sequences and 31 Thus this module knows mainly about decoding escapes sequences and
32 is a stateless device w.r.t. the semantics. 32 is a stateless device w.r.t. the semantics.
33 33
34 It is also responsible to refresh the Widget by certain rules. 34 It is also responsible to refresh the Widget by certain rules.
35 35
36 \sa Widget \sa Screen 36 \sa Widget \sa Screen
37 37
38 \par A note on refreshing 38 \par A note on refreshing
39 39
40 Although the modifications to the current screen image could immediately 40 Although the modifications to the current screen image could immediately
41 be propagated via `Widget' to the graphical surface, we have chosen 41 be propagated via `Widget' to the graphical surface, we have chosen
42 another way here. 42 another way here.
43 43
44 The reason for doing so is twofold. 44 The reason for doing so is twofold.
45 45
46 First, experiments show that directly displaying the operation results 46 First, experiments show that directly displaying the operation results
47 in slowing down the overall performance of emulations. Displaying 47 in slowing down the overall performance of emulations. Displaying
48 individual characters using X11 creates a lot of overhead. 48 individual characters using X11 creates a lot of overhead.
49 49
50 Second, by using the following refreshing method, the screen operations 50 Second, by using the following refreshing method, the screen operations
51 can be completely separated from the displaying. This greatly simplifies 51 can be completely separated from the displaying. This greatly simplifies
52 the programmer's task of coding and maintaining the screen operations, 52 the programmer's task of coding and maintaining the screen operations,
53 since one need not worry about differential modifications on the 53 since one need not worry about differential modifications on the
54 display affecting the operation of concern. 54 display affecting the operation of concern.
55 55
56 We use a refreshing algorithm here that has been adoped from rxvt/kvt. 56 We use a refreshing algorithm here that has been adoped from rxvt/kvt.
57 57
58 By this, refreshing is driven by a timer, which is (re)started whenever 58 By this, refreshing is driven by a timer, which is (re)started whenever
59 a new bunch of data to be interpreted by the emulation arives at `onRcvBlock'. 59 a new bunch of data to be interpreted by the emulation arives at `onRcvBlock'.
60 As soon as no more data arrive for `BULK_TIMEOUT' milliseconds, we trigger 60 As soon as no more data arrive for `BULK_TIMEOUT' milliseconds, we trigger
61 refresh. This rule suits both bulk display operation as done by curses as 61 refresh. This rule suits both bulk display operation as done by curses as
62 well as individual characters typed. 62 well as individual characters typed.
63 (BULK_TIMEOUT < 1000 / max characters received from keyboard per second). 63 (BULK_TIMEOUT < 1000 / max characters received from keyboard per second).
64 64
65 Additionally, we trigger refreshing by newlines comming in to make visual 65 Additionally, we trigger refreshing by newlines comming in to make visual
66 snapshots of lists as produced by `cat', `ls' and likely programs, thereby 66 snapshots of lists as produced by `cat', `ls' and likely programs, thereby
67 producing the illusion of a permanent and immediate display operation. 67 producing the illusion of a permanent and immediate display operation.
68 68
69 As a sort of catch-all needed for cases where none of the above 69 As a sort of catch-all needed for cases where none of the above
70 conditions catch, the screen refresh is also triggered by a count 70 conditions catch, the screen refresh is also triggered by a count
71 of incoming bulks (`bulk_incnt'). 71 of incoming bulks (`bulk_incnt').
72*/ 72*/
73 73
74/* FIXME 74/* FIXME
75 - evtl. the bulk operations could be made more transparent. 75 - evtl. the bulk operations could be made more transparent.
76*/ 76*/
77 77
78#include "emulation_layer.h" 78#include "emulation_layer.h"
79#include "widget_layer.h"
80#include "screen.h"
81#include <stdio.h> 79#include <stdio.h>
82#include <stdlib.h> 80#include <stdlib.h>
83#include <unistd.h> 81#include <unistd.h>
84#include <qkeycode.h>
85 82
86 83
87/* ------------------------------------------------------------------------- */ 84/* ------------------------------------------------------------------------- */
88/* */ 85/* */
89/* EmulationLayer */ 86/* EmulationLayer */
90/* */ 87/* */
91/* ------------------------------------------------------------------------- */ 88/* ------------------------------------------------------------------------- */
92 89
93#define CNTL(c) ((c)-'@') 90#define CNTL(c) ((c)-'@')
94 91
95/*! 92/*!
96*/ 93*/
97 94
98EmulationLayer::EmulationLayer( WidgetLayer* gui ) 95EmulationLayer::EmulationLayer( WidgetLayer* gui )
99: decoder((QTextDecoder*)NULL) 96: decoder((QTextDecoder*)NULL)
100{ 97{
101 this->gui = gui; 98 this->gui = gui;
102 99
103 screen[0] = new Screen(gui->lines(),gui->columns()); 100 screen[0] = new Screen(gui->lines(),gui->columns());
104 screen[1] = new Screen(gui->lines(),gui->columns()); 101 screen[1] = new Screen(gui->lines(),gui->columns());
105 scr = screen[0]; 102 scr = screen[0];
106 103
107 bulk_nlcnt = 0; // reset bulk newline counter 104 bulk_nlcnt = 0; // reset bulk newline counter
108 bulk_incnt = 0; // reset bulk counter 105 bulk_incnt = 0; // reset bulk counter
109 connected = FALSE; 106 connected = FALSE;
110 107
111 QObject::connect(&bulk_timer, SIGNAL( timeout() ), this, SLOT( showBulk() ) ); 108 QObject::connect(&bulk_timer, SIGNAL( timeout() ), this, SLOT( showBulk() ) );
112 QObject::connect(gui,SIGNAL( imageSizeChanged( int, int ) ), 109 QObject::connect(gui,SIGNAL( imageSizeChanged( int, int ) ),
113 this,SLOT( onImageSizeChange( int, int ) ) ); 110 this,SLOT( onImageSizeChange( int, int ) ) );
114 QObject::connect(gui,SIGNAL( changedHistoryCursor( int ) ), 111 QObject::connect(gui,SIGNAL( changedHistoryCursor( int ) ),
115 this,SLOT( historyCursorChange( int ) ) ); 112 this,SLOT( historyCursorChange( int ) ) );
116 QObject::connect(gui,SIGNAL( keyPressed( QKeyEvent* ) ), 113 QObject::connect(gui,SIGNAL( keyPressed( QKeyEvent* ) ),
117 this,SLOT( onKeyPress( QKeyEvent* ) ) ); 114 this,SLOT( onKeyPress( QKeyEvent* ) ) );
118 QObject::connect(gui,SIGNAL( selectionBegin( const int, const int) ), 115 QObject::connect(gui,SIGNAL( selectionBegin( const int, const int) ),
119 this,SLOT( onSelectionBegin( const int, const int ) ) ); 116 this,SLOT( onSelectionBegin( const int, const int ) ) );
120 QObject::connect(gui,SIGNAL( selectionExtended( const int, const int ) ), 117 QObject::connect(gui,SIGNAL( selectionExtended( const int, const int ) ),
121 this,SLOT( onSelectionExtend( const int,const int ) ) ); 118 this,SLOT( onSelectionExtend( const int,const int ) ) );
122 QObject::connect(gui,SIGNAL( selectionEnd( const bool ) ), 119 QObject::connect(gui,SIGNAL( selectionEnd( const bool ) ),
123 this,SLOT( setSelection( const bool ) ) ); 120 this,SLOT( setSelection( const bool ) ) );
124 QObject::connect(gui,SIGNAL( selectionCleared() ), 121 QObject::connect(gui,SIGNAL( selectionCleared() ),
125 this,SLOT( clearSelection() ) ); 122 this,SLOT( clearSelection() ) );
126} 123}
127 124
128/*! 125/*!
129*/ 126*/
130 127
131EmulationLayer::~EmulationLayer() 128EmulationLayer::~EmulationLayer()
132{ 129{
133 delete screen[0]; 130 delete screen[0];
134 delete screen[1]; 131 delete screen[1];
135 bulk_timer.stop(); 132 bulk_timer.stop();
136} 133}
137 134
138/*! change between primary and alternate screen 135/*! change between primary and alternate screen
139*/ 136*/
140 137
141void EmulationLayer::setScreen(int n) 138void EmulationLayer::setScreen(int n)
142{ 139{
143 scr = screen[n&1]; 140 scr = screen[n&1];
144} 141}
145 142
146void EmulationLayer::setHistory(bool on) 143void EmulationLayer::setHistory(bool on)
147{ 144{
148 screen[0]->setScroll(on); 145 screen[0]->setScroll(on);
149 if (!connected) return; 146 if (!connected) return;
150 showBulk(); 147 showBulk();
151} 148}
152 149
153bool EmulationLayer::history() 150bool EmulationLayer::history()
154{ 151{
155 return screen[0]->hasScroll(); 152 return screen[0]->hasScroll();
156} 153}
157 154
158void EmulationLayer::setCodec(int c) 155void EmulationLayer::setCodec(int c)
159{ 156{
160 //FIXME: check whether we have to free codec 157 //FIXME: check whether we have to free codec
161 codec = c ? QTextCodec::codecForName("utf8") 158 codec = c ? QTextCodec::codecForName("utf8")
162 : QTextCodec::codecForLocale(); 159 : QTextCodec::codecForLocale();
163 if (decoder) delete decoder; 160 if (decoder) delete decoder;
164 decoder = codec->makeDecoder(); 161 decoder = codec->makeDecoder();
165} 162}
166 163
167void EmulationLayer::setKeytrans(int no) 164void EmulationLayer::setKeytrans(int no)
168{ 165{
169 keytrans = KeyTrans::find(no); 166 keytrans = KeyTrans::find(no);
170} 167}
171 168
172void EmulationLayer::setKeytrans(const char * no) 169void EmulationLayer::setKeytrans(const char * no)
173{ 170{
174 keytrans = KeyTrans::find(no); 171 keytrans = KeyTrans::find(no);
175} 172}
176 173
177// Interpreting Codes --------------------------------------------------------- 174// Interpreting Codes ---------------------------------------------------------
178 175
179/* 176/*
180 This section deals with decoding the incoming character stream. 177 This section deals with decoding the incoming character stream.
181 Decoding means here, that the stream is first seperated into `tokens' 178 Decoding means here, that the stream is first seperated into `tokens'
182 which are then mapped to a `meaning' provided as operations by the 179 which are then mapped to a `meaning' provided as operations by the
183 `Screen' class. 180 `Screen' class.
184*/ 181*/
185 182
186/*! 183/*!
187*/ 184*/
188 185
189void EmulationLayer::onRcvChar(int c) 186void EmulationLayer::onRcvChar(int c)
190// process application unicode input to terminal 187// process application unicode input to terminal
191// this is a trivial scanner 188// this is a trivial scanner
192{ 189{
193 c &= 0xff; 190 c &= 0xff;
194 switch (c) 191 switch (c)
195 { 192 {
196 case '\b' : scr->BackSpace(); break; 193 case '\b' : scr->BackSpace(); break;
197 case '\t' : scr->Tabulate(); break; 194 case '\t' : scr->Tabulate(); break;
198 case '\n' : scr->NewLine(); break; 195 case '\n' : scr->NewLine(); break;
199 case '\r' : scr->Return(); break; 196 case '\r' : scr->Return(); break;
200 case 0x07 : gui->bell(); break; 197 case 0x07 : gui->bell(); break;
201 default : scr->ShowCharacter(c); break; 198 default : scr->ShowCharacter(c); break;
202 }; 199 };
203} 200}
204 201
205/* ------------------------------------------------------------------------- */ 202/* ------------------------------------------------------------------------- */
206/* */ 203/* */
207/* Keyboard Handling */ 204/* Keyboard Handling */
208/* */ 205/* */
209/* ------------------------------------------------------------------------- */ 206/* ------------------------------------------------------------------------- */
210 207
211/*! 208/*!
212*/ 209*/
213 210
214void EmulationLayer::onKeyPress( QKeyEvent* ev ) 211void EmulationLayer::onKeyPress( QKeyEvent* ev )
215{ 212{
216 if (!connected) return; // someone else gets the keys 213 if (!connected) return; // someone else gets the keys
217 if (scr->getHistCursor() != scr->getHistLines()); 214 if (scr->getHistCursor() != scr->getHistLines());
218 scr->setHistCursor(scr->getHistLines()); 215 scr->setHistCursor(scr->getHistLines());
219 if (!ev->text().isEmpty()) 216 if (!ev->text().isEmpty())
220 { // A block of text 217 { // A block of text
221 // Note that the text is proper unicode. 218 // Note that the text is proper unicode.
222 // We should do a conversion here, but since this 219 // We should do a conversion here, but since this
223 // routine will never be used, we simply emit plain ascii. 220 // routine will never be used, we simply emit plain ascii.
224 sendString( ev->text().ascii() ); //,ev->text().length()); 221 sendString( ev->text().ascii() ); //,ev->text().length());
225 } 222 }
226 else if (ev->ascii()>0) 223 else if (ev->ascii()>0)
227 { 224 {
228 QByteArray c = QByteArray( 1 ); 225 QByteArray c = QByteArray( 1 );
229 c.at( 0 ) = ev->ascii(); 226 c.at( 0 ) = ev->ascii();
230 // ibot: qbytearray is emited not char* 227 // ibot: qbytearray is emited not char*
231 228
232 emit sndBlock( (QByteArray) c ); 229 emit sndBlock( (QByteArray) c );
233 } 230 }
234} 231}
235 232
236// Unblocking, Byte to Unicode translation --------------------------------- -- 233// Unblocking, Byte to Unicode translation --------------------------------- --
237 234
238/* 235/*
239 We are doing code conversion from locale to unicode first. 236 We are doing code conversion from locale to unicode first.
240*/ 237*/
241 238
242void EmulationLayer::onRcvBlock(const QByteArray &s ) 239void EmulationLayer::onRcvBlock(const QByteArray &s )
243{ 240{
244 bulkStart(); 241 bulkStart();
245 bulk_incnt += 1; 242 bulk_incnt += 1;
246 for (int i = 0; i < s.size(); i++) 243 for (int i = 0; i < s.size(); i++)
247 { 244 {
248 //TODO: ibot: maybe decoding qbytearray to unicode in io_layer? 245 //TODO: ibot: maybe decoding qbytearray to unicode in io_layer?
249 QString result = decoder->toUnicode(&s[i],1); 246 QString result = decoder->toUnicode(&s[i],1);
250 int reslen = result.length(); 247 int reslen = result.length();
251 for (int j = 0; j < reslen; j++) 248 for (int j = 0; j < reslen; j++)
252 onRcvChar(result[j].unicode()); 249 onRcvChar(result[j].unicode());
253 if (s[i] == '\n') bulkNewline(); 250 if (s[i] == '\n') bulkNewline();
254 } 251 }
255 bulkEnd(); 252 bulkEnd();
256} 253}
257 254
258// Selection --------------------------------------------------------------- -- 255// Selection --------------------------------------------------------------- --
259 256
260void EmulationLayer::onSelectionBegin(const int x, const int y) { 257void EmulationLayer::onSelectionBegin(const int x, const int y) {
261 if (!connected) return; 258 if (!connected) return;
262 scr->setSelBeginXY(x,y); 259 scr->setSelBeginXY(x,y);
263 showBulk(); 260 showBulk();
264} 261}
265 262
266void EmulationLayer::onSelectionExtend(const int x, const int y) { 263void EmulationLayer::onSelectionExtend(const int x, const int y) {
267 if (!connected) return; 264 if (!connected) return;
268 scr->setSelExtentXY(x,y); 265 scr->setSelExtentXY(x,y);
269 showBulk(); 266 showBulk();
270} 267}
271 268
272void EmulationLayer::setSelection(const BOOL preserve_line_breaks) { 269void EmulationLayer::setSelection(const BOOL preserve_line_breaks) {
273 if (!connected) return; 270 if (!connected) return;
274 QString t = scr->getSelText(preserve_line_breaks); 271 QString t = scr->getSelText(preserve_line_breaks);
275 if (!t.isNull()) gui->setSelection(t); 272 if (!t.isNull()) gui->setSelection(t);
276} 273}
diff --git a/noncore/apps/opie-console/emulation_widget.cpp b/noncore/apps/opie-console/emulation_widget.cpp
index 9f95c72..ad8ecba 100644
--- a/noncore/apps/opie-console/emulation_widget.cpp
+++ b/noncore/apps/opie-console/emulation_widget.cpp
@@ -1,204 +1,196 @@
1// opie-console includes 1// opie-console includes
2#include "emulation_widget.h" 2#include "emulation_widget.h"
3#include "common.h"
4#include "widget_layer.h"
5#include "profile.h"
6 3
7// qt includes 4// qt includes
8#include <qwidget.h>
9#include <qarray.h>
10#include <qstring.h>
11#include <qpainter.h>
12#include <qrect.h>
13#include <qscrollbar.h> 5#include <qscrollbar.h>
14 6
15#define rimX 0 // left/right rim width 7#define rimX 0 // left/right rim width
16#define rimY 0 // top/bottom rim high 8#define rimY 0 // top/bottom rim high
17 9
18static const ColorEntry color_table[TABLE_COLORS] = 10static const ColorEntry color_table[TABLE_COLORS] =
19{ 11{
20 ColorEntry(QColor(0x00,0x00,0x00), 0, 0 ), ColorEntry( QColor(0xB2,0xB2,0xB2), 1, 0 ), // Dfore, Dback 12 ColorEntry(QColor(0x00,0x00,0x00), 0, 0 ), ColorEntry( QColor(0xB2,0xB2,0xB2), 1, 0 ), // Dfore, Dback
21 ColorEntry(QColor(0x00,0x00,0x00), 0, 0 ), ColorEntry( QColor(0xB2,0x18,0x18), 0, 0 ), // Black, Red 13 ColorEntry(QColor(0x00,0x00,0x00), 0, 0 ), ColorEntry( QColor(0xB2,0x18,0x18), 0, 0 ), // Black, Red
22 ColorEntry(QColor(0x18,0xB2,0x18), 0, 0 ), ColorEntry( QColor(0xB2,0x68,0x18), 0, 0 ), // Green, Yellow 14 ColorEntry(QColor(0x18,0xB2,0x18), 0, 0 ), ColorEntry( QColor(0xB2,0x68,0x18), 0, 0 ), // Green, Yellow
23 ColorEntry(QColor(0x18,0x18,0xB2), 0, 0 ), ColorEntry( QColor(0xB2,0x18,0xB2), 0, 0 ), // Blue, Magenta 15 ColorEntry(QColor(0x18,0x18,0xB2), 0, 0 ), ColorEntry( QColor(0xB2,0x18,0xB2), 0, 0 ), // Blue, Magenta
24 ColorEntry(QColor(0x18,0xB2,0xB2), 0, 0 ), ColorEntry( QColor(0xB2,0xB2,0xB2), 0, 0 ), // Cyan, White 16 ColorEntry(QColor(0x18,0xB2,0xB2), 0, 0 ), ColorEntry( QColor(0xB2,0xB2,0xB2), 0, 0 ), // Cyan, White
25 // intensiv 17 // intensiv
26 ColorEntry(QColor(0x00,0x00,0x00), 0, 1 ), ColorEntry( QColor(0xFF,0xFF,0xFF), 1, 0 ), 18 ColorEntry(QColor(0x00,0x00,0x00), 0, 1 ), ColorEntry( QColor(0xFF,0xFF,0xFF), 1, 0 ),
27 ColorEntry(QColor(0x68,0x68,0x68), 0, 0 ), ColorEntry( QColor(0xFF,0x54,0x54), 0, 0 ), 19 ColorEntry(QColor(0x68,0x68,0x68), 0, 0 ), ColorEntry( QColor(0xFF,0x54,0x54), 0, 0 ),
28 ColorEntry(QColor(0x54,0xFF,0x54), 0, 0 ), ColorEntry( QColor(0xFF,0xFF,0x54), 0, 0 ), 20 ColorEntry(QColor(0x54,0xFF,0x54), 0, 0 ), ColorEntry( QColor(0xFF,0xFF,0x54), 0, 0 ),
29 ColorEntry(QColor(0x54,0x54,0xFF), 0, 0 ), ColorEntry( QColor(0xB2,0x18,0xB2), 0, 0 ), 21 ColorEntry(QColor(0x54,0x54,0xFF), 0, 0 ), ColorEntry( QColor(0xB2,0x18,0xB2), 0, 0 ),
30 ColorEntry(QColor(0x54,0xFF,0xFF), 0, 0 ), ColorEntry( QColor(0xFF,0xFF,0xFF), 0, 0 ) 22 ColorEntry(QColor(0x54,0xFF,0xFF), 0, 0 ), ColorEntry( QColor(0xFF,0xFF,0xFF), 0, 0 )
31}; 23};
32 24
33EmulationWidget::EmulationWidget( const Profile& config, QWidget *parent, const char* name ) : WidgetLayer( config, parent, name ) 25EmulationWidget::EmulationWidget( const Profile& config, QWidget *parent, const char* name ) : WidgetLayer( config, parent, name )
34{ 26{
35 27
36 // initialize font attributes 28 // initialize font attributes
37 QFontMetrics fm( font() ); 29 QFontMetrics fm( font() );
38 f_height = fm.height(); 30 f_height = fm.height();
39 f_width = fm.maxWidth(); 31 f_width = fm.maxWidth();
40 f_ascent = fm.ascent(); 32 f_ascent = fm.ascent();
41 33
42 34
43 // initialize scrollbar related vars 35 // initialize scrollbar related vars
44 m_scrollbar = new QScrollBar( this ); 36 m_scrollbar = new QScrollBar( this );
45 m_scrollbar->setCursor( arrowCursor ); 37 m_scrollbar->setCursor( arrowCursor );
46 38
47 // give reasonable defaults to m_columns, m_lines 39 // give reasonable defaults to m_columns, m_lines
48 calcGeometry(); 40 calcGeometry();
49 41
50 // load config 42 // load config
51 reloadConfig( config ); 43 reloadConfig( config );
52 44
53 m_resizing = false; 45 m_resizing = false;
54} 46}
55 47
56void EmulationWidget::reloadConfig( const Profile& config ) 48void EmulationWidget::reloadConfig( const Profile& config )
57{ 49{
58 50
59 // nothing yet 51 // nothing yet
60} 52}
61 53
62EmulationWidget::~EmulationWidget() 54EmulationWidget::~EmulationWidget()
63{ 55{
64 //clean up 56 //clean up
65} 57}
66 58
67static QChar vt100extended(QChar c) 59static QChar vt100extended(QChar c)
68{ 60{
69 switch (c.unicode()) 61 switch (c.unicode())
70 { 62 {
71 case 0x25c6 : return 1; 63 case 0x25c6 : return 1;
72 case 0x2592 : return 2; 64 case 0x2592 : return 2;
73 case 0x2409 : return 3; 65 case 0x2409 : return 3;
74 case 0x240c : return 4; 66 case 0x240c : return 4;
75 case 0x240d : return 5; 67 case 0x240d : return 5;
76 case 0x240a : return 6; 68 case 0x240a : return 6;
77 case 0x00b0 : return 7; 69 case 0x00b0 : return 7;
78 case 0x00b1 : return 8; 70 case 0x00b1 : return 8;
79 case 0x2424 : return 9; 71 case 0x2424 : return 9;
80 case 0x240b : return 10; 72 case 0x240b : return 10;
81 case 0x2518 : return 11; 73 case 0x2518 : return 11;
82 case 0x2510 : return 12; 74 case 0x2510 : return 12;
83 case 0x250c : return 13; 75 case 0x250c : return 13;
84 case 0x2514 : return 14; 76 case 0x2514 : return 14;
85 case 0x253c : return 15; 77 case 0x253c : return 15;
86 case 0xf800 : return 16; 78 case 0xf800 : return 16;
87 case 0xf801 : return 17; 79 case 0xf801 : return 17;
88 case 0x2500 : return 18; 80 case 0x2500 : return 18;
89 case 0xf803 : return 19; 81 case 0xf803 : return 19;
90 case 0xf804 : return 20; 82 case 0xf804 : return 20;
91 case 0x251c : return 21; 83 case 0x251c : return 21;
92 case 0x2524 : return 22; 84 case 0x2524 : return 22;
93 case 0x2534 : return 23; 85 case 0x2534 : return 23;
94 case 0x252c : return 24; 86 case 0x252c : return 24;
95 case 0x2502 : return 25; 87 case 0x2502 : return 25;
96 case 0x2264 : return 26; 88 case 0x2264 : return 26;
97 case 0x2265 : return 27; 89 case 0x2265 : return 27;
98 case 0x03c0 : return 28; 90 case 0x03c0 : return 28;
99 case 0x2260 : return 29; 91 case 0x2260 : return 29;
100 case 0x00a3 : return 30; 92 case 0x00a3 : return 30;
101 case 0x00b7 : return 31; 93 case 0x00b7 : return 31;
102 } 94 }
103 return c; 95 return c;
104} 96}
105 97
106 98
107QSize EmulationWidget::calcSize( int cols, int lins ) const 99QSize EmulationWidget::calcSize( int cols, int lins ) const
108{ 100{
109 int frw = width() - contentsRect().width(); 101 int frw = width() - contentsRect().width();
110 102
111 int frh = height() - contentsRect().height(); 103 int frh = height() - contentsRect().height();
112 int scw = (scrollLoc == SCRNONE? 0 : m_scrollbar->width() ); 104 int scw = (scrollLoc == SCRNONE? 0 : m_scrollbar->width() );
113 return QSize( f_width * cols + 2 * rimX + frw + scw, f_height * lins + 2 * rimY + frh ); 105 return QSize( f_width * cols + 2 * rimX + frw + scw, f_height * lins + 2 * rimY + frh );
114} 106}
115 107
116void EmulationWidget::setImage( QArray<Character> const newimg, int lines, int columns ) 108void EmulationWidget::setImage( QArray<Character> const newimg, int lines, int columns )
117{ 109{
118 const QPixmap* pm = backgroundPixmap(); 110 const QPixmap* pm = backgroundPixmap();
119 QPainter paint; 111 QPainter paint;
120 112
121 // dont allow updates, while drawing 113 // dont allow updates, while drawing
122 setUpdatesEnabled( false ); 114 setUpdatesEnabled( false );
123 115
124 paint.begin( this ); 116 paint.begin( this );
125 117
126 QPoint tL = contentsRect().topLeft(); 118 QPoint tL = contentsRect().topLeft();
127 int tLx = tL.x(); 119 int tLx = tL.x();
128 int tLy = tL.y(); 120 int tLy = tL.y();
129 //hasBlinker = false; 121 //hasBlinker = false;
130 122
131 int cf = -1; 123 int cf = -1;
132 int cb = -1; 124 int cb = -1;
133 int cr = -1; 125 int cr = -1;
134 126
135 int lins = QMIN( m_lines, QMAX( 0, lines ) ); 127 int lins = QMIN( m_lines, QMAX( 0, lines ) );
136 int cols = QMIN( m_columns, QMAX( 0, columns ) ); 128 int cols = QMIN( m_columns, QMAX( 0, columns ) );
137 QArray<QChar> disstrU = QArray<QChar>( cols ); 129 QArray<QChar> disstrU = QArray<QChar>( cols );
138 130
139 for ( int y = 0; y < lins; ++y ) 131 for ( int y = 0; y < lins; ++y )
140 {int len; 132 {int len;
141 const Character* lcl = &m_image[y * m_columns]; 133 const Character* lcl = &m_image[y * m_columns];
142 const Character* ext = &newimg[y * m_columns]; 134 const Character* ext = &newimg[y * m_columns];
143 if ( ! m_resizing ) 135 if ( ! m_resizing )
144 for ( int x = 0; x < cols; ++x ) 136 for ( int x = 0; x < cols; ++x )
145 { 137 {
146 // disable, till widget works, WITHOUT blinking 138 // disable, till widget works, WITHOUT blinking
147 //hasBlinker |= ( ext[x].r & RE_BLINK ); 139 //hasBlinker |= ( ext[x].r & RE_BLINK );
148 140
149 if ( ext[x] != lcl[x] ) 141 if ( ext[x] != lcl[x] )
150 { 142 {
151 cr = ext[x].r; 143 cr = ext[x].r;
152 cb = ext[x].b; 144 cb = ext[x].b;
153 if ( ext[x].f != cf ) cf = ext[x].f; 145 if ( ext[x].f != cf ) cf = ext[x].f;
154 int lln = cols - x; 146 int lln = cols - x;
155 disstrU[0] = vt100extended( ext[x+0].c ); 147 disstrU[0] = vt100extended( ext[x+0].c );
156 for ( len = 1; len < lln; ++len ) 148 for ( len = 1; len < lln; ++len )
157 { 149 {
158 if ( ext[x+len].f != cf || ext[x+len].b != cb || ext[x+len].r != cr || ext[x+len] == lcl[x+len] ) 150 if ( ext[x+len].f != cf || ext[x+len].b != cb || ext[x+len].r != cr || ext[x+len] == lcl[x+len] )
159 break; 151 break;
160 disstrU[len] = vt100extended( ext[x+len].c ); 152 disstrU[len] = vt100extended( ext[x+len].c );
161 } 153 }
162 QString unistr( disstrU, len ); 154 QString unistr( disstrU, len );
163 drawAttrString( unistr, paint, QRect( m_blX+tLx+f_width*x, m_bY+tLy+f_height*y, f_width*len, f_height ), ext[x], pm != NULL, true ); 155 drawAttrString( unistr, paint, QRect( m_blX+tLx+f_width*x, m_bY+tLy+f_height*y, f_width*len, f_height ), ext[x], pm != NULL, true );
164 x += len -1; 156 x += len -1;
165 } 157 }
166 } 158 }
167 // make image become newimg 159 // make image become newimg
168 memcpy( (void*) lcl, (const void*) ext, cols*sizeof( Character ) ); 160 memcpy( (void*) lcl, (const void*) ext, cols*sizeof( Character ) );
169 } 161 }
170 drawFrame( &paint ); 162 drawFrame( &paint );
171 paint.end(); 163 paint.end();
172 setUpdatesEnabled( true ); 164 setUpdatesEnabled( true );
173 165
174 /*if ( hasBlinker && !blinkT->isActive() ) 166 /*if ( hasBlinker && !blinkT->isActive() )
175 blinkT->start(1000); //ms 167 blinkT->start(1000); //ms
176 if ( ! hasBlinker && blinkT->isActive() ) 168 if ( ! hasBlinker && blinkT->isActive() )
177 { 169 {
178 blinkT->stop(); 170 blinkT->stop();
179 blinking = false; 171 blinking = false;
180 }*/ 172 }*/
181 173
182 delete [] disstrU; 174 delete [] disstrU;
183} 175}
184 176
185 177
186void EmulationWidget::paintEvent( QPaintEvent* pe ) 178void EmulationWidget::paintEvent( QPaintEvent* pe )
187{ 179{
188 QPainter painter; 180 QPainter painter;
189 const QPixmap* pm = backgroundPixmap(); 181 const QPixmap* pm = backgroundPixmap();
190 182
191 painter.begin( this ); 183 painter.begin( this );
192 painter.setBackgroundMode( TransparentMode ); 184 painter.setBackgroundMode( TransparentMode );
193 185
194 QRect rect = pe->rect().intersect( contentsRect() ); 186 QRect rect = pe->rect().intersect( contentsRect() );
195 QPoint tL = contentsRect().topLeft(); 187 QPoint tL = contentsRect().topLeft();
196 int tLx = tL.x(); 188 int tLx = tL.x();
197 int tLy = tL.y(); 189 int tLy = tL.y();
198 190
199 int lux = QMIN(m_columns-1, QMAX(0,(rect.left() - tLx - m_blX ) / f_width)); 191 int lux = QMIN(m_columns-1, QMAX(0,(rect.left() - tLx - m_blX ) / f_width));
200 int luy = QMIN(m_lines-1, QMAX(0,(rect.top() - tLy - m_bY ) / f_height)); 192 int luy = QMIN(m_lines-1, QMAX(0,(rect.top() - tLy - m_bY ) / f_height));
201 int rlx = QMIN(m_columns-1, QMAX(0,(rect.right() - tLx - m_blX ) / f_width)); 193 int rlx = QMIN(m_columns-1, QMAX(0,(rect.right() - tLx - m_blX ) / f_width));
202 int rly = QMIN(m_lines-1, QMAX(0,(rect.bottom() - tLy - m_bY ) / f_height)); 194 int rly = QMIN(m_lines-1, QMAX(0,(rect.bottom() - tLy - m_bY ) / f_height));
203 195
204 QChar *disstrU = new QChar[m_columns]; 196 QChar *disstrU = new QChar[m_columns];
diff --git a/noncore/apps/opie-console/file_layer.cpp b/noncore/apps/opie-console/file_layer.cpp
index 0c83700..9ddef80 100644
--- a/noncore/apps/opie-console/file_layer.cpp
+++ b/noncore/apps/opie-console/file_layer.cpp
@@ -1,23 +1,22 @@
1#include <qfile.h>
2#include <opie/oprocess.h> 1#include <opie/oprocess.h>
3 2
4#include "file_layer.h" 3#include "file_layer.h"
5 4
6FileTransferLayer::FileTransferLayer(IOLayer *layer) 5FileTransferLayer::FileTransferLayer(IOLayer *layer)
7 : QObject(), m_layer( layer ) 6 : QObject(), m_layer( layer )
8{ 7{
9} 8}
10 9
11FileTransferLayer::~FileTransferLayer() { 10FileTransferLayer::~FileTransferLayer() {
12} 11}
13 12
14void FileTransferLayer::sendFile(const QFile&) { 13void FileTransferLayer::sendFile(const QFile&) {
15 14
16} 15}
17 16
18void FileTransferLayer::sendFile(const QString&) { 17void FileTransferLayer::sendFile(const QString&) {
19} 18}
20 19
21IOLayer* FileTransferLayer::layer() { 20IOLayer* FileTransferLayer::layer() {
22 return m_layer; 21 return m_layer;
23} 22}
diff --git a/noncore/apps/opie-console/filetransfer.cpp b/noncore/apps/opie-console/filetransfer.cpp
index 5144941..347d6e0 100644
--- a/noncore/apps/opie-console/filetransfer.cpp
+++ b/noncore/apps/opie-console/filetransfer.cpp
@@ -1,199 +1,198 @@
1#include <stdio.h> 1#include <stdio.h>
2#include <stdlib.h> 2#include <stdlib.h>
3#include <errno.h> 3#include <errno.h>
4#include <fcntl.h> 4#include <fcntl.h>
5#include <unistd.h> 5#include <unistd.h>
6 6
7#include <qcstring.h>
8#include <qsocketnotifier.h> 7#include <qsocketnotifier.h>
9 8
10#include <opie/oprocess.h> 9#include <opie/oprocess.h>
11 10
12#include "procctl.h" 11#include "procctl.h"
13#include "filetransfer.h" 12#include "filetransfer.h"
14 13
15 14
16FileTransfer::FileTransfer( Type t, IOLayer* lay ) 15FileTransfer::FileTransfer( Type t, IOLayer* lay )
17 : FileTransferLayer( lay ), m_type( t ), m_pid ( 0 ) { 16 : FileTransferLayer( lay ), m_type( t ), m_pid ( 0 ) {
18 signal(SIGPIPE, SIG_IGN ); 17 signal(SIGPIPE, SIG_IGN );
19 18
20 m_pid = 0; 19 m_pid = 0;
21 m_not = 0l; 20 m_not = 0l;
22 m_proc = 0l; 21 m_proc = 0l;
23} 22}
24FileTransfer::~FileTransfer() { 23FileTransfer::~FileTransfer() {
25} 24}
26 25
27/** 26/**
28 * now we will send the file. 27 * now we will send the file.
29 * 28 *
30 * we request an fd. The IOLayer should be closed 29 * we request an fd. The IOLayer should be closed
31 * then we will setup a pipe for progress communication 30 * then we will setup a pipe for progress communication
32 * then we will dup2 the m_fd in the forked process 31 * then we will dup2 the m_fd in the forked process
33 * to do direct IO from and to the fd 32 * to do direct IO from and to the fd
34 */ 33 */
35void FileTransfer::sendFile( const QString& file ) { 34void FileTransfer::sendFile( const QString& file ) {
36 m_prog =-1; 35 m_prog =-1;
37 m_fd = layer()->rawIO(); 36 m_fd = layer()->rawIO();
38// 37//
39// m_fd = ::open("/dev/ttyS0", O_RDWR); 38// m_fd = ::open("/dev/ttyS0", O_RDWR);
40 39
41 m_file = file; 40 m_file = file;
42 if ( pipe( m_comm ) < 0 ) 41 if ( pipe( m_comm ) < 0 )
43 m_comm[0] = m_comm[1] = 0; 42 m_comm[0] = m_comm[1] = 0;
44 if ( pipe( m_info ) < 0 ) 43 if ( pipe( m_info ) < 0 )
45 m_info[0] = m_info[1] = 0; 44 m_info[0] = m_info[1] = 0;
46 45
47 46
48 m_pid = fork(); 47 m_pid = fork();
49 switch( m_pid ) { 48 switch( m_pid ) {
50 case -1: 49 case -1:
51 emit error( StartError, tr("Was not able to fork") ); 50 emit error( StartError, tr("Was not able to fork") );
52 slotExec(); 51 slotExec();
53 break; 52 break;
54 case 0:{ 53 case 0:{
55 setupChild(); 54 setupChild();
56 /* exec */ 55 /* exec */
57 char* verbose = "-vv"; 56 char* verbose = "-vv";
58 char* binray = "-b"; 57 char* binray = "-b";
59 58
60 59
61 char* typus; 60 char* typus;
62 switch(m_type ) { 61 switch(m_type ) {
63 default: 62 default:
64 case SZ: 63 case SZ:
65 typus = ""; 64 typus = "";
66 break; 65 break;
67 case SX: 66 case SX:
68 typus = "-X"; 67 typus = "-X";
69 break; 68 break;
70 case SY: 69 case SY:
71 typus = "--ymodem"; 70 typus = "--ymodem";
72 break; 71 break;
73 } 72 }
74 73
75 /* we should never return from here */ 74 /* we should never return from here */
76 execlp("sz", "sz", verbose, binray, file.latin1(), typus, NULL ); 75 execlp("sz", "sz", verbose, binray, file.latin1(), typus, NULL );
77 76
78 /* communication for error!*/ 77 /* communication for error!*/
79 char resultByte =1; 78 char resultByte =1;
80 if (m_info[1] ) 79 if (m_info[1] )
81 write(m_info[1], &resultByte, 1 ); 80 write(m_info[1], &resultByte, 1 );
82 _exit( -1 ); 81 _exit( -1 );
83 break; 82 break;
84 } 83 }
85 default:{ 84 default:{
86 if ( m_info[1] ) 85 if ( m_info[1] )
87 close( m_info[1] ); 86 close( m_info[1] );
88 if ( m_info[0] ) for (;;) { 87 if ( m_info[0] ) for (;;) {
89 char resultByte; int len; 88 char resultByte; int len;
90 len = read(m_info[0], &resultByte, 1 ); 89 len = read(m_info[0], &resultByte, 1 );
91 /* len == 1 start up failed */ 90 /* len == 1 start up failed */
92 if ( len == 1 ) { 91 if ( len == 1 ) {
93 emit error( StartError, tr("Could not start") ); 92 emit error( StartError, tr("Could not start") );
94 return; 93 return;
95 } 94 }
96 if ( len == -1 ) 95 if ( len == -1 )
97 if ( (errno == ECHILD ) || (errno == EINTR ) ) 96 if ( (errno == ECHILD ) || (errno == EINTR ) )
98 continue; 97 continue;
99 98
100 // len == 0 or something like this 99 // len == 0 or something like this
101 break; 100 break;
102 } 101 }
103 if ( m_info[0] ) 102 if ( m_info[0] )
104 close( m_info[0] ); 103 close( m_info[0] );
105 104
106 105
107 106
108 /* replace by QSocketNotifier!!! */ 107 /* replace by QSocketNotifier!!! */
109 m_not = new QSocketNotifier(m_comm[0], QSocketNotifier::Read ); 108 m_not = new QSocketNotifier(m_comm[0], QSocketNotifier::Read );
110 connect(m_not, SIGNAL(activated(int) ), 109 connect(m_not, SIGNAL(activated(int) ),
111 this, SLOT(slotRead() ) ); 110 this, SLOT(slotRead() ) );
112 if ( pipe(m_term) < 0 ) 111 if ( pipe(m_term) < 0 )
113 m_term[0] = m_term[1] = 0; 112 m_term[0] = m_term[1] = 0;
114 113
115 ProcCtl::self()->add(m_pid, m_term[1] ); 114 ProcCtl::self()->add(m_pid, m_term[1] );
116 m_proc = new QSocketNotifier(m_term[0], QSocketNotifier::Read ); 115 m_proc = new QSocketNotifier(m_term[0], QSocketNotifier::Read );
117 connect(m_proc, SIGNAL(activated(int) ), 116 connect(m_proc, SIGNAL(activated(int) ),
118 this, SLOT(slotExec() ) ); 117 this, SLOT(slotExec() ) );
119 118
120 } 119 }
121 break; 120 break;
122 } 121 }
123} 122}
124/* 123/*
125 * let's call the one with the filename 124 * let's call the one with the filename
126 */ 125 */
127void FileTransfer::sendFile( const QFile& file ) { 126void FileTransfer::sendFile( const QFile& file ) {
128 sendFile( file.name() ); 127 sendFile( file.name() );
129} 128}
130 129
131/* 130/*
132 * setting up communication 131 * setting up communication
133 * between parent child and ioLayer 132 * between parent child and ioLayer
134 */ 133 */
135void FileTransfer::setupChild() { 134void FileTransfer::setupChild() {
136 /* 135 /*
137 * we do not want to read from our 136 * we do not want to read from our
138 * information channel 137 * information channel
139 */ 138 */
140 if (m_info[0] ) 139 if (m_info[0] )
141 close(m_info[0] ); 140 close(m_info[0] );
142 /* 141 /*
143 * FD_CLOEXEC will close the 142 * FD_CLOEXEC will close the
144 * fd on successful exec 143 * fd on successful exec
145 */ 144 */
146 if (m_info[1] ) 145 if (m_info[1] )
147 fcntl(m_info[1], F_SETFD, FD_CLOEXEC ); 146 fcntl(m_info[1], F_SETFD, FD_CLOEXEC );
148 147
149 if (m_comm[0] ) 148 if (m_comm[0] )
150 close( m_comm[0] ); 149 close( m_comm[0] );
151 /* 150 /*
152 * now set the communication 151 * now set the communication
153 * m_fd STDIN_FILENO 152 * m_fd STDIN_FILENO
154 * STDOUT_FILENO 153 * STDOUT_FILENO
155 * STDERR_FILENO 154 * STDERR_FILENO
156 */ 155 */
157 dup2( m_fd, STDIN_FILENO ); 156 dup2( m_fd, STDIN_FILENO );
158 dup2( m_fd, STDOUT_FILENO ); 157 dup2( m_fd, STDOUT_FILENO );
159 dup2( m_comm[1], STDERR_FILENO ); 158 dup2( m_comm[1], STDERR_FILENO );
160} 159}
161 160
162/* 161/*
163 * read from the stderr of the child 162 * read from the stderr of the child
164 * process 163 * process
165 */ 164 */
166void FileTransfer::slotRead() { 165void FileTransfer::slotRead() {
167 QByteArray ar(4096); 166 QByteArray ar(4096);
168 int len = read(m_comm[0], ar.data(), 4096 ); 167 int len = read(m_comm[0], ar.data(), 4096 );
169 for (int i = 0; i < len; i++ ) { 168 for (int i = 0; i < len; i++ ) {
170 // printf("%c", ar[i] ); 169 // printf("%c", ar[i] );
171 } 170 }
172 ar.resize( len ); 171 ar.resize( len );
173 QString str( ar ); 172 QString str( ar );
174 QStringList lis = QStringList::split(' ', str ); 173 QStringList lis = QStringList::split(' ', str );
175 /* 174 /*
176 * Transfer finished.. either complete or incomplete 175 * Transfer finished.. either complete or incomplete
177 */ 176 */
178 if ( lis[0].simplifyWhiteSpace() == "Transfer" ) { 177 if ( lis[0].simplifyWhiteSpace() == "Transfer" ) {
179 return; 178 return;
180 } 179 }
181 /* 180 /*
182 * do progress reading 181 * do progress reading
183 */ 182 */
184 slotProgress( lis ); 183 slotProgress( lis );
185 184
186 185
187} 186}
188/* 187/*
189 * find the progress 188 * find the progress
190 */ 189 */
191void FileTransfer::slotProgress( const QStringList& list ) { 190void FileTransfer::slotProgress( const QStringList& list ) {
192 if ( m_type != SZ ) 191 if ( m_type != SZ )
193 return; 192 return;
194 bool complete = true; 193 bool complete = true;
195 int min, sec; 194 int min, sec;
196 int bps; 195 int bps;
197 unsigned long sent, total; 196 unsigned long sent, total;
198 197
199 min = sec = bps = -1; 198 min = sec = bps = -1;
diff --git a/noncore/apps/opie-console/function_keyboard.cpp b/noncore/apps/opie-console/function_keyboard.cpp
index 0191915..c232d89 100644
--- a/noncore/apps/opie-console/function_keyboard.cpp
+++ b/noncore/apps/opie-console/function_keyboard.cpp
@@ -1,205 +1,197 @@
1#include "function_keyboard.h" 1#include "function_keyboard.h"
2 2
3#include <qpe/resource.h>
4#include <qpe/qpeapplication.h>
5#include <qsizepolicy.h>
6#include <qevent.h>
7#include <qwindowsystem_qws.h>
8#include <qapplication.h>
9#include <qlayout.h> 3#include <qlayout.h>
10#include <qspinbox.h>
11#include <qlistbox.h> 4#include <qlistbox.h>
12#include <qlabel.h> 5#include <qlabel.h>
13#include <qcombobox.h>
14#include <qdir.h> 6#include <qdir.h>
15 7
16#define DEFAULT_ROWS 2 8#define DEFAULT_ROWS 2
17#define DEFAULT_COLS 12 9#define DEFAULT_COLS 12
18 10
19/* FunctionKeyboard {{{1 */ 11/* FunctionKeyboard {{{1 */
20 12
21FunctionKeyboard::FunctionKeyboard(QWidget *parent) : 13FunctionKeyboard::FunctionKeyboard(QWidget *parent) :
22 QFrame(parent), numRows(DEFAULT_ROWS), numCols(DEFAULT_COLS), 14 QFrame(parent), numRows(DEFAULT_ROWS), numCols(DEFAULT_COLS),
23 pressedRow(0), pressedCol(0) { 15 pressedRow(0), pressedCol(0) {
24 16
25 setSizePolicy(QSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed)); 17 setSizePolicy(QSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed));
26 18
27 /* 19 /*
28 * all the saving/loading is now done in a profile. downside is that you cant modify 20 * all the saving/loading is now done in a profile. downside is that you cant modify
29 * the keyboard for all profiles, but must do it on a profile-basis 21 * the keyboard for all profiles, but must do it on a profile-basis
30 * 22 *
31 23
32 Config conf("opie-console-keys"); 24 Config conf("opie-console-keys");
33 conf.setGroup("keys"); 25 conf.setGroup("keys");
34 for (uint r = 0; r < numRows; r++) 26 for (uint r = 0; r < numRows; r++)
35 for (uint c = 0; c < numCols; c++) { 27 for (uint c = 0; c < numCols; c++) {
36 28
37 QString handle = "r" + QString::number(r) + "c" + QString::number(c); 29 QString handle = "r" + QString::number(r) + "c" + QString::number(c);
38 QStringList value_list = conf.readListEntry( handle, '|'); 30 QStringList value_list = conf.readListEntry( handle, '|');
39 31
40 if (value_list.isEmpty()) continue; 32 if (value_list.isEmpty()) continue;
41 33
42 keys.insert( 34 keys.insert(
43 35
44 handle, 36 handle,
45 FKey (value_list[0], value_list[1], value_list[2].toUShort(), value_list[3].toUShort()) 37 FKey (value_list[0], value_list[1], value_list[2].toUShort(), value_list[3].toUShort())
46 ); 38 );
47 } 39 }
48 //qWarning("loaded %d keys", keys.count()); 40 //qWarning("loaded %d keys", keys.count());
49 */ 41 */
50 if (keys.isEmpty()) loadDefaults(); 42 if (keys.isEmpty()) loadDefaults();
51 43
52 44
53 45
54} 46}
55 47
56FunctionKeyboard::~FunctionKeyboard() {} 48FunctionKeyboard::~FunctionKeyboard() {}
57 49
58void FunctionKeyboard::changeRows(int r) { 50void FunctionKeyboard::changeRows(int r) {
59 51
60 numRows = r; 52 numRows = r;
61 53
62 // have to do this so the whole thing gets redrawn 54 // have to do this so the whole thing gets redrawn
63 hide(); show(); 55 hide(); show();
64} 56}
65void FunctionKeyboard::changeCols(int c) { 57void FunctionKeyboard::changeCols(int c) {
66 58
67 numCols = c; 59 numCols = c;
68 keyWidth = (double)width()/numCols; // have to reset this thing too 60 keyWidth = (double)width()/numCols; // have to reset this thing too
69 repaint(false); 61 repaint(false);
70} 62}
71void FunctionKeyboard::load (const Profile& prof) { 63void FunctionKeyboard::load (const Profile& prof) {
72 64
73 keys.clear(); 65 keys.clear();
74 66
75 numRows = prof.readNumEntry("keb_rows", 2); 67 numRows = prof.readNumEntry("keb_rows", 2);
76 numCols = prof.readNumEntry("keb_cols", 10); 68 numCols = prof.readNumEntry("keb_cols", 10);
77 keyWidth = (double)width()/numCols; // have to reset this thing too 69 keyWidth = (double)width()/numCols; // have to reset this thing too
78 70
79 /* load all the keys to the keyboard */ 71 /* load all the keys to the keyboard */
80 for (ushort i = 0; i <= numRows - 1; i++) 72 for (ushort i = 0; i <= numRows - 1; i++)
81 for (ushort j = 0; j <= numCols - 1; j++) { 73 for (ushort j = 0; j <= numCols - 1; j++) {
82 74
83 QString h = "r" + QString::number(i) + "c" + QString::number(j); 75 QString h = "r" + QString::number(i) + "c" + QString::number(j);
84 QString values = prof.readEntry("keb_" + h); 76 QString values = prof.readEntry("keb_" + h);
85 77
86 if (!values.isEmpty()) { 78 if (!values.isEmpty()) {
87 79
88 QStringList l = QStringList::split(QChar('|'), values, TRUE); 80 QStringList l = QStringList::split(QChar('|'), values, TRUE);
89 keys[h] = FKey(l[0], l[1], l[2].toInt(), l[3].toInt()); 81 keys[h] = FKey(l[0], l[1], l[2].toInt(), l[3].toInt());
90 82
91 // load pixmap if used 83 // load pixmap if used
92 if (!l[1].isEmpty()) { 84 if (!l[1].isEmpty()) {
93 85
94 keys[h].pix = new QPixmap( Resource::loadPixmap( "console/keys/" + l[1] ) ); 86 keys[h].pix = new QPixmap( Resource::loadPixmap( "console/keys/" + l[1] ) );
95 } 87 }
96 } 88 }
97 } 89 }
98 90
99 if (keys.isEmpty()) loadDefaults(); 91 if (keys.isEmpty()) loadDefaults();
100 92
101 hide(); 93 hide();
102 show(); 94 show();
103 95
104} 96}
105 97
106void FunctionKeyboard::paintEvent(QPaintEvent *e) { 98void FunctionKeyboard::paintEvent(QPaintEvent *e) {
107 99
108 QPainter p(this); 100 QPainter p(this);
109 p.setClipRect(e->rect()); 101 p.setClipRect(e->rect());
110 p.fillRect(0, 0, width(), height(), QColor(255,255,255)); 102 p.fillRect(0, 0, width(), height(), QColor(255,255,255));
111 103
112 p.setPen(QColor(0,0,0)); 104 p.setPen(QColor(0,0,0));
113 105
114 /* those decimals do count! becomes short if use plain int */ 106 /* those decimals do count! becomes short if use plain int */
115 for (double i = 0; i <= width(); i += keyWidth) { 107 for (double i = 0; i <= width(); i += keyWidth) {
116 108
117 p.drawLine((int)i, 0, (int)i, height()); 109 p.drawLine((int)i, 0, (int)i, height());
118 } 110 }
119 111
120 // sometimes the last line doesnt get drawn 112 // sometimes the last line doesnt get drawn
121 p.drawLine(width() -1, 0, width() -1, height()); 113 p.drawLine(width() -1, 0, width() -1, height());
122 114
123 for (int i = 0; i <= height(); i += keyHeight) { 115 for (int i = 0; i <= height(); i += keyHeight) {
124 116
125 p.drawLine(0, i, width(), i); 117 p.drawLine(0, i, width(), i);
126 } 118 }
127 119
128 for (uint r = 0; r < numRows; r++) { 120 for (uint r = 0; r < numRows; r++) {
129 for (uint c = 0; c < numCols; c++) { 121 for (uint c = 0; c < numCols; c++) {
130 122
131 QString handle = "r" + QString::number(r) + "c" + QString::number(c); 123 QString handle = "r" + QString::number(r) + "c" + QString::number(c);
132 if (keys.contains(handle)) { 124 if (keys.contains(handle)) {
133 125
134 if (keys[handle].pixFile.isEmpty()) 126 if (keys[handle].pixFile.isEmpty())
135 p.drawText( c * keyWidth + 1, r * keyHeight + 1, 127 p.drawText( c * keyWidth + 1, r * keyHeight + 1,
136 keyWidth, keyHeight, 128 keyWidth, keyHeight,
137 Qt::AlignHCenter | Qt::AlignVCenter, 129 Qt::AlignHCenter | Qt::AlignVCenter,
138 keys[handle].label 130 keys[handle].label
139 ); 131 );
140 else { 132 else {
141 133
142 ushort centerX = (ushort)(c *keyWidth) + (ushort)(keyWidth - keys[handle].pix->width()) / 2; 134 ushort centerX = (ushort)(c *keyWidth) + (ushort)(keyWidth - keys[handle].pix->width()) / 2;
143 ushort centerY = r * keyHeight + (keyHeight - keys[handle].pix->height()) / 2; 135 ushort centerY = r * keyHeight + (keyHeight - keys[handle].pix->height()) / 2;
144 p.drawPixmap(centerX, centerY, *keys[handle].pix); 136 p.drawPixmap(centerX, centerY, *keys[handle].pix);
145 } 137 }
146 } 138 }
147 } 139 }
148 } 140 }
149} 141}
150 142
151void FunctionKeyboard::paintKey(uint row, uint col) { 143void FunctionKeyboard::paintKey(uint row, uint col) {
152 144
153 QPainter p(this); 145 QPainter p(this);
154 146
155 p.fillRect(QRect(QPoint(col * keyWidth + 1, row * keyHeight + 1), 147 p.fillRect(QRect(QPoint(col * keyWidth + 1, row * keyHeight + 1),
156 QPoint((col + 1) * keyWidth - 1, row * keyHeight + keyHeight- 1)), 148 QPoint((col + 1) * keyWidth - 1, row * keyHeight + keyHeight- 1)),
157 (pressedRow != -1 && pressedCol != -1 ) ? QColor(97,119,155) : QColor(255,255,255)); 149 (pressedRow != -1 && pressedCol != -1 ) ? QColor(97,119,155) : QColor(255,255,255));
158 150
159 QString handle ("r" + QString::number(row) + "c" + QString::number(col)); 151 QString handle ("r" + QString::number(row) + "c" + QString::number(col));
160 if (keys[handle].pixFile.isEmpty()) 152 if (keys[handle].pixFile.isEmpty())
161 p.drawText( 153 p.drawText(
162 col * keyWidth + 1, row * keyHeight + 1, 154 col * keyWidth + 1, row * keyHeight + 1,
163 keyWidth, keyHeight, 155 keyWidth, keyHeight,
164 Qt::AlignHCenter | Qt::AlignVCenter, 156 Qt::AlignHCenter | Qt::AlignVCenter,
165 keys[handle].label 157 keys[handle].label
166 ); 158 );
167 else { 159 else {
168 160
169 ushort centerX = (ushort)(col *keyWidth) + (ushort)(keyWidth - keys[handle].pix->width()) / 2; 161 ushort centerX = (ushort)(col *keyWidth) + (ushort)(keyWidth - keys[handle].pix->width()) / 2;
170 ushort centerY = row * keyHeight + (keyHeight - keys[handle].pix->height()) / 2; 162 ushort centerY = row * keyHeight + (keyHeight - keys[handle].pix->height()) / 2;
171 p.drawPixmap(centerX, centerY, *keys[handle].pix); 163 p.drawPixmap(centerX, centerY, *keys[handle].pix);
172 } 164 }
173 165
174 if (col == numCols - 1) { 166 if (col == numCols - 1) {
175 167
176 // sometimes it doesnt draw the last line 168 // sometimes it doesnt draw the last line
177 169
178 p.drawLine((col+1) * keyWidth -1, row * keyHeight, 170 p.drawLine((col+1) * keyWidth -1, row * keyHeight,
179 (col+1) * keyWidth -1, (row + 1) * keyHeight 171 (col+1) * keyWidth -1, (row + 1) * keyHeight
180 ); 172 );
181 } 173 }
182 174
183} 175}
184 176
185void FunctionKeyboard::mousePressEvent(QMouseEvent *e) { 177void FunctionKeyboard::mousePressEvent(QMouseEvent *e) {
186 178
187 pressedRow = e->y() / keyHeight; 179 pressedRow = e->y() / keyHeight;
188 pressedCol = (int) (e->x() / keyWidth); 180 pressedCol = (int) (e->x() / keyWidth);
189 181
190 paintKey(pressedRow, pressedCol); 182 paintKey(pressedRow, pressedCol);
191 183
192 // emit that sucker! 184 // emit that sucker!
193 FKey k = keys["r" + QString::number(pressedRow) + "c" + QString::number(pressedCol)]; 185 FKey k = keys["r" + QString::number(pressedRow) + "c" + QString::number(pressedCol)];
194 emit keyPressed(k, pressedRow, pressedCol, 1); 186 emit keyPressed(k, pressedRow, pressedCol, 1);
195 187
196} 188}
197 189
198void FunctionKeyboard::mouseReleaseEvent(QMouseEvent *) { 190void FunctionKeyboard::mouseReleaseEvent(QMouseEvent *) {
199 191
200 if (pressedRow != -1 && pressedRow != -1) { 192 if (pressedRow != -1 && pressedRow != -1) {
201 193
202 int row = pressedRow; pressedRow = -1; 194 int row = pressedRow; pressedRow = -1;
203 int col = pressedCol; pressedCol = -1; 195 int col = pressedCol; pressedCol = -1;
204 paintKey(row, col); 196 paintKey(row, col);
205 197
diff --git a/noncore/apps/opie-console/iolayerbase.cpp b/noncore/apps/opie-console/iolayerbase.cpp
index ba7c86e..b434e66 100644
--- a/noncore/apps/opie-console/iolayerbase.cpp
+++ b/noncore/apps/opie-console/iolayerbase.cpp
@@ -1,199 +1,197 @@
1#include <qlabel.h> 1#include <qlabel.h>
2#include <qlayout.h> 2#include <qlayout.h>
3#include <qcombobox.h> 3#include <qcombobox.h>
4#include <qbuttongroup.h>
5#include <qhbuttongroup.h> 4#include <qhbuttongroup.h>
6#include <qradiobutton.h> 5#include <qradiobutton.h>
7#include <qhbox.h>
8 6
9#include "iolayerbase.h" 7#include "iolayerbase.h"
10 8
11namespace { 9namespace {
12 enum ParityIds { 10 enum ParityIds {
13 id_parity_none, 11 id_parity_none,
14 id_parity_odd, 12 id_parity_odd,
15 id_parity_even 13 id_parity_even
16 }; 14 };
17 15
18 enum FlowIds { 16 enum FlowIds {
19 id_flow_hw, 17 id_flow_hw,
20 id_flow_sw, 18 id_flow_sw,
21 id_flow_none, 19 id_flow_none,
22 }; 20 };
23 21
24 enum SpeedIds { 22 enum SpeedIds {
25 id_baud_115200, 23 id_baud_115200,
26 id_baud_57600, 24 id_baud_57600,
27 id_baud_38400, 25 id_baud_38400,
28 id_baud_19200, 26 id_baud_19200,
29 id_baud_9600 27 id_baud_9600
30 }; 28 };
31 29
32 enum DataIds { 30 enum DataIds {
33 id_data_5, 31 id_data_5,
34 id_data_6, 32 id_data_6,
35 id_data_7, 33 id_data_7,
36 id_data_8 34 id_data_8
37 }; 35 };
38 36
39 enum StopIds { 37 enum StopIds {
40 id_stop_1, 38 id_stop_1,
41 id_stop_1_5, 39 id_stop_1_5,
42 id_stop_2 40 id_stop_2
43 }; 41 };
44 42
45} 43}
46 44
47 45
48IOLayerBase::IOLayerBase( QWidget* par, const char* name ) 46IOLayerBase::IOLayerBase( QWidget* par, const char* name )
49 : QWidget( par, name ) 47 : QWidget( par, name )
50{ 48{
51 m_speedLabel = new QLabel(tr("Speed"), this ); 49 m_speedLabel = new QLabel(tr("Speed"), this );
52 m_speedBox = new QComboBox(this ); 50 m_speedBox = new QComboBox(this );
53 51
54 m_groupFlow = new QHButtonGroup(tr("Flow control"),this ); 52 m_groupFlow = new QHButtonGroup(tr("Flow control"),this );
55 m_flowHw = new QRadioButton(tr("Hardware"), m_groupFlow ); 53 m_flowHw = new QRadioButton(tr("Hardware"), m_groupFlow );
56 m_flowSw = new QRadioButton(tr("Software"), m_groupFlow ); 54 m_flowSw = new QRadioButton(tr("Software"), m_groupFlow );
57 m_flowNone = new QRadioButton( tr("None"), m_groupFlow ); 55 m_flowNone = new QRadioButton( tr("None"), m_groupFlow );
58 56
59 m_groupParity = new QHButtonGroup(tr("Parity"), this ); 57 m_groupParity = new QHButtonGroup(tr("Parity"), this );
60 m_parityNone = new QRadioButton(tr("None"), m_groupParity ); 58 m_parityNone = new QRadioButton(tr("None"), m_groupParity );
61 m_parityOdd = new QRadioButton(tr("Odd"), m_groupParity ); 59 m_parityOdd = new QRadioButton(tr("Odd"), m_groupParity );
62 m_parityEven = new QRadioButton(tr("Even"), m_groupParity ); 60 m_parityEven = new QRadioButton(tr("Even"), m_groupParity );
63 61
64 m_groupData = new QHButtonGroup(tr("Data Bits"), this); 62 m_groupData = new QHButtonGroup(tr("Data Bits"), this);
65 m_data5 = new QRadioButton(tr("5"), m_groupData ); 63 m_data5 = new QRadioButton(tr("5"), m_groupData );
66 m_data6 = new QRadioButton(tr("6"), m_groupData ); 64 m_data6 = new QRadioButton(tr("6"), m_groupData );
67 m_data7 = new QRadioButton(tr("7"), m_groupData ); 65 m_data7 = new QRadioButton(tr("7"), m_groupData );
68 m_data8 = new QRadioButton(tr("8"), m_groupData ); 66 m_data8 = new QRadioButton(tr("8"), m_groupData );
69 67
70 m_groupStop = new QHButtonGroup(tr("Stop Bits"), this ); 68 m_groupStop = new QHButtonGroup(tr("Stop Bits"), this );
71 m_stop1 = new QRadioButton(tr("1"), m_groupStop ); 69 m_stop1 = new QRadioButton(tr("1"), m_groupStop );
72 m_stop15 = new QRadioButton(tr("1.5"), m_groupStop ); 70 m_stop15 = new QRadioButton(tr("1.5"), m_groupStop );
73 m_stop2 = new QRadioButton(tr("2"), m_groupStop ); 71 m_stop2 = new QRadioButton(tr("2"), m_groupStop );
74 72
75 73
76 m_lroot = new QVBoxLayout( this ); 74 m_lroot = new QVBoxLayout( this );
77 m_lroot->add(m_speedLabel ); 75 m_lroot->add(m_speedLabel );
78 m_lroot->add(m_speedBox ); 76 m_lroot->add(m_speedBox );
79 m_lroot->add(m_groupFlow ); 77 m_lroot->add(m_groupFlow );
80 m_lroot->add(m_groupParity ); 78 m_lroot->add(m_groupParity );
81 m_lroot->add( m_groupData ); 79 m_lroot->add( m_groupData );
82 m_lroot->add( m_groupStop ); 80 m_lroot->add( m_groupStop );
83 m_lroot->addStretch(2); 81 m_lroot->addStretch(2);
84 82
85 // profiles 83 // profiles
86 m_speedBox->insertItem(tr("115200 baud"), id_baud_115200 ); 84 m_speedBox->insertItem(tr("115200 baud"), id_baud_115200 );
87 m_speedBox->insertItem(tr("57600 baud"), id_baud_57600 ); 85 m_speedBox->insertItem(tr("57600 baud"), id_baud_57600 );
88 m_speedBox->insertItem(tr("38400 baud"), id_baud_38400 ); 86 m_speedBox->insertItem(tr("38400 baud"), id_baud_38400 );
89 m_speedBox->insertItem(tr("19200 baud"), id_baud_19200 ); 87 m_speedBox->insertItem(tr("19200 baud"), id_baud_19200 );
90 m_speedBox->insertItem(tr("9600 baud"), id_baud_9600 ); 88 m_speedBox->insertItem(tr("9600 baud"), id_baud_9600 );
91 89
92}; 90};
93IOLayerBase::~IOLayerBase() { 91IOLayerBase::~IOLayerBase() {
94 92
95} 93}
96void IOLayerBase::setFlow( Flow flo ) { 94void IOLayerBase::setFlow( Flow flo ) {
97 switch ( flo ) { 95 switch ( flo ) {
98 case Software: 96 case Software:
99 m_flowSw->setChecked( true ); 97 m_flowSw->setChecked( true );
100 break; 98 break;
101 case Hardware: 99 case Hardware:
102 m_flowHw->setChecked( true ); 100 m_flowHw->setChecked( true );
103 break; 101 break;
104 case None: 102 case None:
105 m_flowNone->setChecked( true ); 103 m_flowNone->setChecked( true );
106 break; 104 break;
107 } 105 }
108} 106}
109 107
110void IOLayerBase::setParity( Parity par ) { 108void IOLayerBase::setParity( Parity par ) {
111 switch( par ) { 109 switch( par ) {
112 case NonePar: 110 case NonePar:
113 m_parityNone->setChecked( true ); 111 m_parityNone->setChecked( true );
114 break; 112 break;
115 case Odd: 113 case Odd:
116 m_parityOdd->setChecked( true ); 114 m_parityOdd->setChecked( true );
117 break; 115 break;
118 case Even: 116 case Even:
119 m_parityEven->setChecked( true ); 117 m_parityEven->setChecked( true );
120 break; 118 break;
121 } 119 }
122} 120}
123void IOLayerBase::setSpeed( Speed sp ) { 121void IOLayerBase::setSpeed( Speed sp ) {
124 int index = -1; 122 int index = -1;
125 switch( sp ) { 123 switch( sp ) {
126 case Baud_115200: 124 case Baud_115200:
127 index = id_baud_115200; 125 index = id_baud_115200;
128 break; 126 break;
129 case Baud_57600: 127 case Baud_57600:
130 index = id_baud_57600; 128 index = id_baud_57600;
131 break; 129 break;
132 case Baud_38400: 130 case Baud_38400:
133 index = id_baud_38400; 131 index = id_baud_38400;
134 break; 132 break;
135 case Baud_19200: 133 case Baud_19200:
136 index = id_baud_19200; 134 index = id_baud_19200;
137 break; 135 break;
138 default: 136 default:
139 case Baud_9600: 137 case Baud_9600:
140 index = id_baud_9600; 138 index = id_baud_9600;
141 break; 139 break;
142 } 140 }
143 m_speedBox->setCurrentItem(index ); 141 m_speedBox->setCurrentItem(index );
144} 142}
145 143
146void IOLayerBase::setData( Data data ) { 144void IOLayerBase::setData( Data data ) {
147 switch( data ) { 145 switch( data ) {
148 case Data_Five: 146 case Data_Five:
149 m_data5->setChecked( true ); 147 m_data5->setChecked( true );
150 break; 148 break;
151 case Data_Six: 149 case Data_Six:
152 m_data6->setChecked( true ); 150 m_data6->setChecked( true );
153 break; 151 break;
154 case Data_Seven: 152 case Data_Seven:
155 m_data7->setChecked( true ); 153 m_data7->setChecked( true );
156 break; 154 break;
157 default: 155 default:
158 m_data8->setChecked( true ); 156 m_data8->setChecked( true );
159 break; 157 break;
160 } 158 }
161} 159}
162 160
163 161
164void IOLayerBase::setStop( Stop stop ) { 162void IOLayerBase::setStop( Stop stop ) {
165 switch( stop ) { 163 switch( stop ) {
166 case Stop_Two: 164 case Stop_Two:
167 m_stop2->setChecked( true ); 165 m_stop2->setChecked( true );
168 break; 166 break;
169 case Stop_OnePointFive: 167 case Stop_OnePointFive:
170 m_stop15->setChecked( true ); 168 m_stop15->setChecked( true );
171 break; 169 break;
172 default: 170 default:
173 m_stop1->setChecked( true ); 171 m_stop1->setChecked( true );
174 break; 172 break;
175 } 173 }
176} 174}
177 175
178 176
179 177
180IOLayerBase::Flow IOLayerBase::flow()const { 178IOLayerBase::Flow IOLayerBase::flow()const {
181 if (m_flowHw->isChecked() ) { 179 if (m_flowHw->isChecked() ) {
182 return Hardware; 180 return Hardware;
183 }else if( m_flowSw->isChecked() ) { 181 }else if( m_flowSw->isChecked() ) {
184 return Software; 182 return Software;
185 } else { 183 } else {
186 return None; 184 return None;
187 } 185 }
188} 186}
189IOLayerBase::Parity IOLayerBase::parity()const { 187IOLayerBase::Parity IOLayerBase::parity()const {
190 if ( m_parityOdd->isChecked() ) { 188 if ( m_parityOdd->isChecked() ) {
191 return Odd; 189 return Odd;
192 } else if ( m_parityEven->isChecked() ) { 190 } else if ( m_parityEven->isChecked() ) {
193 return Even; 191 return Even;
194 } else { 192 } else {
195 return NonePar; 193 return NonePar;
196 } 194 }
197 195
198} 196}
199IOLayerBase::Speed IOLayerBase::speed()const{ 197IOLayerBase::Speed IOLayerBase::speed()const{
diff --git a/noncore/apps/opie-console/main.cpp b/noncore/apps/opie-console/main.cpp
index 228db57..dfb2f83 100644
--- a/noncore/apps/opie-console/main.cpp
+++ b/noncore/apps/opie-console/main.cpp
@@ -1,111 +1,110 @@
1#include <sys/types.h> 1#include <sys/types.h>
2 2
3#include <stdio.h> 3#include <stdio.h>
4#include <stdlib.h> 4#include <stdlib.h>
5#include <signal.h> 5#include <signal.h>
6 6
7#include <qfile.h>
8 7
9#include <qpe/qpeapplication.h> 8#include <qpe/qpeapplication.h>
10 9
11#include "mainwindow.h" 10#include "mainwindow.h"
12 11
13//#define FSCKED_DISTRIBUTION 1 12//#define FSCKED_DISTRIBUTION 1
14#ifdef FSCKED_DISTRIBUTION 13#ifdef FSCKED_DISTRIBUTION
15/* 14/*
16 * The Zaurus rom 15 * The Zaurus rom
17 */ 16 */
18class FixIt { 17class FixIt {
19public: 18public:
20 FixIt(); 19 FixIt();
21 ~FixIt(); 20 ~FixIt();
22 void fixIt(); 21 void fixIt();
23 /* no real interested in implementing it */ 22 /* no real interested in implementing it */
24 void breakIt() { 23 void breakIt() {
25 24
26 }; 25 };
27 char* m_file; 26 char* m_file;
28}; 27};
29 28
30FixIt::FixIt() { 29FixIt::FixIt() {
31 /* the new inittab */ 30 /* the new inittab */
32 m_file = "#\n# /etc/inittab" 31 m_file = "#\n# /etc/inittab"
33"#" 32"#"
34"" 33""
35"# 0 - halt (Do NOT set initdefault to this)" 34"# 0 - halt (Do NOT set initdefault to this)"
36"# 1 - Single user mode" 35"# 1 - Single user mode"
37"# 2 - Multiuser, without NFS (The same as 3, if you do not have networking)" 36"# 2 - Multiuser, without NFS (The same as 3, if you do not have networking)"
38"# 3 - Full multiuser mode" 37"# 3 - Full multiuser mode"
39"# 4 - JavaVM(Intent) developer mode" 38"# 4 - JavaVM(Intent) developer mode"
40"# 5 - JavaVM(Intent)" 39"# 5 - JavaVM(Intent)"
41"# 6 - reboot (Do NOT set initdefault to this)" 40"# 6 - reboot (Do NOT set initdefault to this)"
42"#" 41"#"
43"id:5:initdefault:" 42"id:5:initdefault:"
44"" 43""
45"# Specify things to do when starting" 44"# Specify things to do when starting"
46"si::sysinit:/etc/rc.d/rc.sysinit" 45"si::sysinit:/etc/rc.d/rc.sysinit"
47"" 46""
48"l0:0:wait:/root/etc/rc.d/rc 0" 47"l0:0:wait:/root/etc/rc.d/rc 0"
49"l1:1:wait:/etc/rc.d/rc 1" 48"l1:1:wait:/etc/rc.d/rc 1"
50"l2:2:wait:/etc/rc.d/rc 2" 49"l2:2:wait:/etc/rc.d/rc 2"
51"l3:3:wait:/etc/rc.d/rc 3" 50"l3:3:wait:/etc/rc.d/rc 3"
52"l4:4:wait:/etc/rc.d/rc 4" 51"l4:4:wait:/etc/rc.d/rc 4"
53"l5:5:wait:/etc/rc.d/rc 5" 52"l5:5:wait:/etc/rc.d/rc 5"
54"l6:6:wait:/root/etc/rc.d/rc 6" 53"l6:6:wait:/root/etc/rc.d/rc 6"
55"" 54""
56"# Specify things to do before rebooting" 55"# Specify things to do before rebooting"
57"um::ctrlaltdel:/bin/umount -a -r > /dev/null 2>&1" 56"um::ctrlaltdel:/bin/umount -a -r > /dev/null 2>&1"
58"sw::ctrlaltdel:/sbin/swapoff -a > /dev/null 2>&1" 57"sw::ctrlaltdel:/sbin/swapoff -a > /dev/null 2>&1"
59"" 58""
60"# Specify program to run on ttyS0" 59"# Specify program to run on ttyS0"
61"s0:24:respawn:/sbin/getty 9600 ttyS0" 60"s0:24:respawn:/sbin/getty 9600 ttyS0"
62"#pd:5:respawn:/etc/sync/serialctl" 61"#pd:5:respawn:/etc/sync/serialctl"
63"" 62""
64"# Specify program to run on tty1" 63"# Specify program to run on tty1"
65"1:2:respawn:/sbin/getty 9600 tty1" 64"1:2:respawn:/sbin/getty 9600 tty1"
66"ln:345:respawn:survive -l 6 /sbin/launch" 65"ln:345:respawn:survive -l 6 /sbin/launch"
67"#qt:5:respawn:/sbin/qt" 66"#qt:5:respawn:/sbin/qt"
68"" 67""
69"# collie sp." 68"# collie sp."
70"sy::respawn:/sbin/shsync\n"; 69"sy::respawn:/sbin/shsync\n";
71} 70}
72FixIt::~FixIt() { 71FixIt::~FixIt() {
73} 72}
74/* 73/*
75 * the retail Zaurus is broken in many ways 74 * the retail Zaurus is broken in many ways
76 * one is that pppd is listening on our port... 75 * one is that pppd is listening on our port...
77 * we've to stop it from that and then do kill(SIGHUP,1); 76 * we've to stop it from that and then do kill(SIGHUP,1);
78 */ 77 */
79void FixIt::fixIt() { 78void FixIt::fixIt() {
80 ::rename("/etc/inittab", QPEApplication::qpeDir() + "/etc/inittab" ); 79 ::rename("/etc/inittab", QPEApplication::qpeDir() + "/etc/inittab" );
81 QFile file( "/etc/inittab" ); 80 QFile file( "/etc/inittab" );
82 if ( file.open(IO_WriteOnly | IO_Raw ) ) { 81 if ( file.open(IO_WriteOnly | IO_Raw ) ) {
83 file.writeBlock(m_file,strlen(m_file) ); 82 file.writeBlock(m_file,strlen(m_file) );
84 } 83 }
85 file.close(); 84 file.close();
86 ::kill( SIGHUP, 1 ); 85 ::kill( SIGHUP, 1 );
87} 86}
88#endif 87#endif
89 88
90int main(int argc, char **argv) { 89int main(int argc, char **argv) {
91// too bad this gives us trouble the taskbar... argv[0]="embeddedkonsole"; 90// too bad this gives us trouble the taskbar... argv[0]="embeddedkonsole";
92 QPEApplication app( argc, argv ); 91 QPEApplication app( argc, argv );
93 92
94#ifdef FSCKED_DISTRIBUTION 93#ifdef FSCKED_DISTRIBUTION
95 qWarning("fscked"); 94 qWarning("fscked");
96 FixIt it; 95 FixIt it;
97 it.fixIt(); 96 it.fixIt();
98#endif 97#endif
99 98
100 MainWindow mw; 99 MainWindow mw;
101 mw.setCaption(QObject::tr("Opie Console") ); 100 mw.setCaption(QObject::tr("Opie Console") );
102 app.showMainWidget( &mw ); 101 app.showMainWidget( &mw );
103 102
104 int ap = app.exec(); 103 int ap = app.exec();
105 104
106#ifdef FSCKED_DISTRIBUTION 105#ifdef FSCKED_DISTRIBUTION
107 /* should add a signal handler too */ 106 /* should add a signal handler too */
108 it.breakIt(); 107 it.breakIt();
109#endif 108#endif
110 return ap; 109 return ap;
111} 110}
diff --git a/noncore/apps/opie-console/mainwindow.cpp b/noncore/apps/opie-console/mainwindow.cpp
index 3c9603c..2673335 100644
--- a/noncore/apps/opie-console/mainwindow.cpp
+++ b/noncore/apps/opie-console/mainwindow.cpp
@@ -1,219 +1,209 @@
1#include <assert.h> 1#include <assert.h>
2 2
3#include <qaction.h> 3#include <qaction.h>
4#include <qmenubar.h> 4#include <qmenubar.h>
5#include <qlabel.h>
6#include <qpopupmenu.h>
7#include <qtoolbar.h> 5#include <qtoolbar.h>
8#include <qmessagebox.h> 6#include <qmessagebox.h>
9#include <qpushbutton.h>
10#include <qwhatsthis.h> 7#include <qwhatsthis.h>
11#include <qfileinfo.h> 8#include <qfileinfo.h>
12#include <qtextstream.h>
13 9
14#include <qpe/resource.h>
15#include <qpe/qpeapplication.h>
16#include <qpe/filemanager.h> 10#include <qpe/filemanager.h>
17#include <qpe/mimetype.h>
18 11
19#include <opie/ofiledialog.h> 12#include <opie/ofiledialog.h>
20 13
21#include "TEmulation.h" 14#include "TEmulation.h"
22#include "keytrans.h"
23#include "profileeditordialog.h" 15#include "profileeditordialog.h"
24#include "configdialog.h" 16#include "configdialog.h"
25#include "default.h" 17#include "default.h"
26#include "metafactory.h"
27#include "profile.h"
28#include "profilemanager.h" 18#include "profilemanager.h"
29#include "mainwindow.h" 19#include "mainwindow.h"
30#include "tabwidget.h" 20#include "tabwidget.h"
31#include "transferdialog.h" 21#include "transferdialog.h"
32#include "function_keyboard.h" 22#include "function_keyboard.h"
33#include "emulation_handler.h" 23#include "emulation_handler.h"
34#include "script.h" 24#include "script.h"
35 25
36 26
37MainWindow::MainWindow(QWidget *parent, const char *name, WFlags) : QMainWindow(parent, name, WStyle_ContextHelp) { 27MainWindow::MainWindow(QWidget *parent, const char *name, WFlags) : QMainWindow(parent, name, WStyle_ContextHelp) {
38 KeyTrans::loadAll(); 28 KeyTrans::loadAll();
39 for (int i = 0; i < KeyTrans::count(); i++ ) { 29 for (int i = 0; i < KeyTrans::count(); i++ ) {
40 KeyTrans* s = KeyTrans::find(i ); 30 KeyTrans* s = KeyTrans::find(i );
41 assert( s ); 31 assert( s );
42 } 32 }
43 m_factory = new MetaFactory(); 33 m_factory = new MetaFactory();
44 Default def(m_factory); 34 Default def(m_factory);
45 m_sessions.setAutoDelete( TRUE ); 35 m_sessions.setAutoDelete( TRUE );
46 m_curSession = 0; 36 m_curSession = 0;
47 m_manager = new ProfileManager( m_factory ); 37 m_manager = new ProfileManager( m_factory );
48 m_manager->load(); 38 m_manager->load();
49 m_scriptsData.setAutoDelete(TRUE); 39 m_scriptsData.setAutoDelete(TRUE);
50 40
51 initUI(); 41 initUI();
52 populateProfiles(); 42 populateProfiles();
53 populateScripts(); 43 populateScripts();
54} 44}
55 45
56void MainWindow::initUI() { 46void MainWindow::initUI() {
57 47
58 setToolBarsMovable( FALSE ); 48 setToolBarsMovable( FALSE );
59 49
60 /* tool bar for the menu */ 50 /* tool bar for the menu */
61 m_tool = new QToolBar( this ); 51 m_tool = new QToolBar( this );
62 m_tool->setHorizontalStretchable( TRUE ); 52 m_tool->setHorizontalStretchable( TRUE );
63 53
64 m_bar = new QMenuBar( m_tool ); 54 m_bar = new QMenuBar( m_tool );
65 m_console = new QPopupMenu( this ); 55 m_console = new QPopupMenu( this );
66 m_scripts = new QPopupMenu( this ); 56 m_scripts = new QPopupMenu( this );
67 m_sessionsPop= new QPopupMenu( this ); 57 m_sessionsPop= new QPopupMenu( this );
68 m_scriptsPop = new QPopupMenu( this ); 58 m_scriptsPop = new QPopupMenu( this );
69 59
70 /* add a toolbar for icons */ 60 /* add a toolbar for icons */
71 m_icons = new QToolBar(this); 61 m_icons = new QToolBar(this);
72 62
73 /* 63 /*
74 * the settings action 64 * the settings action
75 */ 65 */
76 m_setProfiles = new QAction(tr("Configure Profiles"), 66 m_setProfiles = new QAction(tr("Configure Profiles"),
77 Resource::loadPixmap( "SettingsIcon" ), 67 Resource::loadPixmap( "SettingsIcon" ),
78 QString::null, 0, this, 0); 68 QString::null, 0, this, 0);
79 m_setProfiles->addTo( m_console ); 69 m_setProfiles->addTo( m_console );
80 connect( m_setProfiles, SIGNAL(activated() ), 70 connect( m_setProfiles, SIGNAL(activated() ),
81 this, SLOT(slotConfigure() ) ); 71 this, SLOT(slotConfigure() ) );
82 72
83 m_console->insertSeparator(); 73 m_console->insertSeparator();
84 /* 74 /*
85 * new Action for new sessions 75 * new Action for new sessions
86 */ 76 */
87 QAction* newCon = new QAction(tr("New Profile"), 77 QAction* newCon = new QAction(tr("New Profile"),
88 Resource::loadPixmap( "new" ), 78 Resource::loadPixmap( "new" ),
89 QString::null, 0, this, 0); 79 QString::null, 0, this, 0);
90 newCon->addTo( m_console ); 80 newCon->addTo( m_console );
91 connect( newCon, SIGNAL(activated() ), 81 connect( newCon, SIGNAL(activated() ),
92 this, SLOT(slotNew() ) ); 82 this, SLOT(slotNew() ) );
93 83
94 m_console->insertSeparator(); 84 m_console->insertSeparator();
95 85
96 QAction *saveCon = new QAction( tr("Save Profile" ), 86 QAction *saveCon = new QAction( tr("Save Profile" ),
97 Resource::loadPixmap( "save" ), QString::null, 87 Resource::loadPixmap( "save" ), QString::null,
98 0, this, 0 ); 88 0, this, 0 );
99 saveCon->addTo( m_console ); 89 saveCon->addTo( m_console );
100 connect( saveCon, SIGNAL(activated() ), 90 connect( saveCon, SIGNAL(activated() ),
101 this, SLOT(slotSaveSession() ) ); 91 this, SLOT(slotSaveSession() ) );
102 m_console->insertSeparator(); 92 m_console->insertSeparator();
103 93
104 /* 94 /*
105 * connect action 95 * connect action
106 */ 96 */
107 m_connect = new QAction( tr("Connect"), Resource::loadPixmap("console/connected"), 97 m_connect = new QAction( tr("Connect"), Resource::loadPixmap("console/connected"),
108 QString::null, 0, this, 0 ); 98 QString::null, 0, this, 0 );
109 m_connect->addTo( m_console ); 99 m_connect->addTo( m_console );
110 connect(m_connect, SIGNAL(activated() ), 100 connect(m_connect, SIGNAL(activated() ),
111 this, SLOT(slotConnect() ) ); 101 this, SLOT(slotConnect() ) );
112 102
113 /* 103 /*
114 * disconnect action 104 * disconnect action
115 */ 105 */
116 m_disconnect = new QAction( tr("Disconnect"), Resource::loadPixmap("console/notconnected"), 106 m_disconnect = new QAction( tr("Disconnect"), Resource::loadPixmap("console/notconnected"),
117 QString::null, 0, this, 0 ); 107 QString::null, 0, this, 0 );
118 m_disconnect->addTo( m_console ); 108 m_disconnect->addTo( m_console );
119 connect(m_disconnect, SIGNAL(activated() ), 109 connect(m_disconnect, SIGNAL(activated() ),
120 this, SLOT(slotDisconnect() ) ); 110 this, SLOT(slotDisconnect() ) );
121 111
122 m_console->insertSeparator(); 112 m_console->insertSeparator();
123 113
124 114
125 m_quickLaunch = new QAction( tr("QuickLaunch"), Resource::loadPixmap("console/konsole_mini"), QString::null, 0, this, 0 ); 115 m_quickLaunch = new QAction( tr("QuickLaunch"), Resource::loadPixmap("console/konsole_mini"), QString::null, 0, this, 0 );
126 m_quickLaunch->addTo( m_icons ); 116 m_quickLaunch->addTo( m_icons );
127 connect( m_quickLaunch, SIGNAL( activated() ), 117 connect( m_quickLaunch, SIGNAL( activated() ),
128 this, SLOT( slotQuickLaunch() ) ); 118 this, SLOT( slotQuickLaunch() ) );
129 119
130 QWhatsThis::add( m_icons, tr( "The shell button launches the \"default\" profile. If there is none default values are taken" ) ); 120 QWhatsThis::add( m_icons, tr( "The shell button launches the \"default\" profile. If there is none default values are taken" ) );
131 121
132 m_transfer = new QAction( tr("Transfer file..."), Resource::loadPixmap("pass") , QString::null, 122 m_transfer = new QAction( tr("Transfer file..."), Resource::loadPixmap("pass") , QString::null,
133 0, this, 0 ); 123 0, this, 0 );
134 m_transfer->addTo( m_console ); 124 m_transfer->addTo( m_console );
135 connect(m_transfer, SIGNAL(activated() ), 125 connect(m_transfer, SIGNAL(activated() ),
136 this, SLOT(slotTransfer() ) ); 126 this, SLOT(slotTransfer() ) );
137 127
138 128
139 129
140 /* 130 /*
141 * immediate change of line wrap policy 131 * immediate change of line wrap policy
142 */ 132 */
143 m_isWrapped = false; 133 m_isWrapped = false;
144 m_wrap = new QAction( tr("Line wrap"), Resource::loadPixmap( "linewrap" ), QString::null, 0, this, 0 ); 134 m_wrap = new QAction( tr("Line wrap"), Resource::loadPixmap( "linewrap" ), QString::null, 0, this, 0 );
145 m_wrap->addTo( m_console ); 135 m_wrap->addTo( m_console );
146 connect( m_wrap, SIGNAL( activated() ), SLOT( slotWrap() ) ); 136 connect( m_wrap, SIGNAL( activated() ), SLOT( slotWrap() ) );
147 137
148 /* 138 /*
149 * fullscreen 139 * fullscreen
150 */ 140 */
151 m_isFullscreen = false; 141 m_isFullscreen = false;
152 142
153 m_fullscreen = new QAction( tr("Full screen"), Resource::loadPixmap( "fullscreen" ) 143 m_fullscreen = new QAction( tr("Full screen"), Resource::loadPixmap( "fullscreen" )
154 , QString::null, 0, this, 0); 144 , QString::null, 0, this, 0);
155 m_fullscreen->addTo( m_console ); 145 m_fullscreen->addTo( m_console );
156 connect( m_fullscreen, SIGNAL( activated() ), 146 connect( m_fullscreen, SIGNAL( activated() ),
157 this, SLOT( slotFullscreen() ) ); 147 this, SLOT( slotFullscreen() ) );
158 148
159 m_console->insertSeparator(); 149 m_console->insertSeparator();
160 150
161 QAction *a = new QAction(); 151 QAction *a = new QAction();
162 a->setText( tr("Save history") ); 152 a->setText( tr("Save history") );
163 a->addTo( m_console ); 153 a->addTo( m_console );
164 connect(a, SIGNAL(activated() ), 154 connect(a, SIGNAL(activated() ),
165 this, SLOT(slotSaveHistory() ) ); 155 this, SLOT(slotSaveHistory() ) );
166 /* 156 /*
167 * terminate action 157 * terminate action
168 */ 158 */
169 m_terminate = new QAction(); 159 m_terminate = new QAction();
170 m_terminate->setText( tr("Terminate") ); 160 m_terminate->setText( tr("Terminate") );
171 m_terminate->addTo( m_console ); 161 m_terminate->addTo( m_console );
172 connect(m_terminate, SIGNAL(activated() ), 162 connect(m_terminate, SIGNAL(activated() ),
173 this, SLOT(slotTerminate() ) ); 163 this, SLOT(slotTerminate() ) );
174 164
175 m_closewindow = new QAction(); 165 m_closewindow = new QAction();
176 m_closewindow->setText( tr("Close Window") ); 166 m_closewindow->setText( tr("Close Window") );
177 m_closewindow->addTo( m_console ); 167 m_closewindow->addTo( m_console );
178 connect( m_closewindow, SIGNAL(activated() ), 168 connect( m_closewindow, SIGNAL(activated() ),
179 this, SLOT(slotClose() ) ); 169 this, SLOT(slotClose() ) );
180 170
181 171
182 /* 172 /*
183 * script actions 173 * script actions
184 */ 174 */
185 m_runScript_id = m_scripts->insertItem(tr("Run Script"), m_scriptsPop, -1, 0); 175 m_runScript_id = m_scripts->insertItem(tr("Run Script"), m_scriptsPop, -1, 0);
186 connect(m_scriptsPop, SIGNAL(activated(int)), this, SLOT(slotRunScript(int))); 176 connect(m_scriptsPop, SIGNAL(activated(int)), this, SLOT(slotRunScript(int)));
187 177
188 m_recordScript = new QAction(tr("Record Script"), QString::null, 0, this, 0); 178 m_recordScript = new QAction(tr("Record Script"), QString::null, 0, this, 0);
189 m_recordScript->addTo(m_scripts); 179 m_recordScript->addTo(m_scripts);
190 connect(m_recordScript, SIGNAL(activated()), this, SLOT(slotRecordScript())); 180 connect(m_recordScript, SIGNAL(activated()), this, SLOT(slotRecordScript()));
191 181
192 m_saveScript = new QAction(tr("Save Script"), QString::null, 0, this, 0); 182 m_saveScript = new QAction(tr("Save Script"), QString::null, 0, this, 0);
193 m_saveScript->addTo(m_scripts); 183 m_saveScript->addTo(m_scripts);
194 connect(m_saveScript, SIGNAL(activated()), this, SLOT(slotSaveScript())); 184 connect(m_saveScript, SIGNAL(activated()), this, SLOT(slotSaveScript()));
195 185
196 186
197 /* 187 /*
198 * action that open/closes the keyboard 188 * action that open/closes the keyboard
199 */ 189 */
200 m_openKeys = new QAction (tr("Open Keyboard..."), 190 m_openKeys = new QAction (tr("Open Keyboard..."),
201 Resource::loadPixmap( "console/keys/keyboard_icon" ), 191 Resource::loadPixmap( "console/keys/keyboard_icon" ),
202 QString::null, 0, this, 0); 192 QString::null, 0, this, 0);
203 m_openKeys->setToggleAction(true); 193 m_openKeys->setToggleAction(true);
204 connect (m_openKeys, SIGNAL(toggled(bool)), this, SLOT(slotOpenKeb(bool))); 194 connect (m_openKeys, SIGNAL(toggled(bool)), this, SLOT(slotOpenKeb(bool)));
205 195
206 /* insert the submenu */ 196 /* insert the submenu */
207 m_console->insertItem(tr("New from Profile"), m_sessionsPop, 197 m_console->insertItem(tr("New from Profile"), m_sessionsPop,
208 -1, 0); 198 -1, 0);
209 199
210 /* insert the connection menu */ 200 /* insert the connection menu */
211 m_bar->insertItem( tr("Connection"), m_console ); 201 m_bar->insertItem( tr("Connection"), m_console );
212 202
213 /* the scripts menu */ 203 /* the scripts menu */
214 m_bar->insertItem( tr("Scripts"), m_scripts ); 204 m_bar->insertItem( tr("Scripts"), m_scripts );
215 205
216 /* and the keyboard */ 206 /* and the keyboard */
217 m_keyBar = new QToolBar(this); 207 m_keyBar = new QToolBar(this);
218 addToolBar( m_keyBar, "Keyboard", QMainWindow::Top, TRUE ); 208 addToolBar( m_keyBar, "Keyboard", QMainWindow::Top, TRUE );
219 m_keyBar->setHorizontalStretchable( TRUE ); 209 m_keyBar->setHorizontalStretchable( TRUE );
diff --git a/noncore/apps/opie-console/metafactory.cpp b/noncore/apps/opie-console/metafactory.cpp
index 24928e7..32e93ce 100644
--- a/noncore/apps/opie-console/metafactory.cpp
+++ b/noncore/apps/opie-console/metafactory.cpp
@@ -1,165 +1,164 @@
1#include <qpe/config.h>
2#include "metafactory.h" 1#include "metafactory.h"
3 2
4MetaFactory::MetaFactory() { 3MetaFactory::MetaFactory() {
5} 4}
6MetaFactory::~MetaFactory() { 5MetaFactory::~MetaFactory() {
7 6
8} 7}
9void MetaFactory::addConnectionWidgetFactory( const QCString& name, 8void MetaFactory::addConnectionWidgetFactory( const QCString& name,
10 const QString& str, 9 const QString& str,
11 configWidget wid) { 10 configWidget wid) {
12 m_strings.insert( str, name ); 11 m_strings.insert( str, name );
13 m_conFact.insert( str, wid ); 12 m_conFact.insert( str, wid );
14} 13}
15void MetaFactory::addTerminalWidgetFactory( const QCString& name, 14void MetaFactory::addTerminalWidgetFactory( const QCString& name,
16 const QString& str, 15 const QString& str,
17 configWidget wid ) { 16 configWidget wid ) {
18 m_strings.insert( str, name ); 17 m_strings.insert( str, name );
19 m_termFact.insert( str, wid ); 18 m_termFact.insert( str, wid );
20} 19}
21void MetaFactory::addKeyboardWidgetFactory( const QCString& name, 20void MetaFactory::addKeyboardWidgetFactory( const QCString& name,
22 const QString & str, 21 const QString & str,
23 configWidget wid) { 22 configWidget wid) {
24 m_strings.insert( str, name ); 23 m_strings.insert( str, name );
25 m_keyFact.insert( str, wid ); 24 m_keyFact.insert( str, wid );
26 25
27} 26}
28void MetaFactory::addIOLayerFactory( const QCString& name, 27void MetaFactory::addIOLayerFactory( const QCString& name,
29 const QString& str, 28 const QString& str,
30 iolayer lay) { 29 iolayer lay) {
31 m_strings.insert( str, name ); 30 m_strings.insert( str, name );
32 m_layerFact.insert( str, lay ); 31 m_layerFact.insert( str, lay );
33} 32}
34void MetaFactory::addFileTransferLayer( const QCString& name, 33void MetaFactory::addFileTransferLayer( const QCString& name,
35 const QString& str, 34 const QString& str,
36 filelayer lay) { 35 filelayer lay) {
37 m_strings.insert(str, name ); 36 m_strings.insert(str, name );
38 m_fileFact.insert( str, lay ); 37 m_fileFact.insert( str, lay );
39} 38}
40void MetaFactory::addReceiveLayer( const QCString& name, 39void MetaFactory::addReceiveLayer( const QCString& name,
41 const QString& str, 40 const QString& str,
42 receivelayer lay) { 41 receivelayer lay) {
43 m_strings.insert(str, name ); 42 m_strings.insert(str, name );
44 m_receiveFact.insert( str, lay ); 43 m_receiveFact.insert( str, lay );
45} 44}
46QStringList MetaFactory::ioLayers()const { 45QStringList MetaFactory::ioLayers()const {
47 QStringList list; 46 QStringList list;
48 QMap<QString, iolayer>::ConstIterator it; 47 QMap<QString, iolayer>::ConstIterator it;
49 for (it = m_layerFact.begin(); it != m_layerFact.end(); ++it ) { 48 for (it = m_layerFact.begin(); it != m_layerFact.end(); ++it ) {
50 list << it.key(); 49 list << it.key();
51 } 50 }
52 return list; 51 return list;
53} 52}
54QStringList MetaFactory::connectionWidgets()const { 53QStringList MetaFactory::connectionWidgets()const {
55 QStringList list; 54 QStringList list;
56 QMap<QString, configWidget>::ConstIterator it; 55 QMap<QString, configWidget>::ConstIterator it;
57 for ( it = m_conFact.begin(); it != m_conFact.end(); ++it ) { 56 for ( it = m_conFact.begin(); it != m_conFact.end(); ++it ) {
58 list << it.key(); 57 list << it.key();
59 } 58 }
60 return list; 59 return list;
61} 60}
62QStringList MetaFactory::terminalWidgets()const { 61QStringList MetaFactory::terminalWidgets()const {
63 QStringList list; 62 QStringList list;
64 QMap<QString, configWidget>::ConstIterator it; 63 QMap<QString, configWidget>::ConstIterator it;
65 for ( it = m_termFact.begin(); it != m_termFact.end(); ++it ) { 64 for ( it = m_termFact.begin(); it != m_termFact.end(); ++it ) {
66 list << it.key(); 65 list << it.key();
67 } 66 }
68 return list; 67 return list;
69} 68}
70QStringList MetaFactory::fileTransferLayers()const { 69QStringList MetaFactory::fileTransferLayers()const {
71 QStringList list; 70 QStringList list;
72 QMap<QString, filelayer>::ConstIterator it; 71 QMap<QString, filelayer>::ConstIterator it;
73 for ( it = m_fileFact.begin(); it != m_fileFact.end(); ++it ) { 72 for ( it = m_fileFact.begin(); it != m_fileFact.end(); ++it ) {
74 list << it.key(); 73 list << it.key();
75 } 74 }
76 return list; 75 return list;
77} 76}
78QStringList MetaFactory::receiveLayers()const { 77QStringList MetaFactory::receiveLayers()const {
79 QStringList list; 78 QStringList list;
80 QMap<QString, receivelayer>::ConstIterator it; 79 QMap<QString, receivelayer>::ConstIterator it;
81 for ( it = m_receiveFact.begin(); it != m_receiveFact.end(); ++it ) { 80 for ( it = m_receiveFact.begin(); it != m_receiveFact.end(); ++it ) {
82 list << it.key(); 81 list << it.key();
83 } 82 }
84 return list; 83 return list;
85} 84}
86 85
87IOLayer* MetaFactory::newIOLayer( const QString& str,const Profile& prof ) { 86IOLayer* MetaFactory::newIOLayer( const QString& str,const Profile& prof ) {
88 IOLayer* lay = 0l; 87 IOLayer* lay = 0l;
89 88
90 QMap<QString, iolayer>::Iterator it; 89 QMap<QString, iolayer>::Iterator it;
91 it = m_layerFact.find( str ); 90 it = m_layerFact.find( str );
92 if ( it != m_layerFact.end() ) { 91 if ( it != m_layerFact.end() ) {
93 lay = (*(it.data()))(prof); 92 lay = (*(it.data()))(prof);
94 /* 93 /*
95 iolayer laye = it.data(); 94 iolayer laye = it.data();
96 lay = (*laye )(conf);*/ 95 lay = (*laye )(conf);*/
97 } 96 }
98 97
99 return lay; 98 return lay;
100} 99}
101 100
102ProfileDialogWidget *MetaFactory::newConnectionPlugin ( const QString& str, QWidget *parent) { 101ProfileDialogWidget *MetaFactory::newConnectionPlugin ( const QString& str, QWidget *parent) {
103 ProfileDialogWidget* wid = 0l; 102 ProfileDialogWidget* wid = 0l;
104 103
105 QMap<QString, configWidget>::Iterator it; 104 QMap<QString, configWidget>::Iterator it;
106 it = m_conFact.find( str ); 105 it = m_conFact.find( str );
107 if ( it != m_conFact.end() ) { 106 if ( it != m_conFact.end() ) {
108 wid = (*(it.data() ) )(str,parent); 107 wid = (*(it.data() ) )(str,parent);
109 } 108 }
110 return wid; 109 return wid;
111} 110}
112ProfileDialogWidget *MetaFactory::newTerminalPlugin( const QString& str, QWidget *parent) { 111ProfileDialogWidget *MetaFactory::newTerminalPlugin( const QString& str, QWidget *parent) {
113 if (str.isEmpty() ) 112 if (str.isEmpty() )
114 return 0l; 113 return 0l;
115 ProfileDialogWidget* wid = 0l; 114 ProfileDialogWidget* wid = 0l;
116 115
117 QMap<QString, configWidget>::Iterator it; 116 QMap<QString, configWidget>::Iterator it;
118 it = m_termFact.find( str ); 117 it = m_termFact.find( str );
119 if ( it != m_termFact.end() ) { 118 if ( it != m_termFact.end() ) {
120 wid = (*(it.data() ) )(str,parent); 119 wid = (*(it.data() ) )(str,parent);
121 } 120 }
122 return wid; 121 return wid;
123} 122}
124ProfileDialogWidget *MetaFactory::newKeyboardPlugin( const QString& str, QWidget *parent) { 123ProfileDialogWidget *MetaFactory::newKeyboardPlugin( const QString& str, QWidget *parent) {
125 124
126 if (str.isEmpty() ) 125 if (str.isEmpty() )
127 return 0l; 126 return 0l;
128 ProfileDialogWidget* wid = 0l; 127 ProfileDialogWidget* wid = 0l;
129 128
130 QMap<QString, configWidget>::Iterator it; 129 QMap<QString, configWidget>::Iterator it;
131 it = m_keyFact.find( str ); 130 it = m_keyFact.find( str );
132 if ( it != m_keyFact.end() ) { 131 if ( it != m_keyFact.end() ) {
133 wid = (*(it.data() ) )(str,parent); 132 wid = (*(it.data() ) )(str,parent);
134 } 133 }
135 return wid; 134 return wid;
136} 135}
137FileTransferLayer* MetaFactory::newFileTransfer(const QString& str, IOLayer* lay ) { 136FileTransferLayer* MetaFactory::newFileTransfer(const QString& str, IOLayer* lay ) {
138 FileTransferLayer* file = 0l; 137 FileTransferLayer* file = 0l;
139 QMap<QString, filelayer>::Iterator it; 138 QMap<QString, filelayer>::Iterator it;
140 it = m_fileFact.find( str ); 139 it = m_fileFact.find( str );
141 if ( it != m_fileFact.end() ) { 140 if ( it != m_fileFact.end() ) {
142 file = (*(it.data() ) )(lay); 141 file = (*(it.data() ) )(lay);
143 } 142 }
144 return file; 143 return file;
145} 144}
146ReceiveLayer* MetaFactory::newReceive(const QString& str, IOLayer* lay ) { 145ReceiveLayer* MetaFactory::newReceive(const QString& str, IOLayer* lay ) {
147 ReceiveLayer* file = 0l; 146 ReceiveLayer* file = 0l;
148 QMap<QString, receivelayer>::Iterator it; 147 QMap<QString, receivelayer>::Iterator it;
149 it = m_receiveFact.find( str ); 148 it = m_receiveFact.find( str );
150 if ( it != m_receiveFact.end() ) { 149 if ( it != m_receiveFact.end() ) {
151 file = (*(it.data() ) )(lay); 150 file = (*(it.data() ) )(lay);
152 } 151 }
153 return file; 152 return file;
154} 153}
155QCString MetaFactory::internal( const QString& str )const { 154QCString MetaFactory::internal( const QString& str )const {
156 return m_strings[str]; 155 return m_strings[str];
157} 156}
158QString MetaFactory::external( const QCString& str )const { 157QString MetaFactory::external( const QCString& str )const {
159 QMap<QString, QCString>::ConstIterator it; 158 QMap<QString, QCString>::ConstIterator it;
160 for ( it = m_strings.begin(); it != m_strings.end(); ++it ) { 159 for ( it = m_strings.begin(); it != m_strings.end(); ++it ) {
161 if ( it.data() == str ) 160 if ( it.data() == str )
162 return it.key(); 161 return it.key();
163 } 162 }
164 return QString::null; 163 return QString::null;
165} 164}
diff --git a/noncore/apps/opie-console/modemconfigwidget.cpp b/noncore/apps/opie-console/modemconfigwidget.cpp
index f7fb6f3..e552990 100644
--- a/noncore/apps/opie-console/modemconfigwidget.cpp
+++ b/noncore/apps/opie-console/modemconfigwidget.cpp
@@ -1,199 +1,197 @@
1#include <qlabel.h> 1#include <qlabel.h>
2#include <qlayout.h> 2#include <qlayout.h>
3#include <qcombobox.h> 3#include <qcombobox.h>
4#include <qlineedit.h>
5#include <qpushbutton.h> 4#include <qpushbutton.h>
6#include <qhbox.h> 5#include <qhbox.h>
7#include <qregexp.h>
8 6
9#include "modemconfigwidget.h" 7#include "modemconfigwidget.h"
10#include "dialdialog.h" 8#include "dialdialog.h"
11 9
12namespace { 10namespace {
13 void setCurrent( const QString& str, QComboBox* bo ) { 11 void setCurrent( const QString& str, QComboBox* bo ) {
14 uint b = bo->count(); 12 uint b = bo->count();
15 for (int i = 0; i < bo->count(); i++ ) { 13 for (int i = 0; i < bo->count(); i++ ) {
16 if ( bo->text(i) == str ) { 14 if ( bo->text(i) == str ) {
17 bo->setCurrentItem( i ); 15 bo->setCurrentItem( i );
18 return; 16 return;
19 } 17 }
20 } 18 }
21 bo->insertItem( str ); 19 bo->insertItem( str );
22 bo->setCurrentItem( b ); 20 bo->setCurrentItem( b );
23 } 21 }
24} 22}
25 23
26ModemConfigWidget::ModemConfigWidget( const QString& name, QWidget* parent, 24ModemConfigWidget::ModemConfigWidget( const QString& name, QWidget* parent,
27 const char* na ) 25 const char* na )
28 : ProfileDialogConnectionWidget( name, parent, na ) { 26 : ProfileDialogConnectionWidget( name, parent, na ) {
29 27
30 m_lay = new QVBoxLayout( this ); 28 m_lay = new QVBoxLayout( this );
31 m_device = new QLabel(tr( "Modem is attached to:" ), this ); 29 m_device = new QLabel(tr( "Modem is attached to:" ), this );
32 m_deviceCmb = new QComboBox(this ); 30 m_deviceCmb = new QComboBox(this );
33 m_deviceCmb->setEditable( TRUE ); 31 m_deviceCmb->setEditable( TRUE );
34 32
35 QLabel* telLabel = new QLabel( this ); 33 QLabel* telLabel = new QLabel( this );
36 telLabel->setText( tr( "Enter telefon number here:" ) ); 34 telLabel->setText( tr( "Enter telefon number here:" ) );
37 QHBox *buttonBox = new QHBox( this ); 35 QHBox *buttonBox = new QHBox( this );
38 m_telNumber = new QLineEdit( buttonBox ); 36 m_telNumber = new QLineEdit( buttonBox );
39 QPushButton *atButton = new QPushButton( buttonBox ); 37 QPushButton *atButton = new QPushButton( buttonBox );
40 atButton->setText( tr( "AT commands" ) ); 38 atButton->setText( tr( "AT commands" ) );
41 connect( atButton, SIGNAL( clicked() ), this, SLOT( slotAT() ) ); 39 connect( atButton, SIGNAL( clicked() ), this, SLOT( slotAT() ) );
42 40
43 QPushButton *dialButton = new QPushButton( buttonBox ); 41 QPushButton *dialButton = new QPushButton( buttonBox );
44 dialButton->setText( tr( "Enter number" ) ); 42 dialButton->setText( tr( "Enter number" ) );
45 connect( dialButton, SIGNAL( clicked() ), this, SLOT( slotDial() ) ); 43 connect( dialButton, SIGNAL( clicked() ), this, SLOT( slotDial() ) );
46 44
47 m_base = new IOLayerBase( this, "base" ); 45 m_base = new IOLayerBase( this, "base" );
48 46
49 m_lay->addWidget( m_device ); 47 m_lay->addWidget( m_device );
50 m_lay->addWidget( m_deviceCmb ); 48 m_lay->addWidget( m_deviceCmb );
51 m_lay->addWidget( telLabel ); 49 m_lay->addWidget( telLabel );
52 m_lay->addWidget( buttonBox ); 50 m_lay->addWidget( buttonBox );
53 m_lay->addWidget( m_base ); 51 m_lay->addWidget( m_base );
54 m_lay->addStretch( 0 ); 52 m_lay->addStretch( 0 );
55 53
56 m_deviceCmb->insertItem( "/dev/ttyS0" ); 54 m_deviceCmb->insertItem( "/dev/ttyS0" );
57 m_deviceCmb->insertItem( "/dev/ttyS1" ); 55 m_deviceCmb->insertItem( "/dev/ttyS1" );
58 m_deviceCmb->insertItem( "/dev/ttyS2" ); 56 m_deviceCmb->insertItem( "/dev/ttyS2" );
59 57
60 atConf = new ATConfigDialog( this, "ATConfig", true ); 58 atConf = new ATConfigDialog( this, "ATConfig", true );
61} 59}
62 60
63ModemConfigWidget::~ModemConfigWidget() { 61ModemConfigWidget::~ModemConfigWidget() {
64 62
65} 63}
66void ModemConfigWidget::load( const Profile& prof ) { 64void ModemConfigWidget::load( const Profile& prof ) {
67 65
68 int rad_flow = prof.readNumEntry( "Flow" ); 66 int rad_flow = prof.readNumEntry( "Flow" );
69 int rad_parity = prof.readNumEntry( "Parity" ); 67 int rad_parity = prof.readNumEntry( "Parity" );
70 int speed = prof.readNumEntry( "Speed" ); 68 int speed = prof.readNumEntry( "Speed" );
71 int dbits = prof.readNumEntry("DataBits"); 69 int dbits = prof.readNumEntry("DataBits");
72 int sbits = prof.readNumEntry("StopBits"); 70 int sbits = prof.readNumEntry("StopBits");
73 QString number = prof.readEntry( "Number" ); 71 QString number = prof.readEntry( "Number" );
74 72
75 if ( !number.isEmpty() ) { 73 if ( !number.isEmpty() ) {
76 m_telNumber->setText( number ); 74 m_telNumber->setText( number );
77 } 75 }
78 76
79 if ( rad_flow == 1 ) { 77 if ( rad_flow == 1 ) {
80 m_base->setFlow( IOLayerBase::Hardware ); 78 m_base->setFlow( IOLayerBase::Hardware );
81 } else if (rad_flow == 2) { 79 } else if (rad_flow == 2) {
82 m_base->setFlow( IOLayerBase::Software ); 80 m_base->setFlow( IOLayerBase::Software );
83 } else if (rad_flow == 0) { 81 } else if (rad_flow == 0) {
84 m_base->setFlow( IOLayerBase::None ); 82 m_base->setFlow( IOLayerBase::None );
85 } 83 }
86 84
87 85
88 if ( rad_parity == 1 ) { 86 if ( rad_parity == 1 ) {
89 m_base->setParity( IOLayerBase::Even ); 87 m_base->setParity( IOLayerBase::Even );
90 } else if ( rad_parity == 2 ){ 88 } else if ( rad_parity == 2 ){
91 m_base->setParity( IOLayerBase::Odd ); 89 m_base->setParity( IOLayerBase::Odd );
92 } else { 90 } else {
93 m_base->setParity( IOLayerBase::NonePar ); 91 m_base->setParity( IOLayerBase::NonePar );
94 } 92 }
95 93
96 switch( speed ) { 94 switch( speed ) {
97 case 115200: 95 case 115200:
98 m_base->setSpeed( IOLayerBase::Baud_115200 ); 96 m_base->setSpeed( IOLayerBase::Baud_115200 );
99 break; 97 break;
100 case 57600: 98 case 57600:
101 m_base->setSpeed( IOLayerBase::Baud_57600 ); 99 m_base->setSpeed( IOLayerBase::Baud_57600 );
102 break; 100 break;
103 case 38400: 101 case 38400:
104 m_base->setSpeed( IOLayerBase::Baud_38400 ); 102 m_base->setSpeed( IOLayerBase::Baud_38400 );
105 break; 103 break;
106 case 19200: 104 case 19200:
107 m_base->setSpeed( IOLayerBase::Baud_19200 ); 105 m_base->setSpeed( IOLayerBase::Baud_19200 );
108 break; 106 break;
109 case 9600: 107 case 9600:
110 default: 108 default:
111 m_base->setSpeed( IOLayerBase::Baud_9600 ); 109 m_base->setSpeed( IOLayerBase::Baud_9600 );
112 break; 110 break;
113 } 111 }
114 112
115 113
116 if ( dbits == 5) { 114 if ( dbits == 5) {
117 m_base->setData( IOLayerBase::Data_Five ); 115 m_base->setData( IOLayerBase::Data_Five );
118 } else if (rad_flow == 6) { 116 } else if (rad_flow == 6) {
119 m_base->setData( IOLayerBase::Data_Six ); 117 m_base->setData( IOLayerBase::Data_Six );
120 } else if (rad_flow == 7) { 118 } else if (rad_flow == 7) {
121 m_base->setData( IOLayerBase::Data_Seven ); 119 m_base->setData( IOLayerBase::Data_Seven );
122 } else { 120 } else {
123 m_base->setData( IOLayerBase::Data_Eight ); 121 m_base->setData( IOLayerBase::Data_Eight );
124 } 122 }
125 123
126 if ( sbits == 2) { 124 if ( sbits == 2) {
127 m_base->setStop( IOLayerBase::Stop_Two ); 125 m_base->setStop( IOLayerBase::Stop_Two );
128 } else if ( sbits == 15 ) { 126 } else if ( sbits == 15 ) {
129 m_base->setStop( IOLayerBase::Stop_OnePointFive ); 127 m_base->setStop( IOLayerBase::Stop_OnePointFive );
130 } else { 128 } else {
131 m_base->setStop( IOLayerBase::Stop_One ); 129 m_base->setStop( IOLayerBase::Stop_One );
132 } 130 }
133 131
134 132
135 atConf->readConfig( prof ); 133 atConf->readConfig( prof );
136 if ( prof.readEntry( "Device" ).isEmpty() ) { 134 if ( prof.readEntry( "Device" ).isEmpty() ) {
137 qWarning("device empty!"); 135 qWarning("device empty!");
138 return; 136 return;
139 } 137 }
140 setCurrent( prof.readEntry( "Device" ), m_deviceCmb ); 138 setCurrent( prof.readEntry( "Device" ), m_deviceCmb );
141 139
142 140
143} 141}
144 142
145/* 143/*
146 * save speed, 144 * save speed,
147 * flow, 145 * flow,
148 * parity 146 * parity
149 */ 147 */
150void ModemConfigWidget::save( Profile& prof ) { 148void ModemConfigWidget::save( Profile& prof ) {
151 int flow, parity, speed, data, stop; 149 int flow, parity, speed, data, stop;
152 flow = parity = speed = data = stop = 0; 150 flow = parity = speed = data = stop = 0;
153 prof.writeEntry( "Device", m_deviceCmb->currentText() ); 151 prof.writeEntry( "Device", m_deviceCmb->currentText() );
154 152
155 153
156 switch( m_base->flow() ) { 154 switch( m_base->flow() ) {
157 case IOLayerBase::None: 155 case IOLayerBase::None:
158 flow = 0; 156 flow = 0;
159 break; 157 break;
160 case IOLayerBase::Software: 158 case IOLayerBase::Software:
161 flow = 2; 159 flow = 2;
162 break; 160 break;
163 case IOLayerBase::Hardware: 161 case IOLayerBase::Hardware:
164 flow = 1; 162 flow = 1;
165 break; 163 break;
166 } 164 }
167 165
168 switch( m_base->parity() ) { 166 switch( m_base->parity() ) {
169 case IOLayerBase::Odd: 167 case IOLayerBase::Odd:
170 parity = 2; 168 parity = 2;
171 break; 169 break;
172 case IOLayerBase::Even: 170 case IOLayerBase::Even:
173 parity = 1; 171 parity = 1;
174 break; 172 break;
175 case IOLayerBase::NonePar: 173 case IOLayerBase::NonePar:
176 parity = 0; 174 parity = 0;
177 break; 175 break;
178 } 176 }
179 177
180 switch( m_base->speed() ) { 178 switch( m_base->speed() ) {
181 case IOLayerBase::Baud_115200: 179 case IOLayerBase::Baud_115200:
182 speed = 115200; 180 speed = 115200;
183 break; 181 break;
184 case IOLayerBase::Baud_57600: 182 case IOLayerBase::Baud_57600:
185 speed = 57600; 183 speed = 57600;
186 break; 184 break;
187 case IOLayerBase::Baud_38400: 185 case IOLayerBase::Baud_38400:
188 speed = 38400; 186 speed = 38400;
189 break; 187 break;
190 case IOLayerBase::Baud_19200: 188 case IOLayerBase::Baud_19200:
191 speed = 19200; 189 speed = 19200;
192 break; 190 break;
193 case IOLayerBase::Baud_9600: 191 case IOLayerBase::Baud_9600:
194 speed = 9600; 192 speed = 9600;
195 break; 193 break;
196 } 194 }
197 195
198 switch( m_base->data() ) { 196 switch( m_base->data() ) {
199 case IOLayerBase::Data_Five: 197 case IOLayerBase::Data_Five:
diff --git a/noncore/apps/opie-console/profileeditordialog.cpp b/noncore/apps/opie-console/profileeditordialog.cpp
index e2501a6..979e89d 100644
--- a/noncore/apps/opie-console/profileeditordialog.cpp
+++ b/noncore/apps/opie-console/profileeditordialog.cpp
@@ -1,197 +1,196 @@
1#include <qlayout.h> 1#include <qlayout.h>
2#include <qlineedit.h> 2#include <qlineedit.h>
3#include <qlabel.h> 3#include <qlabel.h>
4#include <qmessagebox.h> 4#include <qmessagebox.h>
5#include <qstringlist.h>
6#include <qcombobox.h> 5#include <qcombobox.h>
7#include <qcheckbox.h> 6#include <qcheckbox.h>
8#include <qscrollview.h> 7#include <qscrollview.h>
9 8
10#include "metafactory.h" 9#include "metafactory.h"
11#include "profileeditordialog.h" 10#include "profileeditordialog.h"
12 11
13namespace { 12namespace {
14 void setCurrent( const QString& str, QComboBox* bo ) { 13 void setCurrent( const QString& str, QComboBox* bo ) {
15 for (int i = 0; i < bo->count(); i++ ) { 14 for (int i = 0; i < bo->count(); i++ ) {
16 if ( bo->text(i) == str ) { 15 if ( bo->text(i) == str ) {
17 bo->setCurrentItem( i ); 16 bo->setCurrentItem( i );
18 } 17 }
19 } 18 }
20 }; 19 };
21} 20}
22 21
23ProfileEditorDialog::ProfileEditorDialog( MetaFactory* fact, 22ProfileEditorDialog::ProfileEditorDialog( MetaFactory* fact,
24 const Profile& prof ) 23 const Profile& prof )
25 : QDialog(0, 0, TRUE), m_fact( fact ), m_prof( prof ) 24 : QDialog(0, 0, TRUE), m_fact( fact ), m_prof( prof )
26{ 25{
27 initUI(); 26 initUI();
28 27
29 // Apply current profile 28 // Apply current profile
30 // plugin_plugin->load(profile); 29 // plugin_plugin->load(profile);
31 // ... (reset profile name line edit etc.) 30 // ... (reset profile name line edit etc.)
32} 31}
33 32
34ProfileEditorDialog::ProfileEditorDialog( MetaFactory* fact ) 33ProfileEditorDialog::ProfileEditorDialog( MetaFactory* fact )
35 : QDialog(0, 0, TRUE), m_fact( fact ) 34 : QDialog(0, 0, TRUE), m_fact( fact )
36{ 35{
37 // Default profile 36 // Default profile
38 m_prof = Profile(tr("New Profile"), "serial", "default", Profile::Black, Profile::White, Profile::VT102); 37 m_prof = Profile(tr("New Profile"), "serial", "default", Profile::Black, Profile::White, Profile::VT102);
39 38
40 initUI(); 39 initUI();
41 40
42 // Apply current profile 41 // Apply current profile
43 // plugin_plugin->load(profile); 42 // plugin_plugin->load(profile);
44} 43}
45 44
46Profile ProfileEditorDialog::profile() const 45Profile ProfileEditorDialog::profile() const
47{ 46{
48 return m_prof; 47 return m_prof;
49} 48}
50 49
51void ProfileEditorDialog::initUI() 50void ProfileEditorDialog::initUI()
52{ 51{
53 m_con = m_term = m_key = 0l; 52 m_con = m_term = m_key = 0l;
54 53
55 54
56 QVBoxLayout *mainLayout = new QVBoxLayout( this ); 55 QVBoxLayout *mainLayout = new QVBoxLayout( this );
57 tabWidget = new OTabWidget( this ); 56 tabWidget = new OTabWidget( this );
58 tabWidget->setTabStyle(OTabWidget::TextTab); 57 tabWidget->setTabStyle(OTabWidget::TextTab);
59 mainLayout->add(tabWidget); 58 mainLayout->add(tabWidget);
60 59
61 /* base tabs */ 60 /* base tabs */
62 tabprof = new QWidget(this); 61 tabprof = new QWidget(this);
63 m_tabTerm = new QWidget(this); 62 m_tabTerm = new QWidget(this);
64 m_tabCon = new QWidget(this); 63 m_tabCon = new QWidget(this);
65 m_tabKey = new QWidget(this); 64 m_tabKey = new QWidget(this);
66 65
67 m_svCon = new QScrollView( m_tabCon ); 66 m_svCon = new QScrollView( m_tabCon );
68 m_svCon->setResizePolicy( QScrollView::AutoOneFit ); 67 m_svCon->setResizePolicy( QScrollView::AutoOneFit );
69 //m_svCon->setHScrollBarMode( QScrollView::AlwaysOff ); 68 //m_svCon->setHScrollBarMode( QScrollView::AlwaysOff );
70 m_svCon->setFrameShape( QFrame::NoFrame ); 69 m_svCon->setFrameShape( QFrame::NoFrame );
71 m_svTerm = new QScrollView( m_tabTerm ); 70 m_svTerm = new QScrollView( m_tabTerm );
72 m_svTerm->setResizePolicy( QScrollView::AutoOneFit ); 71 m_svTerm->setResizePolicy( QScrollView::AutoOneFit );
73 //m_svTerm->setHScrollBarMode( QScrollView::AlwaysOff ); 72 //m_svTerm->setHScrollBarMode( QScrollView::AlwaysOff );
74 m_svTerm->setFrameShape( QFrame::NoFrame ); 73 m_svTerm->setFrameShape( QFrame::NoFrame );
75 74
76 /* base layout for tabs */ 75 /* base layout for tabs */
77 m_layCon = new QHBoxLayout( m_tabCon , 2 ); 76 m_layCon = new QHBoxLayout( m_tabCon , 2 );
78 m_layTerm = new QHBoxLayout( m_tabTerm, 2 ); 77 m_layTerm = new QHBoxLayout( m_tabTerm, 2 );
79 m_layKey = new QHBoxLayout( m_tabKey, 2 ); 78 m_layKey = new QHBoxLayout( m_tabKey, 2 );
80 79
81 m_layCon->addWidget( m_svCon ); 80 m_layCon->addWidget( m_svCon );
82 m_layTerm->addWidget( m_svTerm ); 81 m_layTerm->addWidget( m_svTerm );
83 82
84 // profile tab 83 // profile tab
85 84
86 QLabel *name = new QLabel(QObject::tr("Profile name"), tabprof); 85 QLabel *name = new QLabel(QObject::tr("Profile name"), tabprof);
87 m_name = new QLineEdit(tabprof); 86 m_name = new QLineEdit(tabprof);
88 QLabel *con = new QLabel(tr("Connection"), tabprof ); 87 QLabel *con = new QLabel(tr("Connection"), tabprof );
89 QLabel *term = new QLabel(tr("Terminal"), tabprof ); 88 QLabel *term = new QLabel(tr("Terminal"), tabprof );
90 m_conCmb = new QComboBox( tabprof ); 89 m_conCmb = new QComboBox( tabprof );
91 m_termCmb = new QComboBox( tabprof ); 90 m_termCmb = new QComboBox( tabprof );
92 m_autoConnect = new QCheckBox(tr("Auto connect after load"), tabprof); 91 m_autoConnect = new QCheckBox(tr("Auto connect after load"), tabprof);
93 92
94 // layouting 93 // layouting
95 QVBoxLayout *vbox3 = new QVBoxLayout(tabprof, 2); 94 QVBoxLayout *vbox3 = new QVBoxLayout(tabprof, 2);
96 vbox3->add(name); 95 vbox3->add(name);
97 vbox3->add(m_name); 96 vbox3->add(m_name);
98 vbox3->add(con ); 97 vbox3->add(con );
99 vbox3->add(m_conCmb ); 98 vbox3->add(m_conCmb );
100 vbox3->add(term ); 99 vbox3->add(term );
101 vbox3->add(m_termCmb ); 100 vbox3->add(m_termCmb );
102 vbox3->add(m_autoConnect); 101 vbox3->add(m_autoConnect);
103 vbox3->addStretch(1); 102 vbox3->addStretch(1);
104 103
105 m_showconntab = 0; 104 m_showconntab = 0;
106 tabWidget->addTab(tabprof, "", QObject::tr("Profile")); 105 tabWidget->addTab(tabprof, "", QObject::tr("Profile"));
107 tabWidget->addTab(m_tabCon, "", QObject::tr("Connection")); 106 tabWidget->addTab(m_tabCon, "", QObject::tr("Connection"));
108 tabWidget->addTab(m_tabTerm, "", QObject::tr("Terminal")); 107 tabWidget->addTab(m_tabTerm, "", QObject::tr("Terminal"));
109 tabWidget->addTab(m_tabKey, "", QObject::tr("Special Keys")); 108 tabWidget->addTab(m_tabKey, "", QObject::tr("Special Keys"));
110 tabWidget->setCurrentTab( tabprof ); 109 tabWidget->setCurrentTab( tabprof );
111 110
112 111
113 // fill the comboboxes 112 // fill the comboboxes
114 QStringList list = m_fact->connectionWidgets(); 113 QStringList list = m_fact->connectionWidgets();
115 QStringList::Iterator it; 114 QStringList::Iterator it;
116 for (it =list.begin(); it != list.end(); ++it ) { 115 for (it =list.begin(); it != list.end(); ++it ) {
117 m_conCmb->insertItem( (*it) ); 116 m_conCmb->insertItem( (*it) );
118 } 117 }
119 list = m_fact->terminalWidgets(); 118 list = m_fact->terminalWidgets();
120 for (it =list.begin(); it != list.end(); ++it ) { 119 for (it =list.begin(); it != list.end(); ++it ) {
121 m_termCmb->insertItem( (*it) ); 120 m_termCmb->insertItem( (*it) );
122 } 121 }
123 122
124 // load profile values 123 // load profile values
125 m_name->setText(m_prof.name()); 124 m_name->setText(m_prof.name());
126 slotKeyActivated( "Default Keyboard" ); 125 slotKeyActivated( "Default Keyboard" );
127 setCurrent( m_fact->external(m_prof.ioLayerName() ), m_conCmb ); 126 setCurrent( m_fact->external(m_prof.ioLayerName() ), m_conCmb );
128 setCurrent( m_fact->external(m_prof.terminalName() ), m_termCmb ); 127 setCurrent( m_fact->external(m_prof.terminalName() ), m_termCmb );
129 slotConActivated( m_fact->external(m_prof.ioLayerName() ) ); 128 slotConActivated( m_fact->external(m_prof.ioLayerName() ) );
130 slotTermActivated( m_fact->external(m_prof.terminalName() ) ); 129 slotTermActivated( m_fact->external(m_prof.terminalName() ) );
131 m_autoConnect->setChecked(m_prof.autoConnect()); 130 m_autoConnect->setChecked(m_prof.autoConnect());
132 131
133 132
134 // signal and slots 133 // signal and slots
135 connect(m_conCmb, SIGNAL(activated(const QString& ) ), 134 connect(m_conCmb, SIGNAL(activated(const QString& ) ),
136 this, SLOT(slotConActivated(const QString&) ) ); 135 this, SLOT(slotConActivated(const QString&) ) );
137 connect(m_termCmb, SIGNAL(activated(const QString& ) ), 136 connect(m_termCmb, SIGNAL(activated(const QString& ) ),
138 this, SLOT(slotTermActivated(const QString& ) ) ); 137 this, SLOT(slotTermActivated(const QString& ) ) );
139 138
140} 139}
141 140
142ProfileEditorDialog::~ProfileEditorDialog() { 141ProfileEditorDialog::~ProfileEditorDialog() {
143 142
144} 143}
145void ProfileEditorDialog::accept() 144void ProfileEditorDialog::accept()
146{ 145{
147 if(profName().isEmpty()) 146 if(profName().isEmpty())
148 { 147 {
149 QMessageBox::information(this, 148 QMessageBox::information(this,
150 QObject::tr("Invalid profile"), 149 QObject::tr("Invalid profile"),
151 QObject::tr("Please enter a profile name.")); 150 QObject::tr("Please enter a profile name."));
152 return; 151 return;
153 } 152 }
154 // Save profile and plugin profile 153 // Save profile and plugin profile
155 //if(plugin_plugin) plugin_plugin->save(); 154 //if(plugin_plugin) plugin_plugin->save();
156 155
157 // Save general values 156 // Save general values
158 m_prof.setName( profName() ); 157 m_prof.setName( profName() );
159 m_prof.setIOLayer( m_fact->internal(m_conCmb ->currentText() ) ); 158 m_prof.setIOLayer( m_fact->internal(m_conCmb ->currentText() ) );
160 m_prof.setTerminalName( m_fact->internal(m_termCmb->currentText() ) ); 159 m_prof.setTerminalName( m_fact->internal(m_termCmb->currentText() ) );
161 m_prof.setAutoConnect( m_autoConnect->isChecked() ); 160 m_prof.setAutoConnect( m_autoConnect->isChecked() );
162 161
163 if (m_con ) 162 if (m_con )
164 m_con->save( m_prof ); 163 m_con->save( m_prof );
165 if (m_term ) 164 if (m_term )
166 m_term->save( m_prof ); 165 m_term->save( m_prof );
167 if (m_key) 166 if (m_key)
168 m_key->save( m_prof ); 167 m_key->save( m_prof );
169 168
170 QDialog::accept(); 169 QDialog::accept();
171} 170}
172 171
173 172
174QString ProfileEditorDialog::profName()const 173QString ProfileEditorDialog::profName()const
175{ 174{
176 return m_name->text(); 175 return m_name->text();
177} 176}
178 177
179QCString ProfileEditorDialog::profType()const 178QCString ProfileEditorDialog::profType()const
180{ 179{
181 /*QStringList w = m_fact->configWidgets(); 180 /*QStringList w = m_fact->configWidgets();
182 for(QStringList::Iterator it = w.begin(); it != w.end(); it++) 181 for(QStringList::Iterator it = w.begin(); it != w.end(); it++)
183 if(device_box->currentText() == m_fact->name((*it))) return (*it); 182 if(device_box->currentText() == m_fact->name((*it))) return (*it);
184 */ 183 */
185 return QCString(); 184 return QCString();
186} 185}
187/* 186/*
188 * we need to switch the widget 187 * we need to switch the widget
189 */ 188 */
190void ProfileEditorDialog::slotConActivated( const QString& str ) { 189void ProfileEditorDialog::slotConActivated( const QString& str ) {
191 190
192 delete m_con; 191 delete m_con;
193 192
194 m_con = m_fact->newConnectionPlugin( str, m_svCon->viewport() ); 193 m_con = m_fact->newConnectionPlugin( str, m_svCon->viewport() );
195 194
196 if ( !m_con ) { 195 if ( !m_con ) {
197 m_con = new NoOptions( str, m_svCon->viewport(), "name"); 196 m_con = new NoOptions( str, m_svCon->viewport(), "name");
diff --git a/noncore/apps/opie-console/profilemanager.cpp b/noncore/apps/opie-console/profilemanager.cpp
index cad2567..71188d1 100644
--- a/noncore/apps/opie-console/profilemanager.cpp
+++ b/noncore/apps/opie-console/profilemanager.cpp
@@ -1,141 +1,136 @@
1#include <stdio.h> 1#include <stdio.h>
2#include <stdlib.h> 2#include <stdlib.h>
3 3
4#include <qfile.h> 4#include <qfile.h>
5#include <qhbox.h> 5#include <qhbox.h>
6#include <qlayout.h>
7#include <qwidgetstack.h>
8 6
9#include <qpe/config.h>
10 7
11#include "emulation_handler.h" 8#include "emulation_handler.h"
12#include "widget_layer.h"
13#include "emulation_widget.h"
14#include "metafactory.h" 9#include "metafactory.h"
15#include "profileconfig.h" 10#include "profileconfig.h"
16#include "profilemanager.h" 11#include "profilemanager.h"
17 12
18ProfileManager::ProfileManager( MetaFactory* fact ) 13ProfileManager::ProfileManager( MetaFactory* fact )
19 : m_fact( fact ) 14 : m_fact( fact )
20{ 15{
21 16
22} 17}
23ProfileManager::~ProfileManager() { 18ProfileManager::~ProfileManager() {
24 19
25} 20}
26void ProfileManager::load() { 21void ProfileManager::load() {
27 m_list.clear(); 22 m_list.clear();
28 ProfileConfig conf("opie-console-profiles"); 23 ProfileConfig conf("opie-console-profiles");
29 QStringList groups = conf.groups(); 24 QStringList groups = conf.groups();
30 QStringList::Iterator it; 25 QStringList::Iterator it;
31 26
32 /* 27 /*
33 * for each profile 28 * for each profile
34 */ 29 */
35 for ( it = groups.begin(); it != groups.end(); ++it ) { 30 for ( it = groups.begin(); it != groups.end(); ++it ) {
36 conf.setGroup( (*it) ); 31 conf.setGroup( (*it) );
37 Profile prof; 32 Profile prof;
38 prof.setName( conf.readEntry("name") ); 33 prof.setName( conf.readEntry("name") );
39 prof.setIOLayer( conf.readEntry("iolayer").utf8() ); 34 prof.setIOLayer( conf.readEntry("iolayer").utf8() );
40 prof.setTerminalName( conf.readEntry("term").utf8() ); 35 prof.setTerminalName( conf.readEntry("term").utf8() );
41 prof.setAutoConnect( conf.readBoolEntry("autoConnect") ); 36 prof.setAutoConnect( conf.readBoolEntry("autoConnect") );
42 prof.setBackground( conf.readNumEntry("back") ); 37 prof.setBackground( conf.readNumEntry("back") );
43 prof.setForeground( conf.readNumEntry("fore") ); 38 prof.setForeground( conf.readNumEntry("fore") );
44 prof.setTerminal( conf.readNumEntry("terminal") ); 39 prof.setTerminal( conf.readNumEntry("terminal") );
45 40
46 // THIS is evil because all data get's reset 41 // THIS is evil because all data get's reset
47 prof.setConf( conf.items( (*it) ) ); 42 prof.setConf( conf.items( (*it) ) );
48 43
49 /* now add it */ 44 /* now add it */
50 m_list.append( prof ); 45 m_list.append( prof );
51 } 46 }
52 47
53} 48}
54void ProfileManager::clear() { 49void ProfileManager::clear() {
55 m_list.clear(); 50 m_list.clear();
56} 51}
57Profile::ValueList ProfileManager::all()const { 52Profile::ValueList ProfileManager::all()const {
58 return m_list; 53 return m_list;
59} 54}
60/* 55/*
61 * Our goal is to create a Session 56 * Our goal is to create a Session
62 * We will load the the IOLayer and EmulationLayer 57 * We will load the the IOLayer and EmulationLayer
63 * from the factory 58 * from the factory
64 * we will generate a QWidgetStack 59 * we will generate a QWidgetStack
65 * add a dummy widget with layout 60 * add a dummy widget with layout
66 * add "Widget" to the layout 61 * add "Widget" to the layout
67 * add the dummy to the stack 62 * add the dummy to the stack
68 * raise the dummy 63 * raise the dummy
69 * call session->connect(= 64 * call session->connect(=
70 * this way we only need to reparent 65 * this way we only need to reparent
71 * in TabWidget 66 * in TabWidget
72 */ 67 */
73Session* ProfileManager::fromProfile( const Profile& prof, QWidget* parent) { 68Session* ProfileManager::fromProfile( const Profile& prof, QWidget* parent) {
74/* TEST PROFILE!!! 69/* TEST PROFILE!!!
75 Profile prof; 70 Profile prof;
76 QString str = "/dev/ttyS0"; 71 QString str = "/dev/ttyS0";
77 prof.writeEntry("Device",str ); 72 prof.writeEntry("Device",str );
78 prof.writeEntry("Baud", 115200 ); 73 prof.writeEntry("Baud", 115200 );
79 prof.setIOLayer("serial"); 74 prof.setIOLayer("serial");
80 prof.setName( "test"); 75 prof.setName( "test");
81*/ 76*/
82 Session* session = new Session(); 77 Session* session = new Session();
83 session->setName( prof.name() ); 78 session->setName( prof.name() );
84 /* translate the internal name to the external */ 79 /* translate the internal name to the external */
85 session->setIOLayer(m_fact->newIOLayer( m_fact->external(prof.ioLayerName()) , 80 session->setIOLayer(m_fact->newIOLayer( m_fact->external(prof.ioLayerName()) ,
86 prof) ); 81 prof) );
87 82
88 QWidgetStack *stack = new QWidgetStack( parent ); 83 QWidgetStack *stack = new QWidgetStack( parent );
89 session->setWidgetStack( stack ); 84 session->setWidgetStack( stack );
90 QWidget* dummy = new QHBox( stack ); 85 QWidget* dummy = new QHBox( stack );
91 stack->raiseWidget( dummy ); 86 stack->raiseWidget( dummy );
92 87
93 EmulationHandler* handler = new EmulationHandler(prof,dummy ); 88 EmulationHandler* handler = new EmulationHandler(prof,dummy );
94 session->setEmulationHandler( handler ); 89 session->setEmulationHandler( handler );
95 session->connect(); 90 session->connect();
96 session->setProfile( prof ); 91 session->setProfile( prof );
97 92
98 return session; 93 return session;
99} 94}
100void ProfileManager::save( ) { 95void ProfileManager::save( ) {
101 QFile::remove( (QString(getenv("HOME") )+ "/Settings/opie-console-profiles.conf" ) ); 96 QFile::remove( (QString(getenv("HOME") )+ "/Settings/opie-console-profiles.conf" ) );
102 ProfileConfig conf("opie-console-profiles"); 97 ProfileConfig conf("opie-console-profiles");
103 Profile::ValueList::Iterator it2; 98 Profile::ValueList::Iterator it2;
104 for (it2 = m_list.begin(); it2 != m_list.end(); ++it2 ) { 99 for (it2 = m_list.begin(); it2 != m_list.end(); ++it2 ) {
105 conf.setGroup( (*it2).name() ); 100 conf.setGroup( (*it2).name() );
106 101
107 /* now the config stuff */ 102 /* now the config stuff */
108 QMap<QString, QString> map = (*it2).conf(); 103 QMap<QString, QString> map = (*it2).conf();
109 QMap<QString, QString>::Iterator confIt; 104 QMap<QString, QString>::Iterator confIt;
110 for ( confIt = map.begin(); confIt != map.end(); ++confIt ) { 105 for ( confIt = map.begin(); confIt != map.end(); ++confIt ) {
111 conf.writeEntry( confIt.key(), confIt.data() ); 106 conf.writeEntry( confIt.key(), confIt.data() );
112 } 107 }
113 108
114 conf.writeEntry( "name", (*it2).name() ); 109 conf.writeEntry( "name", (*it2).name() );
115 QString str = QString::fromUtf8( (*it2).ioLayerName() ); 110 QString str = QString::fromUtf8( (*it2).ioLayerName() );
116 111
117 conf.writeEntry( "iolayer", str ); 112 conf.writeEntry( "iolayer", str );
118 conf.writeEntry( "term", QString::fromUtf8( (*it2).terminalName() ) ); 113 conf.writeEntry( "term", QString::fromUtf8( (*it2).terminalName() ) );
119 conf.writeEntry( "autoConnect", (*it2).autoConnect()); 114 conf.writeEntry( "autoConnect", (*it2).autoConnect());
120 conf.writeEntry( "back", (*it2).background() ); 115 conf.writeEntry( "back", (*it2).background() );
121 conf.writeEntry( "fore", (*it2).foreground() ); 116 conf.writeEntry( "fore", (*it2).foreground() );
122 conf.writeEntry( "terminal", (*it2).terminal() ); 117 conf.writeEntry( "terminal", (*it2).terminal() );
123 } 118 }
124} 119}
125void ProfileManager::add( const Profile& prof) { 120void ProfileManager::add( const Profile& prof) {
126 m_list.append( prof ); 121 m_list.append( prof );
127} 122}
128void ProfileManager::setProfiles( const Profile::ValueList& list ) { 123void ProfileManager::setProfiles( const Profile::ValueList& list ) {
129 m_list = list; 124 m_list = list;
130}; 125};
131Profile ProfileManager::profile( const QString& name )const { 126Profile ProfileManager::profile( const QString& name )const {
132 Profile prof; 127 Profile prof;
133 Profile::ValueList::ConstIterator it; 128 Profile::ValueList::ConstIterator it;
134 for ( it = m_list.begin(); it != m_list.end(); ++it ) { 129 for ( it = m_list.begin(); it != m_list.end(); ++it ) {
135 if ( name == (*it).name() ) { 130 if ( name == (*it).name() ) {
136 prof = (*it); 131 prof = (*it);
137 break; 132 break;
138 } 133 }
139 } 134 }
140 return prof; 135 return prof;
141} 136}
diff --git a/noncore/apps/opie-console/receive_layer.cpp b/noncore/apps/opie-console/receive_layer.cpp
index bbde339..b255452 100644
--- a/noncore/apps/opie-console/receive_layer.cpp
+++ b/noncore/apps/opie-console/receive_layer.cpp
@@ -1,34 +1,31 @@
1#include <unistd.h> 1#include <unistd.h>
2 2
3#include <qdir.h> 3#include <qdir.h>
4#include <qstring.h>
5#include <qfile.h>
6 4
7#include "io_layer.h"
8#include "receive_layer.h" 5#include "receive_layer.h"
9 6
10ReceiveLayer::ReceiveLayer( IOLayer* lay, const QString& startDir ) 7ReceiveLayer::ReceiveLayer( IOLayer* lay, const QString& startDir )
11 : QObject(), m_curDir( startDir ), m_layer(lay ) 8 : QObject(), m_curDir( startDir ), m_layer(lay )
12{ 9{
13 10
14} 11}
15ReceiveLayer::~ReceiveLayer() { 12ReceiveLayer::~ReceiveLayer() {
16 13
17} 14}
18IOLayer* ReceiveLayer::layer() { 15IOLayer* ReceiveLayer::layer() {
19 return m_layer; 16 return m_layer;
20} 17}
21QString ReceiveLayer::currentDir()const{ 18QString ReceiveLayer::currentDir()const{
22 if (m_curDir.isEmpty() ) 19 if (m_curDir.isEmpty() )
23 return QDir::currentDirPath(); 20 return QDir::currentDirPath();
24 return m_curDir; 21 return m_curDir;
25} 22}
26void ReceiveLayer::changeDir( const QString& str) { 23void ReceiveLayer::changeDir( const QString& str) {
27 ::chdir( str.latin1() ); 24 ::chdir( str.latin1() );
28} 25}
29void ReceiveLayer::receive( const QString& dir, Mode, Features ) { 26void ReceiveLayer::receive( const QString& dir, Mode, Features ) {
30 receive( dir ); 27 receive( dir );
31} 28}
32void ReceiveLayer::cancel() { 29void ReceiveLayer::cancel() {
33 30
34} 31}
diff --git a/noncore/apps/opie-console/script.cpp b/noncore/apps/opie-console/script.cpp
index e6e9d6d..faea412 100644
--- a/noncore/apps/opie-console/script.cpp
+++ b/noncore/apps/opie-console/script.cpp
@@ -1,30 +1,29 @@
1#include <qfile.h> 1#include <qfile.h>
2#include <qtextstream.h>
3#include "script.h" 2#include "script.h"
4 3
5Script::Script() { 4Script::Script() {
6} 5}
7 6
8Script::Script(const QString fileName) { 7Script::Script(const QString fileName) {
9 QFile file(fileName); 8 QFile file(fileName);
10 file.open(IO_ReadOnly ); 9 file.open(IO_ReadOnly );
11 m_script = file.readAll(); 10 m_script = file.readAll();
12} 11}
13 12
14void Script::saveTo(const QString fileName) const { 13void Script::saveTo(const QString fileName) const {
15 QFile file(fileName); 14 QFile file(fileName);
16 file.open(IO_WriteOnly); 15 file.open(IO_WriteOnly);
17 file.writeBlock(m_script); 16 file.writeBlock(m_script);
18 file.close(); 17 file.close();
19} 18}
20 19
21 20
22void Script::append(const QByteArray &data) { 21void Script::append(const QByteArray &data) {
23 int size = m_script.size(); 22 int size = m_script.size();
24 m_script.resize(size + data.size()); 23 m_script.resize(size + data.size());
25 memcpy(m_script.data() + size, data.data(), data.size()); 24 memcpy(m_script.data() + size, data.data(), data.size());
26} 25}
27 26
28QByteArray Script::script() const { 27QByteArray Script::script() const {
29 return m_script; 28 return m_script;
30} 29}
diff --git a/noncore/apps/opie-console/session.cpp b/noncore/apps/opie-console/session.cpp
index 4f52584..1034ede 100644
--- a/noncore/apps/opie-console/session.cpp
+++ b/noncore/apps/opie-console/session.cpp
@@ -1,117 +1,115 @@
1 1
2 2
3#include "profile.h"
4#include "io_layer.h"
5#include "file_layer.h" 3#include "file_layer.h"
6#include "emulation_handler.h" 4#include "emulation_handler.h"
7#include "session.h" 5#include "session.h"
8 6
9 7
10Session::Session() { 8Session::Session() {
11 m_widget = 0l; 9 m_widget = 0l;
12 m_layer = 0l; 10 m_layer = 0l;
13 m_emu = 0l; 11 m_emu = 0l;
14 m_transfer = 0l; 12 m_transfer = 0l;
15} 13}
16Session::Session( const QString& na, QWidgetStack* widget, IOLayer* lay) 14Session::Session( const QString& na, QWidgetStack* widget, IOLayer* lay)
17 : m_name( na ), m_widget( widget ), m_layer( lay ) 15 : m_name( na ), m_widget( widget ), m_layer( lay )
18{ 16{
19// m_widLay = 0l; 17// m_widLay = 0l;
20// m_emLay = 0l; 18// m_emLay = 0l;
21 m_emu = 0l; 19 m_emu = 0l;
22} 20}
23Session::~Session() { 21Session::~Session() {
24 delete m_layer; 22 delete m_layer;
25 delete m_emu; 23 delete m_emu;
26 delete m_widget; 24 delete m_widget;
27 /* the widget layer should be deleted by the m_widget */ 25 /* the widget layer should be deleted by the m_widget */
28} 26}
29QString Session::name()const { 27QString Session::name()const {
30 return m_name; 28 return m_name;
31} 29}
32QWidgetStack* Session::widgetStack() { 30QWidgetStack* Session::widgetStack() {
33 return m_widget; 31 return m_widget;
34} 32}
35IOLayer* Session::layer() { 33IOLayer* Session::layer() {
36 return m_layer; 34 return m_layer;
37} 35}
38EmulationHandler* Session::emulationHandler() { 36EmulationHandler* Session::emulationHandler() {
39 return m_emu; 37 return m_emu;
40} 38}
41QWidget* Session::widget() { 39QWidget* Session::widget() {
42 if (!m_emu ) 40 if (!m_emu )
43 return 0l; 41 return 0l;
44 42
45 return m_emu->widget(); 43 return m_emu->widget();
46} 44}
47Profile Session::profile()const { 45Profile Session::profile()const {
48 return m_prof; 46 return m_prof;
49} 47}
50/* 48/*
51WidgetLayer* Session::emulationWidget() { 49WidgetLayer* Session::emulationWidget() {
52 return m_widLay; 50 return m_widLay;
53} 51}
54*/ 52*/
55void Session::connect() { 53void Session::connect() {
56 if ( !m_layer || !m_emu ) 54 if ( !m_layer || !m_emu )
57 return; 55 return;
58 56
59 QObject::connect(m_layer, SIGNAL(received(const QByteArray&) ), 57 QObject::connect(m_layer, SIGNAL(received(const QByteArray&) ),
60 m_emu, SLOT(recv(const QByteArray&) ) ); 58 m_emu, SLOT(recv(const QByteArray&) ) );
61 QObject::connect(m_emu, SIGNAL(send(const QByteArray&) ), 59 QObject::connect(m_emu, SIGNAL(send(const QByteArray&) ),
62 m_layer, SLOT(send(const QByteArray&) ) ); 60 m_layer, SLOT(send(const QByteArray&) ) );
63 QObject::connect(m_emu, SIGNAL(changeSize(int, int) ), 61 QObject::connect(m_emu, SIGNAL(changeSize(int, int) ),
64 m_layer, SLOT(setSize(int, int) ) ); 62 m_layer, SLOT(setSize(int, int) ) );
65} 63}
66 64
67void Session::disconnect() { 65void Session::disconnect() {
68 66
69 if ( !m_layer || !m_emu ) 67 if ( !m_layer || !m_emu )
70 return; 68 return;
71 69
72 QObject::disconnect(m_layer, SIGNAL(received(const QByteArray&) ), 70 QObject::disconnect(m_layer, SIGNAL(received(const QByteArray&) ),
73 m_emu, SLOT(recv(const QByteArray&) ) ); 71 m_emu, SLOT(recv(const QByteArray&) ) );
74 QObject::disconnect(m_emu, SIGNAL(send(const QByteArray&) ), 72 QObject::disconnect(m_emu, SIGNAL(send(const QByteArray&) ),
75 m_layer, SLOT(send(const QByteArray&) ) ); 73 m_layer, SLOT(send(const QByteArray&) ) );
76} 74}
77 75
78void Session::setName( const QString& na){ 76void Session::setName( const QString& na){
79 m_name = na; 77 m_name = na;
80} 78}
81 79
82void Session::setWidgetStack( QWidgetStack* wid ) { 80void Session::setWidgetStack( QWidgetStack* wid ) {
83 delete m_emu; 81 delete m_emu;
84 m_emu = 0l; 82 m_emu = 0l;
85 delete m_widget; 83 delete m_widget;
86 /* the EmulationLayer was destroyed... */ 84 /* the EmulationLayer was destroyed... */
87 85
88 m_widget = wid; 86 m_widget = wid;
89} 87}
90void Session::setIOLayer( IOLayer* lay ) { 88void Session::setIOLayer( IOLayer* lay ) {
91 delete m_layer; 89 delete m_layer;
92 m_layer = lay; 90 m_layer = lay;
93} 91}
94 92
95void Session::setEmulationHandler( EmulationHandler* lay ) { 93void Session::setEmulationHandler( EmulationHandler* lay ) {
96 delete m_emu; 94 delete m_emu;
97 m_emu = lay; 95 m_emu = lay;
98} 96}
99void Session::setProfile( const Profile& prof ) { 97void Session::setProfile( const Profile& prof ) {
100 m_prof = prof; 98 m_prof = prof;
101} 99}
102/* 100/*
103void Session::setEmulationWidget( WidgetLayer* lay ) { 101void Session::setEmulationWidget( WidgetLayer* lay ) {
104 delete m_widLay; 102 delete m_widLay;
105 m_widLay = lay; 103 m_widLay = lay;
106} 104}
107*/ 105*/
108void Session::setTransferDialog(QWidget *d) 106void Session::setTransferDialog(QWidget *d)
109{ 107{
110 m_transfer = d; 108 m_transfer = d;
111} 109}
112 110
113QWidget *Session::transferDialog() 111QWidget *Session::transferDialog()
114{ 112{
115 return m_transfer; 113 return m_transfer;
116} 114}
117 115
diff --git a/noncore/apps/opie-console/terminalwidget.cpp b/noncore/apps/opie-console/terminalwidget.cpp
index 70f7c9b..6870487 100644
--- a/noncore/apps/opie-console/terminalwidget.cpp
+++ b/noncore/apps/opie-console/terminalwidget.cpp
@@ -1,203 +1,199 @@
1#include <qbuttongroup.h>
2#include <qlabel.h> 1#include <qlabel.h>
3#include <qcheckbox.h> 2#include <qcheckbox.h>
4#include <qcombobox.h> 3#include <qcombobox.h>
5#include <qradiobutton.h> 4#include <qradiobutton.h>
6#include <qgroupbox.h>
7#include <qvbox.h>
8#include <qhgroupbox.h> 5#include <qhgroupbox.h>
9#include <qhbuttongroup.h> 6#include <qhbuttongroup.h>
10#include <qlayout.h> 7#include <qlayout.h>
11#include <qhbox.h>
12 8
13#include "terminalwidget.h" 9#include "terminalwidget.h"
14 10
15namespace { 11namespace {
16 enum TermIds { 12 enum TermIds {
17 id_term_vt100 = 0, 13 id_term_vt100 = 0,
18 id_term_vt102, 14 id_term_vt102,
19 id_term_linux, 15 id_term_linux,
20 id_term_xterm 16 id_term_xterm
21 }; 17 };
22 18
23 enum ColourIds { 19 enum ColourIds {
24 id_term_black, 20 id_term_black,
25 id_term_white, 21 id_term_white,
26 id_term_green, 22 id_term_green,
27 id_term_orange 23 id_term_orange
28 }; 24 };
29 25
30 enum FontIds { 26 enum FontIds {
31 id_size_small, 27 id_size_small,
32 id_size_medium, 28 id_size_medium,
33 id_size_large 29 id_size_large
34 }; 30 };
35}; 31};
36 32
37TerminalWidget::TerminalWidget( const QString& name, QWidget* parent, 33TerminalWidget::TerminalWidget( const QString& name, QWidget* parent,
38 const char* na ) 34 const char* na )
39 : ProfileDialogTerminalWidget( name, parent, na ) { 35 : ProfileDialogTerminalWidget( name, parent, na ) {
40 36
41 m_terminal = new QLabel(tr("Terminal Type"), this ); 37 m_terminal = new QLabel(tr("Terminal Type"), this );
42 m_terminalBox = new QComboBox(this); 38 m_terminalBox = new QComboBox(this);
43 m_colorLabel = new QLabel(tr("Color scheme"), this); 39 m_colorLabel = new QLabel(tr("Color scheme"), this);
44 m_colorCmb = new QComboBox(this ); 40 m_colorCmb = new QComboBox(this );
45 41
46 m_groupSize = new QHButtonGroup(tr("Font size"), this ); 42 m_groupSize = new QHButtonGroup(tr("Font size"), this );
47 m_sizeSmall = new QRadioButton(tr("small"), m_groupSize ); 43 m_sizeSmall = new QRadioButton(tr("small"), m_groupSize );
48 m_sizeMedium = new QRadioButton(tr("medium"), m_groupSize ); 44 m_sizeMedium = new QRadioButton(tr("medium"), m_groupSize );
49 m_sizeLarge = new QRadioButton(tr("large"), m_groupSize ); 45 m_sizeLarge = new QRadioButton(tr("large"), m_groupSize );
50 46
51 m_groupConv = new QHGroupBox( tr("Line-break conversions"), this ); 47 m_groupConv = new QHGroupBox( tr("Line-break conversions"), this );
52 m_convInbound = new QCheckBox( tr("Inbound"), m_groupConv ); 48 m_convInbound = new QCheckBox( tr("Inbound"), m_groupConv );
53 m_convOutbound = new QCheckBox( tr("Outbound"), m_groupConv ); 49 m_convOutbound = new QCheckBox( tr("Outbound"), m_groupConv );
54 50
55 m_groupOptions = new QHGroupBox( tr("Options"), this ); 51 m_groupOptions = new QHGroupBox( tr("Options"), this );
56 m_optionEcho = new QCheckBox( tr("Local echo"), m_groupOptions ); 52 m_optionEcho = new QCheckBox( tr("Local echo"), m_groupOptions );
57 m_optionWrap = new QCheckBox( tr("Line wrap"), m_groupOptions ); 53 m_optionWrap = new QCheckBox( tr("Line wrap"), m_groupOptions );
58 54
59 m_lroot = new QVBoxLayout( this ); 55 m_lroot = new QVBoxLayout( this );
60 m_typeBox = new QVBoxLayout( m_lroot ); 56 m_typeBox = new QVBoxLayout( m_lroot );
61 m_colorBox = new QVBoxLayout( m_lroot ); 57 m_colorBox = new QVBoxLayout( m_lroot );
62 58
63 // Layout 59 // Layout
64 m_typeBox->add( m_terminal ); 60 m_typeBox->add( m_terminal );
65 m_typeBox->add( m_terminalBox ); 61 m_typeBox->add( m_terminalBox );
66 m_lroot->add( m_groupSize ); 62 m_lroot->add( m_groupSize );
67 63
68 m_colorBox->add( m_colorLabel ); 64 m_colorBox->add( m_colorLabel );
69 m_colorBox->add( m_colorCmb ); 65 m_colorBox->add( m_colorCmb );
70 66
71 m_lroot->add( m_groupConv ); 67 m_lroot->add( m_groupConv );
72 m_lroot->add( m_groupOptions ); 68 m_lroot->add( m_groupOptions );
73 m_lroot->addStretch( 0 ); 69 m_lroot->addStretch( 0 );
74 70
75 // Fill in some options 71 // Fill in some options
76 qWarning("Options for terminal box"); 72 qWarning("Options for terminal box");
77 m_terminalBox->insertItem( tr("VT 100"), 0 ); // /*, id_term_vt100*/ ); 73 m_terminalBox->insertItem( tr("VT 100"), 0 ); // /*, id_term_vt100*/ );
78 m_terminalBox->insertItem( tr("VT 102"), 1 ); // /* , id_term_vt102 */); 74 m_terminalBox->insertItem( tr("VT 102"), 1 ); // /* , id_term_vt102 */);
79 m_terminalBox->insertItem( tr("Linux Console"), 2 ); //, id_term_linux ); 75 m_terminalBox->insertItem( tr("Linux Console"), 2 ); //, id_term_linux );
80 m_terminalBox->insertItem( tr("X-Terminal"), 3 ); //, id_term_xterm ); 76 m_terminalBox->insertItem( tr("X-Terminal"), 3 ); //, id_term_xterm );
81 //m_terminalBox->insertItem( tr("ANSI"), id_term_ansi ); 77 //m_terminalBox->insertItem( tr("ANSI"), id_term_ansi );
82 78
83 m_colorCmb->insertItem( tr("black on white"), id_term_black ); 79 m_colorCmb->insertItem( tr("black on white"), id_term_black );
84 m_colorCmb->insertItem( tr("white on black"), id_term_white ); 80 m_colorCmb->insertItem( tr("white on black"), id_term_white );
85 m_colorCmb->insertItem( tr("green on black"), id_term_green ); 81 m_colorCmb->insertItem( tr("green on black"), id_term_green );
86 m_colorCmb->insertItem( tr("orange on black"), id_term_orange ); 82 m_colorCmb->insertItem( tr("orange on black"), id_term_orange );
87 83
88 // signals + slots 84 // signals + slots
89 /* 85 /*
90 connect(m_terminalBox, SIGNAL(activated(int) ), 86 connect(m_terminalBox, SIGNAL(activated(int) ),
91 this, SLOT(slotTermTerm(int) ) ); 87 this, SLOT(slotTermTerm(int) ) );
92 connect(m_colorBox, SIGNAL(activated(int) ), 88 connect(m_colorBox, SIGNAL(activated(int) ),
93 tis, SLOT(slotTermColor(int) ) ); 89 tis, SLOT(slotTermColor(int) ) );
94 connect(m_groupSize, SIGNAL(activated(int) ), 90 connect(m_groupSize, SIGNAL(activated(int) ),
95 this, SLOT(slotTermFont(int) ) ); 91 this, SLOT(slotTermFont(int) ) );
96 92
97 connect(m_optionEcho, SIGNAL(toggled(bool) ), 93 connect(m_optionEcho, SIGNAL(toggled(bool) ),
98 this, SLOT(slotTermEcho(bool) ) ); 94 this, SLOT(slotTermEcho(bool) ) );
99 connect(m_optionWrap, SIGNAL(toggled(bool) ), 95 connect(m_optionWrap, SIGNAL(toggled(bool) ),
100 this, SLOT(slotTermWrap(bool) ) ); 96 this, SLOT(slotTermWrap(bool) ) );
101 connect(m_convInbound, SIGNAL(toggled(bool) ), 97 connect(m_convInbound, SIGNAL(toggled(bool) ),
102 this, SLOT(slotTermInbound(bool) ) ); 98 this, SLOT(slotTermInbound(bool) ) );
103 connect(m_convOutbound, SIGNAL(toggled(bool) ), 99 connect(m_convOutbound, SIGNAL(toggled(bool) ),
104 this, SLOT(slotTermOutbound(bool) ) ); 100 this, SLOT(slotTermOutbound(bool) ) );
105*/ 101*/
106} 102}
107TerminalWidget::~TerminalWidget() { 103TerminalWidget::~TerminalWidget() {
108} 104}
109void TerminalWidget::load( const Profile& prof ) { 105void TerminalWidget::load( const Profile& prof ) {
110 int term = prof.readNumEntry("Terminal"); 106 int term = prof.readNumEntry("Terminal");
111 int color = prof.readNumEntry("Color"); 107 int color = prof.readNumEntry("Color");
112 int fontsize = prof.readNumEntry("Font"); 108 int fontsize = prof.readNumEntry("Font");
113 int opt_echo = prof.readNumEntry("Echo"); 109 int opt_echo = prof.readNumEntry("Echo");
114 int opt_wrap = prof.readNumEntry("Wrap"); 110 int opt_wrap = prof.readNumEntry("Wrap");
115 int opt_inbound = prof.readNumEntry("Inbound"); 111 int opt_inbound = prof.readNumEntry("Inbound");
116 int opt_outbound = prof.readNumEntry("Outbound"); 112 int opt_outbound = prof.readNumEntry("Outbound");
117 113
118 switch( term ) { 114 switch( term ) {
119 case Profile::VT100: 115 case Profile::VT100:
120 m_terminalBox->setCurrentItem(id_term_vt100 ); 116 m_terminalBox->setCurrentItem(id_term_vt100 );
121 break; 117 break;
122 case Profile::VT102: 118 case Profile::VT102:
123 m_terminalBox->setCurrentItem(id_term_vt102 ); 119 m_terminalBox->setCurrentItem(id_term_vt102 );
124 break; 120 break;
125 case Profile::Linux: 121 case Profile::Linux:
126 m_terminalBox->setCurrentItem(id_term_linux ); 122 m_terminalBox->setCurrentItem(id_term_linux );
127 break; 123 break;
128 case Profile::XTerm: 124 case Profile::XTerm:
129 m_terminalBox->setCurrentItem(id_term_xterm ); 125 m_terminalBox->setCurrentItem(id_term_xterm );
130 break; 126 break;
131 default: 127 default:
132 m_terminalBox->setCurrentItem(id_term_vt102 ); 128 m_terminalBox->setCurrentItem(id_term_vt102 );
133 break; 129 break;
134 }; 130 };
135 131
136 switch( color ) { 132 switch( color ) {
137 case Profile::Black: 133 case Profile::Black:
138 m_colorCmb->setCurrentItem(id_term_black ); 134 m_colorCmb->setCurrentItem(id_term_black );
139 break; 135 break;
140 case Profile::White: 136 case Profile::White:
141 m_colorCmb->setCurrentItem(id_term_white ); 137 m_colorCmb->setCurrentItem(id_term_white );
142 break; 138 break;
143 case Profile::Green: 139 case Profile::Green:
144 m_colorCmb->setCurrentItem(id_term_green ); 140 m_colorCmb->setCurrentItem(id_term_green );
145 break; 141 break;
146 case Profile::Orange: 142 case Profile::Orange:
147 m_colorCmb->setCurrentItem(id_term_orange ); 143 m_colorCmb->setCurrentItem(id_term_orange );
148 break; 144 break;
149 default: 145 default:
150 break; 146 break;
151 }; 147 };
152 148
153 switch( fontsize ) { 149 switch( fontsize ) {
154 case Profile::Micro: 150 case Profile::Micro:
155 m_sizeSmall->setChecked(true ); 151 m_sizeSmall->setChecked(true );
156 break; 152 break;
157 case Profile::Small: 153 case Profile::Small:
158 m_sizeMedium->setChecked(true ); 154 m_sizeMedium->setChecked(true );
159 break; 155 break;
160 case Profile::Medium: 156 case Profile::Medium:
161 m_sizeLarge->setChecked( true ); 157 m_sizeLarge->setChecked( true );
162 break; 158 break;
163 default: 159 default:
164 m_sizeMedium->setChecked(true ); 160 m_sizeMedium->setChecked(true );
165 break; 161 break;
166 }; 162 };
167 163
168 if (opt_echo) m_optionEcho->setChecked( true ); 164 if (opt_echo) m_optionEcho->setChecked( true );
169 if (opt_wrap) m_optionWrap->setChecked( true ); 165 if (opt_wrap) m_optionWrap->setChecked( true );
170 if (opt_inbound) m_convInbound->setChecked( true ); 166 if (opt_inbound) m_convInbound->setChecked( true );
171 if (opt_outbound) m_convOutbound->setChecked( true ); 167 if (opt_outbound) m_convOutbound->setChecked( true );
172 168
173} 169}
174void TerminalWidget::save( Profile& profile ) { 170void TerminalWidget::save( Profile& profile ) {
175 switch(m_terminalBox->currentItem() ) { 171 switch(m_terminalBox->currentItem() ) {
176 case id_term_vt100: 172 case id_term_vt100:
177 profile.writeEntry("Terminal", Profile::VT100 ); 173 profile.writeEntry("Terminal", Profile::VT100 );
178 break; 174 break;
179 case id_term_vt102: 175 case id_term_vt102:
180 profile.writeEntry("Terminal", Profile::VT102 ); 176 profile.writeEntry("Terminal", Profile::VT102 );
181 break; 177 break;
182 case id_term_linux: 178 case id_term_linux:
183 profile.writeEntry("Terminal", Profile::Linux ); 179 profile.writeEntry("Terminal", Profile::Linux );
184 break; 180 break;
185 case id_term_xterm: 181 case id_term_xterm:
186 profile.writeEntry("Terminal", Profile::XTerm ); 182 profile.writeEntry("Terminal", Profile::XTerm );
187 break; 183 break;
188 //case id_term_ansi: 184 //case id_term_ansi:
189 // profile.writeEntry("Terminal", Profile::VT102 ); 185 // profile.writeEntry("Terminal", Profile::VT102 );
190 // break; 186 // break;
191 default: 187 default:
192 break; 188 break;
193 }; 189 };
194 190
195 // color 191 // color
196 switch(m_colorCmb->currentItem() ) { 192 switch(m_colorCmb->currentItem() ) {
197 case id_term_black: 193 case id_term_black:
198 profile.writeEntry("Color", Profile::Black ); 194 profile.writeEntry("Color", Profile::Black );
199 break; 195 break;
200 case id_term_white: 196 case id_term_white:
201 profile.writeEntry("Color", Profile::White ); 197 profile.writeEntry("Color", Profile::White );
202 break; 198 break;
203 case id_term_green: 199 case id_term_green:
diff --git a/noncore/apps/opie-console/transferdialog.cpp b/noncore/apps/opie-console/transferdialog.cpp
index 0af1911..55dd748 100644
--- a/noncore/apps/opie-console/transferdialog.cpp
+++ b/noncore/apps/opie-console/transferdialog.cpp
@@ -1,206 +1,204 @@
1#include <qlayout.h> 1#include <qlayout.h>
2#include <qcombobox.h> 2#include <qcombobox.h>
3#include <qlabel.h> 3#include <qlabel.h>
4#include <qlineedit.h> 4#include <qlineedit.h>
5#include <qpushbutton.h> 5#include <qpushbutton.h>
6#include <qmessagebox.h> 6#include <qmessagebox.h>
7#include <qprogressbar.h> 7#include <qprogressbar.h>
8#include <qradiobutton.h> 8#include <qradiobutton.h>
9#include <qbuttongroup.h> 9#include <qbuttongroup.h>
10 10
11#include <opie/ofiledialog.h> 11#include <opie/ofiledialog.h>
12 12
13#include "file_layer.h"
14#include "receive_layer.h"
15#include "metafactory.h" 13#include "metafactory.h"
16#include "mainwindow.h" 14#include "mainwindow.h"
17 15
18#include "transferdialog.h" 16#include "transferdialog.h"
19 17
20TransferDialog::TransferDialog(QWidget *parent, MainWindow *mainwindow, const char *) 18TransferDialog::TransferDialog(QWidget *parent, MainWindow *mainwindow, const char *)
21: QDialog(parent, 0l, false), m_win(mainwindow) 19: QDialog(parent, 0l, false), m_win(mainwindow)
22{ 20{
23 m_lay = 0l; 21 m_lay = 0l;
24 m_recvlay = 0l; 22 m_recvlay = 0l;
25 QVBoxLayout *vbox, *vbox2; 23 QVBoxLayout *vbox, *vbox2;
26 QHBoxLayout *hbox, *hbox2, *hbox3; 24 QHBoxLayout *hbox, *hbox2, *hbox3;
27 QLabel *file, *mode, *progress, *status; 25 QLabel *file, *mode, *progress, *status;
28 QButtonGroup *group; 26 QButtonGroup *group;
29 QRadioButton *mode_send, *mode_receive; 27 QRadioButton *mode_send, *mode_receive;
30 28
31 m_autocleanup = 0; 29 m_autocleanup = 0;
32 m_running = true; 30 m_running = true;
33 31
34 group = new QButtonGroup(QObject::tr("Transfer mode"), this); 32 group = new QButtonGroup(QObject::tr("Transfer mode"), this);
35 mode_send = new QRadioButton(QObject::tr("Send"), group); 33 mode_send = new QRadioButton(QObject::tr("Send"), group);
36 mode_receive = new QRadioButton(QObject::tr("Receive"), group); 34 mode_receive = new QRadioButton(QObject::tr("Receive"), group);
37 group->insert(mode_send, id_send); 35 group->insert(mode_send, id_send);
38 group->insert(mode_receive, id_receive); 36 group->insert(mode_receive, id_receive);
39 vbox2 = new QVBoxLayout(group, 2); 37 vbox2 = new QVBoxLayout(group, 2);
40 vbox2->addSpacing(10); 38 vbox2->addSpacing(10);
41 hbox3 = new QHBoxLayout(vbox2, 2); 39 hbox3 = new QHBoxLayout(vbox2, 2);
42 hbox3->add(mode_send); 40 hbox3->add(mode_send);
43 hbox3->add(mode_receive); 41 hbox3->add(mode_receive);
44 mode_send->setChecked(true); 42 mode_send->setChecked(true);
45 m_transfermode = id_send; 43 m_transfermode = id_send;
46 44
47 file = new QLabel(QObject::tr("Send file"), this); 45 file = new QLabel(QObject::tr("Send file"), this);
48 mode = new QLabel(QObject::tr("Transfer protocol"), this); 46 mode = new QLabel(QObject::tr("Transfer protocol"), this);
49 progress = new QLabel(QObject::tr("Progress"), this); 47 progress = new QLabel(QObject::tr("Progress"), this);
50 status = new QLabel(QObject::tr("Status"), this); 48 status = new QLabel(QObject::tr("Status"), this);
51 49
52 statusbar = new QLabel(QObject::tr("Ready"), this); 50 statusbar = new QLabel(QObject::tr("Ready"), this);
53 statusbar->setFrameStyle(QFrame::Panel | QFrame::Sunken); 51 statusbar->setFrameStyle(QFrame::Panel | QFrame::Sunken);
54 52
55 protocol = new QComboBox(this); 53 protocol = new QComboBox(this);
56 QStringList list = m_win->factory()->fileTransferLayers(); 54 QStringList list = m_win->factory()->fileTransferLayers();
57 for (QStringList::Iterator it = list.begin(); it != list.end(); ++it) 55 for (QStringList::Iterator it = list.begin(); it != list.end(); ++it)
58 protocol->insertItem((*it)); 56 protocol->insertItem((*it));
59 57
60 filename = new QLineEdit(this); 58 filename = new QLineEdit(this);
61 59
62 progressbar = new QProgressBar(this); 60 progressbar = new QProgressBar(this);
63 progressbar->setProgress(0); 61 progressbar->setProgress(0);
64 62
65 selector = new QPushButton("...", this); 63 selector = new QPushButton("...", this);
66 ok = new QPushButton(QObject::tr("Start transfer"), this); 64 ok = new QPushButton(QObject::tr("Start transfer"), this);
67 cancel = new QPushButton(QObject::tr("Cancel"), this); 65 cancel = new QPushButton(QObject::tr("Cancel"), this);
68 66
69 vbox = new QVBoxLayout(this, 2); 67 vbox = new QVBoxLayout(this, 2);
70 vbox->add(group); 68 vbox->add(group);
71 vbox->add(file); 69 vbox->add(file);
72 hbox = new QHBoxLayout(vbox, 0); 70 hbox = new QHBoxLayout(vbox, 0);
73 hbox->add(filename); 71 hbox->add(filename);
74 hbox->add(selector); 72 hbox->add(selector);
75 vbox->add(mode); 73 vbox->add(mode);
76 vbox->add(protocol); 74 vbox->add(protocol);
77 vbox->add(progress); 75 vbox->add(progress);
78 vbox->add(progressbar); 76 vbox->add(progressbar);
79 vbox->add(status); 77 vbox->add(status);
80 vbox->add(statusbar); 78 vbox->add(statusbar);
81 vbox->addStretch(1); 79 vbox->addStretch(1);
82 hbox2 = new QHBoxLayout(vbox, 2); 80 hbox2 = new QHBoxLayout(vbox, 2);
83 hbox2->add(ok); 81 hbox2->add(ok);
84 hbox2->add(cancel); 82 hbox2->add(cancel);
85 83
86 setCaption(QObject::tr("File transfer")); 84 setCaption(QObject::tr("File transfer"));
87 show(); 85 show();
88 86
89 connect(selector, SIGNAL(clicked()), SLOT(slotFilename())); 87 connect(selector, SIGNAL(clicked()), SLOT(slotFilename()));
90 connect(ok, SIGNAL(clicked()), SLOT(slotTransfer())); 88 connect(ok, SIGNAL(clicked()), SLOT(slotTransfer()));
91 connect(cancel, SIGNAL(clicked()), SLOT(slotCancel())); 89 connect(cancel, SIGNAL(clicked()), SLOT(slotCancel()));
92 connect(group, SIGNAL(clicked(int)), SLOT(slotMode(int))); 90 connect(group, SIGNAL(clicked(int)), SLOT(slotMode(int)));
93} 91}
94 92
95TransferDialog::~TransferDialog() 93TransferDialog::~TransferDialog()
96{ 94{
97} 95}
98 96
99void TransferDialog::slotFilename() 97void TransferDialog::slotFilename()
100{ 98{
101 QString f; 99 QString f;
102 100
103 f = OFileDialog::getOpenFileName(0); 101 f = OFileDialog::getOpenFileName(0);
104 if(!f.isNull()) filename->setText(f); 102 if(!f.isNull()) filename->setText(f);
105} 103}
106 104
107void TransferDialog::slotTransfer() 105void TransferDialog::slotTransfer()
108{ 106{
109 if((m_transfermode == id_send) && (filename->text().isEmpty())) 107 if((m_transfermode == id_send) && (filename->text().isEmpty()))
110 { 108 {
111 QMessageBox::information(this, 109 QMessageBox::information(this,
112 QObject::tr("Attention"), 110 QObject::tr("Attention"),
113 QObject::tr("No file has been specified.")); 111 QObject::tr("No file has been specified."));
114 return; 112 return;
115 } 113 }
116 114
117 ok->setEnabled(false); 115 ok->setEnabled(false);
118 116
119 cleanup(); 117 cleanup();
120 m_autocleanup = 0; 118 m_autocleanup = 0;
121 119
122 if(m_transfermode == id_send) statusbar->setText(QObject::tr("Sending...")); 120 if(m_transfermode == id_send) statusbar->setText(QObject::tr("Sending..."));
123 else statusbar->setText(QObject::tr("Receiving...")); 121 else statusbar->setText(QObject::tr("Receiving..."));
124 122
125 if(m_transfermode == id_send) 123 if(m_transfermode == id_send)
126 { 124 {
127 m_lay = m_win->factory()->newFileTransfer(protocol->currentText(), m_win->currentSession()->layer()); 125 m_lay = m_win->factory()->newFileTransfer(protocol->currentText(), m_win->currentSession()->layer());
128 m_lay->sendFile(filename->text()); 126 m_lay->sendFile(filename->text());
129 127
130 connect(m_lay, SIGNAL(progress(const QString&, int, int, int, int, int)), 128 connect(m_lay, SIGNAL(progress(const QString&, int, int, int, int, int)),
131 SLOT(slotProgress(const QString&, int, int, int, int, int))); 129 SLOT(slotProgress(const QString&, int, int, int, int, int)));
132 connect(m_lay, SIGNAL(error(int, const QString&)), SLOT(slotError(int, const QString&))); 130 connect(m_lay, SIGNAL(error(int, const QString&)), SLOT(slotError(int, const QString&)));
133 connect(m_lay, SIGNAL(sent()), SLOT(slotSent())); 131 connect(m_lay, SIGNAL(sent()), SLOT(slotSent()));
134 } 132 }
135 else 133 else
136 { 134 {
137 m_recvlay = m_win->factory()->newReceive(protocol->currentText(), m_win->currentSession()->layer()); 135 m_recvlay = m_win->factory()->newReceive(protocol->currentText(), m_win->currentSession()->layer());
138 m_recvlay->receive(); 136 m_recvlay->receive();
139 137
140 connect(m_recvlay, SIGNAL(progress(const QString&, int, int, int, int, int)), 138 connect(m_recvlay, SIGNAL(progress(const QString&, int, int, int, int, int)),
141 SLOT(slotProgress(const QString&, int, int, int, int, int))); 139 SLOT(slotProgress(const QString&, int, int, int, int, int)));
142 connect(m_recvlay, SIGNAL(error(int, const QString&)), SLOT(slotError(int, const QString&))); 140 connect(m_recvlay, SIGNAL(error(int, const QString&)), SLOT(slotError(int, const QString&)));
143 connect(m_recvlay, SIGNAL(received(const QString&)), SLOT(slotReceived(const QString&))); 141 connect(m_recvlay, SIGNAL(received(const QString&)), SLOT(slotReceived(const QString&)));
144 } 142 }
145} 143}
146 144
147void TransferDialog::cleanup() 145void TransferDialog::cleanup()
148{ 146{
149 if(m_lay) 147 if(m_lay)
150 { 148 {
151 m_lay->cancel(); 149 m_lay->cancel();
152 delete m_lay; 150 delete m_lay;
153 m_lay = 0l; 151 m_lay = 0l;
154 } 152 }
155 if(m_recvlay) 153 if(m_recvlay)
156 { 154 {
157 m_recvlay->cancel(); 155 m_recvlay->cancel();
158 delete m_recvlay; 156 delete m_recvlay;
159 m_recvlay = 0l; 157 m_recvlay = 0l;
160 } 158 }
161} 159}
162 160
163void TransferDialog::slotCancel() 161void TransferDialog::slotCancel()
164{ 162{
165 ok->setEnabled(true); 163 ok->setEnabled(true);
166 statusbar->setText(QObject::tr("Ready")); 164 statusbar->setText(QObject::tr("Ready"));
167 165
168 if((m_lay) || (m_recvlay)) 166 if((m_lay) || (m_recvlay))
169 { 167 {
170 cleanup(); 168 cleanup();
171 if(m_autocleanup) 169 if(m_autocleanup)
172 { 170 {
173 m_running = false; 171 m_running = false;
174 close(); 172 close();
175 } 173 }
176 else 174 else
177 { 175 {
178 QMessageBox::information(this, 176 QMessageBox::information(this,
179 QObject::tr("Cancelled"), 177 QObject::tr("Cancelled"),
180 QObject::tr("The file transfer has been cancelled.")); 178 QObject::tr("The file transfer has been cancelled."));
181 } 179 }
182 } 180 }
183 else 181 else
184 { 182 {
185 m_running = false; 183 m_running = false;
186 close(); 184 close();
187 } 185 }
188} 186}
189 187
190void TransferDialog::slotProgress(const QString& , int progress, int , int , int, int ) 188void TransferDialog::slotProgress(const QString& , int progress, int , int , int, int )
191{ 189{
192 progressbar->setProgress(progress); 190 progressbar->setProgress(progress);
193} 191}
194 192
195void TransferDialog::slotError(int error, const QString& ) 193void TransferDialog::slotError(int error, const QString& )
196{ 194{
197 statusbar->setText(QObject::tr("Ready")); 195 statusbar->setText(QObject::tr("Ready"));
198 196
199 switch(error) 197 switch(error)
200 { 198 {
201 case FileTransferLayer::NotSupported: 199 case FileTransferLayer::NotSupported:
202 QMessageBox::critical(this, 200 QMessageBox::critical(this,
203 QObject::tr("Error"), 201 QObject::tr("Error"),
204 QObject::tr("Operation not supported.")); 202 QObject::tr("Operation not supported."));
205 break; 203 break;
206 case FileTransferLayer::StartError: 204 case FileTransferLayer::StartError:
diff --git a/noncore/apps/opie-console/vt102emulation.cpp b/noncore/apps/opie-console/vt102emulation.cpp
index 0ebefa0..35b789c 100644
--- a/noncore/apps/opie-console/vt102emulation.cpp
+++ b/noncore/apps/opie-console/vt102emulation.cpp
@@ -1,226 +1,221 @@
1/* ------------------------------------------------------------------------- */ 1/* ------------------------------------------------------------------------- */
2/* */ 2/* */
3/* [vt102emulation.cpp] VT102 Terminal Emulation */ 3/* [vt102emulation.cpp] VT102 Terminal Emulation */
4/* */ 4/* */
5/* ------------------------------------------------------------------------- */ 5/* ------------------------------------------------------------------------- */
6/* */ 6/* */
7/* Copyright (c) 1997,1998 by Lars Doelle <lars.doelle@on-line.de> */ 7/* Copyright (c) 1997,1998 by Lars Doelle <lars.doelle@on-line.de> */
8/* */ 8/* */
9/* This file is part of Konsole - an X terminal for KDE */ 9/* This file is part of Konsole - an X terminal for KDE */
10/* */ 10/* */
11/* ------------------------------------------------------------------------- */ 11/* ------------------------------------------------------------------------- */
12/* */ 12/* */
13/* Ported Konsole to Qt/Embedded */ 13/* Ported Konsole to Qt/Embedded */
14/* */ 14/* */
15/* Copyright (C) 2000 by John Ryland <jryland@trolltech.com> */ 15/* Copyright (C) 2000 by John Ryland <jryland@trolltech.com> */
16/* */ 16/* */
17/* -------------------------------------------------------------------------- */ 17/* -------------------------------------------------------------------------- */
18 18
19/*! \class Vt102Emulation 19/*! \class Vt102Emulation
20 20
21 \brief Actual Emulation for Konsole 21 \brief Actual Emulation for Konsole
22 22
23 \sa Widget \sa Screen \sa EmulationLayer 23 \sa Widget \sa Screen \sa EmulationLayer
24*/ 24*/
25 25
26#include "vt102emulation.h" 26#include "vt102emulation.h"
27#include "widget_layer.h"
28#include "screen.h"
29#include "keytrans.h"
30 27
31#include <stdio.h> 28#include <stdio.h>
32#include <unistd.h> 29#include <unistd.h>
33#include <qkeycode.h>
34#include <qtextcodec.h>
35 30
36 31
37/* VT102 Terminal Emulation 32/* VT102 Terminal Emulation
38 33
39 This class puts together the screens, the pty and the widget to a 34 This class puts together the screens, the pty and the widget to a
40 complete terminal emulation. Beside combining it's componentes, it 35 complete terminal emulation. Beside combining it's componentes, it
41 handles the emulations's protocol. 36 handles the emulations's protocol.
42 37
43 This module consists of the following sections: 38 This module consists of the following sections:
44 39
45 - Constructor/Destructor 40 - Constructor/Destructor
46 - Incoming Bytes Event pipeline 41 - Incoming Bytes Event pipeline
47 - Outgoing Bytes 42 - Outgoing Bytes
48 - Mouse Events 43 - Mouse Events
49 - Keyboard Events 44 - Keyboard Events
50 - Modes and Charset State 45 - Modes and Charset State
51 - Diagnostics 46 - Diagnostics
52*/ 47*/
53 48
54 49
55/* ------------------------------------------------------------------------- */ 50/* ------------------------------------------------------------------------- */
56/* */ 51/* */
57/* Constructor / Destructor */ 52/* Constructor / Destructor */
58/* */ 53/* */
59/* ------------------------------------------------------------------------- */ 54/* ------------------------------------------------------------------------- */
60 55
61/* 56/*
62 Nothing really intesting happens here. 57 Nothing really intesting happens here.
63*/ 58*/
64 59
65/*! 60/*!
66*/ 61*/
67 62
68Vt102Emulation::Vt102Emulation(WidgetLayer* gui) : EmulationLayer(gui) 63Vt102Emulation::Vt102Emulation(WidgetLayer* gui) : EmulationLayer(gui)
69{ 64{
70 QObject::connect(gui,SIGNAL(mouseSignal(int,int,int)), 65 QObject::connect(gui,SIGNAL(mouseSignal(int,int,int)),
71 this,SLOT(onMouse(int,int,int))); 66 this,SLOT(onMouse(int,int,int)));
72 initTokenizer(); 67 initTokenizer();
73 reset(); 68 reset();
74} 69}
75 70
76/*! 71/*!
77*/ 72*/
78 73
79Vt102Emulation::~Vt102Emulation() 74Vt102Emulation::~Vt102Emulation()
80{ 75{
81} 76}
82 77
83/*! 78/*!
84*/ 79*/
85 80
86void Vt102Emulation::reset() 81void Vt102Emulation::reset()
87{ 82{
88 resetToken(); 83 resetToken();
89 resetModes(); 84 resetModes();
90 resetCharset(0); screen[0]->reset(); 85 resetCharset(0); screen[0]->reset();
91 resetCharset(1); screen[0]->reset(); 86 resetCharset(1); screen[0]->reset();
92 setCodec(0); 87 setCodec(0);
93 setKeytrans("linux.keytab"); 88 setKeytrans("linux.keytab");
94} 89}
95 90
96/* ------------------------------------------------------------------------- */ 91/* ------------------------------------------------------------------------- */
97/* */ 92/* */
98/* Processing the incoming byte stream */ 93/* Processing the incoming byte stream */
99/* */ 94/* */
100/* ------------------------------------------------------------------------- */ 95/* ------------------------------------------------------------------------- */
101 96
102/* Incoming Bytes Event pipeline 97/* Incoming Bytes Event pipeline
103 98
104 This section deals with decoding the incoming character stream. 99 This section deals with decoding the incoming character stream.
105 Decoding means here, that the stream is first seperated into `tokens' 100 Decoding means here, that the stream is first seperated into `tokens'
106 which are then mapped to a `meaning' provided as operations by the 101 which are then mapped to a `meaning' provided as operations by the
107 `TEScreen' class or by the emulation class itself. 102 `TEScreen' class or by the emulation class itself.
108 103
109 The pipeline proceeds as follows: 104 The pipeline proceeds as follows:
110 105
111 - Tokenizing the ESC codes (onRcvChar) 106 - Tokenizing the ESC codes (onRcvChar)
112 - VT100 code page translation of plain characters (applyCharset) 107 - VT100 code page translation of plain characters (applyCharset)
113 - Interpretation of ESC codes (tau) 108 - Interpretation of ESC codes (tau)
114 109
115 The escape codes and their meaning are described in the 110 The escape codes and their meaning are described in the
116 technical reference of this program. 111 technical reference of this program.
117*/ 112*/
118 113
119// Tokens ------------------------------------------------------------------ -- 114// Tokens ------------------------------------------------------------------ --
120 115
121/* 116/*
122 Since the tokens are the central notion if this section, we've put them 117 Since the tokens are the central notion if this section, we've put them
123 in front. They provide the syntactical elements used to represent the 118 in front. They provide the syntactical elements used to represent the
124 terminals operations as byte sequences. 119 terminals operations as byte sequences.
125 120
126 They are encodes here into a single machine word, so that we can later 121 They are encodes here into a single machine word, so that we can later
127 switch over them easily. Depending on the token itself, additional 122 switch over them easily. Depending on the token itself, additional
128 argument variables are filled with parameter values. 123 argument variables are filled with parameter values.
129 124
130 The tokens are defined below: 125 The tokens are defined below:
131 126
132 - CHR - Printable characters (32..255 but DEL (=127)) 127 - CHR - Printable characters (32..255 but DEL (=127))
133 - CTL - Control characters (0..31 but ESC (= 27), DEL) 128 - CTL - Control characters (0..31 but ESC (= 27), DEL)
134 - ESC - Escape codes of the form <ESC><CHR but `[]()+*#'> 129 - ESC - Escape codes of the form <ESC><CHR but `[]()+*#'>
135 - ESC_DE - Escape codes of the form <ESC><any of `()+*#%'> C 130 - ESC_DE - Escape codes of the form <ESC><any of `()+*#%'> C
136 - CSI_PN - Escape codes of the form <ESC>'[' {Pn} ';' {Pn} C 131 - CSI_PN - Escape codes of the form <ESC>'[' {Pn} ';' {Pn} C
137 - CSI_PS - Escape codes of the form <ESC>'[' {Pn} ';' ... C 132 - CSI_PS - Escape codes of the form <ESC>'[' {Pn} ';' ... C
138 - CSI_PR - Escape codes of the form <ESC>'[' '?' {Pn} ';' ... C 133 - CSI_PR - Escape codes of the form <ESC>'[' '?' {Pn} ';' ... C
139 - VT52 - VT52 escape codes 134 - VT52 - VT52 escape codes
140 - <ESC><Chr> 135 - <ESC><Chr>
141 - <ESC>'Y'{Pc}{Pc} 136 - <ESC>'Y'{Pc}{Pc}
142 - XTE_HA - Xterm hacks <ESC>`]' {Pn} `;' {Text} <BEL> 137 - XTE_HA - Xterm hacks <ESC>`]' {Pn} `;' {Text} <BEL>
143 note that this is handled differently 138 note that this is handled differently
144 139
145 The last two forms allow list of arguments. Since the elements of 140 The last two forms allow list of arguments. Since the elements of
146 the lists are treated individually the same way, they are passed 141 the lists are treated individually the same way, they are passed
147 as individual tokens to the interpretation. Further, because the 142 as individual tokens to the interpretation. Further, because the
148 meaning of the parameters are names (althought represented as numbers), 143 meaning of the parameters are names (althought represented as numbers),
149 they are includes within the token ('N'). 144 they are includes within the token ('N').
150 145
151*/ 146*/
152 147
153#define TY_CONSTR(T,A,N) ( ((((int)N) & 0xffff) << 16) | ((((int)A) & 0xff) << 8) | (((int)T) & 0xff) ) 148#define TY_CONSTR(T,A,N) ( ((((int)N) & 0xffff) << 16) | ((((int)A) & 0xff) << 8) | (((int)T) & 0xff) )
154 149
155#define TY_CHR___( ) TY_CONSTR(0,0,0) 150#define TY_CHR___( ) TY_CONSTR(0,0,0)
156#define TY_CTL___(A ) TY_CONSTR(1,A,0) 151#define TY_CTL___(A ) TY_CONSTR(1,A,0)
157#define TY_ESC___(A ) TY_CONSTR(2,A,0) 152#define TY_ESC___(A ) TY_CONSTR(2,A,0)
158#define TY_ESC_CS(A,B) TY_CONSTR(3,A,B) 153#define TY_ESC_CS(A,B) TY_CONSTR(3,A,B)
159#define TY_ESC_DE(A ) TY_CONSTR(4,A,0) 154#define TY_ESC_DE(A ) TY_CONSTR(4,A,0)
160#define TY_CSI_PS(A,N) TY_CONSTR(5,A,N) 155#define TY_CSI_PS(A,N) TY_CONSTR(5,A,N)
161#define TY_CSI_PN(A ) TY_CONSTR(6,A,0) 156#define TY_CSI_PN(A ) TY_CONSTR(6,A,0)
162#define TY_CSI_PR(A,N) TY_CONSTR(7,A,N) 157#define TY_CSI_PR(A,N) TY_CONSTR(7,A,N)
163 158
164#define TY_VT52__(A ) TY_CONSTR(8,A,0) 159#define TY_VT52__(A ) TY_CONSTR(8,A,0)
165 160
166// Tokenizer --------------------------------------------------------------- -- 161// Tokenizer --------------------------------------------------------------- --
167 162
168/* The tokenizers state 163/* The tokenizers state
169 164
170 The state is represented by the buffer (pbuf, ppos), 165 The state is represented by the buffer (pbuf, ppos),
171 and accompanied by decoded arguments kept in (argv,argc). 166 and accompanied by decoded arguments kept in (argv,argc).
172 Note that they are kept internal in the tokenizer. 167 Note that they are kept internal in the tokenizer.
173*/ 168*/
174 169
175void Vt102Emulation::resetToken() 170void Vt102Emulation::resetToken()
176{ 171{
177 ppos = 0; argc = 0; argv[0] = 0; argv[1] = 0; 172 ppos = 0; argc = 0; argv[0] = 0; argv[1] = 0;
178} 173}
179 174
180void Vt102Emulation::addDigit(int dig) 175void Vt102Emulation::addDigit(int dig)
181{ 176{
182 argv[argc] = 10*argv[argc] + dig; 177 argv[argc] = 10*argv[argc] + dig;
183} 178}
184 179
185void Vt102Emulation::addArgument() 180void Vt102Emulation::addArgument()
186{ 181{
187 argc = QMIN(argc+1,MAXARGS-1); 182 argc = QMIN(argc+1,MAXARGS-1);
188 argv[argc] = 0; 183 argv[argc] = 0;
189} 184}
190 185
191void Vt102Emulation::pushToToken(int cc) 186void Vt102Emulation::pushToToken(int cc)
192{ 187{
193 pbuf[ppos] = cc; 188 pbuf[ppos] = cc;
194 ppos = QMIN(ppos+1,MAXPBUF-1); 189 ppos = QMIN(ppos+1,MAXPBUF-1);
195} 190}
196 191
197// Character Classes used while decoding 192// Character Classes used while decoding
198 193
199#define CTL 1 194#define CTL 1
200#define CHR 2 195#define CHR 2
201#define CPN 4 196#define CPN 4
202#define DIG 8 197#define DIG 8
203#define SCS 16 198#define SCS 16
204#define GRP 32 199#define GRP 32
205 200
206void Vt102Emulation::initTokenizer() 201void Vt102Emulation::initTokenizer()
207{ int i; UINT8* s; 202{ int i; UINT8* s;
208 for(i = 0; i < 256; i++) tbl[ i] = 0; 203 for(i = 0; i < 256; i++) tbl[ i] = 0;
209 for(i = 0; i < 32; i++) tbl[ i] |= CTL; 204 for(i = 0; i < 32; i++) tbl[ i] |= CTL;
210 for(i = 32; i < 256; i++) tbl[ i] |= CHR; 205 for(i = 32; i < 256; i++) tbl[ i] |= CHR;
211 for(s = (UINT8*)"@ABCDGHLMPXcdfry"; *s; s++) tbl[*s] |= CPN; 206 for(s = (UINT8*)"@ABCDGHLMPXcdfry"; *s; s++) tbl[*s] |= CPN;
212 for(s = (UINT8*)"0123456789" ; *s; s++) tbl[*s] |= DIG; 207 for(s = (UINT8*)"0123456789" ; *s; s++) tbl[*s] |= DIG;
213 for(s = (UINT8*)"()+*%" ; *s; s++) tbl[*s] |= SCS; 208 for(s = (UINT8*)"()+*%" ; *s; s++) tbl[*s] |= SCS;
214 for(s = (UINT8*)"()+*#[]%" ; *s; s++) tbl[*s] |= GRP; 209 for(s = (UINT8*)"()+*#[]%" ; *s; s++) tbl[*s] |= GRP;
215 resetToken(); 210 resetToken();
216} 211}
217 212
218/* Ok, here comes the nasty part of the decoder. 213/* Ok, here comes the nasty part of the decoder.
219 214
220 Instead of keeping an explicit state, we deduce it from the 215 Instead of keeping an explicit state, we deduce it from the
221 token scanned so far. It is then immediately combined with 216 token scanned so far. It is then immediately combined with
222 the current character to form a scanning decision. 217 the current character to form a scanning decision.
223 218
224 This is done by the following defines. 219 This is done by the following defines.
225 220
226 - P is the length of the token scanned so far. 221 - P is the length of the token scanned so far.
diff --git a/noncore/apps/opie-console/widget.cpp b/noncore/apps/opie-console/widget.cpp
index 10045c6..e17dfd4 100644
--- a/noncore/apps/opie-console/widget.cpp
+++ b/noncore/apps/opie-console/widget.cpp
@@ -1,269 +1,261 @@
1/* ------------------------------------------------------------------------ */ 1/* ------------------------------------------------------------------------ */
2/* */ 2/* */
3/* [TEWidget.C] Terminal Emulation Widget */ 3/* [TEWidget.C] Terminal Emulation Widget */
4/* */ 4/* */
5/* ------------------------------------------------------------------------ */ 5/* ------------------------------------------------------------------------ */
6/* */ 6/* */
7/* Copyright (c) 1997,1998 by Lars Doelle <lars.doelle@on-line.de> */ 7/* Copyright (c) 1997,1998 by Lars Doelle <lars.doelle@on-line.de> */
8/* */ 8/* */
9/* This file is part of Konsole - an X terminal for KDE */ 9/* This file is part of Konsole - an X terminal for KDE */
10/* */ 10/* */
11/* ------------------------------------------------------------------------ */ 11/* ------------------------------------------------------------------------ */
12/* */ 12/* */
13/* Ported Konsole to Qt/Embedded */ 13/* Ported Konsole to Qt/Embedded */
14/* */ 14/* */
15/* Copyright (C) 2000 by John Ryland <jryland@trolltech.com> */ 15/* Copyright (C) 2000 by John Ryland <jryland@trolltech.com> */
16/* */ 16/* */
17/* -------------------------------------------------------------------------- */ 17/* -------------------------------------------------------------------------- */
18 18
19/* ibot: 19/* ibot:
20 i changed 20 i changed
21 "currentSession->getEmulation()->sendString()" to 21 "currentSession->getEmulation()->sendString()" to
22 "currentSession->layer()->send()" 22 "currentSession->layer()->send()"
23 # this is not right! EmulationLayer should send it... 23 # this is not right! EmulationLayer should send it...
24 i changed all those to use emulationLayer()->send() instead 24 i changed all those to use emulationLayer()->send() instead
25 i had to create a QByteArray before... 25 i had to create a QByteArray before...
26 26
27TODO: 27TODO:
28alter Widget to use only QByteArray, where applicable. 28alter Widget to use only QByteArray, where applicable.
29*/ 29*/
30 30
31 31
32 32
33/*! \class Widget 33/*! \class Widget
34 34
35 \brief Visible screen contents 35 \brief Visible screen contents
36 36
37 This class is responsible to map the `image' of a terminal emulation to the 37 This class is responsible to map the `image' of a terminal emulation to the
38 display. All the dependency of the emulation to a specific GUI or toolkit is 38 display. All the dependency of the emulation to a specific GUI or toolkit is
39 localized here. Further, this widget has no knowledge about being part of an 39 localized here. Further, this widget has no knowledge about being part of an
40 emulation, it simply work within the terminal emulation framework by exposing 40 emulation, it simply work within the terminal emulation framework by exposing
41 size and key events and by being ordered to show a new image. 41 size and key events and by being ordered to show a new image.
42 42
43 <ul> 43 <ul>
44 <li> The internal image has the size of the widget (evtl. rounded up) 44 <li> The internal image has the size of the widget (evtl. rounded up)
45 <li> The external image used in setImage can have any size. 45 <li> The external image used in setImage can have any size.
46 <li> (internally) the external image is simply copied to the internal 46 <li> (internally) the external image is simply copied to the internal
47 when a setImage happens. During a resizeEvent no painting is done 47 when a setImage happens. During a resizeEvent no painting is done
48 a paintEvent is expected to follow anyway. 48 a paintEvent is expected to follow anyway.
49 </ul> 49 </ul>
50 50
51 \sa TEScreen \sa Emulation 51 \sa TEScreen \sa Emulation
52*/ 52*/
53 53
54/* FIXME: 54/* FIXME:
55 - 'image' may also be used uninitialized (it isn't in fact) in resizeEvent 55 - 'image' may also be used uninitialized (it isn't in fact) in resizeEvent
56 - 'font_a' not used in mouse events 56 - 'font_a' not used in mouse events
57 - add destructor 57 - add destructor
58*/ 58*/
59 59
60/* TODO 60/* TODO
61 - evtl. be sensitive to `paletteChange' while using default colors. 61 - evtl. be sensitive to `paletteChange' while using default colors.
62 - set different 'rounding' styles? I.e. have a mode to show clipped chars? 62 - set different 'rounding' styles? I.e. have a mode to show clipped chars?
63*/ 63*/
64 64
65// #include "config.h" 65// #include "config.h"
66#include "widget.h" 66#include "widget.h"
67#include "session.h"
68#include <qpe/config.h> 67#include <qpe/config.h>
69#include <qapplication.h>
70 68
71#include <qcursor.h>
72#include <qregexp.h>
73#include <qpainter.h>
74#include <qclipboard.h> 69#include <qclipboard.h>
75#include <qstyle.h>
76#include <qfile.h>
77#include <qdragobject.h>
78 70
79#include <stdio.h> 71#include <stdio.h>
80#include <stdlib.h> 72#include <stdlib.h>
81#include <unistd.h> 73#include <unistd.h>
82#include <ctype.h> 74#include <ctype.h>
83#include <sys/stat.h> 75#include <sys/stat.h>
84#include <sys/types.h> 76#include <sys/types.h>
85#include <signal.h> 77#include <signal.h>
86 78
87#include <assert.h> 79#include <assert.h>
88 80
89// #include "widget.moc" 81// #include "widget.moc"
90//#include <kapp.h> 82//#include <kapp.h>
91//#include <kcursor.h> 83//#include <kcursor.h>
92//#include <kurl.h> 84//#include <kurl.h>
93//#include <kdebug.h> 85//#include <kdebug.h>
94//#include <klocale.h> 86//#include <klocale.h>
95 87
96#define HERE printf("%s(%d): %s\n",__FILE__,__LINE__,__FUNCTION__) 88#define HERE printf("%s(%d): %s\n",__FILE__,__LINE__,__FUNCTION__)
97#define HCNT(Name) // { static int cnt = 1; printf("%s(%d): %s %d\n",__FILE__,__LINE__,Name,cnt++); } 89#define HCNT(Name) // { static int cnt = 1; printf("%s(%d): %s %d\n",__FILE__,__LINE__,Name,cnt++); }
98 90
99#define loc(X,Y) ((Y)*columns+(X)) 91#define loc(X,Y) ((Y)*columns+(X))
100 92
101//FIXME: the rim should normally be 1, 0 only when running in full screen mode. 93//FIXME: the rim should normally be 1, 0 only when running in full screen mode.
102#define rimX 0 // left/right rim width 94#define rimX 0 // left/right rim width
103#define rimY 0 // top/bottom rim high 95#define rimY 0 // top/bottom rim high
104 96
105#define yMouseScroll 1 97#define yMouseScroll 1
106// scroll increment used when dragging selection at top/bottom of window. 98// scroll increment used when dragging selection at top/bottom of window.
107 99
108/* ------------------------------------------------------------------------- */ 100/* ------------------------------------------------------------------------- */
109/* */ 101/* */
110/* Colors */ 102/* Colors */
111/* */ 103/* */
112/* ------------------------------------------------------------------------- */ 104/* ------------------------------------------------------------------------- */
113 105
114//FIXME: the default color table is in session.C now. 106//FIXME: the default color table is in session.C now.
115// We need a way to get rid of this one, here. 107// We need a way to get rid of this one, here.
116static const ColorEntry base_color_table[TABLE_COLORS] = 108static const ColorEntry base_color_table[TABLE_COLORS] =
117// The following are almost IBM standard color codes, with some slight 109// The following are almost IBM standard color codes, with some slight
118// gamma correction for the dim colors to compensate for bright X screens. 110// gamma correction for the dim colors to compensate for bright X screens.
119// It contains the 8 ansiterm/xterm colors in 2 intensities. 111// It contains the 8 ansiterm/xterm colors in 2 intensities.
120{ 112{
121 // Fixme: could add faint colors here, also. 113 // Fixme: could add faint colors here, also.
122 // normal 114 // normal
123 ColorEntry(QColor(0x00,0x00,0x00), 0, 0 ), ColorEntry( QColor(0xB2,0xB2,0xB2), 1, 0 ), // Dfore, Dback 115 ColorEntry(QColor(0x00,0x00,0x00), 0, 0 ), ColorEntry( QColor(0xB2,0xB2,0xB2), 1, 0 ), // Dfore, Dback
124 ColorEntry(QColor(0x00,0x00,0x00), 0, 0 ), ColorEntry( QColor(0xB2,0x18,0x18), 0, 0 ), // Black, Red 116 ColorEntry(QColor(0x00,0x00,0x00), 0, 0 ), ColorEntry( QColor(0xB2,0x18,0x18), 0, 0 ), // Black, Red
125 ColorEntry(QColor(0x18,0xB2,0x18), 0, 0 ), ColorEntry( QColor(0xB2,0x68,0x18), 0, 0 ), // Green, Yellow 117 ColorEntry(QColor(0x18,0xB2,0x18), 0, 0 ), ColorEntry( QColor(0xB2,0x68,0x18), 0, 0 ), // Green, Yellow
126 ColorEntry(QColor(0x18,0x18,0xB2), 0, 0 ), ColorEntry( QColor(0xB2,0x18,0xB2), 0, 0 ), // Blue, Magenta 118 ColorEntry(QColor(0x18,0x18,0xB2), 0, 0 ), ColorEntry( QColor(0xB2,0x18,0xB2), 0, 0 ), // Blue, Magenta
127 ColorEntry(QColor(0x18,0xB2,0xB2), 0, 0 ), ColorEntry( QColor(0xB2,0xB2,0xB2), 0, 0 ), // Cyan, White 119 ColorEntry(QColor(0x18,0xB2,0xB2), 0, 0 ), ColorEntry( QColor(0xB2,0xB2,0xB2), 0, 0 ), // Cyan, White
128 // intensiv 120 // intensiv
129 ColorEntry(QColor(0x00,0x00,0x00), 0, 1 ), ColorEntry( QColor(0xFF,0xFF,0xFF), 1, 0 ), 121 ColorEntry(QColor(0x00,0x00,0x00), 0, 1 ), ColorEntry( QColor(0xFF,0xFF,0xFF), 1, 0 ),
130 ColorEntry(QColor(0x68,0x68,0x68), 0, 0 ), ColorEntry( QColor(0xFF,0x54,0x54), 0, 0 ), 122 ColorEntry(QColor(0x68,0x68,0x68), 0, 0 ), ColorEntry( QColor(0xFF,0x54,0x54), 0, 0 ),
131 ColorEntry(QColor(0x54,0xFF,0x54), 0, 0 ), ColorEntry( QColor(0xFF,0xFF,0x54), 0, 0 ), 123 ColorEntry(QColor(0x54,0xFF,0x54), 0, 0 ), ColorEntry( QColor(0xFF,0xFF,0x54), 0, 0 ),
132 ColorEntry(QColor(0x54,0x54,0xFF), 0, 0 ), ColorEntry( QColor(0xB2,0x18,0xB2), 0, 0 ), 124 ColorEntry(QColor(0x54,0x54,0xFF), 0, 0 ), ColorEntry( QColor(0xB2,0x18,0xB2), 0, 0 ),
133 ColorEntry(QColor(0x54,0xFF,0xFF), 0, 0 ), ColorEntry( QColor(0xFF,0xFF,0xFF), 0, 0 ) 125 ColorEntry(QColor(0x54,0xFF,0xFF), 0, 0 ), ColorEntry( QColor(0xFF,0xFF,0xFF), 0, 0 )
134}; 126};
135 127
136/* Note that we use ANSI color order (bgr), while IBMPC color order is (rgb) 128/* Note that we use ANSI color order (bgr), while IBMPC color order is (rgb)
137 129
138 Code 0 1 2 3 4 5 6 7 130 Code 0 1 2 3 4 5 6 7
139 ----------- ------- ------- ------- ------- ------- ------- ------- ------- 131 ----------- ------- ------- ------- ------- ------- ------- ------- -------
140 ANSI (bgr) Black Red Green Yellow Blue Magenta Cyan White 132 ANSI (bgr) Black Red Green Yellow Blue Magenta Cyan White
141 IBMPC (rgb) Black Blue Green Cyan Red Magenta Yellow White 133 IBMPC (rgb) Black Blue Green Cyan Red Magenta Yellow White
142*/ 134*/
143 135
144QColor Widget::getDefaultBackColor() 136QColor Widget::getDefaultBackColor()
145{ 137{
146 return color_table[DEFAULT_BACK_COLOR].color; 138 return color_table[DEFAULT_BACK_COLOR].color;
147} 139}
148 140
149const ColorEntry* Widget::getColorTable() const 141const ColorEntry* Widget::getColorTable() const
150{ 142{
151 return color_table; 143 return color_table;
152} 144}
153 145
154const ColorEntry* Widget::getdefaultColorTable() const 146const ColorEntry* Widget::getdefaultColorTable() const
155{ 147{
156 return base_color_table; 148 return base_color_table;
157} 149}
158 150
159 151
160const QPixmap *Widget::backgroundPixmap() 152const QPixmap *Widget::backgroundPixmap()
161{ 153{
162 static QPixmap *bg = new QPixmap("~/qpim/main/pics/faded_bg.xpm"); 154 static QPixmap *bg = new QPixmap("~/qpim/main/pics/faded_bg.xpm");
163 const QPixmap *pm = bg; 155 const QPixmap *pm = bg;
164 return pm; 156 return pm;
165} 157}
166 158
167void Widget::setColorTable(const ColorEntry table[]) 159void Widget::setColorTable(const ColorEntry table[])
168{ 160{
169 for (int i = 0; i < TABLE_COLORS; i++) color_table[i] = table[i]; 161 for (int i = 0; i < TABLE_COLORS; i++) color_table[i] = table[i];
170 162
171 const QPixmap* pm = backgroundPixmap(); 163 const QPixmap* pm = backgroundPixmap();
172 if (!pm) setBackgroundColor(color_table[DEFAULT_BACK_COLOR].color); 164 if (!pm) setBackgroundColor(color_table[DEFAULT_BACK_COLOR].color);
173 update(); 165 update();
174} 166}
175 167
176//FIXME: add backgroundPixmapChanged. 168//FIXME: add backgroundPixmapChanged.
177 169
178/* ------------------------------------------------------------------------- */ 170/* ------------------------------------------------------------------------- */
179/* */ 171/* */
180/* Font */ 172/* Font */
181/* */ 173/* */
182/* ------------------------------------------------------------------------- */ 174/* ------------------------------------------------------------------------- */
183 175
184/* 176/*
185 The VT100 has 32 special graphical characters. The usual vt100 extended 177 The VT100 has 32 special graphical characters. The usual vt100 extended
186 xterm fonts have these at 0x00..0x1f. 178 xterm fonts have these at 0x00..0x1f.
187 179
188 QT's iso mapping leaves 0x00..0x7f without any changes. But the graphicals 180 QT's iso mapping leaves 0x00..0x7f without any changes. But the graphicals
189 come in here as proper unicode characters. 181 come in here as proper unicode characters.
190 182
191 We treat non-iso10646 fonts as VT100 extended and do the requiered mapping 183 We treat non-iso10646 fonts as VT100 extended and do the requiered mapping
192 from unicode to 0x00..0x1f. The remaining translation is then left to the 184 from unicode to 0x00..0x1f. The remaining translation is then left to the
193 QCodec. 185 QCodec.
194*/ 186*/
195 187
196// assert for i in [0..31] : vt100extended(vt100_graphics[i]) == i. 188// assert for i in [0..31] : vt100extended(vt100_graphics[i]) == i.
197 189
198unsigned short vt100_graphics[32] = 190unsigned short vt100_graphics[32] =
199{ // 0/8 1/9 2/10 3/11 4/12 5/13 6/14 7/15 191{ // 0/8 1/9 2/10 3/11 4/12 5/13 6/14 7/15
200 0x0020, 0x25C6, 0x2592, 0x2409, 0x240c, 0x240d, 0x240a, 0x00b0, 192 0x0020, 0x25C6, 0x2592, 0x2409, 0x240c, 0x240d, 0x240a, 0x00b0,
201 0x00b1, 0x2424, 0x240b, 0x2518, 0x2510, 0x250c, 0x2514, 0x253c, 193 0x00b1, 0x2424, 0x240b, 0x2518, 0x2510, 0x250c, 0x2514, 0x253c,
202 0xF800, 0xF801, 0x2500, 0xF803, 0xF804, 0x251c, 0x2524, 0x2534, 194 0xF800, 0xF801, 0x2500, 0xF803, 0xF804, 0x251c, 0x2524, 0x2534,
203 0x252c, 0x2502, 0x2264, 0x2265, 0x03C0, 0x2260, 0x00A3, 0x00b7 195 0x252c, 0x2502, 0x2264, 0x2265, 0x03C0, 0x2260, 0x00A3, 0x00b7
204}; 196};
205 197
206static QChar vt100extended(QChar c) 198static QChar vt100extended(QChar c)
207{ 199{
208 switch (c.unicode()) 200 switch (c.unicode())
209 { 201 {
210 case 0x25c6 : return 1; 202 case 0x25c6 : return 1;
211 case 0x2592 : return 2; 203 case 0x2592 : return 2;
212 case 0x2409 : return 3; 204 case 0x2409 : return 3;
213 case 0x240c : return 4; 205 case 0x240c : return 4;
214 case 0x240d : return 5; 206 case 0x240d : return 5;
215 case 0x240a : return 6; 207 case 0x240a : return 6;
216 case 0x00b0 : return 7; 208 case 0x00b0 : return 7;
217 case 0x00b1 : return 8; 209 case 0x00b1 : return 8;
218 case 0x2424 : return 9; 210 case 0x2424 : return 9;
219 case 0x240b : return 10; 211 case 0x240b : return 10;
220 case 0x2518 : return 11; 212 case 0x2518 : return 11;
221 case 0x2510 : return 12; 213 case 0x2510 : return 12;
222 case 0x250c : return 13; 214 case 0x250c : return 13;
223 case 0x2514 : return 14; 215 case 0x2514 : return 14;
224 case 0x253c : return 15; 216 case 0x253c : return 15;
225 case 0xf800 : return 16; 217 case 0xf800 : return 16;
226 case 0xf801 : return 17; 218 case 0xf801 : return 17;
227 case 0x2500 : return 18; 219 case 0x2500 : return 18;
228 case 0xf803 : return 19; 220 case 0xf803 : return 19;
229 case 0xf804 : return 20; 221 case 0xf804 : return 20;
230 case 0x251c : return 21; 222 case 0x251c : return 21;
231 case 0x2524 : return 22; 223 case 0x2524 : return 22;
232 case 0x2534 : return 23; 224 case 0x2534 : return 23;
233 case 0x252c : return 24; 225 case 0x252c : return 24;
234 case 0x2502 : return 25; 226 case 0x2502 : return 25;
235 case 0x2264 : return 26; 227 case 0x2264 : return 26;
236 case 0x2265 : return 27; 228 case 0x2265 : return 27;
237 case 0x03c0 : return 28; 229 case 0x03c0 : return 28;
238 case 0x2260 : return 29; 230 case 0x2260 : return 29;
239 case 0x00a3 : return 30; 231 case 0x00a3 : return 30;
240 case 0x00b7 : return 31; 232 case 0x00b7 : return 31;
241 } 233 }
242 return c; 234 return c;
243} 235}
244 236
245static QChar identicalMap(QChar c) 237static QChar identicalMap(QChar c)
246{ 238{
247 return c; 239 return c;
248} 240}
249 241
250void Widget::fontChange(const QFont &) 242void Widget::fontChange(const QFont &)
251{ 243{
252 QFontMetrics fm(font()); 244 QFontMetrics fm(font());
253 font_h = fm.height(); 245 font_h = fm.height();
254 font_w = fm.maxWidth(); 246 font_w = fm.maxWidth();
255 font_a = fm.ascent(); 247 font_a = fm.ascent();
256//printf("font_h: %d\n",font_h); 248//printf("font_h: %d\n",font_h);
257//printf("font_w: %d\n",font_w); 249//printf("font_w: %d\n",font_w);
258//printf("font_a: %d\n",font_a); 250//printf("font_a: %d\n",font_a);
259//printf("charset: %s\n",QFont::encodingName(font().charSet()).ascii()); 251//printf("charset: %s\n",QFont::encodingName(font().charSet()).ascii());
260//printf("rawname: %s\n",font().rawName().ascii()); 252//printf("rawname: %s\n",font().rawName().ascii());
261 fontMap = 253 fontMap =
262#if QT_VERSION < 300 254#if QT_VERSION < 300
263 strcmp(QFont::encodingName(font().charSet()).ascii(),"iso10646") 255 strcmp(QFont::encodingName(font().charSet()).ascii(),"iso10646")
264 ? vt100extended 256 ? vt100extended
265 : 257 :
266#endif 258#endif
267 identicalMap; 259 identicalMap;
268 propagateSize(); 260 propagateSize();
269 update(); 261 update();
diff --git a/noncore/apps/opie-console/widget_layer.cpp b/noncore/apps/opie-console/widget_layer.cpp
index ac84f8b..96dda1c 100644
--- a/noncore/apps/opie-console/widget_layer.cpp
+++ b/noncore/apps/opie-console/widget_layer.cpp
@@ -1,212 +1,208 @@
1/* ------------------------------------------------------------------------- */ 1/* ------------------------------------------------------------------------- */
2/* */ 2/* */
3/* widget_layer.cpp Widget Layer */ 3/* widget_layer.cpp Widget Layer */
4/* */ 4/* */
5/* opie developers <opie@handhelds.org> */ 5/* opie developers <opie@handhelds.org> */
6/* */ 6/* */
7/* ------------------------------------------------------------------------- */ 7/* ------------------------------------------------------------------------- */
8 8
9 9
10 10
11#include "widget_layer.h" 11#include "widget_layer.h"
12 12
13#include <qclipboard.h>
14#include <qregexp.h>
15#include <qglobal.h>
16 13
17#include <string.h> 14#include <string.h>
18//#include < 15//#include <
19 16
20#include "common.h"
21 17
22 18
23 19
24WidgetLayer::WidgetLayer( const Profile &config, QWidget *parent, const char *name ) : QFrame( parent, name ) 20WidgetLayer::WidgetLayer( const Profile &config, QWidget *parent, const char *name ) : QFrame( parent, name )
25{ 21{
26 // get the clipboard 22 // get the clipboard
27 m_clipboard = QApplication::clipboard(); 23 m_clipboard = QApplication::clipboard();
28 24
29 // when data on clipboard changes, clear selection 25 // when data on clipboard changes, clear selection
30 QObject::connect( (QObject*) m_clipboard, SIGNAL( dataChanged() ), 26 QObject::connect( (QObject*) m_clipboard, SIGNAL( dataChanged() ),
31 (QObject*)this, SLOT( onClearSelection() ) ); 27 (QObject*)this, SLOT( onClearSelection() ) );
32 28
33 // initialize vars: 29 // initialize vars:
34 m_lines = 1; 30 m_lines = 1;
35 m_columns = 1; 31 m_columns = 1;
36 m_resizing = false; 32 m_resizing = false;
37 33
38 // just for demonstrating 34 // just for demonstrating
39 //m_image = QArray<Character>( m_lines * m_columns ); 35 //m_image = QArray<Character>( m_lines * m_columns );
40 m_image = QArray<Character>( 1 ); 36 m_image = QArray<Character>( 1 );
41 37
42 // we need to install an event filter, 38 // we need to install an event filter,
43 // to emit keypresses. 39 // to emit keypresses.
44 qApp->installEventFilter( this ); 40 qApp->installEventFilter( this );
45 41
46} 42}
47 43
48 44
49WidgetLayer::~WidgetLayer() 45WidgetLayer::~WidgetLayer()
50{ 46{
51 // clean up 47 // clean up
52 delete m_image; 48 delete m_image;
53} 49}
54 50
55 51
56QSize WidgetLayer::sizeHint() 52QSize WidgetLayer::sizeHint()
57{ 53{
58 return size(); 54 return size();
59} 55}
60 56
61 57
62/* --------------------------------- audio ---------------------------------- */ 58/* --------------------------------- audio ---------------------------------- */
63 59
64void WidgetLayer::bell() 60void WidgetLayer::bell()
65{ 61{
66 QApplication::beep(); 62 QApplication::beep();
67} 63}
68 64
69bool WidgetLayer::eventFilter( QObject *obj, QEvent *e ) 65bool WidgetLayer::eventFilter( QObject *obj, QEvent *e )
70{ 66{
71 if ( (e->type() == QEvent::Accel || 67 if ( (e->type() == QEvent::Accel ||
72 e->type() == QEvent::AccelAvailable ) && qApp->focusWidget() == this ) { 68 e->type() == QEvent::AccelAvailable ) && qApp->focusWidget() == this ) {
73 static_cast<QKeyEvent *>( e )->ignore(); 69 static_cast<QKeyEvent *>( e )->ignore();
74 return true; 70 return true;
75 } 71 }
76 if ( obj != this /* when embedded */ && obj != parent() /* when standalone */ ) 72 if ( obj != this /* when embedded */ && obj != parent() /* when standalone */ )
77 return false; // not us 73 return false; // not us
78 74
79#ifdef FAKE_CTRL_AND_ALT 75#ifdef FAKE_CTRL_AND_ALT
80 static bool control = false; 76 static bool control = false;
81 static bool alt = false; 77 static bool alt = false;
82// qDebug(" Has a keyboard with no CTRL and ALT keys, but we fake it:"); 78// qDebug(" Has a keyboard with no CTRL and ALT keys, but we fake it:");
83 bool dele = false; 79 bool dele = false;
84 if ( e->type() == QEvent::KeyPress || e->type() == QEvent::KeyRelease ) { 80 if ( e->type() == QEvent::KeyPress || e->type() == QEvent::KeyRelease ) {
85 QKeyEvent* ke = (QKeyEvent*)e; 81 QKeyEvent* ke = (QKeyEvent*)e;
86 bool keydown = e->type() == QEvent::KeyPress || ke->isAutoRepeat(); 82 bool keydown = e->type() == QEvent::KeyPress || ke->isAutoRepeat();
87 switch (ke->key()) { 83 switch (ke->key()) {
88 case Key_F9: // let this be "Control" 84 case Key_F9: // let this be "Control"
89 control = keydown; 85 control = keydown;
90 e = new QKeyEvent(QEvent::KeyPress, Key_Control, 0, ke->state()); 86 e = new QKeyEvent(QEvent::KeyPress, Key_Control, 0, ke->state());
91 dele=TRUE; 87 dele=TRUE;
92 break; 88 break;
93 case Key_F13: // let this be "Alt" 89 case Key_F13: // let this be "Alt"
94 alt = keydown; 90 alt = keydown;
95 e = new QKeyEvent(QEvent::KeyPress, Key_Alt, 0, ke->state()); 91 e = new QKeyEvent(QEvent::KeyPress, Key_Alt, 0, ke->state());
96 dele=TRUE; 92 dele=TRUE;
97 break; 93 break;
98 default: 94 default:
99 if ( control ) { 95 if ( control ) {
100 int a = toupper(ke->ascii())-64; 96 int a = toupper(ke->ascii())-64;
101 if ( a >= 0 && a < ' ' ) { 97 if ( a >= 0 && a < ' ' ) {
102 e = new QKeyEvent(e->type(), ke->key(), 98 e = new QKeyEvent(e->type(), ke->key(),
103 a, ke->state()|ControlButton, 99 a, ke->state()|ControlButton,
104QChar(a,0)); 100QChar(a,0));
105 dele=TRUE; 101 dele=TRUE;
106 } 102 }
107 } 103 }
108 if ( alt ) { 104 if ( alt ) {
109 e = new QKeyEvent(e->type(), ke->key(), 105 e = new QKeyEvent(e->type(), ke->key(),
110 ke->ascii(), ke->state()|AltButton, ke->text()); 106 ke->ascii(), ke->state()|AltButton, ke->text());
111 dele=TRUE; 107 dele=TRUE;
112 } 108 }
113 } 109 }
114 } 110 }
115#endif 111#endif
116 112
117 if ( e->type() == QEvent::KeyPress ) { 113 if ( e->type() == QEvent::KeyPress ) {
118 QKeyEvent* ke = (QKeyEvent*)e; 114 QKeyEvent* ke = (QKeyEvent*)e;
119 //actSel=0; // Key stroke implies a screen update, so Widget won't 115 //actSel=0; // Key stroke implies a screen update, so Widget won't
120 // know where the current selection is. 116 // know where the current selection is.
121 117
122// qDebug("key pressed is 0x%x",ke->key()); 118// qDebug("key pressed is 0x%x",ke->key());
123 119
124 if( ke->state() == ShiftButton && ke->key() == Key_Tab) { //lets hardcode this sucker 120 if( ke->state() == ShiftButton && ke->key() == Key_Tab) { //lets hardcode this sucker
125 insertText("\\"); // expose 121 insertText("\\"); // expose
126 } else 122 } else
127 emit keyPressed( ke ); // expose 123 emit keyPressed( ke ); // expose
128 ke->accept(); 124 ke->accept();
129#ifdef FAKE_CTRL_AND_ALT 125#ifdef FAKE_CTRL_AND_ALT
130 if ( dele ) delete e; 126 if ( dele ) delete e;
131#endif 127#endif
132 return true; // stop the event 128 return true; // stop the event
133 } 129 }
134 return QFrame::eventFilter( obj, e ); 130 return QFrame::eventFilter( obj, e );
135} 131}
136 132
137 133
138/* --------------------------------- screen --------------------------------- */ 134/* --------------------------------- screen --------------------------------- */
139 135
140 136
141void WidgetLayer::propagateSize() 137void WidgetLayer::propagateSize()
142{ 138{
143 QArray<Character> oldimage = m_image.copy(); 139 QArray<Character> oldimage = m_image.copy();
144 int oldlines = m_lines; 140 int oldlines = m_lines;
145 int oldcolumns = m_columns; 141 int oldcolumns = m_columns;
146 142
147 makeImage(); 143 makeImage();
148 144
149 // copy old image, to reduce flicker 145 // copy old image, to reduce flicker
150 if ( ! oldimage.isEmpty() ) 146 if ( ! oldimage.isEmpty() )
151 { 147 {
152 int lins = QMIN( oldlines, m_lines ); 148 int lins = QMIN( oldlines, m_lines );
153 int cols = QMIN( oldcolumns, m_columns ); 149 int cols = QMIN( oldcolumns, m_columns );
154 for ( int lin = 0; lin < lins; ++lin ) 150 for ( int lin = 0; lin < lins; ++lin )
155 { 151 {
156 memcpy( (void*) &m_image[m_columns*lin], 152 memcpy( (void*) &m_image[m_columns*lin],
157 (void*) &oldimage[oldcolumns*lin], 153 (void*) &oldimage[oldcolumns*lin],
158 cols*sizeof( Character ) ); 154 cols*sizeof( Character ) );
159 } 155 }
160 } 156 }
161 else 157 else
162 clearImage(); 158 clearImage();
163 159
164 delete oldimage; 160 delete oldimage;
165 161
166 m_resizing = true; 162 m_resizing = true;
167 emit imageSizeChanged( m_lines, m_columns ); 163 emit imageSizeChanged( m_lines, m_columns );
168 m_resizing = false; 164 m_resizing = false;
169} 165}
170 166
171void WidgetLayer::makeImage() 167void WidgetLayer::makeImage()
172{ 168{
173 calcGeometry(); 169 calcGeometry();
174 m_image = QArray<Character>( m_columns * m_lines ); 170 m_image = QArray<Character>( m_columns * m_lines );
175 clearImage(); 171 clearImage();
176} 172}
177 173
178void WidgetLayer::clearImage() 174void WidgetLayer::clearImage()
179{ 175{
180 //should this belong here?? 176 //should this belong here??
181 for ( int y = 0; y < m_lines; y++ ) 177 for ( int y = 0; y < m_lines; y++ )
182 for ( int x = 0; x < m_columns; x++ ) 178 for ( int x = 0; x < m_columns; x++ )
183 { 179 {
184 m_image[loc(x,y)].c = 0xff; 180 m_image[loc(x,y)].c = 0xff;
185 m_image[loc(x,y)].f = 0xff; 181 m_image[loc(x,y)].f = 0xff;
186 m_image[loc(x,y)].b = 0xff; 182 m_image[loc(x,y)].b = 0xff;
187 m_image[loc(x,y)].r = 0xff; 183 m_image[loc(x,y)].r = 0xff;
188 } 184 }
189} 185}
190 186
191/* --------------------------------- selection ------------------------------ */ 187/* --------------------------------- selection ------------------------------ */
192 188
193void WidgetLayer::pasteClipboard() 189void WidgetLayer::pasteClipboard()
194{ 190{
195 insertSelection(); 191 insertSelection();
196} 192}
197 193
198 194
199void WidgetLayer::insertSelection() 195void WidgetLayer::insertSelection()
200{ 196{
201 QString text = QApplication::clipboard()->text(); 197 QString text = QApplication::clipboard()->text();
202 if ( ! text.isNull() ) 198 if ( ! text.isNull() )
203 { 199 {
204 text.replace( QRegExp( "\n" ), "\r" ); 200 text.replace( QRegExp( "\n" ), "\r" );
205 insertText( text ); 201 insertText( text );
206 // selection should be unselected 202 // selection should be unselected
207 emit selectionCleared(); 203 emit selectionCleared();
208 } 204 }
209} 205}
210 206
211void WidgetLayer::insertText( QString text ) 207void WidgetLayer::insertText( QString text )
212{ 208{