From 32d419d14f19436c2c8352de06b5c6051e8cc0ab Mon Sep 17 00:00:00 2001 From: Jedi18 Date: Sun, 21 Feb 2021 23:10:21 +0530 Subject: add quick switcher qml file and moved completerFor from inputbar to timeline view class --- resources/qml/TimelineView.qml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'resources/qml/TimelineView.qml') diff --git a/resources/qml/TimelineView.qml b/resources/qml/TimelineView.qml index 7db9d041..f575e133 100644 --- a/resources/qml/TimelineView.qml +++ b/resources/qml/TimelineView.qml @@ -68,6 +68,22 @@ Page { } + Component { + id: quickSwitcherComponent + + QuickSwitcher { + id: quickSwitcher + } + } + + Shortcut { + sequence: "Ctrl+L" + onActivated: { + var quickSwitch = quickSwitcherComponent.createObject(timelineRoot); + quickSwitch.open(); + } + } + Menu { id: messageContextMenu -- cgit 1.5.1 From b1dec6f6acec929495f66ef7d0fcb3cac9ee25e3 Mon Sep 17 00:00:00 2001 From: Jedi18 Date: Tue, 23 Feb 2021 00:18:31 +0530 Subject: enter key now works, fix room highlighting and add overlay --- resources/qml/Completer.qml | 7 +++++++ resources/qml/QuickSwitcher.qml | 9 +++++++++ resources/qml/TimelineView.qml | 1 - src/ChatPage.cpp | 6 ++++++ src/ChatPage.h | 1 + src/timeline/TimelineViewManager.cpp | 6 ++++++ src/timeline/TimelineViewManager.h | 1 + 7 files changed, 30 insertions(+), 1 deletion(-) (limited to 'resources/qml/TimelineView.qml') diff --git a/resources/qml/Completer.qml b/resources/qml/Completer.qml index a4f81e6e..cef19fbf 100644 --- a/resources/qml/Completer.qml +++ b/resources/qml/Completer.qml @@ -52,6 +52,12 @@ Popup { return null; } + function finishCompletion() { + if(popup.completerName == "room") { + popup.completionSelected(listView.itemAtIndex(currentIndex).modelData.roomid) + } + } + onCompleterNameChanged: { if (completerName) { if (completerName == "user") { @@ -85,6 +91,7 @@ Popup { color: model.index == popup.currentIndex ? colors.highlight : colors.base height: chooser.childrenRect.height + 4 implicitWidth: fullWidth ? popup.width : chooser.childrenRect.width + 4 + property variant modelData: model MouseArea { id: mouseArea diff --git a/resources/qml/QuickSwitcher.qml b/resources/qml/QuickSwitcher.qml index b94fc0e2..609c443f 100644 --- a/resources/qml/QuickSwitcher.qml +++ b/resources/qml/QuickSwitcher.qml @@ -11,6 +11,10 @@ Popup { closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutside parent: Overlay.overlay + Overlay.modal: Rectangle { + color: "#aa1E1E1E" + } + TextInput { id: roomTextInput @@ -29,6 +33,9 @@ Popup { } else if (event.key == Qt.Key_Down && completerPopup.opened) { event.accepted = true; completerPopup.down(); + } else if (event.matches(StandardKey.InsertParagraphSeparator)) { + completerPopup.finishCompletion() + event.accepted = true; } } } @@ -57,7 +64,9 @@ Popup { Connections { onCompletionSelected: { + console.log(id) TimelineManager.setHistoryView(id) + TimelineManager.highlightRoom(id) quickSwitcher.close() } target: completerPopup diff --git a/resources/qml/TimelineView.qml b/resources/qml/TimelineView.qml index f575e133..8c84c145 100644 --- a/resources/qml/TimelineView.qml +++ b/resources/qml/TimelineView.qml @@ -72,7 +72,6 @@ Page { id: quickSwitcherComponent QuickSwitcher { - id: quickSwitcher } } diff --git a/src/ChatPage.cpp b/src/ChatPage.cpp index 9c814bd1..b862e129 100644 --- a/src/ChatPage.cpp +++ b/src/ChatPage.cpp @@ -1429,3 +1429,9 @@ ChatPage::handleMatrixUri(const QUrl &uri) { handleMatrixUri(uri.toString(QUrl::ComponentFormattingOption::FullyEncoded).toUtf8()); } + +void +ChatPage::highlightRoom(const QString &room_id) +{ + room_list_->highlightSelectedRoom(room_id); +} \ No newline at end of file diff --git a/src/ChatPage.h b/src/ChatPage.h index 917bd785..47acd807 100644 --- a/src/ChatPage.h +++ b/src/ChatPage.h @@ -116,6 +116,7 @@ public slots: void startChat(QString userid); void leaveRoom(const QString &room_id); void createRoom(const mtx::requests::CreateRoom &req); + void highlightRoom(const QString &room_id); void joinRoom(const QString &room); void joinRoomVia(const std::string &room_id, const std::vector &via); diff --git a/src/timeline/TimelineViewManager.cpp b/src/timeline/TimelineViewManager.cpp index 74d416bb..49072ef4 100644 --- a/src/timeline/TimelineViewManager.cpp +++ b/src/timeline/TimelineViewManager.cpp @@ -333,6 +333,12 @@ TimelineViewManager::setHistoryView(const QString &room_id) } } +void +TimelineViewManager::highlightRoom(const QString &room_id) +{ + ChatPage::instance()->highlightRoom(room_id); +} + QString TimelineViewManager::escapeEmoji(QString str) const { diff --git a/src/timeline/TimelineViewManager.h b/src/timeline/TimelineViewManager.h index d6383806..dfc2e386 100644 --- a/src/timeline/TimelineViewManager.h +++ b/src/timeline/TimelineViewManager.h @@ -100,6 +100,7 @@ public slots: } void setHistoryView(const QString &room_id); + void highlightRoom(const QString &room_id); TimelineModel *getHistoryView(const QString &room_id) { auto room = models.find(room_id); -- cgit 1.5.1 From ee232c5c60740921f7f3a72a97e46b2523882441 Mon Sep 17 00:00:00 2001 From: Jedi18 Date: Tue, 23 Feb 2021 00:46:40 +0530 Subject: fix timeline focus --- resources/qml/TimelineView.qml | 1 + src/timeline/TimelineViewManager.cpp | 6 ++++++ src/timeline/TimelineViewManager.h | 1 + 3 files changed, 8 insertions(+) (limited to 'resources/qml/TimelineView.qml') diff --git a/resources/qml/TimelineView.qml b/resources/qml/TimelineView.qml index 8c84c145..02032393 100644 --- a/resources/qml/TimelineView.qml +++ b/resources/qml/TimelineView.qml @@ -79,6 +79,7 @@ Page { sequence: "Ctrl+L" onActivated: { var quickSwitch = quickSwitcherComponent.createObject(timelineRoot); + TimelineManager.focusTimeline() quickSwitch.open(); } } diff --git a/src/timeline/TimelineViewManager.cpp b/src/timeline/TimelineViewManager.cpp index 49072ef4..7d74496d 100644 --- a/src/timeline/TimelineViewManager.cpp +++ b/src/timeline/TimelineViewManager.cpp @@ -587,4 +587,10 @@ TimelineViewManager::completerFor(QString completerName, QString roomId) return proxy; } return nullptr; +} + +void +TimelineViewManager::focusTimeline() +{ + getWidget()->setFocus(); } \ No newline at end of file diff --git a/src/timeline/TimelineViewManager.h b/src/timeline/TimelineViewManager.h index dfc2e386..f1c360ef 100644 --- a/src/timeline/TimelineViewManager.h +++ b/src/timeline/TimelineViewManager.h @@ -101,6 +101,7 @@ public slots: void setHistoryView(const QString &room_id); void highlightRoom(const QString &room_id); + void focusTimeline(); TimelineModel *getHistoryView(const QString &room_id) { auto room = models.find(room_id); -- cgit 1.5.1 From 68c999e5f46d8107cb14cd947098e45869c44c91 Mon Sep 17 00:00:00 2001 From: Jedi18 Date: Wed, 24 Feb 2021 19:50:36 +0530 Subject: remove old quick switcher --- CMakeLists.txt | 2 - resources/qml/TimelineView.qml | 2 +- src/ChatPage.cpp | 13 ---- src/ChatPage.h | 2 - src/MainWindow.cpp | 6 -- src/QuickSwitcher.cpp | 141 ----------------------------------------- src/QuickSwitcher.h | 77 ---------------------- 7 files changed, 1 insertion(+), 242 deletions(-) delete mode 100644 src/QuickSwitcher.cpp delete mode 100644 src/QuickSwitcher.h (limited to 'resources/qml/TimelineView.qml') diff --git a/CMakeLists.txt b/CMakeLists.txt index 05e54380..17b4ab2d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -315,7 +315,6 @@ set(SRC_FILES src/MatrixClient.cpp src/MxcImageProvider.cpp src/Olm.cpp - src/QuickSwitcher.cpp src/RegisterPage.cpp src/RoomInfoListItem.cpp src/RoomList.cpp @@ -527,7 +526,6 @@ qt5_wrap_cpp(MOC_HEADERS src/LoginPage.h src/MainWindow.h src/MxcImageProvider.h - src/QuickSwitcher.h src/RegisterPage.h src/RoomInfoListItem.h src/RoomList.h diff --git a/resources/qml/TimelineView.qml b/resources/qml/TimelineView.qml index 02032393..4415037c 100644 --- a/resources/qml/TimelineView.qml +++ b/resources/qml/TimelineView.qml @@ -76,7 +76,7 @@ Page { } Shortcut { - sequence: "Ctrl+L" + sequence: "Ctrl+K" onActivated: { var quickSwitch = quickSwitcherComponent.createObject(timelineRoot); TimelineManager.focusTimeline() diff --git a/src/ChatPage.cpp b/src/ChatPage.cpp index b862e129..dbd93d1f 100644 --- a/src/ChatPage.cpp +++ b/src/ChatPage.cpp @@ -35,7 +35,6 @@ #include "MainWindow.h" #include "MatrixClient.h" #include "Olm.h" -#include "QuickSwitcher.h" #include "RoomList.h" #include "SideBarActions.h" #include "Splitter.h" @@ -598,18 +597,6 @@ ChatPage::loadStateFromCache() emit trySyncCb(); } -void -ChatPage::showQuickSwitcher() -{ - auto dialog = new QuickSwitcher(this); - - connect(dialog, &QuickSwitcher::roomSelected, room_list_, &RoomList::highlightSelectedRoom); - connect( - dialog, &QuickSwitcher::closing, this, []() { MainWindow::instance()->hideOverlay(); }); - - MainWindow::instance()->showTransparentOverlayModal(dialog); -} - void ChatPage::removeRoom(const QString &room_id) { diff --git a/src/ChatPage.h b/src/ChatPage.h index 47acd807..316ca9ae 100644 --- a/src/ChatPage.h +++ b/src/ChatPage.h @@ -43,7 +43,6 @@ #include "notifications/Manager.h" class OverlayModal; -class QuickSwitcher; class RoomList; class SideBarActions; class Splitter; @@ -84,7 +83,6 @@ public: // Initialize all the components of the UI. void bootstrap(QString userid, QString homeserver, QString token); - void showQuickSwitcher(); QString currentRoom() const { return current_room_; } static ChatPage *instance() { return instance_; } diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index ae532ef3..3555c363 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -147,12 +147,6 @@ MainWindow::MainWindow(QWidget *parent) QShortcut *quitShortcut = new QShortcut(QKeySequence::Quit, this); connect(quitShortcut, &QShortcut::activated, this, QApplication::quit); - QShortcut *quickSwitchShortcut = new QShortcut(QKeySequence("Ctrl+K"), this); - connect(quickSwitchShortcut, &QShortcut::activated, this, [this]() { - if (chat_page_->isVisible() && !hasActiveDialogs()) - chat_page_->showQuickSwitcher(); - }); - trayIcon_->setVisible(userSettings_->tray()); if (hasActiveUser()) { diff --git a/src/QuickSwitcher.cpp b/src/QuickSwitcher.cpp deleted file mode 100644 index 046c774d..00000000 --- a/src/QuickSwitcher.cpp +++ /dev/null @@ -1,141 +0,0 @@ -/* - * nheko Copyright (C) 2017 Konstantinos Sideris - * - * 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 . - */ - -#include -#include -#include -#include -#include -#include - -#include "Cache.h" -#include "QuickSwitcher.h" -#include "popups/SuggestionsPopup.h" - -Q_DECLARE_METATYPE(std::vector) - -RoomSearchInput::RoomSearchInput(QWidget *parent) - : TextField(parent) -{} - -void -RoomSearchInput::keyPressEvent(QKeyEvent *event) -{ - switch (event->key()) { - case Qt::Key_Tab: - case Qt::Key_Down: { - emit selectNextCompletion(); - event->accept(); - break; - } - case Qt::Key_Backtab: - case Qt::Key_Up: { - emit selectPreviousCompletion(); - event->accept(); - break; - } - default: - TextField::keyPressEvent(event); - } -} - -void -RoomSearchInput::hideEvent(QHideEvent *event) -{ - emit hiding(); - TextField::hideEvent(event); -} - -QuickSwitcher::QuickSwitcher(QWidget *parent) - : QWidget(parent) -{ - qRegisterMetaType>(); - setMaximumWidth(450); - - QFont font; - font.setPointSizeF(font.pointSizeF() * 1.5); - - roomSearch_ = new RoomSearchInput(this); - roomSearch_->setFont(font); - roomSearch_->setPlaceholderText(tr("Search for a room...")); - - topLayout_ = new QVBoxLayout(this); - topLayout_->addWidget(roomSearch_); - - connect(this, - &QuickSwitcher::queryResults, - this, - [this](const std::vector &rooms) { - auto pos = mapToGlobal(roomSearch_->geometry().bottomLeft()); - - popup_.setFixedWidth(width()); - popup_.addRooms(rooms); - popup_.move(pos.x() - topLayout_->margin(), pos.y() + topLayout_->margin()); - popup_.show(); - }); - - connect(roomSearch_, &QLineEdit::textEdited, this, [this](const QString &query) { - if (query.isEmpty()) { - popup_.hide(); - return; - } - - QtConcurrent::run([this, query = query.toLower()]() { - try { - emit queryResults(cache::searchRooms(query.toStdString())); - } catch (const lmdb::error &e) { - qWarning() << "room search failed:" << e.what(); - } - }); - }); - - connect(roomSearch_, - &RoomSearchInput::selectNextCompletion, - &popup_, - &SuggestionsPopup::selectNextSuggestion); - connect(roomSearch_, - &RoomSearchInput::selectPreviousCompletion, - &popup_, - &SuggestionsPopup::selectPreviousSuggestion); - connect(&popup_, &SuggestionsPopup::itemSelected, this, [this](const QString &room_id) { - reset(); - emit roomSelected(room_id); - }); - connect(roomSearch_, &RoomSearchInput::hiding, this, [this]() { popup_.hide(); }); - connect(roomSearch_, &QLineEdit::returnPressed, this, [this]() { - reset(); - popup_.selectHoveredSuggestion(); - }); -} - -void -QuickSwitcher::paintEvent(QPaintEvent *) -{ - QStyleOption opt; - opt.init(this); - QPainter p(this); - style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this); -} - -void -QuickSwitcher::keyPressEvent(QKeyEvent *event) -{ - if (event->key() == Qt::Key_Escape) { - event->accept(); - reset(); - } -} diff --git a/src/QuickSwitcher.h b/src/QuickSwitcher.h deleted file mode 100644 index 5bc31650..00000000 --- a/src/QuickSwitcher.h +++ /dev/null @@ -1,77 +0,0 @@ -/* - * nheko Copyright (C) 2017 Konstantinos Sideris - * - * 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 . - */ - -#pragma once - -#include -#include -#include -#include - -#include "popups/SuggestionsPopup.h" -#include "ui/TextField.h" - -class RoomSearchInput : public TextField -{ - Q_OBJECT -public: - explicit RoomSearchInput(QWidget *parent = nullptr); - -signals: - void selectNextCompletion(); - void selectPreviousCompletion(); - void hiding(); - -protected: - void keyPressEvent(QKeyEvent *event) override; - void hideEvent(QHideEvent *event) override; - bool focusNextPrevChild(bool) override { return false; }; -}; - -class QuickSwitcher : public QWidget -{ - Q_OBJECT - -public: - QuickSwitcher(QWidget *parent = nullptr); - -signals: - void closing(); - void roomSelected(const QString &roomid); - void queryResults(const std::vector &rooms); - -protected: - void keyPressEvent(QKeyEvent *event) override; - void showEvent(QShowEvent *) override { roomSearch_->setFocus(); } - void paintEvent(QPaintEvent *event) override; - -private: - void reset() - { - emit closing(); - roomSearch_->clear(); - } - - // Current highlighted selection from the completer. - int selection_ = -1; - - QVBoxLayout *topLayout_; - RoomSearchInput *roomSearch_; - - //! Autocomplete popup box with the room suggestions. - SuggestionsPopup popup_; -}; -- cgit 1.5.1