camerauis/cameraxui/cxengine/src/cxeviewfindercontroldesktop.cpp
author hgs
Fri, 03 Sep 2010 11:00:58 +0300
changeset 55 0da2a5b56583
parent 46 c826656d6714
permissions -rw-r--r--
201035_1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
46
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
#include <HbMainWindow>
55
0da2a5b56583 201035_1
hgs
parents: 46
diff changeset
    19
#include <HbTransparentWindow>
46
hgs
parents:
diff changeset
    20
#include <HbView>
hgs
parents:
diff changeset
    21
#include <HbLabel>
hgs
parents:
diff changeset
    22
#include <QGraphicsLinearLayout>
hgs
parents:
diff changeset
    23
#include "cxeviewfindercontroldesktop.h"
hgs
parents:
diff changeset
    24
#include "cxecameradevicedesktop.h"
hgs
parents:
diff changeset
    25
#include "cxeviewfinderwidgetdesktop.h"
hgs
parents:
diff changeset
    26
#include "cxutils.h"
hgs
parents:
diff changeset
    27
hgs
parents:
diff changeset
    28
const int KResWidth = 640;
hgs
parents:
diff changeset
    29
const int KResHeight = 360;
hgs
parents:
diff changeset
    30
hgs
parents:
diff changeset
    31
CxeViewfinderControlDesktop::CxeViewfinderControlDesktop(CxeCameraDeviceDesktop &cameraDevice) :
hgs
parents:
diff changeset
    32
        mState(Uninitialized),
hgs
parents:
diff changeset
    33
        mResolution(KResWidth, KResHeight),
hgs
parents:
diff changeset
    34
        mCameraDevice(cameraDevice),
hgs
parents:
diff changeset
    35
        mViewfinderWidget(0)
hgs
parents:
diff changeset
    36
{
hgs
parents:
diff changeset
    37
    CX_DEBUG_IN_FUNCTION();
hgs
parents:
diff changeset
    38
}
hgs
parents:
diff changeset
    39
hgs
parents:
diff changeset
    40
CxeViewfinderControlDesktop::~CxeViewfinderControlDesktop()
hgs
parents:
diff changeset
    41
{
hgs
parents:
diff changeset
    42
    CX_DEBUG_IN_FUNCTION();
hgs
parents:
diff changeset
    43
}
hgs
parents:
diff changeset
    44
hgs
parents:
diff changeset
    45
/*!
hgs
parents:
diff changeset
    46
* Set Window ID
hgs
parents:
diff changeset
    47
*/
hgs
parents:
diff changeset
    48
void CxeViewfinderControlDesktop::setWindow(WId windowId)
hgs
parents:
diff changeset
    49
{
hgs
parents:
diff changeset
    50
    CX_DEBUG_ENTER_FUNCTION();
hgs
parents:
diff changeset
    51
    mWindowId = windowId;
hgs
parents:
diff changeset
    52
hgs
parents:
diff changeset
    53
    if (state() != Running) {
hgs
parents:
diff changeset
    54
        mState = Ready;
hgs
parents:
diff changeset
    55
        emit stateChanged(mState, CxeError::None);
hgs
parents:
diff changeset
    56
    }
hgs
parents:
diff changeset
    57
55
0da2a5b56583 201035_1
hgs
parents: 46
diff changeset
    58
    CX_DEBUG_EXIT_FUNCTION();
46
hgs
parents:
diff changeset
    59
}
hgs
parents:
diff changeset
    60
hgs
parents:
diff changeset
    61
/*!
hgs
parents:
diff changeset
    62
* Start viewfinder
hgs
parents:
diff changeset
    63
* @return CxeEngine specific error code
hgs
parents:
diff changeset
    64
*/
hgs
parents:
diff changeset
    65
CxeError::Id CxeViewfinderControlDesktop::start()
hgs
parents:
diff changeset
    66
{
hgs
parents:
diff changeset
    67
    CX_DEBUG_ENTER_FUNCTION();
55
0da2a5b56583 201035_1
hgs
parents: 46
diff changeset
    68
0da2a5b56583 201035_1
hgs
parents: 46
diff changeset
    69
    createViewfinderWidget();
0da2a5b56583 201035_1
hgs
parents: 46
diff changeset
    70
46
hgs
parents:
diff changeset
    71
    if (mState != Running) {
hgs
parents:
diff changeset
    72
        mState = Running;
hgs
parents:
diff changeset
    73
        emit stateChanged(mState, CxeError::None);
hgs
parents:
diff changeset
    74
        mCameraDevice.start();
hgs
parents:
diff changeset
    75
    }
hgs
parents:
diff changeset
    76
    CX_DEBUG_EXIT_FUNCTION();
hgs
parents:
diff changeset
    77
    return CxeError::None;
hgs
parents:
diff changeset
    78
}
hgs
parents:
diff changeset
    79
hgs
parents:
diff changeset
    80
/*!
hgs
parents:
diff changeset
    81
* Stop viewfinder
hgs
parents:
diff changeset
    82
*/
hgs
parents:
diff changeset
    83
void CxeViewfinderControlDesktop::stop()
hgs
parents:
diff changeset
    84
{
hgs
parents:
diff changeset
    85
    CX_DEBUG_ENTER_FUNCTION();
hgs
parents:
diff changeset
    86
    mState = Ready;
hgs
parents:
diff changeset
    87
    emit stateChanged(mState, CxeError::None);
hgs
parents:
diff changeset
    88
    mCameraDevice.stop();
hgs
parents:
diff changeset
    89
    CX_DEBUG_EXIT_FUNCTION();
hgs
parents:
diff changeset
    90
}
hgs
parents:
diff changeset
    91
hgs
parents:
diff changeset
    92
/*!
hgs
parents:
diff changeset
    93
* Current viewfinder state
hgs
parents:
diff changeset
    94
*/
hgs
parents:
diff changeset
    95
CxeViewfinderControl::State CxeViewfinderControlDesktop::state() const
hgs
parents:
diff changeset
    96
{
hgs
parents:
diff changeset
    97
    return mState;
hgs
parents:
diff changeset
    98
}
hgs
parents:
diff changeset
    99
hgs
parents:
diff changeset
   100
/*!
hgs
parents:
diff changeset
   101
* Returns Device's Display resolution
hgs
parents:
diff changeset
   102
*/
hgs
parents:
diff changeset
   103
QSize CxeViewfinderControlDesktop::deviceDisplayResolution() const
hgs
parents:
diff changeset
   104
{
hgs
parents:
diff changeset
   105
    return mResolution;
hgs
parents:
diff changeset
   106
}
hgs
parents:
diff changeset
   107
55
0da2a5b56583 201035_1
hgs
parents: 46
diff changeset
   108
/*!
0da2a5b56583 201035_1
hgs
parents: 46
diff changeset
   109
* Create the viewfinder widget.
0da2a5b56583 201035_1
hgs
parents: 46
diff changeset
   110
*/
0da2a5b56583 201035_1
hgs
parents: 46
diff changeset
   111
void CxeViewfinderControlDesktop::createViewfinderWidget()
0da2a5b56583 201035_1
hgs
parents: 46
diff changeset
   112
{
0da2a5b56583 201035_1
hgs
parents: 46
diff changeset
   113
    CX_DEBUG_ENTER_FUNCTION();
0da2a5b56583 201035_1
hgs
parents: 46
diff changeset
   114
    HbMainWindow* mainWindow = qobject_cast<HbMainWindow*>(QWidget::find(mWindowId));
0da2a5b56583 201035_1
hgs
parents: 46
diff changeset
   115
    if (mainWindow) {
0da2a5b56583 201035_1
hgs
parents: 46
diff changeset
   116
        CX_DEBUG(("Found main window."));
0da2a5b56583 201035_1
hgs
parents: 46
diff changeset
   117
        // Remove the current viewfinder from previous view scene.
0da2a5b56583 201035_1
hgs
parents: 46
diff changeset
   118
        // Ownership is returned, so delete it now.
0da2a5b56583 201035_1
hgs
parents: 46
diff changeset
   119
        if (mViewfinderWidget) {
0da2a5b56583 201035_1
hgs
parents: 46
diff changeset
   120
            mViewfinderWidget->setParentItem(0);
0da2a5b56583 201035_1
hgs
parents: 46
diff changeset
   121
            mainWindow->scene()->removeItem(mViewfinderWidget);
0da2a5b56583 201035_1
hgs
parents: 46
diff changeset
   122
            delete mViewfinderWidget;
0da2a5b56583 201035_1
hgs
parents: 46
diff changeset
   123
            mViewfinderWidget = 0;
0da2a5b56583 201035_1
hgs
parents: 46
diff changeset
   124
        }
0da2a5b56583 201035_1
hgs
parents: 46
diff changeset
   125
0da2a5b56583 201035_1
hgs
parents: 46
diff changeset
   126
        // Find the visible transparent window and place our viewfinder widget as it's child.
0da2a5b56583 201035_1
hgs
parents: 46
diff changeset
   127
        HbView* view = mainWindow->currentView();
0da2a5b56583 201035_1
hgs
parents: 46
diff changeset
   128
        const QList<QGraphicsItem *> itemList(view->scene()->items());
0da2a5b56583 201035_1
hgs
parents: 46
diff changeset
   129
        foreach (QGraphicsItem *item, itemList) {
0da2a5b56583 201035_1
hgs
parents: 46
diff changeset
   130
            if (item->type() == Hb::ItemType_TransparentWindow) {
0da2a5b56583 201035_1
hgs
parents: 46
diff changeset
   131
                CX_DEBUG(("Found transparent window, name: %s",
0da2a5b56583 201035_1
hgs
parents: 46
diff changeset
   132
                          item->toGraphicsObject()
0da2a5b56583 201035_1
hgs
parents: 46
diff changeset
   133
                          ? qPrintable(item->toGraphicsObject()->objectName())
0da2a5b56583 201035_1
hgs
parents: 46
diff changeset
   134
                          : qPrintable(QString("<unknown>"))));
0da2a5b56583 201035_1
hgs
parents: 46
diff changeset
   135
                bool visible(item->isVisible());
0da2a5b56583 201035_1
hgs
parents: 46
diff changeset
   136
                CX_DEBUG(("Is found transparent window visible: %s", qPrintable(QVariant::fromValue(visible).toString())));
0da2a5b56583 201035_1
hgs
parents: 46
diff changeset
   137
                if (visible) {
0da2a5b56583 201035_1
hgs
parents: 46
diff changeset
   138
                    mViewfinderWidget = new CxeViewfinderWidgetDesktop();
0da2a5b56583 201035_1
hgs
parents: 46
diff changeset
   139
                    connect(&mCameraDevice, SIGNAL(imageChanged(QPixmap)), mViewfinderWidget, SLOT(handleImageChange(QPixmap)));
0da2a5b56583 201035_1
hgs
parents: 46
diff changeset
   140
                    mViewfinderWidget->setParentItem(item);
0da2a5b56583 201035_1
hgs
parents: 46
diff changeset
   141
                    break;
0da2a5b56583 201035_1
hgs
parents: 46
diff changeset
   142
                }
0da2a5b56583 201035_1
hgs
parents: 46
diff changeset
   143
            }
0da2a5b56583 201035_1
hgs
parents: 46
diff changeset
   144
        }
0da2a5b56583 201035_1
hgs
parents: 46
diff changeset
   145
    }
0da2a5b56583 201035_1
hgs
parents: 46
diff changeset
   146
    CX_DEBUG_EXIT_FUNCTION();
0da2a5b56583 201035_1
hgs
parents: 46
diff changeset
   147
}
0da2a5b56583 201035_1
hgs
parents: 46
diff changeset
   148
46
hgs
parents:
diff changeset
   149
// end of file