From 53c6d163da2c10fa3643e8e105fee101b31c0396 Mon Sep 17 00:00:00 2001 From: Glenn Smith Date: Tue, 23 Jul 2019 23:48:05 -0400 Subject: Input completion through python --- ui/scriptingconsole.h | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) (limited to 'ui/scriptingconsole.h') 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 #include #include +#include +#include +#include #include #include #include #include +#include #include "binaryninjaapi.h" #include "action.h" #include "dockhandler.h" @@ -20,18 +24,67 @@ class ScriptingConsole; +class BINARYNINJAUIAPI ScriptingCompletionModel: public QAbstractListModel +{ + Q_OBJECT + std::vector 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& 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& 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(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; -- cgit v1.3.1