summaryrefslogtreecommitdiff
authorzecke <zecke>2004-02-18 22:11:25 (UTC)
committer zecke <zecke>2004-02-18 22:11:25 (UTC)
commit71b6aa6d19ed2e4690cd98ecdb7dbfe40f857653 (patch) (side-by-side diff)
tree2d300c075b052fa1ad7e4814f52256e51fd7d8ba
parent859ad22772e90dfbd4a8c0760ddc52d451f50011 (diff)
downloadopie-71b6aa6d19ed2e4690cd98ecdb7dbfe40f857653.zip
opie-71b6aa6d19ed2e4690cd98ecdb7dbfe40f857653.tar.gz
opie-71b6aa6d19ed2e4690cd98ecdb7dbfe40f857653.tar.bz2
be more clever when it comes to searching events
Fix bug 1193
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/pim/datebook/datebook.cpp35
1 files changed, 14 insertions, 21 deletions
diff --git a/core/pim/datebook/datebook.cpp b/core/pim/datebook/datebook.cpp
index 706cc08..832b2f8 100644
--- a/core/pim/datebook/datebook.cpp
+++ b/core/pim/datebook/datebook.cpp
@@ -173,33 +173,32 @@ DateBook::DateBook( QWidget *parent, const char *, WFlags f )
if(defaultView==MONTH) viewMonth();
connect( qApp, SIGNAL(clockChanged(bool)), this, SLOT(changeClock(bool)) );
connect( qApp, SIGNAL(weekChanged(bool)), this, SLOT(changeWeek(bool)) );
#if defined(Q_WS_QWS) && !defined(QT_NO_COP)
connect( qApp, SIGNAL(appMessage(const QCString&, const QByteArray&)), this, SLOT(appMessage(const QCString&, const QByteArray&)) );
#endif
// listen on QPE/System
#if defined(Q_WS_QWS)
#if !defined(QT_NO_COP)
QCopChannel *channel = new QCopChannel( "QPE/System", this );
connect( channel, SIGNAL(received(const QCString&, const QByteArray&)), this, SLOT(receive(const QCString&, const QByteArray&)) );
channel = new QCopChannel( "QPE/Datebook", this );
connect( channel, SIGNAL(received(const QCString&, const QByteArray&)), this, SLOT(receive(const QCString&, const QByteArray&)) );
- qDebug("olle\n");
#endif
#endif
qDebug("done t=%d", t.elapsed() );
connect( qApp, SIGNAL( flush() ), this, SLOT( flush() ) );
connect( qApp, SIGNAL( reload()), this, SLOT( reload() ) );
/*
* Here is a problem description:
* When Weekview is the default view
* a DateBookWeekView get's created
* redraw() get's called. So what?
* Remember that we're still in the c'tor
* and no final layout has happened? Ok
* now all Events get arranged. Their x
* position get's determined by a QHeader
@@ -396,33 +395,32 @@ void DateBook::viewMonth() {
view(MONTH,currentDate());
}
void DateBook::insertEvent( const Event &e )
{
Event dupEvent=e;
if(!dupEvent.isValidUid() ) // tkcRom seems to be different
dupEvent.assignUid();
dupEvent.setLocation(defaultLocation);
dupEvent.setCategories(defaultCategories);
db->addEvent(dupEvent);
emit newEvent();
}
void DateBook::duplicateEvent( const Event &e )
{
- qWarning("Hmmm...");
// Alot of code duplication, as this is almost like editEvent();
if (syncing) {
QMessageBox::warning( this, tr("Calendar"), tr( "Can not edit data, currently syncing") );
return;
}
Event dupevent(e); // Make a duplicate.
// workaround added for text input.
QDialog editDlg( this, 0, TRUE );
DateEntry *entry;
editDlg.setCaption( tr("Duplicate Event") );
QVBoxLayout *vb = new QVBoxLayout( &editDlg );
QScrollView *sv = new QScrollView( &editDlg, "scrollview" );
sv->setResizePolicy( QScrollView::AutoOneFit );
// KLUDGE!!!
@@ -495,32 +493,33 @@ void DateBook::editEvent( const Event &e )
void DateBook::removeEvent( const Event &e )
{
if (syncing) {
QMessageBox::warning( this, tr("Calendar"), tr( "Can not edit data, currently syncing") );
return;
}
QString strName = e.description();
if ( !QPEMessageBox::confirmDelete( this, tr( "Calendar" ),strName ) )
return;
db->removeEvent( e );
if ( views->visibleWidget() == dayView && dayView )
dayView->redraw();
+
}
void DateBook::addEvent( const Event &e )
{
QDate d = e.start().date();
initDay();
dayView->setDate( d );
}
void DateBook::showDay( int year, int month, int day )
{
QDate d(year, month, day);
view(DAY,d);
}
void DateBook::initDay()
@@ -978,66 +977,62 @@ bool catComp( QArray<int> cats, int category )
}
return returnMe;
}
void DateBook::slotDoFind( const QString& txt, const QDate &dt,
bool caseSensitive, bool /*backwards*/,
int category )
{
QDateTime dtEnd( QDate(3001, 1, 1), QTime(0, 0, 0) ),
next;
QRegExp r( txt );
r.setCaseSensitive( caseSensitive );
- static Event rev,
- nonrev;
+ static Event rev, nonrev;
if ( !inSearch ) {
rev.setStart( QDateTime(QDate(1960, 1, 1), QTime(0, 0, 0)) );
nonrev.setStart( rev.start() );
inSearch = true;
}
static QDate searchDate = dt;
static bool wrapAround = true;
bool candidtate;
candidtate = false;
QValueList<Event> repeats = db->getRawRepeats();
// find the candidate for the first repeat that matches...
QValueListConstIterator<Event> it;
QDate start = dt;
for ( it = repeats.begin(); it != repeats.end(); ++it ) {
if ( catComp( (*it).categories(), category ) ) {
- while ( nextOccurance( *it, start, next ) ) {
- if ( next < dtEnd ) {
- if ( (*it).match( r ) && !(next <= rev.start()) ) {
- rev = *it;
- dtEnd = next;
- rev.setStart( next );
- candidtate = true;
- wrapAround = true;
- start = dt;
- break;
- } else
- start = next.date().addDays( 1 );
- }
- }
- }
+ if ( (*it).match( r ) ) {
+ if ( nextOccurance( *it, start, next ) ) {
+ if ( next < dtEnd && !(next <= rev.start() ) ) {
+ rev = *it;
+ dtEnd = next;
+ rev.setStart( next );
+ candidtate = true;
+ wrapAround = true;
+ }
+ }
+ }
+ }
}
// now the for first non repeat...
QValueList<Event> nonRepeats = db->getNonRepeatingEvents( dt, dtEnd.date() );
qHeapSort( nonRepeats.begin(), nonRepeats.end() );
for ( it = nonRepeats.begin(); it != nonRepeats.end(); ++it ) {
if ( catComp( (*it).categories(), category ) ) {
if ( (*it).start() < dtEnd ) {
if ( (*it).match( r ) && !(*it <= nonrev) ) {
nonrev = *it;
dtEnd = nonrev.start();
candidtate = true;
wrapAround = true;
break;
}
}
@@ -1062,21 +1057,19 @@ Event DateBookDBHack::eventByUID(int uid) {
// FIXME: Dirty Hacks to get hold of the private event lists
QDate start;
QDate end=start.addDays(-1);
QValueList<Event> myEventList=getNonRepeatingEvents(start,end);
QValueList<Event> myRepeatEvents=getRawRepeats();
QValueList<Event>::ConstIterator it;
for (it = myEventList.begin(); it != myEventList.end(); it++) {
if ((*it).uid() == uid) return *it;
}
for (it = myRepeatEvents.begin(); it != myRepeatEvents.end(); it++) {
if ((*it).uid() == uid) return *it;
}
- qDebug("Event not found: uid=%d\n", uid);
Event ev;
return ev; // return at least
}
-