diff -r 000000000000 -r 72b543305e3a messagingappbase/smartmessaging/ringbc/inc/RingingToneBioControl.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingappbase/smartmessaging/ringbc/inc/RingingToneBioControl.h Thu Dec 17 08:44:11 2009 +0200 @@ -0,0 +1,450 @@ +/* +* Copyright (c) 2002-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: BIO control for Ringing Tones. +* +*/ + + + +#ifndef CRINGINGTONEBIOCONTROL_H +#define CRINGINGTONEBIOCONTROL_H + +// INCLUDES +#include // for CMsgBioControl +#include // MMsgBioControlExtension; +#include // observer interface for CMsgAudioControl +#include // MEikCommandObserver + + +// FORWARD DECLARATIONS +class CEikButtonGroupContainer; +class CEikRichTextEditor; +class CMsgAudioControl; + +// CLASS DECLARATION + +/** + * Bio control for Ringing Tones. + */ +class CRingingToneBioControl : + public CMsgBioControl, + public MEikCommandObserver, + public MMsgAsyncControlObserver + { + + public: // Constructor and destructor + + /** + * Two-phased constructor + * @param aObserver Reference to the Bio control observer. + * @param aSession Reference to Message Server session. + * @param aId Id of the message. + * @param aEditorOrViewerMode Flags the new Bio control as editor or + * viewer. + * @param aFile filehandle. + * @return The newly created object. + */ + IMPORT_C static CMsgBioControl* NewL( + MMsgBioControlObserver& aObserver, + CMsvSession* aSession, + TMsvId aId, + TMsgBioMode aEditorOrViewerMode, + const RFile* aFile); + + /** + * Destructor. + */ + ~CRingingToneBioControl(); + + public: // Functions from MEikCommandObserver + + /** + * From MEikCommandObserver + * Handle prosess command. + * @param aCommandId command id. + */ + void ProcessCommandL( TInt aCommandId ); + + public: // Functions from MMsgBioControl + + /** + * From MMsgBioControl Calculates and sets size for a Bio control + * according to aSize. + * The height of the Bio control may be less or more than requested by + * aSize, but the width must be exactly the same. If width of the Bio + * control is not the same as given by aSize, the width must be reset + * back to requested one. + * @param aSize Size A reference to the suggested size and new size.. + */ + void SetAndGetSizeL( TSize& aSize ); + + /** + * From MMsgBioControl This is called by the container to allow the Bio + * control to add a menu item. + * @param aMenuPane Reference to the application's menu. + */ + void SetMenuCommandSetL( CEikMenuPane& aMenuPane ); + + /** + * From MMsgBioControl Returns a rectangle slice of the bio controls + * viewing area. It is used by the CMsgEditorView class for scrolling + * the screen. + * @return TRect to show viewing area + */ + TRect CurrentLineRect() const; + + /** + * From MMsgBioControl Returns true if Focus change is possible. + * @param aDirection The direction to be checked. + * @return ETrue if it is possible and vice versa + */ + TBool IsFocusChangePossible( TMsgFocusDirection aDirection ) const; + + /** + * From MMsgBioControl The container application obtains a header text + * from the bio control. + * @return The header text. + */ + HBufC* HeaderTextL() const; + + /** + * From MMsgBioControl The command handler. + * The Bio Control should only handle its own commands that it has set + * using the function SetMenuCommandSetL(). + * @param aCommand ID of command to be handled. + * @return If the command is handled, it returns ETrue, and vice versa + */ + TBool HandleBioCommandL(TInt aCommand); + + /** + * The application can get the option menu recommendations using this + * function. The function comes from MMsgBioControl. This is the + * default implementation which returns the flags + * KMsgBioCallBackToSender and KMsgBioCreateContactCard. Bio Controls + * should override this if it is not ok. + * @return The option menu permission flags. If the flag is off it + * means that the option menu command is not recommended with this + * Bio Control. + */ + TUint32 OptionMenuPermissionsL() const; + + /** + * Get the virtual height of the control's content. + * @return virtual height in pixels. + */ + TInt VirtualHeight(); + + /** + * Get the position of invisible cursor. + * @return cursor position in pixels. + */ + TInt VirtualVisibleTop(); + + public: // Functions from CCoeControl + + /** + * A CCoeControl virtual for handling key events. + * @param aKeyEvent The key event. + * @param aType TEventCode + * @return EKeyWasConsumed or EKeyWasNotConsumed + */ + TKeyResponse OfferKeyEventL( + const TKeyEvent& aKeyEvent, + TEventCode aType ); + + /** + * Returns a bio control's a context sensitive help. + * @param aHelpContext Help context. + */ + void GetHelpContext(TCoeHelpContext& aHelpContext) const; + + public: //from MMsgAsyncControlObserver + + void MsgAsyncControlStateChanged( CMsgBaseControl& aControl, + TMsgAsyncControlState aNewState, + TMsgAsyncControlState aOldState ); + + void MsgAsyncControlResourceChanged( CMsgBaseControl& aControl, + TInt aType ); + + + + protected: // Functions from CCoeControl + + /** + * From CCoeControl Handles a change to the control's resources + * of type aType which are shared across the environment, + * e.g. color scheme change, or in this case, skin change. + * @param aType Event type + */ + void HandleResourceChange( TInt aType ); + + /** + * From CCoeControl Gives the number of sub controls. + * @return Count of controls be included in this component + */ + TInt CountComponentControls() const; + + /** + * From CCoeControl Returns a pointer to a certain sub control. + * @param aIndex Index for control + * @return Pointer to component in question. + */ + CCoeControl* ComponentControl( TInt aIndex ) const; + + /** + * From CCoeControl This is called by the CONE framework, and gives + * this control a chance to manage the layout of its sub controls. + */ + void SizeChanged(); + + /** + * From CCoeControl This is called when focus is lost or gained, and + * is used for setting the focus of the list box. + * @param aDrawNow + */ + void FocusChanged( TDrawNow aDrawNow ); + + /** + * From CCoeControl Sets the container window for this control. The + * container control uses this function to set the same window for + * this control. + * @param aContainer container + */ + void SetContainerWindowL( const CCoeControl& aContainer ); + + /** + * Used to draw Ringing tone icon + */ + void Draw(const TRect& aRect) const; + + void HandlePointerEventL(const TPointerEvent& aPointerEvent); + + private: // Constructors + + /** + * The constructor. + * @param aObserver MMsgBioControlObserver + * @param aSession CMsvSession, the Message Server session. + * @param aId Id of the message in Message Server. + * @param aEditorOrViewerMode Flags the control as being either editor + * or viewer. + * @param aFile file handle + */ + CRingingToneBioControl( + MMsgBioControlObserver& aObserver, + CMsvSession* aSession, + TMsvId aId, + TMsgBioMode aEditorOrViewerMode, + const RFile* aFile); + + /** + * By default Symbian OS constructor is private. + */ + void ConstructL(); + + private: //New functions + + /** + * Loads a ringing tone. + */ + void OpenFileL(); + + /** + * Plays ringin tone. Because support for playing OTA files are not + * supported in WINS, command plays nothing + */ + void PlaybackL(); + + /** + * Stops playing ringin tone. + */ + void StopPlayback(); + + /** + * Creates richeditor for ringing tone title. + */ + void CreateRichEditorL(); + + /** + * add song title as a item to aItemArray + * @param aItemArray Array for listbox + */ + void AddSongTitleToArrayL(CDesCArray& aItemArray) const; + + /** + * Seek if string contains back slash + * @param aTitle Descriptor where to find back slash + * @return ETrue if back slash was found, else EFalse + */ + TBool IsBackSlash(TDes& aTitle); + + /** + * Seek if string consists solely single dot or double dot + * @param aTitle Descriptor where to find dots + * @return ETrue if only dots are found, else EFalse + */ + TBool IsOnlyDots(TDes& aTitle); + + /** + * Finds out if file already exists + * @param aTitle Filename without path or file extent + * @return ETrue if file already exists, else EFalse + */ + TBool ExistsL(TDes& aTitle); + + /** + * Finds out is the filename valid for saving + * @param aTitle Filename without path or file extent + * @param aNotes Flag to indicate if the notes are shown + * @return ETrue if file name is valid, else EFalse + */ + TBool IsValidL(TDes& aTitle, TBool aNotes); + + /** + * + * @param aTitle Filename without path or file extent + * @return EFalse if user pressed cancel, else ETrue + */ + TBool AskNameL(TDes& aTitle); + + /** + * + * @param aTitle Filename without path or file extent + * @return EFalse if user pressed cancel, else ETrue + */ + TBool AskAndValidNameL(TDes& aTitle); + + /** + * Add ringing tone to the file system + */ + TBool SaveToneL(TDes& aTitle); + + /** + * Called when user like to add Tone to composer. + */ + void TrySaveToneL(); + + /** + * Creates target path for saving tone to filesystem + * @param aName File name to be added in path + * @return Target path + */ + HBufC* CreatePathForSavingLC(const TDesC& aName); + + /** + * User interactivity, ask if liked to rename saveable tone, + * then ask the new name for tone. + * @return true if the new name is available, otherwise false. + */ + TBool RenameQueryL(TDes& aTitle); + + /** + * Set Default name with increments to the iSaveTitle + */ + void SetDefaultNameL(TDes& aName); + + /** + * Help function to handle name query + * @param aName ringing tone name + * @return ETrue if it is OK, else EFalse + */ + TBool NameQueryL(TDes& aName); + + /** + * Rip title form ringing tone format by using composer engine + */ + void TakeTitleL(); + + /** + * Increments numbers after file name, e.g.Ringing Tone1->Ringing Tone2 + * @param aFileName ringing tone name + */ + void IncrementFileNameL(TDes& aFileName); + + /** + * Find out the target path + * @return target path + */ + HBufC* TargetPathLC(); + + /** + * Checks is the ringing tone message in valid format. Leaves with *** if not. + */ + void CheckMsgValidityL(); + + /** + * Loads ringing tone icon bitmap and mask, and fills transparent area with white color and + * saves the new bitmap to temp folder. + */ + void FillBitmapMaskL(); + + /** + * Correts CEikRichTextEditor's Font and set the alignment to centered. + */ + void CorrectFormatToRichEditorL(); + + /** + * An information note is popped. + * @param aStringResource The string resource id. + */ + void InformationNoteL(TInt aStringResource); + + /** + * Gets profile settings from shared data. + */ + void GetAndSetRingingToneVolumeL(); + + private: // Hidden away + + /** + * C++ default constructor, hidden away from outsiders. + */ + CRingingToneBioControl(); + + /** + * Copy-constructor is prohibited. + */ + CRingingToneBioControl(const CRingingToneBioControl& aSource); + + /** + * Assignment operator is prohibited. + */ + const CRingingToneBioControl& operator=( + const CRingingToneBioControl& aSource ); + + private: // data + + ///Ringing tone name + HBufC* iToneTitle; + + /// control for showing Ringing tone name + CEikRichTextEditor* iRichEditor; + + /* + * Audio player + * Owned + */ + CMsgAudioControl *iAudioControl; + + //audio control states + TMsgAsyncControlState iPlayerState; + + //Object to handle softkeys in playtime + CEikButtonGroupContainer *iStopCba; + }; + +#endif //CRINGINGTONEBIOCONTROL_H + +// End of File