diff options
Diffstat (limited to 'src/mainwindow/widgets')
-rw-r--r-- | src/mainwindow/widgets/searchform.cpp | 58 | ||||
-rw-r--r-- | src/mainwindow/widgets/searchform.h | 35 | ||||
-rw-r--r-- | src/mainwindow/widgets/searchform.ui | 51 |
3 files changed, 144 insertions, 0 deletions
diff --git a/src/mainwindow/widgets/searchform.cpp b/src/mainwindow/widgets/searchform.cpp new file mode 100644 index 0000000..08d4470 --- /dev/null +++ b/src/mainwindow/widgets/searchform.cpp @@ -0,0 +1,58 @@ +/* + * This file is part of smolbote. It's copyrighted by the contributors recorded + * in the version control history of the file, available from its original + * location: https://neueland.iserlohn-fortress.net/smolbote.hg + * + * SPDX-License-Identifier: GPL-3.0 + */ + +#include "searchform.h" +#include "src/mainwindow/mainwindow.h" +#include "ui_searchform.h" + +SearchForm::SearchForm(MainWindow *parentWindow, QWidget *parent) + : QWidget(parent) + , ui(new Ui::SearchForm) +{ + Q_CHECK_PTR(parentWindow); + + ui->setupUi(this); + ui->lineEdit->setPlaceholderText(tr("Search")); + ui->lineEdit->setClearButtonEnabled(true); + ui->result_label->setVisible(false); + + // show/hide action + auto *toggleSearchBox = new QAction(this); + toggleSearchBox->setShortcut(QKeySequence(QString::fromStdString(parentWindow->m_config->value<std::string>("browser.shortcuts.toggleSearchBox").value()))); + connect(toggleSearchBox, &QAction::triggered, this, [this, parentWindow]() { + if(isVisible()) { + setVisible(false); + // remove highlighting by passing an empty string + parentWindow->m_currentView->findText(""); + } else { + setVisible(true); + setFocus(); + } + }); + parentWindow->addAction(toggleSearchBox); + + connect(ui->lineEdit, &QLineEdit::returnPressed, this, [this, parentWindow]() { + QWebEnginePage::FindFlags searchFlags; + searchFlags.setFlag(QWebEnginePage::FindCaseSensitively, ui->caseSensitivity_checkBox->isChecked()); + searchFlags.setFlag(QWebEnginePage::FindBackward, ui->reverseSearch_checkBox->isChecked()); + parentWindow->m_currentView->findText(ui->lineEdit->text(), searchFlags, [this](bool found) { + ui->result_label->setVisible(!found); + }); + }); +} + +SearchForm::~SearchForm() +{ + delete ui; +} + +void SearchForm::focusInEvent(QFocusEvent *e) +{ + ui->lineEdit->setFocus(); + QWidget::focusInEvent(e); +} diff --git a/src/mainwindow/widgets/searchform.h b/src/mainwindow/widgets/searchform.h new file mode 100644 index 0000000..94cc2a9 --- /dev/null +++ b/src/mainwindow/widgets/searchform.h @@ -0,0 +1,35 @@ +/* + * This file is part of smolbote. It's copyrighted by the contributors recorded + * in the version control history of the file, available from its original + * location: https://neueland.iserlohn-fortress.net/smolbote.hg + * + * SPDX-License-Identifier: GPL-3.0 + */ + +#ifndef SEARCHFORM_H +#define SEARCHFORM_H + +#include <QWidget> + +namespace Ui +{ +class SearchForm; +} + +class MainWindow; +class SearchForm : public QWidget +{ + Q_OBJECT + +public: + explicit SearchForm(MainWindow *parentWindow, QWidget *parent = nullptr); + ~SearchForm() override; + +protected: + void focusInEvent(QFocusEvent *e) override; + +private: + Ui::SearchForm *ui; +}; + +#endif // SEARCHFORM_H diff --git a/src/mainwindow/widgets/searchform.ui b/src/mainwindow/widgets/searchform.ui new file mode 100644 index 0000000..9d1d108 --- /dev/null +++ b/src/mainwindow/widgets/searchform.ui @@ -0,0 +1,51 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>SearchForm</class> + <widget class="QWidget" name="SearchForm"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>600</width> + <height>32</height> + </rect> + </property> + <property name="windowTitle"> + <string>Form</string> + </property> + <layout class="QHBoxLayout" name="horizontalLayout"> + <property name="topMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + <item> + <widget class="QLineEdit" name="lineEdit"/> + </item> + <item> + <widget class="QCheckBox" name="caseSensitivity_checkBox"> + <property name="text"> + <string>Case Sensitive</string> + </property> + </widget> + </item> + <item> + <widget class="QCheckBox" name="reverseSearch_checkBox"> + <property name="text"> + <string>Search Backwards</string> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="result_label"> + <property name="text"> + <string>No Results found</string> + </property> + </widget> + </item> + </layout> + </widget> + <resources/> + <connections/> +</ui> |