+++ /dev/null
-#include "PicoDriveAppS60.h"\r
-#include <picodrives60.rsg>\r
-#include <apgcli.h>\r
-#include <eikdll.h>\r
-EXPORT_C CApaApplication* NewApplication()\r
-{\r
- return (new CPicoDrive);\r
-}\r
-\r
-CPicoDrive::CPicoDrive()\r
-{\r
-}\r
-\r
-\r
-CPicoDrive::~CPicoDrive()\r
-{\r
-}\r
-\r
-\r
-CApaDocument* CPicoDrive::CreateDocumentL()\r
- {\r
- return new (ELeave) CPicoDriveDoc(*this);\r
- }\r
-TUid CPicoDrive::AppDllUid() const\r
- {\r
- return TUid::Uid(0x101F9B49);\r
- }\r
-\r
-\r
-CPicoDriveDoc::CPicoDriveDoc(CEikApplication& aApp):CAknDocument(aApp)\r
-{\r
-}\r
-\r
-CPicoDriveDoc::~CPicoDriveDoc()\r
- {\r
- }\r
-\r
-CEikAppUi* CPicoDriveDoc::CreateAppUiL()\r
- {\r
- return new (ELeave) CPicoDriveUi;\r
- }\r
-\r
-\r
-void CPicoDriveUi::HandleForegroundEventL(TBool aForeground)\r
-{\r
- if(aForeground)\r
- {\r
- BringUpEmulatorL(); \r
- }\r
-}\r
-\r
-CPicoDriveUi::CPicoDriveUi()\r
-{\r
-}\r
-\r
-CPicoDriveUi::~CPicoDriveUi()\r
- {\r
- \r
- RemoveFromViewStack(*iView,iView);\r
- DeregisterViewAndRemoveStack(*iView);\r
- delete iView;\r
- if(iWatcher)\r
- {\r
- iThreadWatch.LogonCancel(iWatcher->iStatus);\r
- iWatcher->Cancel();\r
- }\r
- delete iWatcher;\r
-\r
- iThreadWatch.Close();\r
- }\r
-\r
-\r
-void CPicoDriveUi::ConstructL()\r
- {\r
- BaseConstructL();\r
- iView = new(ELeave)CPicoView;\r
- iView->SetMopParent(this);\r
- iView->ConstructL();\r
- RegisterViewAndAddStackL(*iView);\r
- AddToViewStackL(*iView,iView);\r
- SetDefaultViewL(*iView);\r
- TBuf<128> startFile;\r
- startFile = iEikonEnv->EikAppUi()->Application()->AppFullName();\r
- TParse parser;\r
- parser.Set(startFile,NULL,NULL);\r
- \r
- startFile = parser.DriveAndPath(); \r
-#ifndef __WINS__\r
- startFile.Append( _L("PicoDrive.EXE"));\r
-#else\r
- startFile.Append( _L("PicoDrive.DLL"));\r
-#endif\r
- CApaCommandLine* cmdLine=CApaCommandLine::NewLC(startFile);\r
- RApaLsSession lsSession;\r
- lsSession.Connect();\r
- CleanupClosePushL(lsSession);\r
- lsSession.StartApp(*cmdLine,iThreadId);\r
- CleanupStack::PopAndDestroy();//close lsSession\r
- CleanupStack::PopAndDestroy(cmdLine);\r
- User::After(500000);// Let the application start\r
- TApaTaskList taskList(iEikonEnv->WsSession());\r
- TApaTask myTask=taskList.FindApp(TUid::Uid(0x101F9B49));\r
- myTask.SendToBackground();\r
- TApaTask exeTask=taskList.FindByPos(0);\r
- iExeWgId=exeTask.WgId();\r
- if(iThreadWatch.Open(iThreadId)==KErrNone)\r
- {\r
- iWatcher = new (ELeave)CPicoWatcher;\r
- iWatcher->iAppUi=this;\r
- iThreadWatch.Logon(iWatcher->iStatus); \r
- }\r
-}\r
-\r
-\r
-CPicoWatcher::CPicoWatcher():CActive(EPriorityStandard)\r
-{\r
- CActiveScheduler::Add(this);\r
- iStatus=KRequestPending;\r
- SetActive();\r
-}\r
-\r
-CPicoWatcher::~CPicoWatcher()\r
-{\r
-}\r
-void CPicoWatcher::DoCancel()\r
-{\r
-}\r
-\r
-void CPicoWatcher::RunL()\r
-{\r
- iAppUi->HandleCommandL(EEikCmdExit);\r
-}\r
-\r
-void CPicoDriveUi::BringUpEmulatorL()\r
-{\r
- RThread thread;\r
- if(thread.Open(iThreadId)==KErrNone)\r
- {\r
- thread.Close();\r
- TApaTask apaTask(iEikonEnv->WsSession());\r
- apaTask.SetWgId(iExeWgId);\r
- apaTask.BringToForeground();\r
- }\r
- else\r
- {\r
- iExeWgId=-1;\r
- }\r
-}\r
-\r
-\r
-\r
-void CPicoDriveUi::HandleCommandL(TInt aCommand)\r
-{\r
- \r
- switch(aCommand)\r
- {\r
- case EEikCmdExit:\r
- {\r
- RThread thread;\r
- if(thread.Open(iThreadId)==KErrNone)\r
- {\r
- thread.Terminate(0);\r
- thread.Close();\r
- }\r
- Exit();\r
- } \r
- break;\r
- \r
- }\r
-}\r
-\r
-GLDEF_C TInt E32Dll(TDllReason)\r
-{\r
- return KErrNone;\r
-}\r
-\r
-\r
-\r