summaryrefslogtreecommitdiffstats
path: root/libtdepim/kincidencechooser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libtdepim/kincidencechooser.cpp')
-rw-r--r--libtdepim/kincidencechooser.cpp326
1 files changed, 326 insertions, 0 deletions
diff --git a/libtdepim/kincidencechooser.cpp b/libtdepim/kincidencechooser.cpp
new file mode 100644
index 000000000..fee89bbb6
--- /dev/null
+++ b/libtdepim/kincidencechooser.cpp
@@ -0,0 +1,326 @@
+/*
+ This file is part of libtdepim.
+
+ Copyright (c) 2004 Lutz Rogowski <rogowski@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 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.
+
+ As a special exception, permission is given to link this program
+ with any edition of TQt, and distribute the resulting executable,
+ without including the source code for TQt in the source distribution.
+*/
+
+#include <tqlayout.h>
+#include <tqlabel.h>
+#include <tqbuttongroup.h>
+#include <tqvbox.h>
+#include <tqhbox.h>
+#include <tqradiobutton.h>
+#include <tqpushbutton.h>
+#include <tqlayout.h>
+#include <tqscrollview.h>
+#include <tqtextbrowser.h>
+#include <tqapplication.h>
+
+
+#include <klocale.h>
+#include <kglobal.h>
+
+#include "kincidencechooser.h"
+#include "libkcal/incidence.h"
+#include "libkcal/incidenceformatter.h"
+
+int KIncidenceChooser::chooseMode = KIncidenceChooser::ask ;
+
+KIncidenceChooser::KIncidenceChooser(TQWidget *parent, char *name) :
+ KDialog(parent,name,true)
+{
+ KDialog *topFrame = this;
+ TQGridLayout *topLayout = new TQGridLayout(topFrame,5,3);
+ int iii = 0;
+ setCaption( i18n("Conflict Detected"));
+ TQLabel * lab;
+ lab = new TQLabel( i18n(
+ "<qt>A conflict was detected. This probably means someone edited the same entry on the server while you changed it locally."
+ "<br/>NOTE: You have to check mail again to apply your changes to the server.</qt>"), topFrame);
+ topLayout->addMultiCellWidget(lab, iii,iii,0,2);
+ ++iii;
+ TQHBox * b_box = new TQHBox( topFrame );
+ topLayout->addMultiCellWidget(b_box, iii,iii,0,2);
+ ++iii;
+ TQPushButton* button = new TQPushButton( i18n("Take Local"), b_box );
+ connect ( button, TQT_SIGNAL( clicked()), this, TQT_SLOT (takeIncidence1() ) );
+ button = new TQPushButton( i18n("Take New"), b_box );
+ connect ( button, TQT_SIGNAL( clicked()), this, TQT_SLOT (takeIncidence2() ) );
+ button = new TQPushButton( i18n("Take Both"), b_box );
+ connect ( button, TQT_SIGNAL( clicked()), this, TQT_SLOT (takeBoth() ) );
+ topLayout->setSpacing(spacingHint());
+ topLayout->setMargin(marginHint());
+ // text is not translated, because text has to be set later
+ mInc1lab = new TQLabel ( i18n("Local incidence"), topFrame);
+ topLayout->addWidget(mInc1lab ,iii,0);
+ mInc1Sumlab = new TQLabel ( i18n("Local incidence summary"), topFrame);
+ topLayout->addMultiCellWidget(mInc1Sumlab, iii,iii,1,2);
+ ++iii;
+ topLayout->addWidget( new TQLabel ( i18n("Last modified:"), topFrame) ,iii,0);
+ mMod1lab = new TQLabel ( "Set Last modified", topFrame);
+ topLayout->addWidget(mMod1lab,iii,1);
+ mShowDetails1 = new TQPushButton( i18n("Show Details"),topFrame );
+ connect ( mShowDetails1, TQT_SIGNAL( clicked()), this, TQT_SLOT (showIncidence1() ) );
+ topLayout->addWidget(mShowDetails1,iii,2);
+ ++iii;
+
+ mInc2lab = new TQLabel ( "Local incidence", topFrame);
+ topLayout->addWidget(mInc2lab,iii,0);
+ mInc2Sumlab = new TQLabel ( "Local incidence summary", topFrame);
+ topLayout->addMultiCellWidget(mInc2Sumlab, iii,iii,1,2);
+ ++iii;
+ topLayout->addWidget( new TQLabel ( i18n("Last modified:"), topFrame) ,iii,0);
+ mMod2lab = new TQLabel ( "Set Last modified", topFrame);
+ topLayout->addWidget(mMod2lab,iii,1);
+ mShowDetails2 = new TQPushButton( i18n("Show Details"), topFrame);
+ connect ( mShowDetails2, TQT_SIGNAL( clicked()), this, TQT_SLOT (showIncidence2() ) );
+ topLayout->addWidget(mShowDetails2,iii,2);
+ ++iii;
+ //
+#if 0
+ // commented out for now, because the diff code has too many bugs
+ mDiffBut = new TQPushButton( i18n("Show Differences"), topFrame );
+ connect ( mDiffBut, TQT_SIGNAL( clicked()), this, TQT_SLOT ( showDiff() ) );
+ topLayout->addMultiCellWidget(mDiffBut, iii,iii,0,2);
+ ++iii;
+#else
+ mDiffBut = 0;
+#endif
+ mBg = new TQButtonGroup ( 1, Qt::Horizontal, i18n("Sync Preferences"), topFrame);
+ topLayout->addMultiCellWidget(mBg, iii,iii,0,2);
+ ++iii;
+ mBg->insert( new TQRadioButton ( i18n("Take local entry on conflict"), mBg ), KIncidenceChooser::local);
+ mBg->insert( new TQRadioButton ( i18n("Take new (remote) entry on conflict"), mBg ), KIncidenceChooser::remote);
+ mBg->insert( new TQRadioButton ( i18n("Take newest entry on conflict"), mBg ), KIncidenceChooser::newest );
+ mBg->insert( new TQRadioButton ( i18n("Ask for every entry on conflict"), mBg ),KIncidenceChooser::ask );
+ mBg->insert( new TQRadioButton ( i18n("Take both on conflict"), mBg ), KIncidenceChooser::both );
+ mBg->setButton ( chooseMode );
+ mTbL = 0;
+ mTbN = 0;
+ mDisplayDiff = 0;
+ mSelIncidence = 0;
+ button = new TQPushButton( i18n("Apply This to All Conflicts of This Sync"), topFrame );
+ connect ( button, TQT_SIGNAL( clicked()), this, TQT_SLOT ( setSyncMode() ) );
+ topLayout->addMultiCellWidget(button, iii,iii,0,2);
+}
+
+KIncidenceChooser::~KIncidenceChooser()
+{
+ if ( mTbL ) delete mTbL;
+ if ( mTbN ) delete mTbN;
+ if ( mDisplayDiff ) {
+ delete mDisplayDiff;
+ delete diff;
+ }
+}
+
+void KIncidenceChooser::setIncidence( KCal::Incidence* local ,KCal::Incidence* remote )
+{
+ mInc1 = local;
+ mInc2 = remote;
+ setLabels();
+
+}
+KCal::Incidence* KIncidenceChooser::getIncidence( )
+{
+
+ KCal::Incidence* retval = mSelIncidence;
+ if ( chooseMode == KIncidenceChooser::local )
+ retval = mInc1;
+ else if ( chooseMode == KIncidenceChooser::remote )
+ retval = mInc2;
+ else if ( chooseMode == KIncidenceChooser::both ) {
+ retval = 0;
+ }
+ else if ( chooseMode == KIncidenceChooser::newest ) {
+ if ( mInc1->lastModified() == mInc2->lastModified())
+ retval = 0;
+ if ( mInc1->lastModified() > mInc2->lastModified() )
+ retval = mInc1;
+ else
+ retval = mInc2;
+ }
+ return retval;
+}
+
+void KIncidenceChooser::setSyncMode()
+{
+ chooseMode = mBg->selectedId ();
+ if ( chooseMode != KIncidenceChooser::ask )
+ TQDialog::accept();
+
+}
+
+void KIncidenceChooser::useGlobalMode()
+{
+ if ( chooseMode != KIncidenceChooser::ask )
+ TQDialog::reject();
+}
+
+void KIncidenceChooser::setLabels()
+{
+ KCal::Incidence* inc = mInc1;
+ TQLabel* des = mInc1lab;
+ TQLabel * sum = mInc1Sumlab;
+
+
+ if ( inc->type() == "Event" ) {
+ des->setText( i18n( "Local Event") );
+ sum->setText( inc->summary().left( 30 ));
+ if ( mDiffBut )
+ mDiffBut->setEnabled( true );
+ }
+ else if ( inc->type() == "Todo" ) {
+ des->setText( i18n( "Local Todo") );
+ sum->setText( inc->summary().left( 30 ));
+ if ( mDiffBut )
+ mDiffBut->setEnabled( true );
+
+ }
+ else if ( inc->type() == "Journal" ) {
+ des->setText( i18n( "Local Journal") );
+ sum->setText( inc->description().left( 30 ));
+ if ( mDiffBut )
+ mDiffBut->setEnabled( false );
+ }
+ mMod1lab->setText( KGlobal::locale()->formatDateTime(inc->lastModified() ));
+ inc = mInc2;
+ des = mInc2lab;
+ sum = mInc2Sumlab;
+ if ( inc->type() == "Event" ) {
+ des->setText( i18n( "New Event") );
+ sum->setText( inc->summary().left( 30 ));
+ }
+ else if ( inc->type() == "Todo" ) {
+ des->setText( i18n( "New Todo") );
+ sum->setText( inc->summary().left( 30 ));
+
+ }
+ else if ( inc->type() == "Journal" ) {
+ des->setText( i18n( "New Journal") );
+ sum->setText( inc->description().left( 30 ));
+
+ }
+ mMod2lab->setText( KGlobal::locale()->formatDateTime(inc->lastModified() ));
+}
+
+void KIncidenceChooser::showIncidence1()
+{
+ if ( mTbL ) {
+ if ( mTbL->isVisible() ) {
+ mShowDetails1->setText( i18n("Show Details"));
+ mTbL->hide();
+ } else {
+ mShowDetails1->setText( i18n("Hide Details"));
+ mTbL->show();
+ mTbL->raise();
+ }
+ return;
+ }
+ mTbL = new KDialogBase( this, "", false /*not modal*/, mInc1lab->text(), KDialogBase::Ok );
+ mTbL->setEscapeButton( KDialogBase::Ok );
+ connect( mTbL, TQT_SIGNAL( okClicked() ), this, TQT_SLOT( detailsDialogClosed() ) );
+ TQTextBrowser* textBrowser = new TQTextBrowser( mTbL );
+ mTbL->setMainWidget( textBrowser );
+ textBrowser->setText( KCal::IncidenceFormatter::extensiveDisplayString( mInc1 ) );
+ mTbL->setMinimumSize( 400, 400 );
+ mShowDetails1->setText( i18n("Hide Details"));
+ mTbL->show();
+ mTbL->raise();
+}
+
+void KIncidenceChooser::detailsDialogClosed()
+{
+ KDialogBase* dialog = static_cast<KDialogBase *>( TQT_TQWIDGET( const_cast<TQT_BASE_OBJECT_NAME*>(sender()) ) );
+ if ( dialog == mTbL )
+ mShowDetails1->setText( i18n( "Show details..." ) );
+ else
+ mShowDetails2->setText( i18n( "Show details..." ) );
+}
+
+void KIncidenceChooser::showDiff()
+{
+ if ( mDisplayDiff ) {
+ mDisplayDiff->show();
+ mDisplayDiff->raise();
+ return;
+ }
+ mDisplayDiff = new KPIM::HTMLDiffAlgoDisplay (this);
+ if ( mInc1->summary().left( 20 ) != mInc2->summary().left( 20 ) )
+ mDisplayDiff->setCaption( i18n( "Differences of %1 and %2").tqarg( mInc1->summary().left( 20 ) ).tqarg( mInc2->summary().left( 20 ) ) );
+ else
+ mDisplayDiff->setCaption( i18n( "Differences of %1").tqarg( mInc1->summary().left( 20 ) ) );
+
+ diff = new KPIM::CalendarDiffAlgo( mInc1, mInc2);
+ diff->setLeftSourceTitle( i18n( "Local entry"));
+ diff->setRightSourceTitle(i18n( "New (remote) entry") );
+ diff->addDisplay( mDisplayDiff );
+ diff->run();
+ mDisplayDiff->show();
+ mDisplayDiff->raise();
+}
+
+void KIncidenceChooser::showIncidence2()
+{
+ if ( mTbN ) {
+ if ( mTbN->isVisible() ) {
+ mShowDetails2->setText( i18n("Show Details"));
+ mTbN->hide();
+ } else {
+ mShowDetails2->setText( i18n("Hide Details"));
+ mTbN->show();
+ mTbN->raise();
+ }
+ return;
+ }
+ mTbN = new KDialogBase( this, "", false /*not modal*/, mInc2lab->text(), KDialogBase::Ok );
+ mTbN->setEscapeButton( KDialogBase::Ok );
+ connect( mTbN, TQT_SIGNAL( okClicked() ), this, TQT_SLOT( detailsDialogClosed() ) );
+ TQTextBrowser* textBrowser = new TQTextBrowser( mTbN );
+ mTbN->setMainWidget( textBrowser );
+ textBrowser->setText( KCal::IncidenceFormatter::extensiveDisplayString( mInc2 ) );
+ mTbN->setMinimumSize( 400, 400 );
+ mShowDetails2->setText( i18n("Hide Details"));
+ mTbN->show();
+ mTbN->raise();
+}
+
+void KIncidenceChooser::takeIncidence1()
+{
+ mSelIncidence = mInc1;
+ TQDialog::accept();
+}
+
+void KIncidenceChooser::takeIncidence2()
+{
+ mSelIncidence = mInc2;
+ TQDialog::accept();
+}
+
+void KIncidenceChooser::takeBoth()
+{
+
+ mSelIncidence = 0;
+ TQDialog::accept();
+}
+
+
+#include "kincidencechooser.moc"