summaryrefslogtreecommitdiff
authorwazlaf <wazlaf>2002-10-13 13:49:11 (UTC)
committer wazlaf <wazlaf>2002-10-13 13:49:11 (UTC)
commit68c37a3412ef4609ba0209318ef2b06f7dd1aaf1 (patch) (unidiff)
treef81ee5460dd49c4fcb8a61bf50911c5036742bed
parent0e6d241e26211a8ffff07ba8e23f4a3cec9065be (diff)
downloadopie-68c37a3412ef4609ba0209318ef2b06f7dd1aaf1.zip
opie-68c37a3412ef4609ba0209318ef2b06f7dd1aaf1.tar.gz
opie-68c37a3412ef4609ba0209318ef2b06f7dd1aaf1.tar.bz2
Scripting functionality added. What this currently does is catch keys in the emulation_layer
and store them in a "Script" instance. This can later be saved to a file and on request "replayed" by sending the typed keys to the associated IOLayer
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/apps/opie-console/emulation_layer.cpp36
-rw-r--r--noncore/apps/opie-console/emulation_layer.h19
-rw-r--r--noncore/apps/opie-console/mainwindow.cpp56
-rw-r--r--noncore/apps/opie-console/mainwindow.h8
-rw-r--r--noncore/apps/opie-console/opie-console.pro4
-rw-r--r--noncore/apps/opie-console/script.cpp30
-rw-r--r--noncore/apps/opie-console/script.h30
7 files changed, 178 insertions, 5 deletions
diff --git a/noncore/apps/opie-console/emulation_layer.cpp b/noncore/apps/opie-console/emulation_layer.cpp
index 5baf05c..265c11f 100644
--- a/noncore/apps/opie-console/emulation_layer.cpp
+++ b/noncore/apps/opie-console/emulation_layer.cpp
@@ -62,243 +62,279 @@
62 well as individual characters typed. 62 well as individual characters typed.
63 (BULK_TIMEOUT < 1000 / max characters received from keyboard per second). 63 (BULK_TIMEOUT < 1000 / max characters received from keyboard per second).
64 64
65 Additionally, we trigger refreshing by newlines comming in to make visual 65 Additionally, we trigger refreshing by newlines comming in to make visual
66 snapshots of lists as produced by `cat', `ls' and likely programs, thereby 66 snapshots of lists as produced by `cat', `ls' and likely programs, thereby
67 producing the illusion of a permanent and immediate display operation. 67 producing the illusion of a permanent and immediate display operation.
68 68
69 As a sort of catch-all needed for cases where none of the above 69 As a sort of catch-all needed for cases where none of the above
70 conditions catch, the screen refresh is also triggered by a count 70 conditions catch, the screen refresh is also triggered by a count
71 of incoming bulks (`bulk_incnt'). 71 of incoming bulks (`bulk_incnt').
72*/ 72*/
73 73
74/* FIXME 74/* FIXME
75 - evtl. the bulk operations could be made more transparent. 75 - evtl. the bulk operations could be made more transparent.
76*/ 76*/
77 77
78#include "emulation_layer.h" 78#include "emulation_layer.h"
79#include "widget_layer.h" 79#include "widget_layer.h"
80#include "screen.h" 80#include "screen.h"
81#include <stdio.h> 81#include <stdio.h>
82#include <stdlib.h> 82#include <stdlib.h>
83#include <unistd.h> 83#include <unistd.h>
84#include <qkeycode.h> 84#include <qkeycode.h>
85 85
86 86
87/* ------------------------------------------------------------------------- */ 87/* ------------------------------------------------------------------------- */
88/* */ 88/* */
89/* EmulationLayer */ 89/* EmulationLayer */
90/* */ 90/* */
91/* ------------------------------------------------------------------------- */ 91/* ------------------------------------------------------------------------- */
92 92
93#define CNTL(c) ((c)-'@') 93#define CNTL(c) ((c)-'@')
94 94
95/*! 95/*!
96*/ 96*/
97 97
98EmulationLayer::EmulationLayer( WidgetLayer* gui ) 98EmulationLayer::EmulationLayer( WidgetLayer* gui )
99: decoder((QTextDecoder*)NULL) 99: decoder((QTextDecoder*)NULL)
100{ 100{
101 this->gui = gui; 101 this->gui = gui;
102 102
103 screen[0] = new Screen(gui->lines(),gui->columns()); 103 screen[0] = new Screen(gui->lines(),gui->columns());
104 screen[1] = new Screen(gui->lines(),gui->columns()); 104 screen[1] = new Screen(gui->lines(),gui->columns());
105 scr = screen[0]; 105 scr = screen[0];
106 106
107 bulk_nlcnt = 0; // reset bulk newline counter 107 bulk_nlcnt = 0; // reset bulk newline counter
108 bulk_incnt = 0; // reset bulk counter 108 bulk_incnt = 0; // reset bulk counter
109 connected = FALSE; 109 connected = FALSE;
110 m_script = 0;
110 111
111 QObject::connect(&bulk_timer, SIGNAL( timeout() ), this, SLOT( showBulk() ) ); 112 QObject::connect(&bulk_timer, SIGNAL( timeout() ), this, SLOT( showBulk() ) );
112 QObject::connect(gui,SIGNAL( imageSizeChanged( int, int ) ), 113 QObject::connect(gui,SIGNAL( imageSizeChanged( int, int ) ),
113 this,SLOT( onImageSizeChange( int, int ) ) ); 114 this,SLOT( onImageSizeChange( int, int ) ) );
114 QObject::connect(gui,SIGNAL( changedHistoryCursor( int ) ), 115 QObject::connect(gui,SIGNAL( changedHistoryCursor( int ) ),
115 this,SLOT( historyCursorChange( int ) ) ); 116 this,SLOT( historyCursorChange( int ) ) );
116 QObject::connect(gui,SIGNAL( keyPressed( QKeyEvent* ) ), 117 QObject::connect(gui,SIGNAL( keyPressed( QKeyEvent* ) ),
117 this,SLOT( onKeyPress( QKeyEvent* ) ) ); 118 this,SLOT( onKeyPress( QKeyEvent* ) ) );
118 QObject::connect(gui,SIGNAL( selectionBegin( const int, const int) ), 119 QObject::connect(gui,SIGNAL( selectionBegin( const int, const int) ),
119 this,SLOT( onSelectionBegin( const int, const int ) ) ); 120 this,SLOT( onSelectionBegin( const int, const int ) ) );
120 QObject::connect(gui,SIGNAL( selectionExtended( const int, const int ) ), 121 QObject::connect(gui,SIGNAL( selectionExtended( const int, const int ) ),
121 this,SLOT( onSelectionExtend( const int,const int ) ) ); 122 this,SLOT( onSelectionExtend( const int,const int ) ) );
122 QObject::connect(gui,SIGNAL( selectionEnd( const bool ) ), 123 QObject::connect(gui,SIGNAL( selectionEnd( const bool ) ),
123 this,SLOT( setSelection( const bool ) ) ); 124 this,SLOT( setSelection( const bool ) ) );
124 QObject::connect(gui,SIGNAL( selectionCleared() ), 125 QObject::connect(gui,SIGNAL( selectionCleared() ),
125 this,SLOT( clearSelection() ) ); 126 this,SLOT( clearSelection() ) );
126} 127}
127 128
128/*! 129/*!
129*/ 130*/
130 131
131EmulationLayer::~EmulationLayer() 132EmulationLayer::~EmulationLayer()
132{ 133{
133 delete screen[0]; 134 delete screen[0];
134 delete screen[1]; 135 delete screen[1];
136 if (isRecording())
137 clearScript();
135 bulk_timer.stop(); 138 bulk_timer.stop();
136} 139}
137 140
138/*! change between primary and alternate screen 141/*! change between primary and alternate screen
139*/ 142*/
140 143
141void EmulationLayer::setScreen(int n) 144void EmulationLayer::setScreen(int n)
142{ 145{
143 scr = screen[n&1]; 146 scr = screen[n&1];
144} 147}
145 148
146void EmulationLayer::setHistory(bool on) 149void EmulationLayer::setHistory(bool on)
147{ 150{
148 screen[0]->setScroll(on); 151 screen[0]->setScroll(on);
149 if (!connected) return; 152 if (!connected) return;
150 showBulk(); 153 showBulk();
151} 154}
152 155
153bool EmulationLayer::history() 156bool EmulationLayer::history()
154{ 157{
155 return screen[0]->hasScroll(); 158 return screen[0]->hasScroll();
156} 159}
157 160
158void EmulationLayer::setCodec(int c) 161void EmulationLayer::setCodec(int c)
159{ 162{
160 //FIXME: check whether we have to free codec 163 //FIXME: check whether we have to free codec
161 codec = c ? QTextCodec::codecForName("utf8") 164 codec = c ? QTextCodec::codecForName("utf8")
162 : QTextCodec::codecForLocale(); 165 : QTextCodec::codecForLocale();
163 if (decoder) delete decoder; 166 if (decoder) delete decoder;
164 decoder = codec->makeDecoder(); 167 decoder = codec->makeDecoder();
165} 168}
166 169
167void EmulationLayer::setKeytrans(int no) 170void EmulationLayer::setKeytrans(int no)
168{ 171{
169 keytrans = KeyTrans::find(no); 172 keytrans = KeyTrans::find(no);
170} 173}
171 174
172void EmulationLayer::setKeytrans(const char * no) 175void EmulationLayer::setKeytrans(const char * no)
173{ 176{
174 keytrans = KeyTrans::find(no); 177 keytrans = KeyTrans::find(no);
175} 178}
176 179
177// Interpreting Codes --------------------------------------------------------- 180// Interpreting Codes ---------------------------------------------------------
178 181
179/* 182/*
180 This section deals with decoding the incoming character stream. 183 This section deals with decoding the incoming character stream.
181 Decoding means here, that the stream is first seperated into `tokens' 184 Decoding means here, that the stream is first seperated into `tokens'
182 which are then mapped to a `meaning' provided as operations by the 185 which are then mapped to a `meaning' provided as operations by the
183 `Screen' class. 186 `Screen' class.
184*/ 187*/
185 188
186/*! 189/*!
187*/ 190*/
188 191
189void EmulationLayer::onRcvChar(int c) 192void EmulationLayer::onRcvChar(int c)
190// process application unicode input to terminal 193// process application unicode input to terminal
191// this is a trivial scanner 194// this is a trivial scanner
192{ 195{
193 c &= 0xff; 196 c &= 0xff;
194 switch (c) 197 switch (c)
195 { 198 {
196 case '\b' : scr->BackSpace(); break; 199 case '\b' : scr->BackSpace(); break;
197 case '\t' : scr->Tabulate(); break; 200 case '\t' : scr->Tabulate(); break;
198 case '\n' : scr->NewLine(); break; 201 case '\n' : scr->NewLine(); break;
199 case '\r' : scr->Return(); break; 202 case '\r' : scr->Return(); break;
200 case 0x07 : gui->bell(); break; 203 case 0x07 : gui->bell(); break;
201 default : scr->ShowCharacter(c); break; 204 default : scr->ShowCharacter(c); break;
202 }; 205 };
203} 206}
204 207
205/* ------------------------------------------------------------------------- */ 208/* ------------------------------------------------------------------------- */
206/* */ 209/* */
207/* Keyboard Handling */ 210/* Keyboard Handling */
208/* */ 211/* */
209/* ------------------------------------------------------------------------- */ 212/* ------------------------------------------------------------------------- */
210 213
211/*! 214/*!
212*/ 215*/
213 216
214void EmulationLayer::onKeyPress( QKeyEvent* ev ) 217void EmulationLayer::onKeyPress( QKeyEvent* ev )
215{ 218{
216 if (!connected) return; // someone else gets the keys 219 if (!connected) return; // someone else gets the keys
217 if (scr->getHistCursor() != scr->getHistLines()); 220 if (scr->getHistCursor() != scr->getHistLines());
218 scr->setHistCursor(scr->getHistLines()); 221 scr->setHistCursor(scr->getHistLines());
219 if (!ev->text().isEmpty()) 222 if (!ev->text().isEmpty())
220 { // A block of text 223 { // A block of text
221 // Note that the text is proper unicode. 224 // Note that the text is proper unicode.
222 // We should do a conversion here, but since this 225 // We should do a conversion here, but since this
223 // routine will never be used, we simply emit plain ascii. 226 // routine will never be used, we simply emit plain ascii.
224 sendString( ev->text().ascii() ); //,ev->text().length()); 227 sendString( ev->text().ascii() ); //,ev->text().length());
225 } 228 }
226 else if (ev->ascii()>0) 229 else if (ev->ascii()>0)
227 { 230 {
228 QByteArray c = QByteArray( 1 ); 231 QByteArray c = QByteArray( 1 );
229 c.at( 0 ) = ev->ascii(); 232 c.at( 0 ) = ev->ascii();
230 // ibot: qbytearray is emited not char* 233 // ibot: qbytearray is emited not char*
234
235 /* Are we currently recording a script? If so, store the typed character */
236 if (isRecording())
237 m_script->appendString(ev->text());
231 emit sndBlock( (QByteArray) c ); 238 emit sndBlock( (QByteArray) c );
232 } 239 }
233} 240}
234 241
235// Unblocking, Byte to Unicode translation --------------------------------- -- 242// Unblocking, Byte to Unicode translation --------------------------------- --
236 243
237/* 244/*
238 We are doing code conversion from locale to unicode first. 245 We are doing code conversion from locale to unicode first.
239*/ 246*/
240 247
241void EmulationLayer::onRcvBlock(const QByteArray &s ) 248void EmulationLayer::onRcvBlock(const QByteArray &s )
242{ 249{
243 bulkStart(); 250 bulkStart();
244 bulk_incnt += 1; 251 bulk_incnt += 1;
245 for (int i = 0; i < s.size(); i++) 252 for (int i = 0; i < s.size(); i++)
246 { 253 {
247 //TODO: ibot: maybe decoding qbytearray to unicode in io_layer? 254 //TODO: ibot: maybe decoding qbytearray to unicode in io_layer?
248 QString result = decoder->toUnicode(&s[i],1); 255 QString result = decoder->toUnicode(&s[i],1);
249 int reslen = result.length(); 256 int reslen = result.length();
250 for (int j = 0; j < reslen; j++) 257 for (int j = 0; j < reslen; j++)
251 onRcvChar(result[j].unicode()); 258 onRcvChar(result[j].unicode());
252 if (s[i] == '\n') bulkNewline(); 259 if (s[i] == '\n') bulkNewline();
253 } 260 }
254 bulkEnd(); 261 bulkEnd();
255} 262}
256 263
264// Scripts ----------------------------------------------------------------- --
265
266
267Script *EmulationLayer::script() {
268 return m_script;
269}
270
271bool EmulationLayer::isRecording() {
272 return (m_script != 0);
273}
274
275void EmulationLayer::startRecording() {
276 if (!isRecording())
277 m_script = new Script();
278}
279
280void EmulationLayer::clearScript() {
281 if (isRecording()) {
282
283 }
284}
285
286void EmulationLayer::runScript(const Script *script) {
287 QByteArray a = QByteArray();
288 QString str = script->script();
289 a.setRawData(str.ascii(), str.length());
290 emit sndBlock(a);
291}
292
257// Selection --------------------------------------------------------------- -- 293// Selection --------------------------------------------------------------- --
258 294
259void EmulationLayer::onSelectionBegin(const int x, const int y) { 295void EmulationLayer::onSelectionBegin(const int x, const int y) {
260 if (!connected) return; 296 if (!connected) return;
261 scr->setSelBeginXY(x,y); 297 scr->setSelBeginXY(x,y);
262 showBulk(); 298 showBulk();
263} 299}
264 300
265void EmulationLayer::onSelectionExtend(const int x, const int y) { 301void EmulationLayer::onSelectionExtend(const int x, const int y) {
266 if (!connected) return; 302 if (!connected) return;
267 scr->setSelExtentXY(x,y); 303 scr->setSelExtentXY(x,y);
268 showBulk(); 304 showBulk();
269} 305}
270 306
271void EmulationLayer::setSelection(const BOOL preserve_line_breaks) { 307void EmulationLayer::setSelection(const BOOL preserve_line_breaks) {
272 if (!connected) return; 308 if (!connected) return;
273 QString t = scr->getSelText(preserve_line_breaks); 309 QString t = scr->getSelText(preserve_line_breaks);
274 if (!t.isNull()) gui->setSelection(t); 310 if (!t.isNull()) gui->setSelection(t);
275} 311}
276 312
277void EmulationLayer::clearSelection() { 313void EmulationLayer::clearSelection() {
278 if (!connected) return; 314 if (!connected) return;
279 scr->clearSelection(); 315 scr->clearSelection();
280 showBulk(); 316 showBulk();
281} 317}
282 318
283// Refreshing -------------------------------------------------------------- -- 319// Refreshing -------------------------------------------------------------- --
284 320
285#define BULK_TIMEOUT 20 321#define BULK_TIMEOUT 20
286 322
287/*! 323/*!
288 called when \n comes in. Evtl. triggers showBulk at endBulk 324 called when \n comes in. Evtl. triggers showBulk at endBulk
289*/ 325*/
290 326
291void EmulationLayer::bulkNewline() 327void EmulationLayer::bulkNewline()
292{ 328{
293 bulk_nlcnt += 1; 329 bulk_nlcnt += 1;
294 bulk_incnt = 0; // reset bulk counter since `nl' rule applies 330 bulk_incnt = 0; // reset bulk counter since `nl' rule applies
295} 331}
296 332
297/*! 333/*!
298*/ 334*/
299 335
300void EmulationLayer::showBulk() 336void EmulationLayer::showBulk()
301{ 337{
302 bulk_nlcnt = 0; // reset bulk newline counter 338 bulk_nlcnt = 0; // reset bulk newline counter
303 bulk_incnt = 0; // reset bulk counter 339 bulk_incnt = 0; // reset bulk counter
304 if (connected) 340 if (connected)
diff --git a/noncore/apps/opie-console/emulation_layer.h b/noncore/apps/opie-console/emulation_layer.h
index 91a4856..928ad04 100644
--- a/noncore/apps/opie-console/emulation_layer.h
+++ b/noncore/apps/opie-console/emulation_layer.h
@@ -1,146 +1,163 @@
1/* -------------------------------------------------------------------------- */ 1/* -------------------------------------------------------------------------- */
2/* */ 2/* */
3/* [emulation.h] Fundamental Terminal Emulation */ 3/* [emulation.h] Fundamental Terminal Emulation */
4/* */ 4/* */
5/* -------------------------------------------------------------------------- */ 5/* -------------------------------------------------------------------------- */
6/* */ 6/* */
7/* Copyright (c) 1997,1998 by Lars Doelle <lars.doelle@on-line.de> */ 7/* Copyright (c) 1997,1998 by Lars Doelle <lars.doelle@on-line.de> */
8/* */ 8/* */
9/* This file is part of Konsole - an X terminal for KDE */ 9/* This file is part of Konsole - an X terminal for KDE */
10/* */ 10/* */
11/* -------------------------------------------------------------------------- */ 11/* -------------------------------------------------------------------------- */
12 /* */ 12 /* */
13/* Ported Konsole to Qt/Embedded */ 13/* Ported Konsole to Qt/Embedded */
14 /* */ 14 /* */
15/* Copyright (C) 2000 by John Ryland <jryland@trolltech.com> */ 15/* Copyright (C) 2000 by John Ryland <jryland@trolltech.com> */
16 /* */ 16 /* */
17/* -------------------------------------------------------------------------- */ 17/* -------------------------------------------------------------------------- */
18/* -------------------------------------------------------------------------- */ 18/* -------------------------------------------------------------------------- */
19 /* */ 19 /* */
20/* made to a layer between io_layer and widget */ 20/* made to a layer between io_layer and widget */
21 /* */ 21 /* */
22/* Copyright (C) 2002 by opie developers <opie@handhelds.org> */ 22/* Copyright (C) 2002 by opie developers <opie@handhelds.org> */
23 /* */ 23 /* */
24/* -------------------------------------------------------------------------- */ 24/* -------------------------------------------------------------------------- */
25 25
26#ifndef EMULATION_LAYER_H 26#ifndef EMULATION_LAYER_H
27#define EMULATION_LAYER_H 27#define EMULATION_LAYER_H
28 28
29#include "widget_layer.h" 29#include "widget_layer.h"
30#include "screen.h" 30#include "screen.h"
31#include <qtimer.h> 31#include <qtimer.h>
32#include <stdio.h> 32#include <stdio.h>
33#include <qtextcodec.h> 33#include <qtextcodec.h>
34#include "keytrans.h" 34#include "keytrans.h"
35#include "script.h"
35 36
36class EmulationLayer : public QObject 37class EmulationLayer : public QObject
37{ Q_OBJECT 38{ Q_OBJECT
38 39
39public: 40public:
40 41
41 EmulationLayer( WidgetLayer* gui ); 42 EmulationLayer( WidgetLayer* gui );
42 ~EmulationLayer(); 43 ~EmulationLayer();
43 44
44public: 45public:
45 virtual void setHistory(bool on); 46 virtual void setHistory(bool on);
46 virtual bool history(); 47 virtual bool history();
47 48
48public slots: // signals incoming from Widget 49public slots: // signals incoming from Widget
49 50
50 virtual void onImageSizeChange(int lines, int columns); 51 virtual void onImageSizeChange(int lines, int columns);
51 virtual void onHistoryCursorChange(int cursor); 52 virtual void onHistoryCursorChange(int cursor);
52 virtual void onKeyPress(QKeyEvent*); 53 virtual void onKeyPress(QKeyEvent*);
53 54
54 virtual void clearSelection(); 55 virtual void clearSelection();
55 virtual void onSelectionBegin(const int x, const int y); 56 virtual void onSelectionBegin(const int x, const int y);
56 virtual void onSelectionExtend(const int x, const int y); 57 virtual void onSelectionExtend(const int x, const int y);
57 virtual void setSelection(const bool preserve_line_breaks); 58 virtual void setSelection(const bool preserve_line_breaks);
58 59
59public slots: // signals incoming from data source 60public slots: // signals incoming from data source
60 61
61 /** 62 /**
62 * to be called, when new data arrives 63 * to be called, when new data arrives
63 */ 64 */
64 void onRcvBlock(const QByteArray&); 65 void onRcvBlock(const QByteArray&);
65 66
66signals: 67signals:
67 68
68 /** 69 /**
69 * will send data, encoded to suit emulation 70 * will send data, encoded to suit emulation
70 */ 71 */
71 void sndBlock(const QByteArray&); 72 void sndBlock(const QByteArray&);
72 73
73 void ImageSizeChanged(int lines, int columns); 74 void ImageSizeChanged(int lines, int columns);
74 75
75 void changeColumns(int columns); 76 void changeColumns(int columns);
76 77
77 void changeTitle(int arg, const char* str); 78 void changeTitle(int arg, const char* str);
78 79
79 80
80public: 81public:
81 82
82 /** 83 /**
83 * process single char (decode) 84 * process single char (decode)
84 */ 85 */
85 virtual void onRcvChar(int); 86 virtual void onRcvChar(int);
86 87
87 virtual void setMode (int) = 0; 88 virtual void setMode (int) = 0;
88 virtual void resetMode(int) = 0; 89 virtual void resetMode(int) = 0;
89 90
90 /** 91 /**
91 * @deprecated use qbytearray instead 92 * @deprecated use qbytearray instead
92 */ 93 */
93 virtual void sendString(const char*) = 0; 94 virtual void sendString(const char*) = 0;
94 95
95 /** 96 /**
96 * sends a string to IOLayer 97 * sends a string to IOLayer
97 * encodes to suit emulation before 98 * encodes to suit emulation before
98 */ 99 */
99 virtual void sendString(const QByteArray&) = 0; 100 virtual void sendString(const QByteArray&) = 0;
100 101
101 virtual void setConnect(bool r); 102 virtual void setConnect(bool r);
102 void setColumns(int columns); 103 void setColumns(int columns);
103 104
104 void setKeytrans(int no); 105 void setKeytrans(int no);
105 void setKeytrans(const char * no); 106 void setKeytrans(const char * no);
106 107
108 /* Scripts */
109
110 /* Create a new script and record all typed characters */
111 void startRecording();
112
113 /* Return whether we are currently recording a script */
114 bool isRecording();
115
116 /* Return the current script (or NULL) */
117 Script *script();
118
119 /* Stop recording and remove the current script from memory */
120 void clearScript();
121
122 /* Run a script by forwarding its keys to the EmulationLayer */
123 void runScript(const Script *);
107protected: 124protected:
108 125
109 WidgetLayer* gui; 126 WidgetLayer* gui;
110 Screen* scr; // referes to one `screen' 127 Screen* scr; // referes to one `screen'
111 Screen* screen[2]; // 0 = primary, 1 = alternate 128 Screen* screen[2]; // 0 = primary, 1 = alternate
112 void setScreen(int n); // set `scr' to `screen[n]' 129 void setScreen(int n); // set `scr' to `screen[n]'
113 130
114 bool connected; // communicate with widget 131 bool connected; // communicate with widget
115 132
116 void setCodec(int c); // codec number, 0 = locale, 1=utf8 133 void setCodec(int c); // codec number, 0 = locale, 1=utf8
117 134
118 QTextCodec* codec; 135 QTextCodec* codec;
119 QTextCodec* localeCodec; 136 QTextCodec* localeCodec;
120 QTextDecoder* decoder; 137 QTextDecoder* decoder;
121 138
122 KeyTrans* keytrans; 139 KeyTrans* keytrans;
123 140
124// refreshing related material. 141// refreshing related material.
125// this is localized in the class. 142// this is localized in the class.
126private slots: // triggered by timer 143private slots: // triggered by timer
127 144
128 void showBulk(); 145 void showBulk();
129 146
130private: 147private:
131 148
132 void bulkNewline(); 149 void bulkNewline();
133 void bulkStart(); 150 void bulkStart();
134 void bulkEnd(); 151 void bulkEnd();
135 152
136private: 153private:
137 154
138 QTimer bulk_timer; 155 QTimer bulk_timer;
139 int bulk_nlcnt; // bulk newline counter 156 int bulk_nlcnt; // bulk newline counter
140 char* SelectedText; 157 char* SelectedText;
141 int bulk_incnt; // bulk counter 158 int bulk_incnt; // bulk counter
142 159 Script *m_script;
143 160
144}; 161};
145 162
146#endif // ifndef EMULATION_H 163#endif // ifndef EMULATION_H
diff --git a/noncore/apps/opie-console/mainwindow.cpp b/noncore/apps/opie-console/mainwindow.cpp
index 8f5d56b..46c5bed 100644
--- a/noncore/apps/opie-console/mainwindow.cpp
+++ b/noncore/apps/opie-console/mainwindow.cpp
@@ -1,239 +1,293 @@
1 1
2#include <qaction.h> 2#include <qaction.h>
3#include <qmenubar.h> 3#include <qmenubar.h>
4#include <qlabel.h> 4#include <qlabel.h>
5#include <qpopupmenu.h> 5#include <qpopupmenu.h>
6#include <qtoolbar.h> 6#include <qtoolbar.h>
7#include <qpe/resource.h> 7#include <qpe/resource.h>
8 8#include <opie/ofiledialog.h>
9 9
10#include "profileeditordialog.h" 10#include "profileeditordialog.h"
11#include "configdialog.h" 11#include "configdialog.h"
12#include "default.h" 12#include "default.h"
13#include "metafactory.h" 13#include "metafactory.h"
14#include "profile.h" 14#include "profile.h"
15#include "profilemanager.h" 15#include "profilemanager.h"
16#include "mainwindow.h" 16#include "mainwindow.h"
17#include "tabwidget.h" 17#include "tabwidget.h"
18#include "transferdialog.h" 18#include "transferdialog.h"
19#include "function_keyboard.h" 19#include "function_keyboard.h"
20#include "script.h"
20 21
21MainWindow::MainWindow() { 22MainWindow::MainWindow() {
22 m_factory = new MetaFactory(); 23 m_factory = new MetaFactory();
23 Default def(m_factory); 24 Default def(m_factory);
24 m_sessions.setAutoDelete( TRUE ); 25 m_sessions.setAutoDelete( TRUE );
25 m_curSession = 0; 26 m_curSession = 0;
26 m_manager = new ProfileManager( m_factory ); 27 m_manager = new ProfileManager( m_factory );
27 m_manager->load(); 28 m_manager->load();
28 29
29 initUI(); 30 initUI();
30 populateProfiles(); 31 populateProfiles();
31} 32}
32void MainWindow::initUI() { 33void MainWindow::initUI() {
33 setToolBarsMovable( FALSE ); 34 setToolBarsMovable( FALSE );
34 35
35 /* tool bar for the menu */ 36 /* tool bar for the menu */
36 m_tool = new QToolBar( this ); 37 m_tool = new QToolBar( this );
37 m_tool->setHorizontalStretchable( TRUE ); 38 m_tool->setHorizontalStretchable( TRUE );
38 39
39 m_bar = new QMenuBar( m_tool ); 40 m_bar = new QMenuBar( m_tool );
40 m_console = new QPopupMenu( this ); 41 m_console = new QPopupMenu( this );
42 m_scripts = new QPopupMenu( this );
41 m_sessionsPop= new QPopupMenu( this ); 43 m_sessionsPop= new QPopupMenu( this );
42 m_settings = new QPopupMenu( this ); 44 m_settings = new QPopupMenu( this );
43 45
44 /* add a toolbar for icons */ 46 /* add a toolbar for icons */
45 m_icons = new QToolBar(this); 47 m_icons = new QToolBar(this);
46 48
47 /* 49 /*
48 * new Action for new sessions 50 * new Action for new sessions
49 */ 51 */
50 QAction* a = new QAction(tr("New Connection"), 52 QAction* a = new QAction(tr("New Connection"),
51 Resource::loadPixmap( "new" ), 53 Resource::loadPixmap( "new" ),
52 QString::null, 0, this, 0); 54 QString::null, 0, this, 0);
53 a->addTo( m_console ); 55 a->addTo( m_console );
54 a->addTo( m_icons ); 56 a->addTo( m_icons );
55 connect(a, SIGNAL(activated() ), 57 connect(a, SIGNAL(activated() ),
56 this, SLOT(slotNew() ) ); 58 this, SLOT(slotNew() ) );
57 59
58 /* 60 /*
59 * connect action 61 * connect action
60 */ 62 */
61 m_connect = new QAction(); 63 m_connect = new QAction();
62 m_connect->setText( tr("Connect") ); 64 m_connect->setText( tr("Connect") );
63 m_connect->addTo( m_console ); 65 m_connect->addTo( m_console );
64 connect(m_connect, SIGNAL(activated() ), 66 connect(m_connect, SIGNAL(activated() ),
65 this, SLOT(slotConnect() ) ); 67 this, SLOT(slotConnect() ) );
66 68
67 /* 69 /*
68 * disconnect action 70 * disconnect action
69 */ 71 */
70 m_disconnect = new QAction(); 72 m_disconnect = new QAction();
71 m_disconnect->setText( tr("Disconnect") ); 73 m_disconnect->setText( tr("Disconnect") );
72 m_disconnect->addTo( m_console ); 74 m_disconnect->addTo( m_console );
73 connect(m_disconnect, SIGNAL(activated() ), 75 connect(m_disconnect, SIGNAL(activated() ),
74 this, SLOT(slotDisconnect() ) ); 76 this, SLOT(slotDisconnect() ) );
75 77
76 m_transfer = new QAction(); 78 m_transfer = new QAction();
77 m_transfer->setText( tr("Transfer file...") ); 79 m_transfer->setText( tr("Transfer file...") );
78 m_transfer->addTo( m_console ); 80 m_transfer->addTo( m_console );
79 connect(m_transfer, SIGNAL(activated() ), 81 connect(m_transfer, SIGNAL(activated() ),
80 this, SLOT(slotTransfer() ) ); 82 this, SLOT(slotTransfer() ) );
81 83
82 /* 84 /*
83 * terminate action 85 * terminate action
84 */ 86 */
85 m_terminate = new QAction(); 87 m_terminate = new QAction();
86 m_terminate->setText( tr("Terminate") ); 88 m_terminate->setText( tr("Terminate") );
87 m_terminate->addTo( m_console ); 89 m_terminate->addTo( m_console );
88 connect(m_terminate, SIGNAL(activated() ), 90 connect(m_terminate, SIGNAL(activated() ),
89 this, SLOT(slotTerminate() ) ); 91 this, SLOT(slotTerminate() ) );
90 92
91 a = new QAction(); 93 a = new QAction();
92 a->setText( tr("Close Window") ); 94 a->setText( tr("Close Window") );
93 a->addTo( m_console ); 95 a->addTo( m_console );
94 connect(a, SIGNAL(activated() ), 96 connect(a, SIGNAL(activated() ),
95 this, SLOT(slotClose() ) ); 97 this, SLOT(slotClose() ) );
96 98
97 /* 99 /*
98 * the settings action 100 * the settings action
99 */ 101 */
100 m_setProfiles = new QAction(tr("Configure Profiles"), 102 m_setProfiles = new QAction(tr("Configure Profiles"),
101 Resource::loadPixmap( "SettingsIcon" ), 103 Resource::loadPixmap( "SettingsIcon" ),
102 QString::null, 0, this, 0); 104 QString::null, 0, this, 0);
103 m_setProfiles->addTo( m_settings ); 105 m_setProfiles->addTo( m_settings );
104 m_setProfiles->addTo( m_icons ); 106 m_setProfiles->addTo( m_icons );
105 connect( m_setProfiles, SIGNAL(activated() ), 107 connect( m_setProfiles, SIGNAL(activated() ),
106 this, SLOT(slotConfigure() ) ); 108 this, SLOT(slotConfigure() ) );
107 109
108 /* 110 /*
111 * script actions
112 */
113 m_recordScript = new QAction(tr("Record Script"), QString::null, 0, this, 0);
114 m_recordScript->addTo(m_scripts);
115 connect(m_recordScript, SIGNAL(activated()), this, SLOT(slotRecordScript()));
116
117 m_saveScript = new QAction(tr("Save Script"), QString::null, 0, this, 0);
118 m_saveScript->addTo(m_scripts);
119 connect(m_saveScript, SIGNAL(activated()), this, SLOT(slotSaveScript()));
120
121 m_runScript = new QAction(tr("Run Script"), QString::null, 0, this, 0);
122 m_runScript->addTo(m_scripts);
123 connect(m_runScript, SIGNAL(activated()), this, SLOT(slotRunScript()));
124
125 /*
109 * action that open/closes the keyboard 126 * action that open/closes the keyboard
110 */ 127 */
111 m_openKeys = new QAction (tr("Open Keyboard..."), 128 m_openKeys = new QAction (tr("Open Keyboard..."),
112 Resource::loadPixmap( "down" ), 129 Resource::loadPixmap( "down" ),
113 QString::null, 0, this, 0); 130 QString::null, 0, this, 0);
114 131
115 m_openKeys->setToggleAction(true); 132 m_openKeys->setToggleAction(true);
116 133
117 connect (m_openKeys, SIGNAL(toggled(bool)), 134 connect (m_openKeys, SIGNAL(toggled(bool)),
118 this, SLOT(slotOpenKeb(bool))); 135 this, SLOT(slotOpenKeb(bool)));
119 m_openKeys->addTo(m_icons); 136 m_openKeys->addTo(m_icons);
120 137
121 138
122 /* insert the submenu */ 139 /* insert the submenu */
123 m_console->insertItem(tr("New from Profile"), m_sessionsPop, 140 m_console->insertItem(tr("New from Profile"), m_sessionsPop,
124 -1, 0); 141 -1, 0);
125 142
126 /* insert the connection menu */ 143 /* insert the connection menu */
127 m_bar->insertItem( tr("Connection"), m_console ); 144 m_bar->insertItem( tr("Connection"), m_console );
128 145
146 /* the scripts menu */
147 m_bar->insertItem( tr("Scripts"), m_scripts );
148
129 /* the settings menu */ 149 /* the settings menu */
130 m_bar->insertItem( tr("Settings"), m_settings ); 150 m_bar->insertItem( tr("Settings"), m_settings );
131 151
132 /* and the keyboard */ 152 /* and the keyboard */
133 m_keyBar = new QToolBar(this); 153 m_keyBar = new QToolBar(this);
134 addToolBar( m_keyBar, "Keyboard", QMainWindow::Top, TRUE ); 154 addToolBar( m_keyBar, "Keyboard", QMainWindow::Top, TRUE );
135 m_keyBar->setHorizontalStretchable( TRUE ); 155 m_keyBar->setHorizontalStretchable( TRUE );
136 m_keyBar->hide(); 156 m_keyBar->hide();
137 157
138 m_kb = new FunctionKeyboard(m_keyBar); 158 m_kb = new FunctionKeyboard(m_keyBar);
139 159
140 /* 160 /*
141 * connect to the menu activation 161 * connect to the menu activation
142 */ 162 */
143 connect( m_sessionsPop, SIGNAL(activated( int ) ), 163 connect( m_sessionsPop, SIGNAL(activated( int ) ),
144 this, SLOT(slotProfile( int ) ) ); 164 this, SLOT(slotProfile( int ) ) );
145 165
146 m_consoleWindow = new TabWidget( this, "blah"); 166 m_consoleWindow = new TabWidget( this, "blah");
147 setCentralWidget( m_consoleWindow ); 167 setCentralWidget( m_consoleWindow );
148 168
149} 169}
150 170
151ProfileManager* MainWindow::manager() { 171ProfileManager* MainWindow::manager() {
152 return m_manager; 172 return m_manager;
153} 173}
154TabWidget* MainWindow::tabWidget() { 174TabWidget* MainWindow::tabWidget() {
155 return m_consoleWindow; 175 return m_consoleWindow;
156} 176}
157void MainWindow::populateProfiles() { 177void MainWindow::populateProfiles() {
158 m_sessionsPop->clear(); 178 m_sessionsPop->clear();
159 Profile::ValueList list = manager()->all(); 179 Profile::ValueList list = manager()->all();
160 for (Profile::ValueList::Iterator it = list.begin(); it != list.end(); ++it ) { 180 for (Profile::ValueList::Iterator it = list.begin(); it != list.end(); ++it ) {
161 m_sessionsPop->insertItem( (*it).name() ); 181 m_sessionsPop->insertItem( (*it).name() );
162 } 182 }
163 183
164} 184}
165MainWindow::~MainWindow() { 185MainWindow::~MainWindow() {
166 delete m_factory; 186 delete m_factory;
167 manager()->save(); 187 manager()->save();
168} 188}
169 189
170MetaFactory* MainWindow::factory() { 190MetaFactory* MainWindow::factory() {
171 return m_factory; 191 return m_factory;
172} 192}
173 193
174Session* MainWindow::currentSession() { 194Session* MainWindow::currentSession() {
175 return m_curSession; 195 return m_curSession;
176} 196}
177 197
178QList<Session> MainWindow::sessions() { 198QList<Session> MainWindow::sessions() {
179 return m_sessions; 199 return m_sessions;
180} 200}
181 201
182void MainWindow::slotNew() { 202void MainWindow::slotNew() {
183 qWarning("New Connection"); 203 qWarning("New Connection");
184 ProfileEditorDialog dlg(factory() ); 204 ProfileEditorDialog dlg(factory() );
185 int ret = dlg.exec(); 205 int ret = dlg.exec();
186 206
187 if ( ret == QDialog::Accepted ) { 207 if ( ret == QDialog::Accepted ) {
188 create( dlg.profile() ); 208 create( dlg.profile() );
189 } 209 }
190} 210}
191 211
212void MainWindow::slotRecordScript() {
213 if (currentSession()) {
214 currentSession()->emulationLayer()->startRecording();
215 }
216}
217
218void MainWindow::slotSaveScript() {
219 if (currentSession() && currentSession()->emulationLayer()->isRecording()) {
220 MimeTypes types;
221 QStringList script;
222 script << "text/plain";
223 types.insert("Script", script);
224 QString filename = OFileDialog::getSaveFileName(2, "/", QString::null, types);
225 if (!filename.isEmpty()) {
226 currentSession()->emulationLayer()->script()->saveTo(filename);
227 currentSession()->emulationLayer()->clearScript();
228 }
229 }
230}
231
232void MainWindow::slotRunScript() {
233 if (currentSession()) {
234 MimeTypes types;
235 QStringList script;
236 script << "text/plain";
237 types.insert("Script", script);
238 QString filename = OFileDialog::getOpenFileName(2, "/", QString::null, types);
239 if (!filename.isEmpty()) {
240 Script script(DocLnk(filename).file());
241 currentSession()->emulationLayer()->runScript(&script);
242 }
243 }
244}
245
192void MainWindow::slotConnect() { 246void MainWindow::slotConnect() {
193 if ( currentSession() ) 247 if ( currentSession() )
194 currentSession()->layer()->open(); 248 currentSession()->layer()->open();
195} 249}
196 250
197void MainWindow::slotDisconnect() { 251void MainWindow::slotDisconnect() {
198 if ( currentSession() ) 252 if ( currentSession() )
199 currentSession()->layer()->close(); 253 currentSession()->layer()->close();
200} 254}
201 255
202void MainWindow::slotTerminate() { 256void MainWindow::slotTerminate() {
203 if ( currentSession() ) 257 if ( currentSession() )
204 currentSession()->layer()->close(); 258 currentSession()->layer()->close();
205 259
206 slotClose(); 260 slotClose();
207 /* FIXME move to the next session */ 261 /* FIXME move to the next session */
208} 262}
209 263
210void MainWindow::slotConfigure() { 264void MainWindow::slotConfigure() {
211 qWarning("configure"); 265 qWarning("configure");
212 ConfigDialog conf( manager()->all(), factory() ); 266 ConfigDialog conf( manager()->all(), factory() );
213 conf.showMaximized(); 267 conf.showMaximized();
214 268
215 int ret = conf.exec(); 269 int ret = conf.exec();
216 270
217 if ( QDialog::Accepted == ret ) { 271 if ( QDialog::Accepted == ret ) {
218 qWarning("conf %d", conf.list().count() ); 272 qWarning("conf %d", conf.list().count() );
219 manager()->setProfiles( conf.list() ); 273 manager()->setProfiles( conf.list() );
220 populateProfiles(); 274 populateProfiles();
221 } 275 }
222} 276}
223/* 277/*
224 * we will remove 278 * we will remove
225 * this window from the tabwidget 279 * this window from the tabwidget
226 * remove it from the list 280 * remove it from the list
227 * delete it 281 * delete it
228 * and set the currentSession() 282 * and set the currentSession()
229 */ 283 */
230void MainWindow::slotClose() { 284void MainWindow::slotClose() {
231 qWarning("close"); 285 qWarning("close");
232 if (!currentSession() ) 286 if (!currentSession() )
233 return; 287 return;
234 288
235 tabWidget()->remove( currentSession() ); 289 tabWidget()->remove( currentSession() );
236 /*it's autodelete */ 290 /*it's autodelete */
237 m_sessions.remove( m_curSession ); 291 m_sessions.remove( m_curSession );
238 m_curSession = m_sessions.first(); 292 m_curSession = m_sessions.first();
239 tabWidget()->setCurrent( m_curSession ); 293 tabWidget()->setCurrent( m_curSession );
diff --git a/noncore/apps/opie-console/mainwindow.h b/noncore/apps/opie-console/mainwindow.h
index 73bb285..94144a4 100644
--- a/noncore/apps/opie-console/mainwindow.h
+++ b/noncore/apps/opie-console/mainwindow.h
@@ -14,89 +14,95 @@
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 MainWindow : public QMainWindow { 23class MainWindow : public QMainWindow {
24 Q_OBJECT 24 Q_OBJECT
25public: 25public:
26 MainWindow(); 26 MainWindow();
27 ~MainWindow(); 27 ~MainWindow();
28 28
29 /** 29 /**
30 * our factory to generate IOLayer and so on 30 * our factory to generate IOLayer and so on
31 * 31 *
32 */ 32 */
33 MetaFactory* factory(); 33 MetaFactory* factory();
34 34
35 /** 35 /**
36 * A session contains a QWidget*, 36 * A session contains a QWidget*,
37 * an IOLayer* and some infos for us 37 * an IOLayer* and some infos for us
38 */ 38 */
39 Session* currentSession(); 39 Session* currentSession();
40 40
41 /** 41 /**
42 * the session list 42 * the session list
43 */ 43 */
44 QList<Session> sessions(); 44 QList<Session> sessions();
45 45
46 /** 46 /**
47 * 47 *
48 */ 48 */
49 ProfileManager* manager(); 49 ProfileManager* manager();
50 TabWidget* tabWidget(); 50 TabWidget* tabWidget();
51 51
52private slots: 52private slots:
53 void slotNew(); 53 void slotNew();
54 void slotConnect(); 54 void slotConnect();
55 void slotDisconnect(); 55 void slotDisconnect();
56 void slotTerminate(); 56 void slotTerminate();
57 void slotConfigure(); 57 void slotConfigure();
58 void slotClose(); 58 void slotClose();
59 void slotProfile(int); 59 void slotProfile(int);
60 void slotTransfer(); 60 void slotTransfer();
61 void slotOpenKeb(bool); 61 void slotOpenKeb(bool);
62 62 void slotRecordScript();
63 void slotSaveScript();
64 void slotRunScript();
63private: 65private:
64 void initUI(); 66 void initUI();
65 void populateProfiles(); 67 void populateProfiles();
66 void create( const Profile& ); 68 void create( const Profile& );
67 /** 69 /**
68 * the current session 70 * the current session
69 */ 71 */
70 Session* m_curSession; 72 Session* m_curSession;
71 73
72 /** 74 /**
73 * the session list 75 * the session list
74 */ 76 */
75 QList<Session> m_sessions; 77 QList<Session> m_sessions;
76 78
77 /** 79 /**
78 * the metafactory 80 * the metafactory
79 */ 81 */
80 MetaFactory* m_factory; 82 MetaFactory* m_factory;
81 ProfileManager* m_manager; 83 ProfileManager* m_manager;
82 84
83 TabWidget* m_consoleWindow; 85 TabWidget* m_consoleWindow;
84 QToolBar* m_tool; 86 QToolBar* m_tool;
85 QToolBar* m_icons; 87 QToolBar* m_icons;
86 QToolBar* m_keyBar; 88 QToolBar* m_keyBar;
87 QMenuBar* m_bar; 89 QMenuBar* m_bar;
88 QPopupMenu* m_console; 90 QPopupMenu* m_console;
89 QPopupMenu* m_settings; 91 QPopupMenu* m_settings;
90 QPopupMenu* m_sessionsPop; 92 QPopupMenu* m_sessionsPop;
93 QPopupMenu* m_scripts;
91 QAction* m_connect; 94 QAction* m_connect;
92 QAction* m_disconnect; 95 QAction* m_disconnect;
93 QAction* m_terminate; 96 QAction* m_terminate;
94 QAction* m_transfer; 97 QAction* m_transfer;
95 QAction* m_setProfiles; 98 QAction* m_setProfiles;
96 QAction* m_openKeys; 99 QAction* m_openKeys;
100 QAction* m_recordScript;
101 QAction* m_saveScript;
102 QAction* m_runScript;
97 103
98 FunctionKeyboard *m_kb; 104 FunctionKeyboard *m_kb;
99}; 105};
100 106
101 107
102#endif 108#endif
diff --git a/noncore/apps/opie-console/opie-console.pro b/noncore/apps/opie-console/opie-console.pro
index b07f10a..8e39a48 100644
--- a/noncore/apps/opie-console/opie-console.pro
+++ b/noncore/apps/opie-console/opie-console.pro
@@ -1,68 +1,68 @@
1TEMPLATE = app 1TEMPLATE = app
2#CONFIG = qt warn_on release 2#CONFIG = qt warn_on release
3 CONFIG = qt debug 3 CONFIG = qt debug
4DESTDIR = $(OPIEDIR)/bin 4DESTDIR = $(OPIEDIR)/bin
5HEADERS = io_layer.h io_serial.h io_irda.h io_bt.h\ 5HEADERS = io_layer.h io_serial.h io_irda.h io_bt.h\
6 file_layer.h filetransfer.h \ 6 file_layer.h filetransfer.h \
7 metafactory.h \ 7 metafactory.h \
8 session.h \ 8 session.h \
9 mainwindow.h \ 9 mainwindow.h \
10 profile.h \ 10 profile.h \
11 profileconfig.h \ 11 profileconfig.h \
12 profilemanager.h \ 12 profilemanager.h \
13 configwidget.h \ 13 configwidget.h \
14 tabwidget.h \ 14 tabwidget.h \
15 configdialog.h \ 15 configdialog.h \
16 emulation_layer.h \ 16 emulation_layer.h \
17 vt102emulation.h \ 17 vt102emulation.h \
18 common.h \ 18 common.h \
19 history.h \ 19 history.h \
20 screen.h \ 20 screen.h \
21 keytrans.h \ 21 keytrans.h \
22 widget_layer.h \ 22 widget_layer.h \
23 transferdialog.h \ 23 transferdialog.h \
24 profiledialogwidget.h \ 24 profiledialogwidget.h \
25 profileeditordialog.h \ 25 profileeditordialog.h \
26 default.h \ 26 default.h \
27 terminalwidget.h \ 27 terminalwidget.h \
28 iolayerbase.h \ 28 iolayerbase.h \
29 serialconfigwidget.h irdaconfigwidget.h \ 29 serialconfigwidget.h irdaconfigwidget.h \
30 btconfigwidget.h modemconfigwidget.h \ 30 btconfigwidget.h modemconfigwidget.h \
31 atconfigdialog.h dialdialog.h \ 31 atconfigdialog.h dialdialog.h \
32 emulation_widget.h procctl.h \ 32 emulation_widget.h procctl.h \
33 function_keyboard.h 33 function_keyboard.h script.h
34 34
35SOURCES = io_layer.cpp io_serial.cpp io_irda.cpp io_bt.cpp \ 35SOURCES = io_layer.cpp io_serial.cpp io_irda.cpp io_bt.cpp \
36 file_layer.cpp filetransfer.cpp \ 36 file_layer.cpp filetransfer.cpp \
37 main.cpp \ 37 main.cpp \
38 metafactory.cpp \ 38 metafactory.cpp \
39 session.cpp \ 39 session.cpp \
40 mainwindow.cpp \ 40 mainwindow.cpp \
41 profile.cpp \ 41 profile.cpp \
42 profileconfig.cpp \ 42 profileconfig.cpp \
43 profilemanager.cpp \ 43 profilemanager.cpp \
44 tabwidget.cpp \ 44 tabwidget.cpp \
45 configdialog.cpp \ 45 configdialog.cpp \
46 emulation_layer.cpp \ 46 emulation_layer.cpp \
47 vt102emulation.cpp \ 47 vt102emulation.cpp \
48 history.cpp \ 48 history.cpp \
49 screen.cpp \ 49 screen.cpp \
50 keytrans.cpp \ 50 keytrans.cpp \
51 widget_layer.cpp \ 51 widget_layer.cpp \
52 transferdialog.cpp \ 52 transferdialog.cpp \
53 profiledialogwidget.cpp \ 53 profiledialogwidget.cpp \
54 profileeditordialog.cpp \ 54 profileeditordialog.cpp \
55 terminalwidget.cpp \ 55 terminalwidget.cpp \
56 iolayerbase.cpp \ 56 iolayerbase.cpp \
57 serialconfigwidget.cpp irdaconfigwidget.cpp \ 57 serialconfigwidget.cpp irdaconfigwidget.cpp \
58 btconfigwidget.cpp modemconfigwidget.cpp \ 58 btconfigwidget.cpp modemconfigwidget.cpp \
59 atconfigdialog.cpp dialdialog.cpp \ 59 atconfigdialog.cpp dialdialog.cpp \
60 emulation_widget.cpp default.cpp procctl.cpp \ 60 emulation_widget.cpp default.cpp procctl.cpp \
61 function_keyboard.cpp 61 function_keyboard.cpp script.cpp
62 62
63INTERFACES = configurebase.ui editbase.ui 63INTERFACES = configurebase.ui editbase.ui
64INCLUDEPATH += $(OPIEDIR)/include 64INCLUDEPATH += $(OPIEDIR)/include
65DEPENDPATH += $(OPIEDIR)/include 65DEPENDPATH += $(OPIEDIR)/include
66LIBS += -lqpe -lopie 66LIBS += -lqpe -lopie
67TARGET = opie-console 67TARGET = opie-console
68 68
diff --git a/noncore/apps/opie-console/script.cpp b/noncore/apps/opie-console/script.cpp
new file mode 100644
index 0000000..a09fab6
--- a/dev/null
+++ b/noncore/apps/opie-console/script.cpp
@@ -0,0 +1,30 @@
1#include <qfile.h>
2#include <qtextstream.h>
3#include "script.h"
4
5Script::Script() {
6}
7
8Script::Script(const QString fileName) {
9 QFile file(fileName);
10 QTextStream stream(&file);
11 while (!stream.atEnd()) {
12 appendString(stream.readLine());
13 }
14}
15
16void Script::saveTo(const QString fileName) const {
17 QFile file(fileName);
18 file.open(IO_WriteOnly);
19 file.writeBlock(m_script.ascii(), m_script.length());
20 file.close();
21}
22
23
24void Script::appendString(const QString string) {
25 m_script += string;
26}
27
28QString Script::script() const {
29 return m_script;
30}
diff --git a/noncore/apps/opie-console/script.h b/noncore/apps/opie-console/script.h
new file mode 100644
index 0000000..dc2351b
--- a/dev/null
+++ b/noncore/apps/opie-console/script.h
@@ -0,0 +1,30 @@
1#ifndef CONSOLE_SCRIPT_H
2#define CONSOLE_SCRIPT_H
3
4#include <qstring.h>
5
6/* Very simple scripting - this class stores keys received
7 * by emulation_layer */
8
9class Script {
10public:
11 /* Construct an empty script */
12 Script();
13
14 /* Load a script from a text file */
15 Script(const QString fileName);
16
17 /* Append a line to the script */
18 void appendString(const QString string);
19
20 /* Save this script to a file */
21 void saveTo(const QString fileName) const;
22
23 /* Return the script's content */
24 QString script() const;
25protected:
26 QString m_script;
27};
28
29
30#endif /* CONSOLE_SCRIPT_H */