00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #include <qpushbutton.h>
00028 #include <qcheckbox.h>
00029 #include <qbuttongroup.h>
00030 #include <qlineedit.h>
00031 #include <qradiobutton.h>
00032 #include <qlistbox.h>
00033 #include <qwhatsthis.h>
00034
00035 #include <kdebug.h>
00036 #include <klocale.h>
00037 #include <kmessagebox.h>
00038 #include <knuminput.h>
00039
00040 #include <libkcal/calfilter.h>
00041 #include <libkdepim/categoryselectdialog.h>
00042
00043 #include "koprefs.h"
00044 #include "filteredit_base.h"
00045
00046 #include "filtereditdialog.h"
00047 #include "filtereditdialog.moc"
00048
00049 FilterEditDialog::FilterEditDialog( QPtrList<CalFilter> *filters,
00050 QWidget *parent, const char *name)
00051 : KDialogBase( parent, name, false, i18n("Edit Calendar Filters"),
00052 Ok | Apply | Cancel )
00053 {
00054 setMainWidget( mFilterEdit = new FilterEdit(filters, this));
00055
00056 connect(mFilterEdit, SIGNAL(dataConsistent(bool)),
00057 SLOT(setDialogConsistent(bool)));
00058 updateFilterList();
00059 connect( mFilterEdit, SIGNAL( editCategories() ), SIGNAL( editCategories() ) );
00060 connect( mFilterEdit, SIGNAL( filterChanged() ), SIGNAL( filterChanged() ) );
00061 }
00062
00063 FilterEditDialog::~FilterEditDialog()
00064 {
00065 delete mFilterEdit;
00066 mFilterEdit = 0L;
00067 }
00068
00069 void FilterEditDialog::updateFilterList()
00070 {
00071 mFilterEdit->updateFilterList();
00072 }
00073
00074 void FilterEditDialog::updateCategoryConfig()
00075 {
00076 mFilterEdit->updateCategoryConfig();
00077 }
00078
00079 void FilterEditDialog::slotApply()
00080 {
00081 mFilterEdit->saveChanges();
00082 }
00083
00084 void FilterEditDialog::slotOk()
00085 {
00086 slotApply();
00087 accept();
00088 }
00089
00090 void FilterEditDialog::setDialogConsistent(bool consistent) {
00091 enableButtonOK( consistent );
00092 enableButtonApply( consistent );
00093 }
00094
00095 FilterEdit::FilterEdit(QPtrList<CalFilter> *filters, QWidget *parent)
00096 : FilterEdit_base( parent), current(0), mCategorySelectDialog( 0 )
00097 {
00098 mFilters = filters;
00099 QWhatsThis::add( mNewButton, i18n( "Press this button to define a new filter." ) );
00100 QWhatsThis::add( mDeleteButton, i18n( "Press this button to remove the currently active filter." ) );
00101
00102 connect( mRulesList, SIGNAL(selectionChanged()), this, SLOT(filterSelected()) );
00103 connect( mNewButton, SIGNAL( clicked() ), SLOT( bNewPressed() ) );
00104 connect( mDeleteButton, SIGNAL( clicked() ), SLOT( bDeletePressed() ) );
00105 connect( mNameLineEdit, SIGNAL( textChanged(const QString &) ), SLOT( updateSelectedName(const QString &) ) );
00106 connect( mCatEditButton, SIGNAL( clicked() ), SLOT( editCategorySelection() ) );
00107 }
00108
00109 FilterEdit::~FilterEdit() {
00110 }
00111
00112
00113 void FilterEdit::updateFilterList()
00114 {
00115 mRulesList->clear();
00116
00117 CalFilter *filter = mFilters->first();
00118
00119 if ( !filter )
00120 emit(dataConsistent(false));
00121 else {
00122 while( filter ) {
00123 mRulesList->insertItem( filter->name() );
00124 filter = mFilters->next();
00125 }
00126
00127 CalFilter *f = mFilters->at( mRulesList->currentItem() );
00128 if ( f ) filterSelected( f );
00129
00130 emit(dataConsistent(true));
00131 }
00132
00133 if(current == 0L && mFilters->count() > 0)
00134 filterSelected(mFilters->at(0));
00135 mDeleteButton->setEnabled( mFilters->count() > 1 );
00136 }
00137
00138 void FilterEdit::saveChanges()
00139 {
00140 if(current == 0L)
00141 return;
00142
00143 current->setName(mNameLineEdit->text());
00144 int criteria = 0;
00145 if ( mCompletedCheck->isChecked() ) criteria |= CalFilter::HideCompleted;
00146 if ( mRecurringCheck->isChecked() ) criteria |= CalFilter::HideRecurring;
00147 if ( mCatShowCheck->isChecked() ) criteria |= CalFilter::ShowCategories;
00148 if ( mHideInactiveTodosCheck->isChecked() ) criteria |= CalFilter::HideInactiveTodos;
00149 if ( mHideTodosNotAssignedToMeCheck->isChecked() )
00150 criteria |= CalFilter::HideTodosWithoutAttendeeInEmailList;
00151 current->setCriteria( criteria );
00152 current->setCompletedTimeSpan( mCompletedTimeSpan->value() );
00153
00154 QStringList categoryList;
00155 for( uint i = 0; i < mCatList->count(); ++i )
00156 categoryList.append( mCatList->text( i ) );
00157 current->setCategoryList( categoryList );
00158 emit filterChanged();
00159 }
00160
00161 void FilterEdit::filterSelected()
00162 {
00163 filterSelected(mFilters->at(mRulesList->currentItem()));
00164 }
00165
00166 void FilterEdit::filterSelected(CalFilter *filter)
00167 {
00168 if(filter == current) return;
00169 kdDebug(5850) << "Selected filter " << (filter!=0?filter->name():"") << endl;
00170 saveChanges();
00171
00172 current = filter;
00173 mNameLineEdit->blockSignals(true);
00174 mNameLineEdit->setText(current->name());
00175 mNameLineEdit->blockSignals(false);
00176 mDetailsFrame->setEnabled(current != 0L);
00177 mCompletedCheck->setChecked( current->criteria() & CalFilter::HideCompleted );
00178 mCompletedTimeSpan->setValue( current->completedTimeSpan() );
00179 mRecurringCheck->setChecked( current->criteria() & CalFilter::HideRecurring );
00180 mHideInactiveTodosCheck->setChecked( current->criteria() & CalFilter::HideInactiveTodos );
00181 mHideTodosNotAssignedToMeCheck->setChecked(
00182 current->criteria() & CalFilter::HideTodosWithoutAttendeeInEmailList );
00183 mCategoriesButtonGroup->setButton( (current->criteria() & CalFilter::ShowCategories)?0:1 );
00184 mCatList->clear();
00185 mCatList->insertStringList( current->categoryList() );
00186 }
00187
00188 void FilterEdit::bNewPressed() {
00189 CalFilter *newFilter = new CalFilter( i18n("New Filter %1").arg(mFilters->count()) );
00190 mFilters->append( newFilter );
00191 updateFilterList();
00192 mRulesList->setSelected(mRulesList->count()-1, true);
00193 emit filterChanged();
00194 }
00195
00196 void FilterEdit::bDeletePressed() {
00197 if ( mRulesList->currentItem() < 0 ) return;
00198 if ( mFilters->count() <= 1 ) return;
00199
00200 int result = KMessageBox::warningContinueCancel( this,
00201 i18n("This item will be permanently deleted."), i18n("Delete Confirmation"), KGuiItem(i18n("Delete"),"editdelete") );
00202
00203 if ( result != KMessageBox::Continue )
00204 return;
00205
00206 unsigned int selected = mRulesList->currentItem();
00207 mFilters->remove( selected );
00208 current = 0L;
00209 updateFilterList();
00210 mRulesList->setSelected(QMIN(mRulesList->count()-1, selected), true);
00211 emit filterChanged();
00212 }
00213
00214 void FilterEdit::updateSelectedName(const QString &newText) {
00215 mRulesList->blockSignals( true );
00216 mRulesList->changeItem(newText, mRulesList->currentItem());
00217 mRulesList->blockSignals( false );
00218 bool allOk = true;
00219 CalFilter *filter = mFilters->first();
00220 while( allOk && filter ) {
00221 if(filter->name().isEmpty())
00222 allOk = false;
00223 filter = mFilters->next();
00224 }
00225 emit dataConsistent(allOk);
00226 }
00227
00228 void FilterEdit::editCategorySelection()
00229 {
00230 if( !current ) return;
00231 if ( !mCategorySelectDialog ) {
00232 mCategorySelectDialog = new KPIM::CategorySelectDialog( KOPrefs::instance(), this, "filterCatSelect" );
00233 connect( mCategorySelectDialog,
00234 SIGNAL( categoriesSelected( const QStringList & ) ),
00235 SLOT( updateCategorySelection( const QStringList & ) ) );
00236 connect( mCategorySelectDialog, SIGNAL( editCategories() ),
00237 SIGNAL( editCategories() ) );
00238
00239 }
00240 mCategorySelectDialog->setSelected( current->categoryList() );
00241
00242 mCategorySelectDialog->show();
00243 }
00244
00245 void FilterEdit::updateCategorySelection( const QStringList &categories )
00246 {
00247 mCatList->clear();
00248 mCatList->insertStringList(categories);
00249 current->setCategoryList(categories);
00250 }
00251
00252 void FilterEdit::updateCategoryConfig()
00253 {
00254 if ( mCategorySelectDialog ) mCategorySelectDialog->updateCategoryConfig();
00255 }