File indexing completed on 2025-05-04 04:51:07

0001 /*
0002    SPDX-FileCopyrightText: 2016-2024 Laurent Montel <montel@kde.org>
0003 
0004    SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #include "viewerpluginexternaleditwidget.h"
0008 #include <KLineEdit>
0009 #include <KLineEditEventHandler>
0010 #include <KLocalizedString>
0011 #include <KUrlRequester>
0012 #include <QFormLayout>
0013 #include <QLabel>
0014 #include <QWhatsThis>
0015 
0016 ViewerPluginExternalEditWidget::ViewerPluginExternalEditWidget(QWidget *parent)
0017     : QWidget(parent)
0018     , mName(new QLineEdit(this))
0019     , mDescription(new QLineEdit(this))
0020     , mCommandLine(new QLineEdit(this))
0021     , mExecutable(new KUrlRequester(this))
0022 {
0023     auto mainLayout = new QFormLayout(this);
0024     mainLayout->setObjectName(QLatin1StringView("mainlayout"));
0025     mainLayout->setContentsMargins({});
0026 
0027     mName->setObjectName(QLatin1StringView("name"));
0028     mainLayout->addRow(i18n("Name:"), mName);
0029     KLineEditEventHandler::catchReturnKey(mName);
0030 
0031     mDescription->setObjectName(QLatin1StringView("description"));
0032     mainLayout->addRow(i18n("Description:"), mDescription);
0033     KLineEditEventHandler::catchReturnKey(mDescription);
0034 
0035     mCommandLine->setClearButtonEnabled(true);
0036     mCommandLine->setObjectName(QLatin1StringView("commandline"));
0037     mCommandLine->setPlaceholderText(i18n("Add command arguments..."));
0038     mainLayout->addRow(i18n("Command Line:"), mCommandLine);
0039     KLineEditEventHandler::catchReturnKey(mCommandLine);
0040 
0041     auto formatHelp = new QLabel(i18n("<qt><a href=\"whatsthis1\">Argument format information...</a></qt>"), this);
0042     formatHelp->setObjectName(QLatin1StringView("formatHelp"));
0043     formatHelp->setContextMenuPolicy(Qt::NoContextMenu);
0044     connect(formatHelp, &QLabel::linkActivated, this, &ViewerPluginExternalEditWidget::slotLinkClicked);
0045 
0046     mCommandWhatsThis = i18n(
0047         "<qt><p><strong>These expressions may be used for the arguments:"
0048         "</strong></p>"
0049         "<ul>"
0050         "<li>%s - the subject of message</li>"
0051         "<li>%from - the from email address</li>"
0052         "<li>%cc - the list of cc email address</li>"
0053         "<li>%bcc - the list of bcc email address</li>"
0054         "<li>%body - the body of message</li>"
0055         "<li>%inreplyto - the reply email address</li>"
0056         "<li>%akonadiUrl - the akonadi url (as akonadi:?item=187020)</li>"
0057         "</ul>"
0058         "</strong></p></qt>");
0059     formatHelp->setWhatsThis(mCommandWhatsThis);
0060 
0061     mainLayout->addWidget(formatHelp);
0062 
0063     mExecutable->setObjectName(QLatin1StringView("mEditorRequester"));
0064 
0065     mExecutable->setMimeTypeFilters(
0066         {QStringLiteral("application/x-executable"), QStringLiteral("application/x-shellscript"), QStringLiteral("application/x-desktop")});
0067 
0068     mExecutable->setMode(KFile::File | KFile::ExistingOnly | KFile::LocalOnly);
0069     mExecutable->lineEdit()->setClearButtonEnabled(true);
0070     mainLayout->addRow(i18n("Executable:"), mExecutable);
0071     connect(mName, &QLineEdit::textChanged, this, &ViewerPluginExternalEditWidget::slotInfoChanged);
0072     connect(mExecutable->lineEdit(), &QLineEdit::textChanged, this, &ViewerPluginExternalEditWidget::slotInfoChanged);
0073 }
0074 
0075 ViewerPluginExternalEditWidget::~ViewerPluginExternalEditWidget() = default;
0076 
0077 void ViewerPluginExternalEditWidget::slotLinkClicked(const QString &link)
0078 {
0079     if (link == QLatin1StringView("whatsthis1")) {
0080         QWhatsThis::showText(QCursor::pos(), mCommandWhatsThis);
0081     }
0082 }
0083 
0084 void ViewerPluginExternalEditWidget::slotInfoChanged()
0085 {
0086     Q_EMIT scriptIsValid(!mExecutable->text().trimmed().isEmpty() && !mName->text().trimmed().isEmpty() && !mExistingsNames.contains(mName->text()));
0087 }
0088 
0089 void ViewerPluginExternalEditWidget::setExistingsNames(const QStringList &existingsNames)
0090 {
0091     mExistingsNames = existingsNames;
0092 }
0093 
0094 void ViewerPluginExternalEditWidget::setScriptInfo(const ViewerPluginExternalScriptInfo &info)
0095 {
0096     mScriptInfo = info;
0097     mName->setText(mScriptInfo.name());
0098     mDescription->setText(mScriptInfo.description());
0099     mCommandLine->setText(mScriptInfo.commandLine());
0100     mExecutable->setText(mScriptInfo.executable());
0101 }
0102 
0103 void ViewerPluginExternalEditWidget::save()
0104 {
0105     mScriptInfo.setName(mName->text());
0106     mScriptInfo.setDescription(mDescription->text());
0107     mScriptInfo.setCommandLine(mCommandLine->text());
0108     mScriptInfo.setExecutable(mExecutable->text());
0109 }
0110 
0111 ViewerPluginExternalScriptInfo ViewerPluginExternalEditWidget::scriptInfo() const
0112 {
0113     return mScriptInfo;
0114 }
0115 
0116 #include "moc_viewerpluginexternaleditwidget.cpp"