diff -r 61bc0f252b2b -r bac7acad7cb3 camerauis/cameraxui/cxui/src/cxuiprecaptureview.cpp --- a/camerauis/cameraxui/cxui/src/cxuiprecaptureview.cpp Tue Aug 31 15:03:46 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,982 +0,0 @@ -/* -* Copyright (c) 2009-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: -* -*/ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "cxeengine.h" -#include "cxeviewfindercontrol.h" -#include "cxezoomcontrol.h" -#include "cxecameradevicecontrol.h" -#include "cxenamespace.h" -#include "cxefeaturemanager.h" -#include "cxestillcapturecontrol.h" -#include "cxevideocapturecontrol.h" -#include "cxesettings.h" -#include "cxutils.h" -#include "cxuienums.h" -#include "cxuidocumentloader.h" -#include "cxuidisplaypropertyhandler.h" -#include "cxuicapturekeyhandler.h" -#include "cxuiprecaptureview.h" -#include "cxuisettingdialog.h" -#include "cxuisettingradiobuttonlist.h" -#include "cxuisettingslider.h" -#include "cxuisettingsinfo.h" - -#ifdef Q_OS_SYMBIAN -#include "OstTraceDefinitions.h" - -#ifdef OST_TRACE_COMPILER_IN_USE -#include "cxuiprecaptureviewTraces.h" -#endif - -#endif //Q_OS_SYMBIAN - -#include "cxuifullscreenpopup.h" -#include "cxuiserviceprovider.h" -#include "cxuizoomslider.h" - -using namespace CxUiLayout; -using namespace CxUiSettings; -using namespace CxUiInternal; - - -// --------------------------------------------------------------------------- -// CxuiPrecaptureView::CxuiPrecaptureView -// Constructor -// --------------------------------------------------------------------------- -// -CxuiPrecaptureView::CxuiPrecaptureView(QGraphicsItem *parent) : - CxuiView(parent), - mViewfinder(0), - mDisplayHandler(0), - mSettingsGrid(0), - mWidgetsLoaded(false), - mSettingsDialog(NULL), - mSettingsDialogList(NULL), - mQualityIcon(NULL), - mGeoTaggingIndicatorIcon(NULL), - mFaceTrackingIcon(NULL), - mStandbyPopup(NULL), - mSettingsDialogHeading(NULL), - mSliderSettingsDialog(NULL), - mSliderSettingsDialogHeading(NULL), - mSettingsSlider(NULL), - mSettingsInfo(NULL), - mSettingsDialogOkAction(NULL), - mSliderSettingsDialogOkAction(NULL) -{ - CX_DEBUG_ENTER_FUNCTION(); - mDisplayHandler = new CxuiDisplayPropertyHandler(); - CX_DEBUG_EXIT_FUNCTION(); -} - -CxuiPrecaptureView::~CxuiPrecaptureView() -{ - CX_DEBUG_ENTER_FUNCTION(); - QCoreApplication::instance()->removeEventFilter(this); - delete mSettingsGrid; - CX_DEBUG_EXIT_FUNCTION(); -} - -/** - * CxuiPrecaptureView::construct - * Construct-method handles initialisation tasks for this class. - * @param mainwindow - * @param engine - * @param documentLoader - * @param keyHandler - */ -void CxuiPrecaptureView::construct(HbMainWindow *mainWindow, CxeEngine *engine, - CxuiDocumentLoader *documentLoader, - CxuiCaptureKeyHandler * keyHandler, - HbActivityManager *activityManager) -{ - CX_DEBUG_ENTER_FUNCTION(); - OstTrace0(camerax_performance, CXUIPRECAPTUREVIEW_CONSTRUCT_1, "msg: e_CX_PRECAPVIEW_CONSTRUCT 1"); - - CxuiView::construct(mainWindow, engine, documentLoader, keyHandler, activityManager); - - mSettingsInfo = new CxuiSettingsInfo(engine); - CX_DEBUG_ASSERT(mSettingsInfo); - - setContentFullScreen(true); - - connect(&mEngine->zoomControl(), SIGNAL(stateChanged(CxeZoomControl::State, CxeError::Id)), this, - SLOT(handleEngineZoomStateChange(CxeZoomControl::State, CxeError::Id))); - - connect(&mEngine->zoomControl(), SIGNAL(zoomLevelChanged(int)), this, - SLOT(handleZoomLevelChange(int))); - - - connect(&mEngine->viewfinderControl(), SIGNAL(stateChanged(CxeViewfinderControl::State, CxeError::Id)), - this, SLOT(handleVfStateChanged(CxeViewfinderControl::State, CxeError::Id))); - - connect(&mEngine->geoTaggingTrail(), SIGNAL(stateChanged(CxeGeoTaggingTrail::State, CxeError::Id)), - this, SLOT(updateLocationIndicator(CxeGeoTaggingTrail::State, CxeError::Id))); - - connect(&(mEngine->settings()), SIGNAL(settingValueChanged(const QString&,QVariant)), - this, SLOT(handleSettingValueChanged(const QString&, QVariant))); - - // adjust the timer, and connect it to correct slot - connect(&mHideControlsTimeout, SIGNAL(timeout()), this, SLOT(hideControls())); - - mHideControlsTimeout.setSingleShot(true); - mHideControlsTimeout.setInterval(CXUI_HIDE_CONTROLS_TIMEOUT); - - hideControls(); - - if (CxuiServiceProvider::isCameraEmbedded()) { - // override exit with action that completes the request before exiting - HbAction* exitAction = new HbAction(Hb::QuitNaviAction, this); - connect(exitAction, SIGNAL(triggered()), CxuiServiceProvider::instance(), SLOT(sendFilenameToClientAndExit())); - setNavigationAction(exitAction); - } - - OstTrace0(camerax_performance, CXUIPRECAPTUREVIEW_CONSTRUCT_2, "msg: e_CX_PRECAPVIEW_CONSTRUCT 0"); - - QCoreApplication::instance()->installEventFilter(this); - - HbEffect::add("toolbarextension", "camera_toolbarextension_appear", "toolbarextension_appear"); - HbEffect::add("toolbarextension", "camera_toolbarextension_disappear", "toolbarextension_disappear"); - - CX_DEBUG_EXIT_FUNCTION(); -} - -/*! -* Is standby mode supported / needed by this view. -* Pre-capture views implement / need standby mode and return true. -* @return True if standby mode is supported, false otherwise. -*/ -bool CxuiPrecaptureView::isStandbyModeSupported() const -{ - return true; -} - -// --------------------------------------------------------------------------- -// CxuiPrecaptureView::handleEngineZoomStateChange -// Slot for the initModeComplete signal from device control. -// --------------------------------------------------------------------------- -// -void CxuiPrecaptureView::handleEngineZoomStateChange(CxeZoomControl::State newState, CxeError::Id /*error*/ ) -{ - CX_DEBUG_ENTER_FUNCTION(); - - if (newState == CxeZoomControl::Ready) { - // Set the zoom range (if more than zero!) - // NOTE: This is & should be done after ECam resolution has been set. - int min = mEngine->zoomControl().min(); - int max = mEngine->zoomControl().max(); - - // only change values if they are acceptable and have changed - if (mSlider && (max - min > 0) && ((mSlider->maximum() != max) - || (mSlider->minimum()!= min))) { - mSlider->setRange(min, max); - } - } - - CX_DEBUG_EXIT_FUNCTION(); -} - -// --------------------------------------------------------------------------- -// CxuiPrecaptureView::zoomTo -// Responds to valueChanged notification from zoom bar UI -// and asks the engine to set the appropriate zoom level. -// --------------------------------------------------------------------------- -// -void CxuiPrecaptureView::zoomTo(int value) -{ - CX_DEBUG_ENTER_FUNCTION(); - - CX_DEBUG(( "Slider value: %d", value )); - mEngine->zoomControl().zoomTo(value); - - // restarts the timer, if ongoing - if (mHideControlsTimeout.isActive()) { - mHideControlsTimeout.start(); - } - - CX_DEBUG_EXIT_FUNCTION(); -} - -// --------------------------------------------------------------------------- -// CxuiPrecaptureView::toggleZoom -// -// --------------------------------------------------------------------------- -// -void CxuiPrecaptureView::toggleZoom() -{ - if (mZoomVisible) { - hideZoom(); - } else { - showZoom(); - } -} - - -/* - * Event filter which filters tool bar mouse events and - * application wide mouse events. - */ - -bool CxuiPrecaptureView::eventFilter(QObject *object, QEvent *event) -{ - bool eventWasConsumed = false; - - switch (event->type()) - { - case QEvent::GraphicsSceneMouseRelease: - if (mStandbyPopup) { - mStandbyPopup->handleMouseRelease(); - } else { - mHideControlsTimeout.start(); - } - break; - case QEvent::GraphicsSceneMousePress: - if (object == mStandbyPopup) { - mStandbyPopup->handleMousePress(); - } else { - mHideControlsTimeout.stop(); - } - break; - default: - break; - } - - return eventWasConsumed; -} - - -// --------------------------------------------------------------------------- -// CxuiPrecaptureView::toggleControls -// -// --------------------------------------------------------------------------- -// -void CxuiPrecaptureView::toggleControls() -{ - // This method is put here to demonstrate that widget creation can - // be postponed using sections in layout xml - if (!mWidgetsLoaded) { - // call load widgets to load app DocML and get the pointers to needed widgets - loadWidgets(); - } - CxuiView::toggleControls(); -} - -// --------------------------------------------------------------------------- -// CxuiPrecaptureView::handleZoomLevelChange -// Slot to handle zoom level change signal from zoom control. -// ------------------------------------------------------------------------- -// -void CxuiPrecaptureView::handleZoomLevelChange(int zoomValue) -{ - CX_DEBUG_ENTER_FUNCTION(); - - if (mSlider && zoomValue != mSlider->value()) { - CX_DEBUG(( "Zoom level is: %d", zoomValue )); - mSlider->setValue(zoomValue); - } - - // reset the timer if it is ongoing - if (mHideControlsTimeout.isActive()) { - mHideControlsTimeout.start(); - } - - CX_DEBUG_EXIT_FUNCTION(); -} - -// --------------------------------------------------------------------------- -// CxuiPrecaptureView::showEvent -// -// --------------------------------------------------------------------------- -// -void CxuiPrecaptureView::showEvent(QShowEvent *event) -{ - CX_DEBUG_ENTER_FUNCTION(); - - QGraphicsWidget::showEvent(event); - - if (event->type() == QEvent::Show) { - QCoreApplication::instance()->installEventFilter(this); - event->accept(); - } - - CX_DEBUG_EXIT_FUNCTION(); -} - -// --------------------------------------------------------------------------- -// CxuiPrecaptureView::hideEvent -// -// --------------------------------------------------------------------------- -// -void CxuiPrecaptureView::hideEvent(QHideEvent *event) -{ - CX_DEBUG_ENTER_FUNCTION(); - - QGraphicsWidget::hideEvent(event); - - if (event->type() == QEvent::Hide) { - QCoreApplication::instance()->removeEventFilter(this); - hideZoom(); - event->accept(); - } - - CX_DEBUG_EXIT_FUNCTION(); -} - -// --------------------------------------------------------------------------- -// CxuiPrecaptureView::requestCameraSwitch -// Slot to switch camera. Needed for options menu signals (in DocML). -// --------------------------------------------------------------------------- -// -void CxuiPrecaptureView::requestCameraSwitch() { - emit switchCamera(); -} - -/** -* Handle pressing auto focus key. -*/ -void CxuiPrecaptureView::handleAutofocusKeyPressed() -{ - CX_DEBUG_ENTER_FUNCTION(); - - if (mSettingsDialog) { - // Prevent us from trying to show grid when dialog closes. - mSettingsDialog->setStarterAction(NULL); - mSettingsDialog->close(); - } - if (mSliderSettingsDialog) { - mSliderSettingsDialog->setStarterAction(NULL); - mSliderSettingsDialog->close(); - } - - menu()->close(); - hideControls(); - - CX_DEBUG_EXIT_FUNCTION(); -} - -// --------------------------------------------------------------------------- -// CxuiPrecaptureView::disableControlsTimeout -// Slot -// --------------------------------------------------------------------------- -// -void CxuiPrecaptureView::disableControlsTimeout() -{ - CX_DEBUG_ENTER_FUNCTION(); - if (mHideControlsTimeout.isActive()) { - mHideControlsTimeout.stop(); - } - CX_DEBUG_EXIT_FUNCTION(); -} - - -// --------------------------------------------------------------------------- -// CxuiPrecaptureView::initCamera -// --------------------------------------------------------------------------- -void CxuiPrecaptureView::initCamera() -{ - CX_DEBUG_ENTER_FUNCTION(); - mEngine->initMode(mEngine->mode()); - CX_DEBUG_EXIT_FUNCTION(); -} - - -/* - * viewfinder state call backs - */ -void CxuiPrecaptureView::handleVfStateChanged( - CxeViewfinderControl::State newState, CxeError::Id /*error*/) -{ - CX_DEBUG_ENTER_FUNCTION(); - - if (newState == CxeViewfinderControl::Running) { - // switch off screen saver and turn on backlight - if(mDisplayHandler) { - mDisplayHandler->setDisplayAlwaysVisible(true); - } - // start the standby timer - emit startStandbyTimer(); - } else { - // switch on screen saver and turn off backlight - if(mDisplayHandler) { - mDisplayHandler->setDisplayAlwaysVisible(false); - } - // stop the standby timer when vf is not running. - emit stopStandbyTimer(); - } - - CX_DEBUG_EXIT_FUNCTION(); -} - -/*! -* Slot for entering standby mode. -* Show standby canvas in addition to base class implementation. -* @sa CxuiView::enterStandby() -*/ -void CxuiPrecaptureView::enterStandby() -{ - CX_DEBUG_ENTER_FUNCTION(); - - // Release camera right away to avoid any problems with GPU memory. - CxuiView::enterStandby(); - - // If this view is still the current view, show popup. - // If we moved to precapture view because (error) standby during capturing, - // don't try show the popup. - if (mMainWindow->currentView() == this) { - // Show standby canvas / popup. - if (!mStandbyPopup) { - mStandbyPopup = CxuiFullScreenPopup::create(scene(), hbTrId("txt_cam_info_camera_in_standby_mode")); - } - mStandbyPopup->show(); - } - CX_DEBUG_EXIT_FUNCTION(); -} - -/*! -* Slot for exiting standby mode. -* Hide the standby canvas and re-prepare camera. -* @sa CxuiView::exitStandby() -*/ -void CxuiPrecaptureView::exitStandby() -{ - CX_DEBUG_ENTER_FUNCTION(); - CxuiView::exitStandby(); - - if (mStandbyPopup) { - mStandbyPopup->hide(); - delete mStandbyPopup; - mStandbyPopup = NULL; - } - - initCamera(); - CX_DEBUG_EXIT_FUNCTION(); -} - -/*! -* Handle setting dialog showing up. -* If the setting dialog was launched from the setting grid, hide grid now. -* @param action Action that launched the dialog. -*/ -void CxuiPrecaptureView::prepareToShowDialog(HbAction *action) -{ - if (!action) { - return; - } - - // Check if the dialog was started from grid, and hide the grid now if needed. - QString fromGrid = action->property(PROPERTY_KEY_SETTING_GRID).toString(); - if (fromGrid.compare(QString(PROPERTY_KEY_TRUE)) == 0 ) { - hideSettingsGrid(); - } -} - -/*! -* Handle setting dialog closing down. -* If the setting dialog was launched from the setting grid, show grid again now. -* @param action Action that launched the dialog. -*/ -void CxuiPrecaptureView::prepareToCloseDialog(HbAction *action) -{ - // Check if the dialog was started from grid, and show the grid now if needed. - // Autofocus key-press will clear the action to disable showing the grid. - if (action) { - QString fromGrid = action->property(PROPERTY_KEY_SETTING_GRID).toString(); - if (fromGrid.compare(QString(PROPERTY_KEY_TRUE)) == 0 ) { - showSettingsGrid(); - } - // disable geotagging disclaimer after geotagging setting is triggered from FirstTimeUse dialog - QString settingId = action->property(PROPERTY_KEY_SETTING_ID).toString(); - CX_DEBUG(("settingsKey=%s", settingId.toAscii().constData())); - Cxe::GeoTaggingDisclaimer value = mEngine->settings().get(CxeSettingIds::GEOTAGGING_DISCLAIMER, Cxe::GeoTaggingDisclaimerDisabled); - if (settingId == CxeSettingIds::GEOTAGGING && value == Cxe::GeoTaggingDisclaimerEnabled) { - // disable geotagging first-time-use dialog - disableGeotaggingDisclaimer(); - } - } - - // Clear the starter actions to be sure they are not reused. - if (mSettingsDialog) { - mSettingsDialog->setStarterAction(NULL); - } - if (mSliderSettingsDialog) { - mSliderSettingsDialog->setStarterAction(NULL); - } - - // Dialog will be deleted automatically when closed - // The pointers may become invalid at any time - mSettingsDialog = NULL; - mSettingsDialogList = NULL; - mSettingsDialogHeading = NULL; - - mSliderSettingsDialog = NULL; - mSliderSettingsDialogHeading = NULL; - mSettingsSlider = NULL; -} - - - -/*! -*Helper method to create setting dialog -*/ -CxuiSettingDialog* CxuiPrecaptureView::createSettingsDialog() -{ - CX_DEBUG_ENTER_FUNCTION(); - - CX_DEBUG(("Loading popup DocML")); - CxuiDocumentLoader *documentLoader = new CxuiDocumentLoader(mEngine); - - // Use document loader to create popup - bool ok = false; - documentLoader->load(SETTINGS_DIALOG_XML, &ok); - CX_DEBUG(("load ok=%d", ok)); - - CxuiSettingDialog *dialog = - qobject_cast(documentLoader->findWidget(SETTINGS_DIALOG_WIDGET)); - CX_ASSERT_ALWAYS(dialog); - - dialog->setTimeout(HbDialog::NoTimeout); - dialog->setBackgroundFaded(false); - - mSettingsDialogHeading = qobject_cast( - documentLoader->findWidget(SETTINGS_DIALOG_HEADING_WIDGET)); - CX_ASSERT_ALWAYS(mSettingsDialogHeading); - - mSettingsDialogList = qobject_cast( - documentLoader->findWidget(SETTINGS_DIALOG_CONTENT_WIDGET)); - CX_ASSERT_ALWAYS(mSettingsDialogList); - - // The radio button size policy defaults to "Expanding" which makes it - // always full screen. Let's override the policy here to make the layout - // reasonable. - mSettingsDialogList->setSizePolicy(QSizePolicy(QSizePolicy::Ignored, - QSizePolicy::Maximum)); - - QObject *object = documentLoader->findObject(SETTINGS_DIALOG_OK_ACTION); - mSettingsDialogOkAction = qobject_cast(object); - CX_DEBUG_ASSERT(mSettingsDialogOkAction); - - CX_DEBUG_EXIT_FUNCTION(); - - delete documentLoader; - documentLoader = NULL; - - return dialog; -} - - - -/*! -*Helper method to create setting dialog -*/ -void CxuiPrecaptureView::launchSettingsDialog(QObject* action) -{ - CX_DEBUG_ENTER_FUNCTION(); - - if (!action) { - return; - } - - hideControls(); - - QString key = action->property(PROPERTY_KEY_SETTING_ID).toString(); - CX_DEBUG(("settingsKey=%s", key.toAscii().constData())); - - RadioButtonListParams data; - - // Load data and check that the setting is supported. - if (mSettingsInfo && mSettingsInfo->getSettingsContent(key, data)) { - - if (!mSettingsDialog) { - mSettingsDialog = createSettingsDialog(); - - connect(mSettingsDialog, SIGNAL(dialogAboutToShow(HbAction *)), - this, SLOT(prepareToShowDialog(HbAction *))); - connect(mSettingsDialog, SIGNAL(dialogAboutToClose(HbAction *)), - this, SLOT(prepareToCloseDialog(HbAction *))); - } - - if (mSettingsDialogHeading) { - mSettingsDialogHeading->setPlainText(data.mHeading); - } - - if (mSettingsDialogList) { - mSettingsDialogList->init(&data); - } - - if (mSettingsDialog) { - // Store action that starts the dialog. - // Dialog passes this along with it's signals, - // so we can easily decide if we show grid again or not. - mSettingsDialog->setStarterAction(qobject_cast(action)); - - if (mSettingsDialogOkAction) { - // disconnect ok action from dialog so that dialog won't be closed - // automatically when action is triggered. handleSelectionAccepted - // is called instead - mSettingsDialogOkAction->disconnect(mSettingsDialog); - connect(mSettingsDialogOkAction, SIGNAL(triggered()), mSettingsDialogList, SLOT(handleSelectionAccepted())); - - // Close the dialog when new setting value is committed - connect(mSettingsDialogList, SIGNAL(selectionCommitted()), mSettingsDialog, SLOT(close())); - - connect(mSettingsDialog, SIGNAL(aboutToClose()), mSettingsDialogList, SLOT(handleClose())); - } - - // Adjust position and show the dialog. - mSettingsDialog->setPreferredPos(getDialogPosition(), HbPopup::BottomRightCorner); - mSettingsDialog->setAttribute(Qt::WA_DeleteOnClose, true); - mSettingsDialog->show(); - - } - } else { - launchNotSupportedNotification(); - } - - CX_DEBUG_EXIT_FUNCTION(); -} - -/*! -*Helper method to create slider setting dialog -*/ -CxuiSettingDialog* CxuiPrecaptureView::createSliderSettingsDialog() -{ - CX_DEBUG_ENTER_FUNCTION(); - - CX_DEBUG(("Loading dialog DocML")); - CxuiDocumentLoader *documentLoader = new CxuiDocumentLoader(mEngine); - - // Use document loader to create popup - bool ok = false; - documentLoader->load(SETTINGS_SLIDER_DIALOG_XML, &ok); - CX_DEBUG(("load ok=%d", ok)); - - CxuiSettingDialog *dialog = - qobject_cast(documentLoader->findWidget(SETTINGS_SLIDER_DIALOG_WIDGET)); - CX_ASSERT_ALWAYS(dialog); - - dialog->setTimeout(HbDialog::NoTimeout); - dialog->setBackgroundFaded(false); - - mSliderSettingsDialogHeading = qobject_cast( - documentLoader->findWidget(SETTINGS_SLIDER_DIALOG_HEADING_WIDGET)); - CX_ASSERT_ALWAYS(mSliderSettingsDialogHeading); - - mSettingsSlider = qobject_cast( - documentLoader->findWidget(SETTINGS_SLIDER_DIALOG_CONTENT_WIDGET)); - CX_ASSERT_ALWAYS(mSettingsSlider); - - QObject *object = documentLoader->findObject(SETTINGS_DIALOG_OK_ACTION); - mSliderSettingsDialogOkAction = qobject_cast(object); - CX_DEBUG_ASSERT(mSliderSettingsDialogOkAction); - - CX_DEBUG_EXIT_FUNCTION(); - - delete documentLoader; - documentLoader = NULL; - - return dialog; - -} - - -void CxuiPrecaptureView::launchSliderSetting() -{ - CX_DEBUG_ENTER_FUNCTION(); - - QObject *action = sender(); - if (!action) { - return; - } - - hideControls(); - - QString key = action->property(PROPERTY_KEY_SETTING_ID).toString(); - CX_DEBUG(("settingsKey=%s", key.toAscii().constData())); - - SliderParams data; - - // Load data and check that the setting is supported. - if (mSettingsInfo && mSettingsInfo->getSettingsContent(key, data)) { - - if (!mSliderSettingsDialog) { - mSliderSettingsDialog = createSliderSettingsDialog(); - - connect(mSliderSettingsDialog, SIGNAL(dialogAboutToShow(HbAction *)), - this, SLOT(prepareToShowDialog(HbAction *))); - connect(mSliderSettingsDialog, SIGNAL(dialogAboutToClose(HbAction *)), - this, SLOT(prepareToCloseDialog(HbAction *))); - } - - if (mSliderSettingsDialogHeading) { - mSliderSettingsDialogHeading->setPlainText(data.mHeading); - } - - if (mSettingsSlider) { - mSettingsSlider->init(&data); - } - - if(mSliderSettingsDialog && mSettingsSlider) { - // Store action that starts the dialog. - // Dialog passes this along with it's signals, - // so we can easily decide if we show grid again or not. - mSliderSettingsDialog->setStarterAction(qobject_cast(action)); - - if (mSliderSettingsDialogOkAction) { - // disconnect ok action from dialog so that dialog won't be closed - // automatically when action is triggered. handleSelectionAccepted - // is called instead - mSliderSettingsDialogOkAction->disconnect(mSliderSettingsDialog); - connect(mSliderSettingsDialogOkAction, SIGNAL(triggered()), mSettingsSlider, SLOT(handleSelectionAccepted())); - - // Close the dialog when new setting value is committed - connect(mSettingsSlider, SIGNAL(selectionCommitted()), mSliderSettingsDialog, SLOT(close())); - - connect(mSliderSettingsDialog, SIGNAL(aboutToClose()), mSettingsSlider, SLOT(handleClose())); - } - - // Adjust position and show the dialog. - mSliderSettingsDialog->setFrameType(HbPopup::Weak); - mSliderSettingsDialog->setPreferredPos(getDialogPosition(), HbPopup::BottomRightCorner); - mSliderSettingsDialog->setAttribute(Qt::WA_DeleteOnClose, true); - mSliderSettingsDialog->show(); - - } - } else { - launchNotSupportedNotification(); - } - - CX_DEBUG_EXIT_FUNCTION(); -} - -/** -* Show settings grid. -*/ -void CxuiPrecaptureView::showSettingsGrid() -{ - CX_DEBUG_ENTER_FUNCTION(); - - // Create grid if it's not shown before. - initializeSettingsGrid(); - - // Show grid modally. - // This call will still not block until grid is dismissed. - if(mSettingsGrid) { - mSettingsGrid->setModal(true); - mSettingsGrid->show(); - HbEffect::start(mSettingsGrid, "toolbarextension", "toolbarextension_appear"); - } - - CX_DEBUG_EXIT_FUNCTION(); -} - -/*! -* Hide the settings grid dialog. -*/ -void CxuiPrecaptureView::hideSettingsGrid() -{ - CX_DEBUG_ENTER_FUNCTION(); - if (mSettingsGrid) { - // Hiding of the settingsgrid will be done after effect has finished - HbEffect::start(mSettingsGrid, "toolbarextension", "toolbarextension_disappear", this, "toolbarExtensionDisappearEffectFinished"); - } - CX_DEBUG_EXIT_FUNCTION(); -} - -/*! -* Returns dialogs bottom right corner -*/ -QPointF CxuiPrecaptureView::getDialogPosition() -{ - HbStyle *style = HbInstance::instance()->style(); - - if (style) { - qreal bottomMargin = 0.0f; - qreal rightMargin = 0.0f; - bool ok = style->parameter("hb-param-margin-gene-bottom", - bottomMargin); - CX_DEBUG_ASSERT(ok); - ok = style->parameter("hb-param-margin-gene-right", - rightMargin); - CX_DEBUG_ASSERT(ok); - - // calculate dialog's bottom right position - QSize deviceRes = - mEngine->viewfinderControl().deviceDisplayResolution(); - QPointF point(deviceRes.width() - rightMargin, - deviceRes.height() - bottomMargin); - - style = NULL; // owned by HbInstance - return point; - } else { - return QPointF(); // (0, 0) - } -} - - -/*! - Get setting item icon for given value. - \param key Setting key (CxeSettingIds) - \param value Setting value - \return Returns string containing icon locigal name -*/ -QString CxuiPrecaptureView::getSettingItemIcon(const QString &key, QVariant value) -{ - CX_DEBUG_ENTER_FUNCTION(); - CxUiSettings::RadioButtonListParams data; - QString icon = ""; - if (mSettingsInfo && mSettingsInfo->getSettingsContent(key, data)) { - CxUiSettings::SettingItem setting; - foreach (setting, data.mSettingPairList) { - if (setting.mValue == value) { - icon = setting.mIcon; - break; - } - } - } - - CX_DEBUG((("Setting icon name [%s]"), icon.toAscii().constData())); - CX_DEBUG_EXIT_FUNCTION(); - return icon; -} - -void CxuiPrecaptureView::handleSettingValueChanged(const QString& key, QVariant newValue) -{ - CX_DEBUG_ENTER_FUNCTION(); - Q_UNUSED(key); - Q_UNUSED(newValue); - CX_DEBUG_EXIT_FUNCTION(); -} - -/*! - * Slot to keep track of state changes in GeotaggingLocation trail. We use these states to update - * the UI by enabling right icon. - */ -void CxuiPrecaptureView::updateLocationIndicator(CxeGeoTaggingTrail::State newState, CxeError::Id error) -{ - CX_DEBUG( ("CxuiPrecaptureView::updateLocationIndicator <> error: %d ", error)); - - if (mGeoTaggingIndicatorIcon) { - if (newState == CxeGeoTaggingTrail::DataAvailable && error == CxeError::None) { - CX_DEBUG(("CxuiPrecaptureView::updateLocationIndicator GPS data available, showing icon")); - mGeoTaggingIndicatorIcon->setIcon(HbIcon("qtg_mono_geotag")); - mGeoTaggingIndicatorIcon->show(); - } else { - CX_DEBUG(("CxuiPrecaptureView::handleIconChanged GPS data not available")); - mGeoTaggingIndicatorIcon->hide(); - } - } - - CX_DEBUG_EXIT_FUNCTION(); -} - - -void CxuiPrecaptureView::toolbarExtensionDisappearEffectFinished(const HbEffect::EffectStatus &status) { - if (mSettingsGrid) { - mSettingsGrid->hide(); - } -} - -void CxuiPrecaptureView::toolbarExtensionAppearEffectFinished(const HbEffect::EffectStatus &status) { -} - - - -/*! -* Lauches "Geotagging first-time use" notification to the user -*/ -void CxuiPrecaptureView::launchGeoTaggingDisclaimerDialog() -{ - CX_DEBUG_ENTER_FUNCTION(); - - HbMessageBox *ftuMessageBox = new HbMessageBox(hbTrId("txt_cam_info_captured_photos_and_videos_will_be_ta"), - HbMessageBox::MessageTypeInformation); - - HbAction *okAction = new HbAction(hbTrId("txt_common_button_ok")); - HbAction *settingsAction = new HbAction(hbTrId("txt_cam_info_geotagging_ftu_note_settings_button")); - - // connecting signals for dialog's actions - connect(okAction, - SIGNAL(triggered()), - this, - SLOT(disableGeotaggingDisclaimer())); - - connect(settingsAction, - SIGNAL(triggered()), - this, - SLOT(launchGeoTaggingSetting())); - - // adding buttons to the information message - ftuMessageBox->setStandardButtons(HbMessageBox::NoButton); - ftuMessageBox->addAction(okAction); - ftuMessageBox->addAction(settingsAction); - - ftuMessageBox->setAttribute(Qt::WA_DeleteOnClose, true); - ftuMessageBox->show(); - - CX_DEBUG_EXIT_FUNCTION(); -} - -/*! -* Slot that disables Geotagging first-time use notification. -*/ -void CxuiPrecaptureView::disableGeotaggingDisclaimer() -{ - CX_DEBUG_ENTER_FUNCTION(); - - // disable geotagging first-time-use dialog - mEngine->settings().set(CxeSettingIds::GEOTAGGING_DISCLAIMER, Cxe::GeoTaggingDisclaimerDisabled); - - CX_DEBUG_EXIT_FUNCTION(); -} - - -/*! -* Slot that launches geotagging setting dialog. -*/ -void CxuiPrecaptureView::launchGeoTaggingSetting() -{ - CX_DEBUG_ENTER_FUNCTION(); - - QObject *action = sender(); - action->setProperty(PROPERTY_KEY_SETTING_ID, CxeSettingIds::GEOTAGGING); - launchSettingsDialog(action); - - CX_DEBUG_EXIT_FUNCTION(); -} - -// end of file -