summaryrefslogtreecommitdiffabout
authorzautrix <zautrix>2005-03-26 20:29:59 (UTC)
committer zautrix <zautrix>2005-03-26 20:29:59 (UTC)
commitc9c3f9e65a72a3c79d7f67eba68fca4537004808 (patch) (unidiff)
tree395970dbf2b5aad3cdafe195e7a9958f5cc8aa15
parent36dd498ad2f5a2cf43fc08c621669fe42198e5eb (diff)
downloadkdepimpi-c9c3f9e65a72a3c79d7f67eba68fca4537004808.zip
kdepimpi-c9c3f9e65a72a3c79d7f67eba68fca4537004808.tar.gz
kdepimpi-c9c3f9e65a72a3c79d7f67eba68fca4537004808.tar.bz2
better timer
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--bin/kdepim/korganizer/germantranslation.txt4
-rw-r--r--kalarmd/simplealarmdaemonimpl.cpp108
-rw-r--r--kalarmd/simplealarmdaemonimpl.h35
-rw-r--r--korganizer/koeditorgeneral.cpp1
-rw-r--r--korganizer/searchdialog.cpp5
5 files changed, 135 insertions, 18 deletions
diff --git a/bin/kdepim/korganizer/germantranslation.txt b/bin/kdepim/korganizer/germantranslation.txt
index a8035d4..b6293b5 100644
--- a/bin/kdepim/korganizer/germantranslation.txt
+++ b/bin/kdepim/korganizer/germantranslation.txt
@@ -1300,10 +1300,14 @@
1300{ "As iCal (ics) file...","Als iCal (ics) Datei..." }, 1300{ "As iCal (ics) file...","Als iCal (ics) Datei..." },
1301{ "As vCal (vcs) file...","Als vCal (vcs) Datei..." }, 1301{ "As vCal (vcs) file...","Als vCal (vcs) Datei..." },
1302{ "Journal/Details...","Journale/Details..." }, 1302{ "Journal/Details...","Journale/Details..." },
1303{ "Agenda View","Agenda Ansicht" }, 1303{ "Agenda View","Agenda Ansicht" },
1304{ "Show current time","Zeige aktuelle Zeit" }, 1304{ "Show current time","Zeige aktuelle Zeit" },
1305{ "Edit new item","Bearbeite neuen Eintrag" }, 1305{ "Edit new item","Bearbeite neuen Eintrag" },
1306{ "Please select at least one\nof the types to search for:\n\nEvents\nTodos\nJournals","Bitte wählen Sie mindestens\neinen dieser Typen\num darin zu suchen:\n\nTermine\nTodos\nJournale" },
1307{ "","" },
1308{ "","" },
1309{ "","" },
1306{ "","" }, 1310{ "","" },
1307{ "","" }, 1311{ "","" },
1308{ "","" }, 1312{ "","" },
1309{ "","" }, 1313{ "","" },
diff --git a/kalarmd/simplealarmdaemonimpl.cpp b/kalarmd/simplealarmdaemonimpl.cpp
index 50c4605..ec7f730 100644
--- a/kalarmd/simplealarmdaemonimpl.cpp
+++ b/kalarmd/simplealarmdaemonimpl.cpp
@@ -28,16 +28,20 @@
28#include <qapp.h> 28#include <qapp.h>
29#include <qdir.h> 29#include <qdir.h>
30#include <qfile.h> 30#include <qfile.h>
31#include <qhbox.h> 31#include <qhbox.h>
32#include <qtimer.h> 32#include <qtimer.h>
33#include <qfile.h> 33#include <qfile.h>
34#include <qdatetime.h>
35#include <qpushbutton.h>
34#include <qlayout.h> 36#include <qlayout.h>
35#include <qlineedit.h> 37#include <qlineedit.h>
36#include <qdialog.h> 38#include <qdialog.h>
39#define protected public
37#include <qspinbox.h> 40#include <qspinbox.h>
41#undef protected
38#include <qtextstream.h> 42#include <qtextstream.h>
39#include <qtopia/qcopenvelope_qws.h> 43#include <qtopia/qcopenvelope_qws.h>
40#include <qtopia/alarmserver.h> 44#include <qtopia/alarmserver.h>
41 45
42#include <stdlib.h> 46#include <stdlib.h>
43#include <stdio.h> 47#include <stdio.h>
@@ -60,13 +64,15 @@ SimpleAlarmDaemonImpl::SimpleAlarmDaemonImpl( QWidget *parent )
60 mPopUp->insertItem( "New Event", this, SLOT ( newEvent() ) ); 64 mPopUp->insertItem( "New Event", this, SLOT ( newEvent() ) );
61 mPopUp->insertItem( "New Todo", this, SLOT ( newTodo() ) ); 65 mPopUp->insertItem( "New Todo", this, SLOT ( newTodo() ) );
62 mPopUp->insertItem( "New Mail", this, SLOT ( newMail() ) ); 66 mPopUp->insertItem( "New Mail", this, SLOT ( newMail() ) );
63 mPopUp->insertSeparator(); 67 mPopUp->insertSeparator();
64 mPopUp->insertItem( "Multi Sync", this, SLOT ( ringSync() ) ); 68 mPopUp->insertItem( "Multi Sync", this, SLOT ( ringSync() ) );
65 mTimerPopUp = new QPopupMenu( this ); 69 mTimerPopUp = new QPopupMenu( this );
66 70 QFont fon = mTimerPopUp->font();
71 fon.setPointSize( fon.pointSize() *3/2 );
72 mTimerPopUp->setFont( fon );
67 mBeepPopUp = new QPopupMenu( this ); 73 mBeepPopUp = new QPopupMenu( this );
68 mSoundPopUp = new QPopupMenu( this ); 74 mSoundPopUp = new QPopupMenu( this );
69 mPausePopUp = new QPopupMenu( this ); 75 mPausePopUp = new QPopupMenu( this );
70 QPopupMenu* savePopUp = new QPopupMenu( this ); 76 QPopupMenu* savePopUp = new QPopupMenu( this );
71 savePopUp->insertItem( "Save", 0 ); 77 savePopUp->insertItem( "Save", 0 );
72 savePopUp->insertItem( "Load", 1 ); 78 savePopUp->insertItem( "Load", 1 );
@@ -352,13 +358,13 @@ void SimpleAlarmDaemonImpl::fillTimerPopUp()
352 358
353 // qDebug(" timer %d %d ",mTimerPopupConf, mTimerTime ); 359 // qDebug(" timer %d %d ",mTimerPopupConf, mTimerTime );
354 if ( mTimerPopupConf == mTimerTime ) { 360 if ( mTimerPopupConf == mTimerTime ) {
355 if ( mTimerTime ) { 361 if ( mTimerTime ) {
356 int secs = QDateTime::currentDateTime().secsTo ( mRunningTimer ); 362 int secs = QDateTime::currentDateTime().secsTo ( mRunningTimer );
357 QTime t ( secs/3600, (secs/60)%60, secs%60 ); 363 QTime t ( secs/3600, (secs/60)%60, secs%60 );
358 mTimerPopUp->changeItem ( 1 , t.toString()); 364 mTimerPopUp->changeItem ( 1 , t.toString() + " (remaining time)");
359 } 365 }
360 else { 366 else {
361 QString text = mCustomText.stripWhiteSpace (); 367 QString text = mCustomText.stripWhiteSpace ();
362 int in = text.find( " " ); 368 int in = text.find( " " );
363 text = text.left ( in ); 369 text = text.left ( in );
364 mTimerPopUp->changeItem ( 3, text ); 370 mTimerPopUp->changeItem ( 3, text );
@@ -367,14 +373,17 @@ void SimpleAlarmDaemonImpl::fillTimerPopUp()
367 } 373 }
368 mTimerPopupConf = mTimerTime; 374 mTimerPopupConf = mTimerTime;
369 mTimerPopUp->clear(); 375 mTimerPopUp->clear();
370 if ( mTimerTime ) { 376 if ( mTimerTime ) {
371 int secs = QDateTime::currentDateTime().secsTo ( mRunningTimer ); 377 int secs = QDateTime::currentDateTime().secsTo ( mRunningTimer );
372 QTime t ( secs/3600, (secs/60)%60, secs%60 ); 378 QTime t ( secs/3600, (secs/60)%60, secs%60 );
373 mTimerPopUp->insertItem( "Stop", 0 ); 379
374 mTimerPopUp->insertItem( t.toString(),1); 380
381 mTimerPopUp->insertItem( "Stop timer "+ mRunningTimerText , 0 );
382 mTimerPopUp->insertItem( t.toString() + " (remaining time)",1);
383 mTimerPopUp->insertItem( mRunningTimer.time().toString() + " (alarm time)",2);
375 } else { 384 } else {
376 385
377 QString fileName = QDir::homeDirPath() +"/.kopialarmtimerrc"; 386 QString fileName = QDir::homeDirPath() +"/.kopialarmtimerrc";
378 QFile file( fileName ); 387 QFile file( fileName );
379 if( !QFile::exists( fileName) ) { 388 if( !QFile::exists( fileName) ) {
380 // write defaults 389 // write defaults
@@ -461,19 +470,31 @@ void SimpleAlarmDaemonImpl::confTimer( int time )
461 int minutes = time; 470 int minutes = time;
462 if ( minutes == 0 ) { 471 if ( minutes == 0 ) {
463 if ( ! mTimerTime ) 472 if ( ! mTimerTime )
464 return; 473 return;
465 474
466 QDialog dia ( 0, ("Stop Timer" ), true ); 475 QDialog dia ( 0, ("Stop Timer" ), true );
467 QLabel lab (("Really stop the timer?"), &dia ); 476 QLabel lab (("Really stop the timer?\n\n"+ mRunningTimerText+"\n"), &dia );
477 lab.setAlignment( AlignCenter );
468 dia.setCaption(("KO/Pi Timer Stop" )); 478 dia.setCaption(("KO/Pi Timer Stop" ));
469 QVBoxLayout lay( &dia ); 479 QVBoxLayout lay( &dia );
480 lay.addWidget( &lab);
481 QPushButton ok ( "Stop timer!", &dia);
482 QFont fo = dia.font();
483 fo.setPointSize( 36 );
484 ok.setFont( fo );
485 lay.addWidget( &ok);
486 connect ( &ok, SIGNAL (clicked()), &dia, SLOT ( accept() ) );
487 QPushButton con ( "Continue timer!", &dia);
488 fo.setPointSize( 36 );
489 con.setFont( fo );
490 lay.addWidget( &con);
491 connect ( &con, SIGNAL (clicked()), &dia, SLOT ( reject() ) );
470 lay.setMargin(5); 492 lay.setMargin(5);
471 lay.setSpacing(5); 493 lay.setSpacing(5);
472 lay.addWidget( &lab); 494 dia.resize(dia.sizeHint() );
473 dia.resize( 200, dia.sizeHint().height() );
474 495
475 if ( !dia.exec() ) 496 if ( !dia.exec() )
476 return; 497 return;
477 498
478 AlarmServer::deleteAlarm ( mRunningTimer,"koalarm" , timerMesssage.latin1() ); 499 AlarmServer::deleteAlarm ( mRunningTimer,"koalarm" , timerMesssage.latin1() );
479 mTimerTime = 0; 500 mTimerTime = 0;
@@ -483,21 +504,30 @@ void SimpleAlarmDaemonImpl::confTimer( int time )
483 return; 504 return;
484 if ( minutes == 1 ) { 505 if ( minutes == 1 ) {
485 return; 506 return;
486 } 507 }
487 QString mess = "timer_alarm"; 508 QString mess = "timer_alarm";
488 mess += ("Timer Alarm!\n"); 509 mess += ("Timer Alarm!\n");
489 if ( minutes == 22 ) 510 if ( minutes == 22 ) {
490 mess += ( "Pizza is ready"); 511 mess += ( "Pizza is ready");
491 else if ( minutes == 45 ) 512 mRunningTimerText = "Pizza";
513 }
514 else if ( minutes == 45 ) {
492 mess += ( "Please wake up!"); 515 mess += ( "Please wake up!");
493 else if ( minutes == 5 ) 516 mRunningTimerText = "Nap";
517 }
518 else if ( minutes == 5 ) {
494 mess += ( "Tea is ready"); 519 mess += ( "Tea is ready");
520 mRunningTimerText = "Tea";
521 }
495 else if ( minutes == 3 ) { 522 else if ( minutes == 3 ) {
496 mess += mCustomText; 523 mess += mCustomText;
497 minutes = mCustomMinutes ; 524 minutes = mCustomMinutes ;
525 mRunningTimerText = mCustomText.stripWhiteSpace ();
526 int in = mRunningTimerText.find( " " );
527 mRunningTimerText = mRunningTimerText.left ( in );
498 } 528 }
499 else { 529 else {
500 if ( minutes == 2 ) { 530 if ( minutes == 2 ) {
501 // ask time 531 // ask time
502 QDialog dia ( 0, ("Customize Timer" ), true ); 532 QDialog dia ( 0, ("Customize Timer" ), true );
503 QLabel lab (("Message Text:"), &dia ); 533 QLabel lab (("Message Text:"), &dia );
@@ -507,34 +537,78 @@ void SimpleAlarmDaemonImpl::confTimer( int time )
507 lay.setSpacing(5); 537 lay.setSpacing(5);
508 lay.addWidget( &lab); 538 lay.addWidget( &lab);
509 QLineEdit lEdit( mCustomText, &dia ); 539 QLineEdit lEdit( mCustomText, &dia );
510 lay.addWidget( &lEdit); 540 lay.addWidget( &lEdit);
511 QLabel lab2 (("Countdown time (1 min - 24 h):"), &dia ); 541 QLabel lab2 (("Countdown time (1 min - 24 h):"), &dia );
512 lay.addWidget( &lab2); 542 lay.addWidget( &lab2);
543 QHBox hbox1 ( &dia );
544 lay.addWidget( &hbox1);
545 QLabel lab3 (("Hours"), &hbox1 );
546 QLabel lab4 (("Minutes"), &hbox1 );
513 QHBox hbox ( &dia ); 547 QHBox hbox ( &dia );
514 QLabel lab3 (("h:"), &hbox );
515 QSpinBox spinh( 0, 24, 1,& hbox ); 548 QSpinBox spinh( 0, 24, 1,& hbox );
516 QLabel lab4 ((" min:"), &hbox ); 549 QFont fo = dia.font();
550 fo.setPointSize( 36 );
517 QSpinBox spinm( 0, 59, 1,&hbox ); 551 QSpinBox spinm( 0, 59, 1,&hbox );
552 spinm.setFont( fo );
553 spinh.setFont( fo );
554 spinh.setButtonSymbols( QSpinBox::PlusMinus );
555 spinm.setButtonSymbols( QSpinBox::PlusMinus );
556 spinh.upButton ()->setFixedSize( QSize( 48, 30 ));
557 spinh.downButton ()->setFixedSize( QSize( 48, 30 ));
558 //spinh.editor ()->setFixedSize( QSize( 50, 100 ));
559 spinh.setFixedSize( 100,62 );
560 spinm.upButton ()->setFixedSize( QSize( 48, 30 ));
561 spinm.downButton ()->setFixedSize( QSize( 48, 30 ));
562 spinm.downButton ()->setGeometry( 50,50,50,50);
563 spinm.setSuffix( " m" );
564 spinh.setSuffix( " h" );
565 spinm.setWrapping ( true );
566 //spinm.editor ()->setFixedSize( QSize( 50, 100 ));
567 spinm.setLineStep( 1 );
568 spinm.setFixedSize( 110,62 );
569 lay.addWidget( &hbox);
570 QLabel lab5 ("Timer fires at:", &dia );
571 lab5.setAlignment( AlignCenter );
572 lay.addWidget( &lab5);
573 KODateLabel dl ( &dia );
574 dl.setAlignment( AlignCenter );
575 dl.setFont( fo );
576 connect ( &spinh, SIGNAL ( valueChanged (int)), &dl, SLOT ( slot_hours( int ) ) );
577 connect ( &spinm, SIGNAL ( valueChanged (int)), &dl, SLOT ( slot_minutes( int ) ) );
578 lay.addWidget( &dl);
518 spinh.setValue( mCustomMinutes/60 ); 579 spinh.setValue( mCustomMinutes/60 );
519 spinm.setValue( mCustomMinutes%60 ); 580 spinm.setValue( mCustomMinutes%60 );
520 lay.addWidget( &hbox); 581 QPushButton ok ( "Start timer", &dia);
582 ok.setFont( fo );
583 lay.addWidget( &ok);
584 connect ( &ok, SIGNAL (clicked()), &dia, SLOT ( accept() ) );
521 dia.resize( dia.sizeHint().width(), dia.sizeHint().height() ); 585 dia.resize( dia.sizeHint().width(), dia.sizeHint().height() );
586
522 if ( !dia.exec() ) 587 if ( !dia.exec() )
523 return; 588 return;
524 mCustomText = lEdit.text(); 589 mCustomText = lEdit.text();
525 mCustomMinutes = spinh.value()*60+spinm.value(); 590 mCustomMinutes = spinh.value()*60+spinm.value();
526 if ( mCustomMinutes == 0 ) 591 if ( mCustomMinutes == 0 )
527 mCustomMinutes = 1; 592 mCustomMinutes = 1;
528 if ( mCustomMinutes > 1440 ) 593 if ( mCustomMinutes > 1440 )
529 mCustomMinutes = 1440; 594 mCustomMinutes = 1440;
530 mess += mCustomText; 595 mess += mCustomText;
531 minutes = mCustomMinutes; 596 minutes = mCustomMinutes;
597 mRunningTimerText = mCustomText.stripWhiteSpace ();
598 int in = mRunningTimerText.find( " " );
599 mRunningTimerText = mRunningTimerText.left ( in );
532 } 600 }
533 else 601 else {
534 mess+= QString::number ( minutes ) + ( " minutes are past!"); 602 mess+= QString::number ( minutes ) + ( " minutes are past!");
603 int min = minutes;
604 if ( min % 60 == 0 )
605 mRunningTimerText = QString::number ( min/60 ) + ( " hours");
606 else
607 mRunningTimerText = QString::number ( minutes ) + ( " minutes");
608 }
535 } 609 }
536 //minutes = 1; 610 //minutes = 1;
537 mRunningTimer = QDateTime::currentDateTime().addSecs( minutes * 60 ); 611 mRunningTimer = QDateTime::currentDateTime().addSecs( minutes * 60 );
538 timerMesssage = mess; 612 timerMesssage = mess;
539 AlarmServer::addAlarm ( mRunningTimer,"koalarm",timerMesssage.latin1()); 613 AlarmServer::addAlarm ( mRunningTimer,"koalarm",timerMesssage.latin1());
540 mTimerTime = 1; 614 mTimerTime = 1;
diff --git a/kalarmd/simplealarmdaemonimpl.h b/kalarmd/simplealarmdaemonimpl.h
index 32a3867..cbdba47 100644
--- a/kalarmd/simplealarmdaemonimpl.h
+++ b/kalarmd/simplealarmdaemonimpl.h
@@ -23,12 +23,13 @@
23#ifndef SIMPLEALARMDAEMONIMPL_H 23#ifndef SIMPLEALARMDAEMONIMPL_H
24#define SIMPLEALARMDAEMONIMPL_H 24#define SIMPLEALARMDAEMONIMPL_H
25 25
26//#include "simplealarmdaemon.h" 26//#include "simplealarmdaemon.h"
27#include <qdatetime.h> 27#include <qdatetime.h>
28#include <qlabel.h> 28#include <qlabel.h>
29#include <qtimer.h>
29 30
30class QLabel; 31class QLabel;
31class QTimer; 32class QTimer;
32class QPopupMenu; 33class QPopupMenu;
33class AlarmDialog; 34class AlarmDialog;
34class SimpleAlarmDaemonImpl : public QLabel 35class SimpleAlarmDaemonImpl : public QLabel
@@ -75,12 +76,44 @@ class SimpleAlarmDaemonImpl : public QLabel
75 int getFileNameLen( QString ); 76 int getFileNameLen( QString );
76 QPopupMenu* mPopUp, *mBeepPopUp, *mTimerPopUp, *mSoundPopUp,*mPausePopUp,*mSuspendPopUp; 77 QPopupMenu* mPopUp, *mBeepPopUp, *mTimerPopUp, *mSoundPopUp,*mPausePopUp,*mSuspendPopUp;
77 QDateTime mRunningTimer; 78 QDateTime mRunningTimer;
78 void fillTimerPopUp(); 79 void fillTimerPopUp();
79 QString timerMesssage; 80 QString timerMesssage;
80 QString mCustomText; 81 QString mCustomText;
82 QString mRunningTimerText;
81 int mCustomMinutes; 83 int mCustomMinutes;
82 int mTimerPopupConf; 84 int mTimerPopupConf;
83 bool wavAlarm; 85 bool wavAlarm;
84}; 86};
85 87class KODateLabel : public QLabel
88{
89 Q_OBJECT
90 public:
91 KODateLabel( QWidget *parent=0, const char *name=0 ) :
92 QLabel( parent, name )
93 {
94 hour = 0;
95 minutes = 0;
96 QTimer * ti = new QTimer( this );
97 connect ( ti, SIGNAL ( timeout () ), this, SLOT ( updateText() ));
98 ti->start( 1000 );
99
100 }
101public slots:
102 void slot_minutes( int m )
103 {
104 minutes = m; updateText();
105 }
106 void slot_hours( int h )
107 {
108 hour = h; updateText();
109 }
110private slots:
111 void updateText()
112 {
113 QDateTime dt = QDateTime::currentDateTime();
114 dt = dt.addSecs( minutes * 60 + hour * 3600 );
115 setText( dt.time().toString() );
116 }
117 int hour, minutes;
118};
86#endif 119#endif
diff --git a/korganizer/koeditorgeneral.cpp b/korganizer/koeditorgeneral.cpp
index 92fcd1c..b14ca43 100644
--- a/korganizer/koeditorgeneral.cpp
+++ b/korganizer/koeditorgeneral.cpp
@@ -182,12 +182,13 @@ void KOEditorGeneral::initAlarm(QWidget *parent,QBoxLayout *topLayout)
182 mAlarmButton = new QCheckBox(i18n("Reminder:"),parent); 182 mAlarmButton = new QCheckBox(i18n("Reminder:"),parent);
183 183
184 connect(mAlarmButton, SIGNAL(toggled(bool)), SLOT(enableAlarmEdit(bool))); 184 connect(mAlarmButton, SIGNAL(toggled(bool)), SLOT(enableAlarmEdit(bool)));
185 alarmLayout->addWidget(mAlarmButton); 185 alarmLayout->addWidget(mAlarmButton);
186 186
187 mAlarmTimeEdit = new QSpinBox ( 0, 9999, 1, parent, "mAlarmTimeEdit " ) ; 187 mAlarmTimeEdit = new QSpinBox ( 0, 9999, 1, parent, "mAlarmTimeEdit " ) ;
188 mAlarmTimeEdit->setButtonSymbols( QSpinBox::PlusMinus );
188 alarmLayout->addWidget(mAlarmTimeEdit); 189 alarmLayout->addWidget(mAlarmTimeEdit);
189 mAlarmIncrCombo = new QComboBox(false, parent); 190 mAlarmIncrCombo = new QComboBox(false, parent);
190 if ( QApplication::desktop()->width() < 320 ) { 191 if ( QApplication::desktop()->width() < 320 ) {
191 mAlarmIncrCombo->insertItem(i18n("min")); 192 mAlarmIncrCombo->insertItem(i18n("min"));
192 mAlarmIncrCombo->insertItem(i18n("hou")); 193 mAlarmIncrCombo->insertItem(i18n("hou"));
193 mAlarmIncrCombo->insertItem(i18n("day")); 194 mAlarmIncrCombo->insertItem(i18n("day"));
diff --git a/korganizer/searchdialog.cpp b/korganizer/searchdialog.cpp
index 678e1bd..341a839 100644
--- a/korganizer/searchdialog.cpp
+++ b/korganizer/searchdialog.cpp
@@ -161,12 +161,17 @@ void SearchDialog::doSearch()
161{ 161{
162 QRegExp re; 162 QRegExp re;
163 163
164 re.setWildcard(true); // most people understand these better. 164 re.setWildcard(true); // most people understand these better.
165 re.setCaseSensitive(false); 165 re.setCaseSensitive(false);
166 re.setPattern(searchEdit->text()); 166 re.setPattern(searchEdit->text());
167 if (!mSearchEvent->isChecked() && !mSearchTodo->isChecked() && !mSearchJournal->isChecked() ) {
168 KMessageBox::sorry(this,
169 i18n("Please select at least one\nof the types to search for:\n\nEvents\nTodos\nJournals"));
170 return;
171 }
167 if (!re.isValid() ) { 172 if (!re.isValid() ) {
168 KMessageBox::sorry(this, 173 KMessageBox::sorry(this,
169 i18n("Invalid search expression,\ncannot perform " 174 i18n("Invalid search expression,\ncannot perform "
170 "the search.\nPlease enter a search expression\n" 175 "the search.\nPlease enter a search expression\n"
171 "using the wildcard characters\n '*' and '?'" 176 "using the wildcard characters\n '*' and '?'"
172 "where needed.")); 177 "where needed."));