korganizer Library API Documentation

archivedialog.cpp

00001 /* 00002 This file is part of KOrganizer. 00003 Copyright (c) 2000,2001 Cornelius Schumacher <schumacher@kde.org> 00004 00005 This program is free software; you can redistribute it and/or modify 00006 it under the terms of the GNU General Public License as published by 00007 the Free Software Foundation; either version 2 of the License, or 00008 (at your option) any later version. 00009 00010 This program is distributed in the hope that it will be useful, 00011 but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00013 GNU General Public License for more details. 00014 00015 You should have received a copy of the GNU General Public License 00016 along with this program; if not, write to the Free Software 00017 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 00018 00019 As a special exception, permission is given to link this program 00020 with any edition of Qt, and distribute the resulting executable, 00021 without including the source code for Qt in the source distribution. 00022 */ 00023 00024 // ArchiveDialog -- archive/delete past events. 00025 00026 #include <qlabel.h> 00027 #include <qlayout.h> 00028 #include <qdatetime.h> 00029 #include <qcheckbox.h> 00030 #include <qwhatsthis.h> 00031 00032 #include <kdebug.h> 00033 #include <klocale.h> 00034 #include <kurlrequester.h> 00035 #include <kmessagebox.h> 00036 #include <kfiledialog.h> 00037 #include <kurl.h> 00038 #include <klineedit.h> 00039 #include <kactivelabel.h> 00040 00041 #include <libkdepim/kdateedit.h> 00042 00043 #include "koprefs.h" 00044 00045 #include "archivedialog.h" 00046 #include "eventarchiver.h" 00047 #include <knuminput.h> 00048 #include <qbuttongroup.h> 00049 #include <qradiobutton.h> 00050 #include "archivedialog.moc" 00051 00052 ArchiveDialog::ArchiveDialog(Calendar *cal,QWidget *parent, const char *name) 00053 : KDialogBase (Plain,i18n("Archive/Delete Past Events"), 00054 User1|Cancel,User1,parent,name,false,true, 00055 i18n("&Archive")) 00056 { 00057 mCalendar = cal; 00058 00059 QFrame *topFrame = plainPage(); 00060 QVBoxLayout *topLayout = new QVBoxLayout(topFrame); 00061 topLayout->setSpacing(spacingHint()); 00062 00063 KActiveLabel *descLabel = new KActiveLabel( 00064 i18n("Archiving saves old events into the given file and " 00065 "then deletes them in the current calendar. If the archive file " 00066 "already exists they will be added. " 00067 "(<a href=\"whatsthis:In order to add an archive " 00068 "to your calendar, use the &quot;Merge Calendar&quot; function. " 00069 "You can view an archive by opening it in KOrganizer like any " 00070 "other calendar. It is not saved in a special format, but as " 00071 "vCalendar.\">How to restore</a>)"), 00072 topFrame); 00073 topLayout->addWidget(descLabel); 00074 00075 QButtonGroup* radioBG = new QButtonGroup( this ); 00076 radioBG->hide(); // just for the exclusive behavior 00077 connect( radioBG, SIGNAL( clicked( int ) ), SLOT( slotActionChanged() ) ); 00078 00079 QHBoxLayout *dateLayout = new QHBoxLayout(0); 00080 mArchiveOnceRB = new QRadioButton(i18n("Archive now events older than:"),topFrame); 00081 dateLayout->addWidget(mArchiveOnceRB); 00082 radioBG->insert(mArchiveOnceRB); 00083 mDateEdit = new KDateEdit(topFrame); 00084 QWhatsThis::add(mDateEdit, 00085 i18n("The date before which events should be archived. All older events will " 00086 "be saved and deleted, the newer (and events exactly on that date) will be kept.")); 00087 dateLayout->addWidget(mDateEdit); 00088 topLayout->addLayout(dateLayout); 00089 00090 // Checkbox, numinput and combo for auto-archiving 00091 // (similar to kmail's mExpireFolderCheckBox/mReadExpiryTimeNumInput in kmfolderdia.cpp) 00092 QHBox* autoArchiveHBox = new QHBox(topFrame); 00093 topLayout->addWidget(autoArchiveHBox); 00094 mAutoArchiveRB = new QRadioButton(i18n("Automaticall&y archive events older than:"), autoArchiveHBox); 00095 radioBG->insert(mAutoArchiveRB); 00096 QWhatsThis::add(mAutoArchiveRB, 00097 i18n("If this feature is enabled, KOrganizer will regularly check if events have to be archived; " 00098 "this means you will not need to use this dialog box again, except to change the settings.")); 00099 00100 mExpiryTimeNumInput = new KIntNumInput(autoArchiveHBox); 00101 mExpiryTimeNumInput->setRange(1, 500, 1, false); 00102 mExpiryTimeNumInput->setEnabled(false); 00103 mExpiryTimeNumInput->setValue(7); 00104 QWhatsThis::add(mExpiryTimeNumInput, 00105 i18n("The age of the events to archive. All older events " 00106 "will be saved and deleted, the newer will be kept.")); 00107 00108 mExpiryUnitsComboBox = new QComboBox(autoArchiveHBox); 00109 // Those items must match the "Expiry Unit" enum in the kcfg file! 00110 mExpiryUnitsComboBox->insertItem(i18n("Day(s)")); 00111 mExpiryUnitsComboBox->insertItem(i18n("Week(s)")); 00112 mExpiryUnitsComboBox->insertItem(i18n("Month(s)")); 00113 mExpiryUnitsComboBox->setEnabled(false); 00114 00115 QHBoxLayout *fileLayout = new QHBoxLayout(0); 00116 fileLayout->setSpacing(spacingHint()); 00117 QLabel *l = new QLabel(i18n("Archive &file:"),topFrame); 00118 fileLayout->addWidget(l); 00119 mArchiveFile = new KURLRequester(KOPrefs::instance()->mArchiveFile,topFrame); 00120 mArchiveFile->setMode(KFile::File); 00121 mArchiveFile->setFilter(i18n("*.ics|ICalendars")); 00122 QWhatsThis::add(mArchiveFile, 00123 i18n("The path of the archive. The events will be added to the " 00124 "archive file, so any events that are already in the file " 00125 "will not be modified or deleted. You can later load or merge the " 00126 "file like any other calendar. It is not saved in a special " 00127 "format, it uses the vCalendar format. ")); 00128 l->setBuddy(mArchiveFile->lineEdit()); 00129 fileLayout->addWidget(mArchiveFile); 00130 topLayout->addLayout(fileLayout); 00131 00132 mDeleteCb = new QCheckBox(i18n("&Delete only, do not save"), 00133 topFrame); 00134 QWhatsThis::add(mDeleteCb, 00135 i18n("Select this option to delete old events without saving them. " 00136 "It is not possible to recover the events later.")); 00137 topLayout->addWidget(mDeleteCb); 00138 connect(mDeleteCb, SIGNAL(toggled(bool)), mArchiveFile, SLOT(setDisabled(bool))); 00139 connect(mDeleteCb, SIGNAL(toggled(bool)), this, SLOT(slotEnableUser1())); 00140 connect(mArchiveFile->lineEdit(),SIGNAL(textChanged ( const QString & )), 00141 this,SLOT(slotEnableUser1())); 00142 00143 // Load settings from KOPrefs 00144 mExpiryTimeNumInput->setValue( KOPrefs::instance()->mExpiryTime ); 00145 mExpiryUnitsComboBox->setCurrentItem( KOPrefs::instance()->mExpiryUnit ); 00146 mDeleteCb->setChecked( KOPrefs::instance()->mArchiveAction == KOPrefs::actionDelete ); 00147 00148 slotEnableUser1(); 00149 00150 // The focus should go to a useful field by default, not to the top richtext-label 00151 if ( KOPrefs::instance()->mAutoArchive ) { 00152 mAutoArchiveRB->setChecked( true ); 00153 mAutoArchiveRB->setFocus(); 00154 } else { 00155 mArchiveOnceRB->setChecked( true ); 00156 mArchiveOnceRB->setFocus(); 00157 } 00158 slotActionChanged(); 00159 } 00160 00161 ArchiveDialog::~ArchiveDialog() 00162 { 00163 } 00164 00165 void ArchiveDialog::slotEnableUser1() 00166 { 00167 bool state = ( mDeleteCb->isChecked() || 00168 !mArchiveFile->lineEdit()->text().isEmpty() ); 00169 enableButton(KDialogBase::User1,state); 00170 } 00171 00172 void ArchiveDialog::slotActionChanged() 00173 { 00174 mDateEdit->setEnabled( mArchiveOnceRB->isChecked() ); 00175 mExpiryTimeNumInput->setEnabled( mAutoArchiveRB->isChecked() ); 00176 mExpiryUnitsComboBox->setEnabled( mAutoArchiveRB->isChecked() ); 00177 } 00178 00179 // Archive old events 00180 void ArchiveDialog::slotUser1() 00181 { 00182 EventArchiver archiver; 00183 connect( &archiver, SIGNAL( eventsDeleted() ), this, SLOT( slotEventsDeleted() ) ); 00184 00185 KOPrefs::instance()->mAutoArchive = mAutoArchiveRB->isChecked(); 00186 KOPrefs::instance()->mExpiryTime = mExpiryTimeNumInput->value(); 00187 KOPrefs::instance()->mExpiryUnit = mExpiryUnitsComboBox->currentItem(); 00188 00189 if (mDeleteCb->isChecked()) { 00190 KOPrefs::instance()->mArchiveAction = KOPrefs::actionDelete; 00191 } else { 00192 KOPrefs::instance()->mArchiveAction = KOPrefs::actionArchive; 00193 00194 // Get destination URL 00195 KURL destUrl( mArchiveFile->url() ); 00196 if ( !destUrl.isValid() ) { 00197 KMessageBox::sorry(this,i18n("The archive file name is not valid.\n")); 00198 return; 00199 } 00200 // Force filename to be ending with vCalendar extension 00201 QString filename = destUrl.fileName(); 00202 if (!filename.endsWith(".vcs") && !filename.endsWith(".ics")) { 00203 filename.append(".ics"); 00204 destUrl.setFileName(filename); 00205 } 00206 00207 KOPrefs::instance()->mArchiveFile = destUrl.url(); 00208 } 00209 if ( KOPrefs::instance()->mAutoArchive ) { 00210 archiver.runAuto( mCalendar, this, true /*with gui*/ ); 00211 emit autoArchivingSettingsModified(); 00212 accept(); 00213 } 00214 else 00215 archiver.runOnce( mCalendar, mDateEdit->date(), this ); 00216 } 00217 00218 void ArchiveDialog::slotEventsDeleted() 00219 { 00220 emit eventsDeleted(); 00221 if ( !KOPrefs::instance()->mAutoArchive ) 00222 accept(); 00223 }
KDE Logo
This file is part of the documentation for korganizer Library Version 3.3.0.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Thu Oct 21 19:46:55 2004 by doxygen 1.3.7 written by Dimitri van Heesch, © 1997-2003