1 /*
2    SPDX-FileCopyrightText: 2015-2021 Laurent Montel <montel@kde.org>
3 
4    SPDX-License-Identifier: LGPL-2.0-or-later
5 */
6 
7 #include "sievescriptdebuggerwidget.h"
8 #include "sievescriptdebuggerfrontendwidget.h"
9 
10 #include <KLocalizedString>
11 
12 #include <QHBoxLayout>
13 #include <QLabel>
14 #include <QStackedWidget>
15 #include <QStandardPaths>
16 #include <QTimer>
17 
18 using namespace KSieveUi;
SieveScriptDebuggerWidget(QWidget * parent)19 SieveScriptDebuggerWidget::SieveScriptDebuggerWidget(QWidget *parent)
20     : QWidget(parent)
21 {
22     auto mainLayout = new QHBoxLayout(this);
23     mainLayout->setContentsMargins({});
24     mStackedWidget = new QStackedWidget(this);
25     mStackedWidget->setObjectName(QStringLiteral("stackedwidget"));
26     mainLayout->addWidget(mStackedWidget);
27 
28     mSieveScriptFrontEnd = new SieveScriptDebuggerFrontEndWidget;
29     mSieveScriptFrontEnd->setObjectName(QStringLiteral("sievescriptfrontend"));
30     mStackedWidget->addWidget(mSieveScriptFrontEnd);
31     connect(mSieveScriptFrontEnd, &SieveScriptDebuggerFrontEndWidget::scriptTextChanged, this, &SieveScriptDebuggerWidget::scriptTextChanged);
32     connect(mSieveScriptFrontEnd, &SieveScriptDebuggerFrontEndWidget::debugButtonEnabled, this, &SieveScriptDebuggerWidget::debugButtonEnabled);
33     connect(this, &SieveScriptDebuggerWidget::debugScriptButtonClicked, mSieveScriptFrontEnd, &SieveScriptDebuggerFrontEndWidget::debugScriptButtonClicked);
34 
35     mSieveNoExistingFrontEnd = new QLabel(i18n("\"sieve-test\" was not found on system. Please install it. (See in Dovecot package)"));
36     mSieveNoExistingFrontEnd->setAlignment(Qt::AlignHCenter);
37     QFont f = mSieveNoExistingFrontEnd->font();
38     f.setBold(true);
39     mSieveNoExistingFrontEnd->setFont(f);
40     mSieveNoExistingFrontEnd->setObjectName(QStringLiteral("sievenoexistingfrontend"));
41     mStackedWidget->addWidget(mSieveNoExistingFrontEnd);
42 
43     QTimer::singleShot(0, this, &SieveScriptDebuggerWidget::checkSieveTestApplication);
44 }
45 
~SieveScriptDebuggerWidget()46 SieveScriptDebuggerWidget::~SieveScriptDebuggerWidget()
47 {
48 }
49 
splitterSizes() const50 QList<int> SieveScriptDebuggerWidget::splitterSizes() const
51 {
52     return mSieveScriptFrontEnd->splitterSizes();
53 }
54 
setSplitterSizes(const QList<int> & sizes)55 void SieveScriptDebuggerWidget::setSplitterSizes(const QList<int> &sizes)
56 {
57     mSieveScriptFrontEnd->setSplitterSizes(sizes);
58 }
59 
canAccept() const60 bool SieveScriptDebuggerWidget::canAccept() const
61 {
62     return mSieveScriptFrontEnd->canAccept();
63 }
64 
setScript(const QString & script)65 void SieveScriptDebuggerWidget::setScript(const QString &script)
66 {
67     if (mStackedWidget->currentWidget() == mSieveScriptFrontEnd) {
68         mSieveScriptFrontEnd->setScript(script);
69     }
70 }
71 
script() const72 QString SieveScriptDebuggerWidget::script() const
73 {
74     if (mStackedWidget->currentWidget() == mSieveScriptFrontEnd) {
75         return mSieveScriptFrontEnd->script();
76     } else {
77         return QString();
78     }
79 }
80 
checkSieveTestApplication()81 void SieveScriptDebuggerWidget::checkSieveTestApplication()
82 {
83     if (QStandardPaths::findExecutable(QStringLiteral("sieve-test")).isEmpty()) {
84         mHaveDebugApps = false;
85         mStackedWidget->setCurrentWidget(mSieveNoExistingFrontEnd);
86         Q_EMIT sieveTestNotFound();
87     } else {
88         mHaveDebugApps = true;
89         mStackedWidget->setCurrentWidget(mSieveScriptFrontEnd);
90     }
91 }
92 
haveDebugApps() const93 bool SieveScriptDebuggerWidget::haveDebugApps() const
94 {
95     return mHaveDebugApps;
96 }
97