[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdepim/calendarviews/agenda
From:       Sergio Luis Martins <iamsergio () gmail ! com>
Date:       2010-08-30 10:29:08
Message-ID: 20100830102908.AEE46AC857 () svn ! kde ! org
[Download RAW message or body]

SVN commit 1169928 by smartins:

Instead of using a bool to say if there are changes pending, and a fillAgenda() is \
needed, use an enum, with values: IncidencesDeleted/Added/Edited and DatesChanged.

This way, if fillAgenda() sees that dates didn't change it won't have to update event \
indicatores, agenda columns, create day labels, set holiday masks...

 M  +16 -10    agendaview.cpp  
 M  +6 -6      eventview.cpp  
 M  +13 -2     eventview.h  
 M  +3 -3      multiagenda/multiagendaview.cpp  
 M  +1 -1      multiagenda/multiagendaview.h  


--- trunk/KDE/kdepim/calendarviews/agenda/agendaview.cpp #1169927:1169928
@@ -216,8 +216,10 @@
 void AgendaView::Private::calendarIncidenceAdded( const Akonadi::Item &incidence )
 {
   Q_UNUSED( incidence );
-  if ( !q->updateNeeded() ) {
-    q->setUpdateNeeded( true );
+  const Changes changes = q->changes();
+  q->setChanges( changes | IncidencesAdded );
+
+  if ( changes == NothingChanged ) {
     QMetaObject::invokeMethod( q, "updateView", Qt::QueuedConnection );
   }
 }
@@ -225,8 +227,10 @@
 void AgendaView::Private::calendarIncidenceChanged( const Akonadi::Item &incidence )
 {
   Q_UNUSED( incidence );
-  if ( !q->updateNeeded() ) {
-    q->setUpdateNeeded( true );
+  const Changes changes = q->changes();
+  q->setChanges( changes | IncidencesEdited );
+
+  if ( changes == NothingChanged ) {
     QMetaObject::invokeMethod( q, "updateView", Qt::QueuedConnection );
   }
 }
@@ -234,8 +238,10 @@
 void AgendaView::Private::calendarIncidenceDeleted( const Akonadi::Item &incidence )
 {
   Q_UNUSED( incidence );
-  if ( !q->updateNeeded() ) {
-    q->setUpdateNeeded( true );
+  const Changes changes = q->changes();
+  q->setChanges( changes | IncidencesDeleted );
+
+  if ( changes == NothingChanged ) {
     QMetaObject::invokeMethod( q, "updateView", Qt::QueuedConnection );
   }
 }
@@ -1211,7 +1217,7 @@
   // Update the view correctly if an agenda item move was aborted by
   // cancelling one of the subsequent dialogs.
   if ( !result ) {
-    setUpdateNeeded( true );
+    setChanges( changes() | IncidencesEdited );
     QMetaObject::invokeMethod( this, "updateView", Qt::QueuedConnection );
     return;
   }
@@ -1276,7 +1282,7 @@
   }
 
   // and update the view
-  setUpdateNeeded( true );
+  setChanges( changes() | DatesChanged );
   fillAgenda();
 }
 
@@ -1513,11 +1519,11 @@
 
 void AgendaView::fillAgenda()
 {
-  if ( !updateNeeded() ) {
+  if ( changes() == NothingChanged ) {
     return;
   }
 
-  setUpdateNeeded( false );
+  setChanges( NothingChanged );
 
   /* Remember the item Ids of the selected items. In case one of the
    * items was deleted and re-added, we want to reselect it. */
--- trunk/KDE/kdepim/calendarviews/agenda/eventview.cpp #1169927:1169928
@@ -78,7 +78,7 @@
         mPrefs( new Prefs() ),
         mKCalPrefs( new CalendarSupport::KCalPrefs() ),
         mChanger( 0 ),
-        mPendingChanges( true )
+        mChanges( NothingChanged )
     {
       QByteArray cname = q->metaObject()->className();
       cname.replace( ":", "_" );
@@ -129,7 +129,7 @@
     KCalPrefsPtr mKCalPrefs;
 
     CalendarSupport::IncidenceChanger *mChanger;
-    bool mPendingChanges;
+    Changes mChanges;
 };
 
 CalendarSupport::CollectionSelection* EventView::Private::sGlobalCollectionSelection \
= 0; @@ -688,14 +688,14 @@
   d->identifier = identifier;
 }
 
-void EventView::setUpdateNeeded( bool needed )
+void EventView::setChanges( Changes changes )
 {
-  d->mPendingChanges = needed;
+  d->mChanges = changes;
 }
 
-bool EventView::updateNeeded() const
+EventView::Changes EventView::changes() const
 {
-  return d->mPendingChanges;
+  return d->mChanges;
 }
 
 #include "eventview.moc"
--- trunk/KDE/kdepim/calendarviews/agenda/eventview.h #1169927:1169928
@@ -93,6 +93,16 @@
 {
   Q_OBJECT
   public:
+
+    enum Change {
+      NothingChanged = 0,
+      IncidencesAdded = 1,
+      IncidencesEdited = 2,
+      IncidencesDeleted = 4,
+      DatesChanged = 8
+    };
+    Q_DECLARE_FLAGS(Changes, Change)
+
     /**
      * Constructs a view.
      * @param cal is a pointer to the calendar object from which events
@@ -244,7 +254,7 @@
 
        @param needed if the update is needed or not.
     */
-    virtual void setUpdateNeeded( bool needed );
+    virtual void setChanges( Changes changes );
 
   public Q_SLOTS:
 
@@ -427,6 +437,7 @@
     void rowsAboutToBeRemoved( const QModelIndex &parent, int start, int end );
 
   protected:
+
     CalendarSupport::IncidenceChanger *changer() const;
 
    /**
@@ -463,7 +474,7 @@
     /**
        Returns if there are pending changes and a redraw is needed.
     */
-    bool updateNeeded() const;
+    Changes changes() const;
 
   private:
     /*
--- trunk/KDE/kdepim/calendarviews/agenda/multiagenda/multiagendaview.cpp \
#1169927:1169928 @@ -532,11 +532,11 @@
   }
 }
 
-void MultiAgendaView::setUpdateNeeded( bool needed )
+void MultiAgendaView::setChanges( Changes changes )
 {
-  EventView::setUpdateNeeded( needed );
+  EventView::setChanges( changes );
   foreach ( AgendaView *agenda, mAgendaViews ) {
-    agenda->setUpdateNeeded( needed );
+    agenda->setChanges( changes );
   }
 }
 
--- trunk/KDE/kdepim/calendarviews/agenda/multiagenda/multiagendaview.h \
#1169927:1169928 @@ -109,7 +109,7 @@
      */
     void showConfigurationDialog( QWidget *parent );
 
-    void setUpdateNeeded( bool needed );
+    void setChanges( Changes changes );
 
   public slots:
     void showDates( const QDate &start, const QDate &end );


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic