uifw/AvKon/inc/AknAdaptiveSearchGrid.h
changeset 0 2f259fa3e83a
child 10 9f56a4e1b8ab
child 14 3320e4e6e8bb
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/uifw/AvKon/inc/AknAdaptiveSearchGrid.h	Tue Feb 02 01:00:49 2010 +0200
@@ -0,0 +1,437 @@
+/*
+* Copyright (c) 2005 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:  Popup adaptive search grid component
+*
+*/
+
+
+#ifndef __AKNADAPTIVESEARCHGRID_H__
+#define __AKNADAPTIVESEARCHGRID_H__
+
+// INCLUDES
+#include <AknControl.h>     // CCoeControl
+#include <aknbutton.h>	    // CAknbutton
+#include <eiklabel.h>
+#include "AknAdaptiveSearchGridObserver.h"
+#include <AknWsEventObserver.h>
+
+// FORWARD DECLARATIONS
+class CAknsBasicBackgroundControlContext;
+class CAknsFrameBackgroundControlContext;
+class CAknsListBoxBackgroundControlContext;
+class CAknInputFrame;
+class CEikEdwin;
+
+// CLASS DECLARATION
+/**
+ *  The class to provide adaptive search grid for the application
+ *
+ *  @lib avkon.lib
+ *  @since Series 60 5.0
+ */
+
+class CAknAdaptiveSearchGrid : public CAknControl, 							   
+							   public MCoeControlObserver,
+							   public MCoeControlBackground,
+							   public MAknWsEventObserver				   
+    {
+    public: // Constructors and destructor
+
+    /**
+     * Two-phased constructor.
+     *
+     * @param aTextLimit text limit for the findpane. 
+     * @param aFieldStyle The same flag as search field
+     * @return Pointer to the created adaptive search grid object
+     */
+    static CAknAdaptiveSearchGrid* NewL( const TInt aTextLimit, 
+                                         TInt aFieldStyle );
+
+    /**
+     * Two-phased constructor.
+     *
+     * @param aTextLimit text limit for the findpane. 
+     * @param aFieldStyle The same flag as search field
+     * @return Pointer to the created adaptive search grid object
+     */
+    static CAknAdaptiveSearchGrid* NewLC( const TInt aTextLimit, 
+                                          TInt aFieldStyle );
+    
+        /**
+         * Destructor.
+         */
+         ~CAknAdaptiveSearchGrid();
+
+    public:  // From base classes
+		
+		/**
+         * From CCoeControl.
+         * Gets the number of controls contained in a compound control.
+         *
+         * @return The number of component controls contained by this control.
+         */
+         TInt CountComponentControls() const;
+
+        /**
+         * From CCoeControl.
+         * Gets the specified component of a compound control.
+         *
+         * @param aIndex The index of the control to get
+         * @return The component control with an index of aIndex.
+         */
+         CCoeControl* ComponentControl( TInt aIndex ) const ;
+
+    	/**
+         * From CCoeControl.
+         * Handles a change to the control's resources.
+         *
+         * @param aType A message UID value.
+         */
+         void HandleResourceChange( TInt aType );
+                
+        /**
+         * From CCoeControl.
+         * Retrieves an object of the same type as that encapsulated in aId.
+         *
+         * @param aId An encapsulated object type ID.
+         * @return Encapsulated pointer to the object provided. 
+         *      Note that the encapsulated pointer may be NULL.
+         */
+         TTypeUid::Ptr MopSupplyObject( TTypeUid aId );
+                 
+        /**
+         * From MCoeControlObserver.
+         * Handles an event from an observed adaptive search grid item.
+         *
+         * @param aControl The control which sent the event
+         * @param aEventType The event type
+         */
+         void HandleControlEventL( CCoeControl* aControl, TCoeEvent aEventType );
+
+	    /**
+         * From CCoeControl       
+         *          
+         * @param aRect the rectangle of this view that needs updating
+         */
+         void Draw( const TRect& aRect ) const;
+        
+        /**
+         * From CCoeControl.
+         * This function is called whenever a control gains or loses focus.
+         *
+         * @param aDrawNow Contains the value that was passed to it by SetFocus().
+         */
+         void FocusChanged( TDrawNow aDrawNow );
+         
+        /**
+         * From MAknWsEventObserver. Handles window server events.       
+         *       
+         * @param The event that occurred.
+         * @param The control that the event occurred in.                 
+         */
+         void HandleWsEventL( const TWsEvent& aEvent, CCoeControl* aDestination ); 
+                  
+        /**
+         * From MCoeControlBackground.
+         * Draw the background for a given control.
+         * The text drawer that shall be used to draw text on the specific
+         * background can be fetched through the GetTextDrawer() method.
+         *
+         * @param aGc Graphics context used for drawing.
+         * @param aControl The control being drawn (may be a child of the drawer).
+         * @param aRect The area to be redrawn.
+         */
+        void Draw( CWindowGc& aGc, const CCoeControl& aControl, const TRect& aRect ) const;
+          
+    public: // New functions     
+        
+        /**
+         * Sets the observer for the adaptive search grid.
+         *
+         * @param aObserver A pointer to the observer. Ownership is not changed.
+         */
+         void SetAdaptiveSearchGridObserver( MAknAdaptiveSearchGridObserver* aObserver );
+
+        /**
+         * Returns a pointer to the adaptive search grid observer.
+         *
+         * @return Pointer to the adaptive search grid observer.
+         */
+         MAknAdaptiveSearchGridObserver* AdaptiveSearchGridObserver();        
+        
+        /**
+         * Shows or hides adaptive search grid. 
+         * Position of the top left corner should be set in advance. 
+         * Adaptive search grid set visible with this method is by default focusing.
+         * Does nothing if adaptive search grid is disabled.
+         *          
+         * @param aVisible ETrue to show it, EFalse to hide it.
+         * @param aSelectAll ETrue to highlight all content of editor.
+         */
+         void SetVisibilityL( TBool aVisible, TBool aSelectAll );
+        
+        /**
+         * Show adaptive search grid button.
+         */
+         void ShowL();
+    
+        /**
+         * Returns adaptive search grid visibility at this moment
+         *
+         * @return ETrue, if adaptive search grid is shown.
+         */
+         TBool IsShown() const;
+        
+   		/**
+         * Set chars to button array        
+         * 
+         * @param aGridChars are the characters for adaptive search grid.                  
+         */
+	 	 void SetButtonGridChars( const TDesC& aGridChars );
+		
+		/**
+		 * Sets text into search field.
+		 * 		 
+		 * @param const aSearchTxt Reference to the text buffer.
+         */            
+	     void SetSearchTextToFindPane( const TDesC& aSearchTxt );
+		
+		/**
+         * Initiates buttons for adaptive search grid        
+         */
+		 void InitGridButtons();
+		
+	    /**
+         * Initiates position for buttons of grid        
+         */
+         void GridButtonsPositions();
+         
+       	/**
+         * Main function for initiation adaptive search grid       
+         */
+  		 void InitGrid();  		 
+  		 
+  		/**
+         * Show controls backspase, close, prev, next buttons and find pane      
+         */
+  		 void ShowControls();
+                        
+        /**
+         * Hides adaptive search grid.
+         */
+         void HideL();              
+         
+         static const TInt EDeleteLastCharPressed = -1;
+		 static const TInt ECloseGridPressed = -2;  
+		 
+    public:
+		 
+		/**
+		 * When the rect of find pane is set, this functions will be notified
+         * to record the size of it.
+		 */
+		void SaveFindPaneRect( const TRect &aRect );
+  
+    protected: // From base class
+  
+  		/**
+         * From CCoeControl.
+         * Responds to size changes to sets the size and position of 
+         * the contents of this control.
+         */
+         void SizeChanged();  
+  
+    private: // Constructors
+
+        /**
+         * C++ default constructor.
+         *
+         * @param aTextLimit text limit for the findpane. 
+         */
+         CAknAdaptiveSearchGrid( const TInt aTextLimit );               
+        
+        /**
+         * Symbian 2nd phase constructor.
+         * @param aFieldStyle The same flag as search field
+         */
+         void ConstructL( TInt aFieldStyle );
+          
+
+    private: // New functions         
+                 
+        /**
+         * Update page indicator.
+         */
+         void UpdatePageIndicatorL();    
+    
+        /**
+         * Sets the flag to be on or off and also calls
+         * CCoeControl::MakeVisible().
+         * 
+         * @param aShown is True, if adaptive search grid is shown.                  
+         */
+         void SetShown( const TBool aShown );
+        
+        /**
+         * Create and add button controlto adaptive search grid.
+         * 
+         * @param aText text for button grid                       
+         */
+         CAknButton* CreateButtonL();  
+        
+        /**
+         * Show next page
+         */ 
+         void NextPage();
+        
+        /**
+         * Show previous page
+         */
+         void PrevPage();     
+     
+        /**
+         * Initiate controls
+         * Create control buttons: close, backspase, next, previous.
+         * @param aFieldStyle The same flag as search field
+         */
+         void InitControlsL( TInt aFieldStyle);
+         
+        /**
+         * Initiate position for controls
+         */         
+    	 void ControlsPositions();         
+      
+	    /**
+         * Gets rect from layout data
+         */
+         TRect RectFromLayout( const TRect& aParent,
+             const TAknWindowComponentLayout& aComponentLayout ) const;
+             
+        /**
+         * Update visibility of buttons from grid
+         */
+         void UpdateVisibleButtonsL();
+         
+        /**
+         * Update layout option accoding to current amount of rows
+         */
+         void UpdatePageAndRowCount();    
+         
+         /**
+         * Update icon's color accoding to current theme
+         */
+         CGulIcon* GetColorIconL( TInt aIndex );
+         /**
+          * Update layout variant
+          */
+         void UpdateLayoutVariant();
+         
+         /**
+          * Update adaptive search grid skin.
+          */
+         void UpdateSkinL();
+
+            
+    private: // Member variables
+		
+        // array for adaptive search grid buttons
+        RPointerArray<CAknButton> iButtonArray;
+
+        // control buttons
+        CAknButton* iCloseButton;
+        CAknButton* iDeleteButton;  
+        CAknButton* iPrevButton;
+        CAknButton* iNextButton;       
+        CAknButton* iLastFocusedButton;
+      
+        // page indicator if several pages       
+        CEikLabel* iPageIndicator;           
+                
+        // find pane for AS
+        CAknInputFrame* iInputFrame;
+        CEikEdwin* iEditor;         
+        TInt iTextLimit;     
+	    
+	    // skin context for find pane
+   	    CAknsListBoxBackgroundControlContext* iSkinContextOfFindPane;   	
+   	    CAknsFrameBackgroundControlContext* iBgContextOfFindPane; 
+   	    	    	       	    
+   	    // contex for control pane   
+   	    CAknsBasicBackgroundControlContext* iBgContextOfControlPane;    	     
+   	    
+        // whether adaptive search grid is shown right now
+        // IsVisible() is not safe enough because can be 
+        // changed from outside with MakeVisible() 
+        TBool iShown;
+	    
+	    // number of grid rows and cols
+       	TInt iNumOfRows;
+       	TInt iNumOfCols;
+	    	           	
+       	// number of grid pages
+       	TInt iNumOfPages;
+       	       	
+       	// current page which shown on screen
+       	TInt iCurrentPage;
+     		
+       	// current amount of total grid button
+       	TInt iTotalGridButtons;
+       	
+       	// max amount of total grid button
+       	TInt iMaxAmountOfButtons;
+       	
+       	// current button icon size
+       	TSize iButtonIconSize; 
+       	
+       	// chars of grid
+       	HBufC* iGridChars;          	
+        
+        // region which AS cover currently 	
+        RRegion iCurrentRegion;
+          	
+        // current layout option
+       	// 0 portrait with pages
+        // 1 landscape with pages
+        // 2 portrait with no pages
+        // 3 landscape with no pages       	
+       	TInt iLayoutOption;   
+       	
+       	TBool iToolbarShown;   
+       	       	
+       	// not owned
+       	CAknAppUi* iAppUi;        
+    
+    	// observer to report adaptive search grid item events
+   		// not owned
+       	MAknAdaptiveSearchGridObserver* iAdaptiveSearchGridObserver;      	
+       	
+       	//Reset grids position when layout is changed.
+       	TBool iLayoutChanged;
+   
+
+        // For ELJG-7VC8Q2: popup find pane overlap with Adaptive Search grid  
+        TBool iPopupFindpane;
+        // The length of overlap section 
+        TInt iOverlapLength;
+        
+        TRect iFindpaneRect;
+        
+        TBool iFindPaneSizeChanged;
+
+    };
+
+#endif // __AKNADAPTIVESEARCHGRID_H__
+
+// End of File
+