classicui_plat/input_block_api/inc/AknInputBlock.h
changeset 0 2f259fa3e83a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/classicui_plat/input_block_api/inc/AknInputBlock.h	Tue Feb 02 01:00:49 2010 +0200
@@ -0,0 +1,168 @@
+/*
+* Copyright (c) 2006 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: 
+*
+*/
+
+
+#ifndef AKNINPUTBLOCK_H
+#define AKNINPUTBLOCK_H
+
+#include <coecntrl.h>
+#include <eikcmobs.h>
+
+// FORWARD DECLARATIONS
+class CEikButtonGroupContainer;
+class CEikAppUi;
+
+
+/**
+ * MAknInputBlockCancelHandler is an interface to an object that
+ * can handle the UI framework attempting to cancel a CAknInputBlock.
+ * @since 3.1
+ */
+class MAknInputBlockCancelHandler
+	{
+public:
+	virtual void AknInputBlockCancel() = 0;
+	};
+
+
+/**
+ * CAknInputBlock blocks user input, key and pen, from reaching
+ * existing controls, such as softkeys, dialogs or main panes.
+ * It will not block controls higher on the control stack than
+ * ECoeStackPriorityDialog.
+ * It will not block subsequently created dialogs.
+ * It will detect attempts from the UI framework to cancel the 
+ * blocked state.
+ * Clients should supply something to handle such cancel requests.
+ * There are three ways that cancel can be signalled: through
+ * an M-class interface, by cancelling an active object, by
+ * deleting a CBase derived object.
+ * All three cancel methods can be active. When a cancel signal
+ * is detected, the handlers will be triggered in the order of
+ * M-class first, then active object cancel, finally CBase delete.
+ * If no cancel hander is supplied, all input is blocked, including
+ * framework attempts to deactivate views and exit the application.
+ *
+ * This is an example of use of all cancel methods with an active object that
+ * blocks with a CActiveSchedulerWait...
+ * CAknInputBlock* inputBlock = CAknInputBlock::NewCancelHandlerLC(this);	// notify "this" on cancel
+ * CAOWait* wait = CAOWait::NewL();			// create waiting active object
+ * inputBlock->SetCancelActive(wait);		// set it as an active object to cancel
+ * inputBlock->SetCancelDelete(wait);		// set it as an object to delete, takes ownership
+ * wait->Start();
+ * inputBlock->SetCancelHandler(NULL);		// Clear the cancel handler so that "this" is not notified by cancel on deletion
+ * CleanupStack::PopAndDestroy(inputBlock);	// wait will be cancelled and deleted by inputBlock
+ *
+ * @since 3.1
+ */
+NONSHARABLE_CLASS(CAknInputBlock) : public CCoeControl, public MEikCommandObserver
+	{
+public:
+    /**
+    * Create a new input blocker with no cancel support.
+    * Cancel handling can be set later with one of the
+    * SetCancel... methods.
+    * Note: while this object exists without cancel support,
+    * view deactivations and application exit requests will not be processed.
+    * @return a new instance of CAknInputBlock on the cleanup stack
+    */
+	IMPORT_C static CAknInputBlock* NewLC();
+    /**
+    * Create a new input blocker with M-class cancel support.
+    * @param aHandlerToCancel, a pointer to the M-class instance
+    * to call back on cancel. Does not take ownership. Can be
+    * called with NULL to clear the cancel handler.
+    * @return a new instance of CAknInputBlock on the cleanup stack
+    */
+	IMPORT_C static CAknInputBlock* NewCancelHandlerLC(MAknInputBlockCancelHandler* aHandlerToCancel);
+    /**
+    * Create a new input blocker with active object cancel support.
+    * @param aActiveObjectToCancel, a pointer to the active object
+    * to cancel. Does not take ownership. Can be called with
+    * NULL to clear the cancel handler.
+    * @return a new instance of CAknInputBlock on the cleanup stack
+    */
+	IMPORT_C static CAknInputBlock* NewCancelActiveLC(CActive* aActiveObjectToCancel);
+    /**
+    * Create a new input blocker with object delete cancel support.
+    * @param aObjectToDelete, a pointer to the CBase-derived object
+    * to delete on cancel. Take ownership. Can be called with
+    * NULL to clear the cancel handler.
+    * @return a new instance of CAknInputBlock on the cleanup stack
+    */
+	IMPORT_C static CAknInputBlock* NewCancelDeleteLC(CBase* aObjectToDelete);
+	/**
+	* destructor
+	* This will also call Cancel()
+	*/
+	IMPORT_C ~CAknInputBlock();
+
+	/**
+	* Set a cancel handler.
+    * @param aHandlerToCancel, a pointer to the M-class instance
+    * to call back on cancel. Does not take ownership. Can be
+    * called with NULL to clear the cancel handler.
+	*/
+	IMPORT_C void SetCancelHandler(MAknInputBlockCancelHandler* aHandlerToCancel);
+	/**
+	* Set a cancel handler.
+    * @param aActiveObjectToCancel, a pointer to the active object
+    * to cancel. Does not take ownership. Can be called with
+    * NULL to clear the cancel handler.
+	*/
+	IMPORT_C void SetCancelActive(CActive* aActiveObjectToCancel);
+	/**
+	* Set a cancel handler.
+    * @param aObjectToDelete, a pointer to the CBase-derived object
+    * to delete on cancel. Take ownership. Can be called with
+    * NULL to clear the cancel handler.
+	*/
+	IMPORT_C void SetCancelDelete(CBase* aObjectToDelete);
+
+	/**
+	* Called when the UI framework wants to cancel this input
+	* blocking state, eg on app exit.
+	* May also be called manually to force cancel.
+	* After cancelling, all handers are set to NULL.
+	*/
+	IMPORT_C void Cancel();
+	
+private:
+	CAknInputBlock();
+	void ConstructL();
+	
+	bool IsCancellable() const;
+
+private: // from CCoeControl
+    TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aType);
+	void FocusChanged(TDrawNow aDrawNow);
+
+private: // from MEikCommandObserver
+	void ProcessCommandL(TInt /*aCommandId*/);
+
+private:
+	MAknInputBlockCancelHandler* iHandlerToCancel;	// not owned
+	CActive* iActiveObjectToCancel;					// not owned
+	CBase* iObjectToDelete;							// owned
+	CEikAppUi* iAppUi;								// not owned
+	CEikButtonGroupContainer* iCba;					// owned
+	};
+
+
+
+
+#endif