--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/camerauis/cameraxui/cxui/src/cxuiview.cpp Tue Aug 31 15:03:46 2010 +0300
@@ -0,0 +1,473 @@
+/*
+* 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:
+*
+*/
+
+#include <QGraphicsItem>
+#include <QProcess>
+#include <QGraphicsSceneEvent>
+#include <hbtoolbar.h>
+#include <hbnotificationdialog.h>
+#include <hbframeitem.h>
+#include <hbeffect.h>
+#include "cxuiview.h"
+#include "cxutils.h"
+#include "cxeengine.h"
+#include "cxuidocumentloader.h"
+#include "cxuicapturekeyhandler.h"
+#include "cxecameradevicecontrol.h"
+#include "cxevideocapturecontrol.h"
+#include "cxuizoomslider.h"
+#include "cxezoomcontrol.h"
+
+// CONSTANTS
+const QString PhotosAppExe = "photos.exe";
+const QString VideosAppExe = "videoplayer.exe";
+
+/*!
+* Constructor
+*/
+CxuiView::CxuiView(QGraphicsItem *parent) :
+ HbView(parent),
+ mMainWindow(NULL),
+ mEngine(NULL),
+ mDocumentLoader(NULL),
+ mSlider(NULL),
+ mToolbar(NULL),
+ mIndicators(NULL),
+ mHideControlsTimeout(this),
+ mControlsFeedback(HbFeedback::BasicItem)
+{
+ CX_DEBUG_IN_FUNCTION();
+}
+
+/*!
+* Destructor
+*/
+CxuiView::~CxuiView()
+{
+ CX_DEBUG_IN_FUNCTION();
+}
+
+/*!
+* CxuiView::construct
+*/
+void CxuiView::construct(HbMainWindow *mainWindow, CxeEngine *engine,
+ CxuiDocumentLoader *documentLoader,
+ CxuiCaptureKeyHandler * keyHandler,
+ HbActivityManager *activityManager)
+{
+ CX_DEBUG_ENTER_FUNCTION();
+
+ //Minimum requirements to construct the view
+ CX_ASSERT_ALWAYS(mainWindow);
+ CX_ASSERT_ALWAYS(engine);
+ CX_ASSERT_ALWAYS(documentLoader);
+ CX_ASSERT_ALWAYS(activityManager);
+
+ mMainWindow = mainWindow;
+ mDocumentLoader = documentLoader;
+ mCaptureKeyHandler = keyHandler;
+ mEngine = engine;
+ mActivityManager = activityManager;
+
+ // 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);
+
+ HbEffect::add("zoombar", "camera_zoom_appear", "zoom_appear");
+ HbEffect::add("zoombar", "camera_zoom_disappear", "zoom_disappear");
+
+ mControlsFeedback.setOwningWindow(mMainWindow);
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+/*!
+* Is standby mode supported / needed by this view.
+* Default implementation returns false.
+* Inherited classes need to re-implement this if standby mode is needed.
+* @return True if standby mode is supported, false otherwise.
+*/
+bool CxuiView::isStandbyModeSupported() const
+{
+ return false;
+}
+
+
+/*!
+* CxuiView::updateOrientation
+*/
+void CxuiView::updateOrientation(Qt::Orientation orientation)
+{
+ CX_DEBUG_ENTER_FUNCTION();
+
+ hideControls();
+ mMainWindow->setOrientation(orientation);
+
+ if (mToolbar) {
+ if (orientation == Qt::Horizontal) {
+ mToolbar->setOrientation(Qt::Vertical);
+ } else {
+ mToolbar->setOrientation(Qt::Horizontal);
+ }
+ }
+
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+
+/*!
+ * Restore view state from activity. Default implementation does nothing.
+ */
+void CxuiView::restoreActivity(const QString &activityId, const QVariant &data)
+{
+ Q_UNUSED(activityId);
+ Q_UNUSED(data);
+}
+
+/*!
+ * Save view state to activity. Default implementation does nothing.
+ */
+void CxuiView::saveActivity()
+{
+
+}
+
+/*!
+ * Clear activity from activity manager. Default implementation does nothing.
+ */
+void CxuiView::clearActivity()
+{
+
+}
+
+/*!
+* Allow showing UI controls?
+* Default behaviour is that controls can be shown at any time.
+*/
+bool CxuiView::allowShowControls() const
+{
+ return true;
+}
+
+/*!
+ * Play feedback when touching view outside of any widget?
+ * Default behaviour is that feedback is always played.
+ */
+bool CxuiView::isFeedbackEnabled() const
+{
+ return true;
+}
+
+/*!
+* Toggle visibility of UI controls.
+*/
+void CxuiView::toggleControls()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+
+ if (mControlsVisible) {
+ hideControls();
+ } else {
+ showControls();
+ }
+
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+/*!
+* Slot for entering standby mode.
+* By default, release camera.
+*/
+void CxuiView::enterStandby()
+{
+ CX_DEBUG_IN_FUNCTION();
+ releaseCamera();
+ CX_DEBUG_IN_FUNCTION();
+}
+
+/*!
+* Slot for exiting standby mode.
+* By default, no action needed.
+*/
+void CxuiView::exitStandby()
+{
+ CX_DEBUG_IN_FUNCTION();
+}
+
+/*!
+* CxuiView::launchNotSupportedNotification
+* Show "not supported" notification.
+*/
+void CxuiView::launchNotSupportedNotification()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ HbNotificationDialog::launchDialog("Notification", "Not supported yet");
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+/*!
+ * CxuiView::launchScenesView
+ */
+void CxuiView::launchScenesView()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ hideControls();
+ emit showScenesView();
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+/*!
+ * CxuiView::launchPhotosApp
+ */
+void CxuiView::launchPhotosApp()
+{
+ // Release camera device in order to free resources for Photos application
+ releaseCamera();
+ QProcess::startDetached(PhotosAppExe);
+}
+
+/*!
+ * CxuiView::launchVideosApp
+ * Launching Videos application as a separate process
+ */
+void CxuiView::launchVideosApp()
+{
+ // Release camera device in order to free resources for Videos application
+ releaseCamera();
+ QProcess::startDetached(VideosAppExe);
+}
+
+/*!
+ * Releasing camera hw
+ */
+void CxuiView::releaseCamera()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ mEngine->cameraDeviceControl().release();
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+/*!
+ * CxuiView::hideControls
+ */
+void CxuiView::hideControls()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+
+ if (mHideControlsTimeout.isActive()) {
+ mHideControlsTimeout.stop();
+ }
+
+ setTitleBarVisible(false);
+ setStatusBarVisible(false);
+
+ hideZoom();
+
+ hideToolbar();
+
+ // show indicators when controls are hidden
+ showIndicators();
+
+ mControlsVisible = false;
+
+ // give the keyboard focus back to the view
+ // for the view to receive key events
+ setFocus();
+
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+/*!
+ * CxuiView::showControls
+ */
+void CxuiView::showControls()
+{
+ if (allowShowControls()) {
+ // show toolbar
+ showToolbar();
+
+ // show zoom
+ showZoom();
+
+ // show title bar and status bar
+ setTitleBarVisible(true);
+ setStatusBarVisible(true);
+
+ // hide indicators when controls are shown
+ hideIndicators();
+
+ mHideControlsTimeout.start();
+ mControlsVisible = true;
+ }
+}
+
+/*!
+ * CxuiView::hideToolbar
+ */
+void CxuiView::hideToolbar()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ if (mToolbar) {
+ mToolbar->hide();
+ }
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+/*!
+ * CxuiView::showToolbar
+ */
+void CxuiView::showToolbar()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ if (mToolbar) {
+ mToolbar->show();
+ }
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+/*!
+ * CxuiView::hideIndicators
+ */
+void CxuiView::hideIndicators()
+{
+ if (mIndicators) {
+ mIndicators->hide();
+ }
+}
+
+/*!
+ * CxuiView::showIndicators
+ */
+void CxuiView::showIndicators()
+{
+ if (mIndicators) {
+ mIndicators->show();
+ }
+}
+
+/*!
+ * CxuiView::hideZoom
+ */
+void CxuiView::hideZoom()
+{
+ if (mSlider) {
+ // Hiding of the slider will be done after effect has finished
+ HbEffect::start(mSlider, "zoombar", "zoom_disappear", this, "zoomDisappearEffectFinished");
+ }
+ mZoomVisible = false;
+}
+
+/*!
+ * CxuiView::showZoom
+ */
+void CxuiView::showZoom()
+{
+ CX_DEBUG_ENTER_FUNCTION();
+ if (mSlider) {
+
+ // if maxVal has not been set yet, ask for new parameters from engine
+ if (mSlider->maximum() <= 0) {
+
+ // get the zoom range
+ int min = mEngine->zoomControl().min();
+ int max = mEngine->zoomControl().max();
+
+ // only change values if they are acceptable and have changed
+ if ((max - min > 0) && ((mSlider->maximum() != max) || (mSlider->minimum() != min))) {
+ mSlider->setRange(min, max);
+ }
+ }
+
+ // show zoom only if the slider has acceptable value
+ if (mSlider->maximum() > 0) {
+ mSlider->show();
+ }
+ HbEffect::start(mSlider, "zoombar", "zoom_appear");
+ }
+
+ mZoomVisible = true;
+ CX_DEBUG_EXIT_FUNCTION();
+}
+
+/*!
+* Function can be used to create a graphics item and setting it as a background
+* item for HbWidget. graphicName refers to system wide graphic name. Given graphic
+* can consist of one, three or nine pieces. Nine piece graphics are used by default.
+* See HbFrameDrawer documentation for graphic naming.
+*/
+void CxuiView::createWidgetBackgroundGraphic(HbWidget *widget,
+ const QString &graphicName,
+ HbFrameDrawer::FrameType frameType)
+{
+ if (widget) {
+ HbFrameDrawer *drawer = new HbFrameDrawer(graphicName, frameType);
+
+ if (drawer) {
+ HbFrameItem *backgroundItem = new HbFrameItem(drawer, widget);
+ if (backgroundItem) {
+ // set item to fill the whole widget
+ backgroundItem->setGeometry(QRectF(QPointF(0, 0), widget->size()));
+ backgroundItem->setZValue(0);
+ widget->setBackgroundItem(backgroundItem);
+ }
+ }
+ }
+}
+
+/*!
+ * Handle mouse press events on this view. Needed to implement toggling of
+ * controls and playing feedback.
+ * \param event event to be handled
+ */
+void CxuiView::mousePressEvent(QGraphicsSceneMouseEvent *event)
+{
+ //! @todo temporary workaround for title bar mouse event handling bug
+ if (event->type() == QEvent::GraphicsSceneMousePress && event->scenePos().y() > 70 &&
+ isFeedbackEnabled()) {
+ mControlsFeedback.setModalities(HbFeedback::All);
+ mControlsFeedback.play();
+ event->accept();
+ }
+}
+
+/*!
+ * Handle mouse release events on this view. Needed to implement toggling of
+ * controls and playing feedback.
+ * \param event to be handled
+ */
+void CxuiView::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
+{
+ //! @todo temporary workaround for title bar mouse event handling bug
+ if (event->type() == QEvent::GraphicsSceneMouseRelease && event->scenePos().y() > 70 &&
+ isFeedbackEnabled()) {
+ mControlsFeedback.setModalities(HbFeedback::Tactile);
+ mControlsFeedback.play();
+ toggleControls();
+ event->accept();
+ }
+}
+
+void CxuiView::zoomDisappearEffectFinished(const HbEffect::EffectStatus &status) {
+ if (mSlider) {
+ mSlider->hide();
+ }
+}
+
+void CxuiView::zoomAppearEffectFinished(const HbEffect::EffectStatus &status) {
+}
+
+// End of file