44#include < services/metricsservice.h>
55#include < utils/gui.h>
66#include < utils/misc.h>
7+ #include < widgets/qtexteditsearchwidget.h>
78
89#include < QDebug>
910#include < QDesktopServices>
1011#include < QDir>
12+ #include < QKeyEvent>
13+ #include < QLayout>
1114#include < QMessageBox>
1215#include < QNetworkReply>
1316#include < QNetworkRequest>
2124
2225UpdateDialog::UpdateDialog (QWidget *parent, const QString &changesHtml, const QString &releaseUrl,
2326 const QString &releaseVersionString)
24- : MasterDialog(parent), ui(new Ui::UpdateDialog) {
27+ : MasterDialog(parent),
28+ ui(new Ui::UpdateDialog),
29+ _networkManager(nullptr ),
30+ _updateButton(nullptr ),
31+ _changeLogSearchWidget(nullptr ) {
2532 ui->setupUi (this );
2633 afterSetupUI ();
2734 ui->downloadProgressBar ->hide ();
@@ -38,6 +45,20 @@ UpdateDialog::UpdateDialog(QWidget *parent, const QString &changesHtml, const QS
3845 // ui->label_4->setText("<style>" + Utils::Misc::genericCSS() +
3946 // "</style>" + ui->label_4->text());
4047
48+ _changeLogSearchWidget = new QTextEditSearchWidget (ui->changeLogEdit );
49+ _changeLogSearchWidget->setReplaceEnabled (false );
50+ _changeLogSearchWidget->setDarkMode (
51+ SettingsService ().value (QStringLiteral (" darkMode" )).toBool ());
52+
53+ auto *searchLayout = new QVBoxLayout (ui->searchFrame );
54+ searchLayout->setSpacing (0 );
55+ searchLayout->setContentsMargins (0 , 0 , 0 , 0 );
56+ searchLayout->addWidget (_changeLogSearchWidget);
57+ ui->searchFrame ->setLayout (searchLayout);
58+
59+ ui->changeLogEdit ->installEventFilter (this );
60+ ui->changeLogEdit ->viewport ()->installEventFilter (this );
61+
4162 ui->changeLogEdit ->setHtml (changesHtml);
4263 ui->versionLabel ->setText (" Version " + releaseVersionString);
4364 this ->releaseVersionString = releaseVersionString;
@@ -121,6 +142,30 @@ void UpdateDialog::show() {
121142 MasterDialog::show ();
122143}
123144
145+ bool UpdateDialog::eventFilter (QObject *obj, QEvent *event) {
146+ if (((obj == ui->changeLogEdit ) || (obj == ui->changeLogEdit ->viewport ())) &&
147+ (event->type () == QEvent::KeyPress)) {
148+ auto *keyEvent = static_cast <QKeyEvent *>(event);
149+
150+ if ((keyEvent->key () == Qt::Key_Escape) && _changeLogSearchWidget->isVisible ()) {
151+ _changeLogSearchWidget->deactivate ();
152+ return true ;
153+ }
154+
155+ if ((keyEvent->key () == Qt::Key_F) && keyEvent->modifiers ().testFlag (Qt::ControlModifier)) {
156+ _changeLogSearchWidget->activate ();
157+ return true ;
158+ }
159+
160+ if (keyEvent->key () == Qt::Key_F3) {
161+ _changeLogSearchWidget->doSearch (!keyEvent->modifiers ().testFlag (Qt::ShiftModifier));
162+ return true ;
163+ }
164+ }
165+
166+ return MasterDialog::eventFilter (obj, event);
167+ }
168+
124169void UpdateDialog::dialogButtonClicked (QAbstractButton *button) {
125170 int actionRole = button->property (" ActionRole" ).toInt ();
126171
0 commit comments