4 #include <sdlepocapi.h>
12 #include <aknglobalmsgquery.h>
17 class Ticker
: public CActive
20 Ticker() : CActive(CActive::EPriorityIdle
)
22 CActiveScheduler::Add(this);
25 ~Ticker() { Cancel(); }
32 ////////////////////////////////////////////////////////////////////////
34 class CSDLWin
: public CCoeControl
37 CSDLWin( const TRect
& aRect
);
38 RWindow
& GetWindow() const { return Window(); }
41 void Draw(const TRect
& aRect
) const;
44 CSDLWin::CSDLWin( const TRect
& aRect
)
51 void CSDLWin::Draw(const TRect
& /*aRect*/) const
55 ////////////////////////////////////////////////////////////////////////////
57 class CSDLAppUi
: public CAknAppUi
64 void HandleCommandL(int aCommand
);
65 void HandleWsEventL(const TWsEvent
& aEvent
, CCoeControl
* aDestination
);
66 void HandleResourceChangeL(int aType
);
69 static TBool
StartL(void* aThis
);
71 void HandleForegroundEventL(TBool aForeground
);
79 CSDLAppUi::~CSDLAppUi()
89 void CSDLAppUi::ConstructL()
91 BaseConstructL(ENoAppResourceFile
|EAknEnableSkin
);
93 iSDLWin
= new CSDLWin(ApplicationRect());
97 SetKeyBlockMode(ENoKeyBlock
);
99 iSdl
->SetContainerWindowL(iSDLWin
->GetWindow(), iEikonEnv
->WsSession(), *iEikonEnv
->ScreenDevice());
101 iStarter
= CIdle::NewL(CActive::EPriorityLow
);
102 iStarter
->Start(TCallBack(StartL
, this));
105 TBool
CSDLAppUi::StartL(void* aThis
)
107 static_cast<CSDLAppUi
*>(aThis
)->StartL();
111 void CSDLAppUi::StartL()
113 iTicker
= new Ticker
;
118 void CSDLAppUi::HandleCommandL(int aCommand
)
122 case EAknSoftkeyBack
:
123 case EAknSoftkeyExit
:
133 event
.SetType(EEventSwitchOff
), event
.SetTimeNow();
134 iSdl
->AppendWsEvent(event
);
143 void CSDLAppUi::HandleWsEventL(const TWsEvent
& aEvent
, CCoeControl
* aDestination
)
147 if(aEvent
.Type() == KAknUidValueEndKeyCloseEvent
)
150 event
.SetType(EEventSwitchOff
), event
.SetTimeNow();
151 iSdl
->AppendWsEvent(event
);
156 iSdl
->AppendWsEvent(aEvent
);
160 CAknAppUi::HandleWsEventL(aEvent
, aDestination
);
163 void CSDLAppUi::HandleResourceChangeL(int aType
)
165 CAknAppUi::HandleResourceChangeL(aType
);
166 if(aType
== KEikDynamicLayoutVariantSwitch
)
168 iSDLWin
->SetRect(ApplicationRect());
169 iSdl
->SetContainerWindowL(iSDLWin
->GetWindow(), iEikonEnv
->WsSession(), *iEikonEnv
->ScreenDevice());
174 void CSDLAppUi::HandleForegroundEventL(TBool aForeground
)
176 CAknAppUi::HandleForegroundEventL(aForeground
);
179 ////////////////////////////////////////////////////////////////////////////
181 class CSDLDocument
: public CEikDocument
184 CSDLDocument(CEikApplication
& aApp
) : CEikDocument(aApp
) {}
187 CEikAppUi
* CreateAppUiL() { return new CSDLAppUi
; }
190 ////////////////////////////////////////////////////////////////////////
192 class CSDLApplication
: public CAknApplication
198 CApaDocument
* CreateDocumentL() { return new CSDLDocument(*this); }
199 TUid
AppDllUid() const { return iUid
; }
204 CSDLApplication::CSDLApplication()
207 User::LeaveIfError(apa
.Connect());
208 CleanupClosePushL(apa
);
209 User::LeaveIfError(apa
.GetAllApps());
210 TFileName name
= RProcess().FileName();
212 while(apa
.GetNextApp(info
) == KErrNone
)
214 if(info
.iFullName
.CompareF(name
) == 0)
220 CleanupStack::PopAndDestroy();
223 ////////////////////////////////////////////////////////////////////////
225 CApaApplication
* NewApplication()
227 return new CSDLApplication();
232 return EikStart::RunApplication(NewApplication
);