summaryrefslogtreecommitdiff
path: root/ui/scriptingconsole.h
diff options
context:
space:
mode:
Diffstat (limited to 'ui/scriptingconsole.h')
-rw-r--r--ui/scriptingconsole.h53
1 files changed, 53 insertions, 0 deletions
diff --git a/ui/scriptingconsole.h b/ui/scriptingconsole.h
index 482516c3..6c438f16 100644
--- a/ui/scriptingconsole.h
+++ b/ui/scriptingconsole.h
@@ -6,10 +6,14 @@
#include <QtWidgets/QPushButton>
#include <QtWidgets/QTextEdit>
#include <QtWidgets/QWidget>
+#include <QtWidgets/QDialog>
+#include <QtWidgets/QListView>
+#include <QtCore/QAbstractListModel>
#include <mutex>
#include <string>
#include <utility>
#include <vector>
+#include <functional>
#include "binaryninjaapi.h"
#include "action.h"
#include "dockhandler.h"
@@ -20,18 +24,67 @@
class ScriptingConsole;
+class BINARYNINJAUIAPI ScriptingCompletionModel: public QAbstractListModel
+{
+ Q_OBJECT
+ std::vector<std::string> m_completions;
+
+public:
+ ScriptingCompletionModel(QWidget* parent);
+
+ virtual QModelIndex index(int row, int col, const QModelIndex& parent = QModelIndex()) const override;
+ virtual QModelIndex parent(const QModelIndex& i) const override;
+ virtual bool hasChildren(const QModelIndex& parent) const override;
+ virtual int rowCount(const QModelIndex& parent = QModelIndex()) const override;
+ virtual int columnCount(const QModelIndex& parent) const override;
+ virtual QVariant data(const QModelIndex& i, int role) const override;
+ void setModelData(const std::vector<std::string>& completions);
+};
+
+class BINARYNINJAUIAPI ScriptingCompletionPopup: public QDialog
+{
+ Q_OBJECT
+
+ QListView* m_list;
+ ScriptingCompletionModel* m_model;
+
+public:
+ ScriptingCompletionPopup(QWidget* parent);
+ void showWithData(QPoint pt, int cursorSize, const std::vector<std::string>& completions);
+ bool handleKeyEvent(QKeyEvent* event);
+
+private Q_SLOTS:
+ void clickRow(const QModelIndex& index);
+
+Q_SIGNALS:
+ void complete(QString text);
+};
+
class BINARYNINJAUIAPI ScriptingConsoleEdit: public QTextEdit
{
Q_OBJECT
+public:
+ typedef std::function<std::vector<std::string>(const std::string&)> CompletionCallback;
+private:
ScriptingConsole* m_console;
int m_charHeight;
bool m_continuation;
+ CompletionCallback m_completionCallback;
+ ScriptingCompletionPopup* m_popup;
+
+ uint64_t m_completionRegionStart;
+ uint64_t m_completionRegionInitialStop;
+ uint64_t m_completionRegionStop;
public:
ScriptingConsoleEdit(ScriptingConsole* parent);
void setCharHeight(int height);
void setContinutation(bool cont);
+ void setCompletionCallback(CompletionCallback callback) { m_completionCallback = callback; }
+
+private Q_SLOTS:
+ void complete(QString text);
protected:
virtual void keyPressEvent(QKeyEvent* event) override;