/* This file is part of KOrganizer. Copyright (c) 2001 Cornelius Schumacher Copyright (C) 2004 Reinhold Kainhofer Copyright (C) 2005 Thomas Zander 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. */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include "koprefs.h" #include "filteredit_base.h" #include "filtereditdialog.h" #include "filtereditdialog.moc" FilterEditDialog::FilterEditDialog( TQPtrList *filters, TQWidget *parent, const char *name) : KDialogBase( parent, name, false, i18n("Edit Calendar Filters"), Ok | Apply | Cancel ) { setMainWidget( mFilterEdit = new FilterEdit(filters, this)); connect(mFilterEdit, TQT_SIGNAL(dataConsistent(bool)), TQT_SLOT(setDialogConsistent(bool))); updateFilterList(); connect( mFilterEdit, TQT_SIGNAL( editCategories() ), TQT_SIGNAL( editCategories() ) ); connect( mFilterEdit, TQT_SIGNAL( filterChanged() ), TQT_SIGNAL( filterChanged() ) ); } FilterEditDialog::~FilterEditDialog() { delete mFilterEdit; mFilterEdit = 0L; } void FilterEditDialog::updateFilterList() { mFilterEdit->updateFilterList(); } void FilterEditDialog::updateCategoryConfig() { mFilterEdit->updateCategoryConfig(); } void FilterEditDialog::slotApply() { mFilterEdit->saveChanges(); } void FilterEditDialog::slotOk() { slotApply(); accept(); } void FilterEditDialog::setDialogConsistent(bool consistent) { enableButtonOK( consistent ); enableButtonApply( consistent ); } FilterEdit::FilterEdit(TQPtrList *filters, TQWidget *parent) : FilterEdit_base( parent), current(0), mCategorySelectDialog( 0 ) { mFilters = filters; TQWhatsThis::add( mNewButton, i18n( "Press this button to define a new filter." ) ); TQWhatsThis::add( mDeleteButton, i18n( "Press this button to remove the currently active filter." ) ); connect( mRulesList, TQT_SIGNAL(selectionChanged()), this, TQT_SLOT(filterSelected()) ); connect( mNewButton, TQT_SIGNAL( clicked() ), TQT_SLOT( bNewPressed() ) ); connect( mDeleteButton, TQT_SIGNAL( clicked() ), TQT_SLOT( bDeletePressed() ) ); connect( mNameLineEdit, TQT_SIGNAL( textChanged(const TQString &) ), TQT_SLOT( updateSelectedName(const TQString &) ) ); connect( mCatEditButton, TQT_SIGNAL( clicked() ), TQT_SLOT( editCategorySelection() ) ); } FilterEdit::~FilterEdit() { } void FilterEdit::updateFilterList() { mRulesList->clear(); CalFilter *filter = mFilters->first(); if ( !filter ) emit(dataConsistent(false)); else { while( filter ) { mRulesList->insertItem( filter->name() ); filter = mFilters->next(); } CalFilter *f = mFilters->at( mRulesList->currentItem() ); if ( f ) filterSelected( f ); emit(dataConsistent(true)); } if(current == 0L && mFilters->count() > 0) filterSelected(mFilters->at(0)); mDeleteButton->setEnabled( mFilters->count() > 1 ); } void FilterEdit::saveChanges() { if(current == 0L) return; current->setName(mNameLineEdit->text()); int criteria = 0; if ( mCompletedCheck->isChecked() ) criteria |= CalFilter::HideCompleted; if ( mRecurringCheck->isChecked() ) criteria |= CalFilter::HideRecurring; if ( mCatShowCheck->isChecked() ) criteria |= CalFilter::ShowCategories; if ( mHideInactiveTodosCheck->isChecked() ) criteria |= CalFilter::HideInactiveTodos; if ( mHideTodosNotAssignedToMeCheck->isChecked() ) criteria |= CalFilter::HideTodosWithoutAttendeeInEmailList; current->setCriteria( criteria ); current->setCompletedTimeSpan( mCompletedTimeSpan->value() ); TQStringList categoryList; for( uint i = 0; i < mCatList->count(); ++i ) categoryList.append( mCatList->text( i ) ); current->setCategoryList( categoryList ); emit filterChanged(); } void FilterEdit::filterSelected() { filterSelected(mFilters->at(mRulesList->currentItem())); } void FilterEdit::filterSelected(CalFilter *filter) { if(filter == current) return; kdDebug(5850) << "Selected filter " << (filter!=0?filter->name():"") << endl; saveChanges(); current = filter; mNameLineEdit->blockSignals(true); mNameLineEdit->setText(current->name()); mNameLineEdit->blockSignals(false); mDetailsFrame->setEnabled(current != 0L); mCompletedCheck->setChecked( current->criteria() & CalFilter::HideCompleted ); mCompletedTimeSpan->setValue( current->completedTimeSpan() ); mRecurringCheck->setChecked( current->criteria() & CalFilter::HideRecurring ); mHideInactiveTodosCheck->setChecked( current->criteria() & CalFilter::HideInactiveTodos ); mHideTodosNotAssignedToMeCheck->setChecked( current->criteria() & CalFilter::HideTodosWithoutAttendeeInEmailList ); mCategoriesButtonGroup->setButton( (current->criteria() & CalFilter::ShowCategories)?0:1 ); mCatList->clear(); mCatList->insertStringList( current->categoryList() ); } void FilterEdit::bNewPressed() { CalFilter *newFilter = new CalFilter( i18n("New Filter %1").arg(mFilters->count()) ); mFilters->append( newFilter ); updateFilterList(); mRulesList->setSelected(mRulesList->count()-1, true); emit filterChanged(); } void FilterEdit::bDeletePressed() { if ( mRulesList->currentItem() < 0 ) return; // nothing selected if ( mFilters->count() <= 1 ) return; // We need at least a default filter object. int result = KMessageBox::warningContinueCancel( this, i18n("This item will be permanently deleted."), i18n("Delete Confirmation"), KGuiItem(i18n("Delete"),"editdelete") ); if ( result != KMessageBox::Continue ) return; unsigned int selected = mRulesList->currentItem(); mFilters->remove( selected ); current = 0L; updateFilterList(); mRulesList->setSelected(TQMIN(mRulesList->count()-1, selected), true); emit filterChanged(); } void FilterEdit::updateSelectedName(const TQString &newText) { mRulesList->blockSignals( true ); mRulesList->changeItem(newText, mRulesList->currentItem()); mRulesList->blockSignals( false ); bool allOk = true; CalFilter *filter = mFilters->first(); while( allOk && filter ) { if(filter->name().isEmpty()) allOk = false; filter = mFilters->next(); } emit dataConsistent(allOk); } void FilterEdit::editCategorySelection() { if( !current ) return; if ( !mCategorySelectDialog ) { mCategorySelectDialog = new KPIM::CategorySelectDialog( KOPrefs::instance(), this, "filterCatSelect" ); connect( mCategorySelectDialog, TQT_SIGNAL( categoriesSelected( const TQStringList & ) ), TQT_SLOT( updateCategorySelection( const TQStringList & ) ) ); connect( mCategorySelectDialog, TQT_SIGNAL( editCategories() ), TQT_SIGNAL( editCategories() ) ); } mCategorySelectDialog->setSelected( current->categoryList() ); mCategorySelectDialog->show(); } void FilterEdit::updateCategorySelection( const TQStringList &categories ) { mCatList->clear(); mCatList->insertStringList(categories); current->setCategoryList(categories); } void FilterEdit::updateCategoryConfig() { if ( mCategorySelectDialog ) mCategorySelectDialog->updateCategoryConfig(); }