filtereditdialog.cpp
00001 /* 00002 This file is part of KOrganizer. 00003 00004 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> 00005 Copyright (C) 2004 Reinhold Kainhofer <reinhold@kainhofer.com> 00006 Copyright (C) 2005 Thomas Zander <zander@kde.org> 00007 00008 This program is free software; you can redistribute it and/or modify 00009 it under the terms of the GNU General Public License as published by 00010 the Free Software Foundation; either version 2 of the License, or 00011 (at your option) any later version. 00012 00013 This program is distributed in the hope that it will be useful, 00014 but WITHOUT ANY WARRANTY; without even the implied warranty of 00015 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00016 GNU General Public License for more details. 00017 00018 You should have received a copy of the GNU General Public License 00019 along with this program; if not, write to the Free Software 00020 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 00021 00022 As a special exception, permission is given to link this program 00023 with any edition of TQt, and distribute the resulting executable, 00024 without including the source code for TQt in the source distribution. 00025 */ 00026 00027 #include <tqpushbutton.h> 00028 #include <tqcheckbox.h> 00029 #include <tqbuttongroup.h> 00030 #include <tqlineedit.h> 00031 #include <tqradiobutton.h> 00032 #include <tqlistbox.h> 00033 #include <tqwhatsthis.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( TQPtrList<CalFilter> *filters, 00050 TQWidget *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, TQT_SIGNAL(dataConsistent(bool)), 00057 TQT_SLOT(setDialogConsistent(bool))); 00058 updateFilterList(); 00059 connect( mFilterEdit, TQT_SIGNAL( editCategories() ), TQT_SIGNAL( editCategories() ) ); 00060 connect( mFilterEdit, TQT_SIGNAL( filterChanged() ), TQT_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(TQPtrList<CalFilter> *filters, TQWidget *parent) 00096 : FilterEdit_base( parent), current(0), mCategorySelectDialog( 0 ) 00097 { 00098 mFilters = filters; 00099 TQWhatsThis::add( mNewButton, i18n( "Press this button to define a new filter." ) ); 00100 TQWhatsThis::add( mDeleteButton, i18n( "Press this button to remove the currently active filter." ) ); 00101 00102 connect( mRulesList, TQT_SIGNAL(selectionChanged()), this, TQT_SLOT(filterSelected()) ); 00103 connect( mNewButton, TQT_SIGNAL( clicked() ), TQT_SLOT( bNewPressed() ) ); 00104 connect( mDeleteButton, TQT_SIGNAL( clicked() ), TQT_SLOT( bDeletePressed() ) ); 00105 connect( mNameLineEdit, TQT_SIGNAL( textChanged(const TQString &) ), TQT_SLOT( updateSelectedName(const TQString &) ) ); 00106 connect( mCatEditButton, TQT_SIGNAL( clicked() ), TQT_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 TQStringList 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; // nothing selected 00198 if ( mFilters->count() <= 1 ) return; // We need at least a default filter object. 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(TQMIN(mRulesList->count()-1, selected), true); 00211 emit filterChanged(); 00212 } 00213 00214 void FilterEdit::updateSelectedName(const TQString &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 TQT_SIGNAL( categoriesSelected( const TQStringList & ) ), 00235 TQT_SLOT( updateCategorySelection( const TQStringList & ) ) ); 00236 connect( mCategorySelectDialog, TQT_SIGNAL( editCategories() ), 00237 TQT_SIGNAL( editCategories() ) ); 00238 00239 } 00240 mCategorySelectDialog->setSelected( current->categoryList() ); 00241 00242 mCategorySelectDialog->show(); 00243 } 00244 00245 void FilterEdit::updateCategorySelection( const TQStringList &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 }