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(
i18n(
"&Edit"));
154 mEditButton->setIcon(
QIcon::fromTheme(QStringLiteral(
"document-properties")));
156 mEditButton->setToolTip(
i18nc(
"@info:tooltip",
"Edit this journal entry"));
157 mEditButton->setWhatsThis(
i18n(
"Opens an editor dialog for this journal entry"));
158 buttonsLayout->addWidget(mEditButton);
162 mDeleteButton->setObjectName(
"deleteButton"_L1);
163 mDeleteButton->setText(
i18n(
"&Delete"));
166 mDeleteButton->setToolTip(
i18nc(
"@info:tooltip",
"Delete this journal entry"));
167 mDeleteButton->setWhatsThis(
i18n(
"Delete this journal entry"));
168 buttonsLayout->addWidget(mDeleteButton);
172 mPrintButton->setText(
i18n(
"&Print"));
173 mPrintButton->setObjectName(
"printButton"_L1);
176 mPrintButton->setToolTip(
i18nc(
"@info:tooltip",
"Print this journal entry"));
177 mPrintButton->setWhatsThis(
i18n(
"Opens a print dialog for this journal entry"));
178 buttonsLayout->addWidget(mPrintButton);
182 mPrintPreviewButton->setText(
i18n(
"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 buttonsLayout->addWidget(mPrintPreviewButton);
190 readJournal(mJournal);
194 setStyleSheet(QStringLiteral(
"QFrame { border: 1px solid; border-radius: 7px; } "));
195 mBrowser->setStyleSheet(QStringLiteral(
"QFrame { border: 0px solid white } "));
198JournalFrame::~JournalFrame() =
default;
200bool JournalFrame::eventFilter(
QObject *
object,
QEvent *event)
205 if (!mJournal.isValid()) {
209 switch (
event->type()) {
211 Q_EMIT incidenceSelected(mJournal, mDate);
214 Q_EMIT editIncidence(mJournal);
223void JournalFrame::deleteItem()
225 if (CalendarSupport::hasJournal(mJournal)) {
226 Q_EMIT deleteIncidence(mJournal);
230void JournalFrame::editItem()
232 if (CalendarSupport::hasJournal(mJournal)) {
233 Q_EMIT editIncidence(mJournal);
239 mCalendar = calendar;
242void JournalFrame::setDate(QDate date)
247void JournalFrame::setJournal(
const Akonadi::Item &journal)
249 if (!CalendarSupport::hasJournal(journal)) {
254 readJournal(journal);
259void JournalFrame::setDirty()
262 qCDebug(CALENDARVIEW_LOG);
265void JournalFrame::printJournal()
270void JournalFrame::printPreviewJournal()
275void JournalFrame::readJournal(
const Akonadi::Item &j)
281 QTextCursor
cursor = QTextCursor(mBrowser->textCursor());
284 QTextBlockFormat bodyBlock = QTextBlockFormat(
cursor.blockFormat());
287 QTextCharFormat bodyFormat = QTextCharFormat(
cursor.charFormat());
288 if (!journal->summary().isEmpty()) {
289 QTextCharFormat titleFormat = bodyFormat;
292 cursor.insertText(journal->summary(), titleFormat);
295 QTextCharFormat dateFormat = bodyFormat;
301 cursor.setBlockCharFormat(bodyFormat);
302 const QString description = journal->description();
303 if (journal->descriptionIsRich()) {
304 mBrowser->insertHtml(description);
306 mBrowser->insertPlainText(description);
309 mBrowser->setTextCursor(
cursor);
310 mBrowser->ensureCursorVisible();
318#include "moc_journalframe.cpp"
QSharedPointer< Calendar > Ptr
QSharedPointer< Journal > Ptr
QString i18nc(const char *context, const char *text, const TYPE &arg...)
QString i18n(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)