7#include "sieveeditorgraphicalmodewidget.h"
8#include "ksieveui/editor/warningwidget/sieveeditorparsingmissingfeaturewarning.h"
9#include "scriptsparsing/parsingutil.h"
10#include "sievescriptlistbox.h"
11#include "sievescriptpage.h"
13#include <KConfigGroup>
14#include <KLocalizedString>
16#include <KSharedConfig>
18#include "libksieveui_debug.h"
20#include <QStackedWidget>
23using namespace KSieveUi;
26static const char myAutoCreateScriptDialogGroupNameModeWidget[] =
"AutoCreateScriptDialog";
28SieveEditorGraphicalModeWidget::SieveEditorGraphicalModeWidget(
QWidget *parent)
29 : SieveEditorGraphicalModeWidgetAbstract::SieveEditorGraphicalModeWidgetAbstract(parent)
30 , mSieveScript(new SieveScriptListBox(
i18n(
"Sieve Script"), this))
34 vlay->setContentsMargins({});
36 mSplitter->setChildrenCollapsible(
false);
37 mSieveScript->setSieveEditorGraphicalModeWidget(
this);
38 connect(mSieveScript, &SieveScriptListBox::valueChanged,
this, &SieveEditorGraphicalModeWidget::valueChanged);
39 connect(mSieveScript, &SieveScriptListBox::addNewPage,
this, &SieveEditorGraphicalModeWidget::slotAddScriptPage);
40 connect(mSieveScript, &SieveScriptListBox::removePage,
this, &SieveEditorGraphicalModeWidget::slotRemoveScriptPage);
41 connect(mSieveScript, &SieveScriptListBox::activatePage,
this, &SieveEditorGraphicalModeWidget::slotActivateScriptPage);
42 connect(mSieveScript, &SieveScriptListBox::enableButtonOk,
this, &SieveEditorGraphicalModeWidget::enableButtonOk);
43 mSplitter->addWidget(mSieveScript);
44 vlay->addWidget(mSplitter);
49 mSieveParsingWarning =
new SieveEditorParsingMissingFeatureWarning(SieveEditorParsingMissingFeatureWarning::GraphicEditor);
50 connect(mSieveParsingWarning, &SieveEditorParsingMissingFeatureWarning::switchToTextMode,
this, &SieveEditorGraphicalModeWidget::slotSwitchToTextMode);
51 vlay->addWidget(mSieveParsingWarning);
56SieveEditorGraphicalModeWidget::~SieveEditorGraphicalModeWidget()
61void SieveEditorGraphicalModeWidget::loadScript(
const QString &doc, QString &error)
63 for (
int i = mStackWidget->count(); i >= 0; --i) {
64 mStackWidget->removeWidget(mStackWidget->widget(i));
66 mSieveScript->loadScript(doc, error);
69void SieveEditorGraphicalModeWidget::readConfig()
72 const QList<int>
size{100, 400};
73 mSplitter->setSizes(group.readEntry(
"mainSplitter",
size));
76void SieveEditorGraphicalModeWidget::writeConfig()
79 group.writeEntry(
"mainSplitter", mSplitter->sizes());
82void SieveEditorGraphicalModeWidget::setSieveCapabilities(
const QStringList &capabilities)
87QStringList SieveEditorGraphicalModeWidget::sieveCapabilities()
92QString SieveEditorGraphicalModeWidget::script(QStringList &required)
const
94 return mSieveScript->generatedScript(required);
97void SieveEditorGraphicalModeWidget::slotAddScriptPage(KSieveUi::SieveScriptPage *page)
99 mStackWidget->addWidget(page);
100 mStackWidget->setCurrentWidget(page);
101 connect(page, &SieveScriptPage::valueChanged,
this, &SieveEditorGraphicalModeWidget::valueChanged);
104void SieveEditorGraphicalModeWidget::slotRemoveScriptPage(QWidget *page)
106 mStackWidget->removeWidget(page);
109void SieveEditorGraphicalModeWidget::slotActivateScriptPage(QWidget *page)
111 mStackWidget->setCurrentWidget(page);
114QString SieveEditorGraphicalModeWidget::currentscript()
116 QStringList requireModules;
117 QString script = mSieveScript->generatedScript(requireModules);
118 if (!requireModules.
isEmpty()) {
119 script.prepend(requireModules.
join(QLatin1Char(
'\n')) + QStringLiteral(
"\n\n"));
124void SieveEditorGraphicalModeWidget::setImportScript(
const QString &script)
127 const QString doc = KSieveCore::ParsingUtil::parseScript(script, result);
128 mSieveParsingWarning->animatedHide();
131 loadScript(doc, error);
132 if (!
error.isEmpty()) {
133 mSieveParsingWarning->setErrors(script, error);
134 mSieveParsingWarning->animatedShow();
138 i18n(
"Error during importing script. Do you want to switch to text mode?"),
140 KGuiItem(
i18nc(
"@action:button",
"Switch to Text Mode")),
141 KGuiItem(
i18nc(
"@action:button",
"Do Not Switch"), QStringLiteral(
"dialog-cancel")));
142 if (answer == KMessageBox::ButtonCode::PrimaryAction) {
143 Q_EMIT switchTextMode(script);
145 qCDebug(LIBKSIEVEUI_LOG) <<
" cannot import script";
149void SieveEditorGraphicalModeWidget::setListOfIncludeFile(
const QStringList &listOfIncludeFile)
151 mListOfIncludeFile = listOfIncludeFile;
154void SieveEditorGraphicalModeWidget::slotSwitchToTextMode()
156 Q_EMIT switchTextMode(mSieveParsingWarning->initialScript());
159QStringList KSieveUi::SieveEditorGraphicalModeWidget::listOfIncludeFile()
const
161 return mListOfIncludeFile;
164#include "moc_sieveeditorgraphicalmodewidget.cpp"
static KSharedConfig::Ptr openStateConfig(const QString &fileName=QString())
QString i18nc(const char *context, const char *text, const TYPE &arg...)
QString i18n(const char *text, const TYPE &arg...)
Capabilities capabilities()
void error(QWidget *parent, const QString &text, const QString &title, const KGuiItem &buttonOk, Options options=Notify)
ButtonCode questionTwoActions(QWidget *parent, const QString &text, const QString &title, const KGuiItem &primaryAction, const KGuiItem &secondaryAction, const QString &dontAskAgainName=QString(), Options options=Notify)
bool isEmpty() const const
QMetaObject::Connection connect(const QObject *sender, PointerToMemberFunction signal, Functor functor)
QString join(QChar separator) const const
QFuture< ArgsType< Signal > > connect(Sender *sender, Signal signal)