camerauis/cameraxui/cxengine/src/cxeviewfindercontroldesktop.cpp
changeset 60 a289dde0a1d6
parent 48 42ba2d16bf40
equal deleted inserted replaced
56:01e205c615b9 60:a289dde0a1d6
    14 * Description:
    14 * Description:
    15 *
    15 *
    16 */
    16 */
    17 
    17 
    18 #include <HbMainWindow>
    18 #include <HbMainWindow>
       
    19 #include <HbTransparentWindow>
    19 #include <HbView>
    20 #include <HbView>
    20 #include <HbLabel>
    21 #include <HbLabel>
    21 #include <QGraphicsLinearLayout>
    22 #include <QGraphicsLinearLayout>
    22 #include "cxeviewfindercontroldesktop.h"
    23 #include "cxeviewfindercontroldesktop.h"
    23 #include "cxecameradevicedesktop.h"
    24 #include "cxecameradevicedesktop.h"
    50     mWindowId = windowId;
    51     mWindowId = windowId;
    51 
    52 
    52     if (state() != Running) {
    53     if (state() != Running) {
    53         mState = Ready;
    54         mState = Ready;
    54         emit stateChanged(mState, CxeError::None);
    55         emit stateChanged(mState, CxeError::None);
    55     CX_DEBUG_EXIT_FUNCTION();
       
    56     }
    56     }
    57 
    57 
    58 
    58     CX_DEBUG_EXIT_FUNCTION();
    59     HbMainWindow* mainWindow = qobject_cast<HbMainWindow*>(QWidget::find(mWindowId));
       
    60 
       
    61     if (mainWindow) {
       
    62         if( !mViewfinderWidget) {
       
    63             mViewfinderWidget = new CxeViewfinderWidgetDesktop();
       
    64             connect(&mCameraDevice, SIGNAL(imageChanged(QPixmap)), mViewfinderWidget, SLOT(handleImageChange(QPixmap)));
       
    65         }
       
    66         HbView* view = mainWindow->currentView();
       
    67         view->scene()->addItem(mViewfinderWidget);
       
    68         mViewfinderWidget->setZValue(-1.0);
       
    69     }
       
    70 }
    59 }
    71 
    60 
    72 /*!
    61 /*!
    73 * Start viewfinder
    62 * Start viewfinder
    74 * @return CxeEngine specific error code
    63 * @return CxeEngine specific error code
    75 */
    64 */
    76 CxeError::Id CxeViewfinderControlDesktop::start()
    65 CxeError::Id CxeViewfinderControlDesktop::start()
    77 {
    66 {
    78     CX_DEBUG_ENTER_FUNCTION();
    67     CX_DEBUG_ENTER_FUNCTION();
       
    68 
       
    69     createViewfinderWidget();
       
    70 
    79     if (mState != Running) {
    71     if (mState != Running) {
    80         mState = Running;
    72         mState = Running;
    81         emit stateChanged(mState, CxeError::None);
    73         emit stateChanged(mState, CxeError::None);
    82         mCameraDevice.start();
    74         mCameraDevice.start();
    83     }
    75     }
   111 QSize CxeViewfinderControlDesktop::deviceDisplayResolution() const
   103 QSize CxeViewfinderControlDesktop::deviceDisplayResolution() const
   112 {
   104 {
   113     return mResolution;
   105     return mResolution;
   114 }
   106 }
   115 
   107 
       
   108 /*!
       
   109 * Create the viewfinder widget.
       
   110 */
       
   111 void CxeViewfinderControlDesktop::createViewfinderWidget()
       
   112 {
       
   113     CX_DEBUG_ENTER_FUNCTION();
       
   114     HbMainWindow* mainWindow = qobject_cast<HbMainWindow*>(QWidget::find(mWindowId));
       
   115     if (mainWindow) {
       
   116         CX_DEBUG(("Found main window."));
       
   117         // Remove the current viewfinder from previous view scene.
       
   118         // Ownership is returned, so delete it now.
       
   119         if (mViewfinderWidget) {
       
   120             mViewfinderWidget->setParentItem(0);
       
   121             mainWindow->scene()->removeItem(mViewfinderWidget);
       
   122             delete mViewfinderWidget;
       
   123             mViewfinderWidget = 0;
       
   124         }
       
   125 
       
   126         // Find the visible transparent window and place our viewfinder widget as it's child.
       
   127         HbView* view = mainWindow->currentView();
       
   128         const QList<QGraphicsItem *> itemList(view->scene()->items());
       
   129         foreach (QGraphicsItem *item, itemList) {
       
   130             if (item->type() == Hb::ItemType_TransparentWindow) {
       
   131                 CX_DEBUG(("Found transparent window, name: %s",
       
   132                           item->toGraphicsObject()
       
   133                           ? qPrintable(item->toGraphicsObject()->objectName())
       
   134                           : qPrintable(QString("<unknown>"))));
       
   135                 bool visible(item->isVisible());
       
   136                 CX_DEBUG(("Is found transparent window visible: %s", qPrintable(QVariant::fromValue(visible).toString())));
       
   137                 if (visible) {
       
   138                     mViewfinderWidget = new CxeViewfinderWidgetDesktop();
       
   139                     connect(&mCameraDevice, SIGNAL(imageChanged(QPixmap)), mViewfinderWidget, SLOT(handleImageChange(QPixmap)));
       
   140                     mViewfinderWidget->setParentItem(item);
       
   141                     break;
       
   142                 }
       
   143             }
       
   144         }
       
   145     }
       
   146     CX_DEBUG_EXIT_FUNCTION();
       
   147 }
       
   148 
   116 // end of file
   149 // end of file