camerauis/cameraxui/cxengine/src/cxeviewfindercontroldesktop.cpp
changeset 60 a289dde0a1d6
parent 48 42ba2d16bf40
--- 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 <HbMainWindow>
+#include <HbTransparentWindow>
 #include <HbView>
 #include <HbLabel>
 #include <QGraphicsLinearLayout>
@@ -52,21 +53,9 @@
     if (state() != Running) {
         mState = Ready;
         emit stateChanged(mState, CxeError::None);
-    CX_DEBUG_EXIT_FUNCTION();
     }
 
-
-    HbMainWindow* mainWindow = qobject_cast<HbMainWindow*>(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<HbMainWindow*>(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<QGraphicsItem *> 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("<unknown>"))));
+                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