From f3a4607d6a722a862af0eb9747a15dcdf624b6fb Mon Sep 17 00:00:00 2001 From: Aqua-sama Date: Sun, 3 Nov 2019 00:18:10 +0200 Subject: Drop boost dependency - wrote not-invented-here config file parser and conf class - spent obscene amount of time plugging in said conf class --- src/mainwindow/widgets/completer.cpp | 81 ++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 src/mainwindow/widgets/completer.cpp (limited to 'src/mainwindow/widgets/completer.cpp') diff --git a/src/mainwindow/widgets/completer.cpp b/src/mainwindow/widgets/completer.cpp new file mode 100644 index 0000000..578f745 --- /dev/null +++ b/src/mainwindow/widgets/completer.cpp @@ -0,0 +1,81 @@ +/* + * This file is part of smolbote. It's copyrighted by the contributors recorded + * in the version control history of the file, available from its original + * location: https://neueland.iserlohn-fortress.net/gitea/aqua/smolbote + * + * SPDX-License-Identifier: GPL-3.0 + */ + +#include "completer.h" +#include + +Completer::Completer(QWidget *parent) + : QListView(parent) +{ + setObjectName("Completer"); + setWindowFlags(Qt::ToolTip); + setEditTriggers(QAbstractItemView::NoEditTriggers); + + connect(this, &Completer::activated, [=](const QModelIndex &index) { + hide(); + emit completionActivated(index.data().toString()); + }); +} + +bool Completer::updateItems(const QStringList &list) +{ + if(list.isEmpty()) + return false; + + auto *model = new QStringListModel(list, this); + setModel(model); + + delete completionModel; + completionModel = model; + + return true; +} + +bool Completer::keyPressed(QKeyEvent *event) +{ + if(isHidden()) + return false; + + Q_CHECK_PTR(completionModel); + + int count = completionModel->rowCount(); + const QModelIndex currentIndex = this->currentIndex(); + + switch(event->key()) { + case Qt::Key_Down: + if(currentIndex.row() + 1 >= count) { + setCurrentIndex(completionModel->index(0, 0)); + } else { + setCurrentIndex(completionModel->index(currentIndex.row() + 1, 0)); + } + break; + + case Qt::Key_Up: + if(currentIndex.row() == 0) { + setCurrentIndex(completionModel->index(count - 1, 0)); + } else { + setCurrentIndex(completionModel->index(currentIndex.row() - 1, 0)); + } + break; + + case Qt::Key_Escape: + hide(); + break; + + case Qt::Key_Enter: + case Qt::Key_Return: + hide(); + emit completionActivated(currentIndex.data().toString()); + break; + + default: + return false; + } + + return true; +} -- cgit v1.2.1