Commit bab9aebe authored by Nicolás Alvarez's avatar Nicolás Alvarez
Browse files

Initial import from the monolithic kdepim.

This is the beginning of revision history for this module. If you
want to look at revision history older than this, please refer to the
techbase wiki for how to use Git history grafting. At the time of
writing, this wiki is located here:

http://community.kde.org/Frameworks/GitOldHistory

If you have already performed the grafting and you don't see any
history beyond this commit, try running "git log" with the "--follow"
argument.

Branched from the monolithic repo, kdepim master branch, at commit
d0009536f24e8c7f4cc32a70936f5c25194e9a6f
parents
EXTRA camelcase,defines,kdebug,null,qenums,tipsandthis
SKIP /tests/
cmake_minimum_required(VERSION 2.8.12)
project(incidenceeditorsng)
if(${CMAKE_SOURCE_DIR} STREQUAL ${incidenceeditorsng_SOURCE_DIR})
# ECM setup
find_package(ECM 5.16.0 CONFIG REQUIRED)
set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH})
set(LIBRARY_NAMELINK)
include(GenerateExportHeader)
include(ECMSetupVersion)
include(ECMGenerateHeaders)
include(ECMGeneratePriFile)
include(ECMPackageConfigHelpers)
include(ECMSetupVersion)
include(FeatureSummary)
include(KDEInstallDirs)
include(KDECMakeSettings)
include(KDEFrameworkCompilerSettings)
include(ECMQtDeclareLoggingCategory)
include(ECMAddTests)
set(KF5_VERSION "5.16.0")
set(KDEPIMLIBS_LIB_VERSION "5.1.42")
set(KDEPIM_LIB_VERSION "5.1.42")
set(QT_REQUIRED_VERSION "5.4.0")
set(KMIME_LIB_VERSION "4.87.0")
set(KMAILTRANSPORT_LIB_VERSION "4.78.0")
set(KLDAP_LIB_VERSION "4.80.0")
set(CALENDARUTILS_LIB_VERSION "4.80.0")
set(KCALENDARCORE_LIB_VERSION "4.81.0")
find_package(KF5Akonadi ${KDEPIMLIBS_LIB_VERSION} CONFIG REQUIRED)
find_package(Qt5 ${QT_REQUIRED_VERSION} CONFIG REQUIRED Widgets Test UiTools WebKitWidgets)
find_package(KF5I18n ${KF5_VERSION} CONFIG REQUIRED)
find_package(KF5Mime ${KMIME_LIB_VERSION} CONFIG REQUIRED)
find_package(KF5AkonadiMime ${KDEPIMLIBS_LIB_VERSION} CONFIG REQUIRED)
find_package(KF5Ldap ${KLDAP_LIB_VERSION} CONFIG REQUIRED)
find_package(KF5Codecs ${KF5_VERSION} CONFIG REQUIRED)
find_package(KF5CalendarSupport ${KDEPIM_LIB_VERSION} CONFIG REQUIRED)
find_package(KF5EventViews ${KDEPIM_LIB_VERSION} CONFIG REQUIRED)
find_package(KF5Libkdepim ${KDEPIM_LIB_VERSION} CONFIG REQUIRED)
find_package(KF5KdepimDBusInterfaces ${KDEPIM_LIB_VERSION} CONFIG REQUIRED)
find_package(KF5KDGantt2 ${KDEPIM_LIB_VERSION} CONFIG REQUIRED)
find_package(KF5CalendarUtils ${CALENDARUTILS_LIB_VERSION} CONFIG REQUIRED)
find_package(KF5CalendarCore ${KCALENDARCORE_LIB_VERSION} CONFIG REQUIRED)
find_package(KF5MailTransport ${KMAILTRANSPORT_LIB_VERSION} CONFIG REQUIRED)
# KF5::AkonadiCalendar
ecm_setup_version(${KDEPIM_LIB_VERSION} VARIABLE_PREFIX INCIDENCEEDITORSNG
VERSION_HEADER "${CMAKE_CURRENT_BINARY_DIR}/incidenceeditorsng_version.h"
PACKAGE_VERSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/KF5IncidenceEditorsngConfigVersion.cmake"
SOVERSION 5
)
option(KDEPIM_ENTERPRISE_BUILD "Enable features specific to the enterprise branch, which are normally disabled. Also, it disables many components not needed for Kontact such as the Kolab client." FALSE)
# config-enterprise.h is needed for both ENTERPRISE_BUILD and BUILD_EVERYTHING
configure_file(config-enterprise.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/src/config-enterprise.h )
########### Targets ###########
#REACTIVE IT
#add_definitions("-DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_TO_ASCII")
#TODO verify it
remove_definitions("-DQT_NO_URL_CAST_FROM_STRING")
remove_definitions( -DQT_NO_CAST_FROM_BYTEARRAY )
########### CMake Config Files ###########
set(CMAKECONFIG_INSTALL_DIR "${KDE_INSTALL_CMAKEPACKAGEDIR}/KF5IncidenceEditorsng")
ecm_configure_package_config_file(
"${CMAKE_CURRENT_SOURCE_DIR}/KF5IncidenceEditorsngConfig.cmake.in"
"${CMAKE_CURRENT_BINARY_DIR}/KF5IncidenceEditorsngConfig.cmake"
INSTALL_DESTINATION ${CMAKECONFIG_INSTALL_DIR}
)
install(FILES
"${CMAKE_CURRENT_BINARY_DIR}/KF5IncidenceEditorsngConfig.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/KF5IncidenceEditorsngConfigVersion.cmake"
DESTINATION "${CMAKECONFIG_INSTALL_DIR}"
COMPONENT Devel
)
install(EXPORT KF5IncidenceEditorsngTargets DESTINATION "${CMAKECONFIG_INSTALL_DIR}" FILE KF5IncidenceEditorsngTargets.cmake NAMESPACE KF5::)
install(FILES
${CMAKE_CURRENT_BINARY_DIR}/incidenceeditorsng_version.h
DESTINATION ${KDE_INSTALL_INCLUDEDIR_KF5} COMPONENT Devel
)
feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES)
else()
ecm_setup_version(${KDEPIM_LIB_VERSION} VARIABLE_PREFIX INCIDENCEEDITORSNG
VERSION_HEADER "${CMAKE_CURRENT_BINARY_DIR}/incidenceeditorsng_version.h"
PACKAGE_VERSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/KF5IncidenceEditorsngConfigVersion.cmake"
SOVERSION 5
)
endif()
add_subdirectory(src)
if (BUILD_TESTING)
add_subdirectory(autotests)
add_subdirectory(tests)
endif()
@PACKAGE_INIT@
find_dependency(KF5KDGantt2 "@KDEPIM_LIB_VERSION@")
find_dependency(KF5EventViews "@KDEPIM_LIB_VERSION@")
find_dependency(KF5CalendarSupport "@KDEPIM_LIB_VERSION@")
find_dependency(KF5CalendarUtils "@CALENDARUTILS_LIB_VERSION@")
find_dependency(KF5CalendarCore "@KCALENDARCORE_LIB_VERSION@")
find_dependency(KF5MailTransport "@KMAILTRANSPORT_LIB_VERSION@")
find_dependency(KF5Mime "@KMIME_LIB_VERSION@")
include("${CMAKE_CURRENT_LIST_DIR}/KF5IncidenceEditorsngTargets.cmake")
set( EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR} )
include_directories(
../
)
MACRO(IE_UNIT_TESTS)
FOREACH(_testname ${ARGN})
add_executable( ${_testname} ${_testname}.cpp modeltest.cpp )
add_test( ${_testname} ${_testname} )
ecm_mark_as_test(${_testname})
target_link_libraries(${_testname} Qt5::Test KF5::AkonadiCore KF5::KDGantt2 KF5::CalendarUtils KF5::CalendarCore KF5::IncidenceEditorsng KF5::KdepimDBusInterfaces KF5::Libkdepim)
ENDFOREACH(_testname)
ENDMACRO(IE_UNIT_TESTS)
MACRO(IE_EXECUTABLE_TESTS)
FOREACH(_testname ${ARGN})
add_executable(${_testname} NOGUI TEST ${_testname}.cpp modeltest.cpp)
target_link_libraries(${_testname} KF5::CalendarCore Qt5::Test KF5::IncidenceEditorsng)
ENDFOREACH(_testname)
ENDMACRO(IE_EXECUTABLE_TESTS)
IE_UNIT_TESTS(
conflictresolvertest
testfreebusyganttproxymodel
)
########### KTimeZoneComboBox unit test #############
set(ktimezonecomboboxtest_SRCS ktimezonecomboboxtest.cpp)
add_executable(ktimezonecomboboxtest ${ktimezonecomboboxtest_SRCS})
add_test(ktimezonecomboboxtest ktimezonecomboboxtest)
ecm_mark_as_test(ktimezonecomboboxtest)
target_link_libraries(
ktimezonecomboboxtest
KF5::CalendarCore
Qt5::Test
KF5::IncidenceEditorsng
)
add_executable(testindividualmaildialog testindividualmaildialog.cpp ../src/individualmaildialog.cpp)
ecm_mark_nongui_executable(testindividualmaildialog)
ecm_mark_as_test(testindividualmaildialog)
target_link_libraries(testindividualmaildialog
KF5::CalendarCore
Qt5::Test
)
/*
Copyright (C) 2010 Casey Link <unnamedrambler@gmail.com>
Copyright (C) 2009-2010 Klaralvdalens Datakonsult AB, a KDAB Group company <info@kdab.net>
This library is free software; you can redistribute it and/or modify it
under the terms of the GNU Library General Public License as published by
the Free Software Foundation; either version 2 of the License, or (at your
option) any later version.
This library 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 Library General Public
License for more details.
You should have received a copy of the GNU Library General Public License
along with this library; see the file COPYING.LIB. If not, write to the
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
*/
#include "conflictresolvertest.h"
#include "../src/conflictresolver.h"
#include <KCalCore/Event>
#include <KCalCore/Period>
#include <KCalCore/Duration>
#include <QWidget>
#include <qtest.h>
using namespace IncidenceEditorNG;
void ConflictResolverTest::insertAttendees()
{
foreach (KPIM::FreeBusyItem::Ptr item, attendees) {
resolver->insertAttendee(item);
}
}
void ConflictResolverTest::addAttendee(const QString &email, const KCalCore::FreeBusy::Ptr &fb,
KCalCore::Attendee::Role role)
{
QString name = QString("attendee %1").arg(attendees.count());
KPIM::FreeBusyItem::Ptr item(new KPIM::FreeBusyItem(KCalCore::Attendee::Ptr(
new KCalCore::Attendee(name, email, false,
KCalCore::Attendee::Accepted,
role)), 0));
item->setFreeBusy(KCalCore::FreeBusy::Ptr(new KCalCore::FreeBusy(*fb.data())));
attendees << item;
}
void ConflictResolverTest::initTestCase()
{
parent = new QWidget;
init();
}
void ConflictResolverTest::init()
{
base = KDateTime::currentLocalDateTime().addDays(1);
end = base.addSecs(10 * 60 * 60);
resolver = new ConflictResolver(parent, parent);
}
void ConflictResolverTest::cleanup()
{
delete resolver;
resolver = 0;
attendees.clear();
}
void ConflictResolverTest::simpleTest()
{
KCalCore::Period meeting(end.addSecs(-3 * 60 * 60), KCalCore::Duration(2 * 60 * 60));
addAttendee("albert@einstein.net",
KCalCore::FreeBusy::Ptr(new KCalCore::FreeBusy(KCalCore::Period::List()
<< meeting)));
insertAttendees();
static const int resolution = 15 * 60;
resolver->setResolution(resolution);
resolver->setEarliestDateTime(base);
resolver->setLatestDateTime(end);
resolver->findAllFreeSlots();
QVERIFY(resolver->availableSlots().size() == 2);
KCalCore::Period first = resolver->availableSlots().at(0);
QCOMPARE(first.start(), base);
QCOMPARE(first.end(), meeting.start());
KCalCore::Period second = resolver->availableSlots().at(1);
QEXPECT_FAIL("", "Got broken in revision f17b9a8c975588ad7cf4ce8b94ab8e32ac193ed8", Continue);
QCOMPARE(second.start(), meeting.end().addSecs(resolution)); //add 15 minutes because the
//free block doesn't start until
//the next timeslot
QCOMPARE(second.end(), end);
}
void ConflictResolverTest::stillPrettySimpleTest()
{
KCalCore::Period meeting1(base, KCalCore::Duration(2 * 60 * 60));
KCalCore::Period meeting2(base.addSecs(60 * 60), KCalCore::Duration(2 * 60 * 60));
KCalCore::Period meeting3(end.addSecs(-3 * 60 * 60), KCalCore::Duration(2 * 60 * 60));
addAttendee("john.f@kennedy.com",
KCalCore::FreeBusy::Ptr(new KCalCore::FreeBusy(KCalCore::Period::List()
<< meeting1 << meeting3)));
addAttendee("elvis@rock.com",
KCalCore::FreeBusy::Ptr(new KCalCore::FreeBusy(KCalCore::Period::List()
<< meeting2 << meeting3)));
addAttendee("albert@einstein.net",
KCalCore::FreeBusy::Ptr(new KCalCore::FreeBusy(KCalCore::Period::List()
<< meeting3)));
insertAttendees();
static const int resolution = 15 * 60;
resolver->setResolution(resolution);
resolver->setEarliestDateTime(base);
resolver->setLatestDateTime(end);
resolver->findAllFreeSlots();
QVERIFY(resolver->availableSlots().size() == 2);
KCalCore::Period first = resolver->availableSlots().at(0);
QEXPECT_FAIL("", "Got broken in revision f17b9a8c975588ad7cf4ce8b94ab8e32ac193ed8", Continue);
QCOMPARE(first.start(), meeting2.end().addSecs(resolution));
QCOMPARE(first.end(), meeting3.start());
KCalCore::Period second = resolver->availableSlots().at(1);
QEXPECT_FAIL("", "Got broken in revision f17b9a8c975588ad7cf4ce8b94ab8e32ac193ed8", Continue);
QCOMPARE(second.start(), meeting3.end().addSecs(resolution)); //add 15 minutes because the
//free block doesn't start until
//the next timeslot
QCOMPARE(second.end(), end);
}
#define _time( h, m ) KDateTime( base.date(), QTime( h, m ) )
void ConflictResolverTest::akademy2010()
{
// based off akademy 2010 schedule
// first event was at 9:30, so lets align our start time there
base.setTime(QTime(9, 30));
end = base.addSecs(8 * 60 * 60);
KCalCore::Period opening(_time(9, 30), _time(9, 45));
KCalCore::Period keynote(_time(9, 45), _time(10, 30));
KCalCore::Period sevenPrinciples(_time(10, 30), _time(11, 15));
KCalCore::Period commAsService(_time(10, 30), _time(11, 15));
KCalCore::Period kdeForums(_time(11, 15), _time(11, 45));
KCalCore::Period oviStore(_time(11, 15), _time(11, 45));
// 10 min break
KCalCore::Period highlights(_time(12, 0), _time(12, 45));
KCalCore::Period styles(_time(12, 0), _time(12, 45));
KCalCore::Period wikimedia(_time(12, 45), _time(13, 15));
KCalCore::Period avalanche(_time(12, 45), _time(13, 15));
KCalCore::Period pimp(_time(13, 15), _time(13, 45));
KCalCore::Period direction(_time(13, 15), _time(13, 45));
// lunch 1 hr 25 min lunch
KCalCore::Period blurr(_time(15, 15), _time(16, 00));
KCalCore::Period plasma(_time(15, 15), _time(16, 00));
// for ( int i = 1; i < 80; ++i ) {
// adds 80 people (adds the same 8 peopl 10 times)
addAttendee("akademyattendee1@email.com",
KCalCore::FreeBusy::Ptr(new KCalCore::FreeBusy(KCalCore::Period::List()
<< opening << keynote
<< oviStore << wikimedia
<< direction)));
addAttendee("akademyattendee2@email.com",
KCalCore::FreeBusy::Ptr(new KCalCore::FreeBusy(KCalCore::Period::List()
<< opening << keynote
<< commAsService << highlights
<< pimp)));
addAttendee("akademyattendee3@email.com",
KCalCore::FreeBusy::Ptr(new KCalCore::FreeBusy(KCalCore::Period::List()
<< opening << kdeForums
<< styles << pimp << plasma)));
addAttendee("akademyattendee4@email.com",
KCalCore::FreeBusy::Ptr(new KCalCore::FreeBusy(KCalCore::Period::List()
<< opening << keynote
<< oviStore << pimp << blurr)));
addAttendee("akademyattendee5@email.com",
KCalCore::FreeBusy::Ptr(new KCalCore::FreeBusy(KCalCore::Period::List()
<< keynote << oviStore
<< highlights << avalanche)));
addAttendee("akademyattendee6@email.com",
KCalCore::FreeBusy::Ptr(new KCalCore::FreeBusy(KCalCore::Period::List()
<< opening << keynote
<< commAsService
<< highlights)));
addAttendee("akademyattendee7@email.com",
KCalCore::FreeBusy::Ptr(new KCalCore::FreeBusy(KCalCore::Period::List()
<< opening << kdeForums
<< styles << avalanche
<< pimp << plasma)));
addAttendee("akademyattendee8@email.com",
KCalCore::FreeBusy::Ptr(new KCalCore::FreeBusy(KCalCore::Period::List()
<< opening << keynote
<< oviStore << wikimedia
<< blurr)));
// }
insertAttendees();
const int resolution = 5 * 60;
resolver->setResolution(resolution);
resolver->setEarliestDateTime(base);
resolver->setLatestDateTime(end);
// QBENCHMARK {
resolver->findAllFreeSlots();
// }
QVERIFY(resolver->availableSlots().size() == 3);
QEXPECT_FAIL("", "Got broken in revision f17b9a8c975588ad7cf4ce8b94ab8e32ac193ed8", Abort);
QCOMPARE(resolver->availableSlots().at(0).duration(),
KCalCore::Duration(10 * 60));
QCOMPARE(resolver->availableSlots().at(1).duration(),
KCalCore::Duration(1 * 60 * 60 + 25 * 60));
QVERIFY(resolver->availableSlots().at(2).start() > plasma.end());
}
void ConflictResolverTest::testPeriodIsLargerThenTimeframe()
{
base.setDate(QDate(2010, 7, 29));
base.setTime(QTime(7, 30));
end.setDate(QDate(2010, 7, 29));
end.setTime(QTime(8, 30));
KCalCore::Period testEvent(_time(5, 45), _time(8, 45));
addAttendee("kdabtest1@demo.kolab.org",
KCalCore::FreeBusy::Ptr(new KCalCore::FreeBusy(KCalCore::Period::List()
<< testEvent)));
addAttendee("kdabtest2@demo.kolab.org",
KCalCore::FreeBusy::Ptr(new KCalCore::FreeBusy(KCalCore::Period::List())));
insertAttendees();
resolver->setEarliestDateTime(base);
resolver->setLatestDateTime(end);
resolver->findAllFreeSlots();
QCOMPARE(resolver->availableSlots().size(), 0);
}
void ConflictResolverTest::testPeriodBeginsBeforeTimeframeBegins()
{
base.setDate(QDate(2010, 7, 29));
base.setTime(QTime(7, 30));
end.setDate(QDate(2010, 7, 29));
end.setTime(QTime(9, 30));
KCalCore::Period testEvent(_time(5, 45), _time(8, 45));
addAttendee("kdabtest1@demo.kolab.org",
KCalCore::FreeBusy::Ptr(new KCalCore::FreeBusy(KCalCore::Period::List()
<< testEvent)));
addAttendee("kdabtest2@demo.kolab.org",
KCalCore::FreeBusy::Ptr(new KCalCore::FreeBusy(KCalCore::Period::List())));
insertAttendees();
resolver->setEarliestDateTime(base);
resolver->setLatestDateTime(end);
resolver->findAllFreeSlots();
QCOMPARE(resolver->availableSlots().size(), 1);
KCalCore::Period freeslot = resolver->availableSlots().at(0);
QCOMPARE(freeslot.start(), _time(8, 45));
QCOMPARE(freeslot.end(), end);
}
void ConflictResolverTest::testPeriodEndsAfterTimeframeEnds()
{
base.setDate(QDate(2010, 7, 29));
base.setTime(QTime(7, 30));
end.setDate(QDate(2010, 7, 29));
end.setTime(QTime(9, 30));
KCalCore::Period testEvent(_time(8, 00), _time(9, 45));
addAttendee("kdabtest1@demo.kolab.org",
KCalCore::FreeBusy::Ptr(new KCalCore::FreeBusy(KCalCore::Period::List()
<< testEvent)));
addAttendee("kdabtest2@demo.kolab.org",
KCalCore::FreeBusy::Ptr(new KCalCore::FreeBusy(KCalCore::Period::List())));
insertAttendees();
resolver->setEarliestDateTime(base);
resolver->setLatestDateTime(end);
resolver->findAllFreeSlots();
QCOMPARE(resolver->availableSlots().size(), 1);
KCalCore::Period freeslot = resolver->availableSlots().at(0);
QCOMPARE(freeslot.duration(), KCalCore::Duration(30 * 60));
QCOMPARE(freeslot.start(), base);
QCOMPARE(freeslot.end(), _time(8, 00));
}
void ConflictResolverTest::testPeriodEndsAtSametimeAsTimeframe()
{
base.setDate(QDate(2010, 7, 29));
base.setTime(QTime(7, 45));
end.setDate(QDate(2010, 7, 29));
end.setTime(QTime(8, 45));
KCalCore::Period testEvent(_time(5, 45), _time(8, 45));
addAttendee("kdabtest1@demo.kolab.org",
KCalCore::FreeBusy::Ptr(new KCalCore::FreeBusy(KCalCore::Period::List()
<< testEvent)));
addAttendee("kdabtest2@demo.kolab.org",
KCalCore::FreeBusy::Ptr(new KCalCore::FreeBusy(KCalCore::Period::List())));
insertAttendees();
resolver->setEarliestDateTime(base);
resolver->setLatestDateTime(end);
resolver->findAllFreeSlots();
QCOMPARE(resolver->availableSlots().size(), 0);
}
QTEST_MAIN(ConflictResolverTest)
/*
Copyright (C) 2010 Casey Link <unnamedrambler@gmail.com>
Copyright (C) 2009-2010 Klaralvdalens Datakonsult AB, a KDAB Group company <info@kdab.net>
This library is free software; you can redistribute it and/or modify it
under the terms of the GNU Library General Public License as published by
the Free Software Foundation; either version 2 of the License, or (at your
option) any later version.
This library 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 Library General Public
License for more details.
You should have received a copy of the GNU Library General Public License
along with this library; see the file COPYING.LIB. If not, write to the
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
*/
#ifndef CONFLICTRESOLVERTEST_H
#define CONFLICTRESOLVERTEST_H
#include "CalendarSupport/FreeBusyItem"
#include <KCalCore/FreeBusy>
#include <KCalCore/Attendee>
#include <QObject>
namespace IncidenceEditorNG
{
class ConflictResolver;
}
class ConflictResolverTest : public QObject
{
Q_OBJECT
private Q_SLOTS:
void initTestCase();
void init();
void cleanup();
void simpleTest();
void stillPrettySimpleTest();
void akademy2010();
void testPeriodBeginsBeforeTimeframeBegins();
void testPeriodEndsAfterTimeframeEnds();
void testPeriodIsLargerThenTimeframe();
void testPeriodEndsAtSametimeAsTimeframe();
private:
void insertAttendees();
void addAttendee(const QString &email, const KCalCore::FreeBusy::Ptr &fb,
KCalCore::Attendee::Role role = KCalCore::Attendee::ReqParticipant);
QList<KPIM::FreeBusyItem::Ptr> attendees;
QWidget *parent;
IncidenceEditorNG::ConflictResolver *resolver;
KDateTime base, end;
};
#endif
/*
Copyright 2009 Thomas McGuire <mcguire@kde.org>
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