--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/wvuing/wvuiave/AppSrc/CCABlockingDialog.h Thu Dec 17 08:41:52 2009 +0200
@@ -0,0 +1,447 @@
+/*
+* 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: Container class for search view
+ *
+*/
+
+
+#ifndef CCABLOCKINGDIALOG_H
+#define CCABLOCKINGDIALOG_H
+
+
+/* Dialogs for selection service implementation.
+ *
+ */
+
+#include <aknform.h>
+#include <aknview.h>
+#include <aknutils.h>
+#include <aknpopup.h>
+#include <avkon.rsg>
+
+#include "impsbuilddefinitions.h"
+
+// FORWARD DECLARATIONS
+class CCAStatusPaneHandler;
+
+/** CCABlockingDialog is the actual interface to the applications.
+ *
+ * Use this class to get a full screen list.
+ *
+ * This class only works in whole main pane. Do not try to use
+ * this directly for other places.
+ *
+ * resource definition for this class:
+ * RESOURCE DIALOG r_res_id_for_a_dialog
+ * {
+ * flags = EAknDialogSelectionList;
+ * buttons = R_AVKON_SOFTKEYS_OPTIONS_BACK;
+ * items =
+ * {
+ * DLG_LINE
+ * {
+ * type = EAknCtSingleGraphicListBox;
+ * id = ESelectionListControl;
+ * control = LISTBOX
+ * {
+ * flags = EAknListBoxSelectionList;
+ * };
+ * }
+ * // the next dlg line is optional.
+ * ,
+ * DLG_LINE
+ * {
+ * itemflags = EEikDlgItemNonFocusing;
+ * id = EFindControl;
+ * type = EAknCtSelectionListFixedFind;
+ * }
+ * };
+ * }
+ *
+ * The listbox type can be one of the following: (avkon.hrh and aknlists.h)
+ * EAknCtSingleListBox (See CAknSingleStyleListBox)
+ * EAknCtSingleNumberListBox (See CAknSingleNumberStyleListBox)
+ * EAknCtSingleHeadingListBox (See CAknSingleHeadingStyleListBox)
+ * EAknCtSingleGraphicListBox (See CAknSingleGraphicStyleListBox)
+ * EAknCtSingleGraphicHeadingListBox (See CAknSingleGraphicHeadingStyleListBox)
+ * EAknCtSingleNumberHeadingListBox (See CAknSingleNumberHeadingStyleListBox)
+ * EAknCtSingleLargeListBox (See CAknSingleLargeStyleListBox)
+ * EAknCtDoubleListBox (See CAknDoubleStyleListBox)
+ * EAknCtDoubleNumberListBox (See CAknDoubleNumberStyleListBox)
+ * EAknCtDoubleTimeListBox (See CAknDoubleTimeStyleListBox)
+ * EAknCtDoubleLargeListBox (See CAknDoubleLargeStyleListBox)
+ * EAknCtDoubleGraphicListBox (See CAknDoubleGraphicStyleListBox)
+ *
+ * The type field while defining find can be one of the following:
+ * EAknCtSelectionListFixedFind
+ * EAknCtSelectionListPopupFind
+ *
+ * The menubar you give for selection list dialog should have
+ * one of the following as one of its menu panes: (avkon.hrh)
+ * R_AVKON_MENUPANE_SELECTION_LIST
+ * R_AVKON_MENUPANE_SELECTION_LIST_WITH_FIND_POPUP
+ *
+ * RESOURCE MENU_BAR r_res_id_for_a_menubar
+ * {
+ * titles =
+ * {
+ * MENU_TITLE { menu_pane = R_AVKON_MENUPANE_SELECTION_LIST; }
+ * };
+ * };
+ *
+ * C++ Usage:
+ * TInt openedItem = 0;
+ * MDesCArray *array = ...;
+ * CCABlockingDialog *dialog = CCABlockingDialog::NewL(openedItem, array, R_RES_ID_FOR_A_MENUBAR);
+ * TInt result = dialog->ExecuteLD(R_RES_ID_FOR_A_DIALOG);
+ * if (result) { ...use openeditem here... } else { ...canceled... }
+ *
+ * Alternatively, you can use:
+ * TInt openedItem = 0;
+ * MDesCArray *array = ...;
+ * CCABlockingDialog *dialog = CCABlockingDialog::NewL(openedItem, array, R_RES_ID_FOR_A_MENUBAR);
+ * dialog->PrepareLC(R_RES_ID_FOR_A_DIALOG);
+ * // do some operations here, for example fill icon array
+ * TInt result = dialog->RunLD();
+ * if (result) { ... } else { ... }
+ *
+ * Often it is also useful to derive from CCABlockingDialog and implement OkToExitL(), constructors and the NewL() methods.
+ * OkToExitL() implementation helps with providing navigation with other dialogs; OkToExitL() is ideal place to launch
+ * new dialogs when a list item is selected. This way when backstepping, the state of the first dialog is preserved...
+ */
+class CCABlockingDialog : public CAknDialog, public MEikListBoxObserver
+ {
+
+ public: // operands for selection lists
+ /** CCABlockingDialog::NewL()
+ *
+ * aOpenedItem Variable to be modified when user selects a list item.
+ * aArray Content of list items; A tab-separated string with texts and indexes to icon array
+ * aMenuBarResourceId Menu items to be shown in options menu
+ * aCommand Callback for state changes. EAknCmdOpen command is send by listbox. Options menu commands come here too.
+ * @param aDontShowTabGroup For navipane control.
+ */
+ static CCABlockingDialog *NewL( TInt &aOpenedItem,
+ MDesCArray *aArray,
+ TInt aMenuBarResourceId,
+ TInt aOkMenuBarResourceId,
+ MEikCommandObserver *aCommand = 0,
+ TBool aDontShowTabGroup = EFalse );
+ static CCABlockingDialog *NewLC( TInt &aOpenedItem,
+ MDesCArray *aArray,
+ TInt aMenuBarResourceId,
+ TInt aOkMenuBarResourceId,
+ MEikCommandObserver *aCommand = 0,
+ TBool aDontShowTabGroup = EFalse );
+
+ public: // different options
+ enum TFindType
+ {
+ ENoFind,
+ EFixedFind,
+ EPopupFind
+ };
+ /** SetupFind() provides a way to enable and disable find and find popup
+ * on runtime.
+ *
+ * You still need entry with id EFindControl to resource file for the find, this is only for disabling
+ * existing find element.
+ */
+ void SetupFind( TFindType aType );
+
+
+ /* GetFindBoxTextL() returns the text in the FindPane, if the FindPane is empty
+ * returns KNullDesC;
+ * @return const TDesC&
+ */
+ const TDesC& GetFindBoxTextL() ;
+
+ /** Icons: IconArray(), SetIconArrayL()
+ *
+ * Icons, images and thumbnails are in this array.
+ *
+ * The list items are tab separated strings with fixed format. Some of the numbers
+ * in the list item strings are indexes to this array.
+ *
+ * This array can be modified by MDesCArray::MdcaPoint() method or at construction of
+ * dialog; after PrepareLC() call.
+ */
+ CArrayPtr<CGulIcon>* IconArray() const;
+ void SetIconArrayL( CArrayPtr<CGulIcon>* aIcons );
+
+ /**
+ * refresh the block dialog title
+ */
+ void RefreshDialogTitleL();
+
+ /**
+ * To handle the deletiontem to the list box
+ */
+ void HandleItemRemovalL();
+
+ /**
+ * To handle the addition of an item to the list box
+ */
+ void HandleItemAdditionL();
+
+ /**
+ * Returns pointer to the listbox being used.
+ */
+ virtual CEikListBox *ListBox() const;
+
+ // Destructor
+ ~CCABlockingDialog();
+
+ void GetHelpContext( TCoeHelpContext& aContext ) const;
+
+ /*
+ * Set the iExitEnable a new value
+ * @param aValue The new value to be set
+ */
+ void SetExitEnabled( TBool aValue );
+
+ protected:
+ CCABlockingDialog( TInt &aIndex,
+ MDesCArray *aArray,
+ TInt aMenuBarResourceId,
+ TInt aOkMenuBarResourceId,
+ MEikCommandObserver *aCommand,
+ TBool aDontShowTabGroup );
+ public: // Customisation from derived classes
+ /** SelectionListProcessCommandL() handles selection list and markable list
+ * default commands.
+ *
+ * For markable lists, this method handles EAknCmdMark, EAknCmdUnmark, EAknMarkAll, EAknUnmarkAll
+ * defined in options menu pane R_AVKON_MENUPANE_MARKABLE_LIST.
+ */
+ virtual void SelectionListProcessCommandL( TInt aCommand );
+
+ protected:
+ /** IsAcceptableListType(): Detection of list and grid layouts
+ *
+ * The CCCABlockingDialog only works with certain list and grid
+ * layouts.
+ *
+ * You will get Panic() if you use your own list/grid layouts and
+ * you do not have this method implemented!
+ *
+ * If you add new list layouts, you should implement this method to
+ * publish the type of the layout using this method. This is especially
+ * the case where you use CAknSelectionGrid with your own grid layout.
+ * (as there are no predefined grid layouts, you need to do this
+ * every time you use a selection grid)
+ *
+ * The following aControlTypes are already implemented and requires
+ * no action:
+ * EAknCtSingleListBox
+ * EAknCtSingleNumberListBox
+ * EAknCtSingleHeadingListBox
+ * EAknCtSingleGraphicListBox
+ * EAknCtSingleGraphicHeadingListBox
+ * EAknCtSingleNumberHeadingListBox
+ * EAknCtSingleLargeListBox
+ * EAknCtDoubleListBox
+ * EAknCtDoubleNumberListBox
+ * EAknCtDoubleTimeListBox
+ * EAknCtDoubleLargeListBox
+ * EAknCtDoubleGraphicListBox
+ * EAknCtSettingListBox
+ * EAknCtSettingNumberListBox
+ *
+ * Any other layout requires you to inherit from CCCABlockingDialog
+ * and implement the following methods:
+ * TBool IsAcceptableListBoxType(TInt aControlType, TBool &aIsFormattedCellList)
+ * {
+ * if (aControlType == EMyCtGridLayout)
+ * {
+ * // CAknGrid is-a formattedcelllistbox.
+ * aIsFormattedCellList = ETrue;
+ * return ETrue;
+ * }
+ * else
+ * return EFalse;
+ * }
+ *
+ * See also CreateCustomControlL(). IsAcceptableListType() and CreateCustomControlL() forms a pair that should
+ * be implemented together.
+ */
+ virtual TBool IsAcceptableListBoxType( TInt aControlType, TBool &aIsFormattedCellList ) const;
+
+ /**
+ * Second phase constructor.
+ */
+ void ConstructL( TInt aMenuBarResourceId );
+
+ protected:
+
+ /**
+ * Processes user commands.
+ * @see MEikCommandObserver
+ */
+ void ProcessCommandL( TInt aCommandId );
+
+ /**
+ * From CEikDialog : Prepare for opening dialog.
+ */
+ void PreLayoutDynInitL();
+
+ /**
+ * @see CAknDialog
+ * @since S60 v3.1
+ */
+ void SetSizeAndPosition( const TSize &aSize );
+
+ /**
+ * @see CAknDialog
+ * @since S60 v3.1
+ */
+ void HandlePointerEventL( const TPointerEvent& aPointerEvent );
+
+ /**
+ * From CEikDialog. Called when dialog is dismissed
+ * @see CEikDialog
+ */
+ TBool OkToExitL( TInt aButtonId );
+
+ /**
+ * Handles list box event
+ */
+ void HandleListBoxEventL( CEikListBox* aListBox, TListBoxEvent aEventType );
+
+ /**
+ * From CoeControl, Returns the number of control contained by this
+ * class.
+ * @see CCoeControl
+ */
+ TInt CountComponentControls() const;
+
+ /**
+ * From CCoeControl, Returns handle to control pointed by aIndex
+ * @param aIndex Wanted control's index [0..n]
+ * @return Handle to wanted control
+ */
+ CCoeControl* ComponentControl( TInt aIndex ) const;
+
+ /**
+ * From CCoeControl. Handles the keyevents
+ * @param aKeyEvent The key event.
+ * @param aType The type of key event: EEventKey,
+ * EEventKeyUp or EEventKeyDown.
+ * @return Indicates whether or not the key event
+ * was used by this control
+ */
+ TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType );
+
+ /** CreateCustomControlL() creates own list or grid layouts.
+ *
+ * Normal implementation of this method is:
+ * SEikControlInfo CreateCustomControlL(TInt aControlType)
+ * {
+ * CCoeControl *control = NULL;
+ * if (aControlType == EMyCtGridLayout)
+ * {
+ * // CMyOddStyleGrid should be derived from CAknFormattedCellListBox or CEikColumnListBox.
+ * control = new(ELeave)CMyOddStyleGrid;
+ * }
+ * SEikControlInfo info = {control,0,0};
+ * return info;
+ * }
+ * See also IsAcceptableListType(). CreateCustomControlL() and IsAcceptableListType() forms a pair that should
+ * be implemented together.
+ */
+ SEikControlInfo CreateCustomControlL( TInt aControlType );
+
+ /**
+ * From CoeControl. Called when focus changed
+ * @see CCoeControl
+ */
+ void FocusChanged(TDrawNow aDrawNow);
+
+ private:
+ /**
+ * ResetFindBoxL : clear all character from findbox
+ */
+ void ResetFindBoxL();
+
+ /**
+ * Layouts current components according to AVKON LAF
+ */
+ void SetLayout();
+
+ protected:
+
+ // Returns the type do findbox being used.
+ CAknSearchField *FindBox() const;
+
+ TBool IsFormattedCellListBox() const;
+
+ void Draw( const TRect& ) const;
+
+ /**
+ * From MEikMenuObserver, Called by framework before
+ * constructing menupane
+ * @param aResourceId Resource to be constructed
+ * @param aMenuPane Pointer to menupane being constructed
+ */
+ void DynInitMenuPaneL( TInt aResourceId, CEikMenuPane* aMenuPane );
+
+ /**
+ * Show context sensitive menubar
+ */
+ void ShowContextMenuL();
+
+ protected:
+ TBool iEnterKeyPressed;
+ private:
+
+ TFindType iFindType;
+ TInt *iSelectedItem;
+
+ //Does not own
+ MDesCArray *iArray;
+
+ //Does not own
+ MEikCommandObserver *iCmdObserver;
+
+ TInt iDialogResourceId;
+ TInt iMenuBarResourceId;
+ TInt iOkMenuBarResourceId;
+
+ //Handle to titlepane. doesn't own
+ CCAStatusPaneHandler* iTitlePane;
+
+ // ETrue if findbox is enabled
+ // else EFalse
+ TBool iFindBoxEnabled;
+
+ /// ETrue if we can not show tabgroup after desctruction of this class.
+ /// EFalse if we can show.
+ TBool iDontShowTabGroup;
+
+ //Holds the text entered in the FindPane
+ //Owns - has to be freed
+ HBufC* iFindPaneText;
+
+ // ETrue if we can shut the dialog.
+ // EFalse if we can not.
+ TBool iExitEnabled;
+
+ // ETrue if touch event is allowed
+ // EFalse if touch event is not allowed
+ TBool iAllowPenEvent;
+ };
+
+
+
+#endif