author | wazlaf <wazlaf> | 2002-10-13 13:49:11 (UTC) |
---|---|---|
committer | wazlaf <wazlaf> | 2002-10-13 13:49:11 (UTC) |
commit | 68c37a3412ef4609ba0209318ef2b06f7dd1aaf1 (patch) (side-by-side diff) | |
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 @@ -108,4 +108,5 @@ EmulationLayer::EmulationLayer( WidgetLayer* gui ) bulk_incnt = 0; // reset bulk counter connected = FALSE; + m_script = 0; QObject::connect(&bulk_timer, SIGNAL( timeout() ), this, SLOT( showBulk() ) ); @@ -133,4 +134,6 @@ EmulationLayer::~EmulationLayer() delete screen[0]; delete screen[1]; + if (isRecording()) + clearScript(); bulk_timer.stop(); } @@ -229,4 +232,8 @@ void EmulationLayer::onKeyPress( QKeyEvent* ev ) c.at( 0 ) = ev->ascii(); // ibot: qbytearray is emited not char* + + /* Are we currently recording a script? If so, store the typed character */ + if (isRecording()) + m_script->appendString(ev->text()); emit sndBlock( (QByteArray) c ); } @@ -255,4 +262,33 @@ void EmulationLayer::onRcvBlock(const QByteArray &s ) } +// Scripts ----------------------------------------------------------------- -- + + +Script *EmulationLayer::script() { + return m_script; +} + +bool EmulationLayer::isRecording() { + return (m_script != 0); +} + +void EmulationLayer::startRecording() { + if (!isRecording()) + m_script = new Script(); +} + +void EmulationLayer::clearScript() { + if (isRecording()) { + + } +} + +void EmulationLayer::runScript(const Script *script) { + QByteArray a = QByteArray(); + QString str = script->script(); + a.setRawData(str.ascii(), str.length()); + emit sndBlock(a); +} + // Selection --------------------------------------------------------------- -- 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 @@ -33,4 +33,5 @@ #include <qtextcodec.h> #include "keytrans.h" +#include "script.h" class EmulationLayer : public QObject @@ -105,4 +106,20 @@ public: void setKeytrans(const char * no); + /* Scripts */ + + /* Create a new script and record all typed characters */ + void startRecording(); + + /* Return whether we are currently recording a script */ + bool isRecording(); + + /* Return the current script (or NULL) */ + Script *script(); + + /* Stop recording and remove the current script from memory */ + void clearScript(); + + /* Run a script by forwarding its keys to the EmulationLayer */ + void runScript(const Script *); protected: @@ -140,5 +157,5 @@ private: char* SelectedText; int bulk_incnt; // bulk counter - + Script *m_script; }; 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 @@ -6,5 +6,5 @@ #include <qtoolbar.h> #include <qpe/resource.h> - +#include <opie/ofiledialog.h> #include "profileeditordialog.h" @@ -18,4 +18,5 @@ #include "transferdialog.h" #include "function_keyboard.h" +#include "script.h" MainWindow::MainWindow() { @@ -39,4 +40,5 @@ void MainWindow::initUI() { m_bar = new QMenuBar( m_tool ); m_console = new QPopupMenu( this ); + m_scripts = new QPopupMenu( this ); m_sessionsPop= new QPopupMenu( this ); m_settings = new QPopupMenu( this ); @@ -107,4 +109,19 @@ void MainWindow::initUI() { /* + * script actions + */ + m_recordScript = new QAction(tr("Record Script"), QString::null, 0, this, 0); + m_recordScript->addTo(m_scripts); + connect(m_recordScript, SIGNAL(activated()), this, SLOT(slotRecordScript())); + + m_saveScript = new QAction(tr("Save Script"), QString::null, 0, this, 0); + m_saveScript->addTo(m_scripts); + connect(m_saveScript, SIGNAL(activated()), this, SLOT(slotSaveScript())); + + m_runScript = new QAction(tr("Run Script"), QString::null, 0, this, 0); + m_runScript->addTo(m_scripts); + connect(m_runScript, SIGNAL(activated()), this, SLOT(slotRunScript())); + + /* * action that open/closes the keyboard */ @@ -127,4 +144,7 @@ void MainWindow::initUI() { m_bar->insertItem( tr("Connection"), m_console ); + /* the scripts menu */ + m_bar->insertItem( tr("Scripts"), m_scripts ); + /* the settings menu */ m_bar->insertItem( tr("Settings"), m_settings ); @@ -190,4 +210,38 @@ void MainWindow::slotNew() { } +void MainWindow::slotRecordScript() { + if (currentSession()) { + currentSession()->emulationLayer()->startRecording(); + } +} + +void MainWindow::slotSaveScript() { + if (currentSession() && currentSession()->emulationLayer()->isRecording()) { + MimeTypes types; + QStringList script; + script << "text/plain"; + types.insert("Script", script); + QString filename = OFileDialog::getSaveFileName(2, "/", QString::null, types); + if (!filename.isEmpty()) { + currentSession()->emulationLayer()->script()->saveTo(filename); + currentSession()->emulationLayer()->clearScript(); + } + } +} + +void MainWindow::slotRunScript() { + if (currentSession()) { + MimeTypes types; + QStringList script; + script << "text/plain"; + types.insert("Script", script); + QString filename = OFileDialog::getOpenFileName(2, "/", QString::null, types); + if (!filename.isEmpty()) { + Script script(DocLnk(filename).file()); + currentSession()->emulationLayer()->runScript(&script); + } + } +} + void MainWindow::slotConnect() { if ( currentSession() ) 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 @@ -60,5 +60,7 @@ private slots: void slotTransfer(); void slotOpenKeb(bool); - + void slotRecordScript(); + void slotSaveScript(); + void slotRunScript(); private: void initUI(); @@ -89,4 +91,5 @@ private: QPopupMenu* m_settings; QPopupMenu* m_sessionsPop; + QPopupMenu* m_scripts; QAction* m_connect; QAction* m_disconnect; @@ -95,4 +98,7 @@ private: QAction* m_setProfiles; QAction* m_openKeys; + QAction* m_recordScript; + QAction* m_saveScript; + QAction* m_runScript; FunctionKeyboard *m_kb; 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 @@ -31,5 +31,5 @@ HEADERS = io_layer.h io_serial.h io_irda.h io_bt.h\ atconfigdialog.h dialdialog.h \ emulation_widget.h procctl.h \ - function_keyboard.h + function_keyboard.h script.h SOURCES = io_layer.cpp io_serial.cpp io_irda.cpp io_bt.cpp \ @@ -59,5 +59,5 @@ SOURCES = io_layer.cpp io_serial.cpp io_irda.cpp io_bt.cpp \ atconfigdialog.cpp dialdialog.cpp \ emulation_widget.cpp default.cpp procctl.cpp \ - function_keyboard.cpp + function_keyboard.cpp script.cpp INTERFACES = configurebase.ui editbase.ui 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 @@ +#include <qfile.h> +#include <qtextstream.h> +#include "script.h" + +Script::Script() { +} + +Script::Script(const QString fileName) { + QFile file(fileName); + QTextStream stream(&file); + while (!stream.atEnd()) { + appendString(stream.readLine()); + } +} + +void Script::saveTo(const QString fileName) const { + QFile file(fileName); + file.open(IO_WriteOnly); + file.writeBlock(m_script.ascii(), m_script.length()); + file.close(); +} + + +void Script::appendString(const QString string) { + m_script += string; +} + +QString Script::script() const { + return m_script; +} 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 @@ +#ifndef CONSOLE_SCRIPT_H +#define CONSOLE_SCRIPT_H + +#include <qstring.h> + +/* Very simple scripting - this class stores keys received + * by emulation_layer */ + +class Script { +public: + /* Construct an empty script */ + Script(); + + /* Load a script from a text file */ + Script(const QString fileName); + + /* Append a line to the script */ + void appendString(const QString string); + + /* Save this script to a file */ + void saveTo(const QString fileName) const; + + /* Return the script's content */ + QString script() const; +protected: + QString m_script; +}; + + +#endif /* CONSOLE_SCRIPT_H */ |