summaryrefslogtreecommitdiffabout
Side-by-side diff
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--bin/kdepim/korganizer/germantranslation.txt4
-rw-r--r--korganizer/searchdialog.cpp111
-rw-r--r--korganizer/searchdialog.h7
3 files changed, 114 insertions, 8 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
@@ -1419,6 +1419,10 @@
{ "Choose Color","Wähle Farbe" },
{ " OK "," OK " },
{ " Cancel "," Abbrechen " },
+{ "Matching items will be added to list","Passende werden zur Liste hinzugefügt" },
+{ "Matching items will be removed from list","Passende werden von der Liste entfernt" },
+{ "Search on displayed list only","Suche auf der dargestellten Liste" },
+{ "List will be cleared before search","Liste wird vor der Suche gelöscht" },
{ "","" },
{ "","" },
{ "","" },
diff --git a/korganizer/searchdialog.cpp b/korganizer/searchdialog.cpp
index 7b3b543..bba49f0 100644
--- a/korganizer/searchdialog.cpp
+++ b/korganizer/searchdialog.cpp
@@ -30,7 +30,7 @@
#include <qwhatsthis.h>
#include <qlineedit.h>
#include <qpushbutton.h>
-
+#include <qhbuttongroup.h>
#include <klocale.h>
#include <kmessagebox.h>
@@ -67,14 +67,28 @@ SearchDialog::SearchDialog(Calendar *calendar,CalendarView *parent)
searchEdit = new KLineEdit(topFrame);
subLayout->addWidget(searchEdit);
- mAddItems = new QCheckBox(i18n("Add items"),topFrame);
+ mAddItems = new QRadioButton( "+ ", topFrame );
+ mSubItems = new QRadioButton( "- ", topFrame );
+ mRefineItems = new QRadioButton( "< ", topFrame );
subLayout->addWidget(mAddItems);
+ subLayout->addWidget( mSubItems );
+ subLayout->addWidget( mRefineItems );
+ QFont fo ( mAddItems->font() );
+ fo.setBold( true );
+ fo.setPointSize( fo.pointSize() + 2 );
+ mAddItems->setFont( fo );
+ mSubItems->setFont( fo );
+ mRefineItems->setFont( fo );
+ connect( mAddItems , SIGNAL( toggled ( bool ) ),this,SLOT(slot_add( bool )));
+ connect( mSubItems , SIGNAL( toggled ( bool ) ),this,SLOT(slot_sub( bool )));
+ connect( mRefineItems , SIGNAL( toggled ( bool ) ),this,SLOT(slot_refine( bool )));
QPushButton *togButton = new QPushButton( "", topFrame );
subLayout->addWidget(togButton);
connect(togButton,SIGNAL(clicked()),SLOT(toggleCheckboxes()));
togButton->setPixmap(SmallIcon("1updownarrow"));
togButton->setMinimumWidth( togButton->sizeHint().height() );
+
searchEdit->setText("*"); // Find all events by default
searchEdit->setFocus();
connect(searchEdit, SIGNAL(textChanged ( const QString & )),this,SLOT(searchTextChanged( const QString & )));
@@ -141,6 +155,33 @@ SearchDialog::~SearchDialog()
{
}
+void SearchDialog::slot_add( bool b )
+{
+ if ( b ) {
+ if ( mSubItems->isOn() ) mSubItems->toggle();
+ if ( mRefineItems->isOn() ) mRefineItems->toggle();
+ setCaption( i18n("Matching items will be added to list"));
+ } else
+ setCaption( i18n("List will be cleared before search"));
+}
+void SearchDialog::slot_sub( bool b)
+{
+ if ( b ) {
+ if ( mRefineItems->isOn() ) mRefineItems->toggle();
+ if ( mAddItems->isOn() ) mAddItems->toggle();
+ setCaption( i18n("Matching items will be removed from list"));
+ } else
+ setCaption( i18n("List will be cleared before search"));
+}
+void SearchDialog::slot_refine( bool b)
+{
+ if ( b ) {
+ if ( mSubItems->isOn() ) mSubItems->toggle();
+ if ( mAddItems->isOn() ) mAddItems->toggle();
+ setCaption( i18n("Search on displayed list only"));
+ } else
+ setCaption( i18n("List will be cleared before search"));
+}
void SearchDialog::toggleCheckboxes()
{
if ( incidenceGroup->isVisible() ) {
@@ -294,8 +335,10 @@ void SearchDialog::search(const QRegExp &re)
QPtrList<Event> events = mCalendar->events( mStartDate->date(),
mEndDate->date(),
false /*mInclusiveCheck->isChecked()*/ );
- if ( !mAddItems->isChecked() )
+ if ( !mAddItems->isChecked() && !mSubItems->isChecked() ) {
+ if ( mRefineItems->isChecked() ) events = mMatchedEvents;
mMatchedEvents.clear();
+ }
if ( mSearchEvent->isChecked() ) {
Event *ev;
for(ev=events.first();ev;ev=events.next()) {
@@ -306,7 +349,12 @@ void SearchDialog::search(const QRegExp &re)
if (re.match(ev->summary()) != -1)
#endif
{
+ if ( mSubItems->isChecked() )
+ mMatchedEvents.remove(ev);
+ else {
+ if ( !mMatchedEvents.contains( ev ) )
mMatchedEvents.append(ev);
+ }
continue;
}
#if QT_VERSION >= 0x030000
@@ -315,7 +363,12 @@ void SearchDialog::search(const QRegExp &re)
if (re.match(ev->location()) != -1)
#endif
{
+ if ( mSubItems->isChecked() )
+ mMatchedEvents.remove(ev);
+ else{
+ if ( !mMatchedEvents.contains( ev ) )
mMatchedEvents.append(ev);
+ }
continue;
}
}
@@ -326,7 +379,12 @@ void SearchDialog::search(const QRegExp &re)
if (re.match(ev->description()) != -1)
#endif
{
+ if ( mSubItems->isChecked() )
+ mMatchedEvents.remove(ev);
+ else{
+ if ( !mMatchedEvents.contains( ev ) )
mMatchedEvents.append(ev);
+ }
continue;
}
}
@@ -337,7 +395,13 @@ void SearchDialog::search(const QRegExp &re)
if (re.match(ev->categoriesStr()) != -1)
#endif
{
+
+ if ( mSubItems->isChecked() )
+ mMatchedEvents.remove(ev);
+ else{
+ if ( !mMatchedEvents.contains( ev ) )
mMatchedEvents.append(ev);
+ }
continue;
}
}
@@ -352,7 +416,12 @@ void SearchDialog::search(const QRegExp &re)
if (re.match(a->name()) != -1)
#endif
{
+ if ( mSubItems->isChecked() )
+ mMatchedEvents.remove(ev);
+ else{
+ if ( !mMatchedEvents.contains( ev ) )
mMatchedEvents.append(ev);
+ }
break;
}
}
@@ -363,7 +432,12 @@ void SearchDialog::search(const QRegExp &re)
if (re.match(a->email()) != -1)
#endif
{
+ if ( mSubItems->isChecked() )
+ mMatchedEvents.remove(ev);
+ else{
+ if ( !mMatchedEvents.contains( ev ) )
mMatchedEvents.append(ev);
+ }
break;
}
}
@@ -372,8 +446,12 @@ void SearchDialog::search(const QRegExp &re)
}
}
QPtrList<Todo> todos = mCalendar->todos( );
- if ( !mAddItems->isChecked() )
+
+ if ( !mAddItems->isChecked() && !mSubItems->isChecked() ) {
+ if ( mRefineItems->isChecked() ) todos = mMatchedTodos ;
mMatchedTodos.clear();
+ }
+
if ( mSearchTodo->isChecked() ) {
Todo *tod;
for(tod=todos.first();tod;tod=todos.next()) {
@@ -384,6 +462,9 @@ void SearchDialog::search(const QRegExp &re)
if (re.match(tod->summary()) != -1)
#endif
{
+ if ( mSubItems->isChecked() )
+ mMatchedTodos.remove(tod);
+ else if (!mMatchedTodos.contains( tod ))
mMatchedTodos.append(tod);
continue;
}
@@ -395,6 +476,9 @@ void SearchDialog::search(const QRegExp &re)
if (re.match(tod->description()) != -1)
#endif
{
+ if ( mSubItems->isChecked() )
+ mMatchedTodos.remove(tod);
+ else if (!mMatchedTodos.contains( tod ))
mMatchedTodos.append(tod);
continue;
}
@@ -406,6 +490,9 @@ void SearchDialog::search(const QRegExp &re)
if (re.match(tod->categoriesStr()) != -1)
#endif
{
+ if ( mSubItems->isChecked() )
+ mMatchedTodos.remove(tod);
+ else if (!mMatchedTodos.contains( tod ))
mMatchedTodos.append(tod);
continue;
}
@@ -421,6 +508,9 @@ void SearchDialog::search(const QRegExp &re)
if (re.match(a->name()) != -1)
#endif
{
+ if ( mSubItems->isChecked() )
+ mMatchedTodos.remove(tod);
+ else if (!mMatchedTodos.contains( tod ))
mMatchedTodos.append(tod);
break;
}
@@ -432,6 +522,9 @@ void SearchDialog::search(const QRegExp &re)
if (re.match(a->email()) != -1)
#endif
{
+ if ( mSubItems->isChecked() )
+ mMatchedTodos.remove(tod);
+ else if (!mMatchedTodos.contains( tod ))
mMatchedTodos.append(tod);
break;
}
@@ -440,10 +533,13 @@ void SearchDialog::search(const QRegExp &re)
}
}
}
- if ( !mAddItems->isChecked() )
+
+ QPtrList<Journal> journals = mCalendar->journals( );
+ if ( !mAddItems->isChecked() && !mSubItems->isChecked() ) {
+ if ( mRefineItems->isChecked() ) journals = mMatchedJournals ;
mMatchedJournals.clear();
+ }
if (mSearchJournal->isChecked() ) {
- QPtrList<Journal> journals = mCalendar->journals( );
Journal* journ;
for(journ=journals.first();journ;journ=journals.next()) {
@@ -455,6 +551,9 @@ void SearchDialog::search(const QRegExp &re)
if (re.match(journ->description()) != -1)
#endif
{
+ if ( mSubItems->isChecked() )
+ mMatchedJournals.remove(journ);
+ else if (!mMatchedJournals.contains( journ ))
mMatchedJournals.append(journ);
continue;
}
diff --git a/korganizer/searchdialog.h b/korganizer/searchdialog.h
index b345b98..945ff65 100644
--- a/korganizer/searchdialog.h
+++ b/korganizer/searchdialog.h
@@ -25,7 +25,7 @@
#define SEARCHDIALOG_H
#include <qregexp.h>
-
+#include <qradiobutton.h>
#include <kdialogbase.h>
#include <qvbox.h>
@@ -61,6 +61,9 @@ class SearchDialog : public QVBox
void doSearch();
void searchTextChanged( const QString &_text );
void toggleCheckboxes();
+ void slot_add( bool );
+ void slot_sub( bool );
+ void slot_refine( bool );
signals:
void showEventSignal(Event *);
@@ -92,7 +95,7 @@ class SearchDialog : public QVBox
QCheckBox *mSearchJournal;
QCheckBox *mSearchAName;
QCheckBox *mSearchAEmail;
- QCheckBox *mAddItems;
+ QRadioButton *mAddItems, *mSubItems, *mRefineItems;
void keyPressEvent ( QKeyEvent *e) ;
};