How to get Alarms list in Qt Maemo application
jimgilmour1
(Talk | contribs) m (minor spelling) |
|||
| Line 59: | Line 59: | ||
for (iter = list; *iter != (cookie_t) 0; iter++) | for (iter = list; *iter != (cookie_t) 0; iter++) | ||
{ | { | ||
| − | + | // get alarm event by it's cookie | |
| − | + | alarm_event_t * aevent = alarmd_event_get (*iter); | |
| − | + | // check alarm recurrence | |
| − | + | int recur = alarm_event_is_recurring (aevent); | |
| − | + | // get time of alarm action | |
| − | + | time_t ttime = alarm_event_get_trigger(aevent); | |
| − | + | // convert GTK's ttime to Qt's DateTime | |
| − | + | QDateTime qdtm = QDateTime::fromTime_t(ttime); | |
| − | + | // get time part from DateTime variable | |
| − | + | QTime qtm = qdtm.time(); | |
| − | + | // let's count day to current alarm triggering | |
| − | + | int days = 0; | |
| − | + | QDateTime currDate; | |
| − | + | if (timeFrame > 24) // if we need to look forward for more then one day | |
| − | + | { | |
| − | + | // get current date from system | |
| − | + | currDate = QDateTime::currentDateTime(); | |
| − | + | // calculate seconds from current time to alarm's trigger | |
| − | + | int secs = currDate.secsTo(qdtm); | |
| − | + | // get full days until alarm | |
| − | + | days = secs / (60 * 60 * 24); | |
| − | + | } | |
| − | + | // here we will form alarm's string | |
| − | + | QString sTime; | |
| − | + | // using locale settings to convert time into string | |
| − | + | sTime = qtm.toString(Qt::DefaultLocaleShortDate); | |
| − | + | if (days > 0) // calc for more than 1 day alarms | |
| − | + | { | |
| − | + | sTime += " ("; | |
| − | + | sTime += QString::number(days) + tr("d"); | |
| − | + | sTime += " "; | |
| − | + | // calc remaining time | |
| − | + | // get current time | |
| − | + | QTime currTime = QTime::currentTime(); | |
| − | + | // calculate seconds remaining to alarm trigger | |
| − | + | int remain = currTime.secsTo(qtm); | |
| − | + | // we need some fix if get negative result | |
| − | + | if (remain < 0) remain += 86400; | |
| − | + | // calc remaining hours | |
| − | + | int h = remain/3600; | |
| − | + | // calc minutes | |
| − | + | int m = (remain - h*3600)/60; | |
| − | + | // form hour + minutes into QTime to leter get formatted string | |
| − | + | QTime remTime(h,m); | |
| − | + | sTime += remTime.toString("H:mm"); | |
| − | + | sTime += ")"; | |
| − | + | } | |
| − | + | // get the title of alarm | |
| − | + | QString aTitle; | |
| − | + | // each alarm can have Message, Title and AppId | |
| − | + | // for the first check the Message | |
| − | + | const char * cTitle = alarm_event_get_message(aevent); | |
| + | aTitle = QString::fromUtf8(cTitle); | ||
| + | if (aTitle.isEmpty()) | ||
| + | { | ||
| + | // next, check the title if message is empty | ||
| + | cTitle = alarm_event_get_title(aevent); | ||
aTitle = QString::fromUtf8(cTitle); | aTitle = QString::fromUtf8(cTitle); | ||
if (aTitle.isEmpty()) | if (aTitle.isEmpty()) | ||
{ | { | ||
| − | // | + | // if message and Title both are empty - use AppID as alarm's title |
| − | cTitle = | + | cTitle = alarm_event_get_alarm_appid(aevent); |
aTitle = QString::fromUtf8(cTitle); | aTitle = QString::fromUtf8(cTitle); | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
} | } | ||
| − | + | } | |
| + | sTime += ": " + aTitle; | ||
| + | aBox->addItem(sTime); | ||
| + | // free alarm event structure | ||
| + | alarm_event_delete(aevent); | ||
} | } | ||
| − | |||
} | } | ||
free(list); | free(list); | ||
Revision as of 15:13, 8 December 2010
Article Metadata
Tested with
Devices(s): Nokia N900
Compatibility
Platform(s): Qt for Maemo
Article
Keywords: alarms, alarmd
Created: (25 Nov 2009)
Last edited: Avis
(08 Dec 2010)
Contents |
Overview
This example shows how to get list of System alarms in Qt Maemo application. There is now direct Qt classes for this operation - so using GTK functions.
Project .pro file
// Maemo specific config
maemo5 {
LIBS += libalarm.so
}
Packing in DEB - control file
// in source section add for Build-depends line
libalarm-dev
Header
#include <time.h>
#include <alarmd/alarm_dbus.h>
#include <alarmd/libalarm.h>
Source
// get the reference to QComboBox for filling
void SampleWidget::fillAlarmList(QComboBox* &aBox)
{
// clear the list
aBox->clear();
cookie_t *list, *iter; // cookie_t - alarm cookies from GTK
time_t now; // time_t structure from GTK
// set number of hours to search alarms
int timeFrame = 96;
now = time(NULL);
// get list of alarms
list = alarmd_event_query(now, now + timeFrame*3600, ALARM_EVENT_DISABLED, 0, NULL);
if (list[0] != (cookie_t) 0) {
// iterate through alarm list
for (iter = list; *iter != (cookie_t) 0; iter++)
{
// get alarm event by it's cookie
alarm_event_t * aevent = alarmd_event_get (*iter);
// check alarm recurrence
int recur = alarm_event_is_recurring (aevent);
// get time of alarm action
time_t ttime = alarm_event_get_trigger(aevent);
// convert GTK's ttime to Qt's DateTime
QDateTime qdtm = QDateTime::fromTime_t(ttime);
// get time part from DateTime variable
QTime qtm = qdtm.time();
// let's count day to current alarm triggering
int days = 0;
QDateTime currDate;
if (timeFrame > 24) // if we need to look forward for more then one day
{
// get current date from system
currDate = QDateTime::currentDateTime();
// calculate seconds from current time to alarm's trigger
int secs = currDate.secsTo(qdtm);
// get full days until alarm
days = secs / (60 * 60 * 24);
}
// here we will form alarm's string
QString sTime;
// using locale settings to convert time into string
sTime = qtm.toString(Qt::DefaultLocaleShortDate);
if (days > 0) // calc for more than 1 day alarms
{
sTime += " (";
sTime += QString::number(days) + tr("d");
sTime += " ";
// calc remaining time
// get current time
QTime currTime = QTime::currentTime();
// calculate seconds remaining to alarm trigger
int remain = currTime.secsTo(qtm);
// we need some fix if get negative result
if (remain < 0) remain += 86400;
// calc remaining hours
int h = remain/3600;
// calc minutes
int m = (remain - h*3600)/60;
// form hour + minutes into QTime to leter get formatted string
QTime remTime(h,m);
sTime += remTime.toString("H:mm");
sTime += ")";
}
// get the title of alarm
QString aTitle;
// each alarm can have Message, Title and AppId
// for the first check the Message
const char * cTitle = alarm_event_get_message(aevent);
aTitle = QString::fromUtf8(cTitle);
if (aTitle.isEmpty())
{
// next, check the title if message is empty
cTitle = alarm_event_get_title(aevent);
aTitle = QString::fromUtf8(cTitle);
if (aTitle.isEmpty())
{
// if message and Title both are empty - use AppID as alarm's title
cTitle = alarm_event_get_alarm_appid(aevent);
aTitle = QString::fromUtf8(cTitle);
}
}
sTime += ": " + aTitle;
aBox->addItem(sTime);
// free alarm event structure
alarm_event_delete(aevent);
}
}
free(list);
}
Postconditions
QComboBox filled with list of alarms (and time remaining to that alarms)
--Avis 12:24, 30 November 2010 (UTC)

