wvuing/wvuiave/AppSrc/CCAConversationsContainer.h
changeset 0 094583676ce7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wvuing/wvuiave/AppSrc/CCAConversationsContainer.h	Thu Dec 17 08:41:52 2009 +0200
@@ -0,0 +1,623 @@
+/*
+* 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:  This is container class for conversation view
+*
+*/
+
+
+
+#ifndef CCACONVERSATIONSCONTAINER_H
+#define CCACONVERSATIONSCONTAINER_H
+
+//  INCLUDES
+#include "MCALayoutChangeObserver.h"
+#include "mcatapeventobserver.h"
+#include "CCAMessageEditor.h" // MCAMessageEditorObserver
+
+#include <aknview.h>
+#include <eikedwob.h>
+#include <bamdesca.h> //For the MDesCArray
+#include <badesca.h> //For the CDesCArray
+#include <eikbtgpc.h>
+#include <eikrted.h>
+#include <aknutils.h>
+#include <aknEditStateIndicator.h>
+#include <AknIndicatorContainer.h>
+#include "ChatDefinitions.h"
+#include "MCALoginRefreshObserverPC.h"
+#include "MCAMsgAddedToRichTxtCtrlObserver.h"
+
+// FORWARD DECLARATIONS
+class MCAViewSwitcher;
+class MCARecipientObserver;
+class MCASkinVariant;
+class CCAChatListBox;
+class CCAMessageEditor;
+class CCAEngine;
+class CCABlockingUI;
+class CCAAppUi;
+class CCAMessageExtensionsHandler;
+class CCAChatViewControl;
+class MCAMessagesReadInterface;
+class MCAMessagesWriteInterface;
+class CGulIcon;
+class MCAConversationMessage;
+class MCAConversationPC;
+class CCAEditIndicator;
+
+/**
+ * Helper class for updating title when needed.
+ */
+class MCATitleUpdater
+    {
+    public:
+
+        /**
+         * Update title.
+         */
+        virtual void UpdateTitleL() = 0;
+
+    protected:
+
+        /**
+         * Destructor for protection.
+         */
+        virtual ~MCATitleUpdater() {};
+    };
+
+/**
+ * Helper class for stroring editor content.
+ */
+class MCAEditorContentStorage
+    {
+    public:
+        /**
+         * Stores editor content.
+         * @param aContent Pointer to content data,
+         *                 takes ownership.
+         */
+        virtual void StoreContent( const HBufC* aContent ) = 0;
+
+    protected:
+
+        /**
+         * Destructor for protection.
+         */
+        virtual ~MCAEditorContentStorage() {};
+    };
+
+// CLASS DECLARATION
+
+/**
+*  This is container class for conversation view
+*
+*  @lib chat.app
+*  @since 3.2s
+*/
+class CCAConversationsContainer : public CCoeControl,
+            public MEikEdwinSizeObserver,
+            public MCALayoutChangeObserver,
+            public MCATapEventObserver,
+            public MCoeControlObserver,
+            public MCAMessageEditorObserver,
+            public MCALoginRefreshObserverPC,
+            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 aRecipientObserver Recipient observer
+        * @param aParent Context access mechanism.
+        * @param aMessageHandler Handling messages
+        * @param aTitleUpdater for updating title of chat.
+        * @param aTabId
+        */
+        static CCAConversationsContainer* NewL( const TRect& aRect,
+                                                MCAViewSwitcher& aViewSwitcher,
+                                                MCAConversationPC* aCCAConversationManagerPC,
+                                                MCARecipientObserver& aRecipientObserver,
+                                                MObjectProvider* aParent,
+                                                CCAMessageExtensionsHandler& aMessageHandler,
+                                                MCATitleUpdater& aTitleUpdater,
+                                                MCAEditorContentStorage& aEditorContentStorage,
+                                                CEikButtonGroupContainer* aCba,
+                                                const TBool aActivateFromTabSwitch , TInt& aTabId );
+
+        /*
+        * Constructor
+        */
+        CCAConversationsContainer(
+            MCAViewSwitcher& aViewSwitcher,
+            MCAConversationPC* aCCAConversationManagerPC,
+            MCARecipientObserver& aRecipientObserver,
+            CCAMessageExtensionsHandler& aMessageHandler,
+            MCATitleUpdater& aTitleUpdater,
+            MCAEditorContentStorage& aEditorContentStorage,
+            CEikButtonGroupContainer* aCba, TInt& aTabId );
+
+        /**
+        * Destructor.
+        */
+        virtual ~CCAConversationsContainer();
+
+
+    private:
+
+        /**
+        * Symbian OS default constructor.
+        * @param aRect Frame rectangle for container.
+        * @param aParent Context access mechanism.
+        */
+        void ConstructL( const TRect& aRect, MObjectProvider* aParent,
+                         const TBool aActivateFromTabSwitch );
+
+
+    public: // New functions
+
+        /**
+         * Check if selected item is object
+         * @param aIsOpenable method sets this ETrue if selected item
+         *                    is openable object else set to EFalse
+         * @return ETrue if selected item is object
+         */
+        TBool IsObjectSelected( TBool& aIsOpenable , TBool& aIsSaved );
+
+        /**
+         * @return Selected message or NULL if nothing selected
+         */
+        MCAConversationMessage* SelectedMessage();
+
+        /**
+         * Sets item highlighting on or off (automatic find)
+         * @param aHihghlight ETrue to set finder on
+         */
+        void SetItemHighlightL( 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 );
+
+        /**
+         * Returns buffer containing the currently selected text
+         * (or empty buffer if nothing selected)
+         */
+        HBufC* SelectedItemL();
+
+        /**
+         * @return Type of selected item
+         */
+        TInt SelectedItemType();
+
+        /**
+        * 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();
+
+        /**
+        * This method returns pointer to msg editor
+        * @since 3.2
+        * @return Handle to editor
+        */
+        CCAMessageEditor& Editor() const;
+
+        /**
+        * This method handles message sending
+        * @since 3.2
+        */
+        void SendMessageL();
+
+        /**
+         * This function allows friend adding to friends list
+         * @since 3.2
+         */
+        void AddToFriendsL();
+
+
+        /**
+        * Blocks user
+        * @since 3.2
+        */
+        void BlockUserL();
+
+        /**
+         * Checks if user is blocked
+         * @since 3.2
+         * @return ETrue if blocked
+         */
+        TBool IsBlocked() const;
+
+
+        /**
+        *Block user by wv id
+        * @since 3.2
+        */
+        void BlockUserWVIdL();
+
+        /**
+        *Unblock users
+        * @since 3.2
+        */
+        void UnBlockL();
+
+        /**
+        * Show blocked contacts
+        * @since 3.2
+        */
+        void DisplayBlockedListL();
+
+        /**
+         * Checks if application user has sent a message
+         * @since 3.2
+         * @return ETrue if did
+         */
+        TBool ApplicationUserSentThis() const;
+
+        /**
+         * Sets the Logging/recording on
+         * @since 3.2
+         */
+        void RecordChatL();
+#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
+
+        /**
+         * 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 );
+
+        // some oracles for the view class
+
+        /**
+         * @return Forward to contact-menu visible (ETrue)
+         * @since 3.2
+         */
+        TBool FwdContactVisible();
+
+        /**
+         * @return Forward to group-menu visible (ETrue)
+         * @since 3.2
+         */
+        TBool FwdGroupVisible();
+
+
+        /**
+         * CheckReplyL. Check if there is reply situation
+         */
+        void CheckReplyL();
+
+        /**
+         * 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.0
+         */
+        void RefreshEditorL();
+
+        /**
+         * Is item highlight on or off.
+         * @since S60 v3.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 S60 v3.
+         * @return TRect for reading pane text line element.
+         */
+        const TRect TextRect() const;
+
+        /**
+         * ETrue if message sending is ongoing
+         */
+        TBool Sending() const;
+
+        /**
+         * Resets the sending state
+         */
+        void ResetSending();
+
+        /**
+         * Checks if conversation partner is blocked
+         * and unblocks if partner is blocked. Shows needed
+         * notes. Used in message sending.
+         * @since S60 v3.2
+         */
+        void CheckBlockedL();
+
+
+    public:
+        //added for multitab support
+        /**
+         * SwitchViewL
+         * Switches between the conversation
+         * @since S60 v3.2
+         */
+        void SwitchViewL( );
+
+        /**
+         * GetEditorFlag
+         * get the current editor flag
+         * @since S60 v3.2
+         */
+        TInt GetEditorFlag( );
+
+        /**
+         * Handle editor event.
+         * from  MCALoginRefreshObserverPC
+         */
+        void HandleLoginRefreshCompleteL();
+
+    private:
+        /**
+         * This function does basic clearing after the message is sent
+         */
+        void ResetAfterSendL( const TBool aActivateFromTabSwitch = EFalse );
+
+        /**
+         * Update the CBA labels
+         */
+        void UpdateCbaL();
+
+        /**
+         * This function displays information notes
+         * @param aResourceId Resource ID of note
+         */
+        void DisplayInfoNoteL( const TInt aResourceId );
+
+        /**
+         * Display warning note before recording
+         */
+        void ShowRecordSavingWarningL() const;
+
+
+    private: // Functions from base classes
+
+        /**
+         * From MCALayoutChangeObserver, for layout change observing
+         */
+        void LayoutChangedL( TInt aType );
+
+        /**
+         * 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 MCATapEventObserver
+
+        /**
+         * @see MCATapEventObserver
+         */
+        void HandleTapEventL( TTapEvent aEvent, TUint aControlId );
+
+    private: // From MCoeControlObserver
+
+        /**
+         * @see MCoeControlObserver
+         */
+        void HandleControlEventL( CCoeControl* aControl, TCoeEvent aEventType );
+
+    private: //from MCAMsgAddedToRichTxtCtrlObserver
+
+        /**
+         * @see MCAMsgAddedToRichTxtCtrlObserver
+         */
+        void HandleMessageAddedL( const TInt aMessageCount );
+
+    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 aKeyEvent 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:    // From MCAMessageEditorObserver
+
+        /**
+         * Handle editor event.
+         */
+        void HandleMessageEditorEventL( TEditorEvent aEvent );
+
+    private:    // new functions
+
+        /**
+         * Loads bitmaps
+         */
+        void LoadBitmapsL();
+
+
+    private:    // Data
+
+        // Owns. Chat view control
+        CCAChatViewControl* iChatView;
+
+        // Doesn't own. Handle to view switcher
+        MCAViewSwitcher& iViewSwitcher;
+
+        //Doesn't own. Handle to recipient observer
+        MCARecipientObserver& iRecipientObserver;
+
+        // Owns. Editor used for chat input
+        CCAMessageEditor* iEditor;
+
+        //Owns. UI side blocker
+        CCABlockingUI* iBlockingUI;
+
+        //Owns. "From me" icon
+        CGulIcon* iFromMe;
+
+        //Owns. "To me" icon
+        CGulIcon* iToMe;
+
+        //Owns. "Unsupported" icon
+        CGulIcon* iUnsupported;
+
+        //Owns. "Corrupted" icon
+        CGulIcon* iCorrupted;
+
+        TBool iIsChangeToOnlineAskedOnce;
+        TBool iSending;
+
+        TInt iCurrentItemIndex;
+
+        TAknLayoutRect iOutLine;
+        TAknLayoutRect iHoriline;
+        TAknLayoutRect iVertLine;
+
+
+        TPtrC iCurrentRecipient;
+
+        MCASkinVariant* iSkinVar;
+        CCAAppUi*		iAppUi;
+
+        CCAMessageExtensionsHandler& iMessageExtensionsHandler;
+
+        // If add contact is asked. ETrue if not EFalse.
+        TBool iIsAddToContactAskedOnce;
+
+        /// For updating title when needed.
+        MCATitleUpdater& iTitleUpdater;
+
+        TBool iItemHighlight;
+
+        // For storing editor content. Not owned.
+        MCAEditorContentStorage& iEditorContentStorage;
+
+        // Does not own. Pointer to cba of view.
+        CEikButtonGroupContainer* iCba;
+
+        // See IMVariant.hrh.
+        // Flag depends on EIMFeatSendkeyInMsgList.
+        TBool iSendkeyInMsgList;
+
+        //ptr to the conversation's process component
+        MCAConversationPC* iConversationPC;
+
+        //owns
+        CCAEditIndicator* iEditIndicator;
+
+        TInt& iTabId;
+
+        TBuf<KMaxWVIDLength> iWvId;
+
+        // Used in switching tabs
+        TBool ifocusFlag;
+
+        // Flag to indicate whether login is running
+        TBool iLogingFlag;
+    };
+
+#endif      // CCACONVERSATIONSCONTAINER_H
+
+// End of File