author | zecke <zecke> | 2002-10-15 13:02:56 (UTC) |
---|---|---|
committer | zecke <zecke> | 2002-10-15 13:02:56 (UTC) |
commit | 09ba4d2c79a41b185902519639032a49c85deadb (patch) (unidiff) | |
tree | f1d9676bf3401bb93e527c8608a9307bf4adf244 | |
parent | b555d0c687db83cde89f1a75fccbd59723878621 (diff) | |
download | opie-09ba4d2c79a41b185902519639032a49c85deadb.zip opie-09ba4d2c79a41b185902519639032a49c85deadb.tar.gz opie-09ba4d2c79a41b185902519639032a49c85deadb.tar.bz2 |
Add a Feature Support BitArray to the IOLayer
This way we know what an IOLayer supports
Adjust IOSerial and MyPty to that change
Fix the after close window the previous session
window is empty bug
in Mainwindow::remove we had a problem
first we removed the currentSession from the tab and then
deleted the session
The problem is that removePage on OTabWidget does signal currentChanged
so we did not delete the session intended but the wrong one
because m_curSession got adjusted after a removePage...
3rd fix the close and reopen bug in MyPty
-rw-r--r-- | noncore/apps/opie-console/BUGS | 9 | ||||
-rw-r--r-- | noncore/apps/opie-console/MyPty.cpp | 23 | ||||
-rw-r--r-- | noncore/apps/opie-console/MyPty.h | 2 | ||||
-rw-r--r-- | noncore/apps/opie-console/io_layer.h | 14 | ||||
-rw-r--r-- | noncore/apps/opie-console/io_serial.cpp | 7 | ||||
-rw-r--r-- | noncore/apps/opie-console/io_serial.h | 4 | ||||
-rw-r--r-- | noncore/apps/opie-console/mainwindow.cpp | 10 | ||||
-rw-r--r-- | noncore/apps/opie-console/profilemanager.cpp | 15 | ||||
-rw-r--r-- | noncore/apps/opie-console/session.cpp | 6 | ||||
-rw-r--r-- | noncore/apps/opie-console/session.h | 1 | ||||
-rw-r--r-- | noncore/apps/opie-console/tabwidget.cpp | 1 |
11 files changed, 72 insertions, 20 deletions
diff --git a/noncore/apps/opie-console/BUGS b/noncore/apps/opie-console/BUGS new file mode 100644 index 0000000..ffaceef --- a/dev/null +++ b/noncore/apps/opie-console/BUGS | |||
@@ -0,0 +1,9 @@ | |||
1 | Ok we all know we write perfect code | ||
2 | but sometimes the compiler produces bad code | ||
3 | and we need to work around some compiler bugs!! -zecke | ||
4 | |||
5 | MyPty is broken in some ways | ||
6 | if you do connect/disconnect/connect sh will be executed in the | ||
7 | process of opie-console.... funny aye? | ||
8 | |||
9 | OTabWidget seems to give us problems too | ||
diff --git a/noncore/apps/opie-console/MyPty.cpp b/noncore/apps/opie-console/MyPty.cpp index b6ae1d9..565d03f 100644 --- a/noncore/apps/opie-console/MyPty.cpp +++ b/noncore/apps/opie-console/MyPty.cpp | |||
@@ -108,28 +108,31 @@ void MyPty::setSize(int lines, int columns) | |||
108 | 108 | ||
109 | void MyPty::donePty() | 109 | void MyPty::donePty() |
110 | { | 110 | { |
111 | // This is code from the Qt DumbTerminal example | 111 | // This is code from the Qt DumbTerminal example |
112 | int status = 0; | 112 | int status = 0; |
113 | 113 | ||
114 | ::close(m_fd); | 114 | ::close(m_fd); |
115 | 115 | ||
116 | if (m_cpid) { | 116 | if (m_cpid) { |
117 | kill(m_cpid, SIGHUP); | 117 | kill(m_cpid, SIGHUP); |
118 | //waitpid(m_cpid, &status, 0); | 118 | //waitpid(m_cpid, &status, 0); |
119 | delete m_sn_e; | 119 | delete m_sn_e; |
120 | delete m_sn_r; | ||
120 | m_sn_e = 0l; | 121 | m_sn_e = 0l; |
122 | m_sn_r = 0l; | ||
121 | } | 123 | } |
122 | 124 | ||
123 | m_cpid = 0; | 125 | m_cpid = 0; |
126 | m_fd = -1; | ||
124 | // emit done(status); | 127 | // emit done(status); |
125 | } | 128 | } |
126 | 129 | ||
127 | 130 | ||
128 | const char* MyPty::deviceName() | 131 | const char* MyPty::deviceName() |
129 | { | 132 | { |
130 | return m_ttynam; | 133 | return m_ttynam; |
131 | } | 134 | } |
132 | 135 | ||
133 | 136 | ||
134 | void MyPty::error() | 137 | void MyPty::error() |
135 | { | 138 | { |
@@ -176,28 +179,29 @@ int MyPty::run(const char* cmd, QStrList &, const char*, int) | |||
176 | 179 | ||
177 | if (getuid() == 0) { | 180 | if (getuid() == 0) { |
178 | char msg[] = "WARNING: You are running this shell as root!\n"; | 181 | char msg[] = "WARNING: You are running this shell as root!\n"; |
179 | write(ttyfd, msg, sizeof(msg)); | 182 | write(ttyfd, msg, sizeof(msg)); |
180 | } | 183 | } |
181 | execl(cmd, cmd, 0); | 184 | execl(cmd, cmd, 0); |
182 | 185 | ||
183 | donePty(); | 186 | donePty(); |
184 | exit(-1); | 187 | exit(-1); |
185 | } | 188 | } |
186 | 189 | ||
187 | // parent - continue as a widget | 190 | // parent - continue as a widget |
188 | QSocketNotifier* sn_r = new QSocketNotifier(m_fd,QSocketNotifier::Read,this); | 191 | delete m_sn_r; |
192 | m_sn_r = new QSocketNotifier(m_fd,QSocketNotifier::Read,this); | ||
189 | delete m_sn_e; | 193 | delete m_sn_e; |
190 | m_sn_e = new QSocketNotifier(m_fd,QSocketNotifier::Exception,this); | 194 | m_sn_e = new QSocketNotifier(m_fd,QSocketNotifier::Exception,this); |
191 | connect(sn_r,SIGNAL(activated(int)),this,SLOT(readPty())); | 195 | connect(m_sn_r,SIGNAL(activated(int)),this,SLOT(readPty())); |
192 | connect(m_sn_e,SIGNAL(activated(int)),this,SLOT(error())); | 196 | connect(m_sn_e,SIGNAL(activated(int)),this,SLOT(error())); |
193 | 197 | ||
194 | return 0; | 198 | return 0; |
195 | } | 199 | } |
196 | 200 | ||
197 | int MyPty::openPty() | 201 | int MyPty::openPty() |
198 | { | 202 | { |
199 | // This is code from the Qt DumbTerminal example | 203 | // This is code from the Qt DumbTerminal example |
200 | int ptyfd = -1; | 204 | int ptyfd = -1; |
201 | 205 | ||
202 | #ifdef HAVE_OPENPTY | 206 | #ifdef HAVE_OPENPTY |
203 | int ttyfd; | 207 | int ttyfd; |
@@ -212,62 +216,67 @@ int MyPty::openPty() | |||
212 | sprintf(m_ttynam,"/dev/tty%c%c",*c0,*c1); | 216 | sprintf(m_ttynam,"/dev/tty%c%c",*c0,*c1); |
213 | if ((ptyfd = ::open(m_ptynam,O_RDWR)) >= 0) { | 217 | if ((ptyfd = ::open(m_ptynam,O_RDWR)) >= 0) { |
214 | if (geteuid() != 0 && !access(m_ttynam,R_OK|W_OK) == 0) { | 218 | if (geteuid() != 0 && !access(m_ttynam,R_OK|W_OK) == 0) { |
215 | ::close(ptyfd); | 219 | ::close(ptyfd); |
216 | ptyfd = -1; | 220 | ptyfd = -1; |
217 | } | 221 | } |
218 | } | 222 | } |
219 | } | 223 | } |
220 | } | 224 | } |
221 | #endif | 225 | #endif |
222 | 226 | ||
223 | if ( ptyfd < 0 ) { | 227 | if ( ptyfd < 0 ) { |
224 | qApp->exit(1); | 228 | //qApp->exit(1); |
225 | return -1; | 229 | return -1; |
226 | } | 230 | } |
227 | 231 | ||
228 | return ptyfd; | 232 | return ptyfd; |
229 | } | 233 | } |
230 | 234 | ||
231 | /*! | 235 | /*! |
232 | Create an instance. | 236 | Create an instance. |
233 | */ | 237 | */ |
234 | MyPty::MyPty(const Profile&) : m_cpid(0) | 238 | MyPty::MyPty(const Profile&) : m_cpid(0) |
235 | { | 239 | { |
236 | m_sn_e = 0l; | 240 | m_sn_e = 0l; |
241 | m_sn_r = 0l; | ||
237 | m_fd = openPty(); | 242 | m_fd = openPty(); |
238 | ProcCtl* ctl = ProcCtl::self(); | 243 | ProcCtl* ctl = ProcCtl::self(); |
239 | } | 244 | } |
240 | 245 | ||
241 | /*! | 246 | /*! |
242 | Destructor. | 247 | Destructor. |
243 | Note that the related client program is not killed | 248 | Note that the related client program is not killed |
244 | (yet) when a instance is deleted. | 249 | (yet) when a instance is deleted. |
245 | */ | 250 | */ |
246 | MyPty::~MyPty() | 251 | MyPty::~MyPty() |
247 | { | 252 | { |
248 | donePty(); | 253 | donePty(); |
249 | } | 254 | } |
250 | QString MyPty::identifier()const { | 255 | QString MyPty::identifier()const { |
251 | return QString::fromLatin1("term"); | 256 | return QString::fromLatin1("term"); |
252 | } | 257 | } |
253 | QString MyPty::name()const{ | 258 | QString MyPty::name()const{ |
254 | return identifier(); | 259 | return identifier(); |
255 | } | 260 | } |
256 | bool MyPty::open() { | 261 | bool MyPty::open() { |
262 | if (m_fd < 0) | ||
263 | m_fd = openPty(); | ||
264 | |||
257 | start(); | 265 | start(); |
258 | return true; | 266 | return true; |
259 | } | 267 | } |
260 | void MyPty::close() { | 268 | void MyPty::close() { |
261 | donePty(); | 269 | donePty(); |
270 | m_fd = openPty(); | ||
262 | } | 271 | } |
263 | void MyPty::reload( const Profile& ) { | 272 | void MyPty::reload( const Profile& ) { |
264 | 273 | ||
265 | } | 274 | } |
266 | /*! sends len bytes through the line */ | 275 | /*! sends len bytes through the line */ |
267 | void MyPty::send(const QByteArray& ar) | 276 | void MyPty::send(const QByteArray& ar) |
268 | { | 277 | { |
269 | #ifdef VERBOSE_DEBUG | 278 | #ifdef VERBOSE_DEBUG |
270 | // verbose debug | 279 | // verbose debug |
271 | printf("sending bytes:\n"); | 280 | printf("sending bytes:\n"); |
272 | for (uint i = 0; i < ar.count(); i++) | 281 | for (uint i = 0; i < ar.count(); i++) |
273 | printf("%c", ar[i]); | 282 | printf("%c", ar[i]); |
@@ -277,33 +286,39 @@ void MyPty::send(const QByteArray& ar) | |||
277 | ::write(m_fd, ar.data(), ar.count()); | 286 | ::write(m_fd, ar.data(), ar.count()); |
278 | } | 287 | } |
279 | 288 | ||
280 | /*! indicates that a block of data is received */ | 289 | /*! indicates that a block of data is received */ |
281 | void MyPty::readPty() | 290 | void MyPty::readPty() |
282 | { | 291 | { |
283 | QByteArray buf(4096); | 292 | QByteArray buf(4096); |
284 | 293 | ||
285 | int len = ::read( m_fd, buf.data(), 4096 ); | 294 | int len = ::read( m_fd, buf.data(), 4096 ); |
286 | 295 | ||
287 | if (len == -1 || len == 0) { | 296 | if (len == -1 || len == 0) { |
288 | donePty(); | 297 | donePty(); |
289 | delete sender(); | ||
290 | return; | 298 | return; |
291 | } | 299 | } |
292 | 300 | ||
293 | if (len < 0) | 301 | if (len < 0) |
294 | return; | 302 | return; |
295 | 303 | ||
296 | 304 | ||
297 | buf.resize(len); | 305 | buf.resize(len); |
298 | emit received(buf); | 306 | emit received(buf); |
299 | 307 | ||
300 | #ifdef VERBOSE_DEBUG | 308 | #ifdef VERBOSE_DEBUG |
301 | // verbose debug | 309 | // verbose debug |
302 | printf("read bytes:\n"); | 310 | printf("read bytes:\n"); |
303 | for (uint i = 0; i < buf.count(); i++) | 311 | for (uint i = 0; i < buf.count(); i++) |
304 | printf("%c", buf[i]); | 312 | printf("%c", buf[i]); |
305 | printf("\n"); | 313 | printf("\n"); |
306 | #endif | 314 | #endif |
307 | 315 | ||
308 | } | 316 | } |
317 | QBitArray MyPty::supports()const { | ||
318 | QBitArray ar(3); | ||
319 | ar[0] = 1; | ||
320 | ar[1] = 0; | ||
321 | ar[2] = 0; | ||
309 | 322 | ||
323 | return ar; | ||
324 | } | ||
diff --git a/noncore/apps/opie-console/MyPty.h b/noncore/apps/opie-console/MyPty.h index 3166fa0..ad271df 100644 --- a/noncore/apps/opie-console/MyPty.h +++ b/noncore/apps/opie-console/MyPty.h | |||
@@ -32,24 +32,25 @@ class QSocketNotifier; | |||
32 | class MyPty : public IOLayer | 32 | class MyPty : public IOLayer |
33 | { | 33 | { |
34 | Q_OBJECT | 34 | Q_OBJECT |
35 | public: | 35 | public: |
36 | 36 | ||
37 | MyPty(const Profile&); | 37 | MyPty(const Profile&); |
38 | ~MyPty(); | 38 | ~MyPty(); |
39 | 39 | ||
40 | 40 | ||
41 | 41 | ||
42 | QString identifier()const; | 42 | QString identifier()const; |
43 | QString name()const; | 43 | QString name()const; |
44 | QBitArray supports()const; | ||
44 | 45 | ||
45 | public slots: | 46 | public slots: |
46 | /*! | 47 | /*! |
47 | having a `run' separate from the constructor allows to make | 48 | having a `run' separate from the constructor allows to make |
48 | the necessary connections to the signals and slots of the | 49 | the necessary connections to the signals and slots of the |
49 | instance before starting the execution of the client. | 50 | instance before starting the execution of the client. |
50 | */ | 51 | */ |
51 | void start(); | 52 | void start(); |
52 | int run(const char* pgm, QStrList & args , const char* term, int addutmp); | 53 | int run(const char* pgm, QStrList & args , const char* term, int addutmp); |
53 | bool open(); | 54 | bool open(); |
54 | void close(); | 55 | void close(); |
55 | void reload( const Profile& ); | 56 | void reload( const Profile& ); |
@@ -83,15 +84,16 @@ protected slots: | |||
83 | void donePty(); | 84 | void donePty(); |
84 | 85 | ||
85 | private: | 86 | private: |
86 | int openPty(); | 87 | int openPty(); |
87 | 88 | ||
88 | private: | 89 | private: |
89 | 90 | ||
90 | char m_ptynam[16]; // "/dev/ptyxx" | "/dev/ptmx" | 91 | char m_ptynam[16]; // "/dev/ptyxx" | "/dev/ptmx" |
91 | char m_ttynam[16]; // "/dev/ttyxx" | "/dev/pts/########..." | 92 | char m_ttynam[16]; // "/dev/ttyxx" | "/dev/pts/########..." |
92 | int m_fd; | 93 | int m_fd; |
93 | int m_cpid; | 94 | int m_cpid; |
94 | QSocketNotifier* m_sn_e; | 95 | QSocketNotifier* m_sn_e; |
96 | QSocketNotifier* m_sn_r; | ||
95 | }; | 97 | }; |
96 | 98 | ||
97 | #endif | 99 | #endif |
diff --git a/noncore/apps/opie-console/io_layer.h b/noncore/apps/opie-console/io_layer.h index 5f2fa3c..4977e94 100644 --- a/noncore/apps/opie-console/io_layer.h +++ b/noncore/apps/opie-console/io_layer.h | |||
@@ -1,37 +1,45 @@ | |||
1 | #ifndef OPIE_IO_LAYER_H | 1 | #ifndef OPIE_IO_LAYER_H |
2 | #define OPIE_IO_LAYER_H | 2 | #define OPIE_IO_LAYER_H |
3 | 3 | ||
4 | #include <qbitarray.h> | ||
4 | #include <qobject.h> | 5 | #include <qobject.h> |
6 | |||
7 | |||
5 | #include <qpe/config.h> | 8 | #include <qpe/config.h> |
6 | 9 | ||
7 | #include "profile.h" | 10 | #include "profile.h" |
8 | 11 | ||
9 | /** | 12 | /** |
10 | * This is the base class for IO Layers | 13 | * This is the base class for IO Layers |
11 | * It will used to sent and recv data( QByteArray ) | 14 | * It will used to sent and recv data( QByteArray ) |
12 | * it | 15 | * it |
13 | */ | 16 | */ |
14 | class IOLayer : public QObject { | 17 | class IOLayer : public QObject { |
15 | Q_OBJECT | 18 | Q_OBJECT |
16 | public: | 19 | public: |
17 | enum Error { | 20 | enum Error { |
18 | NoError = -1, | 21 | NoError = -1, |
19 | Refuse = 0, | 22 | Refuse = 0, |
20 | CouldNotOpen =1, | 23 | CouldNotOpen =1, |
21 | ClosedUnexpected =2, | 24 | ClosedUnexpected =2, |
22 | ClosedError =3, | 25 | ClosedError =3, |
23 | Terminate = 4 | 26 | Terminate = 4 |
24 | /* add more errors here */ | 27 | /* add more errors here */ |
25 | }; | 28 | }; |
29 | enum Feature { | ||
30 | AutoConnect = 0, | ||
31 | TransferFile =1, | ||
32 | Close =2 | ||
33 | }; | ||
26 | /** | 34 | /** |
27 | * a small c'tor | 35 | * a small c'tor |
28 | */ | 36 | */ |
29 | IOLayer(); | 37 | IOLayer(); |
30 | 38 | ||
31 | /** | 39 | /** |
32 | * create an IOLayer instance from a config file | 40 | * create an IOLayer instance from a config file |
33 | * the currently set group stores the profile/session | 41 | * the currently set group stores the profile/session |
34 | * information | 42 | * information |
35 | */ | 43 | */ |
36 | IOLayer( const Profile& ); | 44 | IOLayer( const Profile& ); |
37 | 45 | ||
@@ -56,38 +64,44 @@ public: | |||
56 | * do any ioctling on it... | 64 | * do any ioctling on it... |
57 | * and it'll stop listening to the before opened | 65 | * and it'll stop listening to the before opened |
58 | * device | 66 | * device |
59 | */ | 67 | */ |
60 | virtual int rawIO()const; | 68 | virtual int rawIO()const; |
61 | 69 | ||
62 | /** | 70 | /** |
63 | * will close the rawIO stuff | 71 | * will close the rawIO stuff |
64 | * and will listen to it's data again... | 72 | * and will listen to it's data again... |
65 | */ | 73 | */ |
66 | virtual void closeRawIO(int); | 74 | virtual void closeRawIO(int); |
67 | 75 | ||
76 | /** | ||
77 | * What does the IOLayer support? | ||
78 | * Bits are related to features | ||
79 | */ | ||
80 | virtual QBitArray supports()const = 0; | ||
68 | 81 | ||
69 | signals: | 82 | signals: |
70 | /** | 83 | /** |
71 | * received input as QCString | 84 | * received input as QCString |
72 | */ | 85 | */ |
73 | virtual void received( const QByteArray& ); | 86 | virtual void received( const QByteArray& ); |
74 | 87 | ||
75 | /** | 88 | /** |
76 | * an error occured | 89 | * an error occured |
77 | * int for the error number | 90 | * int for the error number |
78 | * and QString for a text | 91 | * and QString for a text |
79 | */ | 92 | */ |
80 | virtual void error( int, const QString& ); | 93 | virtual void error( int, const QString& ); |
81 | 94 | ||
95 | virtual void closed(); | ||
82 | public slots: | 96 | public slots: |
83 | /** | 97 | /** |
84 | * send a QCString to the device | 98 | * send a QCString to the device |
85 | */ | 99 | */ |
86 | virtual void send( const QByteArray& ) = 0; | 100 | virtual void send( const QByteArray& ) = 0; |
87 | 101 | ||
88 | /** | 102 | /** |
89 | * bool open | 103 | * bool open |
90 | */ | 104 | */ |
91 | virtual bool open() = 0; | 105 | virtual bool open() = 0; |
92 | 106 | ||
93 | /** | 107 | /** |
diff --git a/noncore/apps/opie-console/io_serial.cpp b/noncore/apps/opie-console/io_serial.cpp index a4a6f0b..c10d5a8 100644 --- a/noncore/apps/opie-console/io_serial.cpp +++ b/noncore/apps/opie-console/io_serial.cpp | |||
@@ -178,12 +178,19 @@ int IOSerial::rawIO()const { | |||
178 | int fd = ::open(m_device, O_RDWR ); | 178 | int fd = ::open(m_device, O_RDWR ); |
179 | 179 | ||
180 | return fd; | 180 | return fd; |
181 | }; | 181 | }; |
182 | void IOSerial::closeRawIO(int fd) { | 182 | void IOSerial::closeRawIO(int fd) { |
183 | if (m_read ) | 183 | if (m_read ) |
184 | connect(m_read, SIGNAL(activated(int)), this, SLOT(dataArrived())); | 184 | connect(m_read, SIGNAL(activated(int)), this, SLOT(dataArrived())); |
185 | if (m_error ) | 185 | if (m_error ) |
186 | connect(m_error, SIGNAL(activated(int)), this, SLOT(errorOccured())); | 186 | connect(m_error, SIGNAL(activated(int)), this, SLOT(errorOccured())); |
187 | 187 | ||
188 | ::close( fd ); | 188 | ::close( fd ); |
189 | } | 189 | } |
190 | QBitArray IOSerial::supports()const { | ||
191 | QBitArray ar(3); | ||
192 | ar[0] = ar[2] = 0; | ||
193 | ar[1] = 1; | ||
194 | |||
195 | return ar; | ||
196 | } | ||
diff --git a/noncore/apps/opie-console/io_serial.h b/noncore/apps/opie-console/io_serial.h index facbbc1..b1d1be1 100644 --- a/noncore/apps/opie-console/io_serial.h +++ b/noncore/apps/opie-console/io_serial.h | |||
@@ -28,27 +28,29 @@ public: | |||
28 | enum Flow { | 28 | enum Flow { |
29 | FlowHW = 0x01, | 29 | FlowHW = 0x01, |
30 | FlowSW = 0x02 | 30 | FlowSW = 0x02 |
31 | }; | 31 | }; |
32 | 32 | ||
33 | IOSerial(const Profile &); | 33 | IOSerial(const Profile &); |
34 | ~IOSerial(); | 34 | ~IOSerial(); |
35 | 35 | ||
36 | QString identifier() const; | 36 | QString identifier() const; |
37 | QString name() const; | 37 | QString name() const; |
38 | int rawIO()const; | 38 | int rawIO()const; |
39 | void closeRawIO(int fd ); | 39 | void closeRawIO(int fd ); |
40 | signals: | 40 | QBitArray supports()const; |
41 | /*signals: | ||
41 | void received(const QByteArray &); | 42 | void received(const QByteArray &); |
42 | void error(int, const QString &); | 43 | void error(int, const QString &); |
44 | */ | ||
43 | public slots: | 45 | public slots: |
44 | void send(const QByteArray &); | 46 | void send(const QByteArray &); |
45 | bool open(); | 47 | bool open(); |
46 | void close(); | 48 | void close(); |
47 | void reload(const Profile &); | 49 | void reload(const Profile &); |
48 | protected: | 50 | protected: |
49 | int baud(int baud) const; | 51 | int baud(int baud) const; |
50 | protected slots: | 52 | protected slots: |
51 | void dataArrived(); | 53 | void dataArrived(); |
52 | void errorOccured(); | 54 | void errorOccured(); |
53 | protected: | 55 | protected: |
54 | QSocketNotifier *m_read; | 56 | QSocketNotifier *m_read; |
diff --git a/noncore/apps/opie-console/mainwindow.cpp b/noncore/apps/opie-console/mainwindow.cpp index 94c99bc..29dbcf3 100644 --- a/noncore/apps/opie-console/mainwindow.cpp +++ b/noncore/apps/opie-console/mainwindow.cpp | |||
@@ -351,29 +351,30 @@ void MainWindow::slotConfigure() { | |||
351 | } | 351 | } |
352 | /* | 352 | /* |
353 | * we will remove | 353 | * we will remove |
354 | * this window from the tabwidget | 354 | * this window from the tabwidget |
355 | * remove it from the list | 355 | * remove it from the list |
356 | * delete it | 356 | * delete it |
357 | * and set the currentSession() | 357 | * and set the currentSession() |
358 | */ | 358 | */ |
359 | void MainWindow::slotClose() { | 359 | void MainWindow::slotClose() { |
360 | if (!currentSession() ) | 360 | if (!currentSession() ) |
361 | return; | 361 | return; |
362 | 362 | ||
363 | Session* ses = currentSession(); | ||
364 | qWarning("removing! currentSession %s", currentSession()->name().latin1() ); | ||
363 | tabWidget()->remove( currentSession() ); | 365 | tabWidget()->remove( currentSession() ); |
364 | /*it's autodelete */ | 366 | /*it's autodelete */ |
365 | m_sessions.remove( m_curSession ); | 367 | m_sessions.remove( ses ); |
366 | m_curSession = m_sessions.first(); | 368 | qWarning("after remove!!"); |
367 | tabWidget()->setCurrent( m_curSession ); | ||
368 | 369 | ||
369 | if (!currentSession() ) { | 370 | if (!currentSession() ) { |
370 | m_connect->setEnabled( false ); | 371 | m_connect->setEnabled( false ); |
371 | m_disconnect->setEnabled( false ); | 372 | m_disconnect->setEnabled( false ); |
372 | m_terminate->setEnabled( false ); | 373 | m_terminate->setEnabled( false ); |
373 | m_transfer->setEnabled( false ); | 374 | m_transfer->setEnabled( false ); |
374 | m_recordScript->setEnabled( false ); | 375 | m_recordScript->setEnabled( false ); |
375 | m_saveScript->setEnabled( false ); | 376 | m_saveScript->setEnabled( false ); |
376 | m_runScript->setEnabled( false ); | 377 | m_runScript->setEnabled( false ); |
377 | m_fullscreen->setEnabled( false ); | 378 | m_fullscreen->setEnabled( false ); |
378 | m_closewindow->setEnabled( false ); | 379 | m_closewindow->setEnabled( false ); |
379 | } | 380 | } |
@@ -386,25 +387,25 @@ void MainWindow::slotClose() { | |||
386 | */ | 387 | */ |
387 | void MainWindow::slotProfile( int id) { | 388 | void MainWindow::slotProfile( int id) { |
388 | Profile prof = manager()->profile( m_sessionsPop->text( id) ); | 389 | Profile prof = manager()->profile( m_sessionsPop->text( id) ); |
389 | create( prof ); | 390 | create( prof ); |
390 | } | 391 | } |
391 | void MainWindow::create( const Profile& prof ) { | 392 | void MainWindow::create( const Profile& prof ) { |
392 | Session *ses = manager()->fromProfile( prof, tabWidget() ); | 393 | Session *ses = manager()->fromProfile( prof, tabWidget() ); |
393 | 394 | ||
394 | if((!ses) || (!ses->layer()) || (!ses->widgetStack())) | 395 | if((!ses) || (!ses->layer()) || (!ses->widgetStack())) |
395 | { | 396 | { |
396 | QMessageBox::warning(this, | 397 | QMessageBox::warning(this, |
397 | QObject::tr("Session failed"), | 398 | QObject::tr("Session failed"), |
398 | QObject::tr("Cannot open session: Not all components were found.")); | 399 | QObject::tr("<qt>Cannot open session: Not all components were found.</qt>")); |
399 | //if(ses) delete ses; | 400 | //if(ses) delete ses; |
400 | return; | 401 | return; |
401 | } | 402 | } |
402 | 403 | ||
403 | m_sessions.append( ses ); | 404 | m_sessions.append( ses ); |
404 | tabWidget()->add( ses ); | 405 | tabWidget()->add( ses ); |
405 | m_curSession = ses; | 406 | m_curSession = ses; |
406 | 407 | ||
407 | // dicide if its a local term ( then no connction and no tranfer), maybe make a wrapper method out of it | 408 | // dicide if its a local term ( then no connction and no tranfer), maybe make a wrapper method out of it |
408 | m_connect->setEnabled( true ); | 409 | m_connect->setEnabled( true ); |
409 | m_disconnect->setEnabled( false ); | 410 | m_disconnect->setEnabled( false ); |
410 | m_terminate->setEnabled( true ); | 411 | m_terminate->setEnabled( true ); |
@@ -424,24 +425,25 @@ void MainWindow::slotTransfer() | |||
424 | dlg.exec(); | 425 | dlg.exec(); |
425 | } | 426 | } |
426 | } | 427 | } |
427 | 428 | ||
428 | 429 | ||
429 | void MainWindow::slotOpenKeb(bool state) { | 430 | void MainWindow::slotOpenKeb(bool state) { |
430 | 431 | ||
431 | if (state) m_keyBar->show(); | 432 | if (state) m_keyBar->show(); |
432 | else m_keyBar->hide(); | 433 | else m_keyBar->hide(); |
433 | 434 | ||
434 | } | 435 | } |
435 | void MainWindow::slotSessionChanged( Session* ses ) { | 436 | void MainWindow::slotSessionChanged( Session* ses ) { |
437 | qWarning("changed!"); | ||
436 | if ( ses ) { | 438 | if ( ses ) { |
437 | m_curSession = ses; | 439 | m_curSession = ses; |
438 | 440 | ||
439 | if ( m_curSession->isConnected() ) { | 441 | if ( m_curSession->isConnected() ) { |
440 | m_connect->setEnabled( false ); | 442 | m_connect->setEnabled( false ); |
441 | m_disconnect->setEnabled( true ); | 443 | m_disconnect->setEnabled( true ); |
442 | } else { | 444 | } else { |
443 | m_connect->setEnabled( true ); | 445 | m_connect->setEnabled( true ); |
444 | m_disconnect->setEnabled( false ); | 446 | m_disconnect->setEnabled( false ); |
445 | } | 447 | } |
446 | } | 448 | } |
447 | } | 449 | } |
diff --git a/noncore/apps/opie-console/profilemanager.cpp b/noncore/apps/opie-console/profilemanager.cpp index e5aedb6..7c15560 100644 --- a/noncore/apps/opie-console/profilemanager.cpp +++ b/noncore/apps/opie-console/profilemanager.cpp | |||
@@ -1,16 +1,17 @@ | |||
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 <qlayout.h> | 6 | #include <qlayout.h> |
6 | #include <qwidgetstack.h> | 7 | #include <qwidgetstack.h> |
7 | 8 | ||
8 | #include <qpe/config.h> | 9 | #include <qpe/config.h> |
9 | 10 | ||
10 | #include "emulation_handler.h" | 11 | #include "emulation_handler.h" |
11 | #include "widget_layer.h" | 12 | #include "widget_layer.h" |
12 | #include "emulation_widget.h" | 13 | #include "emulation_widget.h" |
13 | #include "metafactory.h" | 14 | #include "metafactory.h" |
14 | #include "profileconfig.h" | 15 | #include "profileconfig.h" |
15 | #include "profilemanager.h" | 16 | #include "profilemanager.h" |
16 | 17 | ||
@@ -76,37 +77,29 @@ Session* ProfileManager::fromProfile( const Profile& prof, QWidget* parent) { | |||
76 | prof.writeEntry("Baud", 115200 ); | 77 | prof.writeEntry("Baud", 115200 ); |
77 | prof.setIOLayer("serial"); | 78 | prof.setIOLayer("serial"); |
78 | prof.setName( "test"); | 79 | prof.setName( "test"); |
79 | */ | 80 | */ |
80 | Session* session = new Session(); | 81 | Session* session = new Session(); |
81 | session->setName( prof.name() ); | 82 | session->setName( prof.name() ); |
82 | /* translate the internal name to the external */ | 83 | /* translate the internal name to the external */ |
83 | session->setIOLayer(m_fact->newIOLayer( m_fact->external(prof.ioLayerName()) , | 84 | session->setIOLayer(m_fact->newIOLayer( m_fact->external(prof.ioLayerName()) , |
84 | prof) ); | 85 | prof) ); |
85 | 86 | ||
86 | QWidgetStack *stack = new QWidgetStack( parent ); | 87 | QWidgetStack *stack = new QWidgetStack( parent ); |
87 | session->setWidgetStack( stack ); | 88 | session->setWidgetStack( stack ); |
88 | QWidget* dummy = new QWidget( stack ); | 89 | QWidget* dummy = new QHBox( stack ); |
89 | QHBoxLayout* lay = new QHBoxLayout( dummy ); | 90 | stack->raiseWidget( dummy ); |
90 | stack->addWidget( dummy, 0 ); | 91 | |
91 | stack->raiseWidget( 0 ); | ||
92 | EmulationHandler* handler = new EmulationHandler(prof,dummy ); | 92 | EmulationHandler* handler = new EmulationHandler(prof,dummy ); |
93 | session->setEmulationHandler( handler ); | 93 | session->setEmulationHandler( handler ); |
94 | lay->addWidget( handler->widget() ); | ||
95 | // WidgetLayer* wid = new EmulationWidget( prof, dummy ); | ||
96 | // lay->addWidget( wid ); | ||
97 | |||
98 | // session->setEmulationWidget( wid ); | ||
99 | // session->setEmulationLayer( m_fact->newEmulationLayer( m_fact->external( prof.terminalName() ), | ||
100 | // wid ) ); | ||
101 | session->connect(); | 94 | session->connect(); |
102 | 95 | ||
103 | return session; | 96 | return session; |
104 | } | 97 | } |
105 | void ProfileManager::save( ) { | 98 | void ProfileManager::save( ) { |
106 | QFile::remove( (QString(getenv("HOME") )+ "/Settings/opie-console-profiles.conf" ) ); | 99 | QFile::remove( (QString(getenv("HOME") )+ "/Settings/opie-console-profiles.conf" ) ); |
107 | ProfileConfig conf("opie-console-profiles"); | 100 | ProfileConfig conf("opie-console-profiles"); |
108 | Profile::ValueList::Iterator it2; | 101 | Profile::ValueList::Iterator it2; |
109 | for (it2 = m_list.begin(); it2 != m_list.end(); ++it2 ) { | 102 | for (it2 = m_list.begin(); it2 != m_list.end(); ++it2 ) { |
110 | conf.setGroup( (*it2).name() ); | 103 | conf.setGroup( (*it2).name() ); |
111 | 104 | ||
112 | /* now the config stuff */ | 105 | /* now the config stuff */ |
diff --git a/noncore/apps/opie-console/session.cpp b/noncore/apps/opie-console/session.cpp index e53dbc4..aad100d 100644 --- a/noncore/apps/opie-console/session.cpp +++ b/noncore/apps/opie-console/session.cpp | |||
@@ -27,24 +27,30 @@ Session::~Session() { | |||
27 | QString Session::name()const { | 27 | QString Session::name()const { |
28 | return m_name; | 28 | return m_name; |
29 | } | 29 | } |
30 | QWidgetStack* Session::widgetStack() { | 30 | QWidgetStack* Session::widgetStack() { |
31 | return m_widget; | 31 | return m_widget; |
32 | } | 32 | } |
33 | IOLayer* Session::layer() { | 33 | IOLayer* Session::layer() { |
34 | return m_layer; | 34 | return m_layer; |
35 | } | 35 | } |
36 | EmulationHandler* Session::emulationHandler() { | 36 | EmulationHandler* Session::emulationHandler() { |
37 | return m_emu; | 37 | return m_emu; |
38 | } | 38 | } |
39 | QWidget* Session::widget() { | ||
40 | if (!m_emu ) | ||
41 | return 0l; | ||
42 | |||
43 | return m_emu->widget(); | ||
44 | } | ||
39 | /* | 45 | /* |
40 | WidgetLayer* Session::emulationWidget() { | 46 | WidgetLayer* Session::emulationWidget() { |
41 | return m_widLay; | 47 | return m_widLay; |
42 | } | 48 | } |
43 | */ | 49 | */ |
44 | void Session::connect() { | 50 | void Session::connect() { |
45 | if ( !m_layer || !m_emu ) | 51 | if ( !m_layer || !m_emu ) |
46 | return; | 52 | return; |
47 | 53 | ||
48 | m_connected = true; | 54 | m_connected = true; |
49 | 55 | ||
50 | QObject::connect(m_layer, SIGNAL(received(const QByteArray&) ), | 56 | QObject::connect(m_layer, SIGNAL(received(const QByteArray&) ), |
diff --git a/noncore/apps/opie-console/session.h b/noncore/apps/opie-console/session.h index a1121d3..ff92df3 100644 --- a/noncore/apps/opie-console/session.h +++ b/noncore/apps/opie-console/session.h | |||
@@ -25,24 +25,25 @@ public: | |||
25 | * return the name of the session | 25 | * return the name of the session |
26 | */ | 26 | */ |
27 | QString name()const; | 27 | QString name()const; |
28 | 28 | ||
29 | /** | 29 | /** |
30 | * return the widgetstack | 30 | * return the widgetstack |
31 | * this is used to be semi modal | 31 | * this is used to be semi modal |
32 | * for FileTransfer | 32 | * for FileTransfer |
33 | * | 33 | * |
34 | * semi modal == SessionModal | 34 | * semi modal == SessionModal |
35 | */ | 35 | */ |
36 | QWidgetStack* widgetStack(); | 36 | QWidgetStack* widgetStack(); |
37 | QWidget* widget(); | ||
37 | 38 | ||
38 | /** | 39 | /** |
39 | * return the layer | 40 | * return the layer |
40 | */ | 41 | */ |
41 | IOLayer* layer(); | 42 | IOLayer* layer(); |
42 | 43 | ||
43 | EmulationHandler* emulationHandler(); | 44 | EmulationHandler* emulationHandler(); |
44 | 45 | ||
45 | /* | 46 | /* |
46 | * connects the data flow from | 47 | * connects the data flow from |
47 | * the IOLayer to the EmulationLayer | 48 | * the IOLayer to the EmulationLayer |
48 | */ | 49 | */ |
diff --git a/noncore/apps/opie-console/tabwidget.cpp b/noncore/apps/opie-console/tabwidget.cpp index 8a691f9..419f8ac 100644 --- a/noncore/apps/opie-console/tabwidget.cpp +++ b/noncore/apps/opie-console/tabwidget.cpp | |||
@@ -2,24 +2,25 @@ | |||
2 | #include "tabwidget.h" | 2 | #include "tabwidget.h" |
3 | 3 | ||
4 | TabWidget::TabWidget( QWidget* parent, const char* name ) | 4 | TabWidget::TabWidget( QWidget* parent, const char* name ) |
5 | : OTabWidget( parent, name ) { | 5 | : OTabWidget( parent, name ) { |
6 | connect(this, SIGNAL( currentChanged(QWidget*) ), | 6 | connect(this, SIGNAL( currentChanged(QWidget*) ), |
7 | this, SLOT( slotCurChanged(QWidget*) ) ); | 7 | this, SLOT( slotCurChanged(QWidget*) ) ); |
8 | } | 8 | } |
9 | 9 | ||
10 | TabWidget::~TabWidget() { | 10 | TabWidget::~TabWidget() { |
11 | } | 11 | } |
12 | 12 | ||
13 | void TabWidget::add( Session* ses ) { | 13 | void TabWidget::add( Session* ses ) { |
14 | qWarning("session ses " + ses->name() ); | ||
14 | if ( !ses->widgetStack() ) return; | 15 | if ( !ses->widgetStack() ) return; |
15 | //reparent( ses->widgetStack(), QPoint() ); | 16 | //reparent( ses->widgetStack(), QPoint() ); |
16 | addTab( ses->widgetStack(), "console/konsole", ses->name() ); | 17 | addTab( ses->widgetStack(), "console/konsole", ses->name() ); |
17 | //addTab( ses->widgetStack(), ses->name() ); | 18 | //addTab( ses->widgetStack(), ses->name() ); |
18 | m_map.insert( ses->widgetStack(), ses ); | 19 | m_map.insert( ses->widgetStack(), ses ); |
19 | } | 20 | } |
20 | 21 | ||
21 | void TabWidget::remove( Session* ses ) { | 22 | void TabWidget::remove( Session* ses ) { |
22 | m_map.remove( ses->widgetStack() ); | 23 | m_map.remove( ses->widgetStack() ); |
23 | removePage( ses->widgetStack() ); | 24 | removePage( ses->widgetStack() ); |
24 | } | 25 | } |
25 | 26 | ||