summaryrefslogtreecommitdiff
path: root/src/fqterm/fqterm_scriptengine.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/fqterm/fqterm_scriptengine.h')
-rw-r--r--src/fqterm/fqterm_scriptengine.h147
1 files changed, 147 insertions, 0 deletions
diff --git a/src/fqterm/fqterm_scriptengine.h b/src/fqterm/fqterm_scriptengine.h
new file mode 100644
index 0000000..70ca5cd
--- /dev/null
+++ b/src/fqterm/fqterm_scriptengine.h
@@ -0,0 +1,147 @@
+/***************************************************************************
+* fqterm, a terminal emulator for both BBS and *nix. *
+* Copyright (C) 2008 fqterm development group. *
+* *
+* This program is free software; you can redistribute it and/or modify *
+* it under the terms of the GNU General Public License as published by *
+* the Free Software Foundation; either version 2 of the License, or *
+* (at your option) any later version. *
+* *
+* This program is distributed in the hope that it will be useful, *
+* but WITHOUT ANY WARRANTY; without even the implied warranty of *
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+* GNU General Public License for more details. *
+* *
+* You should have received a copy of the GNU General Public License *
+* along with this program; if not, write to the *
+* Free Software Foundation, Inc., *
+* 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. *
+***************************************************************************/
+
+#ifndef FQTERM_SCRIPTENGINE_H
+#define FQTERM_SCRIPTENGINE_H
+
+#include "fqterm.h"
+#include <QObject>
+#include <QString>
+#include <QStringList>
+#include <QScriptEngine>
+#include <QScriptValue>
+#include <QList>
+#include <map>
+class QString;
+class QTimer;
+namespace FQTerm {
+class FQTermWindow;
+class FQTermSession;
+class FQTermScreen;
+class FQTermBuffer;
+class ArticleCopyThread;
+class FQTermScriptEngine : public QObject {
+ Q_OBJECT;
+public:
+ FQTermScriptEngine(FQTermWindow* parent);
+ ~FQTermScriptEngine();
+ QScriptEngine* getQtEngine() {return engine_;}
+ void runScript(const QString& filename);
+ void stopScript();
+ void finalizeScript();
+
+public:
+ bool scriptCallback(const QString& func, const QScriptValueList& args);
+public slots: //script apis
+ //ui functions.
+ void msgBox(const QString& msg);
+
+ //bbs ui functions
+ int caretX();
+ int caretY();
+ QString getText(int row);
+ QString getTextAt(int row, int column, int len);
+ //if we get from a column that contains the second part
+ //of a character with width == 2, we could still get it.
+ QString getFullTextAt(int row, int column, int len);
+ QString getAttrText(int row);
+ QString getAttrTextAt(int row, int column, int len);
+ QString getFullAttrText(int row, int column, int len);
+ void sendString(const QString& str);
+ void sendParsedString(const QString& str);
+ void serverRedraw();
+ void clientRedraw();
+ int columns();
+ int rows();
+ bool isConnected();
+ void disconnect();
+ void reconnect();
+ QString getBBSCodec();
+ QString getAddress();
+ int getPort();
+ int getProtocol();
+ QString getReplyKey();
+ QString getURL();
+ QString getIP();
+ void previewImage(const QString& url);
+ void sleep(int ms);
+ QString copyArticle();
+ void openUrl(const QString & url);
+ QString getSelect(bool color_copy);
+ QList<int> mapToChar(int screenX, int screenY);
+ //next 2 functions are map screen to char for x, y.
+ int charX(int screen_x);
+ int charY(int screen_y);
+ int screenX(int char_x);
+ int screenY(int char_y);
+ //mouse position is given in screen coordinate.
+ int mouseX() {return charX(mouseSX());}
+ int mouseY() {return charY(mouseSY());}
+
+ int mouseSX();
+ int mouseSY();
+
+ void setMenuRect(int row, int col, int len);
+
+ bool importFile(const QString& filename);
+
+ bool isAntiIdle();
+ bool isAutoReply();
+ //auxiliary functions.
+ //should be move to some other class.
+ //qt script provides so poor extensions to js.
+ void writeFile(const QString& filename, const QString& str);
+ void appendFile(const QString& filename, const QString& str);
+ QString readFile(const QString& filename);
+ QStringList readFolder(const QString& path);
+ QString platform();
+ bool makePath(const QString& path);
+ QString newLine();
+
+ //Timer
+ int setInterval(int ms, const QScriptValue& func);
+ void clearInterval(int id);
+ int setTimeout(int ms, const QScriptValue& func);
+ void clearTimeout(int id);
+
+ int getUIEventInterval();
+ void setUIEventInterval(int ms);
+private:
+ int createTimer(int ms, const QScriptValue& func, bool singleShot);
+ void destroyTimer(int id);
+
+private slots:
+ void articleCopied(int state, const QString content);
+private:
+ QScriptEngine* engine_;
+ FQTermWindow* window_;
+ FQTermSession* session_;
+ FQTermScreen* screen_;
+ FQTermBuffer* buffer_;
+ ArticleCopyThread* articleCopyThread_;
+ bool articleCopied_;
+ QString articleText_;
+ std::map<int, QTimer*> timerTable_;
+ int timerIDCount_;
+};
+
+
+}//namespace FQTerm
+#endif //FQTERM_SCRIPTENGINE_H \ No newline at end of file