diff -r 2922f70fca82 -r 67457b2ffb33 camerauis/cameraxui/cxui/src/cxuistandby.cpp --- a/camerauis/cameraxui/cxui/src/cxuistandby.cpp Thu Jul 15 01:49:11 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,304 +0,0 @@ -/* -* 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: -* -*/ - -#include -#include -#include -#include -#include -#include -#include -#include - -#include "cxutils.h" -#include "cxeengine.h" -#include "cxuienums.h" -#include "cxuistandby.h" -#include "cxuidocumentloader.h" -#include "cxeviewfindercontrol.h" -#include "cxuicapturekeyhandler.h" -#include "cxestillcapturecontrol.h" -#include "cxevideocapturecontrol.h" - - - -/*! - * Constructor - */ -CxuiStandby::CxuiStandby(CxuiCaptureKeyHandler &keyHandler,CxuiDocumentLoader *documentLoader, CxeEngine *engine) -: mKeyHandler(keyHandler), - mDocumentLoader(documentLoader), - mEngine(engine), - mStandbyPopup(NULL), - mStandbyDialogVisible(false), - mAllowDismiss(true) -{ - CX_DEBUG_ENTER_FUNCTION(); - CX_ASSERT_ALWAYS(engine); - - // initialize standby timer - mStandbyTimer = new QTimer(this); - - // install event filter for application wide events - QCoreApplication::instance()->installEventFilter(this); - - CX_ASSERT_ALWAYS(mStandbyTimer); - connect(mStandbyTimer, SIGNAL(timeout()), this, SLOT(enterStandby())); - mStandbyTimer->setSingleShot(true); - - CX_DEBUG_EXIT_FUNCTION(); -} - - - -/*! - * Destructor - */ -CxuiStandby::~CxuiStandby() -{ - CX_DEBUG_IN_FUNCTION(); - // remove the event filter - QCoreApplication::instance()->removeEventFilter(this); - // stop standby timer - stopTimer(); -} - - -/*! -* Allow dismissing standby mode with AF or capture key? -* @param allow Is dismissing allowed. -*/ -void CxuiStandby::allowDismiss(bool allow) -{ - CX_DEBUG_ENTER_FUNCTION(); - mAllowDismiss = allow; - if (allow) { - if (mStandbyDialogVisible) { - // Reconnect the close signals if dialog is visible - connect(&mKeyHandler, SIGNAL(autofocusKeyPressed()), mStandbyPopup, SLOT(close()), Qt::UniqueConnection); - connect(&mKeyHandler, SIGNAL(captureKeyPressed()), mStandbyPopup, SLOT(close()), Qt::UniqueConnection); - } - } else { - disconnect(&mKeyHandler, SIGNAL(autofocusKeyPressed()), mStandbyPopup, SLOT(close())); - disconnect(&mKeyHandler, SIGNAL(captureKeyPressed()), mStandbyPopup, SLOT(close())); - } - - CX_DEBUG_EXIT_FUNCTION(); -} - - -/*! -* Is standby mode active? -* @return True, if standby mode is active, false if not. -*/ -bool CxuiStandby::isActive() const -{ - return mStandbyDialogVisible; -} - -/*! - * stops standby timer - */ -void CxuiStandby::stopTimer() -{ - if(mStandbyTimer) { - mStandbyTimer->stop(); - } -} - -/*! - * starts standby timer - */ -void CxuiStandby::startTimer() -{ - if(mStandbyTimer) { - mStandbyTimer->start(CXUI_STANDBY_CAMERA_TIMEOUT); - } -} - -/*! - * Handles mouse press events - * returns if mouse key press is consumed. - * \param event event to be handled - * \return boolean to indicate whether the event was handled or not - */ -bool CxuiStandby::handleMouseEvent(QEvent *event) -{ - bool keyHandled = false; - - // close the dialog if it's visible - if (mStandbyDialogVisible && mStandbyPopup) { - HbInstantFeedback feedback(HbFeedback::BasicItem); - switch (event->type()) { - case QEvent::GraphicsSceneMousePress: - feedback.play(); - break; - case QEvent::GraphicsSceneMouseRelease: - if (mAllowDismiss) { - CX_DEBUG(( "closing the popup mStandbyDialogVisible = : %d", mStandbyDialogVisible )); - // todo: sound disabling doesn't work in orbit yet so don't do feedback on release - // needs to be enabled when orbit support is done - //feedback.setModalities(HbFeedback::Tactile); - //feedback.play(); - exitStandby(); - } - break; - default: - break; - } - // eat all mouse events when standby is active - keyHandled = true; - } else if (mStandbyTimer && mStandbyTimer->isActive()) { - // restart the timer only if it's running - startTimer(); - } - - return keyHandled; -} - - -/*! - * switching to standby. - */ -void CxuiStandby::enterStandby() -{ - CX_DEBUG_ENTER_FUNCTION(); - - if (proceedToStandy()) { - - // signal for ui classes to prepare for standby - emit aboutToEnterStandby(); - - mStandbyDialogVisible = true; - - if (mStandbyPopup == NULL) { - CX_DEBUG(("Loading standby DocML")); - bool ok = false; - // Use document loader to create popup - mDocumentLoader->load(CxUiLayout::STANDBY_POPUP_XML, &ok); - CX_DEBUG(("standby load ok=%d", ok)); - mStandbyPopup = qobject_cast(mDocumentLoader->findWidget(CxUiLayout::STANDBY_POPUP)); - CX_ASSERT_ALWAYS(mStandbyPopup); - mStandbyPopup->setTimeout(HbDialog::NoTimeout); - mStandbyPopup->setBackgroundFaded(false); - mStandbyPopup->setPreferredPos(QPointF(0,0)); - // color of standby text is set in the code. It cannot be done in docml - HbLabel* label = qobject_cast(mDocumentLoader->findWidget(CxUiLayout::STANDBY_TEXT_WIDGET)); - label->setTextColor(Qt::white); - - // connecting "abouttoclose" signal to dismissStandby - connect(mStandbyPopup, SIGNAL(aboutToClose()), this, SLOT(dismissStandby())); - - // HbDialog's default background item is replaced with black rectangle - QGraphicsRectItem *backgroundItem = new QGraphicsRectItem(); - QBrush blackBrush = QBrush(Qt::black); - backgroundItem->setBrush(blackBrush); - QGraphicsItem *origBgItem = mStandbyPopup->backgroundItem(); - backgroundItem->setRect(origBgItem->boundingRect()); - mStandbyPopup->setBackgroundItem(backgroundItem); - - } - - CX_ASSERT_ALWAYS(mStandbyPopup); - - mStandbyPopup->show(); - // connecting half press or full press key signal to dismiss standby - connect(&mKeyHandler, SIGNAL(autofocusKeyPressed()), mStandbyPopup, SLOT(close()), Qt::UniqueConnection); - connect(&mKeyHandler, SIGNAL(captureKeyPressed()), mStandbyPopup, SLOT(close()), Qt::UniqueConnection); - } - - CX_DEBUG_EXIT_FUNCTION(); -} - -/*! -* Close the standby dialog. -*/ -void CxuiStandby::exitStandby() -{ - CX_DEBUG_ENTER_FUNCTION(); - - if (mAllowDismiss && mStandbyDialogVisible && mStandbyPopup) { - mStandbyPopup->close(); - } - - CX_DEBUG_EXIT_FUNCTION(); -} - - -/*! - * dismisses standby - */ -void CxuiStandby::dismissStandby() -{ - CX_DEBUG_ENTER_FUNCTION(); - - if(mStandbyDialogVisible) { - // stop the standby timer and close the pop-up - mStandbyDialogVisible = false; - //restart timer - startTimer(); - // signal for ui classes to prepare for standby exit - emit aboutToExitStandby(); - } - - CX_DEBUG_EXIT_FUNCTION(); -} - - - -/*! - * checks if we can switch to standby - */ -bool CxuiStandby::proceedToStandy() -{ - CX_DEBUG_ENTER_FUNCTION(); - CX_ASSERT_ALWAYS(mEngine); - - bool ok = false; - if (!mStandbyDialogVisible) { - CX_DEBUG(("show standby dialog")); - ok = true; - } - - CX_DEBUG(( "CxuiStandby::proceedToStandy proceedToStandy: %d", ok )); - - return ok; -} - - - -/*! - * Event filter which filters application wide mouse events. - */ -bool CxuiStandby::eventFilter(QObject *object, QEvent *event) -{ - Q_UNUSED(object); - - bool eventWasConsumed = false; - switch (event->type()) { - case QEvent::GraphicsSceneMouseMove: - case QEvent::GraphicsSceneMousePress: - case QEvent::GraphicsSceneMouseRelease: - eventWasConsumed = handleMouseEvent(event); - break; - default: - break; - } - return eventWasConsumed; -} - -// end of file