From 7ccbbc612e524df4b2b32be1478ffdf78d2f9b32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ole-Andr=C3=A9=20Rodlie?= Date: Fri, 26 Jul 2024 14:33:30 +0200 Subject: [PATCH] CommandPalette: filter some keywords Ref: #214 --- src/ui/dialogs/commandpalette.cpp | 35 +++++++++++++++++++++++++++---- src/ui/dialogs/commandpalette.h | 5 +++++ 2 files changed, 36 insertions(+), 4 deletions(-) diff --git a/src/ui/dialogs/commandpalette.cpp b/src/ui/dialogs/commandpalette.cpp index f9ccc0ba9..4856bd49b 100644 --- a/src/ui/dialogs/commandpalette.cpp +++ b/src/ui/dialogs/commandpalette.cpp @@ -63,19 +63,20 @@ CommandPalette::CommandPalette(QWidget *parent) mSuggestions->clear(); mSuggestions->hide(); if (mUserInput->text().isEmpty()) { return; } + if (isCmd(mUserInput->text())) { return; } const auto actions = eSettings::instance().fCommandPalette; + const auto defIcon = QIcon::fromTheme("drawPathAutoChecked"); int items = 0; for (int i = 0; i < actions.count(); i++) { const auto act = actions.at(i); - if (!act->text().startsWith(mUserInput->text(), - Qt::CaseInsensitive) && - mUserInput->text() != "?") { continue; } + if (!act->isEnabled()) { continue; } + if (skipItem(act->text(), mUserInput->text())) { continue; } const auto item = new QListWidgetItem(act->text(), mSuggestions); const auto alt = act->data().toString(); if (!alt.isEmpty()) { item->setText(alt); } item->setData(Qt::UserRole, i); if (!act->icon().isNull()) { item->setIcon(act->icon()); } - else { item->setIcon(QIcon::fromTheme("drawPathAutoChecked")); } + else { item->setIcon(defIcon); } mSuggestions->addItem(item); items++; } @@ -83,6 +84,10 @@ CommandPalette::CommandPalette(QWidget *parent) }); connect(mUserInput, &QLineEdit::returnPressed, this, [this]() { + if (isCmd(mUserInput->text())) { + parseCmd(mUserInput->text()); + return; + } if (mSuggestions->count() < 1) { return; } const auto index = mSuggestions->item(0)->data(Qt::UserRole).toInt(); const auto act = eSettings::instance().fCommandPalette.at(index); @@ -100,6 +105,28 @@ CommandPalette::CommandPalette(QWidget *parent) }); } +bool CommandPalette::skipItem(const QString &title, + const QString &input) +{ + if (title.isEmpty() || input.isEmpty()) { return true; } + if (!title.startsWith(input, + Qt::CaseInsensitive) && input != "?") { return true; } + return false; +} + +bool CommandPalette::isCmd(const QString &input) +{ + if (input.startsWith(":") || + input.startsWith("+") || + input.startsWith("-")) { return true; } + return false; +} + +void CommandPalette::parseCmd(const QString &input) +{ + qDebug() << input; +} + bool CommandPalette::eventFilter(QObject *obj, QEvent *e) { if (obj == mUserInput) { diff --git a/src/ui/dialogs/commandpalette.h b/src/ui/dialogs/commandpalette.h index 11e2d0620..664ada7db 100644 --- a/src/ui/dialogs/commandpalette.h +++ b/src/ui/dialogs/commandpalette.h @@ -42,6 +42,11 @@ class UI_EXPORT CommandPalette : public QDialog QLineEdit *mUserInput; QListWidget *mSuggestions; + bool skipItem(const QString &title, + const QString &input); + bool isCmd(const QString &input); + void parseCmd(const QString &input); + protected: bool eventFilter(QObject* obj, QEvent *e) override; };