27 |
27 |
28 #include <HbInstance> |
28 #include <HbInstance> |
29 |
29 |
30 #include "homescreendomainpskeys.h" |
30 #include "homescreendomainpskeys.h" |
31 #include "hsdefaultruntime.h" |
31 #include "hsdefaultruntime.h" |
|
32 #include "hsdatabase.h" |
32 #include "hscontentservice.h" |
33 #include "hscontentservice.h" |
33 #include "hsshortcutservice.h" |
34 #include "hsshortcutservice.h" |
34 #include "hsmenueventtransition.h" |
35 #include "hsmenueventtransition.h" |
35 #include "hswidgetpositioningonorientationchange.h" |
36 #include "hswidgetpositioningonorientationchange.h" |
36 #include "hswidgetpositioningonwidgetadd.h" |
37 #include "hswidgetpositioningonwidgetadd.h" |
60 */ |
61 */ |
61 HsDefaultRuntime::HsDefaultRuntime(QObject *parent) |
62 HsDefaultRuntime::HsDefaultRuntime(QObject *parent) |
62 : QStateMachine(parent), |
63 : QStateMachine(parent), |
63 mContentService(0), |
64 mContentService(0), |
64 mHomeScreenActive(false), |
65 mHomeScreenActive(false), |
65 mIdleStateActive(false) |
66 mIdleStateActive(false), |
|
67 mPublisher(NULL) |
66 { |
68 { |
67 HSTEST_FUNC_ENTRY("HS::HsDefaultRuntime::HsDefaultRuntime"); |
69 HSTEST_FUNC_ENTRY("HS::HsDefaultRuntime::HsDefaultRuntime"); |
|
70 |
|
71 HsDatabase *db = new HsDatabase; |
|
72 db->setConnectionName("homescreen.dbc"); |
|
73 #ifdef Q_OS_SYMBIAN |
|
74 db->setDatabaseName("c:/private/20022f35/homescreen.db"); |
|
75 #else |
|
76 db->setDatabaseName("homescreen.db"); |
|
77 #endif |
|
78 db->open(); |
|
79 HsDatabase::setInstance(db); |
68 |
80 |
69 HsWidgetPositioningOnOrientationChange::setInstance( |
81 HsWidgetPositioningOnOrientationChange::setInstance( |
70 new HsAdvancedWidgetPositioningOnOrientationChange); |
82 new HsAdvancedWidgetPositioningOnOrientationChange); |
71 |
83 |
72 HsWidgetPositioningOnWidgetAdd::setInstance( |
84 HsWidgetPositioningOnWidgetAdd::setInstance( |
73 new HsAnchorPointInBottomRight); |
85 new HsAnchorPointInBottomRight); |
74 |
86 |
|
87 createStatePublisher(); |
75 createContentServiceParts(); |
88 createContentServiceParts(); |
76 createStates(); |
89 createStates(); |
77 assignServices(); |
90 assignServices(); |
78 |
91 |
79 QCoreApplication::instance()->installEventFilter(this); |
92 QCoreApplication::instance()->installEventFilter(this); |
119 |
133 |
120 return QStateMachine::eventFilter(watched, event); |
134 return QStateMachine::eventFilter(watched, event); |
121 } |
135 } |
122 |
136 |
123 /*! |
137 /*! |
|
138 Creates Home screen state publisher. |
|
139 */ |
|
140 void HsDefaultRuntime::createStatePublisher() |
|
141 { |
|
142 mPublisher = new QValueSpacePublisher(QValueSpace::PermanentLayer, HsStatePSKeyPath); |
|
143 |
|
144 if (!mPublisher->isConnected()){ |
|
145 // No permanent layer available |
|
146 mPublisher = new QValueSpacePublisher(HsStatePSKeyPath); |
|
147 } |
|
148 |
|
149 mPublisher->setValue(HsStatePSKeySubPath, EHomeScreenInactive); |
|
150 } |
|
151 |
|
152 /*! |
124 Creates content service parts. |
153 Creates content service parts. |
125 */ |
154 */ |
126 void HsDefaultRuntime::createContentServiceParts() |
155 void HsDefaultRuntime::createContentServiceParts() |
127 { |
156 { |
128 HSTEST_FUNC_ENTRY("HS::HsDefaultRuntime::createContentServiceParts"); |
157 HSTEST_FUNC_ENTRY("HS::HsDefaultRuntime::createContentServiceParts"); |
145 QState *guiRootState = new QState(); |
174 QState *guiRootState = new QState(); |
146 addState(guiRootState); |
175 addState(guiRootState); |
147 |
176 |
148 guiRootState->addTransition(this, SIGNAL(event_exit()), finalState); |
177 guiRootState->addTransition(this, SIGNAL(event_exit()), finalState); |
149 |
178 |
150 // Workaround to QtSF bug. Create in stack after the bug is fixed. |
179 QServiceManager manager; |
151 QServiceManager *manager = new QServiceManager(this); |
180 |
152 QServiceFilter filter; |
181 QServiceFilter filter; |
153 |
182 |
154 filter.setInterface("com.nokia.homescreen.state.HsLoadSceneState"); |
183 filter.setInterface("com.nokia.homescreen.state.HsLoadSceneState"); |
155 QList<QServiceInterfaceDescriptor> interfaces = manager->findInterfaces(filter); |
184 #ifdef HSDEFAULTRUNTIMEPLUGIN_UNITTEST |
156 QObject *loadSceneStateObj = manager->loadInterface(interfaces.first().interfaceName()); |
185 filter.setServiceName("mockstateplugins"); |
|
186 #endif |
|
187 QList<QServiceInterfaceDescriptor> interfaces = manager.findInterfaces(filter); |
|
188 |
|
189 QObject *loadSceneStateObj = manager.loadInterface(interfaces.first()); |
157 QState *loadSceneState = qobject_cast<QState *>(loadSceneStateObj); |
190 QState *loadSceneState = qobject_cast<QState *>(loadSceneStateObj); |
158 loadSceneState->setParent(guiRootState); |
191 loadSceneState->setParent(guiRootState); |
159 loadSceneState->setObjectName(interfaces.first().interfaceName()); |
192 loadSceneState->setObjectName(interfaces.first().interfaceName()); |
160 |
193 |
161 filter.setInterface("com.nokia.homescreen.state.HsIdleState"); |
194 filter.setInterface("com.nokia.homescreen.state.HsIdleState"); |
162 interfaces = manager->findInterfaces(filter); |
195 interfaces = manager.findInterfaces(filter); |
163 QObject *idleStateObj = manager->loadInterface(interfaces.first().interfaceName()); |
196 QObject *idleStateObj = manager.loadInterface(interfaces.first()); |
164 QState *idleState = qobject_cast<QState *>(idleStateObj); |
197 QState *idleState = qobject_cast<QState *>(idleStateObj); |
165 idleState->setParent(guiRootState); |
198 idleState->setParent(guiRootState); |
166 idleState->setObjectName(interfaces.first().interfaceName()); |
199 idleState->setObjectName(interfaces.first().interfaceName()); |
167 connect(idleState, SIGNAL(entered()), SLOT(onIdleStateEntered())); |
200 connect(idleState, SIGNAL(entered()), SLOT(onIdleStateEntered())); |
168 connect(idleState, SIGNAL(exited()), SLOT(onIdleStateExited())); |
201 connect(idleState, SIGNAL(exited()), SLOT(onIdleStateExited())); |
174 QState *menuParallelState = new QState( |
207 QState *menuParallelState = new QState( |
175 QState::ParallelStates, guiRootState); |
208 QState::ParallelStates, guiRootState); |
176 QState *menuRootState = new QState(menuParallelState); |
209 QState *menuRootState = new QState(menuParallelState); |
177 |
210 |
178 filter.setInterface("com.nokia.homescreen.state.HsAppLibraryState"); |
211 filter.setInterface("com.nokia.homescreen.state.HsAppLibraryState"); |
179 interfaces = manager->findInterfaces(filter); |
212 interfaces = manager.findInterfaces(filter); |
180 QObject *appLibraryStateObj = manager->loadInterface(interfaces.first().interfaceName()); |
213 QObject *appLibraryStateObj = manager.loadInterface(interfaces.first()); |
181 QState *appLibraryState = qobject_cast<QState *>(appLibraryStateObj); |
214 QState *appLibraryState = qobject_cast<QState *>(appLibraryStateObj); |
182 appLibraryState->setParent(menuRootState); |
215 appLibraryState->setParent(menuRootState); |
183 appLibraryState->setObjectName(interfaces.first().interfaceName()); |
216 appLibraryState->setObjectName(interfaces.first().interfaceName()); |
184 menuRootState->setInitialState(appLibraryState); |
217 menuRootState->setInitialState(appLibraryState); |
185 |
218 |
186 filter.setInterface("com.nokia.homescreen.state.HsMenuWorkerState"); |
219 filter.setInterface("com.nokia.homescreen.state.HsMenuWorkerState"); |
187 interfaces = manager->findInterfaces(filter); |
220 interfaces = manager.findInterfaces(filter); |
188 QObject *menuWorkerStateObj = manager->loadInterface(interfaces.first().interfaceName()); |
221 QObject *menuWorkerStateObj = manager.loadInterface(interfaces.first()); |
189 QState *menuWorkerState = qobject_cast<QState *>(menuWorkerStateObj); |
222 QState *menuWorkerState = qobject_cast<QState *>(menuWorkerStateObj); |
190 menuWorkerState->setParent(menuParallelState); |
223 menuWorkerState->setParent(menuParallelState); |
191 menuWorkerState->setObjectName(interfaces.first().interfaceName()); |
224 menuWorkerState->setObjectName(interfaces.first().interfaceName()); |
192 |
225 |
193 // root state transitions |
226 // root state transitions |
203 HsMenuEventTransition *appLibToIdleTransition = |
236 HsMenuEventTransition *appLibToIdleTransition = |
204 new HsMenuEventTransition( |
237 new HsMenuEventTransition( |
205 HsMenuEvent::OpenHomeScreen, appLibraryState, idleState); |
238 HsMenuEvent::OpenHomeScreen, appLibraryState, idleState); |
206 appLibraryState->addTransition(appLibToIdleTransition); |
239 appLibraryState->addTransition(appLibToIdleTransition); |
207 |
240 |
208 HbMainWindow *window = hbInstance->allMainWindows().at(0); |
241 HbMainWindow *window = hbInstance->allMainWindows().first(); |
209 |
242 |
210 // key driven transition from idle to menu |
243 // key driven transition from idle to menu |
211 QKeyEventTransition *idleToMenuRootTransition = |
244 QKeyEventTransition *idleToMenuRootTransition = |
212 new QKeyEventTransition( |
245 new QKeyEventTransition( |
213 window, QEvent::KeyRelease, applicationKey, idleState); |
246 window, QEvent::KeyRelease, applicationKey, idleState); |
268 |
301 |
269 HSTEST_FUNC_EXIT("HS::HsDefaultRuntime::assignServices"); |
302 HSTEST_FUNC_EXIT("HS::HsDefaultRuntime::assignServices"); |
270 } |
303 } |
271 |
304 |
272 /*! |
305 /*! |
273 |
306 Publishes Home screen states via Publish & Subscribe. |
274 */ |
307 */ |
275 void HsDefaultRuntime::updatePSKeys() |
308 void HsDefaultRuntime::updatePSKeys() |
276 { |
309 { |
277 QValueSpacePublisher publisher(HsStatePSKeyPath); |
310 if (!mPublisher){ |
278 |
311 createStatePublisher(); |
279 if (mHomeScreenActive && mIdleStateActive){ |
312 } |
|
313 |
|
314 if (mHomeScreenActive && mIdleStateActive){ |
280 qDebug() << "HsDefaultRuntime::updatePSKeys: EHomeScreenIdleState"; |
315 qDebug() << "HsDefaultRuntime::updatePSKeys: EHomeScreenIdleState"; |
281 publisher.setValue(HsStatePSKeySubPath, EHomeScreenIdleState); |
316 mPublisher->setValue(HsStatePSKeySubPath, EHomeScreenIdleState); |
282 } |
317 } |
283 else{ |
318 else{ |
284 qDebug() << "HsDefaultRuntime::updatePSKeys: EHomeScreenInactive"; |
319 qDebug() << "HsDefaultRuntime::updatePSKeys: EHomeScreenInactive"; |
285 publisher.setValue(HsStatePSKeySubPath, EHomeScreenInactive); |
320 mPublisher->setValue(HsStatePSKeySubPath, EHomeScreenInactive); |
286 } |
321 } |
287 } |
322 } |
288 |
323 |
289 /*! |
324 /*! |
290 |
325 Called when state machine is in Idle state. |
291 */ |
326 */ |
292 void HsDefaultRuntime::onIdleStateEntered() |
327 void HsDefaultRuntime::onIdleStateEntered() |
293 { |
328 { |
294 mIdleStateActive = true; |
329 mIdleStateActive = true; |
295 updatePSKeys(); |
330 updatePSKeys(); |
296 } |
331 } |
297 |
332 |
298 /*! |
333 /*! |
299 |
334 Called when state machine leaves the Idle state. |
300 */ |
335 */ |
301 void HsDefaultRuntime::onIdleStateExited() |
336 void HsDefaultRuntime::onIdleStateExited() |
302 { |
337 { |
303 mIdleStateActive = false; |
338 mIdleStateActive = false; |
304 updatePSKeys(); |
339 updatePSKeys(); |