summaryrefslogtreecommitdiffabout
path: root/korganizer
authorzautrix <zautrix>2005-06-16 19:28:39 (UTC)
committer zautrix <zautrix>2005-06-16 19:28:39 (UTC)
commitb297e71bd6276ee9370917cb6765d73db7b61de9 (patch) (unidiff)
tree74240a9792ad8807b8838b43f89d0303db585538 /korganizer
parentbe2913be979c0d7c41e8a8721b552d14cb7ecd39 (diff)
downloadkdepimpi-b297e71bd6276ee9370917cb6765d73db7b61de9.zip
kdepimpi-b297e71bd6276ee9370917cb6765d73db7b61de9.tar.gz
kdepimpi-b297e71bd6276ee9370917cb6765d73db7b61de9.tar.bz2
search fixes
Diffstat (limited to 'korganizer') (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/searchdialog.cpp155
-rw-r--r--korganizer/searchdialog.h7
2 files changed, 132 insertions, 30 deletions
diff --git a/korganizer/searchdialog.cpp b/korganizer/searchdialog.cpp
index 7b3b543..bba49f0 100644
--- a/korganizer/searchdialog.cpp
+++ b/korganizer/searchdialog.cpp
@@ -29,9 +29,9 @@
29#include <qlistview.h> 29#include <qlistview.h>
30#include <qwhatsthis.h> 30#include <qwhatsthis.h>
31#include <qlineedit.h> 31#include <qlineedit.h>
32#include <qpushbutton.h> 32#include <qpushbutton.h>
33 33#include <qhbuttongroup.h>
34#include <klocale.h> 34#include <klocale.h>
35#include <kmessagebox.h> 35#include <kmessagebox.h>
36 36
37#include <libkdepim/kdateedit.h> 37#include <libkdepim/kdateedit.h>
@@ -66,16 +66,30 @@ SearchDialog::SearchDialog(Calendar *calendar,CalendarView *parent)
66 subLayout->addWidget(OkButton); 66 subLayout->addWidget(OkButton);
67 searchEdit = new KLineEdit(topFrame); 67 searchEdit = new KLineEdit(topFrame);
68 subLayout->addWidget(searchEdit); 68 subLayout->addWidget(searchEdit);
69 69
70 mAddItems = new QCheckBox(i18n("Add items"),topFrame); 70 mAddItems = new QRadioButton( "+ ", topFrame );
71 subLayout->addWidget(mAddItems); 71 mSubItems = new QRadioButton( "- ", topFrame );
72 mRefineItems = new QRadioButton( "< ", topFrame );
73 subLayout->addWidget( mAddItems );
74 subLayout->addWidget( mSubItems );
75 subLayout->addWidget( mRefineItems );
76 QFont fo ( mAddItems->font() );
77 fo.setBold( true );
78 fo.setPointSize( fo.pointSize() + 2 );
79 mAddItems->setFont( fo );
80 mSubItems->setFont( fo );
81 mRefineItems->setFont( fo );
82 connect( mAddItems , SIGNAL( toggled ( bool ) ),this,SLOT(slot_add( bool )));
83 connect( mSubItems , SIGNAL( toggled ( bool ) ),this,SLOT(slot_sub( bool )));
84 connect( mRefineItems , SIGNAL( toggled ( bool ) ),this,SLOT(slot_refine( bool )));
72 85
73 QPushButton *togButton = new QPushButton( "", topFrame ); 86 QPushButton *togButton = new QPushButton( "", topFrame );
74 subLayout->addWidget(togButton); 87 subLayout->addWidget(togButton);
75 connect(togButton,SIGNAL(clicked()),SLOT(toggleCheckboxes())); 88 connect(togButton,SIGNAL(clicked()),SLOT(toggleCheckboxes()));
76 togButton->setPixmap(SmallIcon("1updownarrow")); 89 togButton->setPixmap(SmallIcon("1updownarrow"));
77 togButton->setMinimumWidth( togButton->sizeHint().height() ); 90 togButton->setMinimumWidth( togButton->sizeHint().height() );
91
78 searchEdit->setText("*"); // Find all events by default 92 searchEdit->setText("*"); // Find all events by default
79 searchEdit->setFocus(); 93 searchEdit->setFocus();
80 connect(searchEdit, SIGNAL(textChanged ( const QString & )),this,SLOT(searchTextChanged( const QString & ))); 94 connect(searchEdit, SIGNAL(textChanged ( const QString & )),this,SLOT(searchTextChanged( const QString & )));
81 connect(searchEdit, SIGNAL( returnPressed () ),this,SLOT(doSearch())); 95 connect(searchEdit, SIGNAL( returnPressed () ),this,SLOT(doSearch()));
@@ -140,8 +154,35 @@ SearchDialog::SearchDialog(Calendar *calendar,CalendarView *parent)
140SearchDialog::~SearchDialog() 154SearchDialog::~SearchDialog()
141{ 155{
142 156
143} 157}
158void SearchDialog::slot_add( bool b )
159{
160 if ( b ) {
161 if ( mSubItems->isOn() ) mSubItems->toggle();
162 if ( mRefineItems->isOn() ) mRefineItems->toggle();
163 setCaption( i18n("Matching items will be added to list"));
164 } else
165 setCaption( i18n("List will be cleared before search"));
166}
167void SearchDialog::slot_sub( bool b)
168{
169 if ( b ) {
170 if ( mRefineItems->isOn() ) mRefineItems->toggle();
171 if ( mAddItems->isOn() ) mAddItems->toggle();
172 setCaption( i18n("Matching items will be removed from list"));
173 } else
174 setCaption( i18n("List will be cleared before search"));
175}
176void SearchDialog::slot_refine( bool b)
177{
178 if ( b ) {
179 if ( mSubItems->isOn() ) mSubItems->toggle();
180 if ( mAddItems->isOn() ) mAddItems->toggle();
181 setCaption( i18n("Search on displayed list only"));
182 } else
183 setCaption( i18n("List will be cleared before search"));
184}
144void SearchDialog::toggleCheckboxes() 185void SearchDialog::toggleCheckboxes()
145{ 186{
146 if ( incidenceGroup->isVisible() ) { 187 if ( incidenceGroup->isVisible() ) {
147 incidenceGroup->hide() ; 188 incidenceGroup->hide() ;
@@ -293,10 +334,12 @@ void SearchDialog::search(const QRegExp &re)
293{ 334{
294 QPtrList<Event> events = mCalendar->events( mStartDate->date(), 335 QPtrList<Event> events = mCalendar->events( mStartDate->date(),
295 mEndDate->date(), 336 mEndDate->date(),
296 false /*mInclusiveCheck->isChecked()*/ ); 337 false /*mInclusiveCheck->isChecked()*/ );
297 if ( !mAddItems->isChecked() ) 338 if ( !mAddItems->isChecked() && !mSubItems->isChecked() ) {
339 if ( mRefineItems->isChecked() ) events = mMatchedEvents;
298 mMatchedEvents.clear(); 340 mMatchedEvents.clear();
341 }
299 if ( mSearchEvent->isChecked() ) { 342 if ( mSearchEvent->isChecked() ) {
300 Event *ev; 343 Event *ev;
301 for(ev=events.first();ev;ev=events.next()) { 344 for(ev=events.first();ev;ev=events.next()) {
302 if (mSummaryCheck->isChecked()) { 345 if (mSummaryCheck->isChecked()) {
@@ -304,19 +347,29 @@ void SearchDialog::search(const QRegExp &re)
304 if (re.search(ev->summary()) != -1) 347 if (re.search(ev->summary()) != -1)
305#else 348#else
306 if (re.match(ev->summary()) != -1) 349 if (re.match(ev->summary()) != -1)
307#endif 350#endif
308 { 351 {
309 mMatchedEvents.append(ev); 352 if ( mSubItems->isChecked() )
353 mMatchedEvents.remove(ev);
354 else {
355 if ( !mMatchedEvents.contains( ev ) )
356 mMatchedEvents.append(ev);
357 }
310 continue; 358 continue;
311 } 359 }
312#if QT_VERSION >= 0x030000 360#if QT_VERSION >= 0x030000
313 if (re.search(ev->location()) != -1) 361 if (re.search(ev->location()) != -1)
314#else 362#else
315 if (re.match(ev->location()) != -1) 363 if (re.match(ev->location()) != -1)
316#endif 364#endif
317 { 365 {
318 mMatchedEvents.append(ev); 366 if ( mSubItems->isChecked() )
367 mMatchedEvents.remove(ev);
368 else{
369 if ( !mMatchedEvents.contains( ev ) )
370 mMatchedEvents.append(ev);
371 }
319 continue; 372 continue;
320 } 373 }
321 } 374 }
322 if (mDescriptionCheck->isChecked()) { 375 if (mDescriptionCheck->isChecked()) {
@@ -324,10 +377,15 @@ void SearchDialog::search(const QRegExp &re)
324 if (re.search(ev->description()) != -1) 377 if (re.search(ev->description()) != -1)
325#else 378#else
326 if (re.match(ev->description()) != -1) 379 if (re.match(ev->description()) != -1)
327#endif 380#endif
328 { 381 {
329 mMatchedEvents.append(ev); 382 if ( mSubItems->isChecked() )
383 mMatchedEvents.remove(ev);
384 else{
385 if ( !mMatchedEvents.contains( ev ) )
386 mMatchedEvents.append(ev);
387 }
330 continue; 388 continue;
331 } 389 }
332 } 390 }
333 if (mCategoryCheck->isChecked()) { 391 if (mCategoryCheck->isChecked()) {
@@ -336,9 +394,15 @@ void SearchDialog::search(const QRegExp &re)
336#else 394#else
337 if (re.match(ev->categoriesStr()) != -1) 395 if (re.match(ev->categoriesStr()) != -1)
338#endif 396#endif
339 { 397 {
340 mMatchedEvents.append(ev); 398
399 if ( mSubItems->isChecked() )
400 mMatchedEvents.remove(ev);
401 else{
402 if ( !mMatchedEvents.contains( ev ) )
403 mMatchedEvents.append(ev);
404 }
341 continue; 405 continue;
342 } 406 }
343 } 407 }
344 if ( mSearchAName->isChecked() || mSearchAEmail->isChecked() ) { 408 if ( mSearchAName->isChecked() || mSearchAEmail->isChecked() ) {
@@ -350,10 +414,15 @@ void SearchDialog::search(const QRegExp &re)
350 if (re.search(a->name()) != -1) 414 if (re.search(a->name()) != -1)
351#else 415#else
352 if (re.match(a->name()) != -1) 416 if (re.match(a->name()) != -1)
353#endif 417#endif
354 { 418 {
355 mMatchedEvents.append(ev); 419 if ( mSubItems->isChecked() )
420 mMatchedEvents.remove(ev);
421 else{
422 if ( !mMatchedEvents.contains( ev ) )
423 mMatchedEvents.append(ev);
424 }
356 break; 425 break;
357 } 426 }
358 } 427 }
359 if (mSearchAEmail->isChecked()) { 428 if (mSearchAEmail->isChecked()) {
@@ -361,20 +430,29 @@ void SearchDialog::search(const QRegExp &re)
361 if (re.search(a->email()) != -1) 430 if (re.search(a->email()) != -1)
362#else 431#else
363 if (re.match(a->email()) != -1) 432 if (re.match(a->email()) != -1)
364#endif 433#endif
365 { 434 {
366 mMatchedEvents.append(ev); 435 if ( mSubItems->isChecked() )
436 mMatchedEvents.remove(ev);
437 else{
438 if ( !mMatchedEvents.contains( ev ) )
439 mMatchedEvents.append(ev);
440 }
367 break; 441 break;
368 } 442 }
369 } 443 }
370 } 444 }
371 } 445 }
372 } 446 }
373 } 447 }
374 QPtrList<Todo> todos = mCalendar->todos( ); 448 QPtrList<Todo> todos = mCalendar->todos( );
375 if ( !mAddItems->isChecked() ) 449
450 if ( !mAddItems->isChecked() && !mSubItems->isChecked() ) {
451 if ( mRefineItems->isChecked() ) todos = mMatchedTodos ;
376 mMatchedTodos.clear(); 452 mMatchedTodos.clear();
453 }
454
377 if ( mSearchTodo->isChecked() ) { 455 if ( mSearchTodo->isChecked() ) {
378 Todo *tod; 456 Todo *tod;
379 for(tod=todos.first();tod;tod=todos.next()) { 457 for(tod=todos.first();tod;tod=todos.next()) {
380 if (mSummaryCheck->isChecked()) { 458 if (mSummaryCheck->isChecked()) {
@@ -382,10 +460,13 @@ void SearchDialog::search(const QRegExp &re)
382 if (re.search(tod->summary()) != -1) 460 if (re.search(tod->summary()) != -1)
383#else 461#else
384 if (re.match(tod->summary()) != -1) 462 if (re.match(tod->summary()) != -1)
385#endif 463#endif
386 { 464 {
387 mMatchedTodos.append(tod); 465 if ( mSubItems->isChecked() )
466 mMatchedTodos.remove(tod);
467 else if (!mMatchedTodos.contains( tod ))
468 mMatchedTodos.append(tod);
388 continue; 469 continue;
389 } 470 }
390 } 471 }
391 if (mDescriptionCheck->isChecked()) { 472 if (mDescriptionCheck->isChecked()) {
@@ -393,10 +474,13 @@ void SearchDialog::search(const QRegExp &re)
393 if (re.search(tod->description()) != -1) 474 if (re.search(tod->description()) != -1)
394#else 475#else
395 if (re.match(tod->description()) != -1) 476 if (re.match(tod->description()) != -1)
396#endif 477#endif
397 { 478 {
398 mMatchedTodos.append(tod); 479 if ( mSubItems->isChecked() )
480 mMatchedTodos.remove(tod);
481 else if (!mMatchedTodos.contains( tod ))
482 mMatchedTodos.append(tod);
399 continue; 483 continue;
400 } 484 }
401 } 485 }
402 if (mCategoryCheck->isChecked()) { 486 if (mCategoryCheck->isChecked()) {
@@ -404,10 +488,13 @@ void SearchDialog::search(const QRegExp &re)
404 if (re.search(tod->categoriesStr()) != -1) 488 if (re.search(tod->categoriesStr()) != -1)
405#else 489#else
406 if (re.match(tod->categoriesStr()) != -1) 490 if (re.match(tod->categoriesStr()) != -1)
407#endif 491#endif
408 { 492 {
409 mMatchedTodos.append(tod); 493 if ( mSubItems->isChecked() )
494 mMatchedTodos.remove(tod);
495 else if (!mMatchedTodos.contains( tod ))
496 mMatchedTodos.append(tod);
410 continue; 497 continue;
411 } 498 }
412 } 499 }
413 if ( mSearchAName->isChecked() || mSearchAEmail->isChecked() ) { 500 if ( mSearchAName->isChecked() || mSearchAEmail->isChecked() ) {
@@ -419,10 +506,13 @@ void SearchDialog::search(const QRegExp &re)
419 if (re.search(a->name()) != -1) 506 if (re.search(a->name()) != -1)
420#else 507#else
421 if (re.match(a->name()) != -1) 508 if (re.match(a->name()) != -1)
422#endif 509#endif
423 { 510 {
424 mMatchedTodos.append(tod); 511 if ( mSubItems->isChecked() )
512 mMatchedTodos.remove(tod);
513 else if (!mMatchedTodos.contains( tod ))
514 mMatchedTodos.append(tod);
425 break; 515 break;
426 } 516 }
427 } 517 }
428 if (mSearchAEmail->isChecked()) { 518 if (mSearchAEmail->isChecked()) {
@@ -431,20 +521,26 @@ void SearchDialog::search(const QRegExp &re)
431#else 521#else
432 if (re.match(a->email()) != -1) 522 if (re.match(a->email()) != -1)
433#endif 523#endif
434 { 524 {
435 mMatchedTodos.append(tod); 525 if ( mSubItems->isChecked() )
526 mMatchedTodos.remove(tod);
527 else if (!mMatchedTodos.contains( tod ))
528 mMatchedTodos.append(tod);
436 break; 529 break;
437 } 530 }
438 } 531 }
439 } 532 }
440 } 533 }
441 } 534 }
442 } 535 }
443 if ( !mAddItems->isChecked() ) 536
537 QPtrList<Journal> journals = mCalendar->journals( );
538 if ( !mAddItems->isChecked() && !mSubItems->isChecked() ) {
539 if ( mRefineItems->isChecked() ) journals = mMatchedJournals ;
444 mMatchedJournals.clear(); 540 mMatchedJournals.clear();
541 }
445 if (mSearchJournal->isChecked() ) { 542 if (mSearchJournal->isChecked() ) {
446 QPtrList<Journal> journals = mCalendar->journals( );
447 Journal* journ; 543 Journal* journ;
448 544
449 for(journ=journals.first();journ;journ=journals.next()) { 545 for(journ=journals.first();journ;journ=journals.next()) {
450 if ( journ->dtStart().date() <= mEndDate->date() 546 if ( journ->dtStart().date() <= mEndDate->date()
@@ -454,9 +550,12 @@ void SearchDialog::search(const QRegExp &re)
454#else 550#else
455 if (re.match(journ->description()) != -1) 551 if (re.match(journ->description()) != -1)
456#endif 552#endif
457 { 553 {
458 mMatchedJournals.append(journ); 554 if ( mSubItems->isChecked() )
555 mMatchedJournals.remove(journ);
556 else if (!mMatchedJournals.contains( journ ))
557 mMatchedJournals.append(journ);
459 continue; 558 continue;
460 } 559 }
461 } 560 }
462 } 561 }
diff --git a/korganizer/searchdialog.h b/korganizer/searchdialog.h
index b345b98..945ff65 100644
--- a/korganizer/searchdialog.h
+++ b/korganizer/searchdialog.h
@@ -24,9 +24,9 @@
24#ifndef SEARCHDIALOG_H 24#ifndef SEARCHDIALOG_H
25#define SEARCHDIALOG_H 25#define SEARCHDIALOG_H
26 26
27#include <qregexp.h> 27#include <qregexp.h>
28 28#include <qradiobutton.h>
29#include <kdialogbase.h> 29#include <kdialogbase.h>
30#include <qvbox.h> 30#include <qvbox.h>
31 31
32#include <libkcal/calendar.h> 32#include <libkcal/calendar.h>
@@ -60,8 +60,11 @@ class SearchDialog : public QVBox
60 void accept(); 60 void accept();
61 void doSearch(); 61 void doSearch();
62 void searchTextChanged( const QString &_text ); 62 void searchTextChanged( const QString &_text );
63 void toggleCheckboxes(); 63 void toggleCheckboxes();
64 void slot_add( bool );
65 void slot_sub( bool );
66 void slot_refine( bool );
64 67
65 signals: 68 signals:
66 void showEventSignal(Event *); 69 void showEventSignal(Event *);
67 void editEventSignal(Event *); 70 void editEventSignal(Event *);
@@ -91,9 +94,9 @@ class SearchDialog : public QVBox
91 QCheckBox *mSearchTodo; 94 QCheckBox *mSearchTodo;
92 QCheckBox *mSearchJournal; 95 QCheckBox *mSearchJournal;
93 QCheckBox *mSearchAName; 96 QCheckBox *mSearchAName;
94 QCheckBox *mSearchAEmail; 97 QCheckBox *mSearchAEmail;
95 QCheckBox *mAddItems; 98 QRadioButton *mAddItems, *mSubItems, *mRefineItems;
96 void keyPressEvent ( QKeyEvent *e) ; 99 void keyPressEvent ( QKeyEvent *e) ;
97}; 100};
98 101
99#endif 102#endif