summary refs log tree commit diff
path: root/src/QuickSwitcher.cc
diff options
context:
space:
mode:
authorKonstantinos Sideris <sideris.konstantin@gmail.com>2017-08-15 21:06:27 +0300
committerKonstantinos Sideris <sideris.konstantin@gmail.com>2017-08-15 21:06:27 +0300
commit8d81489e053c28173ca864064774bd07e2758a1d (patch)
treeca166acddaea998f70b22d8dbe3fa27ebb8115ed /src/QuickSwitcher.cc
parentFocus on the text input when switching rooms (diff)
downloadnheko-8d81489e053c28173ca864064774bd07e2758a1d.tar.xz
Ghetto room switcher
Diffstat (limited to 'src/QuickSwitcher.cc')
-rw-r--r--src/QuickSwitcher.cc114
1 files changed, 114 insertions, 0 deletions
diff --git a/src/QuickSwitcher.cc b/src/QuickSwitcher.cc
new file mode 100644

index 00000000..3bdd26ea --- /dev/null +++ b/src/QuickSwitcher.cc
@@ -0,0 +1,114 @@ +/* + * nheko Copyright (C) 2017 Konstantinos Sideris <siderisk@auth.gr> + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#include <QAbstractItemView> +#include <QCompleter> +#include <QDebug> +#include <QStringListModel> +#include <QTimer> + +#include "QuickSwitcher.h" + +RoomSearchInput::RoomSearchInput(QWidget* parent) + : TextField(parent) +{ +} + +bool RoomSearchInput::focusNextPrevChild(bool next) +{ + Q_UNUSED(next); + + return false; +} + +void RoomSearchInput::keyPressEvent(QKeyEvent* event) +{ + if (event->key() == Qt::Key_Tab) { + auto completer = this->completer(); + + if (completer) { + // Enable the current item if its valid. + completer->popup()->setCurrentIndex(completer->currentIndex()); + + if (!completer->setCurrentRow(completer->currentRow() + 1)) + completer->setCurrentRow(0); + } + + event->accept(); + return; + } + + TextField::keyPressEvent(event); +} + +QuickSwitcher::QuickSwitcher(QWidget* parent) + : QFrame(parent) +{ + setMaximumWidth(400); + setStyleSheet("background-color: #f9f9f9"); + + QFont font; + font.setPixelSize(20); + + roomSearch_ = new RoomSearchInput(this); + roomSearch_->setFont(font); + roomSearch_->setPlaceholderText(tr("Find a room...")); + + QStringList wordList; + QCompleter* completer = new QCompleter(wordList, this); + completer->setCaseSensitivity(Qt::CaseInsensitive); + + roomSearch_->setCompleter(completer); + + topLayout_ = new QVBoxLayout(this); + topLayout_->setMargin(20); + topLayout_->setSpacing(0); + topLayout_->addWidget(roomSearch_); + + connect(roomSearch_, &QLineEdit::returnPressed, this, [=]() { + emit closing(); + emit roomSelected(rooms_[this->roomSearch_->text().trimmed()]); + + roomSearch_->clear(); + }); +} + +void QuickSwitcher::setRoomList(const QMap<QString, QString>& rooms) +{ + rooms_ = rooms; + + QStringList search_items = rooms.keys(); + + if (!roomSearch_->completer()) + return; + + roomSearch_->completer()->setModel(new QStringListModel(search_items)); +} + +void QuickSwitcher::showEvent(QShowEvent*) +{ + roomSearch_->setFocus(); +} + +void QuickSwitcher::keyPressEvent(QKeyEvent* event) +{ + if (event->key() == Qt::Key_Escape) { + roomSearch_->clear(); + event->accept(); + emit closing(); + } +}