kde-playground/kdepim/calendarviews/viewerapp/mainwindow.cpp
2015-04-14 21:49:29 +00:00

130 lines
4 KiB
C++

/*
Copyright (C) 2010 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.net
Author: Kevin Krammer, krake@kdab.com
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
#include "mainwindow.h"
#include "settings.h"
#include "agenda.h"
#include "agendaview.h"
#include "month/monthview.h"
#include "multiagenda/multiagendaview.h"
#include "timeline/timelineview.h"
#include "prefs.h"
#include <calendarsupport/collectionselection.h>
#include <Akonadi/Calendar/IncidenceChanger>
#include <KCalCore/Event>
#include <Akonadi/Collection>
#include <Akonadi/Control>
#include <KCheckableProxyModel>
using namespace Akonadi;
using namespace CalendarSupport;
using namespace EventViews;
MainWindow::MainWindow( const QStringList &viewNames )
: QMainWindow(),
mViewNames( viewNames ),
mIncidenceChanger( 0 ),
mSettings( 0 ),
mViewPreferences( 0 )
{
mUi.setupUi( this );
mUi.tabWidget->clear();
connect( mUi.addViewMenu, SIGNAL(triggered(QAction*)), this, SLOT(addViewTriggered(QAction*)) );
Akonadi::Control::widgetNeedsAkonadi( this );
setGeometry( 0, 0, 800, 600 );
QMetaObject::invokeMethod( this, "delayedInit", Qt::QueuedConnection );
}
MainWindow::~MainWindow()
{
delete mViewPreferences;
delete mSettings;
}
void MainWindow::addView( const QString &viewName )
{
EventView *eventView = 0;
const KDateTime start = KDateTime::currentLocalDateTime().addDays( -1 );
const KDateTime end = KDateTime::currentLocalDateTime().addDays( 1 );
if ( viewName == QLatin1String( "agenda" ) ) {
eventView = new AgendaView( start.date(), end.date(), true, false, this );
} else if ( viewName == QLatin1String( "multiagenda" ) ) {
eventView = new MultiAgendaView( this );
} else if ( viewName == QLatin1String( "month" ) ) {
eventView = new MonthView( MonthView::Visible, this );
} else if ( viewName == QLatin1String( "timeline" ) ) {
eventView = new TimelineView( this );
}
if ( eventView ) {
eventView->setPreferences( *mViewPreferences );
eventView->setCalendar( mCalendar );
eventView->setIncidenceChanger( mIncidenceChanger );
eventView->setDateRange( start, end );
eventView->updateConfig();
mUi.tabWidget->addTab( eventView, viewName );
} else {
kError() << "Cannot create view" << viewName;
}
}
void MainWindow::delayedInit()
{
// create our application settings
mSettings = new Settings;
// create view preferences so that matching values are retrieved from
// application settings
mViewPreferences = new PrefsPtr( new Prefs( mSettings ) );
mCalendar = Akonadi::ETMCalendar::Ptr( new Akonadi::ETMCalendar() );
KCheckableProxyModel *checkableProxy = mCalendar->checkableProxyModel();
QItemSelectionModel *selectionModel = checkableProxy->selectionModel();
CalendarSupport::CollectionSelection *collectionSelection = new CalendarSupport::CollectionSelection( selectionModel );
EventViews::EventView::setGlobalCollectionSelection( collectionSelection );
mIncidenceChanger = new IncidenceChanger( this );
mCalendar->setCollectionFilteringEnabled( false );
Q_FOREACH( const QString &viewName, mViewNames ) {
addView( viewName );
}
}
void MainWindow::addViewTriggered( QAction *action )
{
QString viewName = action->text().toLower();
viewName.remove( QLatin1Char( '&' ) );
addView( viewName );
}
// kate: space-indent on; indent-width 2; replace-tabs on;