wvuing/wvuiave/AppSrc/CCAChatViewContainer.h
changeset 0 094583676ce7
--- /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 <NewFileService.hrh> // TNewServiceFileType
+#include <eikedwob.h>
+#include <aknutils.h>
+
+// 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<KNicknameMaxLength> 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