Branch 'kolab/integration/4.13.0' - 6 commits - calendarviews/agenda incidenceeditor-ng/resourcemanagement.cpp korganizer/views
Sandro Knauß
knauss at kolabsys.com
Fri Mar 13 17:57:15 CET 2015
calendarviews/agenda/agenda.cpp | 79 ++++++++++++++-----
calendarviews/agenda/agenda.h | 8 -
calendarviews/agenda/agendaitem.cpp | 4
calendarviews/agenda/agendaview.cpp | 55 ++++++-------
calendarviews/agenda/agendaview.h | 1
calendarviews/agenda/viewcalendar.cpp | 29 ++++++
calendarviews/agenda/viewcalendar.h | 4
incidenceeditor-ng/resourcemanagement.cpp | 7 +
korganizer/views/collectionview/calendardelegate.cpp | 28 +++++-
korganizer/views/collectionview/calendardelegate.h | 3
korganizer/views/collectionview/quickview.cpp | 7 +
11 files changed, 161 insertions(+), 64 deletions(-)
New commits:
commit 140da9f7e3aa16c41edb424ca3c5c754106b57f2
Author: Sandro Knauà <knauss at kolabsys.com>
Date: Fri Mar 13 17:23:58 2015 +0100
Fix the delete exception behaviour.
if only the exception is deleted, than update the main event after the
deletion and not delete every agendaitem.
KOLAB: 4844
diff --git a/calendarviews/agenda/agenda.cpp b/calendarviews/agenda/agenda.cpp
index 03dec7d..a9f8ae6 100644
--- a/calendarviews/agenda/agenda.cpp
+++ b/calendarviews/agenda/agenda.cpp
@@ -1923,8 +1923,13 @@ void Agenda::removeIncidence( const KCalCore::Incidence::Ptr &incidence )
return;
}
foreach ( const AgendaItem::QPtr &agendaItem, agendaItems ) {
- if ( agendaItem && !removeAgendaItem( agendaItem ) ) {
- kWarning() << "Agenda::removeIncidence() Failed to remove " << incidence->uid();
+ if (agendaItem) {
+ if (incidence->instanceIdentifier() != agendaItem->incidence()->instanceIdentifier() ) {
+ continue;
+ }
+ if ( !removeAgendaItem( agendaItem ) ) {
+ kWarning() << "Agenda::removeIncidence() Failed to remove " << incidence->uid();
+ }
}
}
}
diff --git a/calendarviews/agenda/agendaview.cpp b/calendarviews/agenda/agendaview.cpp
index 08d6c83..c26d883 100644
--- a/calendarviews/agenda/agendaview.cpp
+++ b/calendarviews/agenda/agendaview.cpp
@@ -479,10 +479,10 @@ void AgendaView::Private::calendarIncidenceDeleted( const KCalCore::Incidence::P
if ( incidence->hasRecurrenceId()) {
// Reevaluate the main event, if it exists. The exception was removed so the main recurrent series
// will no be bigger.
- if ( mViewCalendar->isValid(incidence) ) {
- KCalCore::Incidence::Ptr mainIncidence = q->calendar2(incidence)->incidence( incidence->uid() );
+ if ( mViewCalendar->isValid(incidence->uid()) ) {
+ KCalCore::Incidence::Ptr mainIncidence = q->calendar2(incidence->uid())->incidence( incidence->uid() );
if ( mainIncidence ) {
- reevaluateIncidence( mainIncidence );
+ reevaluateIncidence( mainIncidence );
}
}
} else if ( mightBeVisible( incidence ) ) {
@@ -847,6 +847,10 @@ KCalCore::Calendar::Ptr AgendaView::calendar2(KCalCore::Incidence::Ptr incidence
return d->mViewCalendar->findCalendar(incidence)->getCalendar();
}
+KCalCore::Calendar::Ptr AgendaView::calendar2(const QString &incidenceIdentifier) const
+{
+ return d->mViewCalendar->findCalendar(incidenceIdentifier)->getCalendar();
+}
void AgendaView::setCalendar( const Akonadi::ETMCalendar::Ptr &cal )
{
@@ -2176,8 +2180,10 @@ void AgendaView::removeIncidence( const KCalCore::Incidence::Ptr &incidence )
d->mAllDayAgenda->removeIncidence( incidence );
d->mAgenda->removeIncidence( incidence );
- if ( !incidence->hasRecurrenceId() && d->mViewCalendar->isValid(incidence)) {
- KCalCore::Incidence::List exceptions = calendar2(incidence)->instances( incidence );
+ if (!incidence->hasRecurrenceId() && d->mViewCalendar->isValid(incidence->uid())) {
+ // Deleted incidence is an main incidence
+ // Delete all exceptions as well
+ KCalCore::Incidence::List exceptions = calendar2(incidence->uid())->instances( incidence );
foreach ( const KCalCore::Incidence::Ptr &exception, exceptions ) {
if ( exception->allDay() ) {
d->mAllDayAgenda->removeIncidence( exception );
diff --git a/calendarviews/agenda/agendaview.h b/calendarviews/agenda/agendaview.h
index 03b49f6..c5b1a1e 100644
--- a/calendarviews/agenda/agendaview.h
+++ b/calendarviews/agenda/agendaview.h
@@ -161,6 +161,7 @@ class EVENTVIEWS_EXPORT AgendaView : public EventView
* TODO: replace EventsView::calendar()
*/
virtual KCalCore::Calendar::Ptr calendar2(KCalCore::Incidence::Ptr incidence) const;
+ virtual KCalCore::Calendar::Ptr calendar2(const QString &incidenceIdentifier) const;
public slots:
virtual void updateView();
commit dc9c162082ea1ec095033f62daf351682393645b
Author: Sandro Knauà <knauss at kolabsys.com>
Date: Fri Mar 13 17:23:21 2015 +0100
some cleanup
diff --git a/calendarviews/agenda/agendaitem.cpp b/calendarviews/agenda/agendaitem.cpp
index 6625dd1..5ef3f9b 100644
--- a/calendarviews/agenda/agendaitem.cpp
+++ b/calendarviews/agenda/agendaitem.cpp
@@ -844,7 +844,7 @@ void AgendaItem::paintEvent( QPaintEvent *ev )
todo->dtDue().toTimeSpec( CalendarSupport::KCalPrefs::instance()->timeSpec() ).date();
const QDate today =
KDateTime::currentDateTime( CalendarSupport::KCalPrefs::instance()->timeSpec() ).date();
- const QDate occurrenceDate = mOccurrenceDateTime.toTimeSpec( CalendarSupport::KCalPrefs::instance()->timeSpec() ).date();
+ const QDate occurrenceDate = this->occurrenceDate();
if ( todo->isOverdue() && today >= occurrenceDate ) {
bgColor = mEventView->preferences()->todoOverdueColor();
} else if ( dueDate == today && dueDate == occurrenceDate ) {
@@ -1362,7 +1362,7 @@ bool AgendaItem::event( QEvent *event )
KCalUtils::IncidenceFormatter::toolTipStr(
mCalendar->displayName(mIncidence),
mIncidence,
- mOccurrenceDateTime.toTimeSpec( mEventView->preferences()->timeSpec() ).date(), true, mEventView->preferences()->timeSpec() ),
+ occurrenceDate(), true, mEventView->preferences()->timeSpec() ),
this );
}
}
commit e4c6ef862312e540077bacabfc2cbe9ed3e3f761
Author: Sandro Knauà <knauss at kolabsys.com>
Date: Fri Mar 13 17:20:53 2015 +0100
ViewCalendar: Add support for search incidences via instanceIdentifier
If exceptions form incidences are deleted, we need a way to get to the
corresponding main incidence. Because the exception itself is already
deleted, we have to search via the uid.
diff --git a/calendarviews/agenda/viewcalendar.cpp b/calendarviews/agenda/viewcalendar.cpp
index aa1555d..8aeb095 100644
--- a/calendarviews/agenda/viewcalendar.cpp
+++ b/calendarviews/agenda/viewcalendar.cpp
@@ -46,6 +46,16 @@ ViewCalendar::Ptr MultiViewCalendar::findCalendar(const KCalCore::Incidence::Ptr
return ViewCalendar::Ptr();
}
+ViewCalendar::Ptr MultiViewCalendar::findCalendar(const QString &incidenceIdentifier) const
+{
+ foreach(const ViewCalendar::Ptr &cal, mSubCalendars) {
+ if (cal->isValid(incidenceIdentifier)) {
+ return cal;
+ }
+ }
+ return ViewCalendar::Ptr();
+}
+
void MultiViewCalendar::addCalendar(const ViewCalendar::Ptr &calendar)
{
if (!mSubCalendars.contains(calendar)) {
@@ -87,6 +97,13 @@ bool MultiViewCalendar::isValid(const KCalCore::Incidence::Ptr &incidence) const
return cal;
}
+bool MultiViewCalendar::isValid(const QString &incidenceIdentifier) const
+{
+ ViewCalendar::Ptr cal = findCalendar(incidenceIdentifier);
+ return cal;
+}
+
+
QColor MultiViewCalendar::resourceColor(const KCalCore::Incidence::Ptr &incidence) const
{
ViewCalendar::Ptr cal = findCalendar(incidence);
@@ -121,9 +138,19 @@ bool AkonadiViewCalendar::isValid(const KCalCore::Incidence::Ptr &incidence) con
return false;
}
-Akonadi::Item AkonadiViewCalendar::item(const KCalCore::Incidence::Ptr &incidence) const
+bool AkonadiViewCalendar::isValid(const QString &incidenceIdentifier) const
{
if (!mCalendar) {
+ return false;
+ }
+
+ return !mCalendar->incidence(incidenceIdentifier).isNull();
+}
+
+
+Akonadi::Item AkonadiViewCalendar::item(const KCalCore::Incidence::Ptr &incidence) const
+{
+ if (!mCalendar || !incidence) {
return Akonadi::Item();
}
bool ok = false;
diff --git a/calendarviews/agenda/viewcalendar.h b/calendarviews/agenda/viewcalendar.h
index 53551e5..afa39a6 100644
--- a/calendarviews/agenda/viewcalendar.h
+++ b/calendarviews/agenda/viewcalendar.h
@@ -42,6 +42,7 @@ public:
virtual ~ViewCalendar();
virtual bool isValid(const KCalCore::Incidence::Ptr &incidence) const=0;
+ virtual bool isValid(const QString &incidenceIdentifier) const=0;
virtual QString displayName(const KCalCore::Incidence::Ptr &incidence) const=0;
virtual QColor resourceColor(const KCalCore::Incidence::Ptr &incidence) const=0;
@@ -57,6 +58,7 @@ public:
virtual ~AkonadiViewCalendar();
virtual bool isValid(const KCalCore::Incidence::Ptr &incidence) const;
+ virtual bool isValid(const QString &incidenceIdentifier) const;
virtual QString displayName(const KCalCore::Incidence::Ptr &incidence) const;
virtual QColor resourceColor(const KCalCore::Incidence::Ptr &incidence) const;
@@ -78,7 +80,9 @@ public:
virtual ~MultiViewCalendar();
ViewCalendar::Ptr findCalendar(const KCalCore::Incidence::Ptr &incidence) const;
+ ViewCalendar::Ptr findCalendar(const QString &incidenceIdentifier) const;
virtual bool isValid(const KCalCore::Incidence::Ptr &incidence) const;
+ virtual bool isValid(const QString &incidenceIdentifier) const;
virtual QString displayName(const KCalCore::Incidence::Ptr &incidence) const;
virtual QColor resourceColor(const KCalCore::Incidence::Ptr &incidence) const;
diff --git a/incidenceeditor-ng/resourcemanagement.cpp b/incidenceeditor-ng/resourcemanagement.cpp
index b75c9d3..ff36677 100644
--- a/incidenceeditor-ng/resourcemanagement.cpp
+++ b/incidenceeditor-ng/resourcemanagement.cpp
@@ -62,7 +62,12 @@ public:
virtual ~FreebusyViewCalendar() {};
virtual bool isValid(const KCalCore::Incidence::Ptr &incidence) const
{
- return incidence->uid().startsWith("fb-");
+ return isValid(incidence->uid());
+ }
+
+ virtual bool isValid(const QString &incidenceIdentifier) const
+ {
+ return incidenceIdentifier.startsWith("fb-");
}
virtual QString displayName(const KCalCore::Incidence::Ptr &incidence) const
diff --git a/korganizer/views/collectionview/quickview.cpp b/korganizer/views/collectionview/quickview.cpp
index 3417fb1..de3e43e 100644
--- a/korganizer/views/collectionview/quickview.cpp
+++ b/korganizer/views/collectionview/quickview.cpp
@@ -47,7 +47,12 @@ public:
virtual ~FreebusyViewCalendar() {};
virtual bool isValid(const KCalCore::Incidence::Ptr &incidence) const
{
- return incidence->uid().startsWith(QLatin1String("fb-"));
+ return isValid(incidence->uid());
+ }
+
+ virtual bool isValid(const QString &incidenceIdentifier) const
+ {
+ return incidenceIdentifier.startsWith(QLatin1String("fb-"));
}
virtual QString displayName(const KCalCore::Incidence::Ptr &incidence) const
commit d7184ff8a66dc6856211233aa1d28855577a941d
Author: Sandro Knauà <knauss at kolabsys.com>
Date: Thu Mar 12 20:52:21 2015 +0100
Add propper exception support to korganizer
Create and update exceptions for incidence.
diff --git a/calendarviews/agenda/agenda.cpp b/calendarviews/agenda/agenda.cpp
index cc2a156..03dec7d 100644
--- a/calendarviews/agenda/agenda.cpp
+++ b/calendarviews/agenda/agenda.cpp
@@ -1163,15 +1163,32 @@ void Agenda::endItemAction()
bool multiModify = false;
// FIXME: do the cloning here...
- const KCalCore::Incidence::Ptr incidence = d->mActionItem->incidence();
+ KCalCore::Incidence::Ptr incidence = d->mActionItem->incidence();
+ const KDateTime recurrenceId = d->mActionItem->occurrenceDateTime();
+
d->mItemMoved = d->mItemMoved && !( d->mStartCell.x() == d->mEndCell.x() &&
d->mStartCell.y() == d->mEndCell.y() );
bool addIncidence = false;
if ( d->mItemMoved ) {
bool modify = false;
- if ( incidence->recurs() ) {
- const int res = d->mAgendaView->showMoveRecurDialog( d->mActionItem->incidence(), d->mActionItem->occurrenceDate() );
+
+ //get the main event and not the exception
+ if (incidence->hasRecurrenceId() && !incidence->recurs()) {
+ KCalCore::Incidence::Ptr mainIncidence;
+ KCalCore::Calendar::Ptr cal = d->mCalendar->findCalendar(incidence)->getCalendar();
+ if (CalendarSupport::hasEvent(incidence)) {
+ mainIncidence = cal->event(incidence->uid());
+ } else if (CalendarSupport::hasTodo(incidence)) {
+ mainIncidence = cal->todo(incidence->uid());
+ }
+ incidence = mainIncidence;
+ }
+
+ Akonadi::Item item = d->mCalendar->item(incidence);
+
+ if ( incidence->recurs()) {
+ const int res = d->mAgendaView->showMoveRecurDialog( incidence, recurrenceId.date() );
switch ( res ) {
case KCalUtils::RecurrenceActions::AllOccurrences: // All occurrences
// Moving the whole sequene of events is handled by the itemModified below.
@@ -1185,16 +1202,24 @@ void Agenda::endItemAction()
multiModify = true;
d->mChanger->startAtomicOperation( i18n( "Dissociate event from recurrence" ) );
KCalCore::Incidence::Ptr newInc( KCalCore::Calendar::createException(
- incidence, d->mActionItem->occurrenceDateTime(), thisAndFuture ) );
+ incidence, recurrenceId, thisAndFuture ) );
if ( newInc ) {
+ newInc->removeCustomProperty("VOLATILE", "AKONADI-ID");
+ Akonadi::Item newItem = d->mCalendar->item(newInc);
+
+ if (newItem.isValid() && newItem != item ) { //it is not a new exception
+ item = newItem;
+ newInc->setCustomProperty("VOLATILE", "AKONADI-ID", QString::number(newItem.id()));
+ addIncidence = false;
+ } else {
+ addIncidence = true;
+ }
// don't recreate items, they already have the correct position
d->mAgendaView->enableAgendaUpdate( false );
d->mActionItem->setIncidence( newInc );
d->mActionItem->dissociateFromMultiItem();
- addIncidence = true;
-
d->mAgendaView->enableAgendaUpdate( true );
} else {
KMessageBox::sorry(
@@ -1218,6 +1243,17 @@ void Agenda::endItemAction()
placeItem = d->mActionItem;
}
+ Akonadi::Collection::Id saveCollection = -1;
+
+ if ( item.isValid()) {
+ saveCollection = item.parentCollection().id();
+
+ // if parent collection is only a search collection for example
+ if (!(item.parentCollection().rights() & Akonadi::Collection::CanCreateItem)) {
+ saveCollection = item.storageCollectionId();
+ }
+ }
+
if ( modify ) {
d->mActionItem->endMove();
@@ -1242,9 +1278,8 @@ void Agenda::endItemAction()
// calling when we move item.
// Not perfect need to improve it!
//mChanger->endChange( inc );
- Akonadi::Item item = d->mCalendar->item(incidence);
if (item.isValid()) {
- d->mAgendaView->updateEventDates( modif, addIncidence, item.parentCollection().id() );
+ d->mAgendaView->updateEventDates( modif, addIncidence, saveCollection );
}
if ( addIncidence ) {
// delete the one we dragged, there's a new one being added async, due to dissociation.
@@ -1253,9 +1288,8 @@ void Agenda::endItemAction()
} else {
// the item was moved, but not further modified, since it's not recurring
// make sure the view updates anyhow, with the right item
- Akonadi::Item item = d->mCalendar->item(incidence);
if (item.isValid()) {
- d->mAgendaView->updateEventDates( placeItem, addIncidence, item.parentCollection().id() );
+ d->mAgendaView->updateEventDates( placeItem, addIncidence, saveCollection );
}
}
}
diff --git a/calendarviews/agenda/agendaview.cpp b/calendarviews/agenda/agendaview.cpp
index f7d4ed3..08d6c83 100644
--- a/calendarviews/agenda/agendaview.cpp
+++ b/calendarviews/agenda/agendaview.cpp
@@ -1473,15 +1473,13 @@ void AgendaView::updateEventDates( AgendaItem *item, bool addIncidence,
int daysLength = 0;
// startDt.setDate( startDate );
- Akonadi::Item aitem = d->mViewCalendar->item(item->incidence());
- KCalCore::Incidence::Ptr incidence = CalendarSupport::incidence( aitem );
- if ( !aitem.isValid() || !incidence || !changer() ) {
+ KCalCore::Incidence::Ptr incidence = item->incidence();
+ Akonadi::Item aitem = d->mViewCalendar->item(incidence);
+ if ( (!aitem.isValid() && !addIncidence) || !incidence || !changer() ) {
kWarning() << "changer is " << changer() << " and incidence is " << incidence.data();
return;
}
- KCalCore::Incidence::Ptr oldIncidence( incidence->clone() );
-
QTime startTime( 0, 0, 0 ), endTime( 0, 0, 0 );
if ( incidence->allDay() ) {
daysLength = item->cellWidth() - 1;
@@ -1575,14 +1573,18 @@ void AgendaView::updateEventDates( AgendaItem *item, bool addIncidence,
}
td->setDtDue( endDt.toTimeSpec( td->dtDue().timeSpec() ) );
}
- item->setOccurrenceDateTime( startDt );
+
+ if (!incidence->hasRecurrenceId()) {
+ item->setOccurrenceDateTime( startDt );
+ }
bool result;
if ( addIncidence ) {
Akonadi::Collection collection = calendar()->collection( collectionId );
- kDebug() << "Collection isValid() = " << collection.isValid();
result = changer()->createIncidence( incidence, collection, this ) != -1;
} else {
+ KCalCore::Incidence::Ptr oldIncidence( CalendarSupport::incidence(aitem) );
+ aitem.setPayload<KCalCore::Incidence::Ptr>(incidence);
result = changer()->modifyIncidence( aitem, oldIncidence, this ) != -1;
}
commit 64ed8c66bf3cda2c26683fce7d76e7d77d0d70e0
Author: Sandro Knauà <knauss at kolabsys.com>
Date: Thu Mar 12 20:45:18 2015 +0100
Select the correct exceptions and agendaitem uses recurrenceId
Do not mix up recurrence id and start date of exception. agendaitem
should get the recurrence id.
diff --git a/calendarviews/agenda/agenda.cpp b/calendarviews/agenda/agenda.cpp
index 6aace12..cc2a156 100644
--- a/calendarviews/agenda/agenda.cpp
+++ b/calendarviews/agenda/agenda.cpp
@@ -1696,7 +1696,7 @@ void Agenda::setStartTime( const QTime &startHour )
/*
Insert AgendaItem into agenda.
*/
-AgendaItem::QPtr Agenda::insertItem( const KCalCore::Incidence::Ptr &incidence, const KDateTime &qd,
+AgendaItem::QPtr Agenda::insertItem( const KCalCore::Incidence::Ptr &incidence, const KDateTime &recurrenceId,
int X, int YTop, int YBottom, int itemPos, int itemCount,
bool isSelected )
{
@@ -1707,7 +1707,7 @@ AgendaItem::QPtr Agenda::insertItem( const KCalCore::Incidence::Ptr &incidence,
d->mActionType = NOP;
- AgendaItem::QPtr agendaItem = createAgendaItem( incidence, itemPos, itemCount, qd, isSelected );
+ AgendaItem::QPtr agendaItem = createAgendaItem( incidence, itemPos, itemCount, recurrenceId, isSelected );
if ( !agendaItem ) {
return AgendaItem::QPtr();
}
@@ -1742,7 +1742,7 @@ AgendaItem::QPtr Agenda::insertItem( const KCalCore::Incidence::Ptr &incidence,
/*
Insert all-day AgendaItem into agenda.
*/
-AgendaItem::QPtr Agenda::insertAllDayItem( const KCalCore::Incidence::Ptr &incidence, const KDateTime &occurrenceDateTime,
+AgendaItem::QPtr Agenda::insertAllDayItem( const KCalCore::Incidence::Ptr &incidence, const KDateTime &recurrenceId,
int XBegin, int XEnd, bool isSelected )
{
if ( !d->mAllDayMode ) {
@@ -1752,7 +1752,7 @@ AgendaItem::QPtr Agenda::insertAllDayItem( const KCalCore::Incidence::Ptr &incid
d->mActionType = NOP;
- AgendaItem::QPtr agendaItem = createAgendaItem( incidence, 1, 1, occurrenceDateTime, isSelected );
+ AgendaItem::QPtr agendaItem = createAgendaItem( incidence, 1, 1, recurrenceId, isSelected );
if ( !agendaItem ) {
return AgendaItem::QPtr();
}
@@ -1779,7 +1779,7 @@ AgendaItem::QPtr Agenda::insertAllDayItem( const KCalCore::Incidence::Ptr &incid
}
AgendaItem::QPtr Agenda::createAgendaItem( const KCalCore::Incidence::Ptr &incidence, int itemPos,
- int itemCount, const KDateTime &qd, bool isSelected )
+ int itemCount, const KDateTime &recurrenceId, bool isSelected )
{
if ( !incidence ) {
kWarning() << "Agenda::createAgendaItem() item is invalid.";
@@ -1787,7 +1787,7 @@ AgendaItem::QPtr Agenda::createAgendaItem( const KCalCore::Incidence::Ptr &incid
}
AgendaItem::QPtr agendaItem = new AgendaItem( d->mAgendaView, d->mCalendar, incidence,
- itemPos, itemCount, qd, isSelected, this );
+ itemPos, itemCount, recurrenceId, isSelected, this );
connect( agendaItem, SIGNAL(removeAgendaItem(AgendaItem::QPtr)), SLOT(removeAgendaItem(AgendaItem::QPtr)) );
connect( agendaItem, SIGNAL(showAgendaItem(AgendaItem::QPtr)), SLOT(showAgendaItem(AgendaItem::QPtr)) );
@@ -1797,7 +1797,7 @@ AgendaItem::QPtr Agenda::createAgendaItem( const KCalCore::Incidence::Ptr &incid
return agendaItem;
}
-void Agenda::insertMultiItem( const KCalCore::Incidence::Ptr &event, const KDateTime &occurrenceDateTime, int XBegin,
+void Agenda::insertMultiItem( const KCalCore::Incidence::Ptr &event, const KDateTime &recurrenceId, int XBegin,
int XEnd, int YTop, int YBottom, bool isSelected )
{
KCalCore::Event::Ptr ev = CalendarSupport::event( event );
@@ -1832,7 +1832,7 @@ void Agenda::insertMultiItem( const KCalCore::Incidence::Ptr &event, const KDate
newtext = QString::fromLatin1( "(%1/%2): " ).arg( count ).arg( width );
newtext.append( ev->summary() );
- current = insertItem( event, occurrenceDateTime, cellX, cellYTop, cellYBottom, count, width, isSelected );
+ current = insertItem( event, recurrenceId, cellX, cellYTop, cellYBottom, count, width, isSelected );
Q_ASSERT( current );
current->setText( newtext );
multiItems.append( current );
diff --git a/calendarviews/agenda/agenda.h b/calendarviews/agenda/agenda.h
index e1dd790..db14daf 100644
--- a/calendarviews/agenda/agenda.h
+++ b/calendarviews/agenda/agenda.h
@@ -121,13 +121,13 @@ class EVENTVIEWS_EXPORT Agenda : public QWidget
void setStartTime( const QTime &startHour );
- AgendaItem::QPtr insertItem ( const KCalCore::Incidence::Ptr &incidence, const KDateTime &occurrenceDateTime, int X, int YTop,
+ AgendaItem::QPtr insertItem ( const KCalCore::Incidence::Ptr &incidence, const KDateTime &recurrenceId, int X, int YTop,
int YBottom, int itemPos, int itemCount, bool isSelected );
- AgendaItem::QPtr insertAllDayItem ( const KCalCore::Incidence::Ptr &event, const KDateTime &occurrenceDateTime, int XBegin,
+ AgendaItem::QPtr insertAllDayItem ( const KCalCore::Incidence::Ptr &event, const KDateTime &recurrenceId, int XBegin,
int XEnd, bool isSelected );
- void insertMultiItem ( const KCalCore::Incidence::Ptr &event, const KDateTime &occurrenceDateTime, int XBegin, int XEnd,
+ void insertMultiItem ( const KCalCore::Incidence::Ptr &event, const KDateTime &recurrenceId, int XBegin, int XEnd,
int YTop, int YBottom, bool isSelected );
/**
@@ -235,7 +235,7 @@ class EVENTVIEWS_EXPORT Agenda : public QWidget
};
AgendaItem::QPtr createAgendaItem( const KCalCore::Incidence::Ptr &item, int itemPos,
- int itemCount, const KDateTime &qd, bool isSelected );
+ int itemCount, const KDateTime &recurrentId, bool isSelected );
protected:
/**
diff --git a/calendarviews/agenda/agendaview.cpp b/calendarviews/agenda/agendaview.cpp
index eca73d0..f7d4ed3 100644
--- a/calendarviews/agenda/agendaview.cpp
+++ b/calendarviews/agenda/agendaview.cpp
@@ -274,7 +274,7 @@ class AgendaView::Private : public Akonadi::ETMCalendar::CalendarObserver
AgendaItem::List agendaItems( const QString &uid ) const;
// insertAtDateTime is in the view's timezone
- void insertIncidence( const KCalCore::Incidence::Ptr &,
+ void insertIncidence( const KCalCore::Incidence::Ptr &, const KDateTime &recurrenceId,
const KDateTime &insertAtDateTime, bool createSelected );
void reevaluateIncidence( const KCalCore::Incidence::Ptr &incidence );
@@ -531,7 +531,7 @@ void AgendaView::Private::clearView()
}
void AgendaView::Private::insertIncidence( const KCalCore::Incidence::Ptr &incidence,
- const KDateTime &insertAtDateTime,
+ const KDateTime &recurrenceId, const KDateTime &insertAtDateTime,
bool createSelected )
{
if ( !q->filterByCollectionSelection( incidence ) ) {
@@ -588,10 +588,10 @@ void AgendaView::Private::insertIncidence( const KCalCore::Incidence::Ptr &incid
const KDateTime::Spec timeSpec = q->preferences()->timeSpec();
const QDate today = KDateTime::currentDateTime( timeSpec ).date();
if ( todo && todo->isOverdue() && today >= insertAtDate ) {
- mAllDayAgenda->insertAllDayItem( incidence, insertAtDateTime, curCol, curCol,
+ mAllDayAgenda->insertAllDayItem( incidence, recurrenceId, curCol, curCol,
createSelected );
} else if ( incidence->allDay() ) {
- mAllDayAgenda->insertAllDayItem( incidence, insertAtDateTime, beginX, endX,
+ mAllDayAgenda->insertAllDayItem( incidence, recurrenceId, beginX, endX,
createSelected );
} else if ( event && event->isMultiDay( timeSpec ) ) {
// TODO: We need a better isMultiDay(), one that receives the occurrence.
@@ -612,7 +612,7 @@ void AgendaView::Private::insertIncidence( const KCalCore::Incidence::Ptr &incid
}
const int endY = mAgenda->timeToY( endTime ) - 1;
if ( ( beginX <= 0 && curCol == 0 ) || beginX == curCol ) {
- mAgenda->insertMultiItem( incidence, insertAtDateTime, beginX, endX, startY, endY,
+ mAgenda->insertMultiItem( incidence, recurrenceId, beginX, endX, startY, endY,
createSelected );
}
if ( beginX == curCol ) {
@@ -683,7 +683,7 @@ void AgendaView::Private::insertIncidence( const KCalCore::Incidence::Ptr &incid
if ( endY < startY ) {
endY = startY;
}
- mAgenda->insertItem( incidence, insertAtDateTime, curCol, startY, endY, 1, 1,
+ mAgenda->insertItem( incidence, recurrenceId, curCol, startY, endY, 1, 1,
createSelected );
if ( startY < mMinY[curCol] ) {
mMinY[curCol] = startY;
@@ -1831,17 +1831,10 @@ bool AgendaView::displayIncidence( const KCalCore::Incidence::Ptr &incidence, b
busyEvents.append( event );
}
- const Akonadi::Item item = calendar()->item( rIt.incidence() );
- if ( !item.isValid() ) {
- kWarning() << "Couldn't find item for "
- << rIt.incidence()->uid() << rIt.incidence()->recurrenceId().toString();
- continue;
- }
- Q_ASSERT( item.hasPayload() );
if ( occurrenceDate.date() == today ) {
alreadyAddedToday = true;
}
- d->insertIncidence( incidence, occurrenceDate, createSelected );
+ d->insertIncidence( rIt.incidence(), rIt.recurrenceId(), occurrenceDate, createSelected );
}
} else {
@@ -1896,7 +1889,7 @@ bool AgendaView::displayIncidence( const KCalCore::Incidence::Ptr &incidence, b
busyEvents.append( event );
}
- d->insertIncidence( incidence, t->toTimeSpec( timeSpec ), createSelected );
+ d->insertIncidence( incidence, t->toTimeSpec( timeSpec ), t->toTimeSpec( timeSpec ), createSelected );
}
// Can be multiday
commit 7876f0ec6f1f4e41e28540bf2d4799579598a9a8
Author: Sandro Knauà <knauss at kolabsys.com>
Date: Thu Mar 12 20:32:02 2015 +0100
Show number of pending invitations.
Display the number open/decliend invitations. So the user can see how
many open invitations he has.
KOLAB: 4816
diff --git a/korganizer/views/collectionview/calendardelegate.cpp b/korganizer/views/collectionview/calendardelegate.cpp
index c8b6a40..f1f3514 100644
--- a/korganizer/views/collectionview/calendardelegate.cpp
+++ b/korganizer/views/collectionview/calendardelegate.cpp
@@ -24,6 +24,7 @@
#include <QApplication>
#include <QPainter>
#include <QMouseEvent>
+#include <akonadi/collectionstatistics.h>
#include <calendarsupport/utils.h>
#include <kohelper.h>
@@ -142,6 +143,9 @@ QList<StyledCalendarDelegate::Action> StyledCalendarDelegate::getActions(const Q
if (!isToplevelSearchCollection && !isToplevelKolabCollection) {
buttons << Quickview;
}
+ if (isSearchCollection && !isToplevelSearchCollection) {
+ buttons << Total;
+ }
return buttons;
}
@@ -166,14 +170,24 @@ void StyledCalendarDelegate::paint( QPainter * painter, const QStyleOptionViewIt
QList<Action> buttons;
int i = 1;
Q_FOREACH (Action action, getActions(option, index)) {
- QStyleOptionButton buttonOption = buttonOpt(opt, mPixmap.value(action), i);
- if (action == Enable && showButtons) {
- buttonOption.state = QStyle::State_Active;
- }
- if (action == Enable && !showButtons && enabled == Qt::PartiallyChecked) {
- buttonOption.state = QStyle::State_Active;
+ if (action != Total) {
+ QStyleOptionButton buttonOption = buttonOpt(opt, mPixmap.value(action), i);
+ if (action == Enable && showButtons) {
+ buttonOption.state = QStyle::State_Active;
+ }
+ if (action == Enable && !showButtons && enabled == Qt::PartiallyChecked) {
+ buttonOption.state = QStyle::State_Active;
+ }
+ s->drawControl(QStyle::CE_PushButton, &buttonOption, painter, 0);
+ } else {
+ QStyleOptionButton buttonOption = buttonOpt(opt, QPixmap(), i);
+ buttonOption.features = QStyleOptionButton::Flat;
+ buttonOption.rect.setHeight(buttonOption.rect.height() + 4);
+ if (col.statistics().count() > 0) {
+ buttonOption.text = QString::number(col.statistics().count());
+ }
+ s->drawControl(QStyle::CE_PushButton, &buttonOption, painter, 0);
}
- s->drawControl(QStyle::CE_PushButton, &buttonOption, painter, 0);
i++;
}
}
diff --git a/korganizer/views/collectionview/calendardelegate.h b/korganizer/views/collectionview/calendardelegate.h
index 0be37f6..979c174 100644
--- a/korganizer/views/collectionview/calendardelegate.h
+++ b/korganizer/views/collectionview/calendardelegate.h
@@ -36,7 +36,8 @@ public:
AddToList,
RemoveFromList,
Enable,
- Quickview
+ Quickview,
+ Total
};
Q_SIGNALS:
More information about the commits
mailing list