summaryrefslogtreecommitdiff
authorzecke <zecke>2002-10-24 12:13:09 (UTC)
committer zecke <zecke>2002-10-24 12:13:09 (UTC)
commitacf708cee945b8b843b0132672d79f5c4571c22b (patch) (unidiff)
tree96b6bee6e6df3c6a252ff5680275f7080ad93729
parent41c59e994e023f5c236502538f54d0f3fce8435a (diff)
downloadopie-acf708cee945b8b843b0132672d79f5c4571c22b.zip
opie-acf708cee945b8b843b0132672d79f5c4571c22b.tar.gz
opie-acf708cee945b8b843b0132672d79f5c4571c22b.tar.bz2
Fixed warnings
Now we're down to two warning with number conversions Enable Saving Sessions Enable Copy and Paste
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/apps/opie-console/MyPty.cpp2
-rw-r--r--noncore/apps/opie-console/TEWidget.cpp27
-rw-r--r--noncore/apps/opie-console/TEWidget.h20
-rw-r--r--noncore/apps/opie-console/emulation_handler.cpp6
-rw-r--r--noncore/apps/opie-console/emulation_handler.h4
-rw-r--r--noncore/apps/opie-console/file_layer.cpp4
-rw-r--r--noncore/apps/opie-console/io_bt.cpp7
-rw-r--r--noncore/apps/opie-console/io_irda.cpp5
-rw-r--r--noncore/apps/opie-console/mainwindow.cpp49
-rw-r--r--noncore/apps/opie-console/mainwindow.h7
-rw-r--r--noncore/apps/opie-console/opie-console.control2
-rw-r--r--noncore/apps/opie-console/profilemanager.cpp4
-rw-r--r--noncore/apps/opie-console/receive_layer.cpp3
-rw-r--r--noncore/apps/opie-console/session.cpp7
-rw-r--r--noncore/apps/opie-console/session.h7
15 files changed, 123 insertions, 31 deletions
diff --git a/noncore/apps/opie-console/MyPty.cpp b/noncore/apps/opie-console/MyPty.cpp
index 16bb5ff..984e347 100644
--- a/noncore/apps/opie-console/MyPty.cpp
+++ b/noncore/apps/opie-console/MyPty.cpp
@@ -17,326 +17,326 @@
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> 67#include <qapplication.h>
68#include <qsocketnotifier.h> 68#include <qsocketnotifier.h>
69#include <qstring.h> 69#include <qstring.h>
70 70
71#include <stdlib.h> 71#include <stdlib.h>
72#include <stdio.h> 72#include <stdio.h>
73#include <signal.h> 73#include <signal.h>
74#include <fcntl.h> 74#include <fcntl.h>
75#include <unistd.h> 75#include <unistd.h>
76#include <termios.h> 76#include <termios.h>
77#include <sys/types.h> 77#include <sys/types.h>
78#include <sys/ioctl.h> 78#include <sys/ioctl.h>
79#include <sys/wait.h> 79#include <sys/wait.h>
80 80
81#ifdef HAVE_OPENPTY 81#ifdef HAVE_OPENPTY
82#include <pty.h> 82#include <pty.h>
83#endif 83#endif
84 84
85#include "procctl.h" 85#include "procctl.h"
86#include "MyPty.h" 86#include "MyPty.h"
87 87
88 88
89#undef VERBOSE_DEBUG 89#undef VERBOSE_DEBUG
90 90
91 91
92/* -------------------------------------------------------------------------- */ 92/* -------------------------------------------------------------------------- */
93 93
94/*! 94/*!
95 Informs the client program about the 95 Informs the client program about the
96 actual size of the window. 96 actual size of the window.
97*/ 97*/
98 98
99void MyPty::setSize(int lines, int columns) 99void MyPty::setSize(int lines, int columns)
100{ 100{
101 qWarning("setting size"); 101 qWarning("setting size");
102 struct winsize wsize; 102 struct winsize wsize;
103 wsize.ws_row = (unsigned short)lines; 103 wsize.ws_row = (unsigned short)lines;
104 wsize.ws_col = (unsigned short)columns; 104 wsize.ws_col = (unsigned short)columns;
105 if(m_fd < 0) return; 105 if(m_fd < 0) return;
106 ioctl(m_fd,TIOCSWINSZ,(char *)&wsize); 106 ioctl(m_fd,TIOCSWINSZ,(char *)&wsize);
107} 107}
108 108
109 109
110void MyPty::donePty() 110void MyPty::donePty()
111{ 111{
112 // This is code from the Qt DumbTerminal example 112 // This is code from the Qt DumbTerminal example
113 int status = 0;
114 113
115 ::close(m_fd); 114 ::close(m_fd);
116 115
117 if (m_cpid) { 116 if (m_cpid) {
118 kill(m_cpid, SIGHUP); 117 kill(m_cpid, SIGHUP);
119 //waitpid(m_cpid, &status, 0); 118 //waitpid(m_cpid, &status, 0);
120 delete m_sn_e; 119 delete m_sn_e;
121 delete m_sn_r; 120 delete m_sn_r;
122 m_sn_e = 0l; 121 m_sn_e = 0l;
123 m_sn_r = 0l; 122 m_sn_r = 0l;
124 } 123 }
125 124
126 m_cpid = 0; 125 m_cpid = 0;
127 m_fd = -1; 126 m_fd = -1;
128// emit done(status); 127// emit done(status);
129} 128}
130 129
131 130
132const char* MyPty::deviceName() 131const char* MyPty::deviceName()
133{ 132{
134 return m_ttynam; 133 return m_ttynam;
135} 134}
136 135
137 136
138void MyPty::error() 137void MyPty::error()
139{ 138{
140 // This is code from the Qt DumbTerminal example 139 // This is code from the Qt DumbTerminal example
141 donePty(); 140 donePty();
142} 141}
143 142
144void MyPty::start() { 143void MyPty::start() {
145 char* cmd = "/bin/sh"; 144 char* cmd = "/bin/sh";
146 QStrList lis; 145 QStrList lis;
147 int r =run(cmd, lis, 0, 0); 146 int r =run(cmd, lis, 0, 0);
148 r = r; 147 r = r;
149} 148}
150/*! 149/*!
151 start the client program. 150 start the client program.
152*/ 151*/
153int MyPty::run(const char* cmd, QStrList &, const char*, int) 152int MyPty::run(const char* cmd, QStrList &, const char*, int)
154{ 153{
155 // This is code from the Qt DumbTerminal example 154 // This is code from the Qt DumbTerminal example
156 m_cpid = fork(); 155 m_cpid = fork();
157 156
158 if ( !m_cpid ) { 157 if ( !m_cpid ) {
159 // child - exec shell on tty 158 // child - exec shell on tty
160 for (int sig = 1; sig < NSIG; sig++) signal(sig,SIG_DFL); 159 for (int sig = 1; sig < NSIG; sig++) signal(sig,SIG_DFL);
161 int ttyfd = ::open(m_ttynam, O_RDWR); 160 int ttyfd = ::open(m_ttynam, O_RDWR);
162 dup2(ttyfd, STDIN_FILENO); 161 dup2(ttyfd, STDIN_FILENO);
163 dup2(ttyfd, STDOUT_FILENO); 162 dup2(ttyfd, STDOUT_FILENO);
164 dup2(ttyfd, STDERR_FILENO); 163 dup2(ttyfd, STDERR_FILENO);
165 // should be done with tty, so close it 164 // should be done with tty, so close it
166 ::close(ttyfd); 165 ::close(ttyfd);
167 static struct termios ttmode; 166 static struct termios ttmode;
168 if ( setsid() < 0 ) 167 if ( setsid() < 0 )
169 perror( "failed to set process group" ); 168 perror( "failed to set process group" );
170#if defined (TIOCSCTTY) 169#if defined (TIOCSCTTY)
171 // grabbed from APUE by Stevens 170 // grabbed from APUE by Stevens
172 ioctl(STDIN_FILENO, TIOCSCTTY, 0); 171 ioctl(STDIN_FILENO, TIOCSCTTY, 0);
173#endif 172#endif
174 tcgetattr( STDIN_FILENO, &ttmode ); 173 tcgetattr( STDIN_FILENO, &ttmode );
175 ttmode.c_cc[VINTR] = 3; 174 ttmode.c_cc[VINTR] = 3;
176 ttmode.c_cc[VERASE] = 8; 175 ttmode.c_cc[VERASE] = 8;
177 tcsetattr( STDIN_FILENO, TCSANOW, &ttmode ); 176 tcsetattr( STDIN_FILENO, TCSANOW, &ttmode );
178 setenv("TERM",m_term,1); 177 setenv("TERM",m_term,1);
179 setenv("COLORTERM","0",1); 178 setenv("COLORTERM","0",1);
180 179
181 if (getuid() == 0) { 180 if (getuid() == 0) {
182 char msg[] = "WARNING: You are running this shell as root!\n"; 181 char msg[] = "WARNING: You are running this shell as root!\n";
183 write(ttyfd, msg, sizeof(msg)); 182 write(ttyfd, msg, sizeof(msg));
184 } 183 }
185 execl(cmd, cmd, 0); 184 execl(cmd, cmd, 0);
186 185
187 donePty(); 186 donePty();
188 exit(-1); 187 exit(-1);
189 } 188 }
190 189
191 // parent - continue as a widget 190 // parent - continue as a widget
192 delete m_sn_r; 191 delete m_sn_r;
193 m_sn_r = new QSocketNotifier(m_fd,QSocketNotifier::Read,this); 192 m_sn_r = new QSocketNotifier(m_fd,QSocketNotifier::Read,this);
194 delete m_sn_e; 193 delete m_sn_e;
195 m_sn_e = new QSocketNotifier(m_fd,QSocketNotifier::Exception,this); 194 m_sn_e = new QSocketNotifier(m_fd,QSocketNotifier::Exception,this);
196 connect(m_sn_r,SIGNAL(activated(int)),this,SLOT(readPty())); 195 connect(m_sn_r,SIGNAL(activated(int)),this,SLOT(readPty()));
197 connect(m_sn_e,SIGNAL(activated(int)),this,SLOT(error())); 196 connect(m_sn_e,SIGNAL(activated(int)),this,SLOT(error()));
198 197
199 return 0; 198 return 0;
200} 199}
201 200
202int MyPty::openPty() 201int MyPty::openPty()
203{ 202{
204 // This is code from the Qt DumbTerminal example 203 // This is code from the Qt DumbTerminal example
205 int ptyfd = -1; 204 int ptyfd = -1;
206 205
207#ifdef HAVE_OPENPTY 206#ifdef HAVE_OPENPTY
208 int ttyfd; 207 int ttyfd;
209 if ( openpty(&ptyfd,&ttyfd,ttynam,0,0) ) 208 if ( openpty(&ptyfd,&ttyfd,ttynam,0,0) )
210 ptyfd = -1; 209 ptyfd = -1;
211 else 210 else
212 close(ttyfd); // we open the ttynam ourselves. 211 close(ttyfd); // we open the ttynam ourselves.
213#else 212#else
214 for (const char* c0 = "pqrstuvwxyzabcde"; ptyfd < 0 && *c0 != 0; c0++) { 213 for (const char* c0 = "pqrstuvwxyzabcde"; ptyfd < 0 && *c0 != 0; c0++) {
215 for (const char* c1 = "0123456789abcdef"; ptyfd < 0 && *c1 != 0; c1++) { 214 for (const char* c1 = "0123456789abcdef"; ptyfd < 0 && *c1 != 0; c1++) {
216 sprintf(m_ptynam,"/dev/pty%c%c",*c0,*c1); 215 sprintf(m_ptynam,"/dev/pty%c%c",*c0,*c1);
217 sprintf(m_ttynam,"/dev/tty%c%c",*c0,*c1); 216 sprintf(m_ttynam,"/dev/tty%c%c",*c0,*c1);
218 if ((ptyfd = ::open(m_ptynam,O_RDWR)) >= 0) { 217 if ((ptyfd = ::open(m_ptynam,O_RDWR)) >= 0) {
219 if (geteuid() != 0 && !access(m_ttynam,R_OK|W_OK) == 0) { 218 if (geteuid() != 0 && !access(m_ttynam,R_OK|W_OK) == 0) {
220 ::close(ptyfd); 219 ::close(ptyfd);
221 ptyfd = -1; 220 ptyfd = -1;
222 } 221 }
223 } 222 }
224 } 223 }
225 } 224 }
226#endif 225#endif
227 226
228 if ( ptyfd < 0 ) { 227 if ( ptyfd < 0 ) {
229 //qApp->exit(1); 228 //qApp->exit(1);
230 return -1; 229 return -1;
231 } 230 }
232 231
233 return ptyfd; 232 return ptyfd;
234} 233}
235 234
236/*! 235/*!
237 Create an instance. 236 Create an instance.
238*/ 237*/
239MyPty::MyPty(const Profile& prof) : m_cpid(0) 238MyPty::MyPty(const Profile& prof) : m_cpid(0)
240{ 239{
241 240
242 int term = prof.readNumEntry("Terminal", Profile::VT100 ); 241 int term = prof.readNumEntry("Terminal", Profile::VT100 );
243 switch( term ) { 242 switch( term ) {
244 default: 243 default:
245 case Profile::VT100: 244 case Profile::VT100:
246 case Profile::VT102: 245 case Profile::VT102:
247 m_term = "vt100"; 246 m_term = "vt100";
248 break; 247 break;
249 case Profile::Linux: 248 case Profile::Linux:
250 m_term = "linux"; 249 m_term = "linux";
251 break; 250 break;
252 case Profile::XTerm: 251 case Profile::XTerm:
253 m_term = "xterm"; 252 m_term = "xterm";
254 break; 253 break;
255 } 254 }
256 m_sn_e = 0l; 255 m_sn_e = 0l;
257 m_sn_r = 0l; 256 m_sn_r = 0l;
258 m_fd = openPty(); 257 m_fd = openPty();
259 ProcCtl* ctl = ProcCtl::self(); 258 ProcCtl* ctl = ProcCtl::self();
259 Q_UNUSED(ctl);
260} 260}
261 261
262/*! 262/*!
263 Destructor. 263 Destructor.
264 Note that the related client program is not killed 264 Note that the related client program is not killed
265 (yet) when a instance is deleted. 265 (yet) when a instance is deleted.
266*/ 266*/
267MyPty::~MyPty() 267MyPty::~MyPty()
268{ 268{
269 donePty(); 269 donePty();
270} 270}
271QString MyPty::identifier()const { 271QString MyPty::identifier()const {
272 return QString::fromLatin1("term"); 272 return QString::fromLatin1("term");
273} 273}
274QString MyPty::name()const{ 274QString MyPty::name()const{
275 return identifier(); 275 return identifier();
276} 276}
277bool MyPty::open() { 277bool MyPty::open() {
278 if (m_fd < 0) 278 if (m_fd < 0)
279 m_fd = openPty(); 279 m_fd = openPty();
280 280
281 start(); 281 start();
282 return true; 282 return true;
283} 283}
284void MyPty::close() { 284void MyPty::close() {
285 donePty(); 285 donePty();
286 m_fd = openPty(); 286 m_fd = openPty();
287} 287}
288void MyPty::reload( const Profile& ) { 288void MyPty::reload( const Profile& ) {
289 289
290} 290}
291/*! sends len bytes through the line */ 291/*! sends len bytes through the line */
292void MyPty::send(const QByteArray& ar) 292void MyPty::send(const QByteArray& ar)
293{ 293{
294#ifdef VERBOSE_DEBUG 294#ifdef VERBOSE_DEBUG
295 // verbose debug 295 // verbose debug
296 printf("sending bytes:\n"); 296 printf("sending bytes:\n");
297 for (uint i = 0; i < ar.count(); i++) 297 for (uint i = 0; i < ar.count(); i++)
298 printf("%c", ar[i]); 298 printf("%c", ar[i]);
299 printf("\n"); 299 printf("\n");
300#endif 300#endif
301 301
302 ::write(m_fd, ar.data(), ar.count()); 302 ::write(m_fd, ar.data(), ar.count());
303} 303}
304 304
305/*! indicates that a block of data is received */ 305/*! indicates that a block of data is received */
306void MyPty::readPty() 306void MyPty::readPty()
307{ 307{
308 QByteArray buf(4096); 308 QByteArray buf(4096);
309 309
310 int len = ::read( m_fd, buf.data(), 4096 ); 310 int len = ::read( m_fd, buf.data(), 4096 );
311 311
312 if (len == -1 || len == 0) { 312 if (len == -1 || len == 0) {
313 donePty(); 313 donePty();
314 return; 314 return;
315 } 315 }
316 316
317 if (len < 0) 317 if (len < 0)
318 return; 318 return;
319 319
320 320
321 buf.resize(len); 321 buf.resize(len);
322 emit received(buf); 322 emit received(buf);
323 323
324#ifdef VERBOSE_DEBUG 324#ifdef VERBOSE_DEBUG
325 // verbose debug 325 // verbose debug
326 printf("read bytes:\n"); 326 printf("read bytes:\n");
327 for (uint i = 0; i < buf.count(); i++) 327 for (uint i = 0; i < buf.count(); i++)
328 printf("%c", buf[i]); 328 printf("%c", buf[i]);
329 printf("\n"); 329 printf("\n");
330#endif 330#endif
331 331
332} 332}
333QBitArray MyPty::supports()const { 333QBitArray MyPty::supports()const {
334 QBitArray ar(3); 334 QBitArray ar(3);
335 //autoconnect 335 //autoconnect
336 ar[0] = 1; 336 ar[0] = 1;
337 // 337 //
338 ar[1] = 0; 338 ar[1] = 0;
339 ar[2] = 0; 339 ar[2] = 0;
340 340
341 return ar; 341 return ar;
342} 342}
diff --git a/noncore/apps/opie-console/TEWidget.cpp b/noncore/apps/opie-console/TEWidget.cpp
index f3f462f..e4415dc 100644
--- a/noncore/apps/opie-console/TEWidget.cpp
+++ b/noncore/apps/opie-console/TEWidget.cpp
@@ -2,192 +2,217 @@
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" 52#include "session.h"
53#include <qpe/config.h> 53#include <qpe/config.h>
54 54
55#include <qapplication.h> 55#include <qapplication.h>
56#include <qcursor.h> 56#include <qcursor.h>
57#include <qregexp.h> 57#include <qregexp.h>
58#include <qpainter.h> 58#include <qpainter.h>
59#include <qclipboard.h> 59#include <qclipboard.h>
60#include <qstyle.h> 60#include <qstyle.h>
61#include <qfile.h> 61#include <qfile.h>
62#include <qdragobject.h> 62#include <qdragobject.h>
63#include <qvbox.h> 63#include <qvbox.h>
64 64
65#include <stdio.h> 65#include <stdio.h>
66#include <stdlib.h> 66#include <stdlib.h>
67#include <unistd.h> 67#include <unistd.h>
68#include <ctype.h> 68#include <ctype.h>
69#include <sys/stat.h> 69#include <sys/stat.h>
70#include <sys/types.h> 70#include <sys/types.h>
71#include <signal.h> 71#include <signal.h>
72 72
73#include <assert.h> 73#include <assert.h>
74 74
75 75
76 76
77// #include "TEWidget.moc" 77// #include "TEWidget.moc"
78//#include <kapp.h> 78//#include <kapp.h>
79//#include <kcursor.h> 79//#include <kcursor.h>
80//#include <kurl.h> 80//#include <kurl.h>
81//#include <kdebug.h> 81//#include <kdebug.h>
82//#include <klocale.h> 82//#include <klocale.h>
83 83
84#define HERE printf("%s(%d): %s\n",__FILE__,__LINE__,__FUNCTION__) 84#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++); } 85#define HCNT(Name) // { static int cnt = 1; printf("%s(%d): %s %d\n",__FILE__,__LINE__,Name,cnt++); }
86 86
87#define loc(X,Y) ((Y)*columns+(X)) 87#define loc(X,Y) ((Y)*columns+(X))
88 88
89//FIXME: the rim should normally be 1, 0 only when running in full screen mode. 89//FIXME: the rim should normally be 1, 0 only when running in full screen mode.
90#define rimX 0 // left/right rim width 90#define rimX 0 // left/right rim width
91#define rimY 0 // top/bottom rim high 91#define rimY 0 // top/bottom rim high
92 92
93#define SCRWIDTH 16 // width of the scrollbar 93#define SCRWIDTH 16 // width of the scrollbar
94 94
95#define yMouseScroll 1 95#define yMouseScroll 1
96// scroll increment used when dragging selection at top/bottom of window. 96// scroll increment used when dragging selection at top/bottom of window.
97 97
98/* Button XPM */
99namespace {
100static char * menu_xpm[] = {
101"12 12 5 1",
102 " c None",
103 ".c #000000",
104 "+c #FFFDAD",
105 "@c #FFFF00",
106 "#c #E5E100",
107" ",
108" ",
109" ......... ",
110" .+++++++. ",
111" .+@@@@#. ",
112" .+@@@#. ",
113" .+@@#. ",
114" .+@#. ",
115" .+#. ",
116" .+. ",
117" .. ",
118" "};
119
120}
121
122
98/* ------------------------------------------------------------------------- */ 123/* ------------------------------------------------------------------------- */
99/* */ 124/* */
100/* Colors */ 125/* Colors */
101/* */ 126/* */
102/* ------------------------------------------------------------------------- */ 127/* ------------------------------------------------------------------------- */
103 128
104//FIXME: the default color table is in session.C now. 129//FIXME: the default color table is in session.C now.
105// We need a way to get rid of this one, here. 130// We need a way to get rid of this one, here.
106static const ColorEntry base_color_table[TABLE_COLORS] = 131static const ColorEntry base_color_table[TABLE_COLORS] =
107// The following are almost IBM standard color codes, with some slight 132// The following are almost IBM standard color codes, with some slight
108// gamma correction for the dim colors to compensate for bright X screens. 133// gamma correction for the dim colors to compensate for bright X screens.
109// It contains the 8 ansiterm/xterm colors in 2 intensities. 134// It contains the 8 ansiterm/xterm colors in 2 intensities.
110{ 135{
111 // Fixme: could add faint colors here, also. 136 // Fixme: could add faint colors here, also.
112 // normal 137 // normal
113 ColorEntry(QColor(0x00,0x00,0x00), 0, 0 ), ColorEntry( QColor(0xB2,0xB2,0xB2), 1, 0 ), // Dfore, Dback 138 ColorEntry(QColor(0x00,0x00,0x00), 0, 0 ), ColorEntry( QColor(0xB2,0xB2,0xB2), 1, 0 ), // Dfore, Dback
114 ColorEntry(QColor(0x00,0x00,0x00), 0, 0 ), ColorEntry( QColor(0xB2,0x18,0x18), 0, 0 ), // Black, Red 139 ColorEntry(QColor(0x00,0x00,0x00), 0, 0 ), ColorEntry( QColor(0xB2,0x18,0x18), 0, 0 ), // Black, Red
115 ColorEntry(QColor(0x18,0xB2,0x18), 0, 0 ), ColorEntry( QColor(0xB2,0x68,0x18), 0, 0 ), // Green, Yellow 140 ColorEntry(QColor(0x18,0xB2,0x18), 0, 0 ), ColorEntry( QColor(0xB2,0x68,0x18), 0, 0 ), // Green, Yellow
116 ColorEntry(QColor(0x18,0x18,0xB2), 0, 0 ), ColorEntry( QColor(0xB2,0x18,0xB2), 0, 0 ), // Blue, Magenta 141 ColorEntry(QColor(0x18,0x18,0xB2), 0, 0 ), ColorEntry( QColor(0xB2,0x18,0xB2), 0, 0 ), // Blue, Magenta
117 ColorEntry(QColor(0x18,0xB2,0xB2), 0, 0 ), ColorEntry( QColor(0xB2,0xB2,0xB2), 0, 0 ), // Cyan, White 142 ColorEntry(QColor(0x18,0xB2,0xB2), 0, 0 ), ColorEntry( QColor(0xB2,0xB2,0xB2), 0, 0 ), // Cyan, White
118 // intensiv 143 // intensiv
119 ColorEntry(QColor(0x00,0x00,0x00), 0, 1 ), ColorEntry( QColor(0xFF,0xFF,0xFF), 1, 0 ), 144 ColorEntry(QColor(0x00,0x00,0x00), 0, 1 ), ColorEntry( QColor(0xFF,0xFF,0xFF), 1, 0 ),
120 ColorEntry(QColor(0x68,0x68,0x68), 0, 0 ), ColorEntry( QColor(0xFF,0x54,0x54), 0, 0 ), 145 ColorEntry(QColor(0x68,0x68,0x68), 0, 0 ), ColorEntry( QColor(0xFF,0x54,0x54), 0, 0 ),
121 ColorEntry(QColor(0x54,0xFF,0x54), 0, 0 ), ColorEntry( QColor(0xFF,0xFF,0x54), 0, 0 ), 146 ColorEntry(QColor(0x54,0xFF,0x54), 0, 0 ), ColorEntry( QColor(0xFF,0xFF,0x54), 0, 0 ),
122 ColorEntry(QColor(0x54,0x54,0xFF), 0, 0 ), ColorEntry( QColor(0xB2,0x18,0xB2), 0, 0 ), 147 ColorEntry(QColor(0x54,0x54,0xFF), 0, 0 ), ColorEntry( QColor(0xB2,0x18,0xB2), 0, 0 ),
123 ColorEntry(QColor(0x54,0xFF,0xFF), 0, 0 ), ColorEntry( QColor(0xFF,0xFF,0xFF), 0, 0 ) 148 ColorEntry(QColor(0x54,0xFF,0xFF), 0, 0 ), ColorEntry( QColor(0xFF,0xFF,0xFF), 0, 0 )
124}; 149};
125 150
126/* Note that we use ANSI color order (bgr), while IBMPC color order is (rgb) 151/* Note that we use ANSI color order (bgr), while IBMPC color order is (rgb)
127 152
128 Code 0 1 2 3 4 5 6 7 153 Code 0 1 2 3 4 5 6 7
129 ----------- ------- ------- ------- ------- ------- ------- ------- ------- 154 ----------- ------- ------- ------- ------- ------- ------- ------- -------
130 ANSI (bgr) Black Red Green Yellow Blue Magenta Cyan White 155 ANSI (bgr) Black Red Green Yellow Blue Magenta Cyan White
131 IBMPC (rgb) Black Blue Green Cyan Red Magenta Yellow White 156 IBMPC (rgb) Black Blue Green Cyan Red Magenta Yellow White
132*/ 157*/
133 158
134QColor TEWidget::getDefaultBackColor() 159QColor TEWidget::getDefaultBackColor()
135{ 160{
136 return color_table[DEFAULT_BACK_COLOR].color; 161 return color_table[DEFAULT_BACK_COLOR].color;
137} 162}
138 163
139const ColorEntry* TEWidget::getColorTable() const 164const ColorEntry* TEWidget::getColorTable() const
140{ 165{
141 return color_table; 166 return color_table;
142} 167}
143 168
144const ColorEntry* TEWidget::getdefaultColorTable() const 169const ColorEntry* TEWidget::getdefaultColorTable() const
145{ 170{
146 return base_color_table; 171 return base_color_table;
147} 172}
148 173
149 174
150const QPixmap *TEWidget::backgroundPixmap() 175const QPixmap *TEWidget::backgroundPixmap()
151{ 176{
152 static QPixmap *bg = new QPixmap("~/qpim/main/pics/faded_bg.xpm"); 177 static QPixmap *bg = new QPixmap("~/qpim/main/pics/faded_bg.xpm");
153 const QPixmap *pm = bg; 178 const QPixmap *pm = bg;
154 return pm; 179 return pm;
155} 180}
156 181
157void TEWidget::setColorTable(const ColorEntry table[]) 182void TEWidget::setColorTable(const ColorEntry table[])
158{ 183{
159 for (int i = 0; i < TABLE_COLORS; i++) color_table[i] = table[i]; 184 for (int i = 0; i < TABLE_COLORS; i++) color_table[i] = table[i];
160 185
161 const QPixmap* pm = backgroundPixmap(); 186 const QPixmap* pm = backgroundPixmap();
162 if (!pm) setBackgroundColor(color_table[DEFAULT_BACK_COLOR].color); 187 if (!pm) setBackgroundColor(color_table[DEFAULT_BACK_COLOR].color);
163 update(); 188 update();
164} 189}
165 190
166//FIXME: add backgroundPixmapChanged. 191//FIXME: add backgroundPixmapChanged.
167 192
168/* ------------------------------------------------------------------------- */ 193/* ------------------------------------------------------------------------- */
169/* */ 194/* */
170/* Font */ 195/* Font */
171/* */ 196/* */
172/* ------------------------------------------------------------------------- */ 197/* ------------------------------------------------------------------------- */
173 198
174/* 199/*
175 The VT100 has 32 special graphical characters. The usual vt100 extended 200 The VT100 has 32 special graphical characters. The usual vt100 extended
176 xterm fonts have these at 0x00..0x1f. 201 xterm fonts have these at 0x00..0x1f.
177 202
178 QT's iso mapping leaves 0x00..0x7f without any changes. But the graphicals 203 QT's iso mapping leaves 0x00..0x7f without any changes. But the graphicals
179 come in here as proper unicode characters. 204 come in here as proper unicode characters.
180 205
181 We treat non-iso10646 fonts as VT100 extended and do the requiered mapping 206 We treat non-iso10646 fonts as VT100 extended and do the requiered mapping
182 from unicode to 0x00..0x1f. The remaining translation is then left to the 207 from unicode to 0x00..0x1f. The remaining translation is then left to the
183 QCodec. 208 QCodec.
184*/ 209*/
185 210
186// assert for i in [0..31] : vt100extended(vt100_graphics[i]) == i. 211// assert for i in [0..31] : vt100extended(vt100_graphics[i]) == i.
187 212
188unsigned short vt100_graphics[32] = 213unsigned short vt100_graphics[32] =
189{ // 0/8 1/9 2/10 3/11 4/12 5/13 6/14 7/15 214{ // 0/8 1/9 2/10 3/11 4/12 5/13 6/14 7/15
190 0x0020, 0x25C6, 0x2592, 0x2409, 0x240c, 0x240d, 0x240a, 0x00b0, 215 0x0020, 0x25C6, 0x2592, 0x2409, 0x240c, 0x240d, 0x240a, 0x00b0,
191 0x00b1, 0x2424, 0x240b, 0x2518, 0x2510, 0x250c, 0x2514, 0x253c, 216 0x00b1, 0x2424, 0x240b, 0x2518, 0x2510, 0x250c, 0x2514, 0x253c,
192 0xF800, 0xF801, 0x2500, 0xF803, 0xF804, 0x251c, 0x2524, 0x2534, 217 0xF800, 0xF801, 0x2500, 0xF803, 0xF804, 0x251c, 0x2524, 0x2534,
193 0x252c, 0x2502, 0x2264, 0x2265, 0x03C0, 0x2260, 0x00A3, 0x00b7 218 0x252c, 0x2502, 0x2264, 0x2265, 0x03C0, 0x2260, 0x00A3, 0x00b7
@@ -1148,131 +1173,131 @@ void TEWidget::makeImage()
1148//FIXME: rename 'calcGeometry? 1173//FIXME: rename 'calcGeometry?
1149{ 1174{
1150 calcGeometry(); 1175 calcGeometry();
1151 image = (ca*) malloc(lines*columns*sizeof(ca)); 1176 image = (ca*) malloc(lines*columns*sizeof(ca));
1152 clearImage(); 1177 clearImage();
1153} 1178}
1154 1179
1155// calculate the needed size 1180// calculate the needed size
1156QSize TEWidget::calcSize(int cols, int lins) const 1181QSize TEWidget::calcSize(int cols, int lins) const
1157{ 1182{
1158 int frw = width() - contentsRect().width(); 1183 int frw = width() - contentsRect().width();
1159 int frh = height() - contentsRect().height(); 1184 int frh = height() - contentsRect().height();
1160 int scw = (scrollLoc==SCRNONE?0:scrollbar->width()); 1185 int scw = (scrollLoc==SCRNONE?0:scrollbar->width());
1161 return QSize( font_w*cols + 2*rimX + frw + scw, font_h*lins + 2*rimY + frh ); 1186 return QSize( font_w*cols + 2*rimX + frw + scw, font_h*lins + 2*rimY + frh );
1162} 1187}
1163 1188
1164QSize TEWidget::sizeHint() const 1189QSize TEWidget::sizeHint() const
1165{ 1190{
1166 return size(); 1191 return size();
1167} 1192}
1168 1193
1169void TEWidget::styleChange(QStyle &) 1194void TEWidget::styleChange(QStyle &)
1170{ 1195{
1171 propagateSize(); 1196 propagateSize();
1172} 1197}
1173 1198
1174#ifndef QT_NO_DRAGANDDROP 1199#ifndef QT_NO_DRAGANDDROP
1175 1200
1176/* --------------------------------------------------------------------- */ 1201/* --------------------------------------------------------------------- */
1177/* */ 1202/* */
1178/* Drag & Drop */ 1203/* Drag & Drop */
1179/* */ 1204/* */
1180/* --------------------------------------------------------------------- */ 1205/* --------------------------------------------------------------------- */
1181 1206
1182 1207
1183void TEWidget::dragEnterEvent(QDragEnterEvent* e) 1208void TEWidget::dragEnterEvent(QDragEnterEvent* e)
1184{ 1209{
1185 e->accept(QTextDrag::canDecode(e) || 1210 e->accept(QTextDrag::canDecode(e) ||
1186 QUriDrag::canDecode(e)); 1211 QUriDrag::canDecode(e));
1187} 1212}
1188 1213
1189void TEWidget::dropEvent(QDropEvent* event) 1214void TEWidget::dropEvent(QDropEvent* event)
1190{ 1215{
1191 // The current behaviour when url(s) are dropped is 1216 // The current behaviour when url(s) are dropped is
1192 // * if there is only ONE url and if it's a LOCAL one, ask for paste or cd 1217 // * if there is only ONE url and if it's a LOCAL one, ask for paste or cd
1193 // * in all other cases, just paste 1218 // * in all other cases, just paste
1194 // (for non-local ones, or for a list of URLs, 'cd' is nonsense) 1219 // (for non-local ones, or for a list of URLs, 'cd' is nonsense)
1195 QStrList strlist; 1220 QStrList strlist;
1196 int file_count = 0; 1221 int file_count = 0;
1197 dropText = ""; 1222 dropText = "";
1198 bool bPopup = true; 1223 bool bPopup = true;
1199 1224
1200 if(QUriDrag::decode(event, strlist)) { 1225 if(QUriDrag::decode(event, strlist)) {
1201 if (strlist.count()) { 1226 if (strlist.count()) {
1202 for(const char* p = strlist.first(); p; p = strlist.next()) { 1227 for(const char* p = strlist.first(); p; p = strlist.next()) {
1203 if(file_count++ > 0) { 1228 if(file_count++ > 0) {
1204 dropText += " "; 1229 dropText += " ";
1205 bPopup = false; // more than one file, don't popup 1230 bPopup = false; // more than one file, don't popup
1206 } 1231 }
1207 1232
1208/* 1233/*
1209 KURL url(p); 1234 KURL url(p);
1210 if (url.isLocalFile()) { 1235 if (url.isLocalFile()) {
1211 dropText += url.path(); // local URL : remove protocol 1236 dropText += url.path(); // local URL : remove protocol
1212 } 1237 }
1213 else { 1238 else {
1214 dropText += url.prettyURL(); 1239 dropText += url.prettyURL();
1215 bPopup = false; // a non-local file, don't popup 1240 bPopup = false; // a non-local file, don't popup
1216 } 1241 }
1217*/ 1242*/
1218 1243
1219 } 1244 }
1220 1245
1221 if (bPopup) 1246 if (bPopup)
1222 // m_drop->popup(pos() + event->pos()); 1247 // m_drop->popup(pos() + event->pos());
1223 m_drop->popup(mapToGlobal(event->pos())); 1248 m_drop->popup(mapToGlobal(event->pos()));
1224 else 1249 else
1225 { 1250 {
1226 if (currentSession) { 1251 if (currentSession) {
1227 currentSession->getEmulation()->sendString(dropText.local8Bit()); 1252 currentSession->getEmulation()->sendString(dropText.local8Bit());
1228 } 1253 }
1229// kdDebug() << "Drop:" << dropText.local8Bit() << "\n"; 1254// kdDebug() << "Drop:" << dropText.local8Bit() << "\n";
1230 } 1255 }
1231 } 1256 }
1232 } 1257 }
1233 else if(QTextDrag::decode(event, dropText)) { 1258 else if(QTextDrag::decode(event, dropText)) {
1234// kdDebug() << "Drop:" << dropText.local8Bit() << "\n"; 1259// kdDebug() << "Drop:" << dropText.local8Bit() << "\n";
1235 if (currentSession) { 1260 if (currentSession) {
1236 currentSession->getEmulation()->sendString(dropText.local8Bit()); 1261 currentSession->getEmulation()->sendString(dropText.local8Bit());
1237 } 1262 }
1238 // Paste it 1263 // Paste it
1239 } 1264 }
1240} 1265}
1241#endif 1266#endif
1242 1267
1243 1268
1244void TEWidget::drop_menu_activated(int item) 1269void TEWidget::drop_menu_activated(int)
1245{ 1270{
1246#ifndef QT_NO_DRAGANDDROP 1271#ifndef QT_NO_DRAGANDDROP
1247 switch (item) 1272 switch (item)
1248 { 1273 {
1249 case 0: // paste 1274 case 0: // paste
1250 currentSession->getEmulation()->sendString(dropText.local8Bit()); 1275 currentSession->getEmulation()->sendString(dropText.local8Bit());
1251// KWM::activate((Window)this->winId()); 1276// KWM::activate((Window)this->winId());
1252 break; 1277 break;
1253 case 1: // cd ... 1278 case 1: // cd ...
1254 currentSession->getEmulation()->sendString("cd "); 1279 currentSession->getEmulation()->sendString("cd ");
1255 struct stat statbuf; 1280 struct stat statbuf;
1256 if ( ::stat( QFile::encodeName( dropText ), &statbuf ) == 0 ) 1281 if ( ::stat( QFile::encodeName( dropText ), &statbuf ) == 0 )
1257 { 1282 {
1258 if ( !S_ISDIR(statbuf.st_mode) ) 1283 if ( !S_ISDIR(statbuf.st_mode) )
1259 { 1284 {
1260/* 1285/*
1261 KURL url; 1286 KURL url;
1262 url.setPath( dropText ); 1287 url.setPath( dropText );
1263 dropText = url.directory( true, false ); // remove filename 1288 dropText = url.directory( true, false ); // remove filename
1264*/ 1289*/
1265 } 1290 }
1266 } 1291 }
1267 dropText.replace(QRegExp(" "), "\\ "); // escape spaces 1292 dropText.replace(QRegExp(" "), "\\ "); // escape spaces
1268 currentSession->getEmulation()->sendString(dropText.local8Bit()); 1293 currentSession->getEmulation()->sendString(dropText.local8Bit());
1269 currentSession->getEmulation()->sendString("\n"); 1294 currentSession->getEmulation()->sendString("\n");
1270// KWM::activate((Window)this->winId()); 1295// KWM::activate((Window)this->winId());
1271 break; 1296 break;
1272 } 1297 }
1273#endif 1298#endif
1274} 1299}
1275 1300
1276QPushButton* TEWidget::cornerButton() { 1301QPushButton* TEWidget::cornerButton() {
1277 return m_cornerButton; 1302 return m_cornerButton;
1278} 1303}
diff --git a/noncore/apps/opie-console/TEWidget.h b/noncore/apps/opie-console/TEWidget.h
index 1b5300f..f03a16e 100644
--- a/noncore/apps/opie-console/TEWidget.h
+++ b/noncore/apps/opie-console/TEWidget.h
@@ -1,151 +1,133 @@
1/* ----------------------------------------------------------------------- */ 1/* ----------------------------------------------------------------------- */
2/* */ 2/* */
3/* [te_widget.h] Terminal Emulation Widget */ 3/* [te_widget.h] 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#ifndef TE_WIDGET_H 18#ifndef TE_WIDGET_H
19#define TE_WIDGET_H 19#define TE_WIDGET_H
20 20
21#include <qwidget.h> 21#include <qwidget.h>
22#include <qlabel.h> 22#include <qlabel.h>
23#include <qtimer.h> 23#include <qtimer.h>
24#include <qcolor.h> 24#include <qcolor.h>
25#include <qkeycode.h> 25#include <qkeycode.h>
26#include <qscrollbar.h> 26#include <qscrollbar.h>
27 27
28#include <qpopupmenu.h> 28#include <qpopupmenu.h>
29#include <qpushbutton.h> 29#include <qpushbutton.h>
30 30
31#include "TECommon.h" 31#include "TECommon.h"
32 32
33extern unsigned short vt100_graphics[32]; 33extern unsigned short vt100_graphics[32];
34 34
35 35
36 36
37static char * menu_xpm[] = { 37
38"12 12 5 1",
39 " c None",
40 ".c #000000",
41 "+c #FFFDAD",
42 "@c #FFFF00",
43 "#c #E5E100",
44" ",
45" ",
46" ......... ",
47" .+++++++. ",
48" .+@@@@#. ",
49" .+@@@#. ",
50" .+@@#. ",
51" .+@#. ",
52" .+#. ",
53" .+. ",
54" .. ",
55" "};
56 38
57class TESession; 39class TESession;
58 40
59// class Konsole; 41// class Konsole;
60 42
61class TEWidget : public QFrame 43class TEWidget : public QFrame
62// a widget representing attributed text 44// a widget representing attributed text
63{ 45{
64 Q_OBJECT 46 Q_OBJECT
65 47
66// friend class Konsole; 48// friend class Konsole;
67 49
68public: 50public:
69 51
70 TEWidget(QWidget *parent=0, const char *name=0); 52 TEWidget(QWidget *parent=0, const char *name=0);
71 virtual ~TEWidget(); 53 virtual ~TEWidget();
72 54
73public: 55public:
74 56
75 QColor getDefaultBackColor(); 57 QColor getDefaultBackColor();
76 QPushButton *cornerButton(); 58 QPushButton *cornerButton();
77 59
78 const ColorEntry* getColorTable() const; 60 const ColorEntry* getColorTable() const;
79 const ColorEntry* getdefaultColorTable() const; 61 const ColorEntry* getdefaultColorTable() const;
80 void setColorTable(const ColorEntry table[]); 62 void setColorTable(const ColorEntry table[]);
81 63
82 void setScrollbarLocation(int loc); 64 void setScrollbarLocation(int loc);
83 enum { SCRNONE=0, SCRLEFT=1, SCRRIGHT=2 }; 65 enum { SCRNONE=0, SCRLEFT=1, SCRRIGHT=2 };
84 66
85 void setScroll(int cursor, int lines); 67 void setScroll(int cursor, int lines);
86 void doScroll(int lines); 68 void doScroll(int lines);
87 69
88 void emitSelection(); 70 void emitSelection();
89 71
90public: 72public:
91 73
92 void setImage(const ca* const newimg, int lines, int columns); 74 void setImage(const ca* const newimg, int lines, int columns);
93 75
94 int Lines() { return lines; } 76 int Lines() { return lines; }
95 int Columns() { return columns; } 77 int Columns() { return columns; }
96 78
97 void calcGeometry(); 79 void calcGeometry();
98 void propagateSize(); 80 void propagateSize();
99 QSize calcSize(int cols, int lins) const; 81 QSize calcSize(int cols, int lins) const;
100 82
101 QSize sizeHint() const; 83 QSize sizeHint() const;
102 84
103public: 85public:
104 86
105 void Bell(); 87 void Bell();
106 void emitText(QString text); 88 void emitText(QString text);
107 void pasteClipboard(); 89 void pasteClipboard();
108 90
109signals: 91signals:
110 92
111 void keyPressedSignal(QKeyEvent *e); 93 void keyPressedSignal(QKeyEvent *e);
112 void mouseSignal(int cb, int cx, int cy); 94 void mouseSignal(int cb, int cx, int cy);
113 void changedImageSizeSignal(int lines, int columns); 95 void changedImageSizeSignal(int lines, int columns);
114 void changedHistoryCursor(int value); 96 void changedHistoryCursor(int value);
115 void configureRequest( TEWidget*, int state, int x, int y ); 97 void configureRequest( TEWidget*, int state, int x, int y );
116 98
117 void clearSelectionSignal(); 99 void clearSelectionSignal();
118 void beginSelectionSignal( const int x, const int y ); 100 void beginSelectionSignal( const int x, const int y );
119 void extendSelectionSignal( const int x, const int y ); 101 void extendSelectionSignal( const int x, const int y );
120 void endSelectionSignal(const BOOL preserve_line_breaks); 102 void endSelectionSignal(const BOOL preserve_line_breaks);
121 103
122 104
123protected: 105protected:
124 106
125 virtual void styleChange( QStyle& ); 107 virtual void styleChange( QStyle& );
126 108
127 bool eventFilter( QObject *, QEvent * ); 109 bool eventFilter( QObject *, QEvent * );
128 110
129 void drawAttrStr(QPainter &paint, QRect rect, 111 void drawAttrStr(QPainter &paint, QRect rect,
130 QString& str, ca attr, BOOL pm, BOOL clear); 112 QString& str, ca attr, BOOL pm, BOOL clear);
131 void paintEvent( QPaintEvent * ); 113 void paintEvent( QPaintEvent * );
132 114
133 void resizeEvent(QResizeEvent*); 115 void resizeEvent(QResizeEvent*);
134 116
135 void fontChange(const QFont &font); 117 void fontChange(const QFont &font);
136 void frameChanged(); 118 void frameChanged();
137 119
138 void mouseDoubleClickEvent(QMouseEvent* ev); 120 void mouseDoubleClickEvent(QMouseEvent* ev);
139 void mousePressEvent( QMouseEvent* ); 121 void mousePressEvent( QMouseEvent* );
140 void mouseReleaseEvent( QMouseEvent* ); 122 void mouseReleaseEvent( QMouseEvent* );
141 void mouseMoveEvent( QMouseEvent* ); 123 void mouseMoveEvent( QMouseEvent* );
142 124
143 void focusInEvent( QFocusEvent * ); 125 void focusInEvent( QFocusEvent * );
144 void focusOutEvent( QFocusEvent * ); 126 void focusOutEvent( QFocusEvent * );
145 bool focusNextPrevChild( bool next ); 127 bool focusNextPrevChild( bool next );
146 128
147#ifndef QT_NO_DRAGANDDROP 129#ifndef QT_NO_DRAGANDDROP
148 // Dnd 130 // Dnd
149 void dragEnterEvent(QDragEnterEvent* event); 131 void dragEnterEvent(QDragEnterEvent* event);
150 void dropEvent(QDropEvent* event); 132 void dropEvent(QDropEvent* event);
151#endif 133#endif
diff --git a/noncore/apps/opie-console/emulation_handler.cpp b/noncore/apps/opie-console/emulation_handler.cpp
index bdc8b43..bb3dd28 100644
--- a/noncore/apps/opie-console/emulation_handler.cpp
+++ b/noncore/apps/opie-console/emulation_handler.cpp
@@ -99,96 +99,102 @@ QFont EmulationHandler::font( int id ) {
99 case 0: 99 case 0:
100 name = QString::fromLatin1("Micro"); 100 name = QString::fromLatin1("Micro");
101 size = 4; 101 size = 4;
102 break; 102 break;
103 case 1: 103 case 1:
104 name = QString::fromLatin1("Fixed"); 104 name = QString::fromLatin1("Fixed");
105 size = 7; 105 size = 7;
106 break; 106 break;
107 case 2: 107 case 2:
108 name = QString::fromLatin1("Fixed"); 108 name = QString::fromLatin1("Fixed");
109 size = 12; 109 size = 12;
110 break; 110 break;
111 } 111 }
112 QFont font(name, size, QFont::Normal ); 112 QFont font(name, size, QFont::Normal );
113 font.setFixedPitch(TRUE ); 113 font.setFixedPitch(TRUE );
114 return font; 114 return font;
115} 115}
116QColor EmulationHandler::foreColor(int col) { 116QColor EmulationHandler::foreColor(int col) {
117 QColor co; 117 QColor co;
118 /* we need to switch it */ 118 /* we need to switch it */
119 switch( col ) { 119 switch( col ) {
120 default: 120 default:
121 case Profile::White: 121 case Profile::White:
122 /* color is black */ 122 /* color is black */
123 co = Qt::white; 123 co = Qt::white;
124 break; 124 break;
125 case Profile::Black: 125 case Profile::Black:
126 co = Qt::black; 126 co = Qt::black;
127 break; 127 break;
128 case Profile::Green: 128 case Profile::Green:
129 qWarning("Foreground green"); 129 qWarning("Foreground green");
130 co = Qt::green; 130 co = Qt::green;
131 break; 131 break;
132 case Profile::Orange: 132 case Profile::Orange:
133 qWarning("Foreground orange"); 133 qWarning("Foreground orange");
134 // FIXME needs better color here 134 // FIXME needs better color here
135 co = Qt::darkYellow; 135 co = Qt::darkYellow;
136 break; 136 break;
137 } 137 }
138 138
139 return co; 139 return co;
140} 140}
141QColor EmulationHandler::backColor(int col ) { 141QColor EmulationHandler::backColor(int col ) {
142 QColor co; 142 QColor co;
143 /* we need to switch it */ 143 /* we need to switch it */
144 switch( col ) { 144 switch( col ) {
145 default: 145 default:
146 case Profile::White: 146 case Profile::White:
147 /* color is white */ 147 /* color is white */
148 co = Qt::black; 148 co = Qt::black;
149 break; 149 break;
150 case Profile::Black: 150 case Profile::Black:
151 co = Qt::white; 151 co = Qt::white;
152 break; 152 break;
153 case Profile::Green: 153 case Profile::Green:
154 qWarning("Background black"); 154 qWarning("Background black");
155 co = Qt::black; 155 co = Qt::black;
156 break; 156 break;
157 case Profile::Orange: 157 case Profile::Orange:
158 qWarning("Background black"); 158 qWarning("Background black");
159 co = Qt::black; 159 co = Qt::black;
160 break; 160 break;
161 } 161 }
162 162
163 return co; 163 return co;
164} 164}
165 165
166QPushButton* EmulationHandler::cornerButton() { 166QPushButton* EmulationHandler::cornerButton() {
167 return m_teWid->cornerButton(); 167 return m_teWid->cornerButton();
168} 168}
169 169
170 170
171Script *EmulationHandler::script() { 171Script *EmulationHandler::script() {
172 return m_script; 172 return m_script;
173} 173}
174 174
175bool EmulationHandler::isRecording() { 175bool EmulationHandler::isRecording() {
176 return (m_script != 0); 176 return (m_script != 0);
177} 177}
178 178
179void EmulationHandler::startRecording() { 179void EmulationHandler::startRecording() {
180 if (!isRecording()) 180 if (!isRecording())
181 m_script = new Script(); 181 m_script = new Script();
182} 182}
183 183
184void EmulationHandler::clearScript() { 184void EmulationHandler::clearScript() {
185 if (isRecording()) { 185 if (isRecording()) {
186 delete m_script; 186 delete m_script;
187 m_script = 0; 187 m_script = 0;
188 } 188 }
189} 189}
190 190
191void EmulationHandler::runScript(const Script *script) { 191void EmulationHandler::runScript(const Script *script) {
192 emit send(script->script()); 192 emit send(script->script());
193} 193}
194 194
195void EmulationHandler::copy() {
196 m_teWid->emitSelection();
197}
198void EmulationHandler::paste() {
199 m_teWid->pasteClipboard();
200}
diff --git a/noncore/apps/opie-console/emulation_handler.h b/noncore/apps/opie-console/emulation_handler.h
index 7ca2cf3..12abbc5 100644
--- a/noncore/apps/opie-console/emulation_handler.h
+++ b/noncore/apps/opie-console/emulation_handler.h
@@ -1,90 +1,92 @@
1#ifndef OPIE_EMULATION_HANDLER_H 1#ifndef OPIE_EMULATION_HANDLER_H
2#define OPIE_EMULATION_HANDLER_H 2#define OPIE_EMULATION_HANDLER_H
3 3
4#include <qobject.h> 4#include <qobject.h>
5#include <qcolor.h> 5#include <qcolor.h>
6#include <qcstring.h> 6#include <qcstring.h>
7 7
8/* 8/*
9 * Badly ibotty lacks the time to finish 9 * Badly ibotty lacks the time to finish
10 * his widget in time.. 10 * his widget in time..
11 * Never the less we've to have an EmulationWidget 11 * Never the less we've to have an EmulationWidget
12 * This is why I'm taking the inferior not cleaned 12 * This is why I'm taking the inferior not cleaned
13 * up TE* KDE STUFF 13 * up TE* KDE STUFF
14 */ 14 */
15 15
16/** 16/**
17 * This is the layer above the IOLayer* 17 * This is the layer above the IOLayer*
18 * This nice QObject here will get stuff from 18 * This nice QObject here will get stuff from
19 * got a slot and a signal 19 * got a slot and a signal
20 * the signal for data 20 * the signal for data
21 * the slot for receiving 21 * the slot for receiving
22 * it'll set up the widget internally 22 * it'll set up the widget internally
23 * and manage the communication between 23 * and manage the communication between
24 * the pre QByteArray world! 24 * the pre QByteArray world!
25 */ 25 */
26class Profile; 26class Profile;
27class QWidget; 27class QWidget;
28class QPushButton; 28class QPushButton;
29class TEWidget; 29class TEWidget;
30class TEmulation; 30class TEmulation;
31class QFont; 31class QFont;
32class Script; 32class Script;
33class EmulationHandler : public QObject { 33class EmulationHandler : public QObject {
34 Q_OBJECT 34 Q_OBJECT
35public: 35public:
36 /** 36 /**
37 * simple c'tor the parent of the TEWdiget 37 * simple c'tor the parent of the TEWdiget
38 * and a name 38 * and a name
39 * and a Profile 39 * and a Profile
40 */ 40 */
41 EmulationHandler( const Profile&, QWidget* parent, const char* name = 0l ); 41 EmulationHandler( const Profile&, QWidget* parent, const char* name = 0l );
42 42
43 /** 43 /**
44 * delete all components 44 * delete all components
45 */ 45 */
46 ~EmulationHandler(); 46 ~EmulationHandler();
47 47
48 void load( const Profile& ); 48 void load( const Profile& );
49 QWidget* widget(); 49 QWidget* widget();
50 void setColor( const QColor& fore, const QColor& back ); 50 void setColor( const QColor& fore, const QColor& back );
51 QPushButton* cornerButton(); 51 QPushButton* cornerButton();
52 52
53 /* Scripts */ 53 /* Scripts */
54 /* Create a new script and record all typed characters */ 54 /* Create a new script and record all typed characters */
55 void startRecording(); 55 void startRecording();
56 56
57 /* Return whether we are currently recording a script */ 57 /* Return whether we are currently recording a script */
58 bool isRecording(); 58 bool isRecording();
59 59
60 /* Return the current script (or NULL) */ 60 /* Return the current script (or NULL) */
61 Script *script(); 61 Script *script();
62 62
63 /* Stop recording and remove the current script from memory */ 63 /* Stop recording and remove the current script from memory */
64 void clearScript(); 64 void clearScript();
65 65
66 /* Run a script by forwarding its keys to the EmulationLayer */ 66 /* Run a script by forwarding its keys to the EmulationLayer */
67 void runScript(const Script *); 67 void runScript(const Script *);
68 68
69signals: 69signals:
70 void send( const QByteArray& ); 70 void send( const QByteArray& );
71 void changeSize(int rows, int cols ); 71 void changeSize(int rows, int cols );
72 72
73 73
74public slots: 74public slots:
75 void recv( const QByteArray& ); 75 void recv( const QByteArray& );
76 void paste();
77 void copy();
76 78
77private slots: 79private slots:
78 void recvEmulation( const char*, int len ); 80 void recvEmulation( const char*, int len );
79private: 81private:
80 QFont font( int ); 82 QFont font( int );
81 QColor foreColor(int ); 83 QColor foreColor(int );
82 QColor backColor(int ); 84 QColor backColor(int );
83 85
84private: 86private:
85 TEWidget* m_teWid; 87 TEWidget* m_teWid;
86 TEmulation* m_teEmu; 88 TEmulation* m_teEmu;
87 Script * m_script; 89 Script * m_script;
88}; 90};
89 91
90#endif 92#endif
diff --git a/noncore/apps/opie-console/file_layer.cpp b/noncore/apps/opie-console/file_layer.cpp
index 43e9c8f..0c83700 100644
--- a/noncore/apps/opie-console/file_layer.cpp
+++ b/noncore/apps/opie-console/file_layer.cpp
@@ -1,23 +1,23 @@
1#include <qfile.h> 1#include <qfile.h>
2#include <opie/oprocess.h> 2#include <opie/oprocess.h>
3 3
4#include "file_layer.h" 4#include "file_layer.h"
5 5
6FileTransferLayer::FileTransferLayer(IOLayer *layer) 6FileTransferLayer::FileTransferLayer(IOLayer *layer)
7 : QObject(), m_layer( layer ) 7 : QObject(), m_layer( layer )
8{ 8{
9} 9}
10 10
11FileTransferLayer::~FileTransferLayer() { 11FileTransferLayer::~FileTransferLayer() {
12} 12}
13 13
14void FileTransferLayer::sendFile(const QFile& file) { 14void FileTransferLayer::sendFile(const QFile&) {
15 15
16} 16}
17 17
18void FileTransferLayer::sendFile(const QString& file) { 18void FileTransferLayer::sendFile(const QString&) {
19} 19}
20 20
21IOLayer* FileTransferLayer::layer() { 21IOLayer* FileTransferLayer::layer() {
22 return m_layer; 22 return m_layer;
23} 23}
diff --git a/noncore/apps/opie-console/io_bt.cpp b/noncore/apps/opie-console/io_bt.cpp
index 4486eea..8dd8151 100644
--- a/noncore/apps/opie-console/io_bt.cpp
+++ b/noncore/apps/opie-console/io_bt.cpp
@@ -1,77 +1,80 @@
1 1
2#include "io_bt.h" 2#include "io_bt.h"
3 3
4IOBt::IOBt( const Profile &config ) : IOSerial( config ) { 4IOBt::IOBt( const Profile &config ) : IOSerial( config ) {
5 m_attach = 0; 5 m_attach = 0;
6} 6}
7 7
8 8
9IOBt::~IOBt() { 9IOBt::~IOBt() {
10 if ( m_attach ) { 10 if ( m_attach ) {
11 delete m_attach; 11 delete m_attach;
12 } 12 }
13} 13}
14 14
15 15
16void IOBt::close() { 16void IOBt::close() {
17 17
18 IOSerial::close(); 18 IOSerial::close();
19 // still need error handling 19 // still need error handling
20 if ( m_attach ) { 20 if ( m_attach ) {
21 delete m_attach; 21 delete m_attach;
22 m_attach = 0; 22 m_attach = 0;
23 } 23 }
24} 24}
25 25
26bool IOBt::open() { 26bool IOBt::open() {
27 bool ret = false;
27 28
28 // only set up bt stuff if mac address was set, otherwise use the device set 29 // only set up bt stuff if mac address was set, otherwise use the device set
29 if ( !m_mac.isEmpty() ) { 30 if ( !m_mac.isEmpty() ) {
30 31
31 // now it should also be checked, if there is a connection to the device with that mac allready 32 // now it should also be checked, if there is a connection to the device with that mac allready
32 // hciattach here 33 // hciattach here
33 m_attach = new OProcess(); 34 m_attach = new OProcess();
34 *m_attach << "hciattach /dev/ttyS2 any 57600"; 35 *m_attach << "hciattach /dev/ttyS2 any 57600";
35 36
36 // then start hcid, then rcfomm handling (m_mac) 37 // then start hcid, then rcfomm handling (m_mac)
37 38
38 connect( m_attach, SIGNAL( processExited( OProcess* ) ), 39 connect( m_attach, SIGNAL( processExited( OProcess* ) ),
39 this, SLOT( slotExited( OProcess* ) ) ); 40 this, SLOT( slotExited( OProcess* ) ) );
40 41
41 if ( m_attach->start() ) { 42 if ( m_attach->start() ) {
42 IOSerial::open(); 43 ret = IOSerial::open();
43 } else { 44 } else {
44 qWarning("could not attach to device"); 45 qWarning("could not attach to device");
45 delete m_attach; 46 delete m_attach;
46 m_attach = 0; 47 m_attach = 0;
47 } 48 }
48 } else { 49 } else {
49 // directly to the normal serial 50 // directly to the normal serial
50 // TODO: look first if the connection really exists. ( is set up ) 51 // TODO: look first if the connection really exists. ( is set up )
51 52
52 IOSerial::open(); 53 ret =IOSerial::open();
53 } 54 }
55 return ret;
54} 56}
55 57
56void IOBt::reload( const Profile &config ) { 58void IOBt::reload( const Profile &config ) {
57 m_device = config.readEntry("Device", BT_DEFAULT_DEVICE); 59 m_device = config.readEntry("Device", BT_DEFAULT_DEVICE);
58 m_mac = config.readEntry("Mac", BT_DEFAULT_MAC); 60 m_mac = config.readEntry("Mac", BT_DEFAULT_MAC);
59 m_baud = config.readNumEntry("Baud", BT_DEFAULT_BAUD); 61 m_baud = config.readNumEntry("Baud", BT_DEFAULT_BAUD);
60 m_parity = config.readNumEntry("Parity", BT_DEFAULT_PARITY); 62 m_parity = config.readNumEntry("Parity", BT_DEFAULT_PARITY);
61 m_dbits = config.readNumEntry("DataBits", BT_DEFAULT_DBITS); 63 m_dbits = config.readNumEntry("DataBits", BT_DEFAULT_DBITS);
62 m_sbits = config.readNumEntry("StopBits", BT_DEFAULT_SBITS); 64 m_sbits = config.readNumEntry("StopBits", BT_DEFAULT_SBITS);
63 m_flow = config.readNumEntry("Flow", BT_DEFAULT_FLOW); 65 m_flow = config.readNumEntry("Flow", BT_DEFAULT_FLOW);
64} 66}
65 67
66 68
67QString IOBt::identifier() const { 69QString IOBt::identifier() const {
68 return "bluetooth"; 70 return "bluetooth";
69} 71}
70 72
71QString IOBt::name() const { 73QString IOBt::name() const {
72 return "BLuetooth IO Layer"; 74 return "BLuetooth IO Layer";
73} 75}
74 76
75void IOBt::slotExited( OProcess* proc ){ 77void IOBt::slotExited( OProcess* proc ){
76 close(); 78 close();
79 delete proc;
77} 80}
diff --git a/noncore/apps/opie-console/io_irda.cpp b/noncore/apps/opie-console/io_irda.cpp
index 56a373c..b3b693f 100644
--- a/noncore/apps/opie-console/io_irda.cpp
+++ b/noncore/apps/opie-console/io_irda.cpp
@@ -1,62 +1,65 @@
1 1
2#include "io_irda.h" 2#include "io_irda.h"
3 3
4IOIrda::IOIrda( const Profile &config ) : IOSerial( config ) { 4IOIrda::IOIrda( const Profile &config ) : IOSerial( config ) {
5 m_attach = 0; 5 m_attach = 0;
6} 6}
7 7
8 8
9IOIrda::~IOIrda() { 9IOIrda::~IOIrda() {
10 if ( m_attach ) { 10 if ( m_attach ) {
11 delete m_attach; 11 delete m_attach;
12 } 12 }
13} 13}
14 14
15 15
16void IOIrda::close() { 16void IOIrda::close() {
17 17
18 IOSerial::close(); 18 IOSerial::close();
19 // still need error handling 19 // still need error handling
20 delete m_attach; 20 delete m_attach;
21} 21}
22 22
23bool IOIrda::open() { 23bool IOIrda::open() {
24 bool ret;
24 25
25 // irdaattach here 26 // irdaattach here
26 m_attach = new OProcess(); 27 m_attach = new OProcess();
27 *m_attach << "irattach /dev/ttyS2 -s"; 28 *m_attach << "irattach /dev/ttyS2 -s";
28 29
29 connect( m_attach, SIGNAL( processExited( OProcess* ) ), 30 connect( m_attach, SIGNAL( processExited( OProcess* ) ),
30 this, SLOT( slotExited( OProcess* ) ) ); 31 this, SLOT( slotExited( OProcess* ) ) );
31 32
32 if ( m_attach->start() ) { 33 if ( m_attach->start() ) {
33 IOSerial::open(); 34 ret= IOSerial::open();
34 } else { 35 } else {
35 // emit error!!! 36 // emit error!!!
36 qWarning("could not attach to device"); 37 qWarning("could not attach to device");
37 delete m_attach; 38 delete m_attach;
38 m_attach = 0l; 39 m_attach = 0l;
39 } 40 }
41 return ret;
40} 42}
41 43
42void IOIrda::reload( const Profile &config ) { 44void IOIrda::reload( const Profile &config ) {
43 m_device = config.readEntry("Device", IRDA_DEFAULT_DEVICE); 45 m_device = config.readEntry("Device", IRDA_DEFAULT_DEVICE);
44 m_baud = config.readNumEntry("Baud", IRDA_DEFAULT_BAUD); 46 m_baud = config.readNumEntry("Baud", IRDA_DEFAULT_BAUD);
45 m_parity = config.readNumEntry("Parity", IRDA_DEFAULT_PARITY); 47 m_parity = config.readNumEntry("Parity", IRDA_DEFAULT_PARITY);
46 m_dbits = config.readNumEntry("DataBits", IRDA_DEFAULT_DBITS); 48 m_dbits = config.readNumEntry("DataBits", IRDA_DEFAULT_DBITS);
47 m_sbits = config.readNumEntry("StopBits", IRDA_DEFAULT_SBITS); 49 m_sbits = config.readNumEntry("StopBits", IRDA_DEFAULT_SBITS);
48 m_flow = config.readNumEntry("Flow", IRDA_DEFAULT_FLOW); 50 m_flow = config.readNumEntry("Flow", IRDA_DEFAULT_FLOW);
49} 51}
50 52
51 53
52QString IOIrda::identifier() const { 54QString IOIrda::identifier() const {
53 return "irda"; 55 return "irda";
54} 56}
55 57
56QString IOIrda::name() const { 58QString IOIrda::name() const {
57 return "Irda IO Layer"; 59 return "Irda IO Layer";
58} 60}
59 61
60void IOIrda::slotExited(OProcess* proc ){ 62void IOIrda::slotExited(OProcess* proc ){
61 close(); 63 close();
64 delete proc;
62} 65}
diff --git a/noncore/apps/opie-console/mainwindow.cpp b/noncore/apps/opie-console/mainwindow.cpp
index e2f4d12..02a3fa9 100644
--- a/noncore/apps/opie-console/mainwindow.cpp
+++ b/noncore/apps/opie-console/mainwindow.cpp
@@ -1,320 +1,344 @@
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> 5#include <qlabel.h>
6#include <qpopupmenu.h> 6#include <qpopupmenu.h>
7#include <qtoolbar.h> 7#include <qtoolbar.h>
8#include <qmessagebox.h> 8#include <qmessagebox.h>
9#include <qpushbutton.h> 9#include <qpushbutton.h>
10#include <qwhatsthis.h> 10#include <qwhatsthis.h>
11 11
12#include <qpe/resource.h> 12#include <qpe/resource.h>
13 13
14#include <opie/ofiledialog.h> 14#include <opie/ofiledialog.h>
15 15
16#include "keytrans.h" 16#include "keytrans.h"
17#include "profileeditordialog.h" 17#include "profileeditordialog.h"
18#include "configdialog.h" 18#include "configdialog.h"
19#include "default.h" 19#include "default.h"
20#include "metafactory.h" 20#include "metafactory.h"
21#include "profile.h" 21#include "profile.h"
22#include "profilemanager.h" 22#include "profilemanager.h"
23#include "mainwindow.h" 23#include "mainwindow.h"
24#include "tabwidget.h" 24#include "tabwidget.h"
25#include "transferdialog.h" 25#include "transferdialog.h"
26#include "function_keyboard.h" 26#include "function_keyboard.h"
27#include "emulation_handler.h" 27#include "emulation_handler.h"
28#include "script.h" 28#include "script.h"
29#include "quick_button.h" 29#include "quick_button.h"
30 30
31 31
32 32
33MainWindow::MainWindow(QWidget *parent, const char *name, WFlags) : QMainWindow(parent, name, WStyle_ContextHelp) { 33MainWindow::MainWindow(QWidget *parent, const char *name, WFlags) : QMainWindow(parent, name, WStyle_ContextHelp) {
34 KeyTrans::loadAll(); 34 KeyTrans::loadAll();
35 for (int i = 0; i < KeyTrans::count(); i++ ) { 35 for (int i = 0; i < KeyTrans::count(); i++ ) {
36 KeyTrans* s = KeyTrans::find(i ); 36 KeyTrans* s = KeyTrans::find(i );
37 assert( s ); 37 assert( s );
38 } 38 }
39 m_factory = new MetaFactory(); 39 m_factory = new MetaFactory();
40 Default def(m_factory); 40 Default def(m_factory);
41 m_sessions.setAutoDelete( TRUE ); 41 m_sessions.setAutoDelete( TRUE );
42 m_curSession = 0; 42 m_curSession = 0;
43 m_manager = new ProfileManager( m_factory ); 43 m_manager = new ProfileManager( m_factory );
44 m_manager->load(); 44 m_manager->load();
45 45
46 initUI(); 46 initUI();
47 populateProfiles(); 47 populateProfiles();
48} 48}
49void MainWindow::initUI() { 49void MainWindow::initUI() {
50 setToolBarsMovable( FALSE ); 50 setToolBarsMovable( FALSE );
51 51
52 /* tool bar for the menu */ 52 /* tool bar for the menu */
53 m_tool = new QToolBar( this ); 53 m_tool = new QToolBar( this );
54 m_tool->setHorizontalStretchable( TRUE ); 54 m_tool->setHorizontalStretchable( TRUE );
55 55
56 m_bar = new QMenuBar( m_tool ); 56 m_bar = new QMenuBar( m_tool );
57 m_console = new QPopupMenu( this ); 57 m_console = new QPopupMenu( this );
58 m_scripts = new QPopupMenu( this ); 58 m_scripts = new QPopupMenu( this );
59 m_sessionsPop= new QPopupMenu( this ); 59 m_sessionsPop= new QPopupMenu( this );
60 //m_settings = new QPopupMenu( this ); 60 //m_settings = new QPopupMenu( this );
61 61
62 /* add a toolbar for icons */ 62 /* add a toolbar for icons */
63 m_icons = new QToolBar(this); 63 m_icons = new QToolBar(this);
64 64
65 65
66 66
67 67
68 /* 68 /*
69 * the settings action 69 * the settings action
70 */ 70 */
71 m_setProfiles = new QAction(tr("Configure Profiles"), 71 m_setProfiles = new QAction(tr("Configure Profiles"),
72 Resource::loadPixmap( "SettingsIcon" ), 72 Resource::loadPixmap( "SettingsIcon" ),
73 QString::null, 0, this, 0); 73 QString::null, 0, this, 0);
74 // m_setProfiles->addTo( m_settings ); 74 // m_setProfiles->addTo( m_settings );
75 m_setProfiles->addTo( m_icons ); 75 m_setProfiles->addTo( m_icons );
76 m_setProfiles->addTo( m_console ); 76 m_setProfiles->addTo( m_console );
77 connect( m_setProfiles, SIGNAL(activated() ), 77 connect( m_setProfiles, SIGNAL(activated() ),
78 this, SLOT(slotConfigure() ) ); 78 this, SLOT(slotConfigure() ) );
79 79
80 m_console->insertSeparator(); 80 m_console->insertSeparator();
81 /* 81 /*
82 * new Action for new sessions 82 * new Action for new sessions
83 */ 83 */
84 QAction* a = new QAction(tr("New Connection"), 84 QAction* a = new QAction(tr("New Connection"),
85 Resource::loadPixmap( "new" ), 85 Resource::loadPixmap( "new" ),
86 QString::null, 0, this, 0); 86 QString::null, 0, this, 0);
87 a->addTo( m_console ); 87 a->addTo( m_console );
88 a->addTo( m_icons ); 88 a->addTo( m_icons );
89 connect(a, SIGNAL(activated() ), 89 connect(a, SIGNAL(activated() ),
90 this, SLOT(slotNew() ) ); 90 this, SLOT(slotNew() ) );
91 91
92 m_console->insertSeparator();
93 /* save icon is not available */
94 a = new QAction(tr("Save Connection"),
95 Resource::loadPixmap("save"), QString::null,
96 0, this, 0 );
97 a->addTo( m_console );
98 connect(a, SIGNAL(activated() ),
99 this, SLOT(slotSaveSession() ) );
100 m_console->insertSeparator();
101
92 /* 102 /*
93 * connect action 103 * connect action
94 */ 104 */
95 m_connect = new QAction(); 105 m_connect = new QAction();
96 m_connect->setText( tr("Connect") ); 106 m_connect->setText( tr("Connect") );
97 m_connect->addTo( m_console ); 107 m_connect->addTo( m_console );
98 connect(m_connect, SIGNAL(activated() ), 108 connect(m_connect, SIGNAL(activated() ),
99 this, SLOT(slotConnect() ) ); 109 this, SLOT(slotConnect() ) );
100 110
101 /* 111 /*
102 * disconnect action 112 * disconnect action
103 */ 113 */
104 m_disconnect = new QAction(); 114 m_disconnect = new QAction();
105 m_disconnect->setText( tr("Disconnect") ); 115 m_disconnect->setText( tr("Disconnect") );
106 m_disconnect->addTo( m_console ); 116 m_disconnect->addTo( m_console );
107 connect(m_disconnect, SIGNAL(activated() ), 117 connect(m_disconnect, SIGNAL(activated() ),
108 this, SLOT(slotDisconnect() ) ); 118 this, SLOT(slotDisconnect() ) );
109 119
110 m_console->insertSeparator(); 120 m_console->insertSeparator();
111 121
112 m_transfer = new QAction(); 122 m_transfer = new QAction();
113 m_transfer->setText( tr("Transfer file...") ); 123 m_transfer->setText( tr("Transfer file...") );
114 m_transfer->addTo( m_console ); 124 m_transfer->addTo( m_console );
115 connect(m_transfer, SIGNAL(activated() ), 125 connect(m_transfer, SIGNAL(activated() ),
116 this, SLOT(slotTransfer() ) ); 126 this, SLOT(slotTransfer() ) );
117 127
118 128
119 /* 129 /*
120 * fullscreen 130 * fullscreen
121 */ 131 */
122 m_isFullscreen = false; 132 m_isFullscreen = false;
123 133
124 m_fullscreen = new QAction( tr("Full screen"), Resource::loadPixmap( "fullscreen" ) 134 m_fullscreen = new QAction( tr("Full screen"), Resource::loadPixmap( "fullscreen" )
125 , QString::null, 0, this, 0); 135 , QString::null, 0, this, 0);
126 m_fullscreen->addTo( m_console ); 136 m_fullscreen->addTo( m_console );
127 m_fullscreen->addTo( m_icons ); 137 m_fullscreen->addTo( m_icons );
128 connect( m_fullscreen, SIGNAL( activated() ), 138 connect( m_fullscreen, SIGNAL( activated() ),
129 this, SLOT( slotFullscreen() ) ); 139 this, SLOT( slotFullscreen() ) );
130 140
131 m_console->insertSeparator(); 141 m_console->insertSeparator();
132 /* 142 /*
133 * terminate action 143 * terminate action
134 */ 144 */
135 m_terminate = new QAction(); 145 m_terminate = new QAction();
136 m_terminate->setText( tr("Terminate") ); 146 m_terminate->setText( tr("Terminate") );
137 m_terminate->addTo( m_console ); 147 m_terminate->addTo( m_console );
138 connect(m_terminate, SIGNAL(activated() ), 148 connect(m_terminate, SIGNAL(activated() ),
139 this, SLOT(slotTerminate() ) ); 149 this, SLOT(slotTerminate() ) );
140 150
141 m_closewindow = new QAction(); 151 m_closewindow = new QAction();
142 m_closewindow->setText( tr("Close Window") ); 152 m_closewindow->setText( tr("Close Window") );
143 m_closewindow->addTo( m_console ); 153 m_closewindow->addTo( m_console );
144 connect( m_closewindow, SIGNAL(activated() ), 154 connect( m_closewindow, SIGNAL(activated() ),
145 this, SLOT(slotClose() ) ); 155 this, SLOT(slotClose() ) );
146 156
147 157
148 /* 158 /*
149 * script actions 159 * script actions
150 */ 160 */
151 m_recordScript = new QAction(tr("Record Script"), QString::null, 0, this, 0); 161 m_recordScript = new QAction(tr("Record Script"), QString::null, 0, this, 0);
152 m_recordScript->addTo(m_scripts); 162 m_recordScript->addTo(m_scripts);
153 connect(m_recordScript, SIGNAL(activated()), this, SLOT(slotRecordScript())); 163 connect(m_recordScript, SIGNAL(activated()), this, SLOT(slotRecordScript()));
154 164
155 m_saveScript = new QAction(tr("Save Script"), QString::null, 0, this, 0); 165 m_saveScript = new QAction(tr("Save Script"), QString::null, 0, this, 0);
156 m_saveScript->addTo(m_scripts); 166 m_saveScript->addTo(m_scripts);
157 connect(m_saveScript, SIGNAL(activated()), this, SLOT(slotSaveScript())); 167 connect(m_saveScript, SIGNAL(activated()), this, SLOT(slotSaveScript()));
158 168
159 m_runScript = new QAction(tr("Run Script"), QString::null, 0, this, 0); 169 m_runScript = new QAction(tr("Run Script"), QString::null, 0, this, 0);
160 m_runScript->addTo(m_scripts); 170 m_runScript->addTo(m_scripts);
161 connect(m_runScript, SIGNAL(activated()), this, SLOT(slotRunScript())); 171 connect(m_runScript, SIGNAL(activated()), this, SLOT(slotRunScript()));
162 172
163 /* 173 /*
164 * action that open/closes the keyboard 174 * action that open/closes the keyboard
165 */ 175 */
166 m_openKeys = new QAction (tr("Open Keyboard..."), 176 m_openKeys = new QAction (tr("Open Keyboard..."),
167 Resource::loadPixmap( "down" ), 177 Resource::loadPixmap( "down" ),
168 QString::null, 0, this, 0); 178 QString::null, 0, this, 0);
169 179
170 m_openKeys->setToggleAction(true); 180 m_openKeys->setToggleAction(true);
171 181
172 connect (m_openKeys, SIGNAL(toggled(bool)), 182 connect (m_openKeys, SIGNAL(toggled(bool)),
173 this, SLOT(slotOpenKeb(bool))); 183 this, SLOT(slotOpenKeb(bool)));
174 m_openKeys->addTo(m_icons); 184 m_openKeys->addTo(m_icons);
175 185
176 186
177 /* 187 /*
178 * action that open/closes the keyboard 188 * action that open/closes the keyboard
179 189
180 m_openButtons = new QAction ( tr( "Open Buttons..." ), 190 m_openButtons = new QAction ( tr( "Open Buttons..." ),
181 Resource::loadPixmap( "" ), 191 Resource::loadPixmap( "" ),
182 QString::null, 0, this, 0 ); 192 QString::null, 0, this, 0 );
183 193
184 m_openButtons->setToggleAction( true ); 194 m_openButtons->setToggleAction( true );
185 195
186 connect ( m_openButtons, SIGNAL( toggled( bool ) ), 196 connect ( m_openButtons, SIGNAL( toggled( bool ) ),
187 this, SLOT( slotOpenButtons( bool ) ) ); 197 this, SLOT( slotOpenButtons( bool ) ) );
188 m_openButtons->addTo( m_icons ); 198 m_openButtons->addTo( m_icons );
189 199
190 */ 200 */
191 201
192 /* insert the submenu */ 202 /* insert the submenu */
193 m_console->insertItem(tr("New from Profile"), m_sessionsPop, 203 m_console->insertItem(tr("New from Profile"), m_sessionsPop,
194 -1, 0); 204 -1, 0);
195 205
196 /* insert the connection menu */ 206 /* insert the connection menu */
197 m_bar->insertItem( tr("Connection"), m_console ); 207 m_bar->insertItem( tr("Connection"), m_console );
198 208
199 /* the scripts menu */ 209 /* the scripts menu */
200 m_bar->insertItem( tr("Scripts"), m_scripts ); 210 m_bar->insertItem( tr("Scripts"), m_scripts );
201 211
202 /* the settings menu */ 212 /* the settings menu */
203 // m_bar->insertItem( tr("Settings"), m_settings ); 213 // m_bar->insertItem( tr("Settings"), m_settings );
204 214
205 /* and the keyboard */ 215 /* and the keyboard */
206 m_keyBar = new QToolBar(this); 216 m_keyBar = new QToolBar(this);
207 addToolBar( m_keyBar, "Keyboard", QMainWindow::Top, TRUE ); 217 addToolBar( m_keyBar, "Keyboard", QMainWindow::Top, TRUE );
208 m_keyBar->setHorizontalStretchable( TRUE ); 218 m_keyBar->setHorizontalStretchable( TRUE );
209 m_keyBar->hide(); 219 m_keyBar->hide();
210 220
211 m_kb = new FunctionKeyboard(m_keyBar); 221 m_kb = new FunctionKeyboard(m_keyBar);
212 connect(m_kb, SIGNAL(keyPressed(FKey, ushort, ushort, bool)), 222 connect(m_kb, SIGNAL(keyPressed(FKey, ushort, ushort, bool)),
213 this, SLOT(slotKeyReceived(FKey, ushort, ushort, bool))); 223 this, SLOT(slotKeyReceived(FKey, ushort, ushort, bool)));
214 224
215 m_buttonBar = new QToolBar( this ); 225 m_buttonBar = new QToolBar( this );
216 addToolBar( m_buttonBar, "Buttons", QMainWindow::Top, TRUE ); 226 addToolBar( m_buttonBar, "Buttons", QMainWindow::Top, TRUE );
217 m_buttonBar->setHorizontalStretchable( TRUE ); 227 m_buttonBar->setHorizontalStretchable( TRUE );
218 m_buttonBar->hide(); 228 m_buttonBar->hide();
219 229
220 /* 230 /*
221 m_qb = new QuickButton( m_buttonBar ); 231 m_qb = new QuickButton( m_buttonBar );
222 connect( m_qb, SIGNAL( keyPressed( ushort, ushort, bool, bool, bool) ), 232 connect( m_qb, SIGNAL( keyPressed( ushort, ushort, bool, bool, bool) ),
223 this, SLOT( slotKeyReceived( ushort, ushort, bool, bool, bool) ) ); 233 this, SLOT( slotKeyReceived( ushort, ushort, bool, bool, bool) ) );
224 */ 234 */
235 /* now add the copy and paste actions */
236 a = new QAction(tr("Copy"),
237 Resource::loadPixmap("copy"), QString::null,
238 0, this, 0 );
239 //a->addTo( m_icons );
240 connect( a, SIGNAL(activated() ),
241 this, SLOT(slotCopy() ) );
242
243 a = new QAction(tr("Paste"),
244 Resource::loadPixmap("paste"), QString::null,
245 0, this, 0 );
246 a->addTo( m_icons );
247 connect( a, SIGNAL(activated() ),
248 this, SLOT(slotPaste() ) );
225 249
226 250
227 m_connect->setEnabled( false ); 251 m_connect->setEnabled( false );
228 m_disconnect->setEnabled( false ); 252 m_disconnect->setEnabled( false );
229 m_terminate->setEnabled( false ); 253 m_terminate->setEnabled( false );
230 m_transfer->setEnabled( false ); 254 m_transfer->setEnabled( false );
231 m_recordScript->setEnabled( false ); 255 m_recordScript->setEnabled( false );
232 m_saveScript->setEnabled( false ); 256 m_saveScript->setEnabled( false );
233 m_runScript->setEnabled( false ); 257 m_runScript->setEnabled( false );
234 m_fullscreen->setEnabled( false ); 258 m_fullscreen->setEnabled( false );
235 m_closewindow->setEnabled( false ); 259 m_closewindow->setEnabled( false );
236 260
237 /* 261 /*
238 * connect to the menu activation 262 * connect to the menu activation
239 */ 263 */
240 connect( m_sessionsPop, SIGNAL(activated( int ) ), 264 connect( m_sessionsPop, SIGNAL(activated( int ) ),
241 this, SLOT(slotProfile( int ) ) ); 265 this, SLOT(slotProfile( int ) ) );
242 266
243 m_consoleWindow = new TabWidget( this, "blah"); 267 m_consoleWindow = new TabWidget( this, "blah");
244 connect(m_consoleWindow, SIGNAL(activated(Session*) ), 268 connect(m_consoleWindow, SIGNAL(activated(Session*) ),
245 this, SLOT(slotSessionChanged(Session*) ) ); 269 this, SLOT(slotSessionChanged(Session*) ) );
246 setCentralWidget( m_consoleWindow ); 270 setCentralWidget( m_consoleWindow );
247 271
248} 272}
249 273
250ProfileManager* MainWindow::manager() { 274ProfileManager* MainWindow::manager() {
251 return m_manager; 275 return m_manager;
252} 276}
253TabWidget* MainWindow::tabWidget() { 277TabWidget* MainWindow::tabWidget() {
254 return m_consoleWindow; 278 return m_consoleWindow;
255} 279}
256void MainWindow::populateProfiles() { 280void MainWindow::populateProfiles() {
257 m_sessionsPop->clear(); 281 m_sessionsPop->clear();
258 Profile::ValueList list = manager()->all(); 282 Profile::ValueList list = manager()->all();
259 for (Profile::ValueList::Iterator it = list.begin(); it != list.end(); ++it ) { 283 for (Profile::ValueList::Iterator it = list.begin(); it != list.end(); ++it ) {
260 m_sessionsPop->insertItem( (*it).name() ); 284 m_sessionsPop->insertItem( (*it).name() );
261 } 285 }
262 286
263} 287}
264MainWindow::~MainWindow() { 288MainWindow::~MainWindow() {
265 delete m_factory; 289 delete m_factory;
266 manager()->save(); 290 manager()->save();
267} 291}
268 292
269MetaFactory* MainWindow::factory() { 293MetaFactory* MainWindow::factory() {
270 return m_factory; 294 return m_factory;
271} 295}
272 296
273Session* MainWindow::currentSession() { 297Session* MainWindow::currentSession() {
274 return m_curSession; 298 return m_curSession;
275} 299}
276 300
277QList<Session> MainWindow::sessions() { 301QList<Session> MainWindow::sessions() {
278 return m_sessions; 302 return m_sessions;
279} 303}
280 304
281void MainWindow::slotNew() { 305void MainWindow::slotNew() {
282 ProfileEditorDialog dlg(factory() ); 306 ProfileEditorDialog dlg(factory() );
283 dlg.showMaximized(); 307 dlg.showMaximized();
284 int ret = dlg.exec(); 308 int ret = dlg.exec();
285 309
286 if ( ret == QDialog::Accepted ) { 310 if ( ret == QDialog::Accepted ) {
287 create( dlg.profile() ); 311 create( dlg.profile() );
288 } 312 }
289} 313}
290 314
291void MainWindow::slotRecordScript() { 315void MainWindow::slotRecordScript() {
292 if (currentSession()) { 316 if (currentSession()) {
293 currentSession()->emulationHandler()->startRecording(); 317 currentSession()->emulationHandler()->startRecording();
294 } 318 }
295} 319}
296 320
297void MainWindow::slotSaveScript() { 321void MainWindow::slotSaveScript() {
298 if (currentSession() && currentSession()->emulationHandler()->isRecording()) { 322 if (currentSession() && currentSession()->emulationHandler()->isRecording()) {
299 MimeTypes types; 323 MimeTypes types;
300 QStringList script; 324 QStringList script;
301 script << "text/plain"; 325 script << "text/plain";
302 script << "text/all"; 326 script << "text/all";
303 script << "application/octet-stream"; 327 script << "application/octet-stream";
304 types.insert("Script", script); 328 types.insert("Script", script);
305 QString filename = OFileDialog::getSaveFileName(2, "/", QString::null, types); 329 QString filename = OFileDialog::getSaveFileName(2, "/", QString::null, types);
306 if (!filename.isEmpty()) { 330 if (!filename.isEmpty()) {
307 currentSession()->emulationHandler()->script()->saveTo(filename); 331 currentSession()->emulationHandler()->script()->saveTo(filename);
308 currentSession()->emulationHandler()->clearScript(); 332 currentSession()->emulationHandler()->clearScript();
309 } 333 }
310 } 334 }
311} 335}
312 336
313void MainWindow::slotRunScript() { 337void MainWindow::slotRunScript() {
314 if (currentSession()) { 338 if (currentSession()) {
315 MimeTypes types; 339 MimeTypes types;
316 QStringList script; 340 QStringList script;
317 script << "text/plain"; 341 script << "text/plain";
318 script << "text/all"; 342 script << "text/all";
319 script << "application/octet-stream"; 343 script << "application/octet-stream";
320 types.insert("Script", script); 344 types.insert("Script", script);
@@ -446,96 +470,119 @@ void MainWindow::create( const Profile& prof ) {
446 QWidget *w = currentSession()->widget(); 470 QWidget *w = currentSession()->widget();
447 if(w) w->setFocus(); 471 if(w) w->setFocus();
448} 472}
449 473
450void MainWindow::slotTransfer() 474void MainWindow::slotTransfer()
451{ 475{
452 if ( currentSession() ) { 476 if ( currentSession() ) {
453 TransferDialog dlg(currentSession()->widgetStack(), this); 477 TransferDialog dlg(currentSession()->widgetStack(), this);
454 dlg.showMaximized(); 478 dlg.showMaximized();
455 //currentSession()->widgetStack()->add(dlg); 479 //currentSession()->widgetStack()->add(dlg);
456 dlg.exec(); 480 dlg.exec();
457 } 481 }
458} 482}
459 483
460 484
461void MainWindow::slotOpenKeb(bool state) { 485void MainWindow::slotOpenKeb(bool state) {
462 486
463 if (state) m_keyBar->show(); 487 if (state) m_keyBar->show();
464 else m_keyBar->hide(); 488 else m_keyBar->hide();
465 489
466} 490}
467 491
468 492
469void MainWindow::slotOpenButtons( bool state ) { 493void MainWindow::slotOpenButtons( bool state ) {
470 494
471 if ( state ) { 495 if ( state ) {
472 m_buttonBar->show(); 496 m_buttonBar->show();
473 } else { 497 } else {
474 m_buttonBar->hide(); 498 m_buttonBar->hide();
475 } 499 }
476} 500}
477 501
478 502
479 503
480void MainWindow::slotSessionChanged( Session* ses ) { 504void MainWindow::slotSessionChanged( Session* ses ) {
481 qWarning("changed!"); 505 qWarning("changed!");
482 if ( ses ) { 506 if ( ses ) {
483 m_curSession = ses; 507 m_curSession = ses;
484 qDebug(QString("is connected : %1").arg( m_curSession->layer()->isConnected() ) ); 508 qDebug(QString("is connected : %1").arg( m_curSession->layer()->isConnected() ) );
485 if ( m_curSession->layer()->isConnected() ) { 509 if ( m_curSession->layer()->isConnected() ) {
486 m_connect->setEnabled( false ); 510 m_connect->setEnabled( false );
487 m_disconnect->setEnabled( true ); 511 m_disconnect->setEnabled( true );
488 } else { 512 } else {
489 m_connect->setEnabled( true ); 513 m_connect->setEnabled( true );
490 m_disconnect->setEnabled( false ); 514 m_disconnect->setEnabled( false );
491 } 515 }
492 516
493 QWidget *w = m_curSession->widget(); 517 QWidget *w = m_curSession->widget();
494 if(w) w->setFocus(); 518 if(w) w->setFocus();
495 } 519 }
496} 520}
497 521
498void MainWindow::slotFullscreen() { 522void MainWindow::slotFullscreen() {
499 523
500 524
501 525
502 if ( m_isFullscreen ) { 526 if ( m_isFullscreen ) {
503 ( m_curSession->widgetStack() )->reparent( savedParentFullscreen, 0, QPoint(0,0), true ); 527 ( m_curSession->widgetStack() )->reparent( savedParentFullscreen, 0, QPoint(0,0), true );
504 ( m_curSession->widgetStack() )->resize( savedParentFullscreen->width(), savedParentFullscreen->height() ); 528 ( m_curSession->widgetStack() )->resize( savedParentFullscreen->width(), savedParentFullscreen->height() );
505 ( m_curSession->emulationHandler() )->cornerButton()->hide(); 529 ( m_curSession->emulationHandler() )->cornerButton()->hide();
506 disconnect( ( m_curSession->emulationHandler() )->cornerButton(), SIGNAL( pressed() ), this, SLOT( slotFullscreen() ) ); 530 disconnect( ( m_curSession->emulationHandler() )->cornerButton(), SIGNAL( pressed() ), this, SLOT( slotFullscreen() ) );
507 531
508 } else { 532 } else {
509 savedParentFullscreen = ( m_curSession->widgetStack() )->parentWidget(); 533 savedParentFullscreen = ( m_curSession->widgetStack() )->parentWidget();
510 ( m_curSession->widgetStack() )->setFrameStyle( QFrame::NoFrame ); 534 ( m_curSession->widgetStack() )->setFrameStyle( QFrame::NoFrame );
511 ( m_curSession->widgetStack() )->reparent( 0, WStyle_Tool | WStyle_Customize | WStyle_StaysOnTop 535 ( m_curSession->widgetStack() )->reparent( 0, WStyle_Tool | WStyle_Customize | WStyle_StaysOnTop
512 , QPoint(0,0), false ); 536 , QPoint(0,0), false );
513 ( m_curSession->widgetStack() )->resize( qApp->desktop()->width(), qApp->desktop()->height() ); 537 ( m_curSession->widgetStack() )->resize( qApp->desktop()->width(), qApp->desktop()->height() );
514 ( m_curSession->widgetStack() )->setFocus(); 538 ( m_curSession->widgetStack() )->setFocus();
515 ( m_curSession->widgetStack() )->show(); 539 ( m_curSession->widgetStack() )->show();
516 540
517 ( ( m_curSession->emulationHandler() )->cornerButton() )->show(); 541 ( ( m_curSession->emulationHandler() )->cornerButton() )->show();
518 542
519 connect( ( m_curSession->emulationHandler() )->cornerButton(), SIGNAL( pressed() ), this, SLOT( slotFullscreen() ) ); 543 connect( ( m_curSession->emulationHandler() )->cornerButton(), SIGNAL( pressed() ), this, SLOT( slotFullscreen() ) );
520 } 544 }
521 545
522 m_isFullscreen = !m_isFullscreen; 546 m_isFullscreen = !m_isFullscreen;
523} 547}
524 548
525 549
526void MainWindow::slotKeyReceived(FKey k, ushort, ushort, bool pressed) { 550void MainWindow::slotKeyReceived(FKey k, ushort, ushort, bool pressed) {
527 551
528 if ( m_curSession ) { 552 if ( m_curSession ) {
529 553
530 QEvent::Type state; 554 QEvent::Type state;
531 555
532 if (pressed) state = QEvent::KeyPress; 556 if (pressed) state = QEvent::KeyPress;
533 else state = QEvent::KeyRelease; 557 else state = QEvent::KeyRelease;
534 558
535 QKeyEvent ke(state, k.qcode, k.unicode, 0, QString(QChar(k.unicode))); 559 QKeyEvent ke(state, k.qcode, k.unicode, 0, QString(QChar(k.unicode)));
536 560
537 // where should i send this event? doesnt work sending it here 561 // where should i send this event? doesnt work sending it here
538 QApplication::sendEvent((QObject *)m_curSession->widget(), &ke); 562 QApplication::sendEvent((QObject *)m_curSession->widget(), &ke);
539 ke.ignore(); 563 ke.ignore();
540 } 564 }
541} 565}
566void MainWindow::slotCopy() {
567 if (!currentSession() ) return;
568 currentSession()->emulationHandler()->copy();
569}
570void MainWindow::slotPaste() {
571 if (!currentSession() ) return;
572 currentSession()->emulationHandler()->paste();
573}
574
575/*
576 * Save the session
577 */
578
579void MainWindow::slotSaveSession() {
580 if (!currentSession() ) {
581 QMessageBox::information(this, tr("Save Connection"),
582 tr("<qt>There is no Connection.</qt>"), 1 );
583 return;
584 }
585 manager()->add( currentSession()->profile() );
586 manager()->save();
587 populateProfiles();
588}
diff --git a/noncore/apps/opie-console/mainwindow.h b/noncore/apps/opie-console/mainwindow.h
index 0f52e76..16b6252 100644
--- a/noncore/apps/opie-console/mainwindow.h
+++ b/noncore/apps/opie-console/mainwindow.h
@@ -1,124 +1,131 @@
1#ifndef OPIE_MAIN_WINDOW_H 1#ifndef OPIE_MAIN_WINDOW_H
2#define OPIE_MAIN_WINDOW_H 2#define OPIE_MAIN_WINDOW_H
3 3
4#include <qmainwindow.h> 4#include <qmainwindow.h>
5#include <qlist.h> 5#include <qlist.h>
6 6
7#include "session.h" 7#include "session.h"
8 8
9/** 9/**
10 * this is the MainWindow of the new opie console 10 * this is the MainWindow of the new opie console
11 * it's also the dispatcher between the different 11 * it's also the dispatcher between the different
12 * actions supported by the gui 12 * actions supported by the gui
13 */ 13 */
14class QToolBar; 14class QToolBar;
15class QToolButton; 15class QToolButton;
16class QMenuBar; 16class QMenuBar;
17class QAction; 17class QAction;
18class MetaFactory; 18class MetaFactory;
19class TabWidget; 19class TabWidget;
20class ProfileManager; 20class ProfileManager;
21class Profile; 21class Profile;
22class FunctionKeyboard; 22class FunctionKeyboard;
23class FKey; 23class FKey;
24class QuickButton; 24class QuickButton;
25 25
26class MainWindow : public QMainWindow { 26class MainWindow : public QMainWindow {
27 Q_OBJECT 27 Q_OBJECT
28public: 28public:
29 MainWindow( QWidget *parent = 0, const char *name = 0, WFlags fl = 0 ); 29 MainWindow( QWidget *parent = 0, const char *name = 0, WFlags fl = 0 );
30 ~MainWindow(); 30 ~MainWindow();
31 31
32 /** 32 /**
33 * our factory to generate IOLayer and so on 33 * our factory to generate IOLayer and so on
34 * 34 *
35 */ 35 */
36 MetaFactory* factory(); 36 MetaFactory* factory();
37 37
38 /** 38 /**
39 * A session contains a QWidget*, 39 * A session contains a QWidget*,
40 * an IOLayer* and some infos for us 40 * an IOLayer* and some infos for us
41 */ 41 */
42 Session* currentSession(); 42 Session* currentSession();
43 43
44 /** 44 /**
45 * the session list 45 * the session list
46 */ 46 */
47 QList<Session> sessions(); 47 QList<Session> sessions();
48 48
49 /** 49 /**
50 * 50 *
51 */ 51 */
52 ProfileManager* manager(); 52 ProfileManager* manager();
53 TabWidget* tabWidget(); 53 TabWidget* tabWidget();
54 54
55private slots: 55private slots:
56 void slotNew(); 56 void slotNew();
57 void slotConnect(); 57 void slotConnect();
58 void slotDisconnect(); 58 void slotDisconnect();
59 void slotTerminate(); 59 void slotTerminate();
60 void slotConfigure(); 60 void slotConfigure();
61 void slotClose(); 61 void slotClose();
62 void slotProfile(int); 62 void slotProfile(int);
63 void slotTransfer(); 63 void slotTransfer();
64 void slotOpenKeb(bool); 64 void slotOpenKeb(bool);
65 void slotOpenButtons(bool); 65 void slotOpenButtons(bool);
66 void slotRecordScript(); 66 void slotRecordScript();
67 void slotSaveScript(); 67 void slotSaveScript();
68 void slotRunScript(); 68 void slotRunScript();
69 void slotFullscreen(); 69 void slotFullscreen();
70 void slotSessionChanged( Session* ); 70 void slotSessionChanged( Session* );
71 void slotKeyReceived(FKey, ushort, ushort, bool); 71 void slotKeyReceived(FKey, ushort, ushort, bool);
72 72
73 /* what could these both slot do? */
74 void slotCopy();
75 void slotPaste();
76
77 /* save the currentSession() to Profiles */
78 void slotSaveSession();
79
73private: 80private:
74 void initUI(); 81 void initUI();
75 void populateProfiles(); 82 void populateProfiles();
76 void create( const Profile& ); 83 void create( const Profile& );
77 /** 84 /**
78 * the current session 85 * the current session
79 */ 86 */
80 Session* m_curSession; 87 Session* m_curSession;
81 88
82 /** 89 /**
83 * the session list 90 * the session list
84 */ 91 */
85 QList<Session> m_sessions; 92 QList<Session> m_sessions;
86 93
87 /** 94 /**
88 * the metafactory 95 * the metafactory
89 */ 96 */
90 MetaFactory* m_factory; 97 MetaFactory* m_factory;
91 ProfileManager* m_manager; 98 ProfileManager* m_manager;
92 99
93 TabWidget* m_consoleWindow; 100 TabWidget* m_consoleWindow;
94 QToolBar* m_tool; 101 QToolBar* m_tool;
95 QToolBar* m_icons; 102 QToolBar* m_icons;
96 QToolBar* m_keyBar; 103 QToolBar* m_keyBar;
97 QToolBar* m_buttonBar; 104 QToolBar* m_buttonBar;
98 QMenuBar* m_bar; 105 QMenuBar* m_bar;
99 QPopupMenu* m_console; 106 QPopupMenu* m_console;
100 QPopupMenu* m_settings; 107 QPopupMenu* m_settings;
101 QPopupMenu* m_sessionsPop; 108 QPopupMenu* m_sessionsPop;
102 QPopupMenu* m_scripts; 109 QPopupMenu* m_scripts;
103 QAction* m_connect; 110 QAction* m_connect;
104 QAction* m_disconnect; 111 QAction* m_disconnect;
105 QAction* m_terminate; 112 QAction* m_terminate;
106 QAction* m_transfer; 113 QAction* m_transfer;
107 QAction* m_setProfiles; 114 QAction* m_setProfiles;
108 QAction* m_openKeys; 115 QAction* m_openKeys;
109 QAction* m_openButtons; 116 QAction* m_openButtons;
110 QAction* m_recordScript; 117 QAction* m_recordScript;
111 QAction* m_saveScript; 118 QAction* m_saveScript;
112 QAction* m_runScript; 119 QAction* m_runScript;
113 QAction* m_fullscreen; 120 QAction* m_fullscreen;
114 QAction* m_closewindow; 121 QAction* m_closewindow;
115 122
116 FunctionKeyboard *m_kb; 123 FunctionKeyboard *m_kb;
117 QuickButton *m_qb; 124 QuickButton *m_qb;
118 bool m_isFullscreen; 125 bool m_isFullscreen;
119 126
120 QWidget* savedParentFullscreen; 127 QWidget* savedParentFullscreen;
121}; 128};
122 129
123 130
124#endif 131#endif
diff --git a/noncore/apps/opie-console/opie-console.control b/noncore/apps/opie-console/opie-console.control
index d41ef58..8541d22 100644
--- a/noncore/apps/opie-console/opie-console.control
+++ b/noncore/apps/opie-console/opie-console.control
@@ -1,10 +1,10 @@
1Files: bin/opie-console apps/Applications/opie-console.desktop pics/console/* etc/keytabs/default.Keytab 1Files: bin/opie-console apps/Applications/opie-console.desktop pics/console/* etc/keytabs/default.Keytab bin/sz bin/rz
2Priority: optional 2Priority: optional
3Section: opie/applications 3Section: opie/applications
4Maintainer: Opie team <opie@handhelds.org> 4Maintainer: Opie team <opie@handhelds.org>
5Architecture: arm 5Architecture: arm
6Version: 0.6-$SUB_VERSION 6Version: 0.6-$SUB_VERSION
7Depends: qpe-base ($QPE_VERSION), libopie ($QPE_VERSION), opie-console-help-en 7Depends: qpe-base ($QPE_VERSION), libopie ($QPE_VERSION), opie-console-help-en
8License: GPL 8License: GPL
9Description: Opie terminal app 9Description: Opie terminal app
10 10
diff --git a/noncore/apps/opie-console/profilemanager.cpp b/noncore/apps/opie-console/profilemanager.cpp
index 5d39d96..cad2567 100644
--- a/noncore/apps/opie-console/profilemanager.cpp
+++ b/noncore/apps/opie-console/profilemanager.cpp
@@ -1,137 +1,141 @@
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> 6#include <qlayout.h>
7#include <qwidgetstack.h> 7#include <qwidgetstack.h>
8 8
9#include <qpe/config.h> 9#include <qpe/config.h>
10 10
11#include "emulation_handler.h" 11#include "emulation_handler.h"
12#include "widget_layer.h" 12#include "widget_layer.h"
13#include "emulation_widget.h" 13#include "emulation_widget.h"
14#include "metafactory.h" 14#include "metafactory.h"
15#include "profileconfig.h" 15#include "profileconfig.h"
16#include "profilemanager.h" 16#include "profilemanager.h"
17 17
18ProfileManager::ProfileManager( MetaFactory* fact ) 18ProfileManager::ProfileManager( MetaFactory* fact )
19 : m_fact( fact ) 19 : m_fact( fact )
20{ 20{
21 21
22} 22}
23ProfileManager::~ProfileManager() { 23ProfileManager::~ProfileManager() {
24 24
25} 25}
26void ProfileManager::load() { 26void ProfileManager::load() {
27 m_list.clear(); 27 m_list.clear();
28 ProfileConfig conf("opie-console-profiles"); 28 ProfileConfig conf("opie-console-profiles");
29 QStringList groups = conf.groups(); 29 QStringList groups = conf.groups();
30 QStringList::Iterator it; 30 QStringList::Iterator it;
31 31
32 /* 32 /*
33 * for each profile 33 * for each profile
34 */ 34 */
35 for ( it = groups.begin(); it != groups.end(); ++it ) { 35 for ( it = groups.begin(); it != groups.end(); ++it ) {
36 conf.setGroup( (*it) ); 36 conf.setGroup( (*it) );
37 Profile prof; 37 Profile prof;
38 prof.setName( conf.readEntry("name") ); 38 prof.setName( conf.readEntry("name") );
39 prof.setIOLayer( conf.readEntry("iolayer").utf8() ); 39 prof.setIOLayer( conf.readEntry("iolayer").utf8() );
40 prof.setTerminalName( conf.readEntry("term").utf8() ); 40 prof.setTerminalName( conf.readEntry("term").utf8() );
41 prof.setAutoConnect( conf.readBoolEntry("autoConnect") ); 41 prof.setAutoConnect( conf.readBoolEntry("autoConnect") );
42 prof.setBackground( conf.readNumEntry("back") ); 42 prof.setBackground( conf.readNumEntry("back") );
43 prof.setForeground( conf.readNumEntry("fore") ); 43 prof.setForeground( conf.readNumEntry("fore") );
44 prof.setTerminal( conf.readNumEntry("terminal") ); 44 prof.setTerminal( conf.readNumEntry("terminal") );
45 45
46 // THIS is evil because all data get's reset 46 // THIS is evil because all data get's reset
47 prof.setConf( conf.items( (*it) ) ); 47 prof.setConf( conf.items( (*it) ) );
48 48
49 /* now add it */ 49 /* now add it */
50 m_list.append( prof ); 50 m_list.append( prof );
51 } 51 }
52 52
53} 53}
54void ProfileManager::clear() { 54void ProfileManager::clear() {
55 m_list.clear(); 55 m_list.clear();
56} 56}
57Profile::ValueList ProfileManager::all()const { 57Profile::ValueList ProfileManager::all()const {
58 return m_list; 58 return m_list;
59} 59}
60/* 60/*
61 * Our goal is to create a Session 61 * Our goal is to create a Session
62 * We will load the the IOLayer and EmulationLayer 62 * We will load the the IOLayer and EmulationLayer
63 * from the factory 63 * from the factory
64 * we will generate a QWidgetStack 64 * we will generate a QWidgetStack
65 * add a dummy widget with layout 65 * add a dummy widget with layout
66 * add "Widget" to the layout 66 * add "Widget" to the layout
67 * add the dummy to the stack 67 * add the dummy to the stack
68 * raise the dummy 68 * raise the dummy
69 * call session->connect(= 69 * call session->connect(=
70 * this way we only need to reparent 70 * this way we only need to reparent
71 * in TabWidget 71 * in TabWidget
72 */ 72 */
73Session* ProfileManager::fromProfile( const Profile& prof, QWidget* parent) { 73Session* ProfileManager::fromProfile( const Profile& prof, QWidget* parent) {
74/* TEST PROFILE!!! 74/* TEST PROFILE!!!
75 Profile prof; 75 Profile prof;
76 QString str = "/dev/ttyS0"; 76 QString str = "/dev/ttyS0";
77 prof.writeEntry("Device",str ); 77 prof.writeEntry("Device",str );
78 prof.writeEntry("Baud", 115200 ); 78 prof.writeEntry("Baud", 115200 );
79 prof.setIOLayer("serial"); 79 prof.setIOLayer("serial");
80 prof.setName( "test"); 80 prof.setName( "test");
81*/ 81*/
82 Session* session = new Session(); 82 Session* session = new Session();
83 session->setName( prof.name() ); 83 session->setName( prof.name() );
84 /* translate the internal name to the external */ 84 /* translate the internal name to the external */
85 session->setIOLayer(m_fact->newIOLayer( m_fact->external(prof.ioLayerName()) , 85 session->setIOLayer(m_fact->newIOLayer( m_fact->external(prof.ioLayerName()) ,
86 prof) ); 86 prof) );
87 87
88 QWidgetStack *stack = new QWidgetStack( parent ); 88 QWidgetStack *stack = new QWidgetStack( parent );
89 session->setWidgetStack( stack ); 89 session->setWidgetStack( stack );
90 QWidget* dummy = new QHBox( stack ); 90 QWidget* dummy = new QHBox( stack );
91 stack->raiseWidget( dummy ); 91 stack->raiseWidget( dummy );
92 92
93 EmulationHandler* handler = new EmulationHandler(prof,dummy ); 93 EmulationHandler* handler = new EmulationHandler(prof,dummy );
94 session->setEmulationHandler( handler ); 94 session->setEmulationHandler( handler );
95 session->connect(); 95 session->connect();
96 session->setProfile( prof );
96 97
97 return session; 98 return session;
98} 99}
99void ProfileManager::save( ) { 100void ProfileManager::save( ) {
100 QFile::remove( (QString(getenv("HOME") )+ "/Settings/opie-console-profiles.conf" ) ); 101 QFile::remove( (QString(getenv("HOME") )+ "/Settings/opie-console-profiles.conf" ) );
101 ProfileConfig conf("opie-console-profiles"); 102 ProfileConfig conf("opie-console-profiles");
102 Profile::ValueList::Iterator it2; 103 Profile::ValueList::Iterator it2;
103 for (it2 = m_list.begin(); it2 != m_list.end(); ++it2 ) { 104 for (it2 = m_list.begin(); it2 != m_list.end(); ++it2 ) {
104 conf.setGroup( (*it2).name() ); 105 conf.setGroup( (*it2).name() );
105 106
106 /* now the config stuff */ 107 /* now the config stuff */
107 QMap<QString, QString> map = (*it2).conf(); 108 QMap<QString, QString> map = (*it2).conf();
108 QMap<QString, QString>::Iterator confIt; 109 QMap<QString, QString>::Iterator confIt;
109 for ( confIt = map.begin(); confIt != map.end(); ++confIt ) { 110 for ( confIt = map.begin(); confIt != map.end(); ++confIt ) {
110 conf.writeEntry( confIt.key(), confIt.data() ); 111 conf.writeEntry( confIt.key(), confIt.data() );
111 } 112 }
112 113
113 conf.writeEntry( "name", (*it2).name() ); 114 conf.writeEntry( "name", (*it2).name() );
114 QString str = QString::fromUtf8( (*it2).ioLayerName() ); 115 QString str = QString::fromUtf8( (*it2).ioLayerName() );
115 116
116 conf.writeEntry( "iolayer", str ); 117 conf.writeEntry( "iolayer", str );
117 conf.writeEntry( "term", QString::fromUtf8( (*it2).terminalName() ) ); 118 conf.writeEntry( "term", QString::fromUtf8( (*it2).terminalName() ) );
118 conf.writeEntry( "autoConnect", (*it2).autoConnect()); 119 conf.writeEntry( "autoConnect", (*it2).autoConnect());
119 conf.writeEntry( "back", (*it2).background() ); 120 conf.writeEntry( "back", (*it2).background() );
120 conf.writeEntry( "fore", (*it2).foreground() ); 121 conf.writeEntry( "fore", (*it2).foreground() );
121 conf.writeEntry( "terminal", (*it2).terminal() ); 122 conf.writeEntry( "terminal", (*it2).terminal() );
122 } 123 }
123} 124}
125void ProfileManager::add( const Profile& prof) {
126 m_list.append( prof );
127}
124void ProfileManager::setProfiles( const Profile::ValueList& list ) { 128void ProfileManager::setProfiles( const Profile::ValueList& list ) {
125 m_list = list; 129 m_list = list;
126}; 130};
127Profile ProfileManager::profile( const QString& name )const { 131Profile ProfileManager::profile( const QString& name )const {
128 Profile prof; 132 Profile prof;
129 Profile::ValueList::ConstIterator it; 133 Profile::ValueList::ConstIterator it;
130 for ( it = m_list.begin(); it != m_list.end(); ++it ) { 134 for ( it = m_list.begin(); it != m_list.end(); ++it ) {
131 if ( name == (*it).name() ) { 135 if ( name == (*it).name() ) {
132 prof = (*it); 136 prof = (*it);
133 break; 137 break;
134 } 138 }
135 } 139 }
136 return prof; 140 return prof;
137} 141}
diff --git a/noncore/apps/opie-console/receive_layer.cpp b/noncore/apps/opie-console/receive_layer.cpp
index 05e2c67..bbde339 100644
--- a/noncore/apps/opie-console/receive_layer.cpp
+++ b/noncore/apps/opie-console/receive_layer.cpp
@@ -1,33 +1,34 @@
1#include <unistd.h> 1#include <unistd.h>
2 2
3#include <qdir.h>
3#include <qstring.h> 4#include <qstring.h>
4#include <qfile.h> 5#include <qfile.h>
5 6
6#include "io_layer.h" 7#include "io_layer.h"
7#include "receive_layer.h" 8#include "receive_layer.h"
8 9
9ReceiveLayer::ReceiveLayer( IOLayer* lay, const QString& startDir ) 10ReceiveLayer::ReceiveLayer( IOLayer* lay, const QString& startDir )
10 : QObject(), m_curDir( startDir ), m_layer(lay ) 11 : QObject(), m_curDir( startDir ), m_layer(lay )
11{ 12{
12 13
13} 14}
14ReceiveLayer::~ReceiveLayer() { 15ReceiveLayer::~ReceiveLayer() {
15 16
16} 17}
17IOLayer* ReceiveLayer::layer() { 18IOLayer* ReceiveLayer::layer() {
18 return m_layer; 19 return m_layer;
19} 20}
20QString ReceiveLayer::currentDir()const{ 21QString ReceiveLayer::currentDir()const{
21 if (m_curDir.isEmpty() ) 22 if (m_curDir.isEmpty() )
22 return QString::fromLocal8Bit( ::getwd(NULL) ); 23 return QDir::currentDirPath();
23 return m_curDir; 24 return m_curDir;
24} 25}
25void ReceiveLayer::changeDir( const QString& str) { 26void ReceiveLayer::changeDir( const QString& str) {
26 ::chdir( str.latin1() ); 27 ::chdir( str.latin1() );
27} 28}
28void ReceiveLayer::receive( const QString& dir, Mode, Features ) { 29void ReceiveLayer::receive( const QString& dir, Mode, Features ) {
29 receive( dir ); 30 receive( dir );
30} 31}
31void ReceiveLayer::cancel() { 32void ReceiveLayer::cancel() {
32 33
33} 34}
diff --git a/noncore/apps/opie-console/session.cpp b/noncore/apps/opie-console/session.cpp
index 03d0fcd..c166d95 100644
--- a/noncore/apps/opie-console/session.cpp
+++ b/noncore/apps/opie-console/session.cpp
@@ -1,100 +1,107 @@
1 1
2 2
3#include "profile.h"
3#include "io_layer.h" 4#include "io_layer.h"
4#include "file_layer.h" 5#include "file_layer.h"
5#include "emulation_handler.h" 6#include "emulation_handler.h"
6#include "session.h" 7#include "session.h"
7 8
8 9
9Session::Session() { 10Session::Session() {
10 m_widget = 0l; 11 m_widget = 0l;
11 m_layer = 0l; 12 m_layer = 0l;
12 m_emu = 0l; 13 m_emu = 0l;
13} 14}
14Session::Session( const QString& na, QWidgetStack* widget, IOLayer* lay) 15Session::Session( const QString& na, QWidgetStack* widget, IOLayer* lay)
15 : m_name( na ), m_widget( widget ), m_layer( lay ) 16 : m_name( na ), m_widget( widget ), m_layer( lay )
16{ 17{
17// m_widLay = 0l; 18// m_widLay = 0l;
18// m_emLay = 0l; 19// m_emLay = 0l;
19 m_emu = 0l; 20 m_emu = 0l;
20} 21}
21Session::~Session() { 22Session::~Session() {
22 delete m_layer; 23 delete m_layer;
23 delete m_emu; 24 delete m_emu;
24 delete m_widget; 25 delete m_widget;
25 /* the widget layer should be deleted by the m_widget */ 26 /* the widget layer should be deleted by the m_widget */
26} 27}
27QString Session::name()const { 28QString Session::name()const {
28 return m_name; 29 return m_name;
29} 30}
30QWidgetStack* Session::widgetStack() { 31QWidgetStack* Session::widgetStack() {
31 return m_widget; 32 return m_widget;
32} 33}
33IOLayer* Session::layer() { 34IOLayer* Session::layer() {
34 return m_layer; 35 return m_layer;
35} 36}
36EmulationHandler* Session::emulationHandler() { 37EmulationHandler* Session::emulationHandler() {
37 return m_emu; 38 return m_emu;
38} 39}
39QWidget* Session::widget() { 40QWidget* Session::widget() {
40 if (!m_emu ) 41 if (!m_emu )
41 return 0l; 42 return 0l;
42 43
43 return m_emu->widget(); 44 return m_emu->widget();
44} 45}
46Profile Session::profile()const {
47 return m_prof;
48}
45/* 49/*
46WidgetLayer* Session::emulationWidget() { 50WidgetLayer* Session::emulationWidget() {
47 return m_widLay; 51 return m_widLay;
48} 52}
49*/ 53*/
50void Session::connect() { 54void Session::connect() {
51 if ( !m_layer || !m_emu ) 55 if ( !m_layer || !m_emu )
52 return; 56 return;
53 57
54 QObject::connect(m_layer, SIGNAL(received(const QByteArray&) ), 58 QObject::connect(m_layer, SIGNAL(received(const QByteArray&) ),
55 m_emu, SLOT(recv(const QByteArray&) ) ); 59 m_emu, SLOT(recv(const QByteArray&) ) );
56 QObject::connect(m_emu, SIGNAL(send(const QByteArray&) ), 60 QObject::connect(m_emu, SIGNAL(send(const QByteArray&) ),
57 m_layer, SLOT(send(const QByteArray&) ) ); 61 m_layer, SLOT(send(const QByteArray&) ) );
58 QObject::connect(m_emu, SIGNAL(changeSize(int, int) ), 62 QObject::connect(m_emu, SIGNAL(changeSize(int, int) ),
59 m_layer, SLOT(setSize(int, int) ) ); 63 m_layer, SLOT(setSize(int, int) ) );
60} 64}
61 65
62void Session::disconnect() { 66void Session::disconnect() {
63 67
64 if ( !m_layer || !m_emu ) 68 if ( !m_layer || !m_emu )
65 return; 69 return;
66 70
67 QObject::disconnect(m_layer, SIGNAL(received(const QByteArray&) ), 71 QObject::disconnect(m_layer, SIGNAL(received(const QByteArray&) ),
68 m_emu, SLOT(recv(const QByteArray&) ) ); 72 m_emu, SLOT(recv(const QByteArray&) ) );
69 QObject::disconnect(m_emu, SIGNAL(send(const QByteArray&) ), 73 QObject::disconnect(m_emu, SIGNAL(send(const QByteArray&) ),
70 m_layer, SLOT(send(const QByteArray&) ) ); 74 m_layer, SLOT(send(const QByteArray&) ) );
71} 75}
72 76
73void Session::setName( const QString& na){ 77void Session::setName( const QString& na){
74 m_name = na; 78 m_name = na;
75} 79}
76 80
77void Session::setWidgetStack( QWidgetStack* wid ) { 81void Session::setWidgetStack( QWidgetStack* wid ) {
78 delete m_emu; 82 delete m_emu;
79 m_emu = 0l; 83 m_emu = 0l;
80 delete m_widget; 84 delete m_widget;
81 /* the EmulationLayer was destroyed... */ 85 /* the EmulationLayer was destroyed... */
82 86
83 m_widget = wid; 87 m_widget = wid;
84} 88}
85void Session::setIOLayer( IOLayer* lay ) { 89void Session::setIOLayer( IOLayer* lay ) {
86 delete m_layer; 90 delete m_layer;
87 m_layer = lay; 91 m_layer = lay;
88} 92}
89 93
90void Session::setEmulationHandler( EmulationHandler* lay ) { 94void Session::setEmulationHandler( EmulationHandler* lay ) {
91 delete m_emu; 95 delete m_emu;
92 m_emu = lay; 96 m_emu = lay;
93} 97}
98void Session::setProfile( const Profile& prof ) {
99 m_prof = prof;
100}
94/* 101/*
95void Session::setEmulationWidget( WidgetLayer* lay ) { 102void Session::setEmulationWidget( WidgetLayer* lay ) {
96 delete m_widLay; 103 delete m_widLay;
97 m_widLay = lay; 104 m_widLay = lay;
98} 105}
99*/ 106*/
100 107
diff --git a/noncore/apps/opie-console/session.h b/noncore/apps/opie-console/session.h
index 83b2046..f60a6c0 100644
--- a/noncore/apps/opie-console/session.h
+++ b/noncore/apps/opie-console/session.h
@@ -1,72 +1,77 @@
1#ifndef OPIE_SESSION_H 1#ifndef OPIE_SESSION_H
2#define OPIE_SESSION_H 2#define OPIE_SESSION_H
3 3
4#include <qwidgetstack.h> 4#include <qwidgetstack.h>
5 5
6#include "profile.h"
7
6class IOLayer; 8class IOLayer;
7class EmulationHandler; 9class EmulationHandler;
8/** 10/**
9 * This is a Session. A session contains 11 * This is a Session. A session contains
10 * a QWidget pointer and a IOLayer 12 * a QWidget pointer and a IOLayer
11 * Imagine a session like a collection of what 13 * Imagine a session like a collection of what
12 * is needed to show your widget in a tab ;) 14 * is needed to show your widget in a tab ;)
13 */ 15 */
14class Session { 16class Session {
15public: 17public:
16 /** 18 /**
17 * c'tor with widget and layer 19 * c'tor with widget and layer
18 * ownership get's transfered 20 * ownership get's transfered
19 */ 21 */
20 Session(); 22 Session();
21 Session( const QString&, QWidgetStack* widget, IOLayer* ); 23 Session( const QString&, QWidgetStack* widget, IOLayer* );
22 ~Session(); 24 ~Session();
23 25
24 /** 26 /**
25 * return the name of the session 27 * return the name of the session
26 */ 28 */
27 QString name()const; 29 QString name()const;
28 30
29 /** 31 /**
30 * return the widgetstack 32 * return the widgetstack
31 * this is used to be semi modal 33 * this is used to be semi modal
32 * for FileTransfer 34 * for FileTransfer
33 * 35 *
34 * semi modal == SessionModal 36 * semi modal == SessionModal
35 */ 37 */
36 QWidgetStack* widgetStack(); 38 QWidgetStack* widgetStack();
37 QWidget* widget(); 39 QWidget* widget();
38 40
39 /** 41 /**
40 * return the layer 42 * return the layer
41 */ 43 */
42 IOLayer* layer(); 44 IOLayer* layer();
43 45
44 EmulationHandler* emulationHandler(); 46 EmulationHandler* emulationHandler();
47 Profile profile()const;
45 48
46 /* 49 /*
47 * connects the data flow from 50 * connects the data flow from
48 * the IOLayer to the EmulationLayer 51 * the IOLayer to the EmulationLayer
49 */ 52 */
50 void connect(); 53 void connect();
51 54
52 /* 55 /*
53 * disconnect the dataflow 56 * disconnect the dataflow
54 * this will be done for ft 57 * this will be done for ft
55 */ 58 */
56 void disconnect(); 59 void disconnect();
57 60
58 void setWidgetStack( QWidgetStack* widget ); 61 void setWidgetStack( QWidgetStack* widget );
59 void setEmulationHandler( EmulationHandler* lay ); 62 void setEmulationHandler( EmulationHandler* lay );
60 void setIOLayer( IOLayer* ); 63 void setIOLayer( IOLayer* );
61 void setName( const QString& ); 64 void setName( const QString& );
65 void setProfile( const Profile& );
62 66
63private: 67private:
64 QString m_name; 68 QString m_name;
65 QWidgetStack* m_widget; 69 QWidgetStack* m_widget;
66 IOLayer* m_layer; 70 IOLayer* m_layer;
67 EmulationHandler* m_emu; 71 EmulationHandler* m_emu;
68 bool m_connected; 72 bool m_connected : 1;
73 Profile m_prof;
69 74
70}; 75};
71 76
72#endif 77#endif