--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/uifw/AvKon/src/AknInputBlock.cpp Tue Feb 02 01:00:49 2010 +0200
@@ -0,0 +1,180 @@
+/*
+* Copyright (c) 2006-2008 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: AVKON input blocker.
+*
+*/
+
+
+#include "akninputblock.h"
+#include <eikenv.h>
+#include <eikappui.h>
+#include <eikbtgpc.h>
+#include <avkon.rsg>
+#include <eikcba.h>
+#include <avkon.hrh>
+
+//Define command for MSK.
+const TInt KBlockCBAMSKEmptyID = -100;
+
+EXPORT_C CAknInputBlock* CAknInputBlock::NewLC()
+ {
+ CAknInputBlock* self = new(ELeave) CAknInputBlock;
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ return self;
+ }
+
+EXPORT_C CAknInputBlock* CAknInputBlock::NewCancelHandlerLC(MAknInputBlockCancelHandler* aHandlerToCancel)
+ {
+ CAknInputBlock* self = NewLC();
+ self->SetCancelHandler(aHandlerToCancel);
+ return self;
+ }
+
+EXPORT_C CAknInputBlock* CAknInputBlock::NewCancelActiveLC(CActive* aActiveObjectToCancel)
+ {
+ CAknInputBlock* self = NewLC();
+ self->SetCancelActive(aActiveObjectToCancel);
+ return self;
+ }
+
+EXPORT_C CAknInputBlock* CAknInputBlock::NewCancelDeleteLC(CBase* aObjectToDelete)
+ {
+ CAknInputBlock* self = NewLC();
+ self->SetCancelDelete(aObjectToDelete);
+ return self;
+ }
+
+EXPORT_C CAknInputBlock::~CAknInputBlock()
+ {
+ iAppUi->RemoveFromStack(this);
+ if (CapturesPointer())
+ SetPointerCapture(EFalse);
+ delete iCba;
+ Cancel();
+ }
+
+EXPORT_C void CAknInputBlock::SetCancelHandler(MAknInputBlockCancelHandler* aHandlerToCancel)
+ {
+ iHandlerToCancel = aHandlerToCancel;
+ }
+
+EXPORT_C void CAknInputBlock::SetCancelActive(CActive* aActiveObjectToCancel)
+ {
+ iActiveObjectToCancel = aActiveObjectToCancel;
+ }
+
+EXPORT_C void CAknInputBlock::SetCancelDelete(CBase* aObjectToDelete)
+ {
+ iObjectToDelete = aObjectToDelete;
+ }
+
+EXPORT_C void CAknInputBlock::Cancel()
+ {
+ // move ownership to stack in case this is deleted
+ MAknInputBlockCancelHandler* handlerToCancel = iHandlerToCancel;
+ iHandlerToCancel = NULL;
+
+ CActive* activeObjectToCancel = iActiveObjectToCancel;
+ iActiveObjectToCancel = NULL;
+
+ CBase* objectToDelete = iObjectToDelete;
+ iObjectToDelete = NULL;
+
+ if (handlerToCancel)
+ {
+ handlerToCancel->AknInputBlockCancel();
+ }
+
+ if (activeObjectToCancel)
+ {
+ activeObjectToCancel->Cancel();
+ }
+
+ if (objectToDelete)
+ {
+ delete objectToDelete;
+ }
+ }
+
+CAknInputBlock::CAknInputBlock()
+: iAppUi(iEikonEnv->EikAppUi())
+ {
+ }
+
+
+void CAknInputBlock::ConstructL()
+ {
+ CreateWindowL();
+ SetExtent(TPoint(0,0), TSize(0,0));
+ ActivateL();
+ iAppUi->AddToStackL(this, ECoeStackPriorityDialog);
+
+ iCba = CEikButtonGroupContainer::NewL(
+ CEikButtonGroupContainer::ECba,
+ CEikButtonGroupContainer::EHorizontal,
+ this,
+ R_AVKON_SOFTKEYS_EMPTY);
+
+ iCba->ButtonGroup()->AsControl()->DrawableWindow()->SetOrdinalPosition(ECoeWinPriorityNeverAtFront);
+
+ static_cast<CEikCba*>( iCba->ButtonGroup() )->SetButtonGroupFlags(
+ iCba->ButtonGroup()->ButtonGroupFlags() | EAknCBAFlagRespondWhenInvisible );
+
+ //Set the msk command to consume the EKeyOk event.
+ TBuf<5> tmp(_L(""));
+ iCba->SetCommandL( CEikButtonGroupContainer::EMiddleSoftkeyPosition, KBlockCBAMSKEmptyID, tmp );
+ iCba->MakeVisible( EFalse );
+ iCba->SetBoundingRect(TRect(iEikonEnv->ScreenDevice()->SizeInPixels()));
+ }
+
+
+TKeyResponse CAknInputBlock::OfferKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aType)
+ {
+ if (aType == EEventKey && aKeyEvent.iCode == EKeyEscape)
+ {
+#ifdef _DEBUG
+ if (!IsCancellable())
+ RDebug::Print(_L("CAknInputBlock received Escape key while not cancellable"));
+#endif
+ Cancel();
+ }
+ return (aKeyEvent.iScanCode == EStdKeyYes ? EKeyWasNotConsumed : EKeyWasConsumed);
+ }
+
+void CAknInputBlock::ProcessCommandL(TInt /*aCommandId*/)
+ {
+ }
+
+void CAknInputBlock::FocusChanged(TDrawNow /*aDrawNow*/)
+ {
+ if (IsFocused())
+ {
+ SetPointerCapture(ETrue);
+ ClaimPointerGrab(ETrue);
+ }
+ else
+ {
+ SetPointerCapture(EFalse);
+ }
+ }
+
+bool CAknInputBlock::IsCancellable() const
+ {
+ bool cancellable =
+ iHandlerToCancel ||
+ iActiveObjectToCancel ||
+ iObjectToDelete;
+ return cancellable;
+ }