korganizer

filtereditdialog.cpp
1 /*
2  This file is part of KOrganizer.
3 
4  Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
5  Copyright (C) 2004 Reinhold Kainhofer <reinhold@kainhofer.com>
6  Copyright (C) 2005 Thomas Zander <zander@kde.org>
7 
8  This program is free software; you can redistribute it and/or modify
9  it under the terms of the GNU General Public License as published by
10  the Free Software Foundation; either version 2 of the License, or
11  (at your option) any later version.
12 
13  This program is distributed in the hope that it will be useful,
14  but WITHOUT ANY WARRANTY; without even the implied warranty of
15  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  GNU General Public License for more details.
17 
18  You should have received a copy of the GNU General Public License
19  along with this program; if not, write to the Free Software
20  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
21 
22  As a special exception, permission is given to link this program
23  with any edition of TQt, and distribute the resulting executable,
24  without including the source code for TQt in the source distribution.
25 */
26 
27 #include <tqpushbutton.h>
28 #include <tqcheckbox.h>
29 #include <tqbuttongroup.h>
30 #include <tqlineedit.h>
31 #include <tqradiobutton.h>
32 #include <tqlistbox.h>
33 #include <tqwhatsthis.h>
34 
35 #include <kdebug.h>
36 #include <tdelocale.h>
37 #include <tdemessagebox.h>
38 #include <knuminput.h>
39 
40 #include <libkcal/calfilter.h>
41 #include <libtdepim/categoryselectdialog.h>
42 
43 #include "koprefs.h"
44 #include "filteredit_base.h"
45 
46 #include "filtereditdialog.h"
47 #include "filtereditdialog.moc"
48 
49 FilterEditDialog::FilterEditDialog( TQPtrList<CalFilter> *filters,
50  TQWidget *parent, const char *name)
51  : KDialogBase( parent, name, false, i18n("Edit Calendar Filters"),
52  Ok | Apply | Cancel )
53 {
54  setMainWidget( mFilterEdit = new FilterEdit(filters, this));
55 
56  connect(mFilterEdit, TQ_SIGNAL(dataConsistent(bool)),
57  TQ_SLOT(setDialogConsistent(bool)));
58  updateFilterList();
59  connect( mFilterEdit, TQ_SIGNAL( editCategories() ), TQ_SIGNAL( editCategories() ) );
60  connect( mFilterEdit, TQ_SIGNAL( filterChanged() ), TQ_SIGNAL( filterChanged() ) );
61 }
62 
63 FilterEditDialog::~FilterEditDialog()
64 {
65  delete mFilterEdit;
66  mFilterEdit = 0L;
67 }
68 
69 void FilterEditDialog::updateFilterList()
70 {
71  mFilterEdit->updateFilterList();
72 }
73 
74 void FilterEditDialog::updateCategoryConfig()
75 {
76  mFilterEdit->updateCategoryConfig();
77 }
78 
79 void FilterEditDialog::slotApply()
80 {
81  mFilterEdit->saveChanges();
82 }
83 
84 void FilterEditDialog::slotOk()
85 {
86  slotApply();
87  accept();
88 }
89 
90 void FilterEditDialog::setDialogConsistent(bool consistent) {
91  enableButtonOK( consistent );
92  enableButtonApply( consistent );
93 }
94 
95 FilterEdit::FilterEdit(TQPtrList<CalFilter> *filters, TQWidget *parent)
96  : FilterEdit_base( parent), current(0), mCategorySelectDialog( 0 )
97 {
98  mFilters = filters;
99  TQWhatsThis::add( mNewButton, i18n( "Press this button to define a new filter." ) );
100  TQWhatsThis::add( mDeleteButton, i18n( "Press this button to remove the currently active filter." ) );
101 
102  connect( mRulesList, TQ_SIGNAL(selectionChanged()), this, TQ_SLOT(filterSelected()) );
103  connect( mNewButton, TQ_SIGNAL( clicked() ), TQ_SLOT( bNewPressed() ) );
104  connect( mDeleteButton, TQ_SIGNAL( clicked() ), TQ_SLOT( bDeletePressed() ) );
105  connect( mNameLineEdit, TQ_SIGNAL( textChanged(const TQString &) ), TQ_SLOT( updateSelectedName(const TQString &) ) );
106  connect( mCatEditButton, TQ_SIGNAL( clicked() ), TQ_SLOT( editCategorySelection() ) );
107 }
108 
109 FilterEdit::~FilterEdit() {
110 }
111 
112 
113 void FilterEdit::updateFilterList()
114 {
115  mRulesList->clear();
116 
117  CalFilter *filter = mFilters->first();
118 
119  if ( !filter )
120  emit(dataConsistent(false));
121  else {
122  while( filter ) {
123  mRulesList->insertItem( filter->name() );
124  filter = mFilters->next();
125  }
126 
127  CalFilter *f = mFilters->at( mRulesList->currentItem() );
128  if ( f ) filterSelected( f );
129 
130  emit(dataConsistent(true));
131  }
132 
133  if(current == 0L && mFilters->count() > 0)
134  filterSelected(mFilters->at(0));
135  mDeleteButton->setEnabled( mFilters->count() > 1 );
136 }
137 
138 void FilterEdit::saveChanges()
139 {
140  if(current == 0L)
141  return;
142 
143  current->setName(mNameLineEdit->text());
144  int criteria = 0;
145  if ( mCompletedCheck->isChecked() ) criteria |= CalFilter::HideCompleted;
146  if ( mRecurringCheck->isChecked() ) criteria |= CalFilter::HideRecurring;
147  if ( mCatShowCheck->isChecked() ) criteria |= CalFilter::ShowCategories;
148  if ( mHideInactiveTodosCheck->isChecked() ) criteria |= CalFilter::HideInactiveTodos;
149  if ( mHideTodosNotAssignedToMeCheck->isChecked() )
150  criteria |= CalFilter::HideTodosWithoutAttendeeInEmailList;
151  current->setCriteria( criteria );
152  current->setCompletedTimeSpan( mCompletedTimeSpan->value() );
153 
154  TQStringList categoryList;
155  for( uint i = 0; i < mCatList->count(); ++i )
156  categoryList.append( mCatList->text( i ) );
157  current->setCategoryList( categoryList );
158  emit filterChanged();
159 }
160 
161 void FilterEdit::filterSelected()
162 {
163  filterSelected(mFilters->at(mRulesList->currentItem()));
164 }
165 
166 void FilterEdit::filterSelected(CalFilter *filter)
167 {
168  if(filter == current) return;
169  kdDebug(5850) << "Selected filter " << (filter!=0?filter->name():"") << endl;
170  saveChanges();
171 
172  current = filter;
173  mNameLineEdit->blockSignals(true);
174  mNameLineEdit->setText(current->name());
175  mNameLineEdit->blockSignals(false);
176  mDetailsFrame->setEnabled(current != 0L);
177  mCompletedCheck->setChecked( current->criteria() & CalFilter::HideCompleted );
178  mCompletedTimeSpan->setValue( current->completedTimeSpan() );
179  mRecurringCheck->setChecked( current->criteria() & CalFilter::HideRecurring );
180  mHideInactiveTodosCheck->setChecked( current->criteria() & CalFilter::HideInactiveTodos );
181  mHideTodosNotAssignedToMeCheck->setChecked(
182  current->criteria() & CalFilter::HideTodosWithoutAttendeeInEmailList );
183  mCategoriesButtonGroup->setButton( (current->criteria() & CalFilter::ShowCategories)?0:1 );
184  mCatList->clear();
185  mCatList->insertStringList( current->categoryList() );
186 }
187 
188 void FilterEdit::bNewPressed() {
189  CalFilter *newFilter = new CalFilter( i18n("New Filter %1").arg(mFilters->count()) );
190  mFilters->append( newFilter );
191  updateFilterList();
192  mRulesList->setSelected(mRulesList->count()-1, true);
193  emit filterChanged();
194 }
195 
196 void FilterEdit::bDeletePressed() {
197  if ( mRulesList->currentItem() < 0 ) return; // nothing selected
198  if ( mFilters->count() <= 1 ) return; // We need at least a default filter object.
199 
200  int result = KMessageBox::warningContinueCancel( this,
201  i18n("This item will be permanently deleted."), i18n("Delete Confirmation"), KGuiItem(i18n("Delete"),"edit-delete") );
202 
203  if ( result != KMessageBox::Continue )
204  return;
205 
206  unsigned int selected = mRulesList->currentItem();
207  mFilters->remove( selected );
208  current = 0L;
209  updateFilterList();
210  mRulesList->setSelected(TQMIN(mRulesList->count()-1, selected), true);
211  emit filterChanged();
212 }
213 
214 void FilterEdit::updateSelectedName(const TQString &newText) {
215  mRulesList->blockSignals( true );
216  mRulesList->changeItem(newText, mRulesList->currentItem());
217  mRulesList->blockSignals( false );
218  bool allOk = true;
219  CalFilter *filter = mFilters->first();
220  while( allOk && filter ) {
221  if(filter->name().isEmpty())
222  allOk = false;
223  filter = mFilters->next();
224  }
225  emit dataConsistent(allOk);
226 }
227 
228 void FilterEdit::editCategorySelection()
229 {
230  if( !current ) return;
231  if ( !mCategorySelectDialog ) {
232  mCategorySelectDialog = new KPIM::CategorySelectDialog( KOPrefs::instance(), this, "filterCatSelect" );
233  connect( mCategorySelectDialog,
234  TQ_SIGNAL( categoriesSelected( const TQStringList & ) ),
235  TQ_SLOT( updateCategorySelection( const TQStringList & ) ) );
236  connect( mCategorySelectDialog, TQ_SIGNAL( editCategories() ),
237  TQ_SIGNAL( editCategories() ) );
238 
239  }
240  mCategorySelectDialog->setSelected( current->categoryList() );
241 
242  mCategorySelectDialog->show();
243 }
244 
245 void FilterEdit::updateCategorySelection( const TQStringList &categories )
246 {
247  mCatList->clear();
248  mCatList->insertStringList(categories);
249  current->setCategoryList(categories);
250 }
251 
252 void FilterEdit::updateCategoryConfig()
253 {
254  if ( mCategorySelectDialog ) mCategorySelectDialog->updateCategoryConfig();
255 }
void setEnabled(bool)
TQString name() const