classicui_pub/setting_pages_api/inc/AknCheckBoxSettingPage.h
changeset 0 2f259fa3e83a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/classicui_pub/setting_pages_api/inc/AknCheckBoxSettingPage.h	Tue Feb 02 01:00:49 2010 +0200
@@ -0,0 +1,281 @@
+/*
+* Copyright (c) 2002 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: 
+*  Check box list support for setting page in editable state
+*
+*
+*/
+
+
+#ifndef __AKNCHECKBOXSETTINGPAGE_H__
+#define __AKNCHECKBOXSETTINGPAGE_H__ 
+
+
+#include <AknListBoxSettingPage.h>
+
+// forward declare
+class CAknCheckBoxSettingPageExtension;
+
+/**
+* Class to encapsulate text and Boolean status; An array of these provides the interface to the CheckBoxSettingPage
+* The boolean status can be changed after construction, but the text cannot be changed.
+*
+*
+*/
+class CSelectableItem : public CBase
+{
+public :
+	/**
+	* C++ constructor
+	* @param	aItemText	text to go into the compound type
+	* @param	aSelected	Pass ETrue to select the item; EFalse to deselect it.
+	*/
+	IMPORT_C CSelectableItem( TDesC& aItemText, TBool aSelected  );
+	/**
+	* C++ Destructor
+	*/
+	virtual ~CSelectableItem();
+
+	/** 
+	* 2nd stage construction
+	*
+	*/
+	IMPORT_C void ConstructL();
+
+	/**
+	* Set the selection status to ETrue or EFalse
+	* 
+	* @param	aSelected	status that the selection status is to be set to.
+	*/
+	IMPORT_C void SetSelectionStatus( TBool aSelected );
+
+	/**
+	* Access the selection status
+	* @return	EFalse if not selected; otherwise not EFalse
+	*/
+	IMPORT_C TBool SelectionStatus();
+
+	/**
+	* Access to the item text as TPtr
+	* @return	TPtrC that points to items's text.
+	*/
+	IMPORT_C TPtrC ItemText();
+
+private:
+	TDesC& iDesC;	// Holds the reference to the descriptor prior to construction
+	HBufC* iItem;	// This is on the heap and is used post constuction
+	TBool iSelected;
+};
+
+
+/**
+* Array type for holding selection items
+*
+*/
+class CSelectionItemList : public CArrayPtrFlat<CSelectableItem>, public MDesCArray
+	{
+public:
+	/**
+	* Constructor
+	*/
+	IMPORT_C CSelectionItemList( TInt Granularity );
+// from MDesCArray
+
+	/**
+	* From MDesCArray:
+	*
+	* @return number of items in the array
+	*/
+	IMPORT_C TInt MdcaCount() const;
+
+	/**
+	* Access to item text of the elements in the array
+	* @return item text of aIndex'th element
+	*/
+	IMPORT_C TPtrC MdcaPoint(TInt aIndex) const;
+	};
+
+
+
+/**
+* Setting Page class supporting multiple selection. 
+*
+* Interface is via a CSelectionItemList array
+*
+*/
+class CAknCheckBoxSettingPage : public CAknListBoxSettingPage
+{
+public:
+	IMPORT_C CAknCheckBoxSettingPage(TInt aResourceID, CSelectionItemList* aItemArray );
+ /**
+ * Constructor that allows separate setting page and editor resources
+ *
+ * In all cases the number (if supplied i.e. <> 0 ) is used.  
+ *
+ *		Editor Resource		Setting Page Resource
+ *			present				present				Both are used (but text & number overridden)
+ *			 = 0				present				Editor resource is used via SP resource
+ *			present				= 0					Default Avkon SP resource if used (to no effect?)
+ *			 = 0				= 0					Not permitted
+ *
+ * Note: The first argument is a TDesC* (rather than TDesC&) because the other constructor
+ * cannot initialize such a member without allocation or having an internal dummy buffer.
+ *
+ * Rules for text and numbers: The rules are the same for both:  (non-zero length) text or number other 
+ * than EAknSettingPageNoOrdinalDisplayed if given in this constructor will not override resource 
+ * (unless that is zero length or EAknSettingPageNoOrdinalDisplayed).  Note, however, that text or number given via the 
+ * specific API for setting them, WILL override the resource.
+ * It is assumed that number from resource is very rare.  Special text is somewhat more likely.
+ * 
+ * @param aSettingTitleText	Text at top of setting pane
+ *	@param aSettingNumber		Number at top left (if present)
+ * @param aControlType			Determines the type constructed and how its resource is read
+ * @param aEditorResourceId	Editor resource to use in the setting page (if present)
+ * @param aSettingPageResourceId		Setting Page to use (if present)
+ * @param aItemArray			List of option texts and their selection states
+ */
+	IMPORT_C CAknCheckBoxSettingPage(	const TDesC* aSettingTitleText, 
+								TInt aSettingNumber, 
+								TInt aControlType,
+								TInt aEditorResourceId, 
+								TInt aSettingPageResourceId,
+								CSelectionItemList* aItemArray );
+
+
+	/**
+	* 2nd phase constructor
+	*
+	*/
+	IMPORT_C virtual void ConstructL();
+
+	/** 
+	*
+	* Access to ListBoxControl
+	*
+	* @return pointer to listbox used by the setting page; No transfer of ownership
+	*/
+	IMPORT_C CAknSetStyleListBox* ListBoxControl() const;
+
+	/**
+	* Method to update the item array after a change in content 
+	*
+	* @param CSelectionItemList* aItemArray	The new array of selectable items
+	*/
+	IMPORT_C void SetSelectionItemArrayL( CSelectionItemList* aItemArray );
+
+// From MEikListBoxObserver
+	/**
+	* Observer callback from the listbox 
+	*
+	* @param	aListBox	ptr to listbox that is calling the method
+	* @param	aEventType	type of event; defined by MEikListBoxObserver
+	*/
+	IMPORT_C virtual void HandleListBoxEventL(CEikListBox* aListBox,
+				 MEikListBoxObserver::TListBoxEvent aEventType);
+
+    /**
+    *  From CCoeControl
+    *  Handles pointer events
+    */	  
+    IMPORT_C void HandlePointerEventL(const TPointerEvent& aPointerEvent);
+    
+    IMPORT_C void HandleResourceChange(TInt aType);
+
+protected:
+	/**
+	* Destructor
+	*/ 
+	IMPORT_C virtual ~CAknCheckBoxSettingPage();
+
+	/**
+	* Called when the setting is updated
+	*
+	*/
+	IMPORT_C virtual void UpdateSettingL();
+
+	/**
+	* Called when the setting page is about to be displayed
+	*
+	*/
+	IMPORT_C void DynamicInitL();
+
+	// From MEikCommandObserver
+	IMPORT_C virtual void ProcessCommandL(TInt aCommandId);
+	/*
+	* This method is called upon Select command id.  It should change the setting but not exit in
+	* this case.
+	*/
+	IMPORT_C virtual void SelectCurrentItemL();
+
+//
+// CoeControl Framework and reserved methods
+//
+protected:
+
+/**
+ * Writes the internal state of the control and its components to aStream.
+ * Does nothing in release mode.
+ * Designed to be overidden and base called by subclasses.
+ *
+ * @param	aWriteSteam		A connected write stream
+ */	
+	IMPORT_C virtual void WriteInternalStateL(RWriteStream& aWriteStream) const;
+private:
+    /**
+    * From CAknControl
+    */
+    IMPORT_C void* ExtensionInterface( TUid aInterface );
+
+private:
+/**
+ *	Reserved method derived from CCoeControl
+ */
+	IMPORT_C virtual void Reserved_2();
+
+/**
+ * New reserved methods for CAknSettingPage hierarchy
+ */ 
+private: 
+	IMPORT_C virtual void CAknSettingPage_Reserved_1();
+	IMPORT_C virtual void CAknSettingPage_Reserved_2();
+
+private:
+/**
+ * New reserved method from CAknListBoxSettingPage 
+ *
+ */
+	IMPORT_C virtual void CAknListBoxSettingPage_Reserved_1();
+
+private:
+	void UpdateAllSelections();
+	void SetAllSelectionsL();
+	void ToggleSelectionL();
+
+	/**
+	* Internal method to re-generate the internal, "decorated" text array used in the
+	* real listbox. 
+	*/
+	void GenerateInternalArrayAndGiveToListBoxL();
+	
+	void CreateCheckBoxBitmapsL();
+
+	CDesCArrayFlat* iInternalItemArray;	
+
+	// the following are not owned
+	CSelectionItemList* iItemArray; 
+
+    CAknCheckBoxSettingPageExtension* iExtension; // owned
+};
+
+#endif