File indexing completed on 2024-05-19 05:11:51
0001 /* 0002 SPDX-FileCopyrightText: 2014-2024 Laurent Montel <montel@kde.org> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include <cerrno> 0008 0009 #include "akonadisearchdebugdialog.h" 0010 #include "akonadisearchdebugwidget.h" 0011 0012 #include <KConfigGroup> 0013 #include <KLocalizedString> 0014 #include <KMessageBox> 0015 #include <KSharedConfig> 0016 #include <KWindowConfig> 0017 #include <QDialogButtonBox> 0018 #include <QFileDialog> 0019 #include <QPointer> 0020 #include <QPushButton> 0021 #include <QVBoxLayout> 0022 #include <QWindow> 0023 0024 using namespace Akonadi::Search; 0025 0026 class Akonadi::Search::AkonadiSearchDebugDialogPrivate 0027 { 0028 public: 0029 AkonadiSearchDebugWidget *mAkonadiSearchDebugWidget = nullptr; 0030 }; 0031 0032 namespace 0033 { 0034 static const char myAkonadiSearchDebugDialogConfigGroupName[] = "AkonadiSearchDebugDialog"; 0035 } 0036 AkonadiSearchDebugDialog::AkonadiSearchDebugDialog(QWidget *parent) 0037 : QDialog(parent) 0038 , d(new Akonadi::Search::AkonadiSearchDebugDialogPrivate) 0039 { 0040 // Don't translate it's just a dialog to debug 0041 setWindowTitle(QStringLiteral("Debug Akonadi Search")); 0042 0043 auto mainLayout = new QVBoxLayout(this); 0044 auto buttonBox = new QDialogButtonBox(QDialogButtonBox::Close, this); 0045 auto user1Button = new QPushButton; 0046 buttonBox->addButton(user1Button, QDialogButtonBox::ActionRole); 0047 // Don't translate it. 0048 user1Button->setText(QStringLiteral("Save As...")); 0049 connect(user1Button, &QPushButton::clicked, this, &AkonadiSearchDebugDialog::slotSaveAs); 0050 connect(buttonBox, &QDialogButtonBox::rejected, this, &AkonadiSearchDebugDialog::reject); 0051 d->mAkonadiSearchDebugWidget = new AkonadiSearchDebugWidget(this); 0052 d->mAkonadiSearchDebugWidget->setObjectName(QLatin1StringView("akonadisearchdebugwidget")); 0053 mainLayout->addWidget(d->mAkonadiSearchDebugWidget); 0054 mainLayout->addWidget(buttonBox); 0055 readConfig(); 0056 } 0057 0058 AkonadiSearchDebugDialog::~AkonadiSearchDebugDialog() 0059 { 0060 writeConfig(); 0061 delete d; 0062 } 0063 0064 void AkonadiSearchDebugDialog::readConfig() 0065 { 0066 create(); // ensure a window is created 0067 windowHandle()->resize(QSize(800, 600)); 0068 KConfigGroup group(KSharedConfig::openStateConfig(), QLatin1StringView(myAkonadiSearchDebugDialogConfigGroupName)); 0069 KWindowConfig::restoreWindowSize(windowHandle(), group); 0070 resize(windowHandle()->size()); // workaround for QTBUG-40584 0071 } 0072 0073 void AkonadiSearchDebugDialog::writeConfig() 0074 { 0075 KConfigGroup group(KSharedConfig::openStateConfig(), QLatin1StringView(myAkonadiSearchDebugDialogConfigGroupName)); 0076 KWindowConfig::saveWindowSize(windowHandle(), group); 0077 group.sync(); 0078 } 0079 0080 void AkonadiSearchDebugDialog::setAkonadiId(Akonadi::Item::Id akonadiId) 0081 { 0082 d->mAkonadiSearchDebugWidget->setAkonadiId(akonadiId); 0083 } 0084 0085 void AkonadiSearchDebugDialog::setSearchType(AkonadiSearchDebugSearchPathComboBox::SearchType type) 0086 { 0087 d->mAkonadiSearchDebugWidget->setSearchType(type); 0088 } 0089 0090 void AkonadiSearchDebugDialog::doSearch() 0091 { 0092 d->mAkonadiSearchDebugWidget->doSearch(); 0093 } 0094 0095 void AkonadiSearchDebugDialog::slotSaveAs() 0096 { 0097 const QString filter = i18n("Text Files (*.txt);;All Files (*)"); 0098 saveTextAs(d->mAkonadiSearchDebugWidget->plainText(), filter); 0099 } 0100 0101 void AkonadiSearchDebugDialog::saveTextAs(const QString &text, const QString &filter) 0102 { 0103 QPointer<QFileDialog> fdlg(new QFileDialog(this, QString(), QString(), filter)); 0104 fdlg->setAcceptMode(QFileDialog::AcceptSave); 0105 if (fdlg->exec() == QDialog::Accepted && fdlg) { 0106 const QString fileName = fdlg->selectedFiles().at(0); 0107 if (!saveToFile(fileName, text)) { 0108 KMessageBox::error(this, 0109 i18n("Could not write the file %1:\n" 0110 "\"%2\" is the detailed error description.", 0111 fileName, 0112 QString::fromLocal8Bit(strerror(errno))), 0113 i18nc("@title:window", "Save File Error")); 0114 } 0115 } 0116 delete fdlg; 0117 } 0118 0119 bool AkonadiSearchDebugDialog::saveToFile(const QString &filename, const QString &text) 0120 { 0121 QFile file(filename); 0122 if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) { 0123 return false; 0124 } 0125 QTextStream out(&file); 0126 out << text; 0127 file.close(); 0128 return true; 0129 } 0130 0131 #include "moc_akonadisearchdebugdialog.cpp"