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
@@ -107,6 +107,7 @@ EmulationLayer::EmulationLayer( WidgetLayer* gui )
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 ) ),
@@ -132,6 +133,8 @@ EmulationLayer::~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
@@ -228,6 +231,10 @@ void EmulationLayer::onKeyPress( QKeyEvent* ev )
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}
@@ -254,6 +261,35 @@ void EmulationLayer::onRcvBlock(const QByteArray &s )
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) {
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
@@ -32,6 +32,7 @@
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
@@ -104,6 +105,22 @@ public:
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;
@@ -139,7 +156,7 @@ private:
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
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
@@ -5,7 +5,7 @@
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"
@@ -17,6 +17,7 @@
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();
@@ -38,6 +39,7 @@ void MainWindow::initUI() {
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
@@ -106,6 +108,21 @@ void MainWindow::initUI() {
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..."),
@@ -126,6 +143,9 @@ void MainWindow::initUI() {
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
@@ -189,6 +209,40 @@ void MainWindow::slotNew() {
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();
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
@@ -59,7 +59,9 @@ private slots:
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();
@@ -88,12 +90,16 @@ private:
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};
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
@@ -30,7 +30,7 @@ HEADERS = io_layer.h io_serial.h io_irda.h io_bt.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 \
@@ -58,7 +58,7 @@ SOURCES = io_layer.cpp io_serial.cpp io_irda.cpp io_bt.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
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 */