diff options
author | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-09-01 00:37:02 +0000 |
---|---|---|
committer | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-09-01 00:37:02 +0000 |
commit | cc29364f06178f8f6b457384f2ec37a042bd9d43 (patch) | |
tree | 7c77a3184c698bbf9d98cef09fb1ba8124daceba /korganizer/previewdialog.cpp | |
parent | 4f6c584bacc8c3c694228f36ada3de77a76614a6 (diff) | |
download | tdepim-cc29364f06178f8f6b457384f2ec37a042bd9d43.tar.gz tdepim-cc29364f06178f8f6b457384f2ec37a042bd9d43.zip |
* Massive set of changes to bring in all fixes and enhancements from the Enterprise PIM branch
* Ensured that the Trinity changes were applied on top of those enhancements, and any redundancy removed
* Added journal read support to the CalDAV resource
* Fixed CalDAV resource to use events URL for tasks and journals when separate URL checkbox unchecked
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdepim@1170461 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'korganizer/previewdialog.cpp')
-rw-r--r-- | korganizer/previewdialog.cpp | 163 |
1 files changed, 163 insertions, 0 deletions
diff --git a/korganizer/previewdialog.cpp b/korganizer/previewdialog.cpp new file mode 100644 index 000000000..23671bd92 --- /dev/null +++ b/korganizer/previewdialog.cpp @@ -0,0 +1,163 @@ +/* + This file is part of KOrganizer. + + Copyright (c) 2003,2004 Cornelius Schumacher <schumacher@kde.org> + Copyright (C) 2004 Reinhold Kainhofer <reinhold@kainhofer.com> + + Copyright (C) 2010 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.net> + Author: Sergio Martins, <sergio.martins@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. + + 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 "previewdialog.h" + +#include "kolistview.h" +#include "koprefs.h" +#include "stdcalendar.h" + +#include <klocale.h> + +#include <libkcal/calendarlocal.h> + +#include <kstandarddirs.h> +#include <kfiledialog.h> +#include <kmessagebox.h> +#include <kio/netaccess.h> + +#include <tqlabel.h> +#include <tqlayout.h> +#include <tqradiobutton.h> +#include <tqpushbutton.h> +#include <tqdialog.h> + +using namespace KCal; + +PreviewDialog::PreviewDialog( const KURL &url, TQWidget *parent ) + : KDialogBase( Plain, i18n("Import Calendar/Event"), User1 | User2 | Cancel, User1, parent, + 0, true, true, KGuiItem( i18n("&Merge into existing calendar"), "merge" ) ), + mOriginalUrl( url ) +{ + TQFrame *topFrame = plainPage(); + TQVBoxLayout *topLayout = new TQVBoxLayout( topFrame, 0, spacingHint() ); + + mCalendar = new CalendarLocal( KOPrefs::instance()->mTimeZoneId ); + mListView = new KOListView( mCalendar, topFrame, "PreviewDialog::ListView", true ); + topLayout->addWidget( mListView ); + + topLayout->setSpacing( spacingHint() ); + topLayout->setMargin( marginHint() ); + + connect( this, TQT_SIGNAL(user1Clicked()), TQT_SLOT(slotMerge()) ); + connect( this, TQT_SIGNAL(user2Clicked()), TQT_SLOT(slotAdd()) ); + + // when someone edits a kmail attachment he's editing a tmp file, check for that + // and if it's a tmp file then open a save dialog + if ( isTempFile() ) { + setButtonGuiItem( User2, KGuiItem( i18n("&Add as new calendar..."), "add" ) ); + } else { + setButtonGuiItem( User2, KGuiItem( i18n("&Add as new calendar"), "add" ) ); + } + + mLocalUrl = 0; +} + +PreviewDialog::~PreviewDialog() +{ + if ( mLocalUrl && !mOriginalUrl.isLocalFile() ) { + KIO::NetAccess::removeTempFile( mLocalUrl->path() ); + delete mLocalUrl; + } + + delete mCalendar; +} + +bool PreviewDialog::loadCalendar() +{ + // If it's a remote file, download it so we can give it to CalendarLocal + if ( !mOriginalUrl.isLocalFile() ) { + if ( mLocalUrl ) { + // loadCalendar already called.. remove old one. + KIO::NetAccess::removeTempFile( mLocalUrl->path() ); + delete mLocalUrl; + } + + TQString tmpFile; + if ( KIO::NetAccess::download( mOriginalUrl, tmpFile, 0 ) ) { + mLocalUrl = new KURL( tmpFile ); + } else { + mLocalUrl = 0; + } + } else { + mLocalUrl = &mOriginalUrl; + } + + if ( mLocalUrl ) { + const bool success = mCalendar->load( mLocalUrl->path() ); + + if ( !success && !mOriginalUrl.isLocalFile() ) { + KIO::NetAccess::removeTempFile( mLocalUrl->path() ); + } else { + mListView->showAll(); + } + return success; + } else { + return false; + } +} + +void PreviewDialog::slotMerge() +{ + if ( mLocalUrl ) { + emit openURL( *mLocalUrl, true ); + emit dialogFinished( this ); + accept(); + } +} + +void PreviewDialog::slotAdd() +{ + KURL finalUrl = mOriginalUrl; + if ( isTempFile() ) { + const TQString fileName = + KFileDialog::getSaveFileName( locateLocal( "data","korganizer/" ), + i18n( "*.vcs *.ics|Calendar Files" ), + this, i18n( "Select path for new calendar" ) ); + + finalUrl = KURL( fileName ); + + if ( !KIO::NetAccess::copy( mOriginalUrl, finalUrl, this ) && KIO::NetAccess::lastError() ) { + KMessageBox::error( this, KIO::NetAccess::lastErrorString() ); + return; + } + } + + if ( finalUrl.isValid() ) { + emit addResource( finalUrl ); + emit dialogFinished( this ); + accept(); + } +} + +bool PreviewDialog::isTempFile() const +{ + return mOriginalUrl.path().startsWith( locateLocal( "tmp", "" ) ); +} + +#include "previewdialog.moc" |