korganizer Library API Documentation

filtereditdialog.cpp

00001 /*
00002     This file is part of KOrganizer.
00003     Copyright (c) 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., 675 Mass Ave, Cambridge, MA 02139, 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 #include <qlayout.h>
00025 #include <qpushbutton.h>
00026 #include <qcombobox.h>
00027 #include <qcheckbox.h>
00028 #include <qradiobutton.h>
00029 #include <qlistbox.h>
00030 
00031 #include <kdebug.h>
00032 #include <klocale.h>
00033 #include <klineeditdlg.h>
00034 #include <kmessagebox.h>
00035   
00036 #include <libkdepim/categoryselectdialog.h>
00037 
00038 #include "koprefs.h"
00039 #include "filteredit_base.h"
00040 
00041 #include "filtereditdialog.h"
00042 #include "filtereditdialog.moc"
00043 
00044 // TODO: Make dialog work on a copy of the filters objects.
00045 
00046 FilterEditDialog::FilterEditDialog(QPtrList<CalFilter> *filters,QWidget *parent,
00047                                    const char *name) :
00048   KDialogBase(parent,name,false,i18n("Edit Calendar Filters"),
00049               Ok|Apply|Cancel)
00050 {
00051   mFilters = filters;
00052 
00053   QWidget *mainWidget = new QWidget(this);
00054   setMainWidget(mainWidget);
00055 
00056   mSelectionCombo = new QComboBox(mainWidget);
00057   connect(mSelectionCombo,SIGNAL(activated(int)),SLOT(filterSelected()));
00058 
00059   QPushButton *addButton = new QPushButton(i18n("Add Filter..."),mainWidget);
00060   connect(addButton,SIGNAL(clicked()),SLOT(slotAdd()));
00061 
00062   mRemoveButton = new QPushButton( i18n("Remove"), mainWidget );
00063   connect( mRemoveButton, SIGNAL( clicked() ), SLOT( slotRemove() ) );
00064 
00065   mEditor = new FilterEdit_base(mainWidget);
00066 
00067   QGridLayout *topLayout = new QGridLayout(mainWidget,2,2);
00068   topLayout->setSpacing(spacingHint());
00069   topLayout->addWidget(mSelectionCombo,0,0);
00070   topLayout->addWidget(addButton,0,1);
00071   topLayout->addWidget(mRemoveButton,0,2);
00072   topLayout->addMultiCellWidget(mEditor,1,1,0,2);
00073 
00074   connect(mEditor->mCatEditButton,SIGNAL(clicked()),
00075           SLOT(editCategorySelection()));
00076 
00077   // Clicking cancel exits the dialog without saving
00078   connect(this,SIGNAL(cancelClicked()),SLOT(reject()));
00079 
00080   updateFilterList();
00081 }
00082 
00083 FilterEditDialog::~FilterEditDialog()
00084 {
00085 }
00086 
00087 void FilterEditDialog::updateFilterList()
00088 {
00089   mSelectionCombo->clear();
00090 
00091   CalFilter *filter = mFilters->first();
00092 
00093   if (!filter) {
00094     enableButtonOK(false);
00095     enableButtonApply(false);
00096   } else {
00097     while(filter) {
00098       mSelectionCombo->insertItem(filter->name());
00099       filter = mFilters->next();
00100     }
00101 
00102     CalFilter *f = mFilters->at(mSelectionCombo->currentItem());
00103     if (f) readFilter(f);
00104 
00105     enableButtonOK(true);
00106     enableButtonApply(true);
00107   }
00108 
00109   mRemoveButton->setEnabled( mFilters->count() > 1 );
00110 }
00111 
00112 void FilterEditDialog::slotDefault()
00113 {
00114 }
00115 
00116 void FilterEditDialog::slotApply()
00117 {
00118   CalFilter *f = mFilters->at(mSelectionCombo->currentItem());
00119   writeFilter(f);
00120   emit filterChanged();
00121 }
00122 
00123 void FilterEditDialog::slotOk()
00124 {
00125   CalFilter *f = mFilters->at(mSelectionCombo->currentItem());
00126   writeFilter(f);
00127   emit filterChanged();
00128   accept();
00129 }
00130 
00131 void FilterEditDialog::slotAdd()
00132 {
00133   KLineEditDlg dlg(i18n("Enter filter name:"), QString::null, this);
00134   dlg.setCaption(i18n("Add Filter"));
00135   if (dlg.exec()) {
00136     mFilters->append(new CalFilter(dlg.text()));
00137     updateFilterList();
00138   }
00139 }
00140 
00141 void FilterEditDialog::slotRemove()
00142 {
00143   int currentItem = mSelectionCombo->currentItem();
00144   if ( currentItem < 0 ) return;
00145 
00146   // We need at least a default filter object.
00147   if ( mFilters->count() <= 1 ) return;
00148 
00149   int result = KMessageBox::questionYesNo( this,
00150      i18n("This item will be permanently deleted.") );
00151   
00152   if ( result != KMessageBox::Yes ) {
00153     return;
00154   }
00155   
00156   mFilters->remove( currentItem );
00157   updateFilterList();
00158   emit filterChanged();
00159 }
00160 
00161 void FilterEditDialog::editCategorySelection()
00162 {
00163   KPIM::CategorySelectDialog *dlg = new KPIM::CategorySelectDialog(
00164       KOPrefs::instance(), this, "filterCatSelect", true );
00165   dlg->setSelected(mCategories);
00166 
00167   connect(dlg,SIGNAL(categoriesSelected(const QStringList &)),
00168           SLOT(updateCategorySelection(const QStringList &)));
00169 
00170   dlg->exec();
00171 }
00172 
00173 void FilterEditDialog::updateCategorySelection(const QStringList &categories)
00174 {
00175   mCategories = categories;
00176 
00177   mEditor->mCatList->clear();
00178   mEditor->mCatList->insertStringList(mCategories);
00179 }
00180 
00181 void FilterEditDialog::filterSelected()
00182 {
00183   CalFilter *f = mFilters->at(mSelectionCombo->currentItem());
00184   kdDebug() << "Selected filter " << f->name() << endl;
00185   if (f) readFilter(f);
00186 }
00187 
00188 void FilterEditDialog::readFilter(CalFilter *filter)
00189 {
00190   int c = filter->criteria();
00191 
00192   mEditor->mCompletedCheck->setChecked(c & CalFilter::HideCompleted);
00193   mEditor->mRecurringCheck->setChecked(c & CalFilter::HideRecurring);
00194 
00195   if (c & CalFilter::ShowCategories) {
00196     mEditor->mCatShowCheck->setChecked(true);
00197   } else {
00198     mEditor->mCatHideCheck->setChecked(true);
00199   }
00200 
00201   mEditor->mCatList->clear();
00202   mEditor->mCatList->insertStringList(filter->categoryList());
00203   mCategories = filter->categoryList();
00204 }
00205 
00206 void FilterEditDialog::writeFilter(CalFilter *filter)
00207 {
00208   int c = 0;
00209 
00210   if (mEditor->mCompletedCheck->isChecked()) c |= CalFilter::HideCompleted;
00211   if (mEditor->mRecurringCheck->isChecked()) c |= CalFilter::HideRecurring;
00212   if (mEditor->mCatShowCheck->isChecked()) c |= CalFilter::ShowCategories;
00213 
00214   filter->setCriteria(c);
00215 
00216   QStringList categoryList;
00217   for(uint i=0;i<mEditor->mCatList->count();++i) {
00218     categoryList.append(mEditor->mCatList->text(i));
00219   }
00220   filter->setCategoryList(categoryList);
00221 }
KDE Logo
This file is part of the documentation for kdelibs Version 3.1.5.
Documentation copyright © 1996-2002 the KDE developers.
Generated on Sun Feb 15 11:41:08 2004 by doxygen 1.3.5 written by Dimitri van Heesch, © 1997-2001