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 @@ -106,8 +106,9 @@ 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 ) ), this,SLOT( onImageSizeChange( int, int ) ) ); @@ -131,8 +132,10 @@ EmulationLayer::EmulationLayer( WidgetLayer* gui ) EmulationLayer::~EmulationLayer() { delete screen[0]; delete screen[1]; + if (isRecording()) + clearScript(); bulk_timer.stop(); } /*! change between primary and alternate screen @@ -227,8 +230,12 @@ 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 ); } } @@ -253,8 +260,37 @@ 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) { if (!connected) return; 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 @@ -31,8 +31,9 @@ #include <qtimer.h> #include <stdio.h> #include <qtextcodec.h> #include "keytrans.h" +#include "script.h" class EmulationLayer : public QObject { Q_OBJECT @@ -103,8 +104,24 @@ 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; Screen* scr; // referes to one `screen' @@ -138,9 +155,9 @@ private: QTimer bulk_timer; int bulk_nlcnt; // bulk newline counter char* SelectedText; int bulk_incnt; // bulk counter - + Script *m_script; }; #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 @@ -4,9 +4,9 @@ #include <qlabel.h> #include <qpopupmenu.h> #include <qtoolbar.h> #include <qpe/resource.h> - +#include <opie/ofiledialog.h> #include "profileeditordialog.h" #include "configdialog.h" #include "default.h" @@ -16,8 +16,9 @@ #include "mainwindow.h" #include "tabwidget.h" #include "transferdialog.h" #include "function_keyboard.h" +#include "script.h" MainWindow::MainWindow() { m_factory = new MetaFactory(); Default def(m_factory); @@ -37,8 +38,9 @@ void MainWindow::initUI() { m_tool->setHorizontalStretchable( TRUE ); 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 ); /* add a toolbar for icons */ @@ -105,8 +107,23 @@ void MainWindow::initUI() { connect( m_setProfiles, SIGNAL(activated() ), 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..."), Resource::loadPixmap( "down" ), @@ -125,8 +142,11 @@ 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 ); /* and the keyboard */ @@ -188,8 +208,42 @@ void MainWindow::slotNew() { create( dlg.profile() ); } } +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 @@ -58,9 +58,11 @@ private slots: void slotClose(); void slotProfile(int); void slotTransfer(); void slotOpenKeb(bool); - + void slotRecordScript(); + void slotSaveScript(); + void slotRunScript(); private: void initUI(); void populateProfiles(); void create( const Profile& ); @@ -87,14 +89,18 @@ private: QMenuBar* m_bar; 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 @@ -29,9 +29,9 @@ HEADERS = io_layer.h io_serial.h io_irda.h io_bt.h\ serialconfigwidget.h irdaconfigwidget.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 \ main.cpp \ @@ -57,9 +57,9 @@ SOURCES = io_layer.cpp io_serial.cpp io_irda.cpp io_bt.cpp \ serialconfigwidget.cpp irdaconfigwidget.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 DEPENDPATH += $(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 <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 */ |