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 |