]> git.siccegge.de Git - frida/frida.git/blobdiff - src/gui/widgets/ScriptingDock.hxx
Add guile scripting
[frida/frida.git] / src / gui / widgets / ScriptingDock.hxx
diff --git a/src/gui/widgets/ScriptingDock.hxx b/src/gui/widgets/ScriptingDock.hxx
new file mode 100644 (file)
index 0000000..d60158b
--- /dev/null
@@ -0,0 +1,39 @@
+#ifndef INCLUDE__ScriptingDock_hxx
+#define INCLUDE__ScriptingDock_hxx
+#include "gui/qt.hxx"
+#include <libguile.h>
+#include <log4cxx/logger.h>
+
+class ScriptingDock : public QDockWidget {
+    Q_OBJECT
+
+public:
+    ScriptingDock(const QString& title, QWidget * parent = 0)
+        : logger(log4cxx::Logger::getLogger("ScriptingDock")) {
+        QDockWidget(title, parent);
+        QWidget * widget = new QWidget;
+        widget->setLayout(layout = new QGridLayout(this));
+        layout->addWidget(browser = new QTextBrowser, 0, 0, 1, 0);
+        layout->addWidget(line = new QLineEdit, 1, 0);
+        layout->addWidget(button = new QPushButton(tr("Evaluate")), 1, 1);
+        setWidget(widget);
+        connect(button, SIGNAL(released()), this, SLOT(doEvaluate()));
+        connect(line, SIGNAL(returnPressed()), this, SLOT(doEvaluate()));
+        scm_init_guile();
+        guile_output_port = scm_open_output_string();
+        scm_set_current_output_port(guile_output_port);
+    }
+private:
+    log4cxx::LoggerPtr logger;
+    
+    QTextBrowser * browser;
+    QGridLayout * layout;
+    QPushButton * button;
+    QLineEdit * line;
+
+    SCM guile_output_port;
+private slots:
+    void doEvaluate();
+};
+
+#endif