12#include "prefs_base.h"
14#include <CalendarSupport/KCalPrefs>
15#include <CalendarSupport/Utils>
17#include <Akonadi/TagCache>
19#include <KContacts/VCardDrag>
21#include <KCalUtils/ICalDrag>
22#include <KCalUtils/IncidenceFormatter>
23#include <KCalUtils/VCalDrag>
25#include <KEmailAddress>
27#include <KLocalizedString>
31#include <QDragEnterEvent>
35#include <QPainterPath>
36#include <QPixmapCache>
44QPixmap *AgendaItem::alarmPxmp =
nullptr;
45QPixmap *AgendaItem::recurPxmp =
nullptr;
46QPixmap *AgendaItem::readonlyPxmp =
nullptr;
47QPixmap *AgendaItem::replyPxmp =
nullptr;
48QPixmap *AgendaItem::groupPxmp =
nullptr;
49QPixmap *AgendaItem::groupPxmpTent =
nullptr;
50QPixmap *AgendaItem::organizerPxmp =
nullptr;
51QPixmap *AgendaItem::eventPxmp =
nullptr;
55AgendaItem::AgendaItem(
EventView *eventView,
64 , mEventView(eventView)
67 , mOccurrenceDateTime(qd)
68 , mSelected(isSelected)
69 , mSpecialEvent(false)
78 || mIncidence->customProperty(
"KABC",
"ANNIVERSARY") ==
QLatin1StringView(
"YES")) {
81 mIncidence->setReadOnly(
false);
82 mIncidence->setSummary(
i18np(
"%2 (1 year)",
"%2 (%1 years)", years, mIncidence->summary()));
83 mIncidence->setReadOnly(
true);
88 mLabelText = mIncidence->summary();
91 mIconReadonly =
false;
94 mIconGroupTent =
false;
95 mIconOrganizer =
false;
96 mMultiItemInfo =
nullptr;
97 mStartMoveInfo =
nullptr;
100 mItemCount = itemCount;
108 setMouseTracking(
true);
109 mResourceColor =
QColor();
112 setAcceptDrops(
true);
115AgendaItem::~AgendaItem() =
default;
117void AgendaItem::updateIcons()
122 mIconReadonly = mIncidence->isReadOnly();
123 mIconRecur = mIncidence->recurs() || mIncidence->hasRecurrenceId();
124 mIconAlarm = mIncidence->hasEnabledAlarms();
125 if (mIncidence->attendeeCount() > 1) {
126 if (mEventView->kcalPreferences()->thatIsMe(mIncidence->organizer().email())) {
129 mIconGroupTent =
false;
130 mIconOrganizer =
true;
138 mIconGroupTent =
false;
139 mIconOrganizer =
false;
143 mIconGroupTent =
true;
144 mIconOrganizer =
false;
148 mIconGroupTent =
false;
149 mIconOrganizer =
false;
154 mIconGroupTent =
false;
155 mIconOrganizer =
false;
162void AgendaItem::select(
bool selected)
164 if (mSelected != selected) {
165 mSelected = selected;
170bool AgendaItem::dissociateFromMultiItem()
172 if (!isMultiItem()) {
177 if (firstItem ==
this) {
178 firstItem = nextMultiItem();
182 if (lastItem ==
this) {
183 lastItem = prevMultiItem();
190 prevItem->setMultiItem(firstItem, prevItem->prevMultiItem(), nextItem, lastItem);
193 nextItem->setMultiItem(firstItem, prevItem, nextItem->prevMultiItem(), lastItem);
195 delete mMultiItemInfo;
196 mMultiItemInfo =
nullptr;
206 mLabelText = mIncidence->summary();
214int AgendaItem::cellHeight()
const
216 return mCellYBottom - mCellYTop + 1;
222int AgendaItem::cellWidth()
const
224 return mCellXRight - mCellXLeft + 1;
227void AgendaItem::setOccurrenceDateTime(
const QDateTime &qd)
229 mOccurrenceDateTime = qd;
232QDate AgendaItem::occurrenceDate()
const
237void AgendaItem::setCellXY(
int X,
int YTop,
int YBottom)
241 mCellYBottom = YBottom;
244void AgendaItem::setCellXRight(
int XRight)
246 mCellXRight = XRight;
249void AgendaItem::setCellX(
int XLeft,
int XRight)
252 mCellXRight = XRight;
255void AgendaItem::setCellY(
int YTop,
int YBottom)
258 mCellYBottom = YBottom;
263 if (!mMultiItemInfo) {
264 mMultiItemInfo =
new MultiItemInfo;
266 mMultiItemInfo->mFirstMultiItem = first;
267 mMultiItemInfo->mPrevMultiItem = prev;
268 mMultiItemInfo->mNextMultiItem =
next;
269 mMultiItemInfo->mLastMultiItem = last;
272bool AgendaItem::isMultiItem()
const
274 return mMultiItemInfo;
286 first = mMultiItemInfo->mFirstMultiItem;
287 last = mMultiItemInfo->mLastMultiItem;
296 e->setMultiItem(
nullptr,
nullptr, first, last);
297 first->setMultiItem(e, e, first->nextMultiItem(), first->lastMultiItem());
301 tmp->setMultiItem(e, tmp->prevMultiItem(), tmp->nextMultiItem(), tmp->lastMultiItem());
302 tmp = tmp->nextMultiItem();
305 if (mStartMoveInfo && !e->moveInfo()) {
306 e->mStartMoveInfo =
new MultiItemInfo(*mStartMoveInfo);
309 e->moveInfo()->mPrevMultiItem =
nullptr;
310 e->moveInfo()->mNextMultiItem = first;
313 if (first && first->moveInfo()) {
314 first->moveInfo()->mPrevMultiItem = e;
328 first = mMultiItemInfo->mFirstMultiItem;
329 last = mMultiItemInfo->mLastMultiItem;
338 e->setMultiItem(first, last,
nullptr,
nullptr);
342 tmp->setMultiItem(tmp->firstMultiItem(), tmp->prevMultiItem(), tmp->nextMultiItem(), e);
343 tmp = tmp->nextMultiItem();
345 last->setMultiItem(last->firstMultiItem(), last->prevMultiItem(), e, e);
347 if (mStartMoveInfo && !e->moveInfo()) {
348 e->mStartMoveInfo =
new MultiItemInfo(*mStartMoveInfo);
351 e->moveInfo()->mPrevMultiItem = last;
352 e->moveInfo()->mNextMultiItem =
nullptr;
354 if (last && last->moveInfo()) {
355 last->moveInfo()->mNextMultiItem = e;
374 first = first->nextMultiItem();
375 first->setMultiItem(
nullptr,
nullptr, first->nextMultiItem(), first->lastMultiItem());
378 last = last->prevMultiItem();
379 last->setMultiItem(last->firstMultiItem(), last->prevMultiItem(),
nullptr,
nullptr);
384 delete mMultiItemInfo;
386 mMultiItemInfo =
nullptr;
389 next = tmp->nextMultiItem();
390 prev = tmp->prevMultiItem();
395 prev = prev->prevMultiItem();
397 tmp->setMultiItem((tmp == first) ?
nullptr : first, (tmp == prev) ? nullptr : prev, (tmp ==
next) ? nullptr :
next, (tmp == last) ? nullptr : last);
398 tmp = tmp->nextMultiItem();
408 if (isMultiItem() && mMultiItemInfo->mFirstMultiItem) {
409 first = mMultiItemInfo->mFirstMultiItem;
411 first->startMovePrivate();
416 mStartMoveInfo =
new MultiItemInfo;
417 mStartMoveInfo->mStartCellXLeft = mCellXLeft;
418 mStartMoveInfo->mStartCellXRight = mCellXRight;
419 mStartMoveInfo->mStartCellYTop = mCellYTop;
420 mStartMoveInfo->mStartCellYBottom = mCellYBottom;
421 if (mMultiItemInfo) {
422 mStartMoveInfo->mFirstMultiItem = mMultiItemInfo->mFirstMultiItem;
423 mStartMoveInfo->mLastMultiItem = mMultiItemInfo->mLastMultiItem;
424 mStartMoveInfo->mPrevMultiItem = mMultiItemInfo->mPrevMultiItem;
425 mStartMoveInfo->mNextMultiItem = mMultiItemInfo->mNextMultiItem;
427 mStartMoveInfo->mFirstMultiItem =
nullptr;
428 mStartMoveInfo->mLastMultiItem =
nullptr;
429 mStartMoveInfo->mPrevMultiItem =
nullptr;
430 mStartMoveInfo->mNextMultiItem =
nullptr;
432 if (isMultiItem() && mMultiItemInfo->mNextMultiItem) {
433 mMultiItemInfo->mNextMultiItem->startMovePrivate();
439 if (mStartMoveInfo) {
440 if (mStartMoveInfo->mFirstMultiItem) {
441 mStartMoveInfo->mFirstMultiItem->resetMovePrivate();
448void AgendaItem::resetMovePrivate()
450 if (mStartMoveInfo) {
451 mCellXLeft = mStartMoveInfo->mStartCellXLeft;
452 mCellXRight = mStartMoveInfo->mStartCellXRight;
453 mCellYTop = mStartMoveInfo->mStartCellYTop;
454 mCellYBottom = mStartMoveInfo->mStartCellYBottom;
459 if (mMultiItemInfo) {
461 mMultiItemInfo->mFirstMultiItem = mStartMoveInfo->mFirstMultiItem;
462 mMultiItemInfo->mPrevMultiItem = mStartMoveInfo->mPrevMultiItem;
463 mMultiItemInfo->mNextMultiItem = mStartMoveInfo->mNextMultiItem;
464 mMultiItemInfo->mLastMultiItem = mStartMoveInfo->mLastMultiItem;
466 if (!mStartMoveInfo->mFirstMultiItem) {
472 if (nowDel->moveInfo()) {
473 toDel = nowDel->moveInfo()->mPrevMultiItem;
475 Q_EMIT removeAgendaItem(nowDel);
477 mMultiItemInfo->mFirstMultiItem =
nullptr;
478 mMultiItemInfo->mPrevMultiItem =
nullptr;
480 if (!mStartMoveInfo->mLastMultiItem) {
486 if (nowDel->moveInfo()) {
487 toDel = nowDel->moveInfo()->mNextMultiItem;
489 Q_EMIT removeAgendaItem(nowDel);
491 mMultiItemInfo->mLastMultiItem =
nullptr;
492 mMultiItemInfo->mNextMultiItem =
nullptr;
495 if (mStartMoveInfo->mFirstMultiItem ==
nullptr && mStartMoveInfo->mLastMultiItem ==
nullptr) {
497 delete mMultiItemInfo;
498 mMultiItemInfo =
nullptr;
501 delete mStartMoveInfo;
502 mStartMoveInfo =
nullptr;
504 Q_EMIT showAgendaItem(
this);
505 if (nextMultiItem()) {
506 nextMultiItem()->resetMovePrivate();
516 first->endMovePrivate();
519void AgendaItem::endMovePrivate()
521 if (mStartMoveInfo) {
523 if (!firstMultiItem() || firstMultiItem() ==
this) {
528 if (nowDel->moveInfo()) {
529 toDel = nowDel->moveInfo()->mPrevMultiItem;
531 Q_EMIT removeAgendaItem(nowDel);
535 if (!lastMultiItem() || lastMultiItem() ==
this) {
540 if (nowDel->moveInfo()) {
541 toDel = nowDel->moveInfo()->mNextMultiItem;
543 Q_EMIT removeAgendaItem(nowDel);
547 delete mStartMoveInfo;
548 mStartMoveInfo =
nullptr;
549 if (nextMultiItem()) {
550 nextMultiItem()->endMovePrivate();
555void AgendaItem::moveRelative(
int dx,
int dy)
557 int newXLeft = cellXLeft() + dx;
558 int newXRight = cellXRight() + dx;
559 int newYTop = cellYTop() + dy;
560 int newYBottom = cellYBottom() + dy;
561 setCellXY(newXLeft, newYTop, newYBottom);
562 setCellXRight(newXRight);
567 int newYTop = cellYTop() + dy;
568 int newYBottom = cellYBottom();
569 if (newYTop > newYBottom && !allowOverLimit) {
570 newYTop = newYBottom;
572 setCellY(newYTop, newYBottom);
575void AgendaItem::expandBottom(
int dy)
577 int newYTop = cellYTop();
578 int newYBottom = cellYBottom() + dy;
579 if (newYBottom < newYTop) {
580 newYBottom = newYTop;
582 setCellY(newYTop, newYBottom);
585void AgendaItem::expandLeft(
int dx)
587 int newXLeft = cellXLeft() + dx;
588 int newXRight = cellXRight();
589 if (newXLeft > newXRight) {
590 newXLeft = newXRight;
592 setCellX(newXLeft, newXRight);
595void AgendaItem::expandRight(
int dx)
597 int newXLeft = cellXLeft();
598 int newXRight = cellXRight() + dx;
599 if (newXRight < newXLeft) {
600 newXRight = newXLeft;
602 setCellX(newXLeft, newXRight);
620void AgendaItem::addAttendee(
const QString &newAttendee)
633 i18nc(
"@title:window",
"Attendee added"),
634 QStringLiteral(
"AttendeeDroppedAdded"));
661 QString em(addressee.fullEmail());
663 em = addressee.realName();
672 return mConflictItems;
679 (*it)->addConflictItem(
this);
685 if (!mConflictItems.contains(ci)) {
686 mConflictItems.append(ci);
690QString AgendaItem::label()
const
699 if (cellXLeft() <= other->cellXRight() && cellXRight() >= other->cellXLeft()) {
700 if ((cellYTop() <= other->cellYBottom()) && (cellYBottom() >= other->cellYTop())) {
708static void conditionalPaint(
QPainter *p,
bool condition,
int &x,
int y,
int ft,
const QPixmap &pxmp)
712 x += pxmp.
width() + ft;
716void AgendaItem::paintIcon(
QPainter *p,
int &x,
int y,
int ft)
719 if (mIncidence->customProperty(
"KABC",
"ANNIVERSARY") ==
QLatin1StringView(
"YES")) {
720 mSpecialEvent =
true;
721 iconName = QStringLiteral(
"view-calendar-wedding-anniversary");
722 }
else if (mIncidence->customProperty(
"KABC",
"BIRTHDAY") ==
QLatin1StringView(
"YES")) {
723 mSpecialEvent =
true;
730void AgendaItem::paintIcons(
QPainter *p,
int &x,
int y,
int ft)
732 if (!mEventView->preferences()->enableAgendaItemIcons()) {
736 paintIcon(p,
x,
y, ft);
740 if (icons.
contains(EventViews::EventView::CalendarCustomIcon)) {
741 const QString iconName = mCalendar->iconForIncidence(mIncidence);
747 const bool isTodo = mIncidence && mIncidence->type() == Incidence::TypeTodo;
749 if (isTodo && icons.
contains(EventViews::EventView::TaskIcon)) {
751 conditionalPaint(p, !mSpecialEvent,
x,
y, ft,
QIcon::fromTheme(iconName).pixmap(16, 16));
754 if (icons.
contains(EventView::RecurringIcon)) {
755 conditionalPaint(p, mIconRecur && !mSpecialEvent,
x,
y, ft, *recurPxmp);
758 if (icons.
contains(EventView::ReminderIcon)) {
759 conditionalPaint(p, mIconAlarm && !mSpecialEvent,
x,
y, ft, *alarmPxmp);
762 if (icons.
contains(EventView::ReadOnlyIcon)) {
763 conditionalPaint(p, mIconReadonly && !mSpecialEvent,
x,
y, ft, *readonlyPxmp);
766 if (icons.
contains(EventView::ReplyIcon)) {
767 conditionalPaint(p, mIconReply,
x,
y, ft, *replyPxmp);
770 if (icons.
contains(EventView::AttendingIcon)) {
771 conditionalPaint(p, mIconGroup,
x,
y, ft, *groupPxmp);
774 if (icons.
contains(EventView::TentativeIcon)) {
775 conditionalPaint(p, mIconGroupTent,
x,
y, ft, *groupPxmpTent);
778 if (icons.
contains(EventView::OrganizerIcon)) {
779 conditionalPaint(p, mIconOrganizer,
x,
y, ft, *organizerPxmp);
800 const int fmargin = 0;
803 const int margin = 5 + ft + fmargin;
820 const auto categoryColor = getCategoryColor();
821 const auto resourceColor = mResourceColor.
isValid() ? mResourceColor : categoryColor;
822 const auto frameColor = getFrameColor(resourceColor, categoryColor);
823 const auto bgBaseColor = getBackgroundColor(resourceColor, categoryColor);
824 const auto bgColor = mSelected ? bgBaseColor.lighter(EventView::BRIGHTNESS_FACTOR) : bgBaseColor;
829 p.
setFont(mEventView->preferences()->agendaViewFont());
834 const bool roundTop = !prevMultiItem();
835 const bool roundBottom = !nextMultiItem();
852 if (!isMultiItem()) {
855 if (CalendarSupport::hasEvent(mIncidence)) {
861 }
else if (!mMultiItemInfo->mFirstMultiItem) {
866 longH =
i18n(
"- %1", shortH);
877 const bool completelyRenderable = th < (
height() - 2 * ft - 2 - hlHeight);
885 int x = qRound((
width() - 16) / 2.0);
886 paintIcon(&p,
x , margin, ft);
891 if ((2 * singleLineHeight) > (
height() - 2 * margin)) {
895 if (mIncidence->allDay()) {
897 const int y = qRound((
height() - 16) / 2.0);
898 paintIcons(&p,
x,
y, ft);
899 txtWidth = visRect.
right() - margin -
x;
901 const int y = qRound((
height() - 16) / 2.0);
902 paintIcons(&p,
x,
y, ft);
903 txtWidth =
width() - margin -
x;
906 const int y = ((
height() - singleLineHeight) / 2) + fm.
ascent();
913 if (((!completelyRenderable) && ((
height() - (2 * margin)) <= (5 * singleLineHeight)))
914 || (isMultiItem() && mMultiItemInfo->mNextMultiItem && mMultiItemInfo->mFirstMultiItem)) {
918 if (mIncidence->allDay()) {
920 paintIcons(&p,
x, margin, ft);
921 txtWidth = visRect.
right() - margin -
x;
923 paintIcons(&p,
x, margin, ft);
924 txtWidth =
width() - margin -
x;
935 int y = 2 * ft + hlHeight;
936 if (completelyRenderable) {
937 y += (
height() - (2 * ft) - margin - hlHeight - th) / 2;
945 if (mIncidence->allDay()) {
952 shortH =
i18n(
"%1 - %2",
959 QRect(fmargin, fmargin,
width() - fmargin * 2, -fmargin * 2 + margin + hlHeight),
972 QRect(fmargin, fmargin,
width() - fmargin * 2, -fmargin * 2 + margin + hlHeight),
986 QRect(fmargin, fmargin,
width() - fmargin * 2, -fmargin * 2 + margin + hlHeight),
998 txtWidth = visRect.
right() - margin -
x;
999 paintIcons(&p,
x, margin / 2, ft);
1000 hTxtWidth = visRect.
right() - margin -
x;
1004 QRect(fmargin, fmargin,
width() - fmargin * 2, -fmargin * 2 + margin + hlHeight),
1013 txtWidth =
width() - margin -
x;
1015 paintIcons(&p,
x, margin / 2, ft);
1016 hTxtWidth =
width() - margin -
x;
1021 if (hw > hTxtWidth) {
1024 if (hw < txtWidth) {
1025 x += (hTxtWidth - hw) / 2;
1029 x += (hTxtWidth - hw) / 2;
1048void AgendaItem::drawRoundedRect(
QPainter *p,
1052 const QColor &frameColor,
1065 const int RECT_MARGIN = 2;
1066 const int RADIUS = 2;
1068 const QRect rectWithMargin(
rect.x() + RECT_MARGIN,
rect.y() + RECT_MARGIN,
rect.width() - 2 * RECT_MARGIN,
rect.height() - 2 * RECT_MARGIN);
1070 const QPoint pointLeftTop(rectWithMargin.x(), rectWithMargin.y());
1071 const QPoint pointRightTop(rectWithMargin.x() + rectWithMargin.width(), rectWithMargin.y());
1072 const QPoint pointLeftBottom(rectWithMargin.x(), rectWithMargin.y() + rectWithMargin.height());
1073 const QPoint pointRightBottom(rectWithMargin.x() + rectWithMargin.width(), rectWithMargin.y() + rectWithMargin.height());
1075 if (!roundTop && !roundBottom) {
1076 path.addRect(rectWithMargin);
1077 }
else if (roundTop && roundBottom) {
1079 }
else if (roundTop) {
1080 path.moveTo(pointRightBottom);
1081 path.lineTo(pointLeftBottom);
1082 path.lineTo(
QPoint(pointLeftTop.x(), pointLeftTop.y() + RADIUS));
1083 path.quadTo(pointLeftTop,
QPoint(pointLeftTop.x() + RADIUS, pointLeftTop.y()));
1084 path.lineTo(
QPoint(pointRightTop.x() - RADIUS, pointRightTop.y()));
1085 path.quadTo(pointRightTop,
QPoint(pointRightTop.x(), pointRightTop.y() + RADIUS));
1086 path.lineTo(pointRightBottom);
1087 }
else if (roundBottom) {
1088 path.moveTo(pointRightTop);
1089 path.lineTo(
QPoint(pointRightBottom.x(), pointRightBottom.y() - RADIUS));
1090 path.quadTo(pointRightBottom,
QPoint(pointRightBottom.x() - RADIUS, pointRightBottom.y()));
1091 path.lineTo(
QPoint(pointLeftBottom.x() + RADIUS, pointLeftBottom.y()));
1092 path.quadTo(pointLeftBottom,
QPoint(pointLeftBottom.x(), pointLeftBottom.y() - RADIUS));
1093 path.lineTo(pointLeftTop);
1094 path.lineTo(pointRightTop);
1097 path.closeSubpath();
1109 brushSolid.setColor(top);
1126QColor AgendaItem::getCategoryColor()
const
1128 const QStringList &categories = mIncidence->categories();
1130 const auto colorPreference = mEventView->preferences()->agendaViewColors();
1131 if (colorPreference == PrefsBase::CategoryOnly || !mResourceColor.
isValid()) {
1132 return CalendarSupport::KCalPrefs::instance()->unsetCategoryColor();
1134 return mResourceColor;
1141 const auto colorPreference = mEventView->preferences()->agendaViewColors();
1142 const bool frameDisplaysCategory = (colorPreference == PrefsBase::CategoryOnly || colorPreference == PrefsBase::ResourceInsideCategoryOutside);
1143 return frameDisplaysCategory ? categoryColor :
resourceColor;
1148 if (CalendarSupport::hasTodo(mIncidence) && !mEventView->preferences()->todosUseCategoryColors()) {
1151 const QDate dueDate =
todo->dtDue().toLocalTime().date();
1153 const QDate occurrenceDate = this->occurrenceDate();
1154 if (
todo->isOverdue() && today >= occurrenceDate) {
1155 return mEventView->preferences()->todoOverdueColor();
1156 }
else if (dueDate == today && dueDate == occurrenceDate && !
todo->isCompleted()) {
1157 return mEventView->preferences()->todoDueTodayColor();
1160 const auto colorPreference = mEventView->preferences()->agendaViewColors();
1161 const bool bgDisplaysCategory = (colorPreference == PrefsBase::CategoryOnly || colorPreference == PrefsBase::CategoryInsideResourceOutside);
1175bool AgendaItem::event(
QEvent *event)
1178 if (!mEventView->preferences()->enableToolTips()) {
1180 }
else if (mValid) {
1190#include "moc_agendaitem.cpp"
QColor tagColor(const QString &tagName) const
static TagCache * instance()
This class describes the widgets that represent the various calendar items in the agenda view.
bool overlaps(CellItem *o) const override
Tells whether this item overlaps item o.
void endMove()
End the movement (i.e.
void expandTop(int dy, const bool allowOverLimit=false)
Expands the item's top.
void startMovePrivate()
private movement functions.
void resetMove()
Reset to original values.
void startMove()
Start movement.
EventView is the abstract base class from which all other calendar views for event data are derived.
QSharedPointer< Incidence > Ptr
QRect boundingRect() const
static KWordWrap formatText(QFontMetrics &fm, const QRect &r, int flags, const QString &str, int len=-1)
static void drawFadeoutText(QPainter *p, int x, int y, int maxW, const QString &t)
void drawText(QPainter *painter, int x, int y, int flags=Qt::AlignLeft) const
QString wrappedString() const
QString i18np(const char *singular, const char *plural, const TYPE &arg...)
QString i18nc(const char *context, const char *text, const TYPE &arg...)
QString i18n(const char *text, const TYPE &arg...)
AKONADI_CALENDAR_EXPORT KCalendarCore::Incidence::Ptr incidence(const Akonadi::Item &item)
AKONADI_CALENDAR_EXPORT KCalendarCore::Todo::Ptr todo(const Akonadi::Item &item)
AKONADI_CALENDAR_EXPORT KCalendarCore::Event::Ptr event(const Akonadi::Item &item)
char * toString(const EngineQuery &query)
Namespace EventViews provides facilities for displaying incidences, including events,...
EVENTVIEWS_EXPORT QColor resourceColor(const Akonadi::Collection &collection, const PrefsPtr &preferences)
This method returns the proper resource / subresource color for the view.
QPixmap cachedSmallIcon(const QString &name)
Equivalent to SmallIcon( name ), but uses QPixmapCache.
int yearDiff(QDate start, QDate end)
Returns the number of years between the start QDate and the end QDate (i.e.
QColor getTextColor(const QColor &c)
Returns a nice QColor for text, give the input color &c.
KCALUTILS_EXPORT bool canDecode(const QMimeData *)
KCALUTILS_EXPORT bool canDecode(const QMimeData *)
QString path(const QString &relativePath)
void information(QWidget *parent, const QString &text, const QString &title=QString(), const QString &dontShowAgainName=QString(), Options options=Notify)
KIOCORE_EXPORT QStringList list(const QString &fileClass)
const QList< QKeySequence > & next()
const QList< QKeySequence > & end()
QString name(StandardShortcut id)
QColor darker(int factor) const const
bool isValid() const const
QDateTime toLocalTime() const const
const QMimeData * mimeData() const const
QRect boundingRect(QChar ch) const const
QIcon fromTheme(const QString &name)
bool isEmpty() const const
QString toString(QDate date, FormatType format) const const
bool hasText() const const
QString text() const const
virtual bool eventFilter(QObject *watched, QEvent *event)
void drawPath(const QPainterPath &path)
void drawPixmap(const QPoint &point, const QPixmap &pixmap)
QFontMetrics fontMetrics() const const
void setBackground(const QBrush &brush)
void setBrush(Qt::BrushStyle style)
void setFont(const QFont &font)
void setPen(Qt::PenStyle style)
void setRenderHint(RenderHint hint, bool on)
const QRect & rect() const const
void setColor(ColorGroup group, ColorRole role, const QColor &color)
bool isValid() const const
QRect boundingRect() const const
bool contains(const QSet< T > &other) const const
bool isEmpty() const const
bool startsWith(QChar c, Qt::CaseSensitivity cs) const const
QTextStream & left(QTextStream &stream)
QTextStream & ws(QTextStream &stream)
QTimeZone systemTimeZone()
void showText(const QPoint &pos, const QString &text, QWidget *w, const QRect &rect, int msecDisplayTime)