diff options
| author | Glenn Smith <glenn@vector35.com> | 2019-07-23 23:48:05 -0400 |
|---|---|---|
| committer | Glenn Smith <glenn@vector35.com> | 2019-07-29 16:41:06 -0400 |
| commit | 53c6d163da2c10fa3643e8e105fee101b31c0396 (patch) | |
| tree | 382a8a1ecda5e4f5fbd3c09acd1a0322e9f60f0e /ui/scriptingconsole.h | |
| parent | 3ab5d0ceebd853147644d6cf1100740ff929e3d2 (diff) | |
Input completion through python
Diffstat (limited to 'ui/scriptingconsole.h')
| -rw-r--r-- | ui/scriptingconsole.h | 53 |
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; |
