8#include "incidencedescription.h"
9#include "ui_dialogdesktop.h"
10#include <KPIMTextEdit/RichTextComposer>
12#include "incidenceeditor_debug.h"
13#include <KActionCollection>
14#include <KLocalizedString>
17using namespace IncidenceEditorNG;
19namespace IncidenceEditorNG
21class IncidenceDescriptionPrivate
24 IncidenceDescriptionPrivate() =
default;
26 QString mRealOriginalDescriptionEditContents;
27 bool mRichTextEnabled =
false;
31IncidenceDescription::IncidenceDescription(Ui::EventOrTodoDesktop *ui)
34 , d(new IncidenceDescriptionPrivate())
40 connect(mUi->mDescriptionEdit->richTextComposer(), &KPIMTextEdit::RichTextComposer::textChanged,
this, &IncidenceDescription::checkDirtyStatus);
43IncidenceDescription::~IncidenceDescription() =
default;
49 d->mRealOriginalDescriptionEditContents.clear();
52 enableRichTextDescription(
incidence->descriptionIsRich());
54 mUi->mDescriptionEdit->richTextComposer()->setHtml(
incidence->richDescription());
55 d->mRealOriginalDescriptionEditContents = mUi->mDescriptionEdit->richTextComposer()->toHtml();
57 mUi->mDescriptionEdit->richTextComposer()->setPlainText(
incidence->description());
58 d->mRealOriginalDescriptionEditContents = mUi->mDescriptionEdit->richTextComposer()->toPlainText();
61 enableRichTextDescription(
false);
62 mUi->mDescriptionEdit->richTextComposer()->clear();
70 if (d->mRichTextEnabled) {
71 incidence->setDescription(mUi->mDescriptionEdit->richTextComposer()->toHtml(),
true);
73 incidence->setDescription(mUi->mDescriptionEdit->richTextComposer()->toPlainText(),
false);
88 if (d->mRichTextEnabled) {
89 return !mLoadedIncidence->descriptionIsRich() || d->mRealOriginalDescriptionEditContents != mUi->mDescriptionEdit->richTextComposer()->toHtml();
91 return mLoadedIncidence->descriptionIsRich() || d->mRealOriginalDescriptionEditContents != mUi->mDescriptionEdit->richTextComposer()->toPlainText();
95void IncidenceDescription::enableRichTextDescription(
bool enable)
97 d->mRichTextEnabled = enable;
99 QString rt(
i18nc(
"@action Enable or disable rich text editing",
"Enable rich text"));
100 QString placeholder(QStringLiteral(
"<a href=\"show\">%1 >></a>"));
103 rt =
i18nc(
"@action Enable or disable rich text editing",
"Disable rich text");
104 placeholder = QStringLiteral(
"<a href=\"show\"><< %1</a>");
105 mUi->mDescriptionEdit->richTextComposer()->activateRichText();
106 d->mRealOriginalDescriptionEditContents = mUi->mDescriptionEdit->richTextComposer()->toHtml();
108 mUi->mDescriptionEdit->richTextComposer()->switchToPlainText();
109 d->mRealOriginalDescriptionEditContents = mUi->mDescriptionEdit->richTextComposer()->toPlainText();
112 placeholder = placeholder.arg(
rt);
113 mUi->mRichTextLabel->setText(placeholder);
114 mUi->mDescriptionEdit->richTextComposer()->setEnableActions(enable);
115 mUi->mEditToolBarPlaceHolder->setVisible(enable);
119void IncidenceDescription::toggleRichTextDescription()
121 enableRichTextDescription(!d->mRichTextEnabled);
124void IncidenceDescription::setupToolBar()
128 mUi->mDescriptionEdit->richTextComposer()->createActions(collection);
132 mEditToolBar->addAction(collection->action(QStringLiteral(
"format_text_bold")));
133 mEditToolBar->addAction(collection->action(QStringLiteral(
"format_text_italic")));
134 mEditToolBar->addAction(collection->action(QStringLiteral(
"format_text_underline")));
135 mEditToolBar->addAction(collection->action(QStringLiteral(
"format_text_strikeout")));
138 mEditToolBar->addAction(collection->action(QStringLiteral(
"format_font_family")));
139 mEditToolBar->addAction(collection->action(QStringLiteral(
"format_font_size")));
142 mEditToolBar->addAction(collection->action(QStringLiteral(
"format_text_foreground_color")));
143 mEditToolBar->addAction(collection->action(QStringLiteral(
"format_text_background_color")));
146 mEditToolBar->addAction(collection->action(QStringLiteral(
"format_list_style")));
149 mEditToolBar->addAction(collection->action(QStringLiteral(
"format_align_left")));
150 mEditToolBar->addAction(collection->action(QStringLiteral(
"format_align_center")));
151 mEditToolBar->addAction(collection->action(QStringLiteral(
"format_align_right")));
152 mEditToolBar->addAction(collection->action(QStringLiteral(
"format_align_justify")));
155 mEditToolBar->addAction(collection->action(QStringLiteral(
"format_painter")));
157 mEditToolBar->addAction(collection->action(QStringLiteral(
"manage_link")));
158 mUi->mDescriptionEdit->richTextComposer()->setEnableActions(
false);
160 auto layout =
new QGridLayout(mUi->mEditToolBarPlaceHolder);
165 mUi->mEditToolBarPlaceHolder->setVisible(
false);
166 d->mRichTextEnabled =
false;
174 if (mLoadedIncidence) {
175 qCDebug(
INCIDENCEEDITOR_LOG) <<
"Incidence description is rich " << mLoadedIncidence->descriptionIsRich();
177 if (mLoadedIncidence->descriptionIsRich()) {
178 qCDebug(
INCIDENCEEDITOR_LOG) <<
"desc is rich, and it is <desc>" << mLoadedIncidence->richDescription() <<
"</desc>; "
179 <<
"widget has <desc>" << mUi->mDescriptionEdit->richTextComposer()->toHtml() <<
"</desc>; "
180 <<
"expr mLoadedIncidence->richDescription() != mUi->mDescriptionEdit->toHtml() is "
181 << (mLoadedIncidence->richDescription() != mUi->mDescriptionEdit->richTextComposer()->toHtml());
183 qCDebug(
INCIDENCEEDITOR_LOG) <<
"desc is not rich, and it is <desc>" << mLoadedIncidence->description() <<
"</desc>; "
184 <<
"widget has <desc>" << mUi->mDescriptionEdit->richTextComposer()->toPlainText() <<
"</desc>; "
185 <<
"expr mLoadedIncidence->description() != mUi->mDescriptionEdit->toPlainText() is "
186 << (mLoadedIncidence->description() != mUi->mDescriptionEdit->richTextComposer()->toPlainText());
193#include "moc_incidencedescription.cpp"
bool isDirty() const override
Returns whether or not the current values in the editor differ from the initial values.
void save(const KCalendarCore::Incidence::Ptr &incidence) override
Store the current values of the editor into.
void load(const KCalendarCore::Incidence::Ptr &incidence) override
Load the values of.
void printDebugInfo() const override
Re-implement this and print important member values and widget enabled/disabled states that could hav...
KCal Incidences are complicated objects.
void checkDirtyStatus()
Checks if the dirty status has changed until last check and emits the dirtyStatusChanged signal if ne...
QSharedPointer< IncidenceT > incidence() const
Convenience method to get a pointer for a specific const Incidence Type.
QString i18nc(const char *context, const char *text, const TYPE &arg...)
void linkActivated(const QString &link)
T qobject_cast(QObject *object)
QFuture< ArgsType< Signal > > connect(Sender *sender, Signal signal)