expirypropertiesdialog.cpp
00001 00002 #include "expirypropertiesdialog.h" 00003 #include "folderrequester.h" 00004 #include "kmfolder.h" 00005 #include "kmfoldertree.h" 00006 00007 #include <tqvariant.h> 00008 #include <tqpushbutton.h> 00009 #include <tqgroupbox.h> 00010 #include <tqcheckbox.h> 00011 #include <tqspinbox.h> 00012 #include <tqlabel.h> 00013 #include <tqradiobutton.h> 00014 #include <tqbuttongroup.h> 00015 #include <tqcombobox.h> 00016 #include <tqlayout.h> 00017 #include <tqtooltip.h> 00018 #include <tqwhatsthis.h> 00019 00020 #include <tdelocale.h> 00021 #include <tdemessagebox.h> 00022 00023 using namespace KMail; 00024 00025 /* 00026 * Constructs a ExpiryPropertiesDialog as a child of 'parent', with the 00027 * name 'name'. 00028 * 00029 */ 00030 ExpiryPropertiesDialog::ExpiryPropertiesDialog( KMFolderTree* tree, KMFolder* folder ) 00031 : KDialogBase( tree, "expiry_properties", false, i18n( "Mail Expiry Properties" ), 00032 KDialogBase::Ok|KDialogBase::Cancel, 00033 KDialogBase::Ok, true ), 00034 mFolder( folder ) 00035 { 00036 setWFlags( getWFlags() | WDestructiveClose ); 00037 TQWidget* privateLayoutWidget = new TQWidget( this, "globalVBox" ); 00038 setMainWidget( privateLayoutWidget ); 00039 privateLayoutWidget->setGeometry( TQRect( 10, 20, 270, 138 ) ); 00040 globalVBox = new TQVBoxLayout( privateLayoutWidget, 11, 6, "globalVBox"); 00041 globalVBox->setSpacing( 20 ); 00042 00043 readHBox = new TQHBoxLayout( 0, 0, 6, "readHBox"); 00044 00045 expireReadMailCB = new TQCheckBox( privateLayoutWidget, "expireReadMailCB" ); 00046 expireReadMailCB->setText( i18n( "Expire read mails after" ) ); 00047 connect( expireReadMailCB, TQT_SIGNAL( toggled( bool )), 00048 this, TQT_SLOT( slotUpdateControls() ) ); 00049 readHBox->addWidget( expireReadMailCB ); 00050 00051 expireReadMailSB = new TQSpinBox( privateLayoutWidget, "expireReadMailSB" ); 00052 expireReadMailSB->setMaxValue( 999999 ); 00053 expireReadMailSB->setValue( 30 ); 00054 readHBox->addWidget( expireReadMailSB ); 00055 00056 labelDays = new TQLabel( privateLayoutWidget, "labelDays" ); 00057 labelDays->setText( i18n( "days" ) ); 00058 readHBox->addWidget( labelDays ); 00059 globalVBox->addLayout( readHBox ); 00060 00061 unreadHBox = new TQHBoxLayout( 0, 0, 6, "unreadHBox"); 00062 00063 expireUnreadMailCB = new TQCheckBox( privateLayoutWidget, "expireUnreadMailCB" ); 00064 expireUnreadMailCB->setText( i18n( "Expire unread mails after" ) ); 00065 connect( expireUnreadMailCB, TQT_SIGNAL( toggled( bool )), 00066 this, TQT_SLOT( slotUpdateControls() ) ); 00067 unreadHBox->addWidget( expireUnreadMailCB ); 00068 00069 expireUnreadMailSB = new TQSpinBox( privateLayoutWidget, "expireUnreadMailSB" ); 00070 expireUnreadMailSB->setMaxValue( 99999 ); 00071 expireUnreadMailSB->setValue( 30 ); 00072 unreadHBox->addWidget( expireUnreadMailSB ); 00073 00074 labelDays2 = new TQLabel( privateLayoutWidget, "labelDays2" ); 00075 labelDays2->setText( i18n( "days" ) ); 00076 labelDays2->setAlignment( int( TQLabel::AlignTop ) ); 00077 unreadHBox->addWidget( labelDays2 ); 00078 globalVBox->addLayout( unreadHBox ); 00079 00080 expiryActionHBox = new TQHBoxLayout( 0, 0, 6, "expiryActionHBox"); 00081 00082 expiryActionLabel = new TQLabel( privateLayoutWidget, "expiryActionLabel" ); 00083 expiryActionLabel->setText( i18n( "Expiry action:" ) ); 00084 expiryActionLabel->setAlignment( int( TQLabel::AlignVCenter ) ); 00085 expiryActionHBox->addWidget( expiryActionLabel ); 00086 00087 actionsHBox = new TQVBoxLayout( 0, 0, 6, "actionsHBox"); 00088 actionsGroup = new TQButtonGroup( this ); 00089 actionsGroup->hide(); // for mutual exclusion of the radio buttons 00090 00091 moveToHBox = new TQHBoxLayout( 0, 0, 6, "moveToHBox"); 00092 00093 moveToRB = new TQRadioButton( privateLayoutWidget, "moveToRB" ); 00094 actionsGroup->insert( moveToRB ); 00095 connect( moveToRB, TQT_SIGNAL( toggled( bool ) ), 00096 this, TQT_SLOT( slotUpdateControls() ) ); 00097 moveToRB->setText( i18n( "Move to:" ) ); 00098 moveToHBox->addWidget( moveToRB ); 00099 00100 folderSelector = new KMail::FolderRequester( privateLayoutWidget, tree ); 00101 folderSelector->setMustBeReadWrite( true ); 00102 moveToHBox->addWidget( folderSelector ); 00103 actionsHBox->addLayout( moveToHBox ); 00104 00105 deletePermanentlyRB = new TQRadioButton( privateLayoutWidget, "deletePermanentlyRB" ); 00106 actionsGroup->insert( deletePermanentlyRB ); 00107 deletePermanentlyRB->setText( i18n( "Delete permanently" ) ); 00108 actionsHBox->addWidget( deletePermanentlyRB ); 00109 expiryActionHBox->addLayout( actionsHBox ); 00110 globalVBox->addLayout( expiryActionHBox ); 00111 00112 note = new TQLabel( privateLayoutWidget, "note" ); 00113 note->setText( i18n( "Note: Expiry action will be applied immediately after confirming settings." ) ); 00114 note->setAlignment( int( TQLabel::WordBreak | TQLabel::AlignVCenter ) ); 00115 globalVBox->addWidget( note ); 00116 00117 // Load the values from the folder 00118 bool expiryGloballyOn = mFolder->isAutoExpire(); 00119 int daysToExpireRead, daysToExpireUnread; 00120 mFolder->daysToExpire( daysToExpireUnread, daysToExpireRead); 00121 00122 if ( expiryGloballyOn 00123 && mFolder->getReadExpireUnits() != expireNever 00124 && daysToExpireRead >= 0 ) { 00125 expireReadMailCB->setChecked( true ); 00126 expireReadMailSB->setValue( daysToExpireRead ); 00127 } 00128 if ( expiryGloballyOn 00129 && mFolder->getUnreadExpireUnits() != expireNever 00130 && daysToExpireUnread >= 0 ) { 00131 expireUnreadMailCB->setChecked( true ); 00132 expireUnreadMailSB->setValue( daysToExpireUnread ); 00133 } 00134 00135 if ( mFolder->expireAction() == KMFolder::ExpireDelete ) 00136 deletePermanentlyRB->setChecked( true ); 00137 else 00138 moveToRB->setChecked( true ); 00139 00140 TQString destFolderID = mFolder->expireToFolderId(); 00141 if ( !destFolderID.isEmpty() ) { 00142 KMFolder* destFolder = kmkernel->findFolderById( destFolderID ); 00143 if ( destFolder ) 00144 folderSelector->setFolder( destFolder ); 00145 } 00146 slotUpdateControls(); 00147 resize( TQSize(295, 204).expandedTo(minimumSizeHint()) ); 00148 clearWState( WState_Polished ); 00149 } 00150 00151 /* 00152 * Destroys the object and frees any allocated resources 00153 */ 00154 ExpiryPropertiesDialog::~ExpiryPropertiesDialog() 00155 { 00156 // no need to delete child widgets, TQt does it all for us 00157 } 00158 00159 void ExpiryPropertiesDialog::slotOk() 00160 { 00161 bool enableGlobally = expireReadMailCB->isChecked() || expireUnreadMailCB->isChecked(); 00162 00163 KMFolder *expireToFolder = folderSelector->folder(); 00164 if ( enableGlobally && moveToRB->isChecked() && !expireToFolder ) { 00165 KMessageBox::error( 00166 this, 00167 i18n( "Please select a folder to expire messages into." ), 00168 i18n( "No Folder Selected" ) ); 00169 return; 00170 } 00171 00172 if ( expireToFolder ) { 00173 if ( expireToFolder->idString() == mFolder->idString() ) { 00174 KMessageBox::error( 00175 this, 00176 i18n( "Please select a different folder than the current folder " 00177 "to expire message into." ), 00178 i18n( "Wrong Folder Selected" ) ); 00179 return; 00180 } else { 00181 mFolder->setExpireToFolderId( expireToFolder->idString() ); 00182 } 00183 } 00184 00185 mFolder->setAutoExpire( enableGlobally ); 00186 // we always write out days now 00187 mFolder->setReadExpireAge( expireReadMailSB->value() ); 00188 mFolder->setUnreadExpireAge( expireUnreadMailSB->value() ); 00189 mFolder->setReadExpireUnits( expireReadMailCB->isChecked()? expireDays : expireNever ); 00190 mFolder->setUnreadExpireUnits( expireUnreadMailCB->isChecked()? expireDays : expireNever ); 00191 00192 if ( deletePermanentlyRB->isChecked() ) 00193 mFolder->setExpireAction( KMFolder::ExpireDelete ); 00194 else 00195 mFolder->setExpireAction( KMFolder::ExpireMove ); 00196 00197 // trigger immediate expiry if there is something to do 00198 if ( enableGlobally ) 00199 mFolder->expireOldMessages( true /*immediate*/); 00200 KDialogBase::slotOk(); 00201 } 00202 00203 void ExpiryPropertiesDialog::slotUpdateControls() 00204 { 00205 bool showExpiryActions = expireReadMailCB->isChecked() || expireUnreadMailCB->isChecked(); 00206 moveToRB->setEnabled( showExpiryActions ); 00207 folderSelector->setEnabled( showExpiryActions && moveToRB->isChecked() ); 00208 deletePermanentlyRB->setEnabled( showExpiryActions ); 00209 } 00210 00211 00212 #include "expirypropertiesdialog.moc"