⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 datebookdb.cpp

📁 Trolltech公司发布的图形界面操作系统。可在qt-embedded-2.3.7平台上编译为嵌入式图形界面操作系统。
💻 CPP
📖 第 1 页 / 共 3 页
字号:
    int warn;    if ( nextAlarm(ev,when,warn) )	AlarmServer::addAlarm( when,			       "QPE/Application/datebook",			       "alarm(QDateTime,int)", warn );}static void delEventAlarm( const Event &ev ){    QDateTime when;    int warn;    if ( nextAlarm(ev,when,warn) )	AlarmServer::deleteAlarm( when,				  "QPE/Application/datebook",				  "alarm(QDateTime,int)", warn );}DateBookDB::DateBookDB(){    init();}DateBookDB::~DateBookDB(){    save();    eventList.clear();    repeatEvents.clear();}//#### Why is this code duplicated in getEffectiveEvents ?????//#### Addendum.  Don't use this function, lets faze it out if we can./* obsolete */QValueList<Event> DateBookDB::getEvents( const QDate &from, const QDate &to ){    QValueList<Event> tmpList;    tmpList = getNonRepeatingEvents( from, to );    // check for repeating events...    for (QValueList<Event>::ConstIterator it = repeatEvents.begin();	 it != repeatEvents.end(); ++it) {	QDate itDate = from;	QDateTime due;	/* create a false end date, to short circuit on hard	   MonthlyDay recurences */	Event dummy_event = *it;	Event::RepeatPattern r = dummy_event.repeatPattern();	if ( !r.hasEndDate || r.endDate() > to ) {	    r.setEndDate( to );	    r.hasEndDate = TRUE;	}	dummy_event.setRepeat(TRUE, r);	while (nextOccurance(dummy_event, itDate, due)) {	    if (due.date() > to)		break;	    Event newEvent = *it;	    newEvent.setStart(due);	    newEvent.setEnd(due.addSecs((*it).start().secsTo((*it).end())));	    tmpList.append(newEvent);	    itDate = due.date().addDays(1);  /* the next event */	}    }    qHeapSort(tmpList);    return tmpList;}QValueList<Event> DateBookDB::getEvents( const QDateTime &start ){    QValueList<Event> day = getEvents(start.date(),start.date());    QValueListConstIterator<Event> it;    QDateTime dtTmp;    QValueList<Event> tmpList;    for (it = day.begin(); it != day.end(); ++it ) {        dtTmp = (*it).start(TRUE);        if ( dtTmp == start )            tmpList.append( *it );    }    return tmpList;}//#### Why is this code duplicated in getEvents ?????QValueList<EffectiveEvent> DateBookDB::getEffectiveEvents( const QDate &from,							   const QDate &to ){    QValueList<EffectiveEvent> tmpList;    QValueListIterator<Event> it;    EffectiveEvent effEv;    QDateTime dtTmp,	      dtEnd;    for (it = eventList.begin(); it != eventList.end(); ++it ) {	// next to lines are a cover against possible invalid Uids.	if (!(*it).isValidUid())	    (*it).assignUid();        dtTmp = (*it).start(TRUE);	dtEnd = (*it).end(TRUE);        if ( dtTmp.date() >= from && dtTmp.date() <= to ) {	    Event tmpEv = *it;	    effEv.setEvent(tmpEv);	    effEv.setDate( dtTmp.date() );	    effEv.setStart( dtTmp.time() );	    if ( dtTmp.date() != dtEnd.date() )		effEv.setEnd( QTime(23, 59, 0) );	    else		effEv.setEnd( dtEnd.time() );            tmpList.append( effEv );	}	// we must also check for end date information...	if ( dtEnd.date() != dtTmp.date() && dtEnd.date() >= from ) {	    QDateTime dt = dtTmp.addDays( 1 );	    dt.setTime( QTime(0, 0, 0) );	    QDateTime dtStop;	    if ( dtEnd > to ) {		dtStop = to;	    } else		dtStop = dtEnd;	    while ( dt <= dtStop ) {		Event tmpEv = *it;		effEv.setEvent( tmpEv );		effEv.setDate( dt.date() );		if ( dt >= from ) {		    effEv.setStart( QTime(0, 0, 0) );		    if ( dt.date() == dtEnd.date() )			effEv.setEnd( dtEnd.time() );		    else			effEv.setEnd( QTime(23, 59, 59) );		    tmpList.append( effEv );		}		dt = dt.addDays( 1 );	    }	}    }    // check for repeating events...    QDateTime repeat;    for ( it = repeatEvents.begin(); it != repeatEvents.end(); ++it ) {	// next to lines are a cover against possible invalid Uids.	if (!(*it).isValidUid())	    (*it).assignUid();	/* create a false end date, to short circuit on hard	   MonthlyDay recurences */	Event dummy_event = *it;	int duration = (*it).start().date().daysTo( (*it).end().date() );	QDate itDate = from.addDays(-duration);	Event::RepeatPattern r = dummy_event.repeatPattern();	if ( !r.hasEndDate || r.endDate() > to ) {	    r.setEndDate( to );	    r.hasEndDate = TRUE;	}	dummy_event.setRepeat(TRUE, r);	while (nextOccurance(dummy_event, itDate, repeat)) {	    if(repeat.date() > to)		break;	    effEv.setDate( repeat.date() );	    if ((*it).type() == Event::AllDay) {		effEv.setStart( QTime(0,0,0) );		effEv.setEnd( QTime(23,59,59) );	    } else {		/* we only occur by days, not hours/minutes/seconds.  Hence		   the actual end and start times will be the same for		   every repeated event.  For multi day events this is		   fixed up later if on wronge day span */		effEv.setStart( (*it).start().time() );		effEv.setEnd( (*it).end().time() );	    }	    if ( duration != 0 ) {		// multi-day repeating events		QDate sub_it = QMAX( repeat.date(), from );		QDate startDate = repeat.date();		QDate endDate = startDate.addDays( duration );		while ( sub_it <= endDate && sub_it  <= to ) {		    EffectiveEvent tmpEffEv = effEv;		    Event tmpEv = *it;		    tmpEffEv.setEvent( tmpEv );		    if ( sub_it != startDate )			tmpEffEv.setStart( QTime(0,0,0) );		    if ( sub_it != endDate )			tmpEffEv.setEnd( QTime(23,59,59) );		    tmpEffEv.setDate( sub_it );		    tmpEffEv.setEffectiveDates( startDate, endDate );		    tmpList.append( tmpEffEv );		    sub_it = sub_it.addDays( 1 );		}		itDate = endDate;	    } else {		Event tmpEv = *it;		effEv.setEvent( tmpEv );		tmpList.append( effEv );		itDate = repeat.date().addDays( 1 );	    }	}    }    qHeapSort( tmpList );    return tmpList;}QValueList<EffectiveEvent> DateBookDB::getEffectiveEvents( const QDateTime &dt){    QValueList<EffectiveEvent> day = getEffectiveEvents(dt.date(), dt.date());    QValueListConstIterator<EffectiveEvent> it;    QValueList<EffectiveEvent> tmpList;    QDateTime dtTmp;    for (it = day.begin(); it != day.end(); ++it ) {        dtTmp = QDateTime( (*it).date(), (*it).start() );	// at the moment we don't have second granularity, be nice about that..        if ( QABS(dt.secsTo(dtTmp)) < 60 )            tmpList.append( *it );    }    return tmpList;}void DateBookDB::addEvent( const Event &ev, bool doalarm ){    // write to the journal...    saveJournalEntry( ev, ACTION_ADD, -1, false );    addJFEvent( ev, doalarm );    d->clean = false;}void DateBookDB::addJFEvent( const Event &ev, bool doalarm ){    if ( doalarm && ev.hasAlarm() )	addEventAlarm( ev );    if ( ev.hasRepeat() )	repeatEvents.append( ev );    else	eventList.append( ev );}void DateBookDB::editEvent( const Event &old, Event &editedEv ){    int oldIndex=0;    bool oldHadRepeat = old.hasRepeat();    Event orig;    // write to the journal...    if ( oldHadRepeat ) {	if ( origRepeat( old, orig ) ) // should work always...	    oldIndex = repeatEvents.findIndex( orig );    } else	oldIndex = eventList.findIndex( old );    saveJournalEntry( editedEv, ACTION_REPLACE, oldIndex, oldHadRepeat );    if ( old.hasAlarm() )	delEventAlarm( old );    if ( oldHadRepeat ) {	if ( editedEv.hasRepeat() ) {	    // assumption, when someone edits a repeating event, they	    // want to change them all, maybe not perfect, but it works	    // for the moment...	    repeatEvents.remove( orig );	} else	    removeRepeat( old );    } else {	QValueList<Event>::Iterator it = eventList.find( old );	if ( it != eventList.end() )	    eventList.remove( it );    }    if ( editedEv.hasAlarm() )	addEventAlarm( editedEv );    if ( editedEv.hasRepeat() )	repeatEvents.append( editedEv );    else	eventList.append( editedEv );    d->clean = false;}void DateBookDB::removeEvent( const Event &ev ){    // write to the journal...    saveJournalEntry( ev, ACTION_REMOVE, -1, false );    removeJFEvent( ev );    d->clean = false;}void DateBookDB::removeJFEvent( const Event&ev ){    if ( ev.hasAlarm() )	delEventAlarm( ev );    if ( ev.hasRepeat() ) {	removeRepeat( ev );    } else {	QValueList<Event>::Iterator it = eventList.find( ev );	if ( it != eventList.end() )	    eventList.remove( it );    }}// also handles journaling...void DateBookDB::loadFile( const QString &strFile ){        QFile f( strFile );    if ( !f.open( IO_ReadOnly ) )	return;    enum Attribute {	FDescription = 0,	FLocation,	FCategories,	FUid,	FType,	FAlarm,	FSound,	FRType,	FRWeekdays,	FRPosition,	FRFreq,	FRHasEndDate,	FREndDate,	FRStart,	FREnd,	FNote,	FCreated,	FAction,	FActionKey,	FJournalOrigHadRepeat    };    QAsciiDict<int> dict( 97 );    dict.setAutoDelete( TRUE );    dict.insert( "description", new int(FDescription) ); // No tr    dict.insert( "location", new int(FLocation) ); // No tr    dict.insert( "categories", new int(FCategories) ); // No tr    dict.insert( "uid", new int(FUid) );    dict.insert( "type", new int(FType) ); // No tr    dict.insert( "alarm", new int(FAlarm) ); // No tr    dict.insert( "sound", new int(FSound) ); // No tr    dict.insert( "rtype", new int(FRType) );    dict.insert( "rweekdays", new int(FRWeekdays) );    dict.insert( "rposition", new int(FRPosition) );    dict.insert( "rfreq", new int(FRFreq) );    dict.insert( "rhasenddate", new int(FRHasEndDate) );    dict.insert( "enddt", new int(FREndDate) );    dict.insert( "start", new int(FRStart) ); // No tr    dict.insert( "end", new int(FREnd) ); // No tr    dict.insert( "note", new int(FNote) ); // No tr    dict.insert( "created", new int(FCreated) ); // No tr    dict.insert( "action", new int(FAction) ); // No tr    dict.insert( "actionkey", new int(FActionKey) );    dict.insert( "actionorig", new int (FJournalOrigHadRepeat) );        QByteArray ba = f.readAll();    char* dt = ba.data();    if ( !dt )	return;    int len = ba.size();    int currentAction,	journalKey,	origHadRepeat;  // should be bool, but we need tri-state(not being used)    int i = 0;    char *point;    while ( (dt+i !=0) && (( point = strstr( dt+i, "<event " ) ) != 0 )) { // No tr	i = point - dt;	// if we are reading in events in the general case,	// we are just adding them, so let the actions represent that...	currentAction = ACTION_ADD;	journalKey = -1;	origHadRepeat = -1;	// some temporary variables for dates and times ...	//int startY = 0, startM = 0, startD = 0, starth = 0, startm = 0, starts = 0;	//int endY = 0, endM = 0, endD = 0, endh = 0, endm = 0, ends = 0;	//int enddtY = 0, enddtM = 0, enddtD = 0;	// ... for the alarm settings ...	int alarmTime = -1; Event::SoundTypeChoice alarmSound = Event::Silent;	// ... and for the recurrence	Event::RepeatPattern rp;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -