summaryrefslogtreecommitdiff
path: root/ui/scriptingconsole.h
diff options
context:
space:
mode:
authorRusty Wagner <rusty@vector35.com>2019-03-19 15:41:08 -0400
committerRusty Wagner <rusty@vector35.com>2019-03-20 13:00:17 -0400
commit411acbaa4a1d217e731d3df0b189445117be3b26 (patch)
tree49b5c5290058ffb98dd23ec9a7c1a49921254d15 /ui/scriptingconsole.h
parentca1bc587c22928bbd7198813064c9615c3c12771 (diff)
Add in progress UI API headers
Diffstat (limited to 'ui/scriptingconsole.h')
-rw-r--r--ui/scriptingconsole.h115
1 files changed, 115 insertions, 0 deletions
diff --git a/ui/scriptingconsole.h b/ui/scriptingconsole.h
new file mode 100644
index 00000000..430e4b21
--- /dev/null
+++ b/ui/scriptingconsole.h
@@ -0,0 +1,115 @@
+#pragma once
+
+#include <QtCore/QTimer>
+#include <QtWidgets/QLabel>
+#include <QtWidgets/QLineEdit>
+#include <QtWidgets/QPushButton>
+#include <QtWidgets/QTextEdit>
+#include <QtWidgets/QWidget>
+#include <mutex>
+#include <string>
+#include <utility>
+#include <vector>
+#include "binaryninjaapi.h"
+#include "action.h"
+#include "dockhandler.h"
+#include "uitypes.h"
+
+#define SCRIPT_OUTPUT_UPDATE_INTERVAL 100
+#define SCRIPT_HISTORY_LENGTH 100
+
+class ScriptingConsole;
+
+class BINARYNINJAUIAPI ScriptingConsoleEdit: public QTextEdit
+{
+ Q_OBJECT
+
+ ScriptingConsole* m_console;
+ int m_charHeight;
+ bool m_continuation;
+
+public:
+ ScriptingConsoleEdit(ScriptingConsole* parent);
+ void setCharHeight(int height);
+ void setContinutation(bool cont);
+
+protected:
+ virtual void keyPressEvent(QKeyEvent* event) override;
+};
+
+class BINARYNINJAUIAPI ScriptingConsoleOutput: public QTextEdit
+{
+ Q_OBJECT
+
+ ScriptingConsole* m_console;
+ QAction* m_outputActionClear;
+
+public:
+ ScriptingConsoleOutput(ScriptingConsole* parent);
+
+protected:
+ virtual void contextMenuEvent(QContextMenuEvent *event) override;
+};
+
+class ScriptingConsoleWidget;
+
+class BINARYNINJAUIAPI ScriptingConsole: public QWidget, public DockContextHandler, BinaryNinja::ScriptingOutputListener
+{
+ Q_OBJECT
+
+ struct ScriptOutput
+ {
+ std::string text;
+ bool isError;
+ };
+
+ QString m_providerName;
+ QString m_instanceName;
+ ScriptingInstanceRef m_instance;
+ ScriptingConsoleOutput* m_output;
+ ScriptingConsoleEdit* m_input;
+ QLabel* m_prompt;
+ QPushButton* m_button;
+ QTimer* m_runTimer;
+
+ std::mutex m_mutex;
+ std::vector<ScriptOutput> m_pendingOutput;
+ QTimer* m_updateTimer;
+
+ BNScriptingProviderInputReadyState m_currentState;
+
+ QStringList m_history;
+ QString m_inputOutsideHistory;
+ int m_currentHistoryEntry;
+
+ static int m_stateUpdatedEventType;
+
+private Q_SLOTS:
+ void updateTimerEvent();
+ void cancel();
+ void showCancelButton();
+
+protected:
+ void customEvent(QEvent* event) override;
+ void focusInput() override;
+ void updateFonts() override;
+
+public:
+ ScriptingConsole(QWidget* parent, const QString& providerName, const QString& instanceName, ScriptingInstanceRef instance);
+ virtual ~ScriptingConsole();
+
+ QString getProviderName() const { return m_providerName; }
+ QString getInstanceName() const { return m_instanceName; }
+ ScriptingInstanceRef getInstance() { return m_instance; }
+
+ void hideConsole();
+
+ void addInput(const std::string& text);
+
+ virtual void NotifyOutput(const std::string& text) override;
+ virtual void NotifyError(const std::string& text) override;
+ virtual void NotifyInputReadyStateChanged(BNScriptingProviderInputReadyState state) override;
+
+ void moveUpInHistory();
+ void moveDownInHistory();
+};