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"