19682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall// INCLUDES 29682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#include <aknapp.h> 39682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#include <aknappui.h> 49682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#include <eikdoc.h> 59682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#include <sdlepocapi.h> 69682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#include <bautils.h> 79682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#include <eikstart.h> 89682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#include <badesca.h> 99682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#include <bautils.h> 109682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#include <apgcli.h> 119682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#include <sdlmain.h> 129682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#include <eikedwin.h> 139682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#include <eiklabel.h> 149682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#include <sdlexe.rsg> 159682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#include <aknglobalmsgquery.h> 169682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall#include <apgwgnam.h> 179682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 189682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 199682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 209682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall// FORWARD DECLARATIONS 219682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallclass CApaDocument; 229682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 239682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 249682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall//const TUid KSDLUID = { 0xF01F605E }; 259682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 269682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallLOCAL_C void MakeCCmdLineL(const TDesC8& aParam, CDesC8Array& aArray) 279682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 289682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 299682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TChar dq('\"'); 309682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 319682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TLex8 lex(aParam); 329682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TBool in = EFalse; 339682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 349682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall lex.SkipSpaceAndMark(); 359682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 369682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall while(!lex.Eos()) 379682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 389682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TPtrC8 ptr; 399682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(in) 409682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 419682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TPtrC8 rem = lex.RemainderFromMark(); 429682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TInt pos = rem.Locate(dq); 439682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(pos > 0) 449682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 459682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall lex.Inc(pos); 469682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall ptr.Set(lex.MarkedToken()); 479682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall lex.SkipAndMark(1); 489682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 499682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall else 509682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 519682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall ptr.Set(rem); 529682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 539682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall in = EFalse; 549682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 559682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall else 569682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 579682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall ptr.Set(lex.NextToken()); 589682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TInt pos = ptr.Locate(dq); 599682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(pos == 0) 609682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 619682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall lex.UnGetToMark(); 629682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall lex.SkipAndMark(1); 639682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall in = ETrue; 649682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall continue; // back to in brace 659682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 669682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall else 679682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall lex.SkipSpaceAndMark(); 689682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 699682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 709682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall aArray.AppendL(ptr); 719682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 729682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 739682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 749682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 759682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallNONSHARABLE_CLASS(TVirtualCursor) : public MOverlay 769682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 779682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall public: 789682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TVirtualCursor(); 799682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void Set(const TRect& aRect, CFbsBitmap* aBmp, CFbsBitmap* aAlpha); 809682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void Move(TInt aX, TInt aY); 819682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void MakeEvent(TWsEvent& aEvent, const TPoint& aBasePos) const; 829682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void Toggle(); 839682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TBool IsOn() const; 849682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall private: 859682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void Draw(CBitmapContext& aGc, const TRect& aTargetRect, const TSize& aSize); 869682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall private: 879682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TRect iRect; 889682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TPoint iInc; 899682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TPoint iPos; 909682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TBool iIsOn; 919682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CFbsBitmap* iCBmp; 929682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CFbsBitmap* iAlpha; 939682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall }; 949682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 959682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 969682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallTVirtualCursor::TVirtualCursor() : iInc(0, 0), iIsOn(EFalse), iCBmp(NULL) 979682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 989682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 999682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 1009682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallconst TInt KMaxMove = 10; 1019682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 1029682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid TVirtualCursor::Move(TInt aX, TInt aY) 1039682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 1049682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(aX > 0 && iInc.iX > 0) 1059682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall ++iInc.iX; 1069682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall else if(aX < 0 && iInc.iX < 0) 1079682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall --iInc.iX; 1089682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall else 1099682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iInc.iX = aX; 1109682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 1119682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(aY > 0 && iInc.iY > 0) 1129682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall ++iInc.iY; 1139682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall else if(aY < 0 && iInc.iY < 0) 1149682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall --iInc.iY; 1159682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall else 1169682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iInc.iY = aY; 1179682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 1189682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iInc.iX = Min(KMaxMove, iInc.iX); 1199682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 1209682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iInc.iX = Max(-KMaxMove, iInc.iX); 1219682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 1229682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iInc.iY = Min(KMaxMove, iInc.iY); 1239682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 1249682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iInc.iY =Max(-KMaxMove, iInc.iY); 1259682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 1269682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TPoint pos = iPos + iInc; 1279682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(iRect.Contains(pos)) 1289682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 1299682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iPos = pos; 1309682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 1319682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall else 1329682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 1339682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iInc = TPoint(0, 0); 1349682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 1359682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 1369682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 1379682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 1389682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid TVirtualCursor::Toggle() 1399682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 1409682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iIsOn = !iIsOn; 1419682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 1429682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 1439682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 1449682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallTBool TVirtualCursor::IsOn() const 1459682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 1469682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return iIsOn; 1479682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 1489682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 1499682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid TVirtualCursor::Set(const TRect& aRect, CFbsBitmap* aBmp, CFbsBitmap* aAlpha) 1509682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 1519682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iRect = aRect; 1529682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iCBmp = aBmp; 1539682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iAlpha = aAlpha; 1549682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 1559682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 1569682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 1579682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid TVirtualCursor::MakeEvent(TWsEvent& aEvent, const TPoint& aBasePos) const 1589682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 1599682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall aEvent.SetType(EEventPointer), 1609682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall aEvent.SetTimeNow(); 1619682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TPointerEvent& pointer = *aEvent.Pointer(); 1629682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall pointer.iType = TPointerEvent::EButton1Down; 1639682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall pointer.iPosition = iPos; 1649682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall pointer.iParentPosition = aBasePos; 1659682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 1669682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 1679682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 1689682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid TVirtualCursor::Draw(CBitmapContext& aGc, const TRect& /*aTargetRect*/, const TSize& /*aSize*/) 1699682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 1709682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(iIsOn && iCBmp != NULL) 1719682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 1729682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TRect rect(TPoint(0, 0), iCBmp->SizeInPixels()); 1739682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall aGc.AlphaBlendBitmaps(iPos, iCBmp, rect, iAlpha, TPoint(0, 0)); 1749682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 1759682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 1769682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 1779682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 1789682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallNONSHARABLE_CLASS(TSdlClass) 1799682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 1809682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall public: 1819682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TSdlClass(); 1829682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void SetMain(const TMainFunc& aFunc, TInt aFlags, MSDLMainObs* aObs, TInt aExeFlags); 1839682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TInt SdlFlags() const; 1849682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TMainFunc& Main() const; 1859682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void SendEvent(TInt aEvent, TInt aParam, CSDL* aSDL); 1869682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TInt AppFlags() const; 1879682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void AppFlags(TInt aFlags); 1889682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall private: 1899682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TMainFunc iFunc; 1909682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TInt iSdlFlags; 1919682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TInt iExeFlags; 1929682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall MSDLMainObs* iObs; 1939682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall }; 1949682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 1959682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 1969682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid TSdlClass::AppFlags(TInt aFlags) 1979682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 1989682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iExeFlags |= aFlags; 1999682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 2009682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2019682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid TSdlClass::SendEvent(TInt aEvent, TInt aParam, CSDL* aSDL) 2029682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 2039682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(iObs != NULL) 2049682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iObs->SDLMainEvent(aEvent, aParam, aSDL); 2059682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 2069682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2079682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallTInt TSdlClass::AppFlags() const 2089682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 2099682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return iExeFlags; 2109682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 2119682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2129682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid TSdlClass::SetMain(const TMainFunc& aFunc, TInt aFlags, MSDLMainObs* aObs, TInt aExeFlags) 2139682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 2149682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iFunc = aFunc; 2159682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iSdlFlags = aFlags; 2169682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iExeFlags = aExeFlags; 2179682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iObs = aObs; 2189682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 2199682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2209682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallconst TMainFunc& TSdlClass::Main() const 2219682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 2229682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return iFunc; 2239682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 2249682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2259682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2269682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TInt TSdlClass::SdlFlags() const 2279682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 2289682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return iSdlFlags; 2299682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 2309682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2319682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2329682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2339682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallTSdlClass::TSdlClass() 2349682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 2359682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall Mem::FillZ(this, sizeof(this)); 2369682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 2379682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2389682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallTSdlClass gSDLClass; 2399682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2409682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2419682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall//////////////////////////////////////////////////////////////// 2429682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2439682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallNONSHARABLE_CLASS(CSDLApplication) : public CAknApplication 2449682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 2459682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall public: 2469682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CSDLApplication(); 2479682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall private: 2489682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CApaDocument* CreateDocumentL(); 2499682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TFileName ResourceFileName() const; 2509682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TUid AppDllUid() const; 2519682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void FindMeL(); 2529682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TUid iUid; 2539682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall }; 2549682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2559682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallNONSHARABLE_CLASS(CSDLDocument) : public CEikDocument 2569682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 2579682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall public: 2589682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CSDLDocument(CEikApplication& aApp); 2599682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall private: 2609682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CEikAppUi* CreateAppUiL(); 2619682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2629682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall }; 2639682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2649682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall //////////////////////////////////////////////////////////////////// 2659682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2669682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2679682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallNONSHARABLE_CLASS(MExitWait) 2689682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 2699682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall public: 2709682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall virtual void DoExit(TInt aErr) = 0; 2719682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall }; 2729682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2739682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall///////////////////////////////////////////////////////////////////////// 2749682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2759682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallNONSHARABLE_CLASS(CExitWait) : public CActive 2769682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 2779682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall public: 2789682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CExitWait(MExitWait& aWait); 2799682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall ~CExitWait(); 2809682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall private: 2819682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void RunL(); 2829682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void DoCancel(); 2839682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall private: 2849682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall MExitWait& iWait; 2859682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TRequestStatus* iStatusPtr; 2869682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall }; 2879682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2889682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall//////////////////////////////////////////////////////////////////////// 2899682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2909682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 2919682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallNONSHARABLE_CLASS(CSDLWin) : public CCoeControl 2929682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 2939682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall public: 2949682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void ConstructL(const TRect& aRect); 2959682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall RWindow& GetWindow() const; 2969682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void SetNoDraw(); 2979682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall private: 2989682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void Draw(const TRect& aRect) const; 2999682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall private: 3009682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TBool iNoDraw; 3019682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall }; 3029682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3039682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3049682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall//////////////////////////////////////////////////////////////////////////// 3059682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3069682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallNONSHARABLE_CLASS(CSDLAppUi) : public CAknAppUi, public MExitWait, MSDLObserver 3079682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 3089682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall public: 3099682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall ~CSDLAppUi(); 3109682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall private: // New functions 3119682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void ConstructL(); 3129682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void HandleCommandL(TInt aCommand); 3139682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void HandleWsEventL(const TWsEvent& aEvent, CCoeControl* aDestination); 3149682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void HandleResourceChangeL(TInt aType); 3159682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3169682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void DoExit(TInt aErr); 3179682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3189682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TInt SdlEvent(TInt aEvent, TInt aParam); 3199682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TInt SdlThreadEvent(TInt aEvent, TInt aParam); 3209682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3219682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void StartL(); 3229682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall static TBool StartL(TAny* aThis); 3239682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3249682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TBool ParamEditorL(TDes& aCheat); 3259682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3269682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TBool ProcessCommandParametersL(CApaCommandLine &aCommandLine); 3279682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3289682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void PrepareToExit(); 3299682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void HandleConsoleWindowL(); 3309682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void HandleConsoleWindow(); 3319682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void HandleForegroundEventL(TBool aForeground); 3329682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3339682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall static TBool IdleRequestL(TAny* aThis); 3349682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3359682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TBool HandleKeyL(const TWsEvent& aEvent); 3369682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3379682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3389682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall private: 3399682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CExitWait* iWait; 3409682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CSDLWin* iSDLWin; 3419682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CSDL* iSdl; 3429682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CIdle* iStarter; 3439682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TBool iExitRequest; 3449682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CDesC8Array* iParams; 3459682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TInt iResOffset; 3469682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CIdle* iIdle; 3479682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TInt iStdOut; 3489682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TVirtualCursor iCursor; 3499682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CFbsBitmap* iCBmp; 3509682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CFbsBitmap* iAlpha; 3519682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall // TTime iLastPress; 3529682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall // CSDL::TOrientationMode iOrientation; 3539682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall }; 3549682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3559682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall////////////////////////////////////////////////////////////////////////////////////////7 3569682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3579682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallCApaDocument* CSDLApplication::CreateDocumentL() 3589682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 3599682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return new (ELeave) CSDLDocument(*this); 3609682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 3619682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3629682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallTUid CSDLApplication::AppDllUid() const 3639682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 3649682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return iUid; 3659682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 3669682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3679682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3689682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallCSDLApplication::CSDLApplication() 3699682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 3709682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TRAPD(err, FindMeL()); 3719682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall ASSERT(err == KErrNone); 3729682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 3739682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3749682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CSDLApplication::FindMeL() 3759682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 3769682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall RApaLsSession apa; 3779682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall User::LeaveIfError(apa.Connect()); 3789682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CleanupClosePushL(apa); 3799682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall User::LeaveIfError(apa.GetAllApps()); 3809682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TFileName name = RProcess().FileName(); 3819682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TApaAppInfo info; 3829682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall while(apa.GetNextApp(info) == KErrNone) 3839682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 3849682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(info.iFullName.CompareF(name) == 0) 3859682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 3869682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iUid = info.iUid; 3879682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall break; 3889682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 3899682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 3909682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CleanupStack::PopAndDestroy(); 3919682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 3929682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3939682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallTFileName CSDLApplication::ResourceFileName() const 3949682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 3959682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return KNullDesC(); 3969682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 3979682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 3989682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall/////////////////////////////////////////////////////////////////////////////////////////// 3999682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4009682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallCExitWait::CExitWait(MExitWait& aWait) : CActive(CActive::EPriorityStandard), iWait(aWait) 4019682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 4029682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CActiveScheduler::Add(this); 4039682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall SetActive(); 4049682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iStatusPtr = &iStatus; 4059682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 4069682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4079682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallCExitWait::~CExitWait() 4089682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 4099682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall Cancel(); 4109682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 4119682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4129682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CExitWait::RunL() 4139682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 4149682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(iStatusPtr != NULL ) 4159682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iWait.DoExit(iStatus.Int()); 4169682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 4179682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4189682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CExitWait::DoCancel() 4199682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 4209682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(iStatusPtr != NULL ) 4219682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall User::RequestComplete(iStatusPtr , KErrCancel); 4229682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 4239682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4249682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4259682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall////////////////////////////////////////////////////////////////////////////////////////////// 4269682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4279682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallCSDLDocument::CSDLDocument(CEikApplication& aApp) : CEikDocument(aApp) 4289682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall {} 4299682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4309682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallCEikAppUi* CSDLDocument::CreateAppUiL() 4319682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 4329682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return new (ELeave) CSDLAppUi; 4339682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 4349682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4359682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall/////////////////////////////////////////////////////////////////////////// 4369682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4379682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CSDLWin:: ConstructL(const TRect& aRect) 4389682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 4399682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CreateWindowL(); 4409682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall SetRect(aRect); 4419682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall ActivateL(); 4429682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 4439682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4449682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4459682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallRWindow& CSDLWin::GetWindow() const 4469682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 4479682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return Window(); 4489682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 4499682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4509682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4519682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CSDLWin::Draw(const TRect& /*aRect*/) const 4529682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 4539682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(!iNoDraw) 4549682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 4559682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CWindowGc& gc = SystemGc(); 4569682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall gc.SetPenStyle(CGraphicsContext::ESolidPen); 4579682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall gc.SetPenColor(KRgbGray); 4589682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall gc.SetBrushStyle(CGraphicsContext::ESolidBrush); 4599682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall gc.SetBrushColor(0xaaaaaa); 4609682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall gc.DrawRect(Rect()); 4619682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 4629682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 4639682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4649682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CSDLWin::SetNoDraw() 4659682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 4669682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iNoDraw = ETrue; 4679682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 4689682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4699682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall///////////////////////////////////////////////////////////////////////// 4709682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4719682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallCSDLAppUi::~CSDLAppUi() 4729682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 4739682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(iIdle) 4749682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iIdle->Cancel(); 4759682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall delete iIdle; 4769682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(iStarter != NULL) 4779682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iStarter->Cancel(); 4789682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall delete iStarter; 4799682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall delete iWait; 4809682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall delete iSdl; 4819682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall delete iSDLWin; 4829682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall delete iParams; 4839682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall delete iCBmp; 4849682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall delete iAlpha; 4859682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 4869682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4879682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4889682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CSDLAppUi::ConstructL() 4899682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 4909682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall BaseConstructL(ENoAppResourceFile | ENoScreenFurniture); 4919682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4929682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 4939682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall RLibrary lib; 4949682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall User::LeaveIfError(lib.Load(_L("sdlexe.dll"))); 4959682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TFileName name = lib.FileName(); 4969682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall lib.Close(); 4979682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall name.Replace(3, name.Length() - 3, _L("resource\\apps\\sdlexe.rsc")); 4989682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall BaflUtils::NearestLanguageFile(iEikonEnv->FsSession(), name); 4999682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iResOffset = iCoeEnv->AddResourceFileL(name); 5009682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 5019682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall name.Replace(name.Length() - 3, 3, _L("mbm")); 5029682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 5039682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TEntry e; 5049682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TInt err = iEikonEnv->FsSession().Entry(name, e); 5059682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 5069682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iCBmp = iEikonEnv->CreateBitmapL(name, 0); 5079682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iAlpha = iEikonEnv->CreateBitmapL(name, 1); 5089682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 5099682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iIdle = CIdle::NewL(CActive::EPriorityIdle); 5109682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 5119682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iSDLWin = new (ELeave) CSDLWin; 5129682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iSDLWin->ConstructL(ApplicationRect()); 5139682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 5149682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iSdl = CSDL::NewL(gSDLClass.SdlFlags()); 5159682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 5169682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall gSDLClass.SendEvent(MSDLMainObs::ESDLCreated, 0, iSdl); 5179682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 5189682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iSdl->SetObserver(this); 5199682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iSdl->DisableKeyBlocking(*this); 5209682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iSdl->SetContainerWindowL( 5219682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iSDLWin->GetWindow(), 5229682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iEikonEnv->WsSession(), 5239682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall *iEikonEnv->ScreenDevice()); 5249682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iSdl->AppendOverlay(iCursor, 0); 5259682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 5269682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iCursor.Set(TRect(TPoint(0, 0), iSDLWin->Size()), iCBmp, iAlpha); 5279682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 5289682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iStarter = CIdle::NewL(CActive::EPriorityLow); 5299682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iStarter->Start(TCallBack(StartL, this)); 5309682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 5319682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 5329682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 5339682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 5349682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 5359682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 5369682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallTBool CSDLAppUi::StartL(TAny* aThis) 5379682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 5389682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall static_cast<CSDLAppUi*>(aThis)->StartL(); 5399682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return EFalse; 5409682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 5419682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 5429682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 5439682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CSDLAppUi::PrepareToExit() 5449682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 5459682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CAknAppUiBase::PrepareToExit(); //aknappu::PrepareToExit crashes 5469682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iCoeEnv->DeleteResourceFile(iResOffset); 5479682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 5489682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 5499682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallTBool CSDLAppUi::ProcessCommandParametersL(CApaCommandLine &aCommandLine) 5509682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 5519682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TPtrC8 cmdLine = aCommandLine.TailEnd(); 5529682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iParams = new (ELeave) CDesC8ArrayFlat(8); 5539682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall MakeCCmdLineL(cmdLine, *iParams); 5549682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return EFalse; 5559682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 5569682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 5579682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 5589682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TBool CSDLAppUi::ParamEditorL(TDes& aCheat) 5599682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 5609682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CAknTextQueryDialog* query = CAknTextQueryDialog::NewL(aCheat); 5619682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CleanupStack::PushL(query); 5629682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall query->SetPromptL(_L("Enter parameters")); 5639682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CleanupStack::Pop(); 5649682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return query->ExecuteLD(R_PARAMEDITOR); 5659682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 5669682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 5679682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void CSDLAppUi::StartL() 5689682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 5699682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(gSDLClass.AppFlags() & SDLEnv::EParamQuery) 5709682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 5719682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TBuf8<256> cmd; 5729682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall RFile file; 5739682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TInt err = file.Open(iEikonEnv->FsSession(), _L("sdl_param.txt"),EFileRead); 5749682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(err == KErrNone) 5759682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 5769682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall file.Read(cmd); 5779682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall file.Close(); 5789682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall MakeCCmdLineL(cmd, *iParams); 5799682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 5809682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(err != KErrNone || gSDLClass.AppFlags() & (SDLEnv::EParamQueryDialog ^ SDLEnv::EParamQuery)) 5819682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 5829682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TBuf<256> buffer; 5839682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(ParamEditorL(buffer)) 5849682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 5859682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall cmd.Copy(buffer); 5869682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall MakeCCmdLineL(cmd, *iParams); 5879682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 5889682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 5899682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 5909682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iWait = new (ELeave) CExitWait(*this); 5919682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iSdl->CallMainL(gSDLClass.Main(), &iWait->iStatus, iParams, CSDL::ENoParamFlags, 0xA000); 5929682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 5939682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 5949682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CSDLAppUi::HandleCommandL(TInt aCommand) 5959682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 5969682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall switch(aCommand) 5979682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 5989682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall case EAknSoftkeyBack: 5999682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall case EAknSoftkeyExit: 6009682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall case EAknCmdExit: 6019682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall case EEikCmdExit: 6029682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall gSDLClass.AppFlags(SDLEnv::EAllowConsoleView); 6039682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(iWait == NULL || !iWait->IsActive() || iSdl == NULL) 6049682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 6059682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall Exit(); 6069682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 6079682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall else if(!iExitRequest) 6089682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 6099682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iExitRequest = ETrue; //trick how SDL can be closed! 6109682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iSdl->Suspend(); 6119682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 6129682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall break; 6139682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 6149682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 6159682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 6169682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 6179682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 6189682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallTBool CSDLAppUi::HandleKeyL(const TWsEvent& aEvent) 6199682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 6209682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TInt type = aEvent.Type(); 6219682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(!(type == EEventKey || type == EEventKeyUp || type == EEventKeyDown)) 6229682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 6239682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return ETrue; 6249682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 6259682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TKeyEvent& key = *aEvent.Key(); 6269682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if((key.iScanCode == EStdKeyYes) && (gSDLClass.AppFlags() & SDLEnv::EVirtualMouse)) 6279682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 6289682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(type == EEventKeyUp) 6299682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 6309682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iCursor.Toggle(); 6319682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iSdl->RedrawRequest(); 6329682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 6339682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return EFalse; 6349682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 6359682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(iCursor.IsOn()) 6369682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 6379682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall switch(key.iScanCode) 6389682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 6399682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall case EStdKeyUpArrow: 6409682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iCursor.Move(0, -1); 6419682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall break; 6429682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall case EStdKeyDownArrow: 6439682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iCursor.Move(0, 1); 6449682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall break; 6459682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall case EStdKeyLeftArrow: 6469682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iCursor.Move(-1, 0); 6479682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall break; 6489682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall case EStdKeyRightArrow: 6499682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iCursor.Move(1, 0); 6509682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall break; 6519682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall case EStdKeyDevice3: 6529682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(type == EEventKeyUp) 6539682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 6549682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TWsEvent event; 6559682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iCursor.MakeEvent(event, iSDLWin->Position()); 6569682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iSdl->AppendWsEvent(event); 6579682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 6589682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return EFalse; 6599682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall default: 6609682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return ETrue; 6619682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 6629682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iSdl->RedrawRequest(); 6639682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return EFalse; 6649682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 6659682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return ETrue; 6669682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 6679682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 6689682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void CSDLAppUi::HandleWsEventL(const TWsEvent& aEvent, CCoeControl* aDestination) 6699682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 6709682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(iSdl && iWait && HandleKeyL(aEvent)) 6719682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iSdl->AppendWsEvent(aEvent); 6729682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CAknAppUi::HandleWsEventL(aEvent, aDestination); 6739682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 6749682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 6759682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall void CSDLAppUi::HandleResourceChangeL(TInt aType) 6769682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 6779682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CAknAppUi::HandleResourceChangeL(aType); 6789682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(aType == KEikDynamicLayoutVariantSwitch) 6799682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 6809682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iSDLWin->SetRect(ApplicationRect()); 6819682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iSdl->SetContainerWindowL( 6829682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iSDLWin->GetWindow(), 6839682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iEikonEnv->WsSession(), 6849682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall *iEikonEnv->ScreenDevice()); 6859682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 6869682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 6879682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 6889682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 6899682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CSDLAppUi::DoExit(TInt/*Err*/) 6909682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 6919682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iExitRequest = ETrue; 6929682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall Exit(); 6939682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 6949682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 6959682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 6969682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TInt CSDLAppUi::SdlThreadEvent(TInt aEvent, TInt /*aParam*/) 6979682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 6989682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall switch(aEvent) 6999682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 7009682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall case MSDLObserver::EEventResume: 7019682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall break; 7029682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall case MSDLObserver::EEventSuspend: 7039682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(iExitRequest) 7049682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return MSDLObserver::ESuspendNoSuspend; 7059682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall break; 7069682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall case MSDLObserver::EEventWindowReserved: 7079682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall break; 7089682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall case MSDLObserver::EEventWindowNotAvailable: 7099682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall break; 7109682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall case MSDLObserver::EEventScreenSizeChanged: 7119682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall break; 7129682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 7139682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return MSDLObserver::EParameterNone; 7149682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 7159682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 7169682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallTInt CSDLAppUi::SdlEvent(TInt aEvent, TInt /*aParam*/) 7179682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 7189682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall switch(aEvent) 7199682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 7209682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall case MSDLObserver::EEventResume: 7219682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall break; 7229682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall case MSDLObserver::EEventSuspend: 7239682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(iExitRequest) 7249682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return MSDLObserver::ESuspendNoSuspend; 7259682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall break; 7269682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall case MSDLObserver::EEventWindowReserved: 7279682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall break; 7289682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall case MSDLObserver::EEventWindowNotAvailable: 7299682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 7309682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall TRAP_IGNORE(HandleConsoleWindowL()); 7319682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 7329682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall break; 7339682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall case MSDLObserver::EEventScreenSizeChanged: 7349682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall break; 7359682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall case MSDLObserver::EEventKeyMapInit: 7369682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall break; 7379682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall case MSDLObserver::EEventMainExit: 7389682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(iStdOut != 0) 7399682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 7409682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall gSDLClass.AppFlags(SDLEnv::EAllowConsoleView); 7419682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iEikonEnv->WsSession().SetWindowGroupOrdinalPosition(iStdOut, 0); 7429682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 7439682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall break; 7449682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 7459682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return MSDLObserver::EParameterNone; 7469682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 7479682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 7489682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CSDLAppUi::HandleForegroundEventL(TBool aForeground) 7499682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 7509682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CAknAppUi::HandleForegroundEventL(aForeground); 7519682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(!aForeground) 7529682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall HandleConsoleWindow(); 7539682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 7549682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 7559682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CSDLAppUi::HandleConsoleWindow() 7569682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 7579682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(!iIdle->IsActive()) 7589682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iIdle->Start(TCallBack(IdleRequestL, this)); 7599682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 7609682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 7619682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallTBool CSDLAppUi::IdleRequestL(TAny* aThis) 7629682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 7639682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall static_cast<CSDLAppUi*>(aThis)->HandleConsoleWindowL(); 7649682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return EFalse; 7659682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 7669682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 7679682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hallvoid CSDLAppUi::HandleConsoleWindowL() 7689682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 7699682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(gSDLClass.AppFlags() & SDLEnv::EAllowConsoleView) 7709682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 7719682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return; 7729682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 7739682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall RWsSession& ses = iEikonEnv->WsSession(); 7749682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TInt focus = ses.GetFocusWindowGroup(); 7759682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CApaWindowGroupName* name = CApaWindowGroupName::NewLC(ses, focus); 7769682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall const TPtrC caption = name->Caption(); 7779682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall if(0 == caption.CompareF(_L("STDOUT"))) 7789682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 7799682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall iStdOut = focus; 7809682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall ses.SetWindowGroupOrdinalPosition(iEikonEnv->RootWin().Identifier(), 0); 7819682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 7829682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall CleanupStack::PopAndDestroy(); //name 7839682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 7849682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 7859682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 7869682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall//////////////////////////////////////////////////////////////////////// 7879682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 7889682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 7899682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallCApaApplication* NewApplication() 7909682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 7919682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return new CSDLApplication(); 7929682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 7939682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 7949682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 7959682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallEXPORT_C TInt SDLEnv::SetMain(const TMainFunc& aFunc, TInt aSdlFlags, MSDLMainObs* aObs, TInt aSdlExeFlags) 7969682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 7979682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall gSDLClass.SetMain(aFunc, aSdlFlags, aObs, aSdlExeFlags); 7989682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return EikStart::RunApplication(NewApplication); 7999682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 8009682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 8019682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall////////////////////////////////////////////////////////////////////// 8029682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 8039682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse HallTInt SDLUiPrint(const TDesC8& /*aInfo*/) 8049682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall { 8059682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall return KErrNotFound; 8069682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall } 8079682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 8089682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 8099682c8870b8ff5e4ac2e4c70b759f791c6f38c1fJesse Hall 810