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
)
49 Window().SetRequiredDisplayMode(EColor64K
);
52 void CSDLWin::Draw(const TRect
& /*aRect*/) const
56 ////////////////////////////////////////////////////////////////////////////
58 class CSDLAppUi
: public CAknAppUi
65 void HandleCommandL(int aCommand
);
66 void HandleWsEventL(const TWsEvent
& aEvent
, CCoeControl
* aDestination
);
67 void HandleResourceChangeL(int aType
);
69 void HandleForegroundEventL(TBool aForeground
);
76 CSDLAppUi::~CSDLAppUi()
83 void CSDLAppUi::ConstructL()
85 BaseConstructL(ENoAppResourceFile
|EAknEnableSkin
);
87 iSDLWin
= new CSDLWin(ApplicationRect());
91 SetKeyBlockMode(ENoKeyBlock
);
93 iSdl
->SetContainerWindowL(iSDLWin
->GetWindow(), iEikonEnv
->WsSession(), *iEikonEnv
->ScreenDevice());
98 void CSDLAppUi::HandleCommandL(int aCommand
)
102 case EAknSoftkeyBack
:
103 case EAknSoftkeyExit
:
108 event
.SetType(EEventSwitchOff
), event
.SetTimeNow();
109 iSdl
->AppendWsEvent(event
);
118 void CSDLAppUi::HandleWsEventL(const TWsEvent
& aEvent
, CCoeControl
* aDestination
)
120 if(aEvent
.Type() == KAknUidValueEndKeyCloseEvent
)
123 event
.SetType(EEventSwitchOff
), event
.SetTimeNow();
124 iSdl
->AppendWsEvent(event
);
129 iSdl
->AppendWsEvent(aEvent
);
132 CAknAppUi::HandleWsEventL(aEvent
, aDestination
);
135 void CSDLAppUi::HandleResourceChangeL(int aType
)
137 CAknAppUi::HandleResourceChangeL(aType
);
138 if(aType
== KEikDynamicLayoutVariantSwitch
)
140 iSDLWin
->SetRect(ApplicationRect());
141 iSdl
->SetContainerWindowL(iSDLWin
->GetWindow(), iEikonEnv
->WsSession(), *iEikonEnv
->ScreenDevice());
146 void CSDLAppUi::HandleForegroundEventL(TBool aForeground
)
148 CAknAppUi::HandleForegroundEventL(aForeground
);
149 g_SDL
->SetFocus(aForeground
);
152 ////////////////////////////////////////////////////////////////////////////
154 class CSDLDocument
: public CEikDocument
157 CSDLDocument(CEikApplication
& aApp
) : CEikDocument(aApp
) {}
160 CEikAppUi
* CreateAppUiL() { return new CSDLAppUi
; }
163 ////////////////////////////////////////////////////////////////////////
165 class CSDLApplication
: public CAknApplication
171 CApaDocument
* CreateDocumentL() { return new CSDLDocument(*this); }
172 TUid
AppDllUid() const { return iUid
; }
177 CSDLApplication::CSDLApplication()
180 User::LeaveIfError(apa
.Connect());
181 CleanupClosePushL(apa
);
182 User::LeaveIfError(apa
.GetAllApps());
183 TFileName name
= RProcess().FileName();
185 while(apa
.GetNextApp(info
) == KErrNone
)
187 if(info
.iFullName
.CompareF(name
) == 0)
193 CleanupStack::PopAndDestroy();
196 ////////////////////////////////////////////////////////////////////////
198 CApaApplication
* NewApplication()
200 return new CSDLApplication();
205 return EikStart::RunApplication(NewApplication
);