diff -r 000000000000 -r 2f259fa3e83a uifw/EikStd/coctlsrc/EIKHKEYT.CPP --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uifw/EikStd/coctlsrc/EIKHKEYT.CPP Tue Feb 02 01:00:49 2010 +0200 @@ -0,0 +1,180 @@ +/* +* Copyright (c) 1997-1999 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* +*/ + + +#include +#include +#include +#include + +EXPORT_C CEikHotKeyTable::CEikHotKeyTable() + : CArrayFixFlat (4) // granularity of 4 + { + } + +EXPORT_C CEikHotKeyTable::~CEikHotKeyTable() + { + } + +EXPORT_C TBool CEikHotKeyTable::HotKeyFromCommandId(TInt aCommandId,TInt& aKeycode,TInt& aModifiers) const + { + if (Count()) + { + TInt i=0; + const SEikHotKey* hotKey=&(*this)[0]; + while (i++iCommandId==aCommandId) + { + if (i<=iNumberPlain) + { + aKeycode=hotKey->iKeycode; + aModifiers=0; + } + else + { + aKeycode=hotKey->iKeycode-('a'-1); + if (i>iNumberPlain+iNumberCtrl) + aModifiers=EModifierShift|EModifierCtrl; + else + aModifiers=EModifierCtrl; + } + return(ETrue); + } + hotKey++; + } + } + return(EFalse); + } + +EXPORT_C TInt CEikHotKeyTable::CommandIdFromHotKey(TInt aKeycode,TInt aModifiers) const + { + if (aModifiers&EModifierPureKeycode && aModifiers&EModifierCtrl) + return 0; + TInt start=0; + TInt count=0; + if (!aModifiers || aModifiers==EModifierShift) + count=iNumberPlain; + else + { + aKeycode+='a'-1; + if (aModifiers==EModifierCtrl) + { + start=iNumberPlain; + count=iNumberCtrl; + } + else if (aModifiers==(EModifierShift|EModifierCtrl)) + { + start=iNumberPlain+iNumberCtrl; + count=iNumberShiftCtrl; + } + } + if (count && Count()) + { + const SEikHotKey* hotKey=&(*this)[start]; + while (count--) + { + if (hotKey->iKeycode==aKeycode) + return(hotKey->iCommandId); + hotKey++; + } + } + return(0); + } + +EXPORT_C void CEikHotKeyTable::AddItemL(TInt aCommandId,TInt aKeycode,TInt aModifiers) + { + TInt pos=0; + TInt* pNumber=&iNumberPlain; + switch (aModifiers) + { + case 0: + break; + case EModifierCtrl: + pos=iNumberPlain; + pNumber=&iNumberCtrl; + break; + case (EModifierShift|EModifierCtrl): + pos=iNumberPlain+iNumberCtrl; + pNumber=&iNumberShiftCtrl; + break; + default: + User::Leave(KErrNotSupported); + } + SEikHotKey hotKey; + hotKey.iCommandId=aCommandId; + hotKey.iKeycode=aKeycode; + InsertL(pos+*pNumber,hotKey); + (*pNumber)++; // after the InsertL succeeds + } + +EXPORT_C void CEikHotKeyTable::RemoveItem(TInt aCommandId) + { + TInt i=0; + FOREVER + { + if (i==Count()) + Panic(EEikPanicNoHotKeyToRemove); + SEikHotKey& hotKey=(*this)[i]; + if (hotKey.iCommandId==aCommandId) + { + if (iCreateResourceReaderLC(reader,aResourceId); + iNumberPlain=reader.ReadInt16(); + if (iNumberPlain) + { + const SEikHotKey* ptr=(const SEikHotKey*)reader.Ptr(); + reader.Advance(iNumberPlain*sizeof(SEikHotKey)); + AppendL(ptr,iNumberPlain); + } + iNumberCtrl=reader.ReadInt16(); + if (iNumberCtrl) + { + const SEikHotKey* ptr=(const SEikHotKey*)reader.Ptr(); + reader.Advance(iNumberCtrl*sizeof(SEikHotKey)); + AppendL(ptr,iNumberCtrl); + } + iNumberShiftCtrl=reader.ReadInt16(); + if (iNumberShiftCtrl) + { + const SEikHotKey* ptr=(const SEikHotKey*)reader.Ptr(); + reader.Advance(iNumberShiftCtrl*sizeof(SEikHotKey)); + AppendL(ptr,iNumberShiftCtrl); + } + CleanupStack::PopAndDestroy(); + } + +EXPORT_C void CEikHotKeyTable::Reset() + { + iNumberPlain=iNumberCtrl=iNumberShiftCtrl=0; + CArrayFixFlat::Reset(); + }