From 68c37a3412ef4609ba0209318ef2b06f7dd1aaf1 Mon Sep 17 00:00:00 2001 From: wazlaf Date: Sun, 13 Oct 2002 13:49:11 +0000 Subject: 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 --- (limited to 'noncore') 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 ) bulk_nlcnt = 0; // reset bulk newline counter bulk_incnt = 0; // reset bulk counter connected = FALSE; + m_script = 0; QObject::connect(&bulk_timer, SIGNAL( timeout() ), this, SLOT( showBulk() ) ); QObject::connect(gui,SIGNAL( imageSizeChanged( int, int ) ), @@ -132,6 +133,8 @@ EmulationLayer::~EmulationLayer() { delete screen[0]; delete screen[1]; + if (isRecording()) + clearScript(); bulk_timer.stop(); } @@ -228,6 +231,10 @@ void EmulationLayer::onKeyPress( QKeyEvent* ev ) QByteArray c = QByteArray( 1 ); 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 ); } } @@ -254,6 +261,35 @@ void EmulationLayer::onRcvBlock(const QByteArray &s ) bulkEnd(); } +// 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 --------------------------------------------------------------- -- 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 @@ #include #include #include "keytrans.h" +#include "script.h" class EmulationLayer : public QObject { Q_OBJECT @@ -104,6 +105,22 @@ public: void setKeytrans(int no); 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: WidgetLayer* gui; @@ -139,7 +156,7 @@ private: int bulk_nlcnt; // bulk newline counter 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 @@ -5,7 +5,7 @@ #include #include #include - +#include #include "profileeditordialog.h" #include "configdialog.h" @@ -17,6 +17,7 @@ #include "tabwidget.h" #include "transferdialog.h" #include "function_keyboard.h" +#include "script.h" MainWindow::MainWindow() { m_factory = new MetaFactory(); @@ -38,6 +39,7 @@ 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 ); @@ -106,6 +108,21 @@ void MainWindow::initUI() { this, SLOT(slotConfigure() ) ); /* + * 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 */ m_openKeys = new QAction (tr("Open Keyboard..."), @@ -126,6 +143,9 @@ void MainWindow::initUI() { /* insert the connection menu */ 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 ); @@ -189,6 +209,40 @@ 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() ) 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: void slotProfile(int); void slotTransfer(); void slotOpenKeb(bool); - + void slotRecordScript(); + void slotSaveScript(); + void slotRunScript(); private: void initUI(); void populateProfiles(); @@ -88,12 +90,16 @@ private: QPopupMenu* m_console; QPopupMenu* m_settings; QPopupMenu* m_sessionsPop; + QPopupMenu* m_scripts; QAction* m_connect; QAction* m_disconnect; QAction* m_terminate; QAction* m_transfer; 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 @@ -30,7 +30,7 @@ HEADERS = io_layer.h io_serial.h io_irda.h io_bt.h\ btconfigwidget.h modemconfigwidget.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 \ file_layer.cpp filetransfer.cpp \ @@ -58,7 +58,7 @@ SOURCES = io_layer.cpp io_serial.cpp io_irda.cpp io_bt.cpp \ btconfigwidget.cpp modemconfigwidget.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 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 @@ +#include +#include +#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 + +/* 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 */ -- cgit v0.9.0.2