13#include "journalframe.h"
16#include <Akonadi/CalendarUtils>
17#include <CalendarSupport/Utils>
19#include <KCalendarCore/Journal>
21#include <KCalUtils/IncidenceFormatter>
23#include "calendarview_debug.h"
24#include <KLocalizedString>
25#include <QTextBrowser>
28#include <QFontDatabase>
39 layout->setContentsMargins({});
40 layout->setSpacing(0);
43JournalDateView::~JournalDateView() =
default;
45void JournalDateView::setDate(
QDate date)
48 Q_EMIT setDateSignal(date);
51void JournalDateView::clear()
58void JournalDateView::addJournal(
const Akonadi::Item &j)
61 if (
pos != mEntries.end()) {
65 auto container =
new QWidget(
this);
67 auto layout =
new QHBoxLayout(container);
69 auto entry =
new JournalFrame(j, mCalendar,
this);
70 layout->addWidget(entry, 3 );
74 entry->setDate(mDate);
75 entry->setIncidenceChanger(mChanger);
77 mEntries.insert(j.
id(), entry);
78 connect(
this, &JournalDateView::setIncidenceChangerSignal, entry, &JournalFrame::setIncidenceChanger);
79 connect(
this, &JournalDateView::setDateSignal, entry, &JournalFrame::setDate);
80 connect(entry, &JournalFrame::deleteIncidence,
this, &JournalDateView::deleteIncidence);
81 connect(entry, &JournalFrame::editIncidence,
this, &JournalDateView::editIncidence);
82 connect(entry, &JournalFrame::incidenceSelected,
this, &JournalDateView::incidenceSelected);
84 qOverload<const KCalendarCore::Journal::Ptr &, bool>(&JournalFrame::printJournal),
86 qOverload<const KCalendarCore::Journal::Ptr &, bool>(&JournalDateView::printJournal));
93 for (
const JournalFrame *
const i : std::as_const(mEntries)) {
99void JournalDateView::setIncidenceChanger(Akonadi::IncidenceChanger *changer)
102 Q_EMIT setIncidenceChangerSignal(changer);
105void JournalDateView::emitNewJournal()
110void JournalDateView::journalEdited(
const Akonadi::Item &journal)
113 if (
pos == mEntries.end()) {
117 pos.value()->setJournal(journal);
120void JournalDateView::journalDeleted(
const Akonadi::Item &journal)
123 if (
pos == mEntries.end()) {
134 , mCalendar(calendar)
137 mWriteInProgress =
false;
143 mBrowser->viewport()->installEventFilter(
this);
145 verticalLayout->addWidget(mBrowser);
148 verticalLayout->addLayout(buttonsLayout);
149 buttonsLayout->addStretch();
152 mEditButton->setObjectName(
"editButton"_L1);
153 mEditButton->setText(
i18nc(
"@action: button",
"&Edit"));
154 mEditButton->setIcon(
QIcon::fromTheme(QStringLiteral(
"document-properties")));
156 mEditButton->setToolTip(
i18nc(
"@info:tooltip",
"Edit this journal entry"));
157 mEditButton->setWhatsThis(
i18nc(
"@info:whatsthis",
"Opens an editor dialog for this journal entry"));
158 buttonsLayout->addWidget(mEditButton);
162 mDeleteButton->setObjectName(
"deleteButton"_L1);
163 mDeleteButton->setText(
i18nc(
"@action: button",
"&Delete"));
166 mDeleteButton->setToolTip(
i18nc(
"@info:tooltip",
"Delete this journal entry"));
167 mDeleteButton->setWhatsThis(
i18nc(
"@info:whatsthis",
"Delete this journal entry"));
168 buttonsLayout->addWidget(mDeleteButton);
172 mPrintButton->setText(
i18nc(
"@action: button",
"&Print"));
173 mPrintButton->setObjectName(
"printButton"_L1);
176 mPrintButton->setToolTip(
i18nc(
"@info:tooltip",
"Print this journal entry"));
177 mPrintButton->setWhatsThis(
i18nc(
"@info:whatsthis",
"Opens a print dialog for this journal entry"));
178 buttonsLayout->addWidget(mPrintButton);
182 mPrintPreviewButton->setText(
i18nc(
"@action: button",
"Print preview"));
183 mPrintPreviewButton->setObjectName(
"printButton"_L1);
184 mPrintPreviewButton->setIcon(
QIcon::fromTheme(QStringLiteral(
"document-print-preview")));
186 mPrintPreviewButton->setToolTip(
i18nc(
"@info:tooltip",
"Print preview this journal entry"));
187 mPrintPreviewButton->setWhatsThis(
i18nc(
"@info:whatsthis",
"Opens a print preview of this journal entry"));
188 buttonsLayout->addWidget(mPrintPreviewButton);
191 readJournal(mJournal);
195 setStyleSheet(QStringLiteral(
"QFrame { border: 1px solid; border-radius: 7px; } "));
196 mBrowser->setStyleSheet(QStringLiteral(
"QFrame { border: 0px solid white } "));
199JournalFrame::~JournalFrame() =
default;
201bool JournalFrame::eventFilter(
QObject *
object,
QEvent *event)
206 if (!mJournal.isValid()) {
210 switch (
event->type()) {
212 Q_EMIT incidenceSelected(mJournal, mDate);
215 Q_EMIT editIncidence(mJournal);
224void JournalFrame::deleteItem()
226 if (CalendarSupport::hasJournal(mJournal)) {
227 Q_EMIT deleteIncidence(mJournal);
231void JournalFrame::editItem()
233 if (CalendarSupport::hasJournal(mJournal)) {
234 Q_EMIT editIncidence(mJournal);
240 mCalendar = calendar;
243void JournalFrame::setDate(QDate date)
248void JournalFrame::setJournal(
const Akonadi::Item &journal)
250 if (!CalendarSupport::hasJournal(journal)) {
255 readJournal(journal);
260void JournalFrame::setDirty()
263 qCDebug(CALENDARVIEW_LOG);
266void JournalFrame::printJournal()
271void JournalFrame::printPreviewJournal()
276void JournalFrame::readJournal(
const Akonadi::Item &j)
282 QTextCursor
cursor = QTextCursor(mBrowser->textCursor());
285 QTextBlockFormat bodyBlock = QTextBlockFormat(
cursor.blockFormat());
288 QTextCharFormat bodyFormat = QTextCharFormat(
cursor.charFormat());
289 if (!journal->summary().isEmpty()) {
290 QTextCharFormat titleFormat = bodyFormat;
293 cursor.insertText(journal->summary(), titleFormat);
296 QTextCharFormat dateFormat = bodyFormat;
302 cursor.setBlockCharFormat(bodyFormat);
303 const QString description = journal->description();
304 if (journal->descriptionIsRich()) {
305 mBrowser->insertHtml(description);
307 mBrowser->insertPlainText(description);
310 mBrowser->setTextCursor(
cursor);
311 mBrowser->ensureCursorVisible();
319#include "moc_journalframe.cpp"
QSharedPointer< Calendar > Ptr
QSharedPointer< Journal > Ptr
QString i18nc(const char *context, const char *text, const TYPE &arg...)
AKONADI_CALENDAR_EXPORT KCalendarCore::Journal::Ptr journal(const Akonadi::Item &item)
Namespace EventViews provides facilities for displaying incidences, including events,...
int pointSize() const const
QFont systemFont(SystemFont type)
virtual bool event(QEvent *e) override
QIcon fromTheme(const QString &name)
void push_back(parameter_type value)
void reserve(qsizetype size)
QMetaObject::Connection connect(const QObject *sender, PointerToMemberFunction signal, Functor functor)
void setTextIndent(qreal indent)
void setFontPointSize(qreal size)
void setFontWeight(int weight)
QFuture< ArgsType< Signal > > connect(Sender *sender, Signal signal)