SearchBar.cpp 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. // Copyright 2018 Dolphin Emulator Project
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #include "DolphinQt/SearchBar.h"
  4. #include <QEvent>
  5. #include <QHBoxLayout>
  6. #include <QKeyEvent>
  7. #include <QLineEdit>
  8. #include <QPushButton>
  9. SearchBar::SearchBar(QWidget* parent) : QWidget(parent)
  10. {
  11. CreateWidgets();
  12. ConnectWidgets();
  13. setFixedHeight(32);
  14. setHidden(true);
  15. installEventFilter(this);
  16. }
  17. void SearchBar::CreateWidgets()
  18. {
  19. m_search_edit = new QLineEdit;
  20. m_close_button = new QPushButton(tr("Close"));
  21. m_search_edit->setPlaceholderText(tr("Search games..."));
  22. auto* layout = new QHBoxLayout;
  23. layout->addWidget(m_search_edit);
  24. layout->addWidget(m_close_button);
  25. layout->setSizeConstraint(QLayout::SetMinAndMaxSize);
  26. setLayout(layout);
  27. }
  28. void SearchBar::Show()
  29. {
  30. m_search_edit->setFocus();
  31. m_search_edit->selectAll();
  32. // Re-apply the filter string.
  33. emit Search(m_search_edit->text());
  34. show();
  35. }
  36. void SearchBar::Hide()
  37. {
  38. // Clear the filter string.
  39. emit Search(QString());
  40. m_search_edit->clearFocus();
  41. hide();
  42. }
  43. void SearchBar::ConnectWidgets()
  44. {
  45. connect(m_search_edit, &QLineEdit::textChanged, this, &SearchBar::Search);
  46. connect(m_close_button, &QPushButton::clicked, this, &SearchBar::Hide);
  47. }
  48. bool SearchBar::eventFilter(QObject* object, QEvent* event)
  49. {
  50. if (event->type() == QEvent::KeyPress)
  51. {
  52. if (static_cast<QKeyEvent*>(event)->key() == Qt::Key_Escape)
  53. Hide();
  54. }
  55. return false;
  56. }