--- /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 <msgbiocontrol.h> // for CMsgBioControl
+#include <MMsgBioControlExtension.h> // MMsgBioControlExtension;
+#include <msgasynccontrolobserver.h> // observer interface for CMsgAudioControl
+#include <eikcmobs.h> // 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