classicui_pub/notes_api/inc/aknnotecontrol.h
branchRCL_3
changeset 56 d48ab3b357f1
child 72 a5e7a4f63858
equal deleted inserted replaced
55:aecbbf00d063 56:d48ab3b357f1
       
     1 /*
       
     2 * Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description: 
       
    15 * 
       
    16 *
       
    17 */
       
    18 
       
    19 
       
    20 
       
    21 #ifndef AKNNOTECONTROL_H
       
    22 #define AKNNOTECONTROL_H
       
    23 
       
    24 // INCLUDES
       
    25 #include <AknControl.h>
       
    26 #include <AknUtils.h>
       
    27 
       
    28 #include <aknprogresstimer.h>
       
    29 #include <AknBitmapAnimation.h>
       
    30 
       
    31 // FORWARD DECLARATIONS
       
    32 class CEikImage;
       
    33 class CEikLabel;
       
    34 class CEikProgressInfo;
       
    35 class CAknNoteAttributes;
       
    36 class CAknTextControl;
       
    37 class TAknWindowLineLayout;
       
    38 
       
    39 // CLASS DECLARATION
       
    40 
       
    41 /**
       
    42 * The control for a note dialog.
       
    43 *
       
    44 * Manage layout of elements in a note dialog:- the text, the image and
       
    45 * animation, the progress bar.
       
    46 *
       
    47 * @since Series 60 0.9
       
    48 * @see CAknNoteDialog, CAknNoteAttributes, CAknText
       
    49 */
       
    50 class CAknNoteControl : public CAknControl 
       
    51 {
       
    52 friend class CAknNoteAttributes;
       
    53 
       
    54 public:	
       
    55 	
       
    56 	/**
       
    57     * C++ default constructor.
       
    58     */
       
    59 	IMPORT_C CAknNoteControl();
       
    60 	
       
    61 	/**
       
    62     * Destructor.
       
    63     */
       
    64 	IMPORT_C virtual ~CAknNoteControl();
       
    65 	
       
    66 	/**
       
    67 	* Constructs controls from a resource file.
       
    68 	* @param aRes The resource reader with which to access @c AVKON_NOTE
       
    69 	* resource.
       
    70 	*/
       
    71 	void ConstructFromResourceL(TResourceReader& aRes);
       
    72 
       
    73 public:
       
    74 
       
    75     /**
       
    76     * Set the note image. 
       
    77     *
       
    78     * Set the image in the note attributes. This reduces the
       
    79     * size of the image if necessary (only fixed set of
       
    80     * image sizes if supported). Perform layout only for
       
    81     * the control. The dialog will not be resized. 
       
    82     * 
       
    83     * @param aImage Pointer to image to set.
       
    84     */
       
    85     IMPORT_C void SetImageL(CEikImage* aImage);
       
    86 
       
    87     /**
       
    88     * Set the note animation. 
       
    89     *
       
    90     * Set the animation in the note attributes.
       
    91     * Perform layout only for the control. 
       
    92     * The dialog will not be resized. 
       
    93     * 
       
    94     * @param aResource ID of @c BMPANIM_DATA resource.
       
    95     */
       
    96 	IMPORT_C void SetAnimationL(TInt aResource);
       
    97 
       
    98 	/**
       
    99     * Set the note icon. 
       
   100     *
       
   101     * Set the icon in the note attributes.
       
   102     * Perform layout only for the control. 
       
   103     * The dialog will not be resized. 
       
   104     * 
       
   105     * @param aIcon Pointer to icon to set.
       
   106     */
       
   107     IMPORT_C void SetIconL(CEikImage* aIcon);
       
   108 
       
   109     /**
       
   110     * Set the progress bar final value in the note attributes. 
       
   111     *  
       
   112     * @param aValue The final value for the progress information control. 
       
   113     * If it is zero, the value is set to one.
       
   114     * @see CEikProgressInfo
       
   115     */	
       
   116 	IMPORT_C void SetFinalProgressValue(TInt aValue);
       
   117 
       
   118 	/**
       
   119     * Increment the progress bar and draw.
       
   120     *
       
   121     * @param  aIncrement The increment to add to the current progress value.
       
   122     * @return 1 if operation hasn't been completed else 0.
       
   123     * 
       
   124     * @see CEikProgressInfo
       
   125     */
       
   126 	IMPORT_C TInt IncrementBarsAndDraw(TInt aIncrement);
       
   127 
       
   128 	/**
       
   129     * Create the progress bar.
       
   130     *
       
   131     * @see CEikProgressInfo
       
   132     */
       
   133 	IMPORT_C void CreateProgressBarL();
       
   134 
       
   135 	/**
       
   136     * Return the progress bar.
       
   137     *
       
   138     * @return Pointer to the progress bar.
       
   139     *
       
   140     * @see CEikProgressInfo
       
   141     */
       
   142 	IMPORT_C CEikProgressInfo* GetProgressInfo();
       
   143 	
       
   144 	/**
       
   145     * Start the note animation.
       
   146     *
       
   147     * @see CAknBitmapAnimation
       
   148     */
       
   149 	IMPORT_C void StartAnimationL();
       
   150 
       
   151 	/**
       
   152     * Stop the note animation.
       
   153     * Calls @c CAknBitmapAnimation::CancelAnimation() for animation object.
       
   154     * @return @c KErrNone if cancellation successful,
       
   155     * @c KErrGenreral if there was no animation object, otherwise another of the
       
   156     * system-wide error codes. 
       
   157     *
       
   158     * @see CAknBitmapAnimation
       
   159     */
       
   160 	IMPORT_C TInt CancelAnimation();
       
   161 
       
   162     /**
       
   163     * Reset the note text.
       
   164     *
       
   165     * Perform layout only for the control. 
       
   166     * The dialog will not be resized. 
       
   167     *
       
   168     * @see CAknTextControl
       
   169     */
       
   170 	IMPORT_C void ResetText();
       
   171 
       
   172     /**
       
   173     * Set whole text for the note control.
       
   174     *
       
   175     * Perform layout only for the control. 
       
   176     * The dialog will not be resized. 
       
   177     * @param aText String to set.
       
   178     */	
       
   179 	IMPORT_C void SetTextL(const TDesC& aText);
       
   180 
       
   181 	/**
       
   182     * Set text for a specific line. Any previous text will be overwritten,
       
   183     * except for the text that was set for other lines via this method.
       
   184     *
       
   185     * This method prevents @c ParseTextL from having any effect, hence text
       
   186     * control needs to know font and line width to allocate space.
       
   187     * 
       
   188     * This method is kept for backwards compatibility as the same
       
   189     * results could be achieved by the other @c SetTextL with no wrapping
       
   190     * enabled (flag in note attributes) and newline characters in the text to
       
   191     * indicate a new line.
       
   192     *
       
   193     * Perform layout only for the control. 
       
   194     * The dialog will not be resized. 
       
   195     *
       
   196     * @param aText String to set.
       
   197     * @param aLineNum Specifies the line of the text to be set.
       
   198     */
       
   199 	IMPORT_C void SetTextL(const TDesC& aText,TInt aLineNum);
       
   200 	
       
   201     /**
       
   202     * Set the number inside the note text. The text must have been 
       
   203     * previously set via resource or via @c SetTextL and must have a
       
   204     * \%d or \%N in it.
       
   205     *
       
   206     * Note:- This method could be replaced by a @c SetTextL method with 
       
   207     * a variable number of arguments.
       
   208     *
       
   209     * Perform layout only for the control. 
       
   210     * The dialog will not be resized. 
       
   211     *
       
   212     * @param aNumber Integer to be set inside the text.
       
   213     */	
       
   214 	IMPORT_C void SetTextNumberL(const TInt aNumber);
       
   215 
       
   216     /**
       
   217     * Determine which text is to be used, either the text for
       
   218     * singular notes, e.g. "You have 1 new message" or the text
       
   219     * for plural notes, e.g. "You have %N new messages". These
       
   220     * texts must have been set via resource.
       
   221     *
       
   222     * Note:- This method could be replaced by a @c SetTextL method with 
       
   223     * a variable number of arguments.
       
   224     *
       
   225     * Perform layout only for the control. 
       
   226     * The dialog will not be resized. 
       
   227     *
       
   228     * @param aIsPlural @c ETrue if plural form of the text is needed,
       
   229     * otherwise @c EFalse.
       
   230     */	
       
   231 	IMPORT_C void SetTextPluralityL(const TBool aIsPlural);
       
   232 	
       
   233 	/**
       
   234     * Return the number of lines.
       
   235     *
       
   236     * @return The number of lines. 
       
   237     */
       
   238 	IMPORT_C TInt NumberOfLines() const;
       
   239 
       
   240 public:
       
   241 
       
   242     /**
       
   243     * Do layout.
       
   244     *
       
   245     * Before doing layout parse the text (This might be redundant except
       
   246     * when the control attributs are trasfered but is left here to avoid
       
   247     * breaking the functionality of this exported method).
       
   248     *
       
   249     * Layout is done only if it is needed, i.e. if the attributes indicates
       
   250     * that something has changed in such a way that layout needs to be 
       
   251     * performed again, e.g. a line of text has been added.
       
   252     *
       
   253     * This method assumes that the rect of the control has not been changed. 
       
   254     * On the contrary, SizeChanged does not assume that the rect is the same
       
   255     * and hence always performs layout.
       
   256     */
       
   257 	IMPORT_C void Layout();
       
   258 
       
   259 	/**
       
   260     *
       
   261     * This is used by a dialog to layout the control correctly.
       
   262     * @return type of layout to be used.
       
   263     *
       
   264     */
       
   265 	void WindowLayout( TAknWindowLineLayout& aLayout ) const;
       
   266 
       
   267     /**
       
   268     * Return the note height. 
       
   269     *
       
   270     * The note height is taken from the layout compiler and
       
   271     * depends on number of lines and the note layout type. 
       
   272     * 
       
   273     * @return The note height in pixels.
       
   274     */
       
   275 	IMPORT_C TInt NoteHeight() const;
       
   276 
       
   277 	/**
       
   278     * Return the note width. 
       
   279     *
       
   280     * The note width is taken from the layout compiler. 
       
   281     * Contrary to the note height, the note width does not depend on
       
   282     * the note layout type or on number of lines. 
       
   283     * 
       
   284     * @return The note width in pixels.
       
   285     */
       
   286 	IMPORT_C TInt NoteWidth() const;
       
   287 
       
   288 public:	//Interface to CAknNoteDialog 
       
   289 
       
   290     /**
       
   291     * Gets the minimun size requided by the control.
       
   292     * @return The minimum size required by the control.
       
   293     */
       
   294 	TSize MinimumSize();
       
   295 
       
   296 	/**
       
   297     * Accessor to note attributes stored in @c CAknNoteAttributes.
       
   298     * @return Pointer to @c CAknNoteAttributes.
       
   299 	*/
       
   300 	CAknNoteAttributes* Attributes() const;
       
   301 
       
   302 	/**
       
   303     * Used by sleeping notes when going to background,
       
   304     * in order to stop and delete animations.        
       
   305     * Calls @c CancelAnimation(). 
       
   306     */
       
   307 	void Reset();
       
   308 	
       
   309 	/**
       
   310     * Updates the image according to the current skin.
       
   311     */
       
   312 	void CreateDefaultImageL();
       
   313 
       
   314 public:
       
   315 	IMPORT_C void HandlePointerEventL(const TPointerEvent& aPointerEvent);
       
   316 
       
   317 public:
       
   318 		/**
       
   319 		* Manage indexes into LAF tables
       
   320 		*
       
   321         * NP   stands for "Note Popup"
       
   322         *
       
   323         * WNP  stands for "Waiting/progress Note Popup"
       
   324         *
       
   325         * NWIP stands for "Note With Image Popup"
       
   326 		*/
       
   327 		class TIndex 
       
   328 		{	
       
   329 		public:
       
   330 
       
   331 			/**
       
   332             * C++ default constructor.
       
   333             * @param aNumberOfLines Number of lines.
       
   334             * @param aHasNti Determines whether or not there is a number type
       
   335             * indication (NTI).
       
   336             * @param aImageSize Image size.
       
   337             */		
       
   338 			TIndex(TInt aNumberOfLines, 
       
   339 			       TBool aHasNti = EFalse, 
       
   340 			       TSize aImageSize = TSize(0,0));	
       
   341 		
       
   342 		public:	
       
   343 
       
   344            /**
       
   345             * Returns number of lines.
       
   346             * @return Number of lines.
       
   347             */			
       
   348             TInt Lines() const;	
       
   349 			
       
   350 		public:	
       
   351 
       
   352     	    /**
       
   353             * Return index into table "Waiting/progress Note Popup Window
       
   354             * Texts Line 1". Index depends on the number of text lines and
       
   355             * whether or not there is a number type indication (NTI). See 
       
   356             * table in *.lay and LAF specs for working out indexes.
       
   357             * @param aLineNum Line number.
       
   358             * @return Index into table "Waiting/progress Note Popup Window
       
   359             * Texts Line 1".
       
   360             */		
       
   361 			TInt WNPWindowTextsLine1(TInt aLineNum) const;
       
   362 
       
   363 			/**
       
   364             * Return Left index into table "Note With Image Popup Window
       
   365             * Texts Line 1". Index depends on number of text lines, whether or
       
   366             * not there is a number type indication (NTI). See table in *.lay
       
   367             * and LAF specs for working out indexes.
       
   368             * @param aLineNum Line number.
       
   369             * @return Left index into table "Note With Image Popup Window
       
   370             * Texts Line 1".
       
   371             */
       
   372 			TInt NWIPWindowTextsLine1Left(TInt aLineNum) const;
       
   373 
       
   374         	/**
       
   375             * Return Right index into table "Note With Image Popup Window
       
   376             * Texts Line 1". Index depends on number of text lines and image
       
   377             * size. See table in *.lay and LAF specs for working out indexes.
       
   378             *
       
   379             * Table has 3 dimensions:-
       
   380             * - Dimension 1 is the line number
       
   381             * - Dimension 2 is the image width  
       
   382             * - Dimension 3 is the image height 
       
   383             * 
       
   384             * @param aLineNum Line number.
       
   385             * @return Right index into table "Note With Image Popup Window
       
   386             * Texts Line 1".
       
   387             */
       
   388 			TInt NWIPWindowTextsLine1Right(TInt aLineNum) const;
       
   389 
       
   390 			/**
       
   391             * Return Bottom index into table "Note With Image Popup Window
       
   392             * Texts Line 1". Index is the same as the number of text lines
       
   393             * minus one. See table in *.lay and LAF specs for working out
       
   394             * indexes.
       
   395             * @param aLineNum Line number.
       
   396             * @return Bottom index into table "Note With Image Popup Window
       
   397             * Texts Line 1".
       
   398             */
       
   399 			TInt NWIPWindowTextsLine1B(TInt aLineNum) const;
       
   400 
       
   401 			/**
       
   402             * Return Width index into table "Note With Image Popup Window 
       
   403             * Texts Line 1". Index depends on number of text lines, whether or
       
   404             * not there is a number type indication (NTI) and image size. See
       
   405             * table in *.lay and LAF specs for working out indexes.
       
   406             *
       
   407             * Table has 4 dimensions:-
       
   408             * - Dimension 1 indicates the presence of an NTI(index 0 = NO NTI,
       
   409             * index 1 = NTI)
       
   410             * - Dimension 2 is the line number
       
   411             * - Dimension 3 is the image width
       
   412             * - Dimension 4 is the image height
       
   413             *
       
   414             * @param aLineNum Line number.
       
   415             * @return Width index into table "Note With Image Popup Window
       
   416             * Texts Line 1".
       
   417             */
       
   418 			TInt NWIPWindowTextsLine1W(TInt aLineNum) const;
       
   419 			
       
   420             /**
       
   421             * Return indexes for table @c AKN_LAYOUT_WINDOW_popup_note_window.
       
   422             * If there are 0-2 lines the index is 0. If there are 3 lines the
       
   423             * index is 1, if there are 4 or more lines the index is 2.
       
   424             * @return Indexes for table @c AKN_LAYOUT_WINDOW_popup_note_window.
       
   425             */
       
   426 			TInt PopupNoteWindow() const;
       
   427 	
       
   428 	        /**
       
   429             * Return indexes for table 
       
   430             * @c AKN_LAYOUT_WINDOW_popup_note_wait_window. 
       
   431             * If there are 0-2 lines the index is 0. If there are 3 lines the
       
   432             * index is 1, if there are 4 lines the index is 2.
       
   433             * @return Indexes for table 
       
   434             * @c AKN_LAYOUT_WINDOW_popup_note_wait_window.
       
   435             */
       
   436 			TInt PopupNoteWaitWindow() const;
       
   437 
       
   438 		private:	
       
   439 			void SelfTest() const;	
       
   440 			TInt ImageWidthIndex() const;
       
   441 			TInt ImageHeightIndex() const;
       
   442 			TInt HasNtiIndex() const;
       
   443 
       
   444 		private:	
       
   445 			TInt  iNumberOfLines;
       
   446 			TBool iHasNti;
       
   447 			TSize iImageSize;
       
   448 		};	
       
   449 
       
   450 private:
       
   451 	//COECONTROL METHODS
       
   452 	void Draw(const TRect& aRect) const;
       
   453 	void SizeChanged();
       
   454 	void DoLayout();
       
   455 	TInt CountComponentControls() const;
       
   456 	CCoeControl* ComponentControl(TInt anIndex) const;
       
   457 private:
       
   458     /**
       
   459     * From CAknControl
       
   460     */
       
   461     IMPORT_C void* ExtensionInterface( TUid aInterface );
       
   462 private:	
       
   463 	//LAYOUT METHODS
       
   464 	TInt NumberTypeIndicationIndex() const;
       
   465 	TInt ImageWidthIndex() const;
       
   466 
       
   467 	TInt AnimationIndex();
       
   468 	void AnimationNoteLayout();
       
   469 
       
   470 	//Layout for general notes
       
   471 	void GeneralNoteLayout();
       
   472 	void GeneralNoteLabelLayout();
       
   473 	void GeneralNoteIconLayout();
       
   474 
       
   475 	//Layout for progress and wait notes
       
   476 	void ProgressNoteLayout();
       
   477 	void ProgressNoteLabelLayout();
       
   478 	void ProgressNoteProgressBarLayout();
       
   479 	void ProgressNoteIconLayout();
       
   480 	void ProgressNoteNumberTypeIndicationLayout();
       
   481 
       
   482 	//Layout for image notes
       
   483 	void ImageNoteLayout();
       
   484 	void ImageNoteLabelLayout();
       
   485 	void ImageNoteImageLayout();
       
   486 	void ImageNoteShadowLayout();
       
   487 	void ImageNoteNumberTypeIndicationLayout();
       
   488 
       
   489 	TAknWindowLineLayout GetImageLayout(const TSize& aSize); 
       
   490 	TAknWindowLineLayout GetImageShadowLayout(const TSize& aSize); 
       
   491 
       
   492 	TRect LayoutRect() const;
       
   493 	void SetLineWidthsL();
       
   494 
       
   495 	
       
   496 	void ReduceImageIfNeeded();
       
   497 
       
   498 	void ParseTextL();
       
   499 
       
   500 private:
       
   501 	CAknTextControl*    TextControl() const; 
       
   502 
       
   503 	CEikImage* Image() const; 
       
   504 	CEikImage* Icon() const; 
       
   505 	
       
   506 	CEikProgressInfo* ProgressBar() const; 
       
   507 	
       
   508 	CAknProgressTimer* Timer() const; 
       
   509 	CAknBitmapAnimation* Animation() const; 
       
   510 	
       
   511 	TBitFlags&  Flags() const; 
       
   512 
       
   513 private:
       
   514 	TInt                iNoteLayout;
       
   515 	TAknLayoutRect      iShadowRect;
       
   516 	TBool               iImageHasShadow;
       
   517 	
       
   518 	CAknNoteAttributes*  iAttributes;
       
   519 	CArrayFixFlat<TInt>* iLineWidths;
       
   520 
       
   521 public:
       
   522 	/**
       
   523 	 * @deprecated - use SetTextL() method. 
       
   524 	 * @param aText aText string to set.
       
   525 	 */
       
   526 	 
       
   527 	IMPORT_C void SetDynamicTextL(const TDesC& aText);
       
   528 	
       
   529 	/**
       
   530 	 * @deprecated - use @c SetTextL().
       
   531 	 */		
       
   532 	IMPORT_C void UpdateAndFormatLabelsL(const TDesC& aLabels);
       
   533 	
       
   534 	/**
       
   535 	 * @deprecated - use @c SetTextL().
       
   536 	 */		
       
   537 	IMPORT_C void UpdateLabelsL(const TDesC& aLabel1, 
       
   538 	                            const TDesC& aLabel2=KNullDesC, 
       
   539 	                            const TDesC& aLabel3=KNullDesC);
       
   540 	/**
       
   541 	 * @deprecated - use @c SetTextL().
       
   542 	 */	 	
       
   543 	IMPORT_C void UpdateLabels(const TDesC& aLabel1, 
       
   544 	                           const TDesC& aLabel2=KNullDesC, 
       
   545 	                           const TDesC& aLabel3=KNullDesC);
       
   546 
       
   547 	/**
       
   548      * @deprecated - label length is taken care of already.
       
   549      *
       
   550      * Don't use this method anymore. Empty implementation.
       
   551      */
       
   552 	IMPORT_C void SetLabelReserveLengthL(TInt aLength1=0, 
       
   553 	                                     TInt aLength2=0, 
       
   554 	                                     TInt aLength3=0);
       
   555 	
       
   556 protected: // from MObjectProvider
       
   557 
       
   558     /**
       
   559     * From @c MObjectProvider. Gets an (@c MAknsControlContext) object whose 
       
   560     * type is encapsulated by the specified @c TTypeUid object. Calls 
       
   561     * @c SupplyMopObject(TTypeUid aId, CEikButtonGroupContainer* iCba, 
       
   562     * CEikMenuBar* iMenu).
       
   563     * @since Series 60 2.0
       
   564     * @param aId Encapsulates the UID that identifies the type of object
       
   565     * required.
       
   566     * @return Pointer to the @c MAknsControlContext object provided. Note that
       
   567     * the pointer may be @c NULL.
       
   568     */
       
   569 	IMPORT_C TTypeUid::Ptr MopSupplyObject(TTypeUid aId);
       
   570 
       
   571 public: // new methods
       
   572 
       
   573     /**
       
   574     * Sets up background rectangle context. 
       
   575     * @since Series 60 2.1
       
   576     * @param aRect Rectangle position to layout the outer and the inner
       
   577     * rectangles of the frame.
       
   578     * @param aPos Relative coordinates of parent position in screen. 
       
   579     * @param aOwnerNotDialog @c ETrue if the owner is non-dialog control.
       
   580     */
       
   581 	IMPORT_C void SetBgRect(const TRect& aRect, 
       
   582 	                        const TPoint& aPos, 
       
   583 	                        TBool aOwnerNotDialog = EFalse);
       
   584 	                        
       
   585 	/**
       
   586     * @return note layout type 
       
   587     * see @c Avkon.hrh for Note dialog constants
       
   588     */
       
   589 	TInt NoteLayout() const;
       
   590 	};
       
   591 
       
   592 #endif // AKNNOTECONTROL_H