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