summaryrefslogtreecommitdiffabout
path: root/korganizer/searchdialog.cpp
Side-by-side diff
Diffstat (limited to 'korganizer/searchdialog.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/searchdialog.cpp155
1 files changed, 127 insertions, 28 deletions
diff --git a/korganizer/searchdialog.cpp b/korganizer/searchdialog.cpp
index 7b3b543..bba49f0 100644
--- a/korganizer/searchdialog.cpp
+++ b/korganizer/searchdialog.cpp
@@ -31,5 +31,5 @@
#include <qlineedit.h>
#include <qpushbutton.h>
-
+#include <qhbuttongroup.h>
#include <klocale.h>
#include <kmessagebox.h>
@@ -68,6 +68,19 @@ SearchDialog::SearchDialog(Calendar *calendar,CalendarView *parent)
subLayout->addWidget(searchEdit);
- mAddItems = new QCheckBox(i18n("Add items"),topFrame);
- subLayout->addWidget(mAddItems);
+ 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 );
@@ -76,4 +89,5 @@ SearchDialog::SearchDialog(Calendar *calendar,CalendarView *parent)
togButton->setPixmap(SmallIcon("1updownarrow"));
togButton->setMinimumWidth( togButton->sizeHint().height() );
+
searchEdit->setText("*"); // Find all events by default
searchEdit->setFocus();
@@ -142,4 +156,31 @@ 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()
{
@@ -295,6 +336,8 @@ void SearchDialog::search(const QRegExp &re)
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;
@@ -306,6 +349,11 @@ void SearchDialog::search(const QRegExp &re)
if (re.match(ev->summary()) != -1)
#endif
- {
- mMatchedEvents.append(ev);
+ {
+ if ( mSubItems->isChecked() )
+ mMatchedEvents.remove(ev);
+ else {
+ if ( !mMatchedEvents.contains( ev ) )
+ mMatchedEvents.append(ev);
+ }
continue;
}
@@ -315,6 +363,11 @@ void SearchDialog::search(const QRegExp &re)
if (re.match(ev->location()) != -1)
#endif
- {
- mMatchedEvents.append(ev);
+ {
+ if ( mSubItems->isChecked() )
+ mMatchedEvents.remove(ev);
+ else{
+ if ( !mMatchedEvents.contains( ev ) )
+ mMatchedEvents.append(ev);
+ }
continue;
}
@@ -326,6 +379,11 @@ void SearchDialog::search(const QRegExp &re)
if (re.match(ev->description()) != -1)
#endif
- {
- mMatchedEvents.append(ev);
+ {
+ if ( mSubItems->isChecked() )
+ mMatchedEvents.remove(ev);
+ else{
+ if ( !mMatchedEvents.contains( ev ) )
+ mMatchedEvents.append(ev);
+ }
continue;
}
@@ -338,5 +396,11 @@ void SearchDialog::search(const QRegExp &re)
#endif
{
- mMatchedEvents.append(ev);
+
+ if ( mSubItems->isChecked() )
+ mMatchedEvents.remove(ev);
+ else{
+ if ( !mMatchedEvents.contains( ev ) )
+ mMatchedEvents.append(ev);
+ }
continue;
}
@@ -352,6 +416,11 @@ void SearchDialog::search(const QRegExp &re)
if (re.match(a->name()) != -1)
#endif
- {
- mMatchedEvents.append(ev);
+ {
+ if ( mSubItems->isChecked() )
+ mMatchedEvents.remove(ev);
+ else{
+ if ( !mMatchedEvents.contains( ev ) )
+ mMatchedEvents.append(ev);
+ }
break;
}
@@ -363,6 +432,11 @@ void SearchDialog::search(const QRegExp &re)
if (re.match(a->email()) != -1)
#endif
- {
- mMatchedEvents.append(ev);
+ {
+ if ( mSubItems->isChecked() )
+ mMatchedEvents.remove(ev);
+ else{
+ if ( !mMatchedEvents.contains( ev ) )
+ mMatchedEvents.append(ev);
+ }
break;
}
@@ -373,6 +447,10 @@ 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;
@@ -384,6 +462,9 @@ void SearchDialog::search(const QRegExp &re)
if (re.match(tod->summary()) != -1)
#endif
- {
- mMatchedTodos.append(tod);
+ {
+ 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
- {
- mMatchedTodos.append(tod);
+ {
+ 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
- {
- mMatchedTodos.append(tod);
+ {
+ 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
- {
- mMatchedTodos.append(tod);
+ {
+ if ( mSubItems->isChecked() )
+ mMatchedTodos.remove(tod);
+ else if (!mMatchedTodos.contains( tod ))
+ mMatchedTodos.append(tod);
break;
}
@@ -433,5 +523,8 @@ void SearchDialog::search(const QRegExp &re)
#endif
{
- mMatchedTodos.append(tod);
+ if ( mSubItems->isChecked() )
+ mMatchedTodos.remove(tod);
+ else if (!mMatchedTodos.contains( tod ))
+ mMatchedTodos.append(tod);
break;
}
@@ -441,8 +534,11 @@ 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;
@@ -456,5 +552,8 @@ void SearchDialog::search(const QRegExp &re)
#endif
{
- mMatchedJournals.append(journ);
+ if ( mSubItems->isChecked() )
+ mMatchedJournals.remove(journ);
+ else if (!mMatchedJournals.contains( journ ))
+ mMatchedJournals.append(journ);
continue;
}