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

📄 eventxmlio.cpp

📁 Trolltech公司发布的图形界面操作系统。可在qt-embedded-2.3.10平台上编译为嵌入式图形界面操作系统。
💻 CPP
📖 第 1 页 / 共 2 页
字号:
}Occurrence EventXmlIO::getNextOccurrenceInCurrentTZ( const QDateTime& from,                                                      bool * ok ) const{    if( ok ) *ok = false;    bool closestOccurValid = false;    Occurrence closestOccur;    for( QListIterator<PrEvent> iter = m_PrEvents; iter.current(); ++iter ) {        PrEvent e(*(iter.current()));        bool ocok = false;        QDate date = e.nextOccurrence( from.date(), &ocok );        if( ocok ) {            Occurrence o(date, e);            if( o.startInCurrentTZ() >= from ) {                if( false == closestOccurValid ||                    o.startInCurrentTZ() < closestOccur.startInCurrentTZ() ||                    (o.startInCurrentTZ() == closestOccur.startInCurrentTZ() &&                     o.event().uid().toString() <                      closestOccur.event().uid().toString()) ) {                    closestOccur = o;                    closestOccurValid = true;                }            }        }    }    if( ok ) *ok = closestOccurValid;    return closestOccur;}Occurrence EventXmlIO::getNextOccurrenceInCurrentTZ( const Occurrence& from,                                                      bool * ok ) const{    if( ok ) *ok = false;    bool closestOccurValid = false;    Occurrence closestOccur;    for( QListIterator<PrEvent> iter = m_PrEvents; iter.current(); ++iter ) {        PrEvent e(*(iter.current()));        bool ocok = false;        QDate date = e.nextOccurrence( from.date(), &ocok );        if( ocok ) {            Occurrence o(date, e);                        if( o.startInCurrentTZ() == from.startInCurrentTZ() &&                 o.event().uid().toString() <= from.event().uid().toString() )                 continue;            if( o.startInCurrentTZ() >= from.startInCurrentTZ() &&                (false == closestOccurValid ||                  o.startInCurrentTZ() < closestOccur.startInCurrentTZ()) ) {                closestOccur = o;                closestOccurValid = true;            }        }    }    if( ok ) *ok = closestOccurValid;    return closestOccur;}QUuid EventXmlIO::addEvent(const PimEvent &event, bool assignUid ){    QUuid u;    if (accessMode() == ReadOnly)	return u;    // Don't add events that will never occur.    if (!event.isValid())	return u;    ensureDataCurrent();    PrEvent *ev = new PrEvent((const PrEvent &)event);    if ( assignUid || ev->uid().isNull() )	assignNewUid(ev);    u = ev->uid();    if (internalAddRecord(ev)) {	needsSave = TRUE;	if (ev->hasAlarm())	    addEventAlarm(*ev);	updateJournal(*ev, ACTION_ADD);	{#ifndef QT_NO_COP	    QCopEnvelope e("QPE/PIM", "addedEvent(int,PimEvent)");	    e << getpid();	    e << *ev;#endif	}    }    return u;}void EventXmlIO::addException(const QDate &d, const PimEvent &p){    if (accessMode() == ReadOnly)	return;    ensureDataCurrent();    PrEvent parent((const PrEvent &)p);    parent.addException(d);    // don't add empty uid to parent.    parent.addChildUid(QUuid());    if (!parent.isValid()) {	// apperently this is really a delete of the event.	removeEvent(p);	return;    }    if (internalUpdateRecord(new PrEvent(parent))) {	needsSave = TRUE;	updateJournal(parent, ACTION_REPLACE);#ifndef QT_NO_COP	{	    QCopEnvelope e("QPE/PIM", "updatedEvent(int,PimEvent)");	    e << getpid();	    e << parent;	}#endif    }}QUuid EventXmlIO::addException(const QDate &d, const PimEvent &p, const PimEvent& event){    QUuid u;    if (accessMode() == ReadOnly)	return u;    ensureDataCurrent();    // don't need to check is valid as can't disapear by adding an exception.    PrEvent parent((const PrEvent &)p);    PrEvent *ev = new PrEvent((const PrEvent &)event);    assignNewUid(ev);    u = ev->uid();    ev->setParentUid(parent.uid());    parent.addException(d);    parent.addChildUid(ev->uid());    if (internalAddRecord(ev) && internalUpdateRecord(new PrEvent(parent))) {	needsSave = TRUE;	if (ev->hasAlarm())	    addEventAlarm(*ev);	updateJournal(*ev, ACTION_ADD);	updateJournal(parent, ACTION_REPLACE);#ifndef QT_NO_COP	{	    QCopEnvelope e("QPE/PIM", "addedEvent(int,PimEvent)");	    e << getpid();	    e << *ev;	}	{	    QCopEnvelope e("QPE/PIM", "updatedEvent(int,PimEvent)");	    e << getpid();	    e << parent;	}#endif    }    return u;}void EventXmlIO::removeEvent(const PimEvent &event){    if (accessMode() == ReadOnly)	return;    ensureDataCurrent();    // in case parent becomes invalid.    PimEvent parent;    PrEvent *ev = new PrEvent((const PrEvent &)event);    if (event.isException()) {	for (m_PrEvents.first(); m_PrEvents.current(); m_PrEvents.next()) {	    if (m_PrEvents.current()->uid() == ev->seriesUid()) {		QValueList<QDate>::ConstIterator eit = m_PrEvents.current()->exceptions().begin();		QValueList<QUuid>::ConstIterator cit = m_PrEvents.current()->childUids().begin();		QDate tdate;		for(; eit != m_PrEvents.current()->exceptions().end() && cit != m_PrEvents.current()->childUids().end();			++eit, ++cit)		{		    if (*cit == ev->uid()) {			tdate = *eit;		    }		}		m_PrEvents.current()->removeException(ev->uid());		m_PrEvents.current()->PimEvent::addException(tdate, QUuid());		if (!m_PrEvents.current()->isValid()) {		    parent = *(m_PrEvents.current());		}	    }	}    }    for (m_PrEvents.first(); m_PrEvents.current(); m_PrEvents.next()) {	if (m_PrEvents.current()->uid() == ev->uid()) {	    if (m_PrEvents.current()->hasAlarm())		delEventAlarm(*(m_PrEvents.current()));	}    }    if (internalRemoveRecord(ev)) {	needsSave = TRUE;	updateJournal(event, ACTION_REMOVE);	{#ifndef QT_NO_COP	    QCopEnvelope e("QPE/PIM", "removedEvent(int,PimEvent)");	    e << getpid();	    e << event;#endif	}    }    if (!parent.uid().isNull()) {	// parent is invalid,	removeEvent(parent);    }}void EventXmlIO::updateEvent(const PimEvent &event){    if (accessMode() == ReadOnly)	return;    ensureDataCurrent();    if (!event.isValid()) {	// really a remove.	removeEvent(event);	return;    }    PrEvent *ev = new PrEvent((const PrEvent&)event);        for (m_PrEvents.first(); m_PrEvents.current(); m_PrEvents.next()) {	if (m_PrEvents.current()->uid() == ev->uid()) {	    if (m_PrEvents.current()->hasAlarm())		delEventAlarm(*(m_PrEvents.current()));	}    }    if (internalUpdateRecord(ev)) {	needsSave = TRUE;	if (event.hasAlarm())	    addEventAlarm((const PrEvent &)event);	updateJournal(event, ACTION_REPLACE);	{#ifndef QT_NO_COP	    QCopEnvelope e("QPE/PIM", "updatedEvent(int,PimEvent)");	    e << getpid();	    e << event;#endif	}    }}void EventXmlIO::ensureDataCurrent(bool forceReload){    if (accessMode() == WriteOnly || ( isDataCurrent() && !forceReload) )	return;    // get rid of all events first    QListIterator<PrEvent> it(m_PrEvents);    for ( ; it.current(); ++it ) {	if ( it.current()->hasAlarm() )	    delEventAlarm( *(it.current()) );    }    m_PrEvents.clear();    loadData();}bool EventXmlIO::nextAlarm( const PrEvent &ev, QDateTime& when, int& warn){    QDateTime now = QDateTime::currentDateTime();    bool ok;    warn = ev.alarmDelay();    // -1 days to make room for timezone shift.    QDate next = ev.nextOccurrence(now.date().addDays(-1), &ok);    while (ok) {	Occurrence o(next, ev);	// only need to check in TZ... want to shift in orig time	if (now <= o.startInCurrentTZ().addSecs(-60*ev.alarmDelay())) {	    when = o.startInCurrentTZ().addSecs(-60*ev.alarmDelay());	    return TRUE;	}	next = ev.nextOccurrence(		next.addDays(ev.start().daysTo(ev.end()) + 1), &ok);    }    return FALSE;}void EventXmlIO::addEventAlarm(const PrEvent &ev){#ifdef Q_WS_QWS    QDateTime when;    int warn;    if (nextAlarm(ev, when, warn)) {	AlarmServer::addAlarm(when, "QPE/Application/datebook",		"alarm(QDateTime,int)", warn);    }#else    Q_UNUSED( ev );#endif}void EventXmlIO::delEventAlarm(const PrEvent &ev){#ifdef Q_WS_QWS    QDateTime when;    int warn;    if ( nextAlarm(ev,when,warn) ) {	AlarmServer::deleteAlarm( when, "QPE/Application/datebook",		"alarm(QDateTime,int)", warn);    }#else    Q_UNUSED( ev );#endif}

⌨️ 快捷键说明

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