26#include <tqwidgetstack.h>
27#include <tqtabwidget.h>
30#include <tdeactioncollection.h>
34#include "actionmanager.h"
35#include "calendarview.h"
36#include "datenavigator.h"
37#include "kotodoview.h"
38#include "koagendaview.h"
39#include "komonthview.h"
40#include "kolistview.h"
41#include "kowhatsnextview.h"
42#include "kojournalview.h"
43#include "kotimelineview.h"
46#include "navigatorbar.h"
47#include "multiagendaview.h"
48#include <korganizer/mainwindow.h>
50#include "koviewmanager.h"
51#include "koviewmanager.moc"
54 TQObject(), mMainView( mainView )
63 mAgendaSideBySideView = 0;
69 mAgendaViewTabIndex = 0;
70 mAgendaMode = AGENDA_NONE;
73KOViewManager::~KOViewManager()
83void KOViewManager::readSettings(TDEConfig *config)
85 config->setGroup(
"General");
86 TQString
view = config->readEntry(
"Current View");
88 if (view ==
"WhatsNext") showWhatsNextView();
89 else if (view ==
"Month") showMonthView();
90 else if (view ==
"List") showListView();
91 else if (view ==
"Journal") showJournalView();
92 else if (view ==
"Todo") showTodoView();
93 else if (view ==
"Timeline") showTimelineView();
95 mAgendaMode = AgendaMode( config->readNumEntry(
"Agenda Mode", AGENDA_OTHER ) );
97 switch ( mAgendaMode ) {
98 case AGENDA_WORK_WEEK:
113 mAgendaMode = AGENDA_OTHER;
119void KOViewManager::writeSettings(TDEConfig *config)
121 config->setGroup(
"General");
124 if (mCurrentView == mWhatsNextView)
view =
"WhatsNext";
125 else if (mCurrentView == mMonthView)
view =
"Month";
126 else if (mCurrentView == mListView)
view =
"List";
127 else if (mCurrentView == mJournalView)
view =
"Journal";
128 else if (mCurrentView == mTodoView)
view =
"Todo";
129 else if (mCurrentView == mTimelineView)
view =
"Timeline";
132 config->writeEntry(
"Agenda Mode", mAgendaMode );
135 config->writeEntry(
"Current View",view);
138 mAgendaView->writeSettings(config);
141 mListView->writeSettings(config);
144 mTodoView->saveLayout(config,
"Todo View");
150 if( view == mCurrentView )
return;
154 if ( mCurrentView && mCurrentView->isEventView() ) {
155 mLastEventView = mCurrentView;
158 if ( mAgendaView ) mAgendaView->deleteSelectedDateTime();
162 mMainView->processIncidenceSelection( 0, TQDate() );
164 mMainView->updateView();
166 mMainView->adaptNavigationUnits();
169void KOViewManager::goMenu(
bool enable )
176 action = ac->action(
"go_today" );
178 action->setEnabled( enable );
180 action = ac->action(
"go_previous" );
182 action->setEnabled( enable );
184 action = ac->action(
"go_next" );
186 action->setEnabled( enable );
192void KOViewManager::raiseCurrentView()
194 if ((mMonthView && KOPrefs::instance()->mFullViewMonth && mCurrentView == mMonthView) ||
195 (mTodoView && KOPrefs::instance()->mFullViewTodo && mCurrentView == mTodoView)) {
196 mMainView->showLeftFrame(
false );
197 if ( mCurrentView == mTodoView ) {
198 mMainView->navigatorBar()->hide();
200 mMainView->navigatorBar()->show();
203 mMainView->showLeftFrame(
true );
204 mMainView->navigatorBar()->hide();
206 mMainView->viewStack()->raiseWidget( widgetForView( mCurrentView ) );
209void KOViewManager::updateView()
211 if ( mCurrentView ) mCurrentView->updateView();
214void KOViewManager::updateView(
const TQDate &start,
const TQDate &end)
218 if (mCurrentView) mCurrentView->showDates(start, end);
220 if (mTodoView) mTodoView->updateView();
228 connect( view, TQ_SIGNAL( incidenceSelected( Incidence *,
const TQDate & ) ),
229 mMainView, TQ_SLOT( processMainViewSelection( Incidence *,
const TQDate & ) ) );
232 connect( view, TQ_SIGNAL(showIncidenceSignal(Incidence *,
const TQDate &)),
233 mMainView, TQ_SLOT(showIncidence(Incidence *,
const TQDate &)) );
234 connect( view, TQ_SIGNAL(editIncidenceSignal(Incidence *,
const TQDate &)),
235 mMainView, TQ_SLOT(editIncidence(Incidence *,
const TQDate &)) );
236 connect( view, TQ_SIGNAL(deleteIncidenceSignal(Incidence *)),
237 mMainView, TQ_SLOT(deleteIncidence(Incidence *)) );
238 connect( view, TQ_SIGNAL(copyIncidenceSignal(Incidence *)),
239 mMainView, TQ_SLOT(copyIncidence(Incidence *)) );
240 connect( view, TQ_SIGNAL(cutIncidenceSignal(Incidence *)),
241 mMainView, TQ_SLOT(cutIncidence(Incidence *)) );
242 connect( view, TQ_SIGNAL(pasteIncidenceSignal()),
243 mMainView, TQ_SLOT(pasteIncidence()));
244 connect( view, TQ_SIGNAL(toggleAlarmSignal(Incidence *)),
245 mMainView, TQ_SLOT(toggleAlarm(Incidence *)) );
246 connect( view,TQ_SIGNAL(dissociateOccurrenceSignal(Incidence *,
const TQDate &)),
247 mMainView, TQ_SLOT(dissociateOccurrence(Incidence *,
const TQDate &)) );
248 connect( view,TQ_SIGNAL(dissociateFutureOccurrenceSignal(Incidence *,
const TQDate &)),
249 mMainView, TQ_SLOT(dissociateFutureOccurrence(Incidence *,
const TQDate &)) );
252 connect( view, TQ_SIGNAL(newEventSignal(ResourceCalendar *,
const TQString &)),
253 mMainView, TQ_SLOT(newEvent(ResourceCalendar *,
const TQString &)) );
254 connect( view, TQ_SIGNAL(newEventSignal(ResourceCalendar *,
const TQString &,
const TQDate &)),
255 mMainView, TQ_SLOT(newEvent(ResourceCalendar *,
const TQString &,
const TQDate &)) );
256 connect( view, TQ_SIGNAL(newEventSignal(ResourceCalendar *,
const TQString &,
const TQDateTime &)),
257 mMainView, TQ_SLOT(newEvent(ResourceCalendar *,
const TQString &,
const TQDateTime &)) );
258 connect( view, TQ_SIGNAL(newEventSignal(ResourceCalendar *,
const TQString &,
const TQDateTime &,
const TQDateTime &)),
259 mMainView, TQ_SLOT(newEvent(ResourceCalendar *,
const TQString &,
const TQDateTime &,
const TQDateTime &)) );
261 connect( view, TQ_SIGNAL(newTodoSignal(ResourceCalendar *,
const TQString &,
const TQDate &)),
262 mMainView, TQ_SLOT(newTodo(ResourceCalendar *,
const TQString &,
const TQDate &)) );
263 connect( view, TQ_SIGNAL(newSubTodoSignal(Todo *)),
264 mMainView, TQ_SLOT(newSubTodo(Todo *)) );
266 connect( view, TQ_SIGNAL(newJournalSignal(ResourceCalendar *,
const TQString &,
const TQDate &)),
267 mMainView, TQ_SLOT(newJournal(ResourceCalendar *,
const TQString &,
const TQDate &)) );
270 connect(mMainView, TQ_SIGNAL(configChanged()), view, TQ_SLOT(updateConfig()));
273 connect( mMainView, TQ_SIGNAL( dayPassed(
const TQDate & ) ),
274 view, TQ_SLOT( dayPassed(
const TQDate & ) ) );
275 connect( view, TQ_SIGNAL( startMultiModify(
const TQString & ) ),
276 mMainView, TQ_SLOT( startMultiModify(
const TQString & ) ) );
277 connect( view, TQ_SIGNAL( endMultiModify() ),
278 mMainView, TQ_SLOT( endMultiModify() ) );
280 connect( mMainView, TQ_SIGNAL( newIncidenceChanger( IncidenceChangerBase* ) ),
281 view, TQ_SLOT( setIncidenceChanger( IncidenceChangerBase * ) ) );
282 view->setIncidenceChanger( mMainView->incidenceChanger() );
285void KOViewManager::connectTodoView(
KOTodoView* todoView )
287 if (!todoView)
return;
290 connect( todoView, TQ_SIGNAL( purgeCompletedSignal() ),
291 mMainView, TQ_SLOT( purgeCompleted() ) );
292 connect( todoView, TQ_SIGNAL( unSubTodoSignal() ),
293 mMainView, TQ_SLOT( todo_unsub() ) );
294 connect( todoView, TQ_SIGNAL( unAllSubTodoSignal() ),
295 mMainView, TQ_SLOT( makeSubTodosIndependent() ) );
298void KOViewManager::zoomInHorizontally()
300 if( mAgendaView == mCurrentView ) mAgendaView->zoomInHorizontally();
302void KOViewManager::zoomOutHorizontally()
304 if( mAgendaView== mCurrentView ) mAgendaView->zoomOutHorizontally();
306void KOViewManager::zoomInVertically()
308 if( mAgendaView== mCurrentView ) mAgendaView->zoomInVertically();
310void KOViewManager::zoomOutVertically()
312 if( mAgendaView== mCurrentView ) mAgendaView->zoomOutVertically();
318 mMainView->viewStack()->addWidget( view );
321void KOViewManager::showWhatsNextView()
323 if (!mWhatsNextView) {
324 mWhatsNextView =
new KOWhatsNextView(mMainView->calendar(),mMainView->viewStack(),
325 "KOViewManager::WhatsNextView");
326 addView(mWhatsNextView);
332void KOViewManager::showListView()
335 mListView =
new KOListView(mMainView->calendar(), mMainView->viewStack(),
"KOViewManager::ListView");
342void KOViewManager::showAgendaView()
346 CalendarResources *calres =
dynamic_cast<CalendarResources*
>( mMainView->calendar() );
347 bool isLocalFile = !calres;
349 int mode = KOPrefs::instance()->agendaViewCalendarDisplay();
351 const bool showBoth = ( mode == KOPrefs::AllCalendarViews && !isLocalFile );
353 const bool showMerged = showBoth || mode == KOPrefs::CalendarsMerged || isLocalFile;
355 const bool showSideBySide = !isLocalFile && ( showBoth || mode == KOPrefs::CalendarsSideBySide );
357 TQWidget *parent = mMainView->viewStack();
358 if ( !mAgendaViewTabs && showBoth ) {
359 mAgendaViewTabs =
new TQTabWidget( mMainView->viewStack() );
360 connect( mAgendaViewTabs, TQ_SIGNAL( currentChanged( TQWidget* ) ),
361 this, TQ_SLOT( currentAgendaViewTabChanged( TQWidget* ) ) );
362 parent = mAgendaViewTabs;
364 TDEConfig *config = KOGlobals::self()->config();
365 config->setGroup(
"Views" );
366 mAgendaViewTabIndex = config->readNumEntry(
"Agenda View Tab Index", 0 );
369 if ( !mAgendaView && showMerged ) {
370 mAgendaView =
new KOAgendaView( mMainView->calendar(),
373 "KOViewManager::AgendaView" );
375 addView(mAgendaView);
377 connect(mAgendaView, TQ_SIGNAL( toggleExpand() ),
378 mMainView, TQ_SLOT( toggleExpand() ) );
379 connect(mMainView, TQ_SIGNAL( calendarViewExpanded(
bool ) ),
380 mAgendaView, TQ_SLOT( setExpandedButton(
bool ) ) );
382 connect( mAgendaView,TQ_SIGNAL( zoomViewHorizontally(
const TQDate &,
int )),
383 mMainView->dateNavigator(),TQ_SLOT( selectDates(
const TQDate &,
int ) ) );
384 mAgendaView->readSettings();
387 if ( !mAgendaSideBySideView && showSideBySide ) {
388 mAgendaSideBySideView =
389 new MultiAgendaView( mMainView->calendar(), mMainView, parent,
390 "KOViewManager::AgendaSideBySideView" );
392 addView(mAgendaSideBySideView);
403 if ( showBoth && mAgendaViewTabs ) {
404 if ( mAgendaView && mAgendaViewTabs->indexOf( mAgendaView ) < 0 )
405 mAgendaViewTabs->addTab( mAgendaView, i18n(
"Merged calendar") );
406 if ( mAgendaSideBySideView && mAgendaViewTabs->indexOf( mAgendaSideBySideView ) < 0 )
407 mAgendaViewTabs->addTab( mAgendaSideBySideView, i18n(
"Calendars Side by Side") );
408 mAgendaViewTabs->setCurrentPage( mAgendaViewTabIndex );
410 if ( mAgendaView && mMainView->viewStack()->id( mAgendaView ) < 0 )
411 mMainView->viewStack()->addWidget( mAgendaView );
412 if ( mAgendaSideBySideView && mMainView->viewStack()->id( mAgendaSideBySideView ) < 0 )
413 mMainView->viewStack()->addWidget( mAgendaSideBySideView );
417 if ( mAgendaViewTabs && showBoth )
418 showView(
static_cast<KOrg::BaseView*
>( mAgendaViewTabs->currentPage() ) );
419 else if ( mAgendaView && showMerged )
421 else if ( mAgendaSideBySideView && showSideBySide )
425void KOViewManager::showDayView()
427 mAgendaMode = AGENDA_DAY;
429 mMainView->dateNavigator()->selectDates( 1 );
432void KOViewManager::showWorkWeekView()
434 mAgendaMode = AGENDA_WORK_WEEK;
436 mMainView->dateNavigator()->selectWorkWeek();
439void KOViewManager::showWeekView()
441 mAgendaMode = AGENDA_WEEK;
443 mMainView->dateNavigator()->selectWeek();
446void KOViewManager::showNextXView()
448 mAgendaMode = AGENDA_NEXTX;
450 mMainView->dateNavigator()->selectDates( TQDate::currentDate(),
451 KOPrefs::instance()->mNextXDays );
454void KOViewManager::showMonthView()
457 mMonthView =
new KOMonthView(mMainView->calendar(), mMainView->viewStack(),
"KOViewManager::MonthView");
465void KOViewManager::showTodoView()
468 mTodoView =
new KOTodoView( mMainView->calendar(), mMainView->viewStack(),
469 "KOViewManager::TodoView" );
470 mTodoView->setCalendar( mMainView->calendar() );
471 addView( mTodoView );
472 connectTodoView( mTodoView );
474 TDEConfig *config = KOGlobals::self()->config();
475 mTodoView->restoreLayout( config,
"Todo View" );
482void KOViewManager::showJournalView()
485 mJournalView =
new KOJournalView(mMainView->calendar(),mMainView->viewStack(),
486 "KOViewManager::JournalView");
487 addView(mJournalView);
495void KOViewManager::showTimelineView()
497 if (!mTimelineView) {
498 mTimelineView =
new KOTimelineView(mMainView->calendar(),mMainView->viewStack(),
499 "KOViewManager::TimelineView");
500 addView(mTimelineView);
506void KOViewManager::showEventView()
508 if ( mLastEventView ) {
516Incidence *KOViewManager::currentSelection()
518 if ( !mCurrentView )
return 0;
519 Incidence::List incidenceList = mCurrentView->selectedIncidences();
520 if ( incidenceList.isEmpty() )
return 0;
522 return incidenceList.first();
525TQDate KOViewManager::currentSelectionDate()
529 DateList qvl = mCurrentView->selectedIncidenceDates();
530 if (!qvl.isEmpty()) qd = qvl.first();
535void KOViewManager::setDocumentId(
const TQString &
id )
537 if (mTodoView) mTodoView->setDocumentId(
id );
541TQWidget* KOViewManager::widgetForView(
KOrg::BaseView* view )
const
543 const bool showBoth = KOPrefs::instance()->agendaViewCalendarDisplay() == KOPrefs::AllCalendarViews;
544 if ( (view == mAgendaView || view == mAgendaSideBySideView) && mAgendaViewTabs && showBoth ) {
545 return mAgendaViewTabs;
551void KOViewManager::currentAgendaViewTabChanged( TQWidget* widget )
553 TDEConfig *config = KOGlobals::self()->config();
554 config->setGroup(
"Views" );
555 config->writeEntry(
"Agenda View Tab Index", mAgendaViewTabs->currentPageIndex() );
558 showView(
static_cast<KOrg::BaseView*
>( widget ) );
561void KOViewManager::resourcesChanged()
564 mAgendaView->resourcesChanged();
565 if ( mAgendaSideBySideView )
566 mAgendaSideBySideView->resourcesChanged();
569void KOViewManager::updateMultiCalendarDisplay()
571 if ( agendaIsSelected() ) {
578bool KOViewManager::agendaIsSelected()
const
580 return mCurrentView == mAgendaView ||
581 mCurrentView == mAgendaSideBySideView ||
582 ( mAgendaViewTabs && mCurrentView == mAgendaViewTabs->currentPage() );
static KOrg::MainWindow * findInstance(const KURL &url)
Is there a instance with this URL?
This is the main calendar widget.
This class provides a multi-column list view of todo events.
void showView(KOrg::BaseView *)
changes the view to be the currently selected view
This class provides an interface for all views being displayed within the main calendar view.
interface for korganizer main window
virtual TDEActionCollection * getActionCollection() const =0
Return actionCollection of this main window.
bool view(TQWidget *parent, Attachment *attachment)