summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--bin/kdepim/korganizer/germantranslation.txt4
-rw-r--r--korganizer/searchdialog.cpp155
-rw-r--r--korganizer/searchdialog.h7
3 files changed, 136 insertions, 30 deletions
diff --git a/bin/kdepim/korganizer/germantranslation.txt b/bin/kdepim/korganizer/germantranslation.txt
index 03d1882..5a9f2a2 100644
--- a/bin/kdepim/korganizer/germantranslation.txt
+++ b/bin/kdepim/korganizer/germantranslation.txt
@@ -1416,12 +1416,16 @@
1416{ "KDE-Pim Global Settings","KDE-Pim Globale Einstellungen" }, 1416{ "KDE-Pim Global Settings","KDE-Pim Globale Einstellungen" },
1417{ "Sorry, the calendar name \n%1\nalready exists!\nPlease choose another name!","Sorry, der Kalendername \n%1\nist schon in Benutzung!\nBitte wählen Sie einen anderen!" }, 1417{ "Sorry, the calendar name \n%1\nalready exists!\nPlease choose another name!","Sorry, der Kalendername \n%1\nist schon in Benutzung!\nBitte wählen Sie einen anderen!" },
1418{ "Sorry, the file \n%1\nis already loaded!\nPlease choose another file!","Sorry, die Datei \n%1\nist schon geladen!\nBitte wählen Sie eine andere!" }, 1418{ "Sorry, the file \n%1\nis already loaded!\nPlease choose another file!","Sorry, die Datei \n%1\nist schon geladen!\nBitte wählen Sie eine andere!" },
1419{ "Choose Color","Wähle Farbe" }, 1419{ "Choose Color","Wähle Farbe" },
1420{ " OK "," OK " }, 1420{ " OK "," OK " },
1421{ " Cancel "," Abbrechen " }, 1421{ " Cancel "," Abbrechen " },
1422{ "Matching items will be added to list","Passende werden zur Liste hinzugefügt" },
1423{ "Matching items will be removed from list","Passende werden von der Liste entfernt" },
1424{ "Search on displayed list only","Suche auf der dargestellten Liste" },
1425{ "List will be cleared before search","Liste wird vor der Suche gelöscht" },
1422{ "","" }, 1426{ "","" },
1423{ "","" }, 1427{ "","" },
1424{ "","" }, 1428{ "","" },
1425{ "","" }, 1429{ "","" },
1426{ "","" }, 1430{ "","" },
1427{ "","" }, 1431{ "","" },
diff --git a/korganizer/searchdialog.cpp b/korganizer/searchdialog.cpp
index 7b3b543..bba49f0 100644
--- a/korganizer/searchdialog.cpp
+++ b/korganizer/searchdialog.cpp
@@ -27,13 +27,13 @@
27#include <qgroupbox.h> 27#include <qgroupbox.h>
28#include <qlabel.h> 28#include <qlabel.h>
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>
38 38
39#include "koglobals.h" 39#include "koglobals.h"
@@ -64,20 +64,34 @@ SearchDialog::SearchDialog(Calendar *calendar,CalendarView *parent)
64 //OkButton->setDefault( true ); 64 //OkButton->setDefault( true );
65 connect(OkButton,SIGNAL(clicked()),SLOT(doSearch())); 65 connect(OkButton,SIGNAL(clicked()),SLOT(doSearch()));
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()));
82 // Subjects to search 96 // Subjects to search
83 // QGroupBox *subjectGroup = new QGroupBox(1,Vertical,i18n("Search In"), 97 // QGroupBox *subjectGroup = new QGroupBox(1,Vertical,i18n("Search In"),
@@ -138,12 +152,39 @@ SearchDialog::SearchDialog(Calendar *calendar,CalendarView *parent)
138} 152}
139 153
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() ;
148 subjectGroup->hide() ; 189 subjectGroup->hide() ;
149 attendeeGroup->hide() ; 190 attendeeGroup->hide() ;
@@ -291,56 +332,79 @@ void SearchDialog::updateView()
291 332
292void SearchDialog::search(const QRegExp &re) 333void 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()) {
303#if QT_VERSION >= 0x030000 346#if QT_VERSION >= 0x030000
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()) {
323#if QT_VERSION >= 0x030000 376#if QT_VERSION >= 0x030000
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()) {
334#if QT_VERSION >= 0x030000 392#if QT_VERSION >= 0x030000
335 if (re.search(ev->categoriesStr()) != -1) 393 if (re.search(ev->categoriesStr()) != -1)
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() ) {
345 QPtrList<Attendee> tmpAList = ev->attendees(); 409 QPtrList<Attendee> tmpAList = ev->attendees();
346 Attendee *a; 410 Attendee *a;
@@ -348,68 +412,91 @@ void SearchDialog::search(const QRegExp &re)
348 if (mSearchAName->isChecked()) { 412 if (mSearchAName->isChecked()) {
349#if QT_VERSION >= 0x030000 413#if QT_VERSION >= 0x030000
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()) {
360#if QT_VERSION >= 0x030000 429#if QT_VERSION >= 0x030000
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()) {
381#if QT_VERSION >= 0x030000 459#if QT_VERSION >= 0x030000
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()) {
392#if QT_VERSION >= 0x030000 473#if QT_VERSION >= 0x030000
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()) {
403#if QT_VERSION >= 0x030000 487#if QT_VERSION >= 0x030000
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() ) {
414 QPtrList<Attendee> tmpAList = tod->attendees(); 501 QPtrList<Attendee> tmpAList = tod->attendees();
415 Attendee *a; 502 Attendee *a;
@@ -417,48 +504,60 @@ void SearchDialog::search(const QRegExp &re)
417 if (mSearchAName->isChecked()) { 504 if (mSearchAName->isChecked()) {
418#if QT_VERSION >= 0x030000 505#if QT_VERSION >= 0x030000
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()) {
429#if QT_VERSION >= 0x030000 519#if QT_VERSION >= 0x030000
430 if (re.search(a->email()) != -1) 520 if (re.search(a->email()) != -1)
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()
451 &&journ->dtStart().date() >= mStartDate->date()) { 547 &&journ->dtStart().date() >= mStartDate->date()) {
452#if QT_VERSION >= 0x030000 548#if QT_VERSION >= 0x030000
453 if (re.search(journ->description()) != -1) 549 if (re.search(journ->description()) != -1)
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 }
463 } 562 }
464 563
diff --git a/korganizer/searchdialog.h b/korganizer/searchdialog.h
index b345b98..945ff65 100644
--- a/korganizer/searchdialog.h
+++ b/korganizer/searchdialog.h
@@ -22,13 +22,13 @@
22 without including the source code for Qt in the source distribution. 22 without including the source code for Qt in the source distribution.
23*/ 23*/
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>
33 33
34#include "kolistview.h" 34#include "kolistview.h"
@@ -58,12 +58,15 @@ class SearchDialog : public QVBox
58 protected slots: 58 protected slots:
59 void setFocusToList(); 59 void setFocusToList();
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 *);
68 void deleteEventSignal(Event *); 71 void deleteEventSignal(Event *);
69 72
@@ -89,11 +92,11 @@ class SearchDialog : public QVBox
89 QCheckBox *mCategoryCheck; 92 QCheckBox *mCategoryCheck;
90 QCheckBox *mSearchEvent; 93 QCheckBox *mSearchEvent;
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