00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include <qwidgetstack.h>
00026
00027 #include <kconfig.h>
00028 #include <kglobal.h>
00029
00030 #include "calendarview.h"
00031 #include "datenavigator.h"
00032 #include "kotodoview.h"
00033 #include "koagendaview.h"
00034 #include "komonthview.h"
00035 #include "kolistview.h"
00036 #include "kowhatsnextview.h"
00037 #include "kojournalview.h"
00038 #include "kotimespanview.h"
00039 #include "koprefs.h"
00040 #include "koglobals.h"
00041 #include "navigatorbar.h"
00042
00043 #include "koviewmanager.h"
00044 #include "koviewmanager.moc"
00045
00046 KOViewManager::KOViewManager( CalendarView *mainView ) :
00047 QObject(), mMainView( mainView )
00048 {
00049 mCurrentView = 0;
00050
00051 mLastEventView = 0;
00052
00053 mWhatsNextView = 0;
00054 mTodoView = 0;
00055 mAgendaView = 0;
00056 mMonthView = 0;
00057 mListView = 0;
00058 mJournalView = 0;
00059 mTimeSpanView = 0;
00060 }
00061
00062 KOViewManager::~KOViewManager()
00063 {
00064 }
00065
00066
00067 KOrg::BaseView *KOViewManager::currentView()
00068 {
00069 return mCurrentView;
00070 }
00071
00072 void KOViewManager::readSettings(KConfig *config)
00073 {
00074 config->setGroup("General");
00075 QString view = config->readEntry("Current View");
00076
00077 if (view == "WhatsNext") showWhatsNextView();
00078 else if (view == "Month") showMonthView();
00079 else if (view == "List") showListView();
00080 else if (view == "Journal") showJournalView();
00081 else if (view == "TimeSpan") showTimeSpanView();
00082 else if (view == "Todo") showTodoView();
00083 else showAgendaView();
00084 }
00085
00086 void KOViewManager::writeSettings(KConfig *config)
00087 {
00088 config->setGroup("General");
00089
00090 QString view;
00091 if (mCurrentView == mWhatsNextView) view = "WhatsNext";
00092 else if (mCurrentView == mMonthView) view = "Month";
00093 else if (mCurrentView == mListView) view = "List";
00094 else if (mCurrentView == mJournalView) view = "Journal";
00095 else if (mCurrentView == mTimeSpanView) view = "TimeSpan";
00096 else if (mCurrentView == mTodoView) view = "Todo";
00097 else view = "Agenda";
00098
00099 config->writeEntry("Current View",view);
00100
00101 if (mAgendaView) {
00102 mAgendaView->writeSettings(config);
00103 }
00104 if (mTimeSpanView) {
00105 mTimeSpanView->writeSettings(config);
00106 }
00107 if (mListView) {
00108 mListView->writeSettings(config);
00109 }
00110 if (mTodoView) {
00111 mTodoView->saveLayout(config,"Todo View");
00112 }
00113 }
00114
00115 void KOViewManager::showView(KOrg::BaseView *view)
00116 {
00117 if( view == mCurrentView ) return;
00118
00119 mCurrentView = view;
00120
00121 if ( mCurrentView && mCurrentView->isEventView() ) {
00122 mLastEventView = mCurrentView;
00123 }
00124
00125 if ( mAgendaView ) mAgendaView->deleteSelectedDateTime();
00126
00127 raiseCurrentView();
00128 mMainView->processIncidenceSelection( 0 );
00129
00130 mMainView->updateView();
00131
00132 mMainView->adaptNavigationUnits();
00133 }
00134
00135 void KOViewManager::raiseCurrentView()
00136 {
00137 if ((mMonthView && KOPrefs::instance()->mFullViewMonth && mCurrentView == mMonthView) ||
00138 (mTodoView && KOPrefs::instance()->mFullViewTodo && mCurrentView == mTodoView)) {
00139 mMainView->showLeftFrame( false );
00140 if ( mCurrentView == mTodoView ) {
00141 mMainView->navigatorBar()->hide();
00142 } else {
00143 mMainView->navigatorBar()->show();
00144 }
00145 } else {
00146 mMainView->showLeftFrame( true );
00147 mMainView->navigatorBar()->hide();
00148 }
00149 mMainView->viewStack()->raiseWidget(mCurrentView);
00150 }
00151
00152 void KOViewManager::updateView()
00153 {
00154 if ( mCurrentView ) mCurrentView->updateView();
00155 }
00156
00157 void KOViewManager::updateView(const QDate &start, const QDate &end)
00158 {
00159
00160
00161 if (mCurrentView) mCurrentView->showDates(start, end);
00162
00163 if (mTodoView) mTodoView->updateView();
00164 }
00165
00166 void KOViewManager::connectView(KOrg::BaseView *view)
00167 {
00168 if (!view) return;
00169
00170
00171 connect( view, SIGNAL( incidenceSelected( Incidence * ) ),
00172 mMainView, SLOT( processMainViewSelection( Incidence * ) ) );
00173
00174
00175 connect(view, SIGNAL(showIncidenceSignal(Incidence *)),
00176 mMainView, SLOT(showIncidence(Incidence *)));
00177 connect(view, SIGNAL(editIncidenceSignal(Incidence *)),
00178 mMainView, SLOT(editIncidence(Incidence *)));
00179 connect(view, SIGNAL(deleteIncidenceSignal(Incidence *)),
00180 mMainView, SLOT(deleteIncidence(Incidence *)));
00181 connect(view, SIGNAL(toggleAlarmSignal(Incidence *)),
00182 mMainView, SLOT(toggleAlarm(Incidence *)));
00183
00184
00185 connect( view, SIGNAL( newEventSignal() ),
00186 mMainView, SLOT( newEvent() ) );
00187 connect( view, SIGNAL( newEventSignal( QDateTime ) ),
00188 mMainView, SLOT( newEvent( QDateTime ) ) );
00189 connect( view, SIGNAL( newEventSignal( QDateTime, QDateTime ) ),
00190 mMainView, SLOT( newEvent( QDateTime, QDateTime ) ) );
00191 connect( view, SIGNAL( newEventSignal( QDate ) ),
00192 mMainView, SLOT( newEvent( QDate ) ) );
00193 connect( view, SIGNAL( newTodoSignal( QDate ) ),
00194 mMainView, SLOT( newTodo( QDate ) ) );
00195 connect( view, SIGNAL( newSubTodoSignal( Todo * ) ),
00196 mMainView, SLOT( newSubTodo( Todo *) ) );
00197
00198
00199 connect(mMainView, SIGNAL(configChanged()), view, SLOT(updateConfig()));
00200
00201
00202 connect( view, SIGNAL( incidenceAdded( Incidence* ) ),
00203 mMainView, SLOT( incidenceAdded( Incidence* ) ) );
00204 connect( view, SIGNAL( incidenceChanged( Incidence*, Incidence* ) ),
00205 mMainView, SLOT( incidenceChanged( Incidence*, Incidence* ) ) );
00206 connect( view, SIGNAL( incidenceChanged( Incidence*, Incidence*, int ) ),
00207 mMainView, SLOT( incidenceChanged( Incidence*, Incidence*, int ) ) );
00208 connect( view, SIGNAL( incidenceToBeDeleted( Incidence* ) ),
00209 mMainView, SLOT( incidenceToBeDeleted( Incidence* ) ) );
00210 connect( view, SIGNAL( incidenceDeleted( Incidence* ) ),
00211 mMainView, SLOT( incidenceDeleted( Incidence* ) ) );
00212 connect( mMainView, SIGNAL( dayPassed( QDate ) ),
00213 view, SLOT( dayPassed( QDate ) ) );
00214 connect( view, SIGNAL( startMultiModify( const QString & ) ),
00215 mMainView, SLOT( startMultiModify( const QString & ) ) );
00216 connect( view, SIGNAL( endMultiModify() ),
00217 mMainView, SLOT( endMultiModify() ) );
00218 }
00219
00220 void KOViewManager::connectTodoView( KOTodoView* todoView )
00221 {
00222 if (!todoView) return;
00223
00224
00225 connect( todoView, SIGNAL( purgeCompletedSignal() ),
00226 mMainView, SLOT( purgeCompleted() ) );
00227 connect( todoView, SIGNAL( unSubTodoSignal() ),
00228 mMainView, SLOT( todo_unsub() ) );
00229 connect( todoView, SIGNAL( todoCompleted( Todo * ) ),
00230 mMainView, SLOT( recurTodo( Todo * ) ) );
00231 }
00232
00233 void KOViewManager::addView(KOrg::BaseView *view)
00234 {
00235 connectView( view );
00236 #if QT_VERSION >= 300
00237 mMainView->viewStack()->addWidget( view );
00238 #else
00239 mMainView->viewStack()->addWidget( view, 1 );
00240 #endif
00241 }
00242
00243 void KOViewManager::showWhatsNextView()
00244 {
00245 if (!mWhatsNextView) {
00246 mWhatsNextView = new KOWhatsNextView(mMainView->calendar(),mMainView->viewStack(),
00247 "KOViewManager::WhatsNextView");
00248 addView(mWhatsNextView);
00249 }
00250 showView(mWhatsNextView);
00251 }
00252
00253 void KOViewManager::showListView()
00254 {
00255 if (!mListView) {
00256 mListView = new KOListView(mMainView->calendar(), mMainView->viewStack(), "KOViewManager::ListView");
00257 addView(mListView);
00258 }
00259 showView(mListView);
00260 }
00261
00262 void KOViewManager::showAgendaView()
00263 {
00264 if (!mAgendaView) {
00265 mAgendaView = new KOAgendaView(mMainView->calendar(), mMainView->viewStack(), "KOViewManager::AgendaView");
00266
00267 addView(mAgendaView);
00268
00269 connect(mAgendaView, SIGNAL( toggleExpand() ),
00270 mMainView, SLOT( toggleExpand() ) );
00271 connect(mMainView, SIGNAL( calendarViewExpanded( bool ) ),
00272 mAgendaView, SLOT( setExpandedButton( bool ) ) );
00273
00274 mAgendaView->readSettings();
00275 }
00276
00277 showView(mAgendaView);
00278 }
00279
00280 void KOViewManager::showDayView()
00281 {
00282 showAgendaView();
00283 mMainView->dateNavigator()->selectDates( 1 );
00284 }
00285
00286 void KOViewManager::showWorkWeekView()
00287 {
00288 showAgendaView();
00289 mMainView->dateNavigator()->selectWorkWeek();
00290 }
00291
00292 void KOViewManager::showWeekView()
00293 {
00294 showAgendaView();
00295 mMainView->dateNavigator()->selectWeek();
00296 }
00297
00298 void KOViewManager::showNextXView()
00299 {
00300 showAgendaView();
00301 mMainView->dateNavigator()->selectDates( QDate::currentDate(),
00302 KOPrefs::instance()->mNextXDays );
00303 }
00304
00305 void KOViewManager::showMonthView()
00306 {
00307 if (!mMonthView) {
00308 mMonthView = new KOMonthView(mMainView->calendar(), mMainView->viewStack(), "KOViewManager::MonthView");
00309 addView(mMonthView);
00310 }
00311
00312 showView(mMonthView);
00313 }
00314
00315 void KOViewManager::showTodoView()
00316 {
00317 if ( !mTodoView ) {
00318 mTodoView = new KOTodoView( mMainView->calendar(), mMainView->viewStack(),
00319 "KOViewManager::TodoView" );
00320 mTodoView->setCalendar( mMainView->calendar() );
00321 addView( mTodoView );
00322 connectTodoView( mTodoView );
00323
00324 KConfig *config = KOGlobals::self()->config();
00325 mTodoView->restoreLayout( config, "Todo View" );
00326 }
00327
00328 showView( mTodoView );
00329 }
00330
00331 void KOViewManager::showJournalView()
00332 {
00333 if (!mJournalView) {
00334 mJournalView = new KOJournalView(mMainView->calendar(),mMainView->viewStack(),
00335 "KOViewManager::JournalView");
00336 addView(mJournalView);
00337 }
00338
00339 showView(mJournalView);
00340 }
00341
00342 void KOViewManager::showTimeSpanView()
00343 {
00344 if (!mTimeSpanView) {
00345 mTimeSpanView = new KOTimeSpanView(mMainView->calendar(),mMainView->viewStack(),
00346 "KOViewManager::TimeSpanView");
00347 addView(mTimeSpanView);
00348 mTimeSpanView->readSettings();
00349 }
00350
00351 showView(mTimeSpanView);
00352 }
00353
00354 void KOViewManager::showEventView()
00355 {
00356 if ( mLastEventView ) showView( mLastEventView );
00357 else showWeekView();
00358 }
00359
00360 Incidence *KOViewManager::currentSelection()
00361 {
00362 if ( !mCurrentView ) return 0;
00363 Incidence::List incidenceList = mCurrentView->selectedIncidences();
00364 if ( incidenceList.isEmpty() ) return 0;
00365
00366 return incidenceList.first();
00367 }
00368
00369 QDate KOViewManager::currentSelectionDate()
00370 {
00371 QDate qd;
00372 if (mCurrentView) {
00373 DateList qvl = mCurrentView->selectedDates();
00374 if (!qvl.isEmpty()) qd = qvl.first();
00375 }
00376 return qd;
00377 }
00378
00379 void KOViewManager::setDocumentId( const QString &id )
00380 {
00381 if (mTodoView) mTodoView->setDocumentId( id );
00382 }