diff options
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; |
