summaryrefslogtreecommitdiffabout
path: root/korganizer
Side-by-side diff
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
@@ -21,25 +21,25 @@
with any edition of Qt, and distribute the resulting executable,
without including the source code for Qt in the source distribution.
*/
#include <qlayout.h>
#include <qcheckbox.h>
#include <qgroupbox.h>
#include <qlabel.h>
#include <qlistview.h>
#include <qwhatsthis.h>
#include <qlineedit.h>
#include <qpushbutton.h>
-
+#include <qhbuttongroup.h>
#include <klocale.h>
#include <kmessagebox.h>
#include <libkdepim/kdateedit.h>
#include "koglobals.h"
#include "koprefs.h"
#include "klineedit.h"
#include "calendarview.h"
#include "koviewmanager.h"
#include "searchdialog.h"
@@ -58,32 +58,46 @@ SearchDialog::SearchDialog(Calendar *calendar,CalendarView *parent)
/*
searchLabel = new QLabel(topFrame);
searchLabel->setText(i18n("Search for:"));
subLayout->addWidget(searchLabel);
*/
QPushButton *OkButton = new QPushButton( i18n("Search for:"), topFrame );
//OkButton->setDefault( true );
connect(OkButton,SIGNAL(clicked()),SLOT(doSearch()));
subLayout->addWidget(OkButton);
searchEdit = new KLineEdit(topFrame);
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 );
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 & )));
connect(searchEdit, SIGNAL( returnPressed () ),this,SLOT(doSearch()));
// Subjects to search
// QGroupBox *subjectGroup = new QGroupBox(1,Vertical,i18n("Search In"),
// topFrame);
incidenceGroup = new QHBox( topFrame );
layout->addWidget(incidenceGroup);
mSearchEvent = new QCheckBox(i18n("Events"),incidenceGroup);
@@ -132,24 +146,51 @@ SearchDialog::SearchDialog(Calendar *calendar,CalendarView *parent)
setCaption( i18n("KO/Pi Find: "));
#ifdef DESKTOP_VERSION
OkButton = new QPushButton( i18n("Close"), this );
connect(OkButton,SIGNAL(clicked()),SLOT(hide()));
#endif
}
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() ) {
incidenceGroup->hide() ;
subjectGroup->hide() ;
attendeeGroup->hide() ;
} else {
incidenceGroup->show() ;
subjectGroup->show() ;
attendeeGroup->show() ;
}
}
@@ -285,186 +326,244 @@ void SearchDialog::updateView()
}
listView->setStartDate( mStartDate->date() );
listView->showEvents(mMatchedEvents);
listView->addTodos(mMatchedTodos);
listView->addJournals(mMatchedJournals);
}
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()) {
if (mSummaryCheck->isChecked()) {
#if QT_VERSION >= 0x030000
if (re.search(ev->summary()) != -1)
#else
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;
}
#if QT_VERSION >= 0x030000
if (re.search(ev->location()) != -1)
#else
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;
}
}
if (mDescriptionCheck->isChecked()) {
#if QT_VERSION >= 0x030000
if (re.search(ev->description()) != -1)
#else
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;
}
}
if (mCategoryCheck->isChecked()) {
#if QT_VERSION >= 0x030000
if (re.search(ev->categoriesStr()) != -1)
#else
if (re.match(ev->categoriesStr()) != -1)
#endif
{
- mMatchedEvents.append(ev);
+
+ if ( mSubItems->isChecked() )
+ mMatchedEvents.remove(ev);
+ else{
+ if ( !mMatchedEvents.contains( ev ) )
+ mMatchedEvents.append(ev);
+ }
continue;
}
}
if ( mSearchAName->isChecked() || mSearchAEmail->isChecked() ) {
QPtrList<Attendee> tmpAList = ev->attendees();
Attendee *a;
for (a = tmpAList.first(); a; a = tmpAList.next()) {
if (mSearchAName->isChecked()) {
#if QT_VERSION >= 0x030000
if (re.search(a->name()) != -1)
#else
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;
}
}
if (mSearchAEmail->isChecked()) {
#if QT_VERSION >= 0x030000
if (re.search(a->email()) != -1)
#else
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;
}
}
}
}
}
}
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()) {
if (mSummaryCheck->isChecked()) {
#if QT_VERSION >= 0x030000
if (re.search(tod->summary()) != -1)
#else
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;
}
}
if (mDescriptionCheck->isChecked()) {
#if QT_VERSION >= 0x030000
if (re.search(tod->description()) != -1)
#else
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;
}
}
if (mCategoryCheck->isChecked()) {
#if QT_VERSION >= 0x030000
if (re.search(tod->categoriesStr()) != -1)
#else
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;
}
}
if ( mSearchAName->isChecked() || mSearchAEmail->isChecked() ) {
QPtrList<Attendee> tmpAList = tod->attendees();
Attendee *a;
for (a = tmpAList.first(); a; a = tmpAList.next()) {
if (mSearchAName->isChecked()) {
#if QT_VERSION >= 0x030000
if (re.search(a->name()) != -1)
#else
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;
}
}
if (mSearchAEmail->isChecked()) {
#if QT_VERSION >= 0x030000
if (re.search(a->email()) != -1)
#else
if (re.match(a->email()) != -1)
#endif
{
- mMatchedTodos.append(tod);
+ if ( mSubItems->isChecked() )
+ mMatchedTodos.remove(tod);
+ else if (!mMatchedTodos.contains( tod ))
+ mMatchedTodos.append(tod);
break;
}
}
}
}
}
}
- 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()) {
if ( journ->dtStart().date() <= mEndDate->date()
&&journ->dtStart().date() >= mStartDate->date()) {
#if QT_VERSION >= 0x030000
if (re.search(journ->description()) != -1)
#else
if (re.match(journ->description()) != -1)
#endif
{
- mMatchedJournals.append(journ);
+ if ( mSubItems->isChecked() )
+ mMatchedJournals.remove(journ);
+ else if (!mMatchedJournals.contains( journ ))
+ mMatchedJournals.append(journ);
continue;
}
}
}
}
}
void SearchDialog::keyPressEvent ( QKeyEvent *e)
{
switch ( e->key() ) {
case Qt::Key_Escape:
diff --git a/korganizer/searchdialog.h b/korganizer/searchdialog.h
index b345b98..945ff65 100644
--- a/korganizer/searchdialog.h
+++ b/korganizer/searchdialog.h
@@ -16,25 +16,25 @@
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
As a special exception, permission is given to link this program
with any edition of Qt, and distribute the resulting executable,
without including the source code for Qt in the source distribution.
*/
#ifndef SEARCHDIALOG_H
#define SEARCHDIALOG_H
#include <qregexp.h>
-
+#include <qradiobutton.h>
#include <kdialogbase.h>
#include <qvbox.h>
#include <libkcal/calendar.h>
#include "kolistview.h"
class KDateEdit;
class QCheckBox;
class QLineEdit;
class KLineEdit;
class QLabel;
@@ -52,24 +52,27 @@ class SearchDialog : public QVBox
void raiseAndSelect();
public slots:
void changeEventDisplay(Event *, int) { updateView(); }
void updateConfig();
void updateList();
protected slots:
void setFocusToList();
void accept();
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 *);
void editEventSignal(Event *);
void deleteEventSignal(Event *);
private:
QHBox *incidenceGroup ,*subjectGroup ,*attendeeGroup;
void search(const QRegExp &);
Calendar *mCalendar;
@@ -83,17 +86,17 @@ class SearchDialog : public QVBox
KOListView *listView;
KDateEdit *mStartDate;
KDateEdit *mEndDate;
QCheckBox *mSummaryCheck;
QCheckBox *mDescriptionCheck;
QCheckBox *mCategoryCheck;
QCheckBox *mSearchEvent;
QCheckBox *mSearchTodo;
QCheckBox *mSearchJournal;
QCheckBox *mSearchAName;
QCheckBox *mSearchAEmail;
- QCheckBox *mAddItems;
+ QRadioButton *mAddItems, *mSubItems, *mRefineItems;
void keyPressEvent ( QKeyEvent *e) ;
};
#endif