diff -r 2e2dc3d30ca8 -r 341166945d65 screensaver/devicedialogplugins/snsrdevicedialogplugin/src/snsrdevicedialog.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/screensaver/devicedialogplugins/snsrdevicedialogplugin/src/snsrdevicedialog.cpp Fri Jun 25 19:19:22 2010 +0300 @@ -0,0 +1,324 @@ +/* +* Copyright (c) 2009 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: Default Screensaver runtime. +* +*/ + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include + +#include "snsrdevicedialog.h" +#include +#include + + +const char *gBigClockInterfaceName = "com.nokia.screensaver.ISnsrBigClockScreensaver"; + +/*! + \class SnsrDeviceDialog + \ingroup group_snsrdevicedialogplugin + \brief Screensaver Device Dialog. + */ + +extern const char *lViewType; + +const char *SnsrDeviceDialog::dataKeyUnlock = "unlock"; + +QTM_USE_NAMESPACE + +/*! + Constructor. + \param viewType Initial view type (active or standby). + \param parent Parent. + */ +SnsrDeviceDialog::SnsrDeviceDialog(const QVariantMap ¶meters, QGraphicsItem *parent) : + HbPopup(parent) , mScreensaver(0), mLayout(0), m_setManager (0) +{ + qDebug("SnsrDeviceDialog::SnsrDeviceDialog()"); + + + // load screensaver plugin + // Workaround to QtSF bug. Create in stack after the bug is fixed. + QServiceManager manager; + QServiceFilter filter(gBigClockInterfaceName); + QList interfaces = manager.findInterfaces( + filter); + Q_ASSERT(interfaces.count()); + + mScreensaver = manager.loadLocalTypedInterface( + interfaces.first().interfaceName() ); + if (mScreensaver) { + mScreensaver->setParent(this); + } else { + // TODO: error state + } + connect(mScreensaver, SIGNAL(viewChanged(QGraphicsWidget*)), + SLOT(changeView(QGraphicsWidget*))); + connect(mScreensaver, SIGNAL(faulted()), + SLOT(screensaverFaulted())); + + mScreensaver->initialize(); + + setBackgroundItem(0); + + setDismissPolicy(HbPopup::NoDismiss); + setTimeout(HbPopup::NoTimeout); + + setDeviceDialogParameters( parameters ); + + connect( mScreensaver, SIGNAL(unlockRequested()), SLOT(requestUnlock()) ); +} + +/*! + Destructor. + */ +SnsrDeviceDialog::~SnsrDeviceDialog() +{ + qDebug("SnsrDeviceDialog::~SnsrDeviceDialog()"); + QServiceManager serviceManager; + serviceManager.removeService(gBigClockInterfaceName); +} + +/*! + Sets device dialog parameters. + \param parameters Device Dialog's parameters to be set. + \ret return true if parameters are correct. + */ +bool SnsrDeviceDialog::setDeviceDialogParameters(const QVariantMap ¶meters) +{ + qDebug("SnsrDeviceDialog::setDeviceDialogParameters()"); + + // default to initial state if no other state given + int viewType( ViewTypeInitial ); + + QVariantMap::const_iterator it = parameters.find(lViewType); + if (it != parameters.end() && !it.value().isNull() && it.value().isValid()) { + bool ok(false); + viewType = it.value().toInt(&ok); + if ( !ok ) { + qWarning() << "SnsrDeviceDialog::setDeviceDialogParameters() - int cast failed"; + return false; + } + } + + // Check initial view from repository + if (viewType == ViewTypeInitial ) { + XQSettingsManager::Error error; + int startupView = 0; + XQSettingsKey settingsKey( XQSettingsKey::TargetCentralRepository, + KCRUidScreensaverSettings.iUid, KScreensaverStartupView ); // TUid as same repository used in control panel via Symbian APIs + m_setManager = new XQSettingsManager(this); + if (m_setManager) { + startupView = m_setManager->readItemValue(settingsKey, XQSettingsManager::TypeInt).toUInt(); + error = m_setManager->error(); + if (error == XQSettingsManager::NoError) + viewType = startupView; + delete m_setManager; + } + } + + switch (viewType) { + case SnsrDeviceDialog::ViewTypeActive: + mScreensaver->foreground(); + return true; + case SnsrDeviceDialog::ViewTypeStandby: + mScreensaver->partialForeground(); + return true; + default: + qWarning() << QString("SnsrDeviceDialog::setDeviceDialogParameters() " + "- unspecefied view type: %1").arg(viewType); + } + + return false; +} + +/*! + Returns error code. + \ret error code. + */ +int SnsrDeviceDialog::deviceDialogError() const +{ + return 0; +} + +/*! + Closes device dialog. + \param byClient If dialog is close by client. + */ +void SnsrDeviceDialog::closeDeviceDialog(bool byClient) +{ + qDebug("SnsrDeviceDialog::closeDeviceDialog()"); + Q_UNUSED(byClient) + hide(); + emit deviceDialogClosed(); +} + +/*! + Returns device dialog instance. + \ret Device dialog instance. + */ +HbPopup *SnsrDeviceDialog::deviceDialogWidget() const +{ + return const_cast(this); +} + +/*! + Shows widget. + \param event. + */ +void SnsrDeviceDialog::showEvent(QShowEvent *event) +{ + qDebug("SnsrDeviceDialog::showEvent()"); + + HbPopup::showEvent(event); + + // workaround for duplicating connections and emiting two signals + // showEvent is called for HbDeviceDialogManager showDeviceDialog() + // and for HbPopup itemChange(), both events are set to QEvent::Show type + disconnect(mainWindow(), SIGNAL(orientationChanged(Qt::Orientation)), + this, SLOT(changeLayout(Qt::Orientation))); + connect(mainWindow(), SIGNAL(orientationChanged(Qt::Orientation)), + this, SLOT(changeLayout(Qt::Orientation))); + + changeLayout(mainWindow()->orientation()); +} + +#ifdef COVERAGE_MEASUREMENT +#pragma CTC SKIP +#endif //COVERAGE_MEASUREMENT + +/*! + Hides widget. + \param event. + */ +void SnsrDeviceDialog::hideEvent(QHideEvent *event) +{ + qDebug("SnsrDeviceDialog::hideEvent()"); + + HbPopup::hideEvent(event); + mScreensaver->background(); +} + +#ifdef COVERAGE_MEASUREMENT +#pragma CTC ENDSKIP +#endif //COVERAGE_MEASUREMENT + +/*! + Close widget. + \param event. + */ +void SnsrDeviceDialog::closeEvent(QCloseEvent *event) +{ + qDebug("SnsrDeviceDialog::closeEvent()"); + + HbPopup::closeEvent(event); + + disconnect(mainWindow(), SIGNAL(orientationChanged(Qt::Orientation)), + this, SLOT(changeLayout(Qt::Orientation))); + mScreensaver->close(); +} + +/*! + Replaces layout's item. + \param widget New item to be added to layout. + */ +void SnsrDeviceDialog::changeView(QGraphicsWidget *widget) +{ + qDebug("SnsrDeviceDialog::changeView() - widget: 0x%X", (int)widget); + if (!mLayout) { + mLayout = new QGraphicsLinearLayout(Qt::Vertical); + mLayout->setContentsMargins(0,0,0,0); + setLayout(mLayout); + } + + if (mLayout->count()) { + mLayout->removeAt(0); + } + if (widget) { + widget->show(); + mLayout->addItem(widget); + } +} + +/*! + Handles faults in loaded screensaver model. + */ +void SnsrDeviceDialog::screensaverFaulted() +{ + qWarning() << "SnsrDeviceDialog::screensaverFaulted()"; + // TODO: some error handling +} + +/*! + Resize device dialog. + \param orientation New orientation value. + */ +void SnsrDeviceDialog::changeLayout(Qt::Orientation orientation) +{ + Q_UNUSED(orientation) + + QRectF rect = mainWindow()->layoutRect(); + setMinimumSize( rect.size() ); + setPreferredPos( QPointF(0,0) ); +} + +/*! + Send unlock signal to autolock. + */ +void SnsrDeviceDialog::requestUnlock() +{ + QVariantMap data; + data.insert(dataKeyUnlock, 1); + emit deviceDialogData(data); +} +/*! + Called when the dialog is created if they are any currently + activate universal indicators present. + */ +void SnsrDeviceDialog::indicatorsActivated( + const QList &activatedIndicators) +{ + mScreensaver->handleActiveIndicators(activatedIndicators); +} + +/*! + Called when some universal indicator is activated. + Ownership of activatedIndicator is not transferred. + */ +void SnsrDeviceDialog::indicatorActivated( + HbIndicatorInterface *activatedIndicator) +{ + mScreensaver->handleActivatedIndicator(activatedIndicator); +} + +/*! + Called when some universal indicator is deactivated. + */ +void SnsrDeviceDialog::indicatorRemoved( + HbIndicatorInterface *indicatorRemoved) +{ + mScreensaver->handleDeactivatedIndicator(indicatorRemoved); +} + +// end of file +