diff options
| author | Rusty Wagner <rusty@vector35.com> | 2019-03-19 15:41:08 -0400 |
|---|---|---|
| committer | Rusty Wagner <rusty@vector35.com> | 2019-03-20 13:00:17 -0400 |
| commit | 411acbaa4a1d217e731d3df0b189445117be3b26 (patch) | |
| tree | 49b5c5290058ffb98dd23ec9a7c1a49921254d15 /ui/scriptingconsole.h | |
| parent | ca1bc587c22928bbd7198813064c9615c3c12771 (diff) | |
Add in progress UI API headers
Diffstat (limited to 'ui/scriptingconsole.h')
| -rw-r--r-- | ui/scriptingconsole.h | 115 |
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(); +}; |
