author | wazlaf <wazlaf> | 2002-10-13 13:49:11 (UTC) |
---|---|---|
committer | wazlaf <wazlaf> | 2002-10-13 13:49:11 (UTC) |
commit | 68c37a3412ef4609ba0209318ef2b06f7dd1aaf1 (patch) (unidiff) | |
tree | f81ee5460dd49c4fcb8a61bf50911c5036742bed | |
parent | 0e6d241e26211a8ffff07ba8e23f4a3cec9065be (diff) | |
download | opie-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
-rw-r--r-- | noncore/apps/opie-console/emulation_layer.cpp | 36 | ||||
-rw-r--r-- | noncore/apps/opie-console/emulation_layer.h | 19 | ||||
-rw-r--r-- | noncore/apps/opie-console/mainwindow.cpp | 56 | ||||
-rw-r--r-- | noncore/apps/opie-console/mainwindow.h | 8 | ||||
-rw-r--r-- | noncore/apps/opie-console/opie-console.pro | 4 | ||||
-rw-r--r-- | noncore/apps/opie-console/script.cpp | 30 | ||||
-rw-r--r-- | noncore/apps/opie-console/script.h | 30 |
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 | |||
267 | Script *EmulationLayer::script() { | ||
268 | return m_script; | ||
269 | } | ||
270 | |||
271 | bool EmulationLayer::isRecording() { | ||
272 | return (m_script != 0); | ||
273 | } | ||
274 | |||
275 | void EmulationLayer::startRecording() { | ||
276 | if (!isRecording()) | ||
277 | m_script = new Script(); | ||
278 | } | ||
279 | |||
280 | void EmulationLayer::clearScript() { | ||
281 | if (isRecording()) { | ||
282 | |||
283 | } | ||
284 | } | ||
285 | |||
286 | void 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 | ||
259 | void EmulationLayer::onSelectionBegin(const int x, const int y) { | 295 | void 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 | ||
36 | class EmulationLayer : public QObject | 37 | class 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 *); | ||
107 | protected: | 124 | protected: |
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 | ||
21 | MainWindow::MainWindow() { | 22 | MainWindow::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 | ||
212 | void MainWindow::slotRecordScript() { | ||
213 | if (currentSession()) { | ||
214 | currentSession()->emulationLayer()->startRecording(); | ||
215 | } | ||
216 | } | ||
217 | |||
218 | void 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 | |||
232 | void 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 | |||
192 | void MainWindow::slotConnect() { | 246 | void 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(); | ||
63 | private: | 65 | private: |
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 | ||
35 | SOURCES = io_layer.cpp io_serial.cpp io_irda.cpp io_bt.cpp \ | 35 | SOURCES = 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 | ||
63 | INTERFACES = configurebase.ui editbase.ui | 63 | INTERFACES = configurebase.ui editbase.ui |
64 | INCLUDEPATH += $(OPIEDIR)/include | 64 | INCLUDEPATH += $(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 | |||
5 | Script::Script() { | ||
6 | } | ||
7 | |||
8 | Script::Script(const QString fileName) { | ||
9 | QFile file(fileName); | ||
10 | QTextStream stream(&file); | ||
11 | while (!stream.atEnd()) { | ||
12 | appendString(stream.readLine()); | ||
13 | } | ||
14 | } | ||
15 | |||
16 | void 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 | |||
24 | void Script::appendString(const QString string) { | ||
25 | m_script += string; | ||
26 | } | ||
27 | |||
28 | QString 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 | |||
9 | class Script { | ||
10 | public: | ||
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; | ||
25 | protected: | ||
26 | QString m_script; | ||
27 | }; | ||
28 | |||
29 | |||
30 | #endif /* CONSOLE_SCRIPT_H */ | ||