korganizer

koviewmanager.cpp

00001 /*
00002     This file is part of KOrganizer.
00003 
00004     Copyright (c) 2001,2003 Cornelius Schumacher <schumacher@kde.org>
00005     Copyright (C) 2003-2004 Reinhold Kainhofer <reinhold@kainhofer.com>
00006 
00007     This program is free software; you can redistribute it and/or modify
00008     it under the terms of the GNU General Public License as published by
00009     the Free Software Foundation; either version 2 of the License, or
00010     (at your option) any later version.
00011 
00012     This program is distributed in the hope that it will be useful,
00013     but WITHOUT ANY WARRANTY; without even the implied warranty of
00014     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
00015     GNU General Public License for more details.
00016 
00017     You should have received a copy of the GNU General Public License
00018     along with this program; if not, write to the Free Software
00019     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
00020 
00021     As a special exception, permission is given to link this program
00022     with any edition of Qt, and distribute the resulting executable,
00023     without including the source code for Qt in the source distribution.
00024 */
00025 
00026 #include <tqwidgetstack.h>
00027 #include <tqtabwidget.h>
00028 
00029 #include <libkcal/calendarresources.h>
00030 #include <kactioncollection.h>
00031 #include <kconfig.h>
00032 #include <kglobal.h>
00033 
00034 #include "actionmanager.h"
00035 #include "calendarview.h"
00036 #include "datenavigator.h"
00037 #include "kotodoview.h"
00038 #include "koagendaview.h"
00039 #include "komonthview.h"
00040 #include "kolistview.h"
00041 #include "kowhatsnextview.h"
00042 #include "kojournalview.h"
00043 #include "kotimelineview.h"
00044 #include "koprefs.h"
00045 #include "koglobals.h"
00046 #include "navigatorbar.h"
00047 #include "multiagendaview.h"
00048 #include <korganizer/mainwindow.h>
00049 
00050 #include "koviewmanager.h"
00051 #include "koviewmanager.moc"
00052 
00053 KOViewManager::KOViewManager( CalendarView *mainView ) :
00054   TQObject(), mMainView( mainView )
00055 {
00056   mCurrentView = 0;
00057 
00058   mLastEventView = 0;
00059 
00060   mWhatsNextView = 0;
00061   mTodoView = 0;
00062   mAgendaView = 0;
00063   mAgendaSideBySideView = 0;
00064   mMonthView = 0;
00065   mListView = 0;
00066   mJournalView = 0;
00067   mTimelineView = 0;
00068   mAgendaViewTabs = 0;
00069   mAgendaViewTabIndex = 0;
00070   mAgendaMode = AGENDA_NONE;
00071 }
00072 
00073 KOViewManager::~KOViewManager()
00074 {
00075 }
00076 
00077 
00078 KOrg::BaseView *KOViewManager::currentView()
00079 {
00080   return mCurrentView;
00081 }
00082 
00083 void KOViewManager::readSettings(KConfig *config)
00084 {
00085   config->setGroup("General");
00086   TQString view = config->readEntry("Current View");
00087 
00088   if (view == "WhatsNext") showWhatsNextView();
00089   else if (view == "Month") showMonthView();
00090   else if (view == "List") showListView();
00091   else if (view == "Journal") showJournalView();
00092   else if (view == "Todo") showTodoView();
00093   else if (view == "Timeline") showTimelineView();
00094   else {
00095     mAgendaMode = AgendaMode( config->readNumEntry( "Agenda Mode", AGENDA_OTHER ) );
00096 
00097     switch ( mAgendaMode ) {
00098       case AGENDA_WORK_WEEK:
00099         showWorkWeekView();
00100         break;
00101       case AGENDA_WEEK:
00102         showWeekView();
00103         break;
00104       case AGENDA_NEXTX:
00105         showNextXView();
00106         break;
00107       case AGENDA_DAY:
00108         showDayView();
00109         break;
00110       case AGENDA_NONE:
00111         // Someone has been playing with the config file.
00112       default:
00113         mAgendaMode = AGENDA_OTHER;
00114         showAgendaView();
00115     }
00116   }
00117 }
00118 
00119 void KOViewManager::writeSettings(KConfig *config)
00120 {
00121   config->setGroup("General");
00122 
00123   TQString view;
00124   if (mCurrentView == mWhatsNextView) view = "WhatsNext";
00125   else if (mCurrentView == mMonthView) view = "Month";
00126   else if (mCurrentView == mListView) view = "List";
00127   else if (mCurrentView == mJournalView) view = "Journal";
00128   else if (mCurrentView == mTodoView) view = "Todo";
00129   else if (mCurrentView == mTimelineView) view = "Timeline";
00130   else {
00131     view = "Agenda";
00132     config->writeEntry( "Agenda Mode", mAgendaMode );
00133   }
00134 
00135   config->writeEntry("Current View",view);
00136 
00137   if (mAgendaView) {
00138     mAgendaView->writeSettings(config);
00139   }
00140   if (mListView) {
00141     mListView->writeSettings(config);
00142   }
00143   if (mTodoView) {
00144     mTodoView->saveLayout(config,"Todo View");
00145   }
00146 }
00147 
00148 void KOViewManager::showView(KOrg::BaseView *view)
00149 {
00150   if( view == mCurrentView ) return;
00151 
00152   mCurrentView = view;
00153 
00154   if ( mCurrentView && mCurrentView->isEventView() ) {
00155     mLastEventView = mCurrentView;
00156   }
00157 
00158   if ( mAgendaView ) mAgendaView->deleteSelectedDateTime();
00159 
00160   raiseCurrentView();
00161 
00162   mMainView->processIncidenceSelection( 0, TQDate() );
00163 
00164   mMainView->updateView();
00165 
00166   mMainView->adaptNavigationUnits();
00167 }
00168 
00169 void KOViewManager::goMenu( bool enable )
00170 {
00171   KOrg::MainWindow *w = ActionManager::findInstance( KURL() );
00172   if ( w ) {
00173     KActionCollection *ac = w->getActionCollection();
00174     if ( ac ) {
00175       KAction *action;
00176       action = ac->action( "go_today" );
00177       if ( action ) {
00178         action->setEnabled( enable );
00179       }
00180       action = ac->action( "go_previous" );
00181       if ( action ) {
00182         action->setEnabled( enable );
00183       }
00184       action = ac->action( "go_next" );
00185       if ( action ) {
00186         action->setEnabled( enable );
00187       }
00188     }
00189   }
00190 }
00191 
00192 void KOViewManager::raiseCurrentView()
00193 {
00194   if ((mMonthView && KOPrefs::instance()->mFullViewMonth && mCurrentView == mMonthView) ||
00195       (mTodoView && KOPrefs::instance()->mFullViewTodo && mCurrentView == mTodoView)) {
00196     mMainView->showLeftFrame( false );
00197     if ( mCurrentView == mTodoView ) {
00198       mMainView->navigatorBar()->hide();
00199     } else {
00200       mMainView->navigatorBar()->show();
00201     }
00202   } else {
00203     mMainView->showLeftFrame( true );
00204     mMainView->navigatorBar()->hide();
00205   }
00206   mMainView->viewStack()->raiseWidget( widgetForView( mCurrentView  ) );
00207 }
00208 
00209 void KOViewManager::updateView()
00210 {
00211   if ( mCurrentView ) mCurrentView->updateView();
00212 }
00213 
00214 void KOViewManager::updateView(const TQDate &start, const TQDate &end)
00215 {
00216 //  kdDebug(5850) << "KOViewManager::updateView()" << endl;
00217 
00218   if (mCurrentView) mCurrentView->showDates(start, end);
00219 
00220   if (mTodoView) mTodoView->updateView();
00221 }
00222 
00223 void KOViewManager::connectView(KOrg::BaseView *view)
00224 {
00225   if (!view) return;
00226 
00227   // selecting an incidence
00228   connect( view, TQT_SIGNAL( incidenceSelected( Incidence *,const TQDate & ) ),
00229            mMainView, TQT_SLOT( processMainViewSelection( Incidence *,const TQDate & ) ) );
00230 
00231   // showing/editing/deleting an incidence. The calendar view takes care of the action.
00232   connect( view, TQT_SIGNAL(showIncidenceSignal(Incidence *,const TQDate &)),
00233            mMainView, TQT_SLOT(showIncidence(Incidence *,const TQDate &)) );
00234   connect( view, TQT_SIGNAL(editIncidenceSignal(Incidence *,const TQDate &)),
00235            mMainView, TQT_SLOT(editIncidence(Incidence *,const TQDate &)) );
00236   connect( view, TQT_SIGNAL(deleteIncidenceSignal(Incidence *)),
00237            mMainView, TQT_SLOT(deleteIncidence(Incidence *)) );
00238   connect( view, TQT_SIGNAL(copyIncidenceSignal(Incidence *)),
00239            mMainView, TQT_SLOT(copyIncidence(Incidence *)) );
00240   connect( view, TQT_SIGNAL(cutIncidenceSignal(Incidence *)),
00241            mMainView, TQT_SLOT(cutIncidence(Incidence *)) );
00242   connect( view, TQT_SIGNAL(pasteIncidenceSignal()),
00243            mMainView, TQT_SLOT(pasteIncidence()));
00244   connect( view, TQT_SIGNAL(toggleAlarmSignal(Incidence *)),
00245            mMainView, TQT_SLOT(toggleAlarm(Incidence *)) );
00246   connect( view,TQT_SIGNAL(dissociateOccurrenceSignal(Incidence *,const TQDate &)),
00247            mMainView, TQT_SLOT(dissociateOccurrence(Incidence *,const TQDate &)) );
00248   connect( view,TQT_SIGNAL(dissociateFutureOccurrenceSignal(Incidence *,const TQDate &)),
00249            mMainView, TQT_SLOT(dissociateFutureOccurrence(Incidence *,const TQDate &)) );
00250 
00251   // signals to create new incidences
00252   connect( view, TQT_SIGNAL(newEventSignal(ResourceCalendar *,const TQString &)),
00253            mMainView, TQT_SLOT(newEvent(ResourceCalendar *,const TQString &)) );
00254   connect( view, TQT_SIGNAL(newEventSignal(ResourceCalendar *,const TQString &,const TQDate &)),
00255            mMainView, TQT_SLOT(newEvent(ResourceCalendar *,const TQString &,const TQDate &)) );
00256   connect( view, TQT_SIGNAL(newEventSignal(ResourceCalendar *,const TQString &,const TQDateTime &)),
00257            mMainView, TQT_SLOT(newEvent(ResourceCalendar *,const TQString &,const TQDateTime &)) );
00258   connect( view, TQT_SIGNAL(newEventSignal(ResourceCalendar *,const TQString &,const TQDateTime &,const TQDateTime &)),
00259            mMainView, TQT_SLOT(newEvent(ResourceCalendar *,const TQString &,const TQDateTime &,const TQDateTime &)) );
00260 
00261   connect( view, TQT_SIGNAL(newTodoSignal(ResourceCalendar *,const TQString &,const TQDate &)),
00262            mMainView, TQT_SLOT(newTodo(ResourceCalendar *,const TQString &,const TQDate &)) );
00263   connect( view, TQT_SIGNAL(newSubTodoSignal(Todo *)),
00264            mMainView, TQT_SLOT(newSubTodo(Todo *)) );
00265 
00266   connect( view, TQT_SIGNAL(newJournalSignal(ResourceCalendar *,const TQString &,const TQDate &)),
00267            mMainView, TQT_SLOT(newJournal(ResourceCalendar *,const TQString &,const TQDate &)) );
00268 
00269   // reload settings
00270   connect(mMainView, TQT_SIGNAL(configChanged()), view, TQT_SLOT(updateConfig()));
00271 
00272   // Notifications about added, changed and deleted incidences
00273   connect( mMainView, TQT_SIGNAL( dayPassed( const TQDate & ) ),
00274            view, TQT_SLOT( dayPassed( const TQDate & ) ) );
00275   connect( view, TQT_SIGNAL( startMultiModify( const TQString & ) ),
00276            mMainView, TQT_SLOT( startMultiModify( const TQString & ) ) );
00277   connect( view, TQT_SIGNAL( endMultiModify() ),
00278            mMainView, TQT_SLOT( endMultiModify() ) );
00279 
00280   connect( mMainView, TQT_SIGNAL( newIncidenceChanger( IncidenceChangerBase* ) ),
00281            view, TQT_SLOT( setIncidenceChanger( IncidenceChangerBase * ) ) );
00282   view->setIncidenceChanger( mMainView->incidenceChanger() );
00283 }
00284 
00285 void KOViewManager::connectTodoView( KOTodoView* todoView )
00286 {
00287   if (!todoView) return;
00288 
00289   // SIGNALS/SLOTS FOR TODO VIEW
00290   connect( todoView, TQT_SIGNAL( purgeCompletedSignal() ),
00291            mMainView, TQT_SLOT( purgeCompleted() ) );
00292   connect( todoView, TQT_SIGNAL( unSubTodoSignal() ),
00293            mMainView, TQT_SLOT( todo_unsub() ) );
00294   connect( todoView, TQT_SIGNAL( unAllSubTodoSignal() ),
00295            mMainView, TQT_SLOT( makeSubTodosIndependent() ) );
00296 }
00297 
00298 void KOViewManager::zoomInHorizontally()
00299 {
00300   if( mAgendaView == mCurrentView ) mAgendaView->zoomInHorizontally();
00301 }
00302 void KOViewManager::zoomOutHorizontally()
00303 {
00304   if( mAgendaView== mCurrentView ) mAgendaView->zoomOutHorizontally();
00305 }
00306 void KOViewManager::zoomInVertically()
00307 {
00308   if( mAgendaView== mCurrentView ) mAgendaView->zoomInVertically();
00309 }
00310 void KOViewManager::zoomOutVertically()
00311 {
00312   if( mAgendaView== mCurrentView ) mAgendaView->zoomOutVertically();
00313 }
00314 
00315 void KOViewManager::addView(KOrg::BaseView *view)
00316 {
00317   connectView( view );
00318 #if QT_VERSION >= 300
00319   mMainView->viewStack()->addWidget( view );
00320 #else
00321   mMainView->viewStack()->addWidget( view, 1 );
00322 #endif
00323 }
00324 
00325 void KOViewManager::showWhatsNextView()
00326 {
00327   if (!mWhatsNextView) {
00328     mWhatsNextView = new KOWhatsNextView(mMainView->calendar(),mMainView->viewStack(),
00329                                          "KOViewManager::WhatsNextView");
00330     addView(mWhatsNextView);
00331   }
00332   goMenu( true );
00333   showView(mWhatsNextView);
00334 }
00335 
00336 void KOViewManager::showListView()
00337 {
00338   if (!mListView) {
00339     mListView = new KOListView(mMainView->calendar(), mMainView->viewStack(), "KOViewManager::ListView");
00340     addView(mListView);
00341   }
00342   goMenu( true );
00343   showView(mListView);
00344 }
00345 
00346 void KOViewManager::showAgendaView()
00347 {
00348   // If the user opens a local file, through menu->open ( for example ), then
00349   // it doesn't make sense to use multiagenda.
00350   CalendarResources *calres = dynamic_cast<CalendarResources*>( mMainView->calendar() );
00351   bool isLocalFile = !calres;
00352 
00353   int mode = KOPrefs::instance()->agendaViewCalendarDisplay();
00354 
00355   const bool showBoth = ( mode == KOPrefs::AllCalendarViews && !isLocalFile );
00356 
00357   const bool showMerged = showBoth || mode == KOPrefs::CalendarsMerged || isLocalFile;
00358 
00359   const bool showSideBySide = !isLocalFile && ( showBoth || mode == KOPrefs::CalendarsSideBySide );
00360 
00361   TQWidget *parent = mMainView->viewStack();
00362   if ( !mAgendaViewTabs && showBoth ) {
00363     mAgendaViewTabs = new TQTabWidget( mMainView->viewStack() );
00364     connect( mAgendaViewTabs, TQT_SIGNAL( currentChanged( TQWidget* ) ),
00365              this, TQT_SLOT( currentAgendaViewTabChanged( TQWidget* ) ) );
00366     parent = mAgendaViewTabs;
00367 
00368     KConfig *config = KOGlobals::self()->config();
00369     config->setGroup( "Views" );
00370     mAgendaViewTabIndex = config->readNumEntry( "Agenda View Tab Index", 0 );
00371   }
00372 
00373   if ( !mAgendaView && showMerged ) {
00374     mAgendaView = new KOAgendaView( mMainView->calendar(),
00375                                     mMainView,
00376                                     parent,
00377                                     "KOViewManager::AgendaView" );
00378 
00379     addView(mAgendaView);
00380 
00381     connect(mAgendaView, TQT_SIGNAL( toggleExpand() ),
00382             mMainView, TQT_SLOT( toggleExpand() ) );
00383     connect(mMainView, TQT_SIGNAL( calendarViewExpanded( bool ) ),
00384             mAgendaView, TQT_SLOT( setExpandedButton( bool ) ) );
00385 
00386     connect( mAgendaView,TQT_SIGNAL( zoomViewHorizontally(const TQDate &, int )),
00387              mMainView->dateNavigator(),TQT_SLOT( selectDates( const TQDate &, int ) ) );
00388     mAgendaView->readSettings();
00389   }
00390 
00391   if ( !mAgendaSideBySideView && showSideBySide ) {
00392     mAgendaSideBySideView =
00393       new MultiAgendaView( mMainView->calendar(), mMainView, parent,
00394                         "KOViewManager::AgendaSideBySideView" );
00395 
00396     addView(mAgendaSideBySideView);
00397 
00398 /*    connect(mAgendaSideBySideView, TQT_SIGNAL( toggleExpand() ),
00399             mMainView, TQT_SLOT( toggleExpand() ) );
00400     connect(mMainView, TQT_SIGNAL( calendarViewExpanded( bool ) ),
00401             mAgendaSideBySideView, TQT_SLOT( setExpandedButton( bool ) ) );
00402 
00403     connect( mAgendaSideBySideView,TQT_SIGNAL( zoomViewHorizontally(const TQDate &, int )),
00404              mMainView->dateNavigator(),TQT_SLOT( selectDates( const TQDate &, int ) ) );*/
00405   }
00406 
00407   if ( showBoth && mAgendaViewTabs ) {
00408     if ( mAgendaView && mAgendaViewTabs->indexOf( mAgendaView ) < 0 )
00409       mAgendaViewTabs->addTab( mAgendaView, i18n("Merged calendar") );
00410     if ( mAgendaSideBySideView && mAgendaViewTabs->indexOf( mAgendaSideBySideView ) < 0 )
00411       mAgendaViewTabs->addTab( mAgendaSideBySideView, i18n("Calendars Side by Side") );
00412     mAgendaViewTabs->setCurrentPage( mAgendaViewTabIndex );
00413   } else {
00414     if ( mAgendaView && mMainView->viewStack()->id( mAgendaView ) < 0 )
00415       mMainView->viewStack()->addWidget( mAgendaView );
00416     if ( mAgendaSideBySideView && mMainView->viewStack()->id( mAgendaSideBySideView ) < 0 )
00417       mMainView->viewStack()->addWidget( mAgendaSideBySideView );
00418   }
00419 
00420   goMenu( true );
00421   if ( mAgendaViewTabs && showBoth )
00422     showView( static_cast<KOrg::BaseView*>( mAgendaViewTabs->currentPage() ) );
00423   else if ( mAgendaView && showMerged )
00424     showView( mAgendaView );
00425   else if ( mAgendaSideBySideView && showSideBySide )
00426     showView( mAgendaSideBySideView );
00427 }
00428 
00429 void KOViewManager::showDayView()
00430 {
00431   mAgendaMode = AGENDA_DAY;
00432   showAgendaView();
00433   mMainView->dateNavigator()->selectDates( 1 );
00434 }
00435 
00436 void KOViewManager::showWorkWeekView()
00437 {
00438   mAgendaMode = AGENDA_WORK_WEEK;
00439   showAgendaView();
00440   mMainView->dateNavigator()->selectWorkWeek();
00441 }
00442 
00443 void KOViewManager::showWeekView()
00444 {
00445   mAgendaMode = AGENDA_WEEK;
00446   showAgendaView();
00447   mMainView->dateNavigator()->selectWeek();
00448 }
00449 
00450 void KOViewManager::showNextXView()
00451 {
00452   mAgendaMode = AGENDA_NEXTX;
00453   showAgendaView();
00454   mMainView->dateNavigator()->selectDates( TQDate::currentDate(),
00455                                            KOPrefs::instance()->mNextXDays );
00456 }
00457 
00458 void KOViewManager::showMonthView()
00459 {
00460   if (!mMonthView) {
00461     mMonthView = new KOMonthView(mMainView->calendar(), mMainView->viewStack(), "KOViewManager::MonthView");
00462     addView(mMonthView);
00463   }
00464 
00465   goMenu( true );
00466   showView(mMonthView);
00467 }
00468 
00469 void KOViewManager::showTodoView()
00470 {
00471   if ( !mTodoView ) {
00472     mTodoView = new KOTodoView( mMainView->calendar(), mMainView->viewStack(),
00473                                 "KOViewManager::TodoView" );
00474     mTodoView->setCalendar( mMainView->calendar() );
00475     addView( mTodoView );
00476     connectTodoView( mTodoView );
00477 
00478     KConfig *config = KOGlobals::self()->config();
00479     mTodoView->restoreLayout( config, "Todo View" );
00480   }
00481 
00482   goMenu( false );
00483   showView( mTodoView );
00484 }
00485 
00486 void KOViewManager::showJournalView()
00487 {
00488   if (!mJournalView) {
00489     mJournalView = new KOJournalView(mMainView->calendar(),mMainView->viewStack(),
00490                                      "KOViewManager::JournalView");
00491     addView(mJournalView);
00492   }
00493 
00494   goMenu( true );
00495   showView(mJournalView);
00496 }
00497 
00498 
00499 void KOViewManager::showTimelineView()
00500 {
00501   if (!mTimelineView) {
00502     mTimelineView = new KOTimelineView(mMainView->calendar(),mMainView->viewStack(),
00503                                      "KOViewManager::TimelineView");
00504     addView(mTimelineView);
00505   }
00506   goMenu( true );
00507   showView(mTimelineView);
00508 }
00509 
00510 void KOViewManager::showEventView()
00511 {
00512   if ( mLastEventView ) {
00513     goMenu( true );
00514     showView( mLastEventView );
00515   } else {
00516     showWeekView();
00517   }
00518 }
00519 
00520 Incidence *KOViewManager::currentSelection()
00521 {
00522   if ( !mCurrentView ) return 0;
00523   Incidence::List incidenceList = mCurrentView->selectedIncidences();
00524   if ( incidenceList.isEmpty() ) return 0;
00525 
00526   return incidenceList.first();
00527 }
00528 
00529 TQDate KOViewManager::currentSelectionDate()
00530 {
00531   TQDate qd;
00532   if (mCurrentView) {
00533     DateList qvl = mCurrentView->selectedIncidenceDates();
00534     if (!qvl.isEmpty()) qd = qvl.first();
00535   }
00536   return qd;
00537 }
00538 
00539 void KOViewManager::setDocumentId( const TQString &id )
00540 {
00541   if (mTodoView) mTodoView->setDocumentId( id );
00542 }
00543 
00544 
00545 TQWidget* KOViewManager::widgetForView( KOrg::BaseView* view ) const
00546 {
00547   const bool showBoth = KOPrefs::instance()->agendaViewCalendarDisplay() == KOPrefs::AllCalendarViews;
00548   if ( (view == mAgendaView || view == mAgendaSideBySideView) && mAgendaViewTabs && showBoth ) {
00549     return mAgendaViewTabs;
00550   }
00551   return view;
00552 }
00553 
00554 
00555 void KOViewManager::currentAgendaViewTabChanged( TQWidget* widget )
00556 {
00557   KConfig *config = KOGlobals::self()->config();
00558   config->setGroup( "Views" );
00559   config->writeEntry( "Agenda View Tab Index", mAgendaViewTabs->currentPageIndex() );
00560 
00561   goMenu( true );
00562   showView( static_cast<KOrg::BaseView*>( widget ) );
00563 }
00564 
00565 void KOViewManager::resourcesChanged()
00566 {
00567   if ( mAgendaView )
00568     mAgendaView->resourcesChanged();
00569   if ( mAgendaSideBySideView )
00570     mAgendaSideBySideView->resourcesChanged();
00571 }
00572 
00573 void KOViewManager::updateMultiCalendarDisplay()
00574 {
00575   if ( agendaIsSelected() ) {
00576     showAgendaView();
00577   } else {
00578     updateView();
00579   }
00580 }
00581 
00582 bool KOViewManager::agendaIsSelected() const
00583 {
00584   return mCurrentView == mAgendaView            ||
00585          mCurrentView == mAgendaSideBySideView  ||
00586         ( mAgendaViewTabs && mCurrentView == mAgendaViewTabs->currentPage() );
00587 }