aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/CommandParser.hpp1
-rw-r--r--include/InputMediator.hpp3
-rw-r--r--include/completion/CommandsModel.hpp6
-rw-r--r--include/completion/Completer.hpp31
-rw-r--r--include/completion/CompleterDelegate.hpp7
-rw-r--r--include/completion/FuzzySearchProxyModel.hpp15
-rw-r--r--include/completion/TabsAdapter.hpp19
-rw-r--r--include/completion/TabsModel.hpp25
-rw-r--r--include/widgets/InputLine.hpp5
9 files changed, 105 insertions, 7 deletions
diff --git a/include/CommandParser.hpp b/include/CommandParser.hpp
index dea04c5..9197df5 100644
--- a/include/CommandParser.hpp
+++ b/include/CommandParser.hpp
@@ -10,6 +10,7 @@ enum CommandType {
TabOpen,
TabNext,
TabPrev,
+ TabSelect,
};
struct Cmd {
diff --git a/include/InputMediator.hpp b/include/InputMediator.hpp
index 660d39f..98ae6d2 100644
--- a/include/InputMediator.hpp
+++ b/include/InputMediator.hpp
@@ -24,6 +24,7 @@ public:
void showURLInput(QString url = "", OpenType openType = OpenType::OpenUrl);
void showCommandInput(QString command = "");
+ void showBufferInput(QString command = "");
void hideInputLine();
DELEGATE(webViewStack, openUrl, openUrl)
@@ -58,3 +59,5 @@ private:
};
class CommandEval : public EvaluationType {};
+
+class BufferEval : public EvaluationType {};
diff --git a/include/completion/CommandsModel.hpp b/include/completion/CommandsModel.hpp
index 28836fe..4f64654 100644
--- a/include/completion/CommandsModel.hpp
+++ b/include/completion/CommandsModel.hpp
@@ -9,11 +9,13 @@ struct Command {
QString description;
};
+// TODO: Combine commands model completion and commands evaluation
const QList<Command> commands = {
- {.name = "open", .description = "Open a url in the current tab"},
+ {.name = "open", .description = "Update current URL"},
+ {.name = "tabs", .description = "Select a tab"},
{.name = "tabopen", .description = "Open a url in a new tab"},
{.name = "tabnext", .description = "Go to next tab"},
- {.name = "tabbprev", .description = "Go to previous tab"},
+ {.name = "tabprev", .description = "Go to previous tab"},
};
class CommandsModel : public QAbstractListModel {
diff --git a/include/completion/Completer.hpp b/include/completion/Completer.hpp
index b67de61..9ad03d4 100644
--- a/include/completion/Completer.hpp
+++ b/include/completion/Completer.hpp
@@ -1,14 +1,39 @@
#pragma once
#include <QCompleter>
+#include <QSortFilterProxyModel>
#include <QWidget>
#include <QtCore>
+#include <QtWidgets/qtreeview.h>
+#include <cstdint>
-class Completer : public QCompleter {
+#include "completion/CompleterDelegate.hpp"
+#include "completion/FuzzySearchProxyModel.hpp"
+#include "utils.hpp"
+
+class Completer : public QWidget {
Q_OBJECT
public:
- Completer(QObject *parent = nullptr);
+ Completer();
+ void setSourceModel(QAbstractItemModel *model);
+
+ DELEGATE((&proxyModel), sourceModel, sourceModel)
+
+signals:
+ void accepted(QString text);
+
+public slots:
+ void onTextChange(QString text);
+ bool onKeyPressEvent(QKeyEvent *event);
+
+protected:
+ void keyPressEvent(QKeyEvent *event) override { onKeyPressEvent(event); }
+ void setHighlightedRow(uint32_t);
+ void acceptHighlighted();
- // bool eventFilter(QObject *watched, QEvent *event) override;
+private:
+ QTreeView *view;
+ FuzzySearchProxyModel proxyModel;
+ CompleterDelegate *viewDelegate;
};
diff --git a/include/completion/CompleterDelegate.hpp b/include/completion/CompleterDelegate.hpp
index fc7a321..8de22de 100644
--- a/include/completion/CompleterDelegate.hpp
+++ b/include/completion/CompleterDelegate.hpp
@@ -2,7 +2,9 @@
#include <QStyledItemDelegate>
#include <QWidget>
+#include <QtCore/qabstractitemmodel.h>
#include <QtCore>
+#include <cstdint>
class CompleterDelegate : public QStyledItemDelegate {
Q_OBJECT
@@ -12,4 +14,9 @@ public:
void paint(QPainter *painter, const QStyleOptionViewItem &option,
const QModelIndex &index) const override;
+ void setCurrentRow(uint32_t);
+ uint32_t currentRow();
+
+private:
+ uint32_t row;
};
diff --git a/include/completion/FuzzySearchProxyModel.hpp b/include/completion/FuzzySearchProxyModel.hpp
new file mode 100644
index 0000000..ee4bfc3
--- /dev/null
+++ b/include/completion/FuzzySearchProxyModel.hpp
@@ -0,0 +1,15 @@
+#pragma once
+
+#include <QWidget>
+#include <QtCore>
+
+class FuzzySearchProxyModel : public QSortFilterProxyModel {
+ Q_OBJECT
+
+public:
+ using QSortFilterProxyModel::QSortFilterProxyModel;
+
+protected:
+ bool filterAcceptsRow(int sourceRow,
+ const QModelIndex &sourceParent) const override;
+};
diff --git a/include/completion/TabsAdapter.hpp b/include/completion/TabsAdapter.hpp
new file mode 100644
index 0000000..089eefb
--- /dev/null
+++ b/include/completion/TabsAdapter.hpp
@@ -0,0 +1,19 @@
+#pragma once
+
+#include <QWidget>
+#include <QtCore>
+
+#include "completion/Adapter.hpp"
+
+class TabsAdapter : public Adapter {
+ Q_OBJECT
+
+public:
+ TabsAdapter();
+ ~TabsAdapter();
+ Completer *completer() override;
+ QString prompt() override;
+
+private:
+ Completer *completerInstance;
+};
diff --git a/include/completion/TabsModel.hpp b/include/completion/TabsModel.hpp
new file mode 100644
index 0000000..be1ea78
--- /dev/null
+++ b/include/completion/TabsModel.hpp
@@ -0,0 +1,25 @@
+#pragma once
+
+#include <QAbstractListModel>
+#include <QWidget>
+#include <QtCore>
+
+struct Buffer {
+ QString url;
+ QString title;
+};
+
+class TabsModel : public QAbstractListModel {
+ Q_OBJECT
+
+public:
+ TabsModel(QObject *parent = nullptr);
+ int rowCount(const QModelIndex &parent = QModelIndex()) const override;
+ int columnCount(const QModelIndex &parent = QModelIndex()) const override;
+ QHash<int, QByteArray> roleNames() const override;
+ QVariant data(const QModelIndex &index,
+ int role = Qt::DisplayRole) const override;
+
+private:
+ QList<Buffer> items;
+};
diff --git a/include/widgets/InputLine.hpp b/include/widgets/InputLine.hpp
index 07b6e92..45aa559 100644
--- a/include/widgets/InputLine.hpp
+++ b/include/widgets/InputLine.hpp
@@ -21,7 +21,9 @@ public:
DELEGATE(input, hasFocus, isInputFocussed)
DELEGATE(input, setText, setInputText)
DELEGATE(input, text, getInputText)
- DELEGATE(adapterInstance, prompt, prompt)
+ DELEGATE(promptPrefix, text, prompt)
+
+ // bool eventFilter(QObject *obj, QEvent *event) override;
signals:
void submitted(QString text);
@@ -32,7 +34,6 @@ protected:
void emitSubmit();
private:
- QBoxLayout *layout;
QLineEdit *input;
QLabel *promptPrefix;
Adapter *adapterInstance = nullptr;