summaryrefslogtreecommitdiffabout
path: root/korganizer
Unidiff
Diffstat (limited to 'korganizer') (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/searchdialog.cpp8
1 files changed, 7 insertions, 1 deletions
diff --git a/korganizer/searchdialog.cpp b/korganizer/searchdialog.cpp
index a8de297..0713980 100644
--- a/korganizer/searchdialog.cpp
+++ b/korganizer/searchdialog.cpp
@@ -1,588 +1,594 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 1998 Preston Brown 3 Copyright (c) 1998 Preston Brown
4 Copyright (c) 2000,2001 Cornelius Schumacher <schumacher@kde.org> 4 Copyright (c) 2000,2001 Cornelius Schumacher <schumacher@kde.org>
5 5
6 This program is free software; you can redistribute it and/or modify 6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by 7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or 8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version. 9 (at your option) any later version.
10 10
11 This program is distributed in the hope that it will be useful, 11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details. 14 GNU General Public License for more details.
15 15
16 You should have received a copy of the GNU General Public License 16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software 17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 18 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
19 19
20 As a special exception, permission is given to link this program 20 As a special exception, permission is given to link this program
21 with any edition of Qt, and distribute the resulting executable, 21 with any edition of Qt, and distribute the resulting executable,
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 24
25#include <qlayout.h> 25#include <qlayout.h>
26#include <qcheckbox.h> 26#include <qcheckbox.h>
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#include <qhbuttongroup.h> 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"
40#include "koprefs.h" 40#include "koprefs.h"
41#include "klineedit.h" 41#include "klineedit.h"
42 42
43#include "calendarview.h" 43#include "calendarview.h"
44#include "koviewmanager.h" 44#include "koviewmanager.h"
45#include "searchdialog.h" 45#include "searchdialog.h"
46 46
47SearchDialog::SearchDialog(Calendar *calendar,CalendarView *parent) 47SearchDialog::SearchDialog(Calendar *calendar,CalendarView *parent)
48 : QVBox( 0 ) 48 : QVBox( 0 )
49 49
50{ 50{
51 mCalendar = calendar; 51 mCalendar = calendar;
52 QFrame *topFrame = new QFrame( this ) ;//plainPage(); 52 QFrame *topFrame = new QFrame( this ) ;//plainPage();
53 QVBoxLayout *layout = new QVBoxLayout(topFrame,KDialog::marginHint(),KDialog::spacingHint()); 53 QVBoxLayout *layout = new QVBoxLayout(topFrame,KDialog::marginHint(),KDialog::spacingHint());
54 54
55 // Search expression 55 // Search expression
56 QHBoxLayout *subLayout = new QHBoxLayout(); 56 QHBoxLayout *subLayout = new QHBoxLayout();
57 layout->addLayout(subLayout); 57 layout->addLayout(subLayout);
58 /* 58 /*
59 searchLabel = new QLabel(topFrame); 59 searchLabel = new QLabel(topFrame);
60 searchLabel->setText(i18n("Search for:")); 60 searchLabel->setText(i18n("Search for:"));
61 subLayout->addWidget(searchLabel); 61 subLayout->addWidget(searchLabel);
62 */ 62 */
63 QPushButton *OkButton = new QPushButton( i18n("Search for:"), topFrame ); 63 QPushButton *OkButton = new QPushButton( i18n("Search for:"), topFrame );
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 QRadioButton( "+ ", topFrame ); 70 mAddItems = new QRadioButton( "+ ", topFrame );
71 mSubItems = new QRadioButton( "- ", topFrame ); 71 mSubItems = new QRadioButton( "- ", topFrame );
72 mRefineItems = new QRadioButton( "< ", topFrame ); 72 mRefineItems = new QRadioButton( "< ", topFrame );
73 subLayout->addWidget( mAddItems ); 73 subLayout->addWidget( mAddItems );
74 subLayout->addWidget( mSubItems ); 74 subLayout->addWidget( mSubItems );
75 subLayout->addWidget( mRefineItems ); 75 subLayout->addWidget( mRefineItems );
76 QFont fo ( mAddItems->font() ); 76 QFont fo ( mAddItems->font() );
77 fo.setBold( true ); 77 fo.setBold( true );
78 fo.setPointSize( fo.pointSize() + 2 ); 78 fo.setPointSize( fo.pointSize() + 2 );
79 mAddItems->setFont( fo ); 79 mAddItems->setFont( fo );
80 mSubItems->setFont( fo ); 80 mSubItems->setFont( fo );
81 mRefineItems->setFont( fo ); 81 mRefineItems->setFont( fo );
82 connect( mAddItems , SIGNAL( toggled ( bool ) ),this,SLOT(slot_add( bool ))); 82 connect( mAddItems , SIGNAL( toggled ( bool ) ),this,SLOT(slot_add( bool )));
83 connect( mSubItems , SIGNAL( toggled ( bool ) ),this,SLOT(slot_sub( bool ))); 83 connect( mSubItems , SIGNAL( toggled ( bool ) ),this,SLOT(slot_sub( bool )));
84 connect( mRefineItems , SIGNAL( toggled ( bool ) ),this,SLOT(slot_refine( bool ))); 84 connect( mRefineItems , SIGNAL( toggled ( bool ) ),this,SLOT(slot_refine( bool )));
85 85
86 QPushButton *togButton = new QPushButton( "", topFrame ); 86 QPushButton *togButton = new QPushButton( "", topFrame );
87 subLayout->addWidget(togButton); 87 subLayout->addWidget(togButton);
88 connect(togButton,SIGNAL(clicked()),SLOT(toggleCheckboxes())); 88 connect(togButton,SIGNAL(clicked()),SLOT(toggleCheckboxes()));
89 togButton->setPixmap(SmallIcon("1updownarrow")); 89 togButton->setPixmap(SmallIcon("1updownarrow"));
90 togButton->setMinimumWidth( togButton->sizeHint().height() ); 90 togButton->setMinimumWidth( togButton->sizeHint().height() );
91 91
92 searchEdit->setText("*"); // Find all events by default 92 searchEdit->setText("*"); // Find all events by default
93 searchEdit->setFocus(); 93 searchEdit->setFocus();
94 connect(searchEdit, SIGNAL(textChanged ( const QString & )),this,SLOT(searchTextChanged( const QString & ))); 94 connect(searchEdit, SIGNAL(textChanged ( const QString & )),this,SLOT(searchTextChanged( const QString & )));
95 connect(searchEdit, SIGNAL( returnPressed () ),this,SLOT(doSearch())); 95 connect(searchEdit, SIGNAL( returnPressed () ),this,SLOT(doSearch()));
96 // Subjects to search 96 // Subjects to search
97 // QGroupBox *subjectGroup = new QGroupBox(1,Vertical,i18n("Search In"), 97 // QGroupBox *subjectGroup = new QGroupBox(1,Vertical,i18n("Search In"),
98 // topFrame); 98 // topFrame);
99 99
100 incidenceGroup = new QHBox( topFrame ); 100 incidenceGroup = new QHBox( topFrame );
101 layout->addWidget(incidenceGroup); 101 layout->addWidget(incidenceGroup);
102 102
103 mSearchEvent = new QCheckBox(i18n("Events"),incidenceGroup); 103 mSearchEvent = new QCheckBox(i18n("Events"),incidenceGroup);
104 //mSearchEvent->setChecked(true); 104 //mSearchEvent->setChecked(true);
105 mSearchTodo = new QCheckBox(i18n("Todos"),incidenceGroup); 105 mSearchTodo = new QCheckBox(i18n("Todos"),incidenceGroup);
106 mSearchJournal = new QCheckBox(i18n("Journals"),incidenceGroup); 106 mSearchJournal = new QCheckBox(i18n("Journals"),incidenceGroup);
107 107
108 subjectGroup = new QHBox( topFrame ); 108 subjectGroup = new QHBox( topFrame );
109 layout->addWidget(subjectGroup); 109 layout->addWidget(subjectGroup);
110 110
111 mSummaryCheck = new QCheckBox(i18n("Summary/Loc."),subjectGroup); 111 mSummaryCheck = new QCheckBox(i18n("Summary/Loc."),subjectGroup);
112 mSummaryCheck->setChecked(true); 112 mSummaryCheck->setChecked(true);
113 mDescriptionCheck = new QCheckBox(i18n("Details"),subjectGroup); 113 mDescriptionCheck = new QCheckBox(i18n("Details"),subjectGroup);
114 mCategoryCheck = new QCheckBox(i18n("Categories"),subjectGroup); 114 mCategoryCheck = new QCheckBox(i18n("Categories"),subjectGroup);
115 115
116 attendeeGroup = new QHBox( topFrame ); 116 attendeeGroup = new QHBox( topFrame );
117 layout->addWidget(attendeeGroup ); 117 layout->addWidget(attendeeGroup );
118 new QLabel( i18n("Attendee:"),attendeeGroup ); 118 new QLabel( i18n("Attendee:"),attendeeGroup );
119 mSearchAName = new QCheckBox(i18n("Name"),attendeeGroup ); 119 mSearchAName = new QCheckBox(i18n("Name"),attendeeGroup );
120 mSearchAEmail = new QCheckBox(i18n("Email"), attendeeGroup ); 120 mSearchAEmail = new QCheckBox(i18n("Email"), attendeeGroup );
121 // Date range 121 // Date range
122 // QGroupBox *rangeGroup = new QGroupBox(1,Horizontal,i18n("Date Range"), 122 // QGroupBox *rangeGroup = new QGroupBox(1,Horizontal,i18n("Date Range"),
123 // topFrame); 123 // topFrame);
124 // layout->addWidget(rangeGroup); 124 // layout->addWidget(rangeGroup);
125 125
126 QWidget *rangeWidget = new QWidget(topFrame); 126 QWidget *rangeWidget = new QWidget(topFrame);
127 QHBoxLayout *rangeLayout = new QHBoxLayout(rangeWidget,0,KDialog::spacingHint()); 127 QHBoxLayout *rangeLayout = new QHBoxLayout(rangeWidget,0,KDialog::spacingHint());
128 rangeLayout->addWidget(new QLabel(i18n("From:"),rangeWidget)); 128 rangeLayout->addWidget(new QLabel(i18n("From:"),rangeWidget));
129 mStartDate = new KDateEdit(rangeWidget); 129 mStartDate = new KDateEdit(rangeWidget);
130 rangeLayout->addWidget(mStartDate); 130 rangeLayout->addWidget(mStartDate);
131 rangeLayout->addWidget(new QLabel(i18n("To:"),rangeWidget)); 131 rangeLayout->addWidget(new QLabel(i18n("To:"),rangeWidget));
132 mEndDate = new KDateEdit(rangeWidget); 132 mEndDate = new KDateEdit(rangeWidget);
133 mEndDate->setDate(QDate::currentDate().addDays(365)); 133 mEndDate->setDate(QDate::currentDate().addDays(365));
134 rangeLayout->addWidget(mEndDate); 134 rangeLayout->addWidget(mEndDate);
135 QToolButton *wt = QWhatsThis::whatsThisButton ( rangeWidget ); 135 QToolButton *wt = QWhatsThis::whatsThisButton ( rangeWidget );
136 rangeLayout->addWidget( (QWidget*)wt ); 136 rangeLayout->addWidget( (QWidget*)wt );
137 layout->addWidget(rangeWidget); 137 layout->addWidget(rangeWidget);
138 // Results list view 138 // Results list view
139 listView = new KOListView(mCalendar,topFrame); 139 listView = new KOListView(mCalendar,topFrame);
140 layout->addWidget(listView); 140 layout->addWidget(listView);
141 listView->showCompletedTodos(); 141 listView->showCompletedTodos();
142 //layout->setStretchFactor( listView, 333 ); 142 //layout->setStretchFactor( listView, 333 );
143 //listView->setSizePolicy( QSizePolicy( QSizePolicy::Preferred ,QSizePolicy::Expanding) ); 143 //listView->setSizePolicy( QSizePolicy( QSizePolicy::Preferred ,QSizePolicy::Expanding) );
144 //listView->setMaximumHeight( 50 ); 144 //listView->setMaximumHeight( 50 );
145 listView->readSettings(KOGlobals::config(),"SearchListView Layout"); 145 listView->readSettings(KOGlobals::config(),"SearchListView Layout");
146 connect(searchEdit,SIGNAL(scrollDOWN()),SLOT(setFocusToList())); 146 connect(searchEdit,SIGNAL(scrollDOWN()),SLOT(setFocusToList()));
147 147
148 setCaption( i18n("KO/Pi Find: ")); 148 setCaption( i18n("KO/Pi Find: "));
149#ifdef DESKTOP_VERSION 149#ifdef DESKTOP_VERSION
150 OkButton = new QPushButton( i18n("Close"), this ); 150 OkButton = new QPushButton( i18n("Close"), this );
151 connect(OkButton,SIGNAL(clicked()),SLOT(hide())); 151 connect(OkButton,SIGNAL(clicked()),SLOT(hide()));
152#endif 152#endif
153} 153}
154 154
155SearchDialog::~SearchDialog() 155SearchDialog::~SearchDialog()
156{ 156{
157 157
158} 158}
159void SearchDialog::slot_add( bool b ) 159void SearchDialog::slot_add( bool b )
160{ 160{
161 if ( b ) { 161 if ( b ) {
162 if ( mSubItems->isOn() ) mSubItems->toggle(); 162 if ( mSubItems->isOn() ) mSubItems->toggle();
163 if ( mRefineItems->isOn() ) mRefineItems->toggle(); 163 if ( mRefineItems->isOn() ) mRefineItems->toggle();
164 setCaption( i18n("Matching items will be added to list")); 164 setCaption( i18n("Matching items will be added to list"));
165 } else 165 } else
166 setCaption( i18n("List will be cleared before search")); 166 setCaption( i18n("List will be cleared before search"));
167} 167}
168void SearchDialog::slot_sub( bool b) 168void SearchDialog::slot_sub( bool b)
169{ 169{
170 if ( b ) { 170 if ( b ) {
171 if ( mRefineItems->isOn() ) mRefineItems->toggle(); 171 if ( mRefineItems->isOn() ) mRefineItems->toggle();
172 if ( mAddItems->isOn() ) mAddItems->toggle(); 172 if ( mAddItems->isOn() ) mAddItems->toggle();
173 setCaption( i18n("Matching items will be removed from list")); 173 setCaption( i18n("Matching items will be removed from list"));
174 } else 174 } else
175 setCaption( i18n("List will be cleared before search")); 175 setCaption( i18n("List will be cleared before search"));
176} 176}
177void SearchDialog::slot_refine( bool b) 177void SearchDialog::slot_refine( bool b)
178{ 178{
179 if ( b ) { 179 if ( b ) {
180 if ( mSubItems->isOn() ) mSubItems->toggle(); 180 if ( mSubItems->isOn() ) mSubItems->toggle();
181 if ( mAddItems->isOn() ) mAddItems->toggle(); 181 if ( mAddItems->isOn() ) mAddItems->toggle();
182 setCaption( i18n("Search on displayed list only")); 182 setCaption( i18n("Search on displayed list only"));
183 } else 183 } else
184 setCaption( i18n("List will be cleared before search")); 184 setCaption( i18n("List will be cleared before search"));
185} 185}
186void SearchDialog::toggleCheckboxes() 186void SearchDialog::toggleCheckboxes()
187{ 187{
188 if ( incidenceGroup->isVisible() ) { 188 if ( incidenceGroup->isVisible() ) {
189 incidenceGroup->hide() ; 189 incidenceGroup->hide() ;
190 subjectGroup->hide() ; 190 subjectGroup->hide() ;
191 attendeeGroup->hide() ; 191 attendeeGroup->hide() ;
192 } else { 192 } else {
193 incidenceGroup->show() ; 193 incidenceGroup->show() ;
194 subjectGroup->show() ; 194 subjectGroup->show() ;
195 attendeeGroup->show() ; 195 attendeeGroup->show() ;
196 } 196 }
197} 197}
198void SearchDialog::raiseAndSelect() 198void SearchDialog::raiseAndSelect()
199{ 199{
200 200
201 static int currentState = 0; 201 static int currentState = 0;
202 202
203 if ( !mSearchJournal->isChecked() && !mSearchTodo->isChecked() && !mSearchEvent->isChecked() ) 203 if ( !mSearchJournal->isChecked() && !mSearchTodo->isChecked() && !mSearchEvent->isChecked() )
204 currentState = 0; 204 currentState = 0;
205 int newState = 0; 205 int newState = 0;
206 if ( KOPrefs::instance()->mCurrentDisplayedView == VIEW_J_VIEW ) { 206 if ( KOPrefs::instance()->mCurrentDisplayedView == VIEW_J_VIEW ) {
207 newState = VIEW_J_VIEW; 207 newState = VIEW_J_VIEW;
208 } 208 }
209 else if ( KOPrefs::instance()->mCurrentDisplayedView == VIEW_T_VIEW ) { 209 else if ( KOPrefs::instance()->mCurrentDisplayedView == VIEW_T_VIEW ) {
210 newState = VIEW_T_VIEW; 210 newState = VIEW_T_VIEW;
211 } 211 }
212 else { 212 else {
213 newState = VIEW_A_VIEW; 213 newState = VIEW_A_VIEW;
214 } 214 }
215 if ( newState != currentState ) { 215 if ( newState != currentState ) {
216 if ( KOPrefs::instance()->mCurrentDisplayedView == VIEW_J_VIEW ) { 216 if ( KOPrefs::instance()->mCurrentDisplayedView == VIEW_J_VIEW ) {
217 if ( ! mSearchJournal->isChecked() ) { 217 if ( ! mSearchJournal->isChecked() ) {
218 mSearchJournal->setChecked( true ); 218 mSearchJournal->setChecked( true );
219 mSearchTodo->setChecked( false ); 219 mSearchTodo->setChecked( false );
220 mSearchEvent->setChecked( false ); 220 mSearchEvent->setChecked( false );
221 } 221 }
222 } 222 }
223 else if ( KOPrefs::instance()->mCurrentDisplayedView == VIEW_T_VIEW ) { 223 else if ( KOPrefs::instance()->mCurrentDisplayedView == VIEW_T_VIEW ) {
224 if ( ! mSearchTodo->isChecked() ) { 224 if ( ! mSearchTodo->isChecked() ) {
225 mSearchTodo->setChecked( true ); 225 mSearchTodo->setChecked( true );
226 mSearchJournal->setChecked( false ); 226 mSearchJournal->setChecked( false );
227 mSearchEvent->setChecked( false ); 227 mSearchEvent->setChecked( false );
228 } 228 }
229 } 229 }
230 else { 230 else {
231 if ( ! mSearchEvent->isChecked() ) { 231 if ( ! mSearchEvent->isChecked() ) {
232 mSearchEvent->setChecked( true ); 232 mSearchEvent->setChecked( true );
233 mSearchJournal->setChecked( false ); 233 mSearchJournal->setChecked( false );
234 mSearchTodo->setChecked( false ); 234 mSearchTodo->setChecked( false );
235 } 235 }
236 } 236 }
237 } 237 }
238 currentState = newState; 238 currentState = newState;
239 raise(); 239 raise();
240} 240}
241void SearchDialog::setFocusToList() 241void SearchDialog::setFocusToList()
242{ 242{
243 listView->resetFocus(); 243 listView->resetFocus();
244} 244}
245void SearchDialog::accept() 245void SearchDialog::accept()
246{ 246{
247 doSearch(); 247 doSearch();
248} 248}
249void SearchDialog::updateList() 249void SearchDialog::updateList()
250{ 250{
251 //listView->updateList(); 251 //listView->updateList();
252 if ( isVisible() ) { 252 if ( isVisible() ) {
253 updateView(); 253 updateView();
254 //qDebug("SearchDialog::updated "); 254 //qDebug("SearchDialog::updated ");
255 } 255 }
256 else { 256 else {
257 listView->clear(); 257 listView->clear();
258 //qDebug("SearchDialog::cleared "); 258 //qDebug("SearchDialog::cleared ");
259 259
260 } 260 }
261} 261}
262void SearchDialog::searchTextChanged( const QString &_text ) 262void SearchDialog::searchTextChanged( const QString &_text )
263{ 263{
264#if 0 264#if 0
265 enableButton( KDialogBase::User1, !_text.isEmpty() ); 265 enableButton( KDialogBase::User1, !_text.isEmpty() );
266#endif 266#endif
267} 267}
268 268
269void SearchDialog::doSearch() 269void SearchDialog::doSearch()
270{ 270{
271 QRegExp re; 271 QRegExp re;
272 272
273 re.setWildcard(true); // most people understand these better. 273 re.setWildcard(true); // most people understand these better.
274 re.setCaseSensitive(false); 274 re.setCaseSensitive(false);
275 QString st = searchEdit->text(); 275 QString st = searchEdit->text();
276 if ( st.right(1) != "*") 276 if ( st.right(1) != "*")
277 st += "*"; 277 st += "*";
278 re.setPattern(st); 278 re.setPattern(st);
279 if (!mSearchEvent->isChecked() && !mSearchTodo->isChecked() && !mSearchJournal->isChecked() ) { 279 if (!mSearchEvent->isChecked() && !mSearchTodo->isChecked() && !mSearchJournal->isChecked() ) {
280 KMessageBox::sorry(this, 280 KMessageBox::sorry(this,
281 i18n("Please select at least one\nof the types to search for:\n\nEvents\nTodos\nJournals")); 281 i18n("Please select at least one\nof the types to search for:\n\nEvents\nTodos\nJournals"));
282 return; 282 return;
283 } 283 }
284 if (!re.isValid() ) { 284 if (!re.isValid() ) {
285 KMessageBox::sorry(this, 285 KMessageBox::sorry(this,
286 i18n("Invalid search expression,\ncannot perform " 286 i18n("Invalid search expression,\ncannot perform "
287 "the search.\nPlease enter a search expression\n" 287 "the search.\nPlease enter a search expression\n"
288 "using the wildcard characters\n '*' and '?'" 288 "using the wildcard characters\n '*' and '?'"
289 "where needed.")); 289 "where needed."));
290 return; 290 return;
291 } 291 }
292 search(re); 292 search(re);
293 listView->setStartDate( mStartDate->date() ); 293 listView->setStartDate( mStartDate->date() );
294 listView->showEvents(mMatchedEvents); 294 listView->showEvents(mMatchedEvents);
295 listView->addTodos(mMatchedTodos); 295 listView->addTodos(mMatchedTodos);
296 listView->addJournals(mMatchedJournals); 296 listView->addJournals(mMatchedJournals);
297 if (mMatchedEvents.count() + mMatchedJournals.count() + mMatchedTodos.count() == 0) { 297 if (mMatchedEvents.count() + mMatchedJournals.count() + mMatchedTodos.count() == 0) {
298 setCaption(i18n("No items found. Use '*' and '?' where needed.")); 298 setCaption(i18n("No items found. Use '*' and '?' where needed."));
299 } else { 299 } else {
300 QString mess; 300 QString mess;
301 mess = mess.sprintf( i18n("%d item(s) found."), mMatchedEvents.count()+ mMatchedJournals.count() + mMatchedTodos.count() ); 301 mess = mess.sprintf( i18n("%d item(s) found."), mMatchedEvents.count()+ mMatchedJournals.count() + mMatchedTodos.count() );
302 setCaption( i18n("KO/Pi Find: ") + mess); 302 setCaption( i18n("KO/Pi Find: ") + mess);
303 303
304 } 304 }
305 searchEdit->setFocus(); 305 searchEdit->setFocus();
306} 306}
307void SearchDialog::updateConfig() 307void SearchDialog::updateConfig()
308{ 308{
309 listView->updateConfig(); 309 listView->updateConfig();
310} 310}
311void SearchDialog::updateView() 311void SearchDialog::updateView()
312{ 312{
313 //qDebug("SearchDialog::updateView() %d ", isVisible()); 313 //qDebug("SearchDialog::updateView() %d ", isVisible());
314 QRegExp re; 314 QRegExp re;
315 re.setWildcard(true); // most people understand these better. 315 re.setWildcard(true); // most people understand these better.
316 re.setCaseSensitive(false); 316 re.setCaseSensitive(false);
317 QString st = searchEdit->text(); 317 QString st = searchEdit->text();
318 if ( st.right(1) != "*") 318 if ( st.right(1) != "*")
319 st += "*"; 319 st += "*";
320 re.setPattern(st); 320 re.setPattern(st);
321 if (re.isValid()) { 321 if (re.isValid()) {
322 search(re); 322 search(re);
323 } else { 323 } else {
324 mMatchedEvents.clear(); 324 mMatchedEvents.clear();
325 mMatchedTodos.clear(); 325 mMatchedTodos.clear();
326 mMatchedJournals.clear(); 326 mMatchedJournals.clear();
327 } 327 }
328 listView->setStartDate( mStartDate->date() ); 328 listView->setStartDate( mStartDate->date() );
329 listView->showEvents(mMatchedEvents); 329 listView->showEvents(mMatchedEvents);
330 listView->addTodos(mMatchedTodos); 330 listView->addTodos(mMatchedTodos);
331 listView->addJournals(mMatchedJournals); 331 listView->addJournals(mMatchedJournals);
332} 332}
333 333
334void SearchDialog::search(const QRegExp &re) 334void SearchDialog::search(const QRegExp &re)
335{ 335{
336 QPtrList<Event> events = mCalendar->events( mStartDate->date(), 336 QPtrList<Event> events = mCalendar->events( mStartDate->date(),
337 mEndDate->date(), 337 mEndDate->date(),
338 false /*mInclusiveCheck->isChecked()*/ ); 338 false /*mInclusiveCheck->isChecked()*/ );
339 if ( !mAddItems->isChecked() && !mSubItems->isChecked() ) { 339 if ( !mAddItems->isChecked() && !mSubItems->isChecked() ) {
340 if ( mRefineItems->isChecked() ) events = mMatchedEvents; 340 if ( mRefineItems->isChecked() ) events = mMatchedEvents;
341 mMatchedEvents.clear(); 341 mMatchedEvents.clear();
342 } 342 }
343 if ( mSearchEvent->isChecked() ) { 343 if ( mSearchEvent->isChecked() ) {
344 Event *ev; 344 Event *ev;
345 for(ev=events.first();ev;ev=events.next()) { 345 for(ev=events.first();ev;ev=events.next()) {
346 if (mSummaryCheck->isChecked()) { 346 if (mSummaryCheck->isChecked()) {
347#if QT_VERSION >= 0x030000 347#if QT_VERSION >= 0x030000
348 if (re.search(ev->summary()) != -1) 348 if (re.search(ev->summary()) != -1)
349#else 349#else
350 if (re.match(ev->summary()) != -1) 350 if (re.match(ev->summary()) != -1)
351#endif 351#endif
352 { 352 {
353 if ( mSubItems->isChecked() ) 353 if ( mSubItems->isChecked() )
354 mMatchedEvents.remove(ev); 354 mMatchedEvents.remove(ev);
355 else { 355 else {
356 if ( !mMatchedEvents.contains( ev ) ) 356 if ( !mMatchedEvents.contains( ev ) )
357 mMatchedEvents.append(ev); 357 mMatchedEvents.append(ev);
358 } 358 }
359 continue; 359 continue;
360 } 360 }
361#if QT_VERSION >= 0x030000 361#if QT_VERSION >= 0x030000
362 if (re.search(ev->location()) != -1) 362 if (re.search(ev->location()) != -1)
363#else 363#else
364 if (re.match(ev->location()) != -1) 364 if (re.match(ev->location()) != -1)
365#endif 365#endif
366 { 366 {
367 if ( mSubItems->isChecked() ) 367 if ( mSubItems->isChecked() )
368 mMatchedEvents.remove(ev); 368 mMatchedEvents.remove(ev);
369 else{ 369 else{
370 if ( !mMatchedEvents.contains( ev ) ) 370 if ( !mMatchedEvents.contains( ev ) )
371 mMatchedEvents.append(ev); 371 mMatchedEvents.append(ev);
372 } 372 }
373 continue; 373 continue;
374 } 374 }
375 } 375 }
376 if (mDescriptionCheck->isChecked()) { 376 if (mDescriptionCheck->isChecked()) {
377#if QT_VERSION >= 0x030000 377#if QT_VERSION >= 0x030000
378 if (re.search(ev->description()) != -1) 378 if (re.search(ev->description()) != -1)
379#else 379#else
380 if (re.match(ev->description()) != -1) 380 if (re.match(ev->description()) != -1)
381#endif 381#endif
382 { 382 {
383 if ( mSubItems->isChecked() ) 383 if ( mSubItems->isChecked() )
384 mMatchedEvents.remove(ev); 384 mMatchedEvents.remove(ev);
385 else{ 385 else{
386 if ( !mMatchedEvents.contains( ev ) ) 386 if ( !mMatchedEvents.contains( ev ) )
387 mMatchedEvents.append(ev); 387 mMatchedEvents.append(ev);
388 } 388 }
389 continue; 389 continue;
390 } 390 }
391 } 391 }
392 if (mCategoryCheck->isChecked()) { 392 if (mCategoryCheck->isChecked()) {
393#if QT_VERSION >= 0x030000 393#if QT_VERSION >= 0x030000
394 if (re.search(ev->categoriesStr()) != -1) 394 if (re.search(ev->categoriesStr()) != -1)
395#else 395#else
396 if (re.match(ev->categoriesStr()) != -1) 396 if (re.match(ev->categoriesStr()) != -1)
397#endif 397#endif
398 { 398 {
399 399
400 if ( mSubItems->isChecked() ) 400 if ( mSubItems->isChecked() )
401 mMatchedEvents.remove(ev); 401 mMatchedEvents.remove(ev);
402 else{ 402 else{
403 if ( !mMatchedEvents.contains( ev ) ) 403 if ( !mMatchedEvents.contains( ev ) )
404 mMatchedEvents.append(ev); 404 mMatchedEvents.append(ev);
405 } 405 }
406 continue; 406 continue;
407 } 407 }
408 } 408 }
409 if ( mSearchAName->isChecked() || mSearchAEmail->isChecked() ) { 409 if ( mSearchAName->isChecked() || mSearchAEmail->isChecked() ) {
410 QPtrList<Attendee> tmpAList = ev->attendees(); 410 QPtrList<Attendee> tmpAList = ev->attendees();
411 Attendee *a; 411 Attendee *a;
412 for (a = tmpAList.first(); a; a = tmpAList.next()) { 412 for (a = tmpAList.first(); a; a = tmpAList.next()) {
413 if (mSearchAName->isChecked()) { 413 if (mSearchAName->isChecked()) {
414#if QT_VERSION >= 0x030000 414#if QT_VERSION >= 0x030000
415 if (re.search(a->name()) != -1) 415 if (re.search(a->name()) != -1)
416#else 416#else
417 if (re.match(a->name()) != -1) 417 if (re.match(a->name()) != -1)
418#endif 418#endif
419 { 419 {
420 if ( mSubItems->isChecked() ) 420 if ( mSubItems->isChecked() )
421 mMatchedEvents.remove(ev); 421 mMatchedEvents.remove(ev);
422 else{ 422 else{
423 if ( !mMatchedEvents.contains( ev ) ) 423 if ( !mMatchedEvents.contains( ev ) )
424 mMatchedEvents.append(ev); 424 mMatchedEvents.append(ev);
425 } 425 }
426 break; 426 break;
427 } 427 }
428 } 428 }
429 if (mSearchAEmail->isChecked()) { 429 if (mSearchAEmail->isChecked()) {
430#if QT_VERSION >= 0x030000 430#if QT_VERSION >= 0x030000
431 if (re.search(a->email()) != -1) 431 if (re.search(a->email()) != -1)
432#else 432#else
433 if (re.match(a->email()) != -1) 433 if (re.match(a->email()) != -1)
434#endif 434#endif
435 { 435 {
436 if ( mSubItems->isChecked() ) 436 if ( mSubItems->isChecked() )
437 mMatchedEvents.remove(ev); 437 mMatchedEvents.remove(ev);
438 else{ 438 else{
439 if ( !mMatchedEvents.contains( ev ) ) 439 if ( !mMatchedEvents.contains( ev ) )
440 mMatchedEvents.append(ev); 440 mMatchedEvents.append(ev);
441 } 441 }
442 break; 442 break;
443 } 443 }
444 } 444 }
445 } 445 }
446 } 446 }
447 } 447 }
448 } 448 }
449 QPtrList<Todo> todos = mCalendar->todos( ); 449 QPtrList<Todo> todos = mCalendar->todos( );
450 450
451 if ( !mAddItems->isChecked() && !mSubItems->isChecked() ) { 451 if ( !mAddItems->isChecked() && !mSubItems->isChecked() ) {
452 if ( mRefineItems->isChecked() ) todos = mMatchedTodos ; 452 if ( mRefineItems->isChecked() ) todos = mMatchedTodos ;
453 mMatchedTodos.clear(); 453 mMatchedTodos.clear();
454 } 454 }
455 455
456 if ( mSearchTodo->isChecked() ) { 456 if ( mSearchTodo->isChecked() ) {
457 Todo *tod; 457 Todo *tod;
458 for(tod=todos.first();tod;tod=todos.next()) { 458 for(tod=todos.first();tod;tod=todos.next()) {
459 if (mSummaryCheck->isChecked()) { 459 if (mSummaryCheck->isChecked()) {
460#if QT_VERSION >= 0x030000 460#if QT_VERSION >= 0x030000
461 if (re.search(tod->summary()) != -1) 461 if (re.search(tod->summary()) != -1)
462#else 462#else
463 if (re.match(tod->summary()) != -1) 463 if (re.match(tod->summary()) != -1)
464#endif 464#endif
465 { 465 {
466 if ( mSubItems->isChecked() ) 466 if ( mSubItems->isChecked() )
467 mMatchedTodos.remove(tod); 467 mMatchedTodos.remove(tod);
468 else if (!mMatchedTodos.contains( tod )) 468 else if (!mMatchedTodos.contains( tod ))
469 mMatchedTodos.append(tod); 469 mMatchedTodos.append(tod);
470 continue; 470 continue;
471 } 471 }
472 } 472 }
473 if (mDescriptionCheck->isChecked()) { 473 if (mDescriptionCheck->isChecked()) {
474#if QT_VERSION >= 0x030000 474#if QT_VERSION >= 0x030000
475 if (re.search(tod->description()) != -1) 475 if (re.search(tod->description()) != -1)
476#else 476#else
477 if (re.match(tod->description()) != -1) 477 if (re.match(tod->description()) != -1)
478#endif 478#endif
479 { 479 {
480 if ( mSubItems->isChecked() ) 480 if ( mSubItems->isChecked() )
481 mMatchedTodos.remove(tod); 481 mMatchedTodos.remove(tod);
482 else if (!mMatchedTodos.contains( tod )) 482 else if (!mMatchedTodos.contains( tod ))
483 mMatchedTodos.append(tod); 483 mMatchedTodos.append(tod);
484 continue; 484 continue;
485 } 485 }
486 } 486 }
487 if (mCategoryCheck->isChecked()) { 487 if (mCategoryCheck->isChecked()) {
488#if QT_VERSION >= 0x030000 488#if QT_VERSION >= 0x030000
489 if (re.search(tod->categoriesStr()) != -1) 489 if (re.search(tod->categoriesStr()) != -1)
490#else 490#else
491 if (re.match(tod->categoriesStr()) != -1) 491 if (re.match(tod->categoriesStr()) != -1)
492#endif 492#endif
493 { 493 {
494 if ( mSubItems->isChecked() ) 494 if ( mSubItems->isChecked() )
495 mMatchedTodos.remove(tod); 495 mMatchedTodos.remove(tod);
496 else if (!mMatchedTodos.contains( tod )) 496 else if (!mMatchedTodos.contains( tod ))
497 mMatchedTodos.append(tod); 497 mMatchedTodos.append(tod);
498 continue; 498 continue;
499 } 499 }
500 } 500 }
501 if ( mSearchAName->isChecked() || mSearchAEmail->isChecked() ) { 501 if ( mSearchAName->isChecked() || mSearchAEmail->isChecked() ) {
502 QPtrList<Attendee> tmpAList = tod->attendees(); 502 QPtrList<Attendee> tmpAList = tod->attendees();
503 Attendee *a; 503 Attendee *a;
504 for (a = tmpAList.first(); a; a = tmpAList.next()) { 504 for (a = tmpAList.first(); a; a = tmpAList.next()) {
505 if (mSearchAName->isChecked()) { 505 if (mSearchAName->isChecked()) {
506#if QT_VERSION >= 0x030000 506#if QT_VERSION >= 0x030000
507 if (re.search(a->name()) != -1) 507 if (re.search(a->name()) != -1)
508#else 508#else
509 if (re.match(a->name()) != -1) 509 if (re.match(a->name()) != -1)
510#endif 510#endif
511 { 511 {
512 if ( mSubItems->isChecked() ) 512 if ( mSubItems->isChecked() )
513 mMatchedTodos.remove(tod); 513 mMatchedTodos.remove(tod);
514 else if (!mMatchedTodos.contains( tod )) 514 else if (!mMatchedTodos.contains( tod ))
515 mMatchedTodos.append(tod); 515 mMatchedTodos.append(tod);
516 break; 516 break;
517 } 517 }
518 } 518 }
519 if (mSearchAEmail->isChecked()) { 519 if (mSearchAEmail->isChecked()) {
520#if QT_VERSION >= 0x030000 520#if QT_VERSION >= 0x030000
521 if (re.search(a->email()) != -1) 521 if (re.search(a->email()) != -1)
522#else 522#else
523 if (re.match(a->email()) != -1) 523 if (re.match(a->email()) != -1)
524#endif 524#endif
525 { 525 {
526 if ( mSubItems->isChecked() ) 526 if ( mSubItems->isChecked() )
527 mMatchedTodos.remove(tod); 527 mMatchedTodos.remove(tod);
528 else if (!mMatchedTodos.contains( tod )) 528 else if (!mMatchedTodos.contains( tod ))
529 mMatchedTodos.append(tod); 529 mMatchedTodos.append(tod);
530 break; 530 break;
531 } 531 }
532 } 532 }
533 } 533 }
534 } 534 }
535 } 535 }
536 } 536 }
537 537
538 QPtrList<Journal> journals = mCalendar->journals( ); 538 QPtrList<Journal> journals = mCalendar->journals( );
539 if ( !mAddItems->isChecked() && !mSubItems->isChecked() ) { 539 if ( !mAddItems->isChecked() && !mSubItems->isChecked() ) {
540 if ( mRefineItems->isChecked() ) journals = mMatchedJournals ; 540 if ( mRefineItems->isChecked() ) journals = mMatchedJournals ;
541 mMatchedJournals.clear(); 541 mMatchedJournals.clear();
542 } 542 }
543 if (mSearchJournal->isChecked() ) { 543 if (mSearchJournal->isChecked() ) {
544 Journal* journ; 544 Journal* journ;
545 545
546 for(journ=journals.first();journ;journ=journals.next()) { 546 for(journ=journals.first();journ;journ=journals.next()) {
547 if ( journ->dtStart().date() <= mEndDate->date() 547 if ( journ->dtStart().date() <= mEndDate->date()
548 &&journ->dtStart().date() >= mStartDate->date()) { 548 &&journ->dtStart().date() >= mStartDate->date()) {
549#if QT_VERSION >= 0x030000 549#if QT_VERSION >= 0x030000
550 if (re.search(journ->description()) != -1) 550 if (re.search(journ->description()) != -1)
551#else 551#else
552 if (re.match(journ->description()) != -1) 552 if (re.match(journ->description()) != -1)
553#endif 553#endif
554 { 554 {
555 if ( mSubItems->isChecked() ) 555 if ( mSubItems->isChecked() )
556 mMatchedJournals.remove(journ); 556 mMatchedJournals.remove(journ);
557 else if (!mMatchedJournals.contains( journ )) 557 else if (!mMatchedJournals.contains( journ ))
558 mMatchedJournals.append(journ); 558 mMatchedJournals.append(journ);
559 continue; 559 continue;
560 } 560 }
561 } 561 }
562 } 562 }
563 } 563 }
564 564 if ( mMatchedEvents.count() + mMatchedJournals.count() + mMatchedTodos.count() < 1 ) {
565 qDebug("count %d ", mMatchedEvents.count() + mMatchedJournals.count() + mMatchedTodos.count() );
566 if ( mRefineItems->isChecked() )
567 mRefineItems->setChecked( false );
568 else if ( mSubItems->isChecked() )
569 mSubItems->setChecked( false );
570 }
565} 571}
566 572
567void SearchDialog::keyPressEvent ( QKeyEvent *e) 573void SearchDialog::keyPressEvent ( QKeyEvent *e)
568{ 574{
569 switch ( e->key() ) { 575 switch ( e->key() ) {
570 case Qt::Key_Escape: 576 case Qt::Key_Escape:
571 close(); 577 close();
572 break; 578 break;
573 case Qt::Key_F: 579 case Qt::Key_F:
574 if ( e->state() == Qt::ControlButton ) { 580 if ( e->state() == Qt::ControlButton ) {
575 581
576 } 582 }
577 break; 583 break;
578 case Qt::Key_Return: 584 case Qt::Key_Return:
579 case Qt::Key_Enter: 585 case Qt::Key_Enter:
580 doSearch(); 586 doSearch();
581 break; 587 break;
582 588
583 default: 589 default:
584 e->ignore(); 590 e->ignore();
585 } 591 }
586} 592}
587 593
588//mMatchedJournals; 594//mMatchedJournals;