1 /*
2    SPDX-FileCopyrightText: 2015-2021 Laurent Montel <montel@kde.org>
3 
4    SPDX-License-Identifier: GPL-2.0-or-later
5 */
6 
7 #include "editorpage.h"
8 #include "KSplitterCollapserButton"
9 #include "contactprintthemeeditorutil.h"
10 #include "contactprintthemepreview.h"
11 #include "editorwidget.h"
12 #include "previewwidget.h"
13 #include "themeeditorwidget.h"
14 #include "themetemplatewidget.h"
15 #include <KPIMTextEdit/PlainTextEditor>
16 
17 #include <KLocalizedString>
18 
19 #include <KConfigGroup>
20 
21 #include <KSharedConfig>
22 #include <QSplitter>
23 #include <QVBoxLayout>
24 
EditorPage(GrantleeThemeEditor::EditorPage::PageType type,const QString & projectDirectory,QWidget * parent)25 EditorPage::EditorPage(GrantleeThemeEditor::EditorPage::PageType type, const QString &projectDirectory, QWidget *parent)
26     : GrantleeThemeEditor::EditorPage(type, parent)
27 {
28     QVBoxLayout *lay = new QVBoxLayout(this);
29     lay->setContentsMargins(0, 0, 0, 0);
30 
31     mMainSplitter = new QSplitter;
32     if (mType == MainPage) {
33         mWidgetSplitter = new QSplitter;
34         mWidgetSplitter->setOrientation(Qt::Vertical);
35         mWidgetSplitter->setChildrenCollapsible(false);
36         lay->addWidget(mWidgetSplitter);
37 
38         mWidgetSplitter->addWidget(mMainSplitter);
39 
40         mPreview = new ContactPrintThemePreview(projectDirectory);
41         mWidgetSplitter->addWidget(mPreview);
42         connect(mPreview, &ContactPrintThemePreview::needUpdateViewer, this, &EditorPage::needUpdateViewer);
43     } else {
44         lay->addWidget(mMainSplitter);
45     }
46 
47     mEditor = new ThemeEditorWidget;
48 
49     if (mType == MainPage) {
50         ContactPrintThemeEditorutil contactUtil;
51         KConfigGroup group(KSharedConfig::openConfig(), QStringLiteral("Global"));
52         mEditor->setPlainText(group.readEntry("defaultTemplate", contactUtil.defaultTemplate()));
53     }
54     mMainSplitter->addWidget(mEditor);
55     mThemeTemplate = new ThemeTemplateWidget(i18n("Theme Templates:"));
56     connect(mThemeTemplate, &ThemeTemplateWidget::insertTemplate, mEditor->editor(), &QPlainTextEdit::insertPlainText);
57     mMainSplitter->addWidget(mThemeTemplate);
58     mMainSplitter->setCollapsible(0, false);
59     new KSplitterCollapserButton(mThemeTemplate, mMainSplitter);
60 
61     connect(mEditor->editor(), &QPlainTextEdit::textChanged, this, &GrantleeThemeEditor::EditorPage::changed);
62 
63     if (mType == MainPage) {
64         KConfigGroup group(KSharedConfig::openConfig(), "EditorPage");
65         const QList<int> size{400, 100};
66         mMainSplitter->setSizes(group.readEntry("mainSplitter", size));
67         mWidgetSplitter->setSizes(group.readEntry("widgetSplitter", size));
68     }
69 }
70 
~EditorPage()71 EditorPage::~EditorPage()
72 {
73     if (mType == MainPage) {
74         KConfigGroup group(KSharedConfig::openConfig(), "EditorPage");
75         group.writeEntry("mainSplitter", mMainSplitter->sizes());
76         group.writeEntry("widgetSplitter", mWidgetSplitter->sizes());
77     }
78 }
79 
preview() const80 ContactPrintThemePreview *EditorPage::preview() const
81 {
82     return mPreview;
83 }
84