×
Namespaces

Variants
Actions
Revision as of 12:26, 24 June 2011 by hamishwillee (Talk | contribs)

How to get Alarms list in Qt Maemo application

From Nokia Developer Wiki
Jump to: navigation, search
Article Metadata
Tested with
Devices(s): Nokia N900
Compatibility
Platform(s): Qt for Maemo
Symbian
Article
Keywords: alarms
Created: Avis (25 Nov 2009)
Last edited: hamishwillee (24 Jun 2011)

Contents

Overview

This example shows how to get list of System alarms in Qt Maemo application. There are no 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)

80 page views in the last 30 days.

Was this page helpful?

Your feedback about this content is important. Let us know what you think.

 

Thank you!

We appreciate your feedback.

×