diff -r 000000000000 -r 094583676ce7 wvuing/wvuiave/AppSrc/CCAChatViewContainer.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wvuing/wvuiave/AppSrc/CCAChatViewContainer.h Thu Dec 17 08:41:52 2009 +0200 @@ -0,0 +1,694 @@ +/* +* 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 chat group view + * +*/ + + + +#ifndef CCACHATVIEWCONTAINER_H +#define CCACHATVIEWCONTAINER_H + +// INCLUDES +#include "mcagroupeventobserverpc.h" +#include "MCALayoutChangeObserver.h" +#include "ChatDefinitions.h" // KNickNameLength +#include "mcatapeventobserver.h" +#include "MCAMsgAddedToRichTxtCtrlObserver.h" +#include "CCAMessageEditor.h" // MCAMessageEditorObserver +#include // TNewServiceFileType +#include +#include + +// FORWARD DECLARATIONS +class MCAViewSwitcher; +class MCARecipientObserver; +class CCAMessageEditor; +class CCAAppUi; +class MCASkinVariant; +class CCAMessageExtensionsHandler; +class CCAChatViewControl; +class MObjectProvider; +class MCAConversationMessage; +class MCAGroupPC; +class CCAEditIndicator; +class MCAGroupUtilsPC; +class CCAChatView; + + + +// CLASS DECLARATION + +/** + * This is container class for chat view + * @since 3.2 + */ +class CCAChatViewContainer : public CCoeControl, + public MEikEdwinSizeObserver, + public MCAGroupEventObserverPC, + public MCALayoutChangeObserver, + public MCATapEventObserver, + public MCoeControlObserver, + public MCAMessageEditorObserver, + public MCAMsgAddedToRichTxtCtrlObserver + { + public: // Enumerations + + /** + * Observed controls (MCATapEventObserver) + */ + enum TTouchableControls + { + EMessageList = 1, + EMessageEditor + }; + + public: // Constructors and destructor + + /** + * Symbian OS default constructor. + * @param aRect Frame rectangle for container. + * @param aViewSwitcher Handle to view switcher. + * @param aGroupPC Handle to group pc + * @param aRecipientObserver Recipient observer + * @param aParent Context access mechanism. + * @param aExtensionHandler Ref. to Msg. Extension Handler + * @param aCba Pointer to Button Group Container class + * @param aActivateFromTabSwitch Flag used while switching + * in tabs, to do focus in text box + * @param aTabId Ref. to tab id for this group + */ + static CCAChatViewContainer* NewL( const TRect& aRect, + MCAViewSwitcher& aViewSwitcher, + MCAGroupPC* aGroupPC, + MCARecipientObserver& aRecipientObserver, + MObjectProvider* aParent, + CCAMessageExtensionsHandler& aExtensionHandler, + CEikButtonGroupContainer* aCba, + const TBool aActivateFromTabSwitch, + TInt& aTabId, + CCAChatView * aView ); + + /** + * Destructor. + */ + virtual ~CCAChatViewContainer(); + + private: // constructors + + /** + * Default constructor + * @param aViewSwitcher Handle to view switcher. + * @param aGroupPC Handle to group pc + * @param aRecipientObserver Recipient observer + * @param aParent Context access mechanism. + * @param aExtensionHandler Ref. to Msg. Extension Handler + * @param aCba Pointer to Button Group Container class + * @param aTabId Ref. to tab id for this group + */ + CCAChatViewContainer( + MCAViewSwitcher& aViewSwitcher, + MCAGroupPC* aGroupPC, + MCARecipientObserver& aRecipientObserver, + CCAMessageExtensionsHandler& aMessageHandler, + CEikButtonGroupContainer* aCba, TInt& aTabId, CCAChatView * aView ); + + /** + * Symbian OS default constructor. + * @param aRect Frame rectangle for container. + * @param aParent Context access mechanism. + * @param aActivateFromTabSwitch Flag used while switching + * in tabs, to do focus in text box + */ + void ConstructL( const TRect& aRect, MObjectProvider* aParent, + const TBool aActivateFromTabSwitch ); + + + public: + + /** + * Switches the tab + */ + void SwitchTabL(); + + /** + * Check if selected item is object + * @param aIsOpenable method sets this ETrue if selected item + * is openable object else set to EFalse + * @param aSavePossible method sets this ETrue if selected item + * is savable object else set to EFalse + * @return ETrue if selected item is object + */ + TBool IsObjectSelected( TBool& aIsOpenable , TBool& aSavePossible ); + + /** + * @return Selected message or NULL if nothing selected + */ + MCAConversationMessage* SelectedMessage(); + + /** + * @return Selected item + */ + HBufC* SelectedItemL(); + + /** + * @return Type of selected item + */ + TInt SelectedItemType(); + + /** + * Sets item highlighting on or off (automatic find) + * @param aHihghlight ETrue to set finder on + */ + void SetItemHighlight( TBool aHighlight ); + + /** + * Should we fetch new messages or not + * @param aFetch ETrue if this chat is in foreground and should receive messages, + * EFalse otherwise. + */ + void FetchMessages( TBool aFetch ); + + /** + * Checks if current message is private or not + * @return Is message private or not ETrue if private message + */ + TBool CheckIfPrivateMessageL(); + + /** + * Does really group properties change + * @param aGroupd Group id + */ + void DoHandleGroupPropertiesChangedL(); + + /** + * Handles the leaving of the group and + * switching of view etc. logic + * @param aReason Reason for leaving the group + */ + void DoHandleGroupLeftL( TInt aReason ); + + /** + * Checks if user can invite friends to this group + * @since 3.2 + * @return Is invitation allowed or not + */ + TBool IsInvitationAllowed() const; + + /** + * Start invite editor for current group + * @since 3.2 + */ + void InviteFriendsToGroupL(); + + /** + * This checks if scroll mode is on or off + * @since 3.2 + * @return Returns if scrolling is stopped or not (TBool) + */ + TBool IsStopped() const; + + /** + * This method starts scrolling + * @since 3.2 + */ + void StartScrollingL( const TBool aActivateFromTabSwitch = EFalse ); + + /** + * This method stops scrolling + * @since 3.2 + */ + void StopScrollingL(); + + /** + * Updates the softkeys dynamically + */ + void UpdateCbaL(); + + /** + * Sets item emphasization on or off + * @since 3.2 + * @param aIsEmphasized On/Off (TBool) + */ + void SetItemEmphasize( const TBool aIsEmphasized ); + + /** + * This method checks if emphasization is on or off + * @since 3.2 + * @return Is emphasization on or off (TBool) + */ + TBool IsEmphasized() const; + + /** + * This method returns pointer to msg editor + * @since 3.2 + * @return Handle to editor + */ + CCAMessageEditor& Editor() const; + + /** + * This function forwards the message to group + * @since 3.2 + */ + void ForwardToGroupL(); + + /** + * This function forwards the message to contact + * @since 3.2 + */ + void ForwardToContactL(); + + /** + * This method handles message sending + * @since 3.2 + */ + void SendMessageL(); + + /** + * This method handles object sending + * @param aNewFile If ETrue, a new file will be created before sending + * @param aFileType Type of file to be created when creating new file + * @since 3.2 + */ + void SendObjectL( TBool aNewFile, + TNewServiceFileType aFileType = ENewFileServiceImage ); + + /** + * This method initialises whisper message + * @since 3.2 + * @param aNickName A nick name whom to send whisper message + * @param aGroupMsg ETrue if multiple recipients (to group) + */ + void InitPrivateMessageL( const TDesC& aNickName, const TBool aGroupMsg ); + + /** + * This function returns handle to array of recipients + * @since 3.2 + * @return Handle to recipient array + */ + CDesCArrayFlat& Recipients() const; + + /** + * This function returns handle to array of SentRecipients + * @since 3.2 + * @return Handle to sent recipient array + */ + CDesCArrayFlat* SentRecipients() const; + + /** + * This function allows reply to focused contact + * @since 3.2 + */ + void ReplyL(); + + /** + * This function displays chat properties dialog + * @since 3.2 + */ + void EditChatGroupPropertiesL(); + + /** + * This function allows leaving from group + * @since 3.2 + */ + void LeaveGroupL(); + + /** + * This method displays chat info + * @since 3.2 + */ + void DisplayChatInfoL(); + + /** + * Checks if application user has sent a message + * @since 3.2 + * @return ETrue if did + */ + TBool ApplicationUserSentThis() const; + + /** + * @since 3.2 + * @return ETrue if this is received message + */ + TBool Received() const; + + + /** + * Sets the Logging/Saving on + * @since 3.2 + */ + void SaveChatL(); + + /** + * Sets the logging off + * @since 3.2 + */ + void SetLoggingOffL(); + + /** + * Checks if whispering is allowed + * @since 3.2 + * @return ETrue if allowed + */ + TBool IsWhisperAllowedL() const; + + /** + * Checks if user is admin in this group + * @since 3.2 + * @return ETrue if admin else EFalse + */ + TBool IsUserAdmin() const; + + /** + * Checks if group is open + * @since 3.2 + * @return ETrue if open else EFalse + */ + TBool IsGroupOpen() const; + + /** + * Tests if extension (in chars) fits to editor + * @return ETrue if fits + * @param aLength Extensions length in chars + * @since 3.2 + */ + TBool ExtensionFits( TInt aLength ); + + /** + * @return Forward to contact-menu visible (ETrue) + * @since 3.2 + */ + TBool FwdContactVisible(); + + /** + * @return Forward to group-menu visible (ETrue) + * @since 3.2 + */ + TBool FwdGroupVisible(); + + /** + * This function does basic clearing after the message is sent + * aActivateFromTabSwitch - Flag used in Tab switching + */ + void ResetAfterSendL( const TBool aActivateFromTabSwitch = EFalse ); + + + /** + * Sets the size of all icons; smileys etc. + * @param aParentRect Size of the parent object (view) + */ + void ResizeIcons( TRect aParentRect ); + + /** + * Method to force refresh in the rich text editor, + * called from view when adding a smiley. + * @since 3.2 + */ + void RefreshEditorL(); + + /** + * Is item highlight on or off. + * @since 3.2 + * @return ETrue if find activated, EFalse otherwise + */ + TBool IsItemHighlight() const; + + /** + * Returns TRect for reading pane text line element. + * Used to determine icon sizes. + * @since 3.2 + * @return TRect for reading pane text line element. + */ + const TRect TextRect() const; + +#ifdef RD_MULTIPLE_DRIVE + + /** + * show memorey selection dialog and updatesthe same to the cenrep. + * Leaves if HBufC::NewL fails. + * @return ETrue if ok + * @since 2.1 + */ + TBool ShowMemorySelectionDialogL(); + +#endif + + + private: // From MCAMessageEditorObserver + + /** + * Handle editor event. + */ + void HandleMessageEditorEventL( TEditorEvent aEvent ); + + private: // Functions from MCALayoutChangeObserver + + /** + * From MCALayoutChangeObserver, for observing layout changes + */ + void LayoutChangedL( TInt aType ); + + private: // From MCAGroupEventObserverPC + + /** + * Called when the server has indicated that the user is not a member + * anymore. + * @param aReason specifies why. + */ + void HandleGroupLeft( TInt aReason ); + + /** + * Called when new group properties are received from the + * the network. These are server initiated properties. + */ + void HandleGroupPropertiesChanged(); + + private: // Functions from MEikEdwinSizeObserver + + /** + * From MEikEdwinSizeObserver, This method handles edwin's size change + * @param aEdwin The edwin for which the size event is being handled. + * @param aEventType The event type. + * @param aDesirableEdwinSize The desired size for the edwin identified by aEdwin. + * @return The return value depends on your implementation. + * Return ETrue if you wish to redraw the edwin. EFalse otherwise. + */ + TBool HandleEdwinSizeEventL( CEikEdwin* aEdwin, + TEdwinSizeEvent aEventType, TSize aDesirableEdwinSize ); + + private: //from MCAMsgAddedToRichTxtCtrlObserver + //when user navigate among tab. + + /** + * @see MCAMsgAddedToRichTxtCtrlObserver + */ + void HandleMessageAddedL( const TInt aMessageCount ); + + private: // From MCATapEventObserver + + /** + * @see MCATapEventObserver + */ + void HandleTapEventL( TTapEvent aEvent, TUint aControlId ); + + private: // From MCoeControlObserver + + /** + * @see MCoeControlObserver + */ + void HandleControlEventL( CCoeControl* aControl, TCoeEvent aEventType ); + + private: // Functions CCoeControl + + /** + * From CoeControl, Handles "size changed"-events.. + */ + void SizeChanged(); + + /** + * From CoeControl, Returns the number of control contained by this class. + * @return Number of controls contained + */ + 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, Gets called when drawing is needed (by framework) + * @param aRect Rect that needs to be drawed + */ + void Draw( const TRect& aRect ) const; + + /** + * From CCoeControl, Handles key-events + * @param aEvent Event that occured + * @param aType Type of key-event (EEventKey, EEventKeyUp or EEventKeyDown) + * @return Containers response to event (EKeyWasNotConsumed/ EKeyWasConsumed) + */ + TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType ); + + /* + * From CCoeControl. + * @param aContext Help context + */ + void GetHelpContext( TCoeHelpContext& aContext ) const; + + /* + * From CCoeControl. + * @param aDrawNow Draw param + */ + void FocusChanged(TDrawNow aDrawNow); + + private: //New functions + + /** + * This function displays information notes + * @param aResourceId Resource ID of note + */ + void DisplayInfoNoteL( const TInt aResourceId ); + + + /** + * This function clears selected text from editor + * @param aSelectionLength Length of selected string + */ + void ClearSelectionL( const TInt aSelectionLength ); + + /** + * Creates private message header + * @param aIconHeader Icon header + * @param aGroupMsg If ETrue then group icon else single icon + * @param aNick Descriptor that contains nick name + * @param aMsg Descriptor that contains message + */ + void CreatePrivMsgHeaderL( TPictureHeader& aIconHeader, + const TBool& aGroupMsg, + TDesC& aNick, + HBufC* aMsg ); + + /** + * Creates private message header for A/H variant + * @param aIconHeader Icon header + * @param aGroupMsg If ETrue then group icon else single icon + * @param aNick Descriptor that contains nick name + * @param aMsg Descriptor that contains message + */ + void CreatePrivMsgAHHeaderL( TPictureHeader& aIconHeader, + const TBool& aGroupMsg, + TDesC& aNick, + HBufC* aMsg ); + + /** + * Loads bitmaps that are needed in this container + */ + void LoadBitmapsL(); + + + private: //data + + // Owns. Chat view control + CCAChatViewControl* iChatView; + + //Doesn't own. Handle to recipient observer + MCARecipientObserver& iRecipientObserver; + + // Doesn't own. Handle to view switcher + MCAViewSwitcher& iViewSwitcher; + + // Doesn't own. Handle to group process component + MCAGroupPC* iGroupPC; + + + // Owns. Editor used for chat input + CCAMessageEditor* iEditor; + + // Owns. Graphics for private icon + CGulIcon* iPrivIcon; + CGulIcon* iPrivToMany; + CGulIcon* iToMe; + + //Owns. "Unsupported" icon + CGulIcon* iUnsupported; + + //Owns. "Corrupted" icon + CGulIcon* iCorrupted; + + TBool iIsEmphasis; + TBool iIsPrivateMsgActive; + + TBool iIsLoggedIn; + TBool iIsEditorStateChanged; + // Is whispering allowed in group + TBool iWhisperingAllowed; + // Is group open + TBool iIsOpen; + + TInt iNickLength; + TInt iCurrentTextLenght; + + TAknLayoutRect iOutLine; + TAknLayoutRect iHoriline; + TAknLayoutRect iVertLine; + + // Owns. Array of screennames + CDesCArrayFlat* iRecipients; + CDesCArrayFlat* iSentRecipients; + + //Owns. Group id + HBufC* iGroupId; + + //doesn't own + CCAAppUi* iAppUi; + + MCASkinVariant* iSkinVar; + + // these are set by InitPrivateMessage + // needed for layout changing + TBuf iCurrentNickInPrivMsg; + TBool iIsGroupMsgInPrivMsg; + + //Extension handler + CCAMessageExtensionsHandler& iMessageExtensionsHandler; + + TBool iItemHighlight; + + // Does not own. Pointer to cba of view. + CEikButtonGroupContainer* iCba; + + // See IMVariant.hrh. + // Flag depends on EIMFeatSendkeyInMsgList. + TBool iSendkeyInMsgList; + + //owns + CCAEditIndicator* iEditIndicator; + + //Tab id + TInt& iTabId; + + //Doesnt own,pointer to Group Utils PC + MCAGroupUtilsPC* iGroupUtilsPC; + // Used for switching tabs + TBool ifocusFlag; + + CCAChatView *iView; + }; + +#endif //CCACHATVIEWCONTAINER_H + +// End of File