diff -r 000000000000 -r a41df078684a kernel/eka/ewsrv/ky_capt.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kernel/eka/ewsrv/ky_capt.cpp Mon Oct 19 15:55:17 2009 +0100 @@ -0,0 +1,164 @@ +// Copyright (c) 1996-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "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: +// e32\ewsrv\ky_capt.cpp +// Provides the operations of setting and cancelling capture-keys +// +// + +#include +#include + +const TInt KCaptureKeyArrayGranularity=5; + +EXPORT_C CCaptureKeys::CCaptureKeys() + : iCKarray(KCaptureKeyArrayGranularity, _FOFF(TCaptureKey,iHandle)) + { + } + +EXPORT_C void CCaptureKeys::Construct() +// +// +// + { + } + +EXPORT_C CCaptureKeys::~CCaptureKeys() +// +// Destructor +// + { + iCKarray.Close(); + } + +void CCaptureKeys::CheckCaptureKey(const TCaptureKey& aCaptureKey) + { + + if ((aCaptureKey.iModifiers.iValue&~aCaptureKey.iModifiers.iMask)!=0) + User::Leave(KErrArgument); + } + +EXPORT_C void CCaptureKeys::AddCaptureKeyL(const TCaptureKey& aCaptureKey) +// +// Adds the specified capture-key to the list +// + { + + AddCaptureKeyL(aCaptureKey,0); + } + +EXPORT_C void CCaptureKeys::AddCaptureKeyL(const TCaptureKey& aCaptureKey, TUint8 aPriority) +// +// Adds the specified capture-key to the beginning of the list +// + { + + TCaptureKey captureKey(aCaptureKey); + captureKey.iKeyCodePattern.iFiller = aPriority;// Priority is stored in spare data member 'iFiller' + CheckCaptureKey(captureKey); + User::LeaveIfError(iCKarray.Insert(captureKey,0)); + } + +EXPORT_C void CCaptureKeys::SetCaptureKey(TUint32 aHandle, const TCaptureKey& aCaptureKey) +// +// Finds the first capture-key from the list that matches the handle and sets +// it to the new value. +// + { + + SetCaptureKey(aHandle,aCaptureKey,0); + } + +EXPORT_C void CCaptureKeys::SetCaptureKey(TUint32 aHandle, const TCaptureKey& aCaptureKey, TUint8 aPriority) +// +// Finds the first capture-key from the list that matches the handle and sets +// it to the new value. +// + { + + TCaptureKey captureKey(aCaptureKey); + captureKey.iKeyCodePattern.iFiller = aPriority;// Priority is stored in spare data member 'iFiller' + CheckCaptureKey(captureKey); + TCaptureKey ck; + ck.iHandle=aHandle; + TInt r=iCKarray.Find(ck); + if (r>=0) + iCKarray[r]=captureKey; + } + +void CCaptureKeys::removeCaptureKey(TUint aIndex) +// +// Removes the capture-key at the given aIndex from the list +// + { + + iCKarray.Remove(aIndex); + } + +EXPORT_C void CCaptureKeys::CancelCaptureKey(TUint32 aHandle) +// +// Removes the first capture-key from the list that matches the handle; +// + { + + TCaptureKey ck; + ck.iHandle=aHandle; + TInt r=iCKarray.Find(ck); + if (r>=0) + iCKarray.Remove(r); + } + +EXPORT_C void CCaptureKeys::CancelAllCaptureKeys(TUint32 aApp) +// +// Removes all capture-keys from the list that match the given application handle +// + { + + TInt i=iCKarray.Count(); + while(--i>=0) + { + if (iCKarray[i].iApp==aApp) + iCKarray.Remove(i); + } + } + +EXPORT_C void CCaptureKeys::ProcessCaptureKeys(TKeyData& aKeyData) const +// +// Sets aKeyData.iIsCaptureKey to true if the given aKeyCode match a capture-key in the list +// and sets aKeyData.iApp to the handle of the last application that set it; +// otherwise sets aKeyData.iIsCaptureKey to false and aKeyData.iApp to 0. +// + { + + TCharExtended ch=aKeyData.iKeyCode; + aKeyData.iIsCaptureKey=EFalse; + aKeyData.iApp = 0x0; + TInt c=iCKarray.Count(); + TInt i; + TInt priority=KMinTInt; + for (i=0; ipriority) + { + priority=ck.iKeyCodePattern.iFiller; + aKeyData.iApp=ck.iApp; + aKeyData.iHandle=ck.iHandle; + aKeyData.iIsCaptureKey=ETrue; + } + } + } + } +