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

List:       kde-commits
Subject:    KDE/kdepim/korganizer
From:       Allen Winter <winter () kde ! org>
Date:       2008-08-12 19:41:32
Message-ID: 1218570092.881247.21027.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 846016 by winterz:

e3 merge

SVN commit 843189 by vkrause:

Don't clear and refill the agenda view if no data has changed and the
view is updated for a different reason, eg. when switching between the
todo and event view.

Kolab issue 2904


 M  +6 -0      calendarview.cpp  
 M  +2 -0      calendarview.h  
 M  +10 -0     koviewmanager.cpp  
 M  +2 -0      koviewmanager.h  
 M  +1 -1      resourceview.cpp  
 M  +10 -0     views/agendaview/agendaview.cpp  
 M  +1 -0      views/agendaview/agendaview.h  
 M  +42 -1     views/agendaview/koagendaview.cpp  
 M  +11 -1     views/agendaview/koagendaview.h  
 M  +7 -0      views/multiagendaview/multiagendaview.cpp  
 M  +2 -0      views/multiagendaview/multiagendaview.h  


--- trunk/KDE/kdepim/korganizer/calendarview.cpp #846015:846016
@@ -2344,4 +2344,10 @@
   delete oldIncidence;
 }
 
+void CalendarView::resourcesChanged()
+{
+  mViewManager->resourcesChanged();
+  updateView();
+}
+
 #include "calendarview.moc"
--- trunk/KDE/kdepim/korganizer/calendarview.h #846015:846016
@@ -587,6 +587,8 @@
     void moveIncidenceTo( Incidence *, const QDate & );
     void filterActivated( int filterNum );
 
+    void resourcesChanged();
+
   protected slots:
     /** Select a view or adapt the current view to display the specified dates. */
     void showDates( const KCal::DateList & );
--- trunk/KDE/kdepim/korganizer/koviewmanager.cpp #846015:846016
@@ -520,3 +520,13 @@
 {
   showView( static_cast<KOrg::BaseView*>( widget ) );
 }
+
+void KOViewManager::resourcesChanged()
+{
+  if ( mAgendaView ) {
+    mAgendaView->resourcesChanged();
+  }
+  if ( mAgendaSideBySideView ) {
+    mAgendaSideBySideView->resourcesChanged();
+  }
+}
--- trunk/KDE/kdepim/korganizer/koviewmanager.h #846015:846016
@@ -117,6 +117,8 @@
     void zoomInVertically();
     void zoomOutVertically();
 
+    void resourcesChanged();
+
   private slots:
     void currentAgendaViewTabChanged( QWidget * );
 
--- trunk/KDE/kdepim/korganizer/resourceview.cpp #846015:846016
@@ -65,7 +65,7 @@
   mResourceView = new ResourceView( mCalendar, parent );
 
   QObject::connect( mResourceView, SIGNAL(resourcesChanged()),
-                    mView, SLOT(updateView()) );
+                    mView, SLOT(resourcesChanged()) );
   QObject::connect( mResourceView, SIGNAL(resourcesChanged()),
                     mView, SLOT(updateCategories()) );
 
--- trunk/KDE/kdepim/korganizer/views/agendaview/agendaview.cpp #846015:846016
@@ -17,12 +17,22 @@
 */
 
 #include "agendaview.h"
+#include <kcal/calendarresources.h>
 
 using namespace KOrg;
 
 AgendaView::AgendaView( Calendar *cal, QWidget *parent )
   : KOEventView( cal, parent )
 {
+  KCal::CalendarResources *calres = dynamic_cast<KCal::CalendarResources *>( cal );
+  if ( calres ) {
+    connect( calres, SIGNAL(signalResourceAdded(ResourceCalendar *)),
+             SLOT(resourcesChanged()) );
+    connect( calres, SIGNAL(signalResourceModified( ResourceCalendar *)),
+             SLOT(resourcesChanged()) );
+    connect( calres, SIGNAL(signalResourceDeleted(ResourceCalendar *)),
+             SLOT(resourcesChanged()) );
+  }
 }
 
 #include "agendaview.moc"
--- trunk/KDE/kdepim/korganizer/views/agendaview/agendaview.h #846015:846016
@@ -34,6 +34,7 @@
 
   public slots:
     virtual void finishTypeAhead() = 0;
+    virtual void resourcesChanged() = 0;
 };
 
 }
--- trunk/KDE/kdepim/korganizer/views/agendaview/koagendaview.cpp #846015:846016
@@ -142,7 +142,8 @@
   mAllowAgendaUpdate( true ),
   mUpdateItem( 0 ),
   mResource( 0 ),
-  mIsSideBySide( isSideBySide )
+  mIsSideBySide( isSideBySide ),
+  mPendingChanges( true )
 {
   mSelectedDates.append( QDate::currentDate() );
 
@@ -252,10 +253,18 @@
   connect( mAllDayAgenda,
            SIGNAL(newTimeSpanSignal(const QPoint &,const QPoint &)),
            SLOT(newTimeSpanSelectedAllDay(const QPoint &,const QPoint &)) );
+
+  if ( cal ) {
+    cal->registerObserver( this );
+  }
 }
 
 KOAgendaView::~KOAgendaView()
 {
+  if ( calendar() ) {
+    calendar()->unregisterObserver( this );
+  }
+
   delete mAgendaPopup;
   delete mAllDayAgendaPopup;
 }
@@ -1068,6 +1077,13 @@
 
 void KOAgendaView::showDates( const QDate &start, const QDate &end )
 {
+  if ( !mSelectedDates.isEmpty() &&
+       mSelectedDates.first() == start &&
+       mSelectedDates.last() == end &&
+       !mPendingChanges ) {
+    return;
+  }
+
   mSelectedDates.clear();
 
   QDate d = start;
@@ -1309,6 +1325,8 @@
 
 void KOAgendaView::fillAgenda()
 {
+  mPendingChanges = false;
+
   /* Remember the uids of the selected items. In case one of the
    * items was deleted and re-added, we want to reselect it. */
   const QString &selectedAgendaUid = mAgenda->lastSelectedUid();
@@ -1662,4 +1680,27 @@
   return true;
 }
 
+void KOAgendaView::resourcesChanged()
+{
+  mPendingChanges = true;
+}
+
+void KOAgendaView::calendarIncidenceAdded( Incidence *incidence )
+{
+  Q_UNUSED( incidence );
+  mPendingChanges = true;
+}
+
+void KOAgendaView::calendarIncidenceChanged( Incidence *incidence )
+{
+  Q_UNUSED( incidence );
+  mPendingChanges = true;
+}
+
+void KOAgendaView::calendarIncidenceRemoved( Incidence *incidence )
+{
+  Q_UNUSED( incidence );
+  mPendingChanges = true;
+}
+
 #include "koagendaview.moc"
--- trunk/KDE/kdepim/korganizer/views/agendaview/koagendaview.h #846015:846016
@@ -28,6 +28,8 @@
 #include "agendaview.h"
 #include "calprinter.h"
 
+#include <kcal/calendar.h>
+
 #include <QFrame>
 #include <QPixmap>
 #include <QVector>
@@ -88,7 +90,7 @@
   KOAgendaView is the agenda-like view that displays events in a single
   or multi-day view.
 */
-class KOAgendaView : public KOrg::AgendaView
+class KOAgendaView : public KOrg::AgendaView, public KCal::Calendar::CalendarObserver
 {
   Q_OBJECT
   public:
@@ -134,6 +136,11 @@
     KOAgenda *agenda() const { return mAgenda; }
     QSplitter *splitter() const { return mSplitterAgenda; }
 
+    /* reimplemented from KCal::Calendar::CalendarObserver */
+    void calendarIncidenceAdded( Incidence *incidence );
+    void calendarIncidenceChanged( Incidence *incidence );
+    void calendarIncidenceRemoved( Incidence *incidence );
+
   public slots:
     virtual void updateView();
     virtual void updateConfig();
@@ -174,6 +181,8 @@
 
     void clearTimeSpanSelection();
 
+    void resourcesChanged();
+
     // Used by the timelabelszone
     void updateTimeBarWidth();
     /** Create labels for the selected dates. */
@@ -271,6 +280,7 @@
     QString mSubResource;
 
     bool mIsSideBySide;
+    bool mPendingChanges;
 };
 
 #endif
--- trunk/KDE/kdepim/korganizer/views/multiagendaview/multiagendaview.cpp #846015:846016
@@ -459,4 +459,11 @@
   }
 }
 
+void MultiAgendaView::resourcesChanged()
+{
+  foreach ( KOAgendaView *agenda, mAgendaViews ) {
+    agenda->resourcesChanged();
+  }
+}
+
 #include "multiagendaview.moc"
--- trunk/KDE/kdepim/korganizer/views/multiagendaview/multiagendaview.h #846015:846016
@@ -66,6 +66,8 @@
 
     void show();
 
+    void resourcesChanged();
+
   protected:
     void resizeEvent( QResizeEvent *ev );
 
[prev in list] [next in list] [prev in thread] [next in thread] 

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