filtereditdialog.cpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
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
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
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
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 }
This file is part of the documentation for kdelibs Version 3.1.4.