Pārlūkot izejas kodu

UI: Add Filter to Hotkeys settings menu

This commit adds a filter bar to the top of the hotkeys settings menu,
with it set to look for matches anywhere in the string label for that
hotkey.
VodBox 7 gadi atpakaļ
vecāks
revīzija
22f6d3fea5
2 mainītis faili ar 42 papildinājumiem un 0 dzēšanām
  1. 1 0
      UI/data/locale/en-US.ini
  2. 41 0
      UI/window-basic-settings.cpp

+ 1 - 0
UI/data/locale/en-US.ini

@@ -780,6 +780,7 @@ Basic.AdvAudio.AudioTracks="Tracks"
 # basic mode 'hotkeys' settings
 # basic mode 'hotkeys' settings
 Basic.Settings.Hotkeys="Hotkeys"
 Basic.Settings.Hotkeys="Hotkeys"
 Basic.Settings.Hotkeys.Pair="Key combinations shared with '%1' act as toggles"
 Basic.Settings.Hotkeys.Pair="Key combinations shared with '%1' act as toggles"
+Basic.Settings.Hotkeys.Filter="Filter"
 
 
 # basic mode hotkeys
 # basic mode hotkeys
 Basic.Hotkeys.SelectScene="Switch to scene"
 Basic.Hotkeys.SelectScene="Switch to scene"

+ 41 - 0
UI/window-basic-settings.cpp

@@ -2414,6 +2414,47 @@ void OBSBasicSettings::LoadHotkeySettings(obs_hotkey_id ignoreKey)
 	widget->setLayout(layout);
 	widget->setLayout(layout);
 	ui->hotkeyPage->setWidget(widget);
 	ui->hotkeyPage->setWidget(widget);
 
 
+	auto filterLayout = new QGridLayout();
+	auto filterWidget = new QWidget();
+	filterWidget->setLayout(filterLayout);
+
+	auto filterLabel = new QLabel(QTStr("Basic.Settings.Hotkeys.Filter"));
+	auto filter = new QLineEdit();
+
+	auto setRowVisible = [=](int row, bool visible, QLayoutItem *label) {
+		label->widget()->setVisible(visible);
+
+		auto field = layout->itemAt(row, QFormLayout::FieldRole);
+		if (field)
+			field->widget()->setVisible(visible);
+	};
+
+	auto searchFunction = [=](const QString &text) {
+		for (int i = 0; i < layout->rowCount(); i++) {
+			auto label = layout->itemAt(i, QFormLayout::LabelRole);
+			if (label) {
+				OBSHotkeyLabel *item =
+					qobject_cast<OBSHotkeyLabel*>(
+					label->widget());
+				if(item) {
+					if (item->text().toLower()
+						.contains(text.toLower()))
+						setRowVisible(i, true, label);
+					else
+						setRowVisible(i, false, label);
+				}
+			}
+		}
+	};
+
+	connect(filter, &QLineEdit::textChanged,
+		this, searchFunction);
+
+	filterLayout->addWidget(filterLabel, 0, 0);
+	filterLayout->addWidget(filter, 0, 1);
+
+	layout->addRow(filterWidget);
+
 	using namespace std;
 	using namespace std;
 	using encoders_elem_t =
 	using encoders_elem_t =
 		tuple<OBSEncoder, QPointer<QLabel>, QPointer<QWidget>>;
 		tuple<OBSEncoder, QPointer<QLabel>, QPointer<QWidget>>;