From d46252b823fb40e317e0857c9d88b9bf63df2c54 Mon Sep 17 00:00:00 2001 From: itsmattkc Date: Mon, 7 Jan 2019 09:14:48 +1100 Subject: [PATCH] added search to keyboard shortcuts --- dialogs/preferencesdialog.cpp | 46 +++++++++++++++++++++++++++++++++++ dialogs/preferencesdialog.h | 1 + 2 files changed, 47 insertions(+) diff --git a/dialogs/preferencesdialog.cpp b/dialogs/preferencesdialog.cpp index 0eec771e9..d558f1a12 100644 --- a/dialogs/preferencesdialog.cpp +++ b/dialogs/preferencesdialog.cpp @@ -113,6 +113,46 @@ void PreferencesDialog::reset_default_shortcut() { } } +bool PreferencesDialog::refine_shortcut_list(const QString &s, QTreeWidgetItem* parent) { + if (parent == NULL) { + for (int i=0;itopLevelItemCount();i++) { + refine_shortcut_list(s, keyboard_tree->topLevelItem(i)); + } + } else { + parent->setExpanded(!s.isEmpty()); + + bool all_children_are_hidden = !s.isEmpty(); + + for (int i=0;ichildCount();i++) { + QTreeWidgetItem* item = parent->child(i); + if (item->childCount() > 0) { + all_children_are_hidden = refine_shortcut_list(s, item); + } else { + item->setHidden(false); + if (s.isEmpty()) { + all_children_are_hidden = false; + } else { + QString shortcut; + if (keyboard_tree->itemWidget(item, 1) != NULL) { + shortcut = static_cast(keyboard_tree->itemWidget(item, 1))->keySequence().toString(); + } + if (item->text(0).contains(s, Qt::CaseInsensitive) || shortcut.contains(s, Qt::CaseInsensitive)) { + all_children_are_hidden = false; + } else { + item->setHidden(true); + } + } + } + } + + if (parent->text(0).contains(s, Qt::CaseInsensitive)) all_children_are_hidden = false; + + parent->setHidden(all_children_are_hidden); + + return all_children_are_hidden; + } +} + void PreferencesDialog::setup_ui() { QVBoxLayout* verticalLayout = new QVBoxLayout(this); QTabWidget* tabWidget = new QTabWidget(this); @@ -160,6 +200,12 @@ void PreferencesDialog::setup_ui() { QVBoxLayout* shortcut_layout = new QVBoxLayout(shortcut_tab); + QLineEdit* key_search_line = new QLineEdit(); + key_search_line->setPlaceholderText("Search for action or shortcut"); + connect(key_search_line, SIGNAL(textChanged(const QString &)), this, SLOT(refine_shortcut_list(const QString &))); + + shortcut_layout->addWidget(key_search_line); + keyboard_tree = new QTreeWidget(); QTreeWidgetItem* tree_header = keyboard_tree->headerItem(); tree_header->setText(0, "Action"); diff --git a/dialogs/preferencesdialog.h b/dialogs/preferencesdialog.h index 510b5dc5a..9e3031bc5 100644 --- a/dialogs/preferencesdialog.h +++ b/dialogs/preferencesdialog.h @@ -33,6 +33,7 @@ public: private slots: void save(); void reset_default_shortcut(); + bool refine_shortcut_list(const QString &, QTreeWidgetItem* parent = NULL); private: void setup_ui();