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
#include <qlayout.h>
00026
#include <qpushbutton.h>
00027
#include <qcombobox.h>
00028
#include <qcheckbox.h>
00029
#include <qradiobutton.h>
00030
#include <qlistbox.h>
00031
00032
#include <kdebug.h>
00033
#include <klocale.h>
00034
#include <kinputdialog.h>
00035
#include <kmessagebox.h>
00036
00037
#include <libkcal/calfilter.h>
00038
#include <libkdepim/categoryselectdialog.h>
00039
00040
#include "koprefs.h"
00041
#include "filteredit_base.h"
00042
00043
#include "filtereditdialog.h"
00044
#include "filtereditdialog.moc"
00045
00046
00047
00048 FilterEditDialog::FilterEditDialog(
QPtrList<CalFilter> *filters,
00049
QWidget *parent,
const char *name)
00050 : KDialogBase( parent, name, false, i18n("Edit Calendar Filters"),
00051 Ok | Apply | Cancel ),
00052 mCategorySelectDialog( 0 )
00053 {
00054 mFilters = filters;
00055
00056
QWidget *mainWidget =
new QWidget(
this );
00057 setMainWidget( mainWidget );
00058
00059 mSelectionCombo =
new QComboBox( mainWidget );
00060 connect( mSelectionCombo, SIGNAL( activated(
int ) ),
00061 SLOT( filterSelected() ) );
00062
00063
QPushButton *addButton =
new QPushButton( i18n(
"Add Filter..."), mainWidget );
00064 connect( addButton, SIGNAL( clicked() ), SLOT( slotAdd() ) );
00065
00066 mRemoveButton =
new QPushButton( i18n(
"Remove"), mainWidget );
00067 connect( mRemoveButton, SIGNAL( clicked() ), SLOT( slotRemove() ) );
00068
00069 mEditor =
new FilterEdit_base( mainWidget );
00070
00071
QGridLayout *topLayout =
new QGridLayout( mainWidget, 2, 2 );
00072 topLayout->setSpacing( spacingHint() );
00073 topLayout->addWidget( mSelectionCombo, 0, 0 );
00074 topLayout->addWidget( addButton, 0, 1 );
00075 topLayout->addWidget( mRemoveButton, 0, 2 );
00076 topLayout->addMultiCellWidget( mEditor, 1, 1, 0, 2 );
00077
00078 connect( mEditor->mCatEditButton, SIGNAL( clicked() ),
00079 SLOT( editCategorySelection() ) );
00080
00081
00082 connect(
this, SIGNAL( cancelClicked() ), SLOT( reject() ) );
00083
00084 updateFilterList();
00085 }
00086
00087 FilterEditDialog::~FilterEditDialog()
00088 {
00089 }
00090
00091
void FilterEditDialog::updateFilterList()
00092 {
00093 mSelectionCombo->clear();
00094
00095 CalFilter *filter = mFilters->first();
00096
00097
if ( !filter ) {
00098 enableButtonOK(
false );
00099 enableButtonApply(
false );
00100 }
else {
00101
while( filter ) {
00102 mSelectionCombo->insertItem( filter->name() );
00103 filter = mFilters->next();
00104 }
00105
00106 CalFilter *f = mFilters->at( mSelectionCombo->currentItem() );
00107
if ( f ) readFilter( f );
00108
00109 enableButtonOK(
true );
00110 enableButtonApply(
true );
00111 }
00112
00113 mRemoveButton->setEnabled( mFilters->count() > 1 );
00114 }
00115
00116
void FilterEditDialog::updateCategoryConfig()
00117 {
00118
if ( mCategorySelectDialog ) mCategorySelectDialog->updateCategoryConfig();
00119 }
00120
00121
void FilterEditDialog::slotDefault()
00122 {
00123 }
00124
00125
void FilterEditDialog::slotApply()
00126 {
00127 CalFilter *f = mFilters->at( mSelectionCombo->currentItem() );
00128 writeFilter( f );
00129 emit filterChanged();
00130 }
00131
00132
void FilterEditDialog::slotOk()
00133 {
00134 CalFilter *f = mFilters->at( mSelectionCombo->currentItem() );
00135 writeFilter( f );
00136 emit filterChanged();
00137 accept();
00138 }
00139
00140
void FilterEditDialog::slotAdd()
00141 {
00142
QString txt = KInputDialog::getText( i18n(
"Add Filter"),
00143 i18n(
"Enter filter name:"),
00144 QString::null, 0,
this );
00145
if ( !txt.isEmpty() ) {
00146 mFilters->append(
new CalFilter( txt ) );
00147 updateFilterList();
00148 }
00149 }
00150
00151
void FilterEditDialog::slotRemove()
00152 {
00153
int currentItem = mSelectionCombo->currentItem();
00154
if ( currentItem < 0 )
return;
00155
00156
00157
if ( mFilters->count() <= 1 )
return;
00158
00159
int result = KMessageBox::warningContinueCancel(
this,
00160 i18n(
"This item will be permanently deleted."), i18n(
"Delete Confirmation"), KGuiItem(i18n(
"Delete"),
"editdelete") );
00161
00162
if ( result != KMessageBox::Continue ) {
00163
return;
00164 }
00165
00166 mFilters->remove( currentItem );
00167 updateFilterList();
00168 emit filterChanged();
00169 }
00170
00171
void FilterEditDialog::editCategorySelection()
00172 {
00173
if ( !mCategorySelectDialog ) {
00174 mCategorySelectDialog =
new KPIM::CategorySelectDialog(
00175 KOPrefs::instance(),
this,
"filterCatSelect" );
00176 mCategorySelectDialog->setSelected( mCategories );
00177 connect( mCategorySelectDialog,
00178 SIGNAL( categoriesSelected(
const QStringList & ) ),
00179 SLOT( updateCategorySelection(
const QStringList & ) ) );
00180 connect( mCategorySelectDialog, SIGNAL( editCategories() ),
00181 SIGNAL( editCategories() ) );
00182 }
00183
00184 mCategorySelectDialog->show();
00185 }
00186
00187
void FilterEditDialog::updateCategorySelection(
const QStringList &categories )
00188 {
00189 mCategories = categories;
00190
00191 mEditor->mCatList->clear();
00192 mEditor->mCatList->insertStringList( mCategories );
00193 }
00194
00195
void FilterEditDialog::filterSelected()
00196 {
00197 CalFilter *f = mFilters->at( mSelectionCombo->currentItem() );
00198 kdDebug(5850) <<
"Selected filter " << f->name() << endl;
00199
if ( f ) readFilter( f );
00200 }
00201
00202
void FilterEditDialog::readFilter( CalFilter *filter )
00203 {
00204
int c = filter->criteria();
00205
00206 mEditor->mCompletedCheck->setChecked( c & CalFilter::HideCompleted );
00207 mEditor->mRecurringCheck->setChecked( c & CalFilter::HideRecurring );
00208
00209
if ( c & CalFilter::ShowCategories ) {
00210 mEditor->mCatShowCheck->setChecked(
true );
00211 }
else {
00212 mEditor->mCatHideCheck->setChecked(
true );
00213 }
00214
00215 mEditor->mCatList->clear();
00216 mEditor->mCatList->insertStringList( filter->categoryList() );
00217 mCategories = filter->categoryList();
00218 }
00219
00220
void FilterEditDialog::writeFilter( CalFilter *filter )
00221 {
00222
int c = 0;
00223
00224
if ( mEditor->mCompletedCheck->isChecked() ) c |= CalFilter::HideCompleted;
00225
if ( mEditor->mRecurringCheck->isChecked() ) c |= CalFilter::HideRecurring;
00226
if ( mEditor->mCatShowCheck->isChecked() ) c |= CalFilter::ShowCategories;
00227
00228 filter->setCriteria( c );
00229
00230
QStringList categoryList;
00231
for( uint i = 0; i < mEditor->mCatList->count(); ++i ) {
00232 categoryList.append( mEditor->mCatList->text( i ) );
00233 }
00234 filter->setCategoryList( categoryList );
00235 }