alarmui/alarmalertwidget/alarmalertinterface/src/alarmalertwidget.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Fri, 16 Apr 2010 14:57:40 +0300
changeset 18 c198609911f9
child 23 fd30d51f876b
permissions -rw-r--r--
Revision: 201011 Kit: 201015

/*
* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description: 
*
*/
// alarmalertwidget.cpp

// System includes
#include <QDateTime>
#include <hbdevicedialog.h>
#include <QDebug>

// User includes
#include "alarmalertwidget.h"
#include "alarmalert.h"
#include "alarmalertobserver.h"

// ---------------------------------------------------------
// AlarmAlertWidget::AlarmAlertWidget
// rest of the details are commented in the header
// ---------------------------------------------------------
//
AlarmAlertWidget::AlarmAlertWidget(AlarmAlertObserver *observer) :
    mObserver(observer)
{
    // Create a session with the device dialog server
    mDeviceDialog = new HbDeviceDialog(HbDeviceDialog::NoFlags, this);
    
    // Connect to signals to receive events sent by the dialog
    connect(mDeviceDialog, SIGNAL(dataReceived(QVariantMap)), this, SLOT(triggerAction(QVariantMap)));
}

// ---------------------------------------------------------
// AlarmAlertWidget::~AlarmAlertWidget
// rest of the details are commented in the header
// ---------------------------------------------------------
//
AlarmAlertWidget::~AlarmAlertWidget()
{
    // Cleanup
    if (mDeviceDialog) {
       delete mDeviceDialog; 
    }
}

// ---------------------------------------------------------
// AlarmAlertWidget::ShowAlarmDialog
// rest of the details are commented in the header
// ---------------------------------------------------------
//
bool AlarmAlertWidget::showAlarmDialog(SAlarmInfo *alarmInfo)
{
    // Get the subject of the alarm (description for clock alarms
    // and subject for calendar alarms)
	mSubject = QString::fromUtf16(alarmInfo->iSubject->Ptr(),
	                                     alarmInfo->iSubject->Length());
	
	// Get the location (for calendar alarms)
	mLocation = QString::fromUtf16(alarmInfo->iLocation->Ptr(),
	                                      alarmInfo->iLocation->Length());
	
	// Get the alarm date and time
	// TODO: Check QDateTime to TTime compatibility
	mAlarmTime.setTime(QTime(alarmInfo->iTime.DateTime().Hour(),
	                        alarmInfo->iTime.DateTime().Minute(),
	                        alarmInfo->iTime.DateTime().Second()));
	mAlarmTime.setDate(QDate(alarmInfo->iDate.DateTime().Year(),
                            alarmInfo->iDate.DateTime().Month(),
                            alarmInfo->iDate.DateTime().Day()));
	
	mCanSnooze = alarmInfo->iCanSnooze;
	mIsSilent = alarmInfo->iIsSilent;
	mIsClockAlarm = alarmInfo->iIsClockAlarm;
    
    // Package the different parameters to send
	QVariantMap params;
	params.insert(alarmSubject, mSubject);
	params.insert(alarmLocation, mLocation);
	params.insert(alarmDateTime, mAlarmTime);
	params.insert(alarmRingingType, mIsSilent);
	params.insert(alarmCanSnooze, mCanSnooze);
	params.insert(alarmType, mIsClockAlarm);
	
	return mDeviceDialog->show(ALARM_ALERT_PLUGIN, params);
}

// ---------------------------------------------------------
// AlarmAlertWidget::DismissAlarmDialog
// rest of the details are commented in the header
// ---------------------------------------------------------
//
bool AlarmAlertWidget::dismissAlarmDialog()
{
    // Dismiss the dialog
    return mDeviceDialog->cancel();
}

// ---------------------------------------------------------
// AlarmAlertWidget::UpdateAlarmDialog
// rest of the details are commented in the header
// ---------------------------------------------------------
//
bool AlarmAlertWidget::updateAlarmDialog(SAlarmInfo* alarmInfo)
{
    Q_UNUSED(alarmInfo);
    // Update the dialog with any new information
    // TODO: Pass the updated information sent by the observer
    QVariantMap params;
    return mDeviceDialog->update(params);
}

// ---------------------------------------------------------
// AlarmAlertWidget::triggerAction
// rest of the details are commented in the header
// ---------------------------------------------------------
//
void AlarmAlertWidget::triggerAction(QVariantMap params)
{
    // Check what is the command being sent by the dialog
    // Based on that, update the command to be sent
    QVariantMap::const_iterator iter = params.find(alarmCommand);
    if (iter != params.constEnd()) {
        AlarmCommand command(AlarmCmdLast);
        if (iter.value().toInt() == Stop) {
            command = AlarmStop;
        }
        else if (iter.value().toInt() == Snooze) {
            command = AlarmSnooze;
        }
        else if (iter.value().toInt() == Silence) {
            command = AlarmSilence;
        } else if (iter.value().toInt() == Shown) {
			command = AlarmShown;
			mObserver->alertDisplayed(command);
			return;
		} else {
		    command = AlarmCmdLast;
		}
        if (command != AlarmCmdLast) {
            // Notify the observer with the command
            mObserver->alertCompleted(command);        	
        }
        	
    }
}