From 7a7d9dc216ecf0bf7200666b479fb08c0edec834 Mon Sep 17 00:00:00 2001 From: Xavier Del Campo Romero Date: Tue, 10 Oct 2023 15:39:33 +0200 Subject: Replace QInputDialog with custom dialog for queries Recent commits allowed multi-line input while reusing the QInputDialog object already defined by Kristall. However, QInputDialog lacks a way to access its QPlainTextEdit directly, and therefore set the wrap mode. Since QInputDialog does no wrapping, it is inconvenient for writing a long text (think of social media sites such as BBS or Station). Therefore, a custom QDialog-derived class, namely QueryDialog, has been provided. --- CMakeLists.txt | 2 ++ src/browsertab.cpp | 5 ++- src/kristall.pro | 7 +++-- src/widgets/querydialog.cpp | 30 ++++++++++++++++++ src/widgets/querydialog.hpp | 20 ++++++++++++ src/widgets/querydialog.ui | 77 +++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 136 insertions(+), 5 deletions(-) create mode 100644 src/widgets/querydialog.cpp create mode 100644 src/widgets/querydialog.hpp create mode 100644 src/widgets/querydialog.ui diff --git a/CMakeLists.txt b/CMakeLists.txt index b5e1924..2a87adf 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -89,6 +89,8 @@ set(PROJECT_SOURCES src/widgets/ssltrusteditor.cpp src/widgets/favouritepopup.cpp src/widgets/favouritebutton.cpp + src/widgets/querydialog.ui + src/widgets/querydialog.cpp src/cachehandler.cpp src/widgets/searchbox.cpp src/browsertab.ui diff --git a/src/browsertab.cpp b/src/browsertab.cpp index b64ab93..efb75c9 100644 --- a/src/browsertab.cpp +++ b/src/browsertab.cpp @@ -25,6 +25,7 @@ #include "kristall.hpp" #include "widgets/favouritepopup.hpp" #include "widgets/searchbox.hpp" +#include "widgets/querydialog.hpp" #include #include @@ -867,10 +868,8 @@ void BrowserTab::on_inputRequired(const QString &query, const bool is_sensitive) { this->network_timeout_timer.stop(); - QInputDialog dialog{this}; + QueryDialog dialog(this); - dialog.setInputMode(QInputDialog::TextInput); - dialog.setOption(QInputDialog::UsePlainTextEditForTextInput); dialog.setLabelText(query); if (is_sensitive) dialog.setTextEchoMode(QLineEdit::Password); diff --git a/src/kristall.pro b/src/kristall.pro index 550a055..4884897 100644 --- a/src/kristall.pro +++ b/src/kristall.pro @@ -158,7 +158,8 @@ SOURCES += \ widgets/favouritepopup.cpp \ widgets/favouritebutton.cpp \ cachehandler.cpp \ - widgets/searchbox.cpp + widgets/searchbox.cpp \ + widgets/querydialog.cpp HEADERS += \ ../lib/luis-l-gist/interactiveview.hpp \ @@ -206,6 +207,7 @@ HEADERS += \ widgets/ssltrusteditor.hpp \ widgets/favouritepopup.hpp \ widgets/favouritebutton.hpp \ + widgets/querydialog.hpp \ cachehandler.hpp \ widgets/searchbox.hpp @@ -218,7 +220,8 @@ FORMS += \ dialogs/settingsdialog.ui \ mainwindow.ui \ widgets/mediaplayer.ui \ - widgets/ssltrusteditor.ui + widgets/ssltrusteditor.ui \ + widgets/querydialog.ui CONFIG += lrelease embed_translations diff --git a/src/widgets/querydialog.cpp b/src/widgets/querydialog.cpp new file mode 100644 index 0000000..467c4c2 --- /dev/null +++ b/src/widgets/querydialog.cpp @@ -0,0 +1,30 @@ +#include "widgets/querydialog.hpp" + +QueryDialog::QueryDialog(QWidget *parent) : + QDialog(parent), + mode(QLineEdit::Normal) +{ + ui.setupUi(this); + ui.lineEdit->setVisible(false); +} + +void QueryDialog::setLabelText(const QString &text) +{ + ui.query->setText(text); +} + +void QueryDialog::setTextEchoMode(QLineEdit::EchoMode mode) +{ + ui.text->setVisible(mode == QLineEdit::Normal); + ui.lineEdit->setVisible(mode != QLineEdit::Normal); + ui.lineEdit->setEchoMode(mode); + this->mode = mode; +} + +QString QueryDialog::textValue() +{ + if (mode == QLineEdit::Normal) + return ui.text->toPlainText(); + + return ui.lineEdit->text(); +} diff --git a/src/widgets/querydialog.hpp b/src/widgets/querydialog.hpp new file mode 100644 index 0000000..d3ea71a --- /dev/null +++ b/src/widgets/querydialog.hpp @@ -0,0 +1,20 @@ +#ifndef QUERYDIALOG_H +#define QUERYDIALOG_H + +#include "ui_querydialog.h" +#include +#include +#include + +class QueryDialog : public QDialog { +public: + QueryDialog(QWidget *parent); + void setLabelText(const QString &text); + void setTextEchoMode(QLineEdit::EchoMode mode); + QString textValue(); +private: + Ui_QueryDialog ui; + QLineEdit::EchoMode mode; +}; + +#endif diff --git a/src/widgets/querydialog.ui b/src/widgets/querydialog.ui new file mode 100644 index 0000000..001c29d --- /dev/null +++ b/src/widgets/querydialog.ui @@ -0,0 +1,77 @@ + + + QueryDialog + + + + 0 + 0 + 480 + 240 + + + + Dialog + + + + + + + + + + + + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + + buttonBox + accepted() + QueryDialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + QueryDialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + + -- cgit v1.2.3