diff -r 01e205c615b9 -r a289dde0a1d6 camerauis/cameraxui/cxengine/src/cxeviewfindercontroldesktop.cpp --- a/camerauis/cameraxui/cxengine/src/cxeviewfindercontroldesktop.cpp Thu Sep 02 20:14:28 2010 +0300 +++ b/camerauis/cameraxui/cxengine/src/cxeviewfindercontroldesktop.cpp Fri Sep 17 08:27:13 2010 +0300 @@ -16,6 +16,7 @@ */ #include +#include #include #include #include @@ -52,21 +53,9 @@ if (state() != Running) { mState = Ready; emit stateChanged(mState, CxeError::None); - CX_DEBUG_EXIT_FUNCTION(); } - - HbMainWindow* mainWindow = qobject_cast(QWidget::find(mWindowId)); - - if (mainWindow) { - if( !mViewfinderWidget) { - mViewfinderWidget = new CxeViewfinderWidgetDesktop(); - connect(&mCameraDevice, SIGNAL(imageChanged(QPixmap)), mViewfinderWidget, SLOT(handleImageChange(QPixmap))); - } - HbView* view = mainWindow->currentView(); - view->scene()->addItem(mViewfinderWidget); - mViewfinderWidget->setZValue(-1.0); - } + CX_DEBUG_EXIT_FUNCTION(); } /*! @@ -76,6 +65,9 @@ CxeError::Id CxeViewfinderControlDesktop::start() { CX_DEBUG_ENTER_FUNCTION(); + + createViewfinderWidget(); + if (mState != Running) { mState = Running; emit stateChanged(mState, CxeError::None); @@ -113,4 +105,45 @@ return mResolution; } +/*! +* Create the viewfinder widget. +*/ +void CxeViewfinderControlDesktop::createViewfinderWidget() +{ + CX_DEBUG_ENTER_FUNCTION(); + HbMainWindow* mainWindow = qobject_cast(QWidget::find(mWindowId)); + if (mainWindow) { + CX_DEBUG(("Found main window.")); + // Remove the current viewfinder from previous view scene. + // Ownership is returned, so delete it now. + if (mViewfinderWidget) { + mViewfinderWidget->setParentItem(0); + mainWindow->scene()->removeItem(mViewfinderWidget); + delete mViewfinderWidget; + mViewfinderWidget = 0; + } + + // Find the visible transparent window and place our viewfinder widget as it's child. + HbView* view = mainWindow->currentView(); + const QList itemList(view->scene()->items()); + foreach (QGraphicsItem *item, itemList) { + if (item->type() == Hb::ItemType_TransparentWindow) { + CX_DEBUG(("Found transparent window, name: %s", + item->toGraphicsObject() + ? qPrintable(item->toGraphicsObject()->objectName()) + : qPrintable(QString("")))); + bool visible(item->isVisible()); + CX_DEBUG(("Is found transparent window visible: %s", qPrintable(QVariant::fromValue(visible).toString()))); + if (visible) { + mViewfinderWidget = new CxeViewfinderWidgetDesktop(); + connect(&mCameraDevice, SIGNAL(imageChanged(QPixmap)), mViewfinderWidget, SLOT(handleImageChange(QPixmap))); + mViewfinderWidget->setParentItem(item); + break; + } + } + } + } + CX_DEBUG_EXIT_FUNCTION(); +} + // end of file