/* This file is part of KOrganizer. Copyright (c) 2000,2001 Cornelius Schumacher Copyright (C) 2003-2004 Reinhold Kainhofer 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. */ // ArchiveDialog -- archive/delete past events. #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "koprefs.h" #include "archivedialog.h" #include "eventarchiver.h" #include #include #include #include "archivedialog.moc" ArchiveDialog::ArchiveDialog(Calendar *cal,TQWidget *parent, const char *name) : KDialogBase (Plain,i18n("Archive/Delete Past Events and To-dos"), User1|Cancel,User1,parent,name,false,true, i18n("&Archive")) { mCalendar = cal; TQFrame *topFrame = plainPage(); TQVBoxLayout *topLayout = new TQVBoxLayout(topFrame); topLayout->setSpacing(spacingHint()); KActiveLabel *descLabel = new KActiveLabel( i18n("Archiving saves old items into the given file and " "then deletes them in the current calendar. If the archive file " "already exists they will be added. " "(How to restore)"), topFrame); topLayout->addWidget(descLabel); TQButtonGroup* radioBG = new TQButtonGroup( this ); radioBG->hide(); // just for the exclusive behavior connect( radioBG, TQT_SIGNAL( clicked( int ) ), TQT_SLOT( slotActionChanged() ) ); TQHBoxLayout *dateLayout = new TQHBoxLayout(0); mArchiveOnceRB = new TQRadioButton(i18n("Archive now items older than:"),topFrame); dateLayout->addWidget(mArchiveOnceRB); radioBG->insert(mArchiveOnceRB); mDateEdit = new KDateEdit(topFrame); TQWhatsThis::add(mDateEdit, i18n("The date before which items should be archived. All older events and to-dos will " "be saved and deleted, the newer (and events exactly on that date) will be kept.")); dateLayout->addWidget(mDateEdit); topLayout->addLayout(dateLayout); // Checkbox, numinput and combo for auto-archiving // (similar to kmail's mExpireFolderCheckBox/mReadExpiryTimeNumInput in kmfolderdia.cpp) TQHBox* autoArchiveHBox = new TQHBox(topFrame); topLayout->addWidget(autoArchiveHBox); mAutoArchiveRB = new TQRadioButton(i18n("Automaticall&y archive items older than:"), autoArchiveHBox); radioBG->insert(mAutoArchiveRB); TQWhatsThis::add(mAutoArchiveRB, i18n("If this feature is enabled, KOrganizer will regularly check if events and to-dos have to be archived; " "this means you will not need to use this dialog box again, except to change the settings.")); mExpiryTimeNumInput = new KIntNumInput(autoArchiveHBox); mExpiryTimeNumInput->setRange(1, 500, 1, false); mExpiryTimeNumInput->setEnabled(false); mExpiryTimeNumInput->setValue(7); TQWhatsThis::add(mExpiryTimeNumInput, i18n("The age of the events and to-dos to archive. All older items " "will be saved and deleted, the newer will be kept.")); mExpiryUnitsComboBox = new TQComboBox(autoArchiveHBox); // Those items must match the "Expiry Unit" enum in the kcfg file! mExpiryUnitsComboBox->insertItem(i18n("Day(s)")); mExpiryUnitsComboBox->insertItem(i18n("Week(s)")); mExpiryUnitsComboBox->insertItem(i18n("Month(s)")); mExpiryUnitsComboBox->setEnabled(false); TQHBoxLayout *fileLayout = new TQHBoxLayout(0); fileLayout->setSpacing(spacingHint()); TQLabel *l = new TQLabel(i18n("Archive &file:"),topFrame); fileLayout->addWidget(l); mArchiveFile = new KURLRequester(KOPrefs::instance()->mArchiveFile,topFrame); mArchiveFile->setMode(KFile::File); mArchiveFile->setFilter(i18n("*.ics|iCalendar Files")); TQWhatsThis::add(mArchiveFile, i18n("The path of the archive. The events and to-dos will be added to the " "archive file, so any events that are already in the file " "will not be modified or deleted. You can later load or merge the " "file like any other calendar. It is not saved in a special " "format, it uses the iCalendar format. ")); l->setBuddy(mArchiveFile->lineEdit()); fileLayout->addWidget(mArchiveFile); topLayout->addLayout(fileLayout); TQHGroupBox *typeBox = new TQHGroupBox( i18n("Type of Items to Archive"), topFrame); mEvents = new TQCheckBox( i18n("&Events"), typeBox ); mTodos = new TQCheckBox( i18n("Completed &To-dos"), typeBox ); topLayout->addWidget( typeBox ); TQWhatsThis::add( typeBox, i18n("Here you can select which items " "should be archived. Events are archived if they " "ended before the date given above; to-dos are archived if " "they were finished before the date.") ); mDeleteCb = new TQCheckBox(i18n("&Delete only, do not save"), topFrame); TQWhatsThis::add(mDeleteCb, i18n("Select this option to delete old events and to-dos without saving them. " "It is not possible to recover the events later.")); topLayout->addWidget(mDeleteCb); connect(mDeleteCb, TQT_SIGNAL(toggled(bool)), mArchiveFile, TQT_SLOT(setDisabled(bool))); connect(mDeleteCb, TQT_SIGNAL(toggled(bool)), this, TQT_SLOT(slotEnableUser1())); connect(mArchiveFile->lineEdit(),TQT_SIGNAL(textChanged ( const TQString & )), this,TQT_SLOT(slotEnableUser1())); // Load settings from KOPrefs mExpiryTimeNumInput->setValue( KOPrefs::instance()->mExpiryTime ); mExpiryUnitsComboBox->setCurrentItem( KOPrefs::instance()->mExpiryUnit ); mDeleteCb->setChecked( KOPrefs::instance()->mArchiveAction == KOPrefs::actionDelete ); mEvents->setChecked( KOPrefs::instance()->mArchiveEvents ); mTodos->setChecked( KOPrefs::instance()->mArchiveTodos ); slotEnableUser1(); // The focus should go to a useful field by default, not to the top richtext-label if ( KOPrefs::instance()->mAutoArchive ) { mAutoArchiveRB->setChecked( true ); mAutoArchiveRB->setFocus(); } else { mArchiveOnceRB->setChecked( true ); mArchiveOnceRB->setFocus(); } slotActionChanged(); } ArchiveDialog::~ArchiveDialog() { } void ArchiveDialog::slotEnableUser1() { bool state = ( mDeleteCb->isChecked() || !mArchiveFile->lineEdit()->text().isEmpty() ); enableButton(KDialogBase::User1,state); } void ArchiveDialog::slotActionChanged() { mDateEdit->setEnabled( mArchiveOnceRB->isChecked() ); mExpiryTimeNumInput->setEnabled( mAutoArchiveRB->isChecked() ); mExpiryUnitsComboBox->setEnabled( mAutoArchiveRB->isChecked() ); } // Archive old events void ArchiveDialog::slotUser1() { EventArchiver archiver; connect( &archiver, TQT_SIGNAL( eventsDeleted() ), this, TQT_SLOT( slotEventsDeleted() ) ); KOPrefs::instance()->mAutoArchive = mAutoArchiveRB->isChecked(); KOPrefs::instance()->mExpiryTime = mExpiryTimeNumInput->value(); KOPrefs::instance()->mExpiryUnit = mExpiryUnitsComboBox->currentItem(); if (mDeleteCb->isChecked()) { KOPrefs::instance()->mArchiveAction = KOPrefs::actionDelete; } else { KOPrefs::instance()->mArchiveAction = KOPrefs::actionArchive; // Get destination URL KURL destUrl( mArchiveFile->url() ); if ( !destUrl.isValid() ) { KMessageBox::sorry(this,i18n("The archive file name is not valid.\n")); return; } // Force filename to be ending with vCalendar extension TQString filename = destUrl.fileName(); if (!filename.endsWith(".vcs") && !filename.endsWith(".ics")) { filename.append(".ics"); destUrl.setFileName(filename); } KOPrefs::instance()->mArchiveFile = destUrl.url(); } if ( KOPrefs::instance()->mAutoArchive ) { archiver.runAuto( mCalendar, this, true /*with gui*/ ); emit autoArchivingSettingsModified(); accept(); } else archiver.runOnce( mCalendar, mDateEdit->date(), this ); } void ArchiveDialog::slotEventsDeleted() { emit eventsDeleted(); if ( !KOPrefs::instance()->mAutoArchive ) accept(); }