remotestoragefw/remotedriveconfigurationbiocontrol/inc/rsfwmountconfbc.h
author Pat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:15:08 +0100
branchRCL_3
changeset 20 1aa8c82cb4cb
parent 0 3ad9d5175a89
permissions -rw-r--r--
Revert incorrect RCL_3 drop: Revision: 201021 Kit: 201035

/*
* 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:  Remote drive configuration BIO control
*
*/


#ifndef CRSFWMOUNTCONFBIOCONTROL_H
#define CRSFWMOUNTCONFBIOCONTROL_H

// INCLUDES
#include <msgbiocontrol.h>			 // CMsgBioControl


// FORWARD DECLARATIONS
class CRichBio;
class CRsfwMountMan;
class CRsfwMountEntry;

// CLASS DECLARATION

/**
 * Bio control for Remote drive settings
 */
NONSHARABLE_CLASS(CRsfwMountConfBioControl) : 
	public CMsgBioControl
	{
	public:
	 /**
      * 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									 
	~CRsfwMountConfBioControl();

public: //from MMsgBioControl

        /**
         * Calculates and sets size for a Bio control according to aSize.
         * @param aSize A reference to the suggested size and new size.
         */
        void SetAndGetSizeL(TSize& aSize);
        
         /**
         * Adds a menu command.
         * @param aMenuPane Reference to the CEikMenuPane of the application.
         */
        void SetMenuCommandSetL(CEikMenuPane& aMenuPane);       

        /*
         * The command handler of the bio control.
         * The commands usually originate from a bio specific menu item being
         * selected by the user.
         * @param aCommand Id of command to be handled.
         */
        TBool HandleBioCommandL(TInt aCommand);

        /**
        * Returns a rectangle slice of the bio controls viewing area.
        * It is used by the CMsgEditorView class for scrolling the screen.
        * @return TRect
        */
        TRect CurrentLineRect() const;

        /**
         * This is used by the body container for managing focus and
         * scrolling.
         * @param aDirection The direction to be checked.
         */
        TBool IsFocusChangePossible(TMsgFocusDirection aDirection) const;
        

        /**
         * Returns the header text.
         * @return The header text.
         */
        HBufC* HeaderTextL(void) const;

        /**
         * Gives the height of the text in pixels.
         * It is used by the scrolling framework of Editor Base.
         * @return Height of the text in pixels.
         */
        TInt VirtualHeight();

        /**
         * Gives the cursor position in pixels.
         * It is used by the scrolling framework of Editor Base.
         * @return Cursor position in pixels.
         */
        TInt VirtualVisibleTop();

       /* Tells whether the cursor is in the topmost or bottom position.
         * It is used by the scrolling framework.
         * @param aLocation Specifies either top or bottom.
         * @return ETrue if the cursor is in the part specified by aLocation.
         */
        TBool IsCursorLocation(TMsgCursorLocation aLocation) const;

	
	// Functions from CCoeControl
	TKeyResponse OfferKeyEventL(
		const TKeyEvent& aKeyEvent,
		TEventCode aType);
	
protected:
	// Functions from CCoeControl
	TInt CountComponentControls() const;
	CCoeControl* ComponentControl(TInt aIndex) const;
	void SizeChanged();
	void FocusChanged(TDrawNow aDrawNow);
	void SetContainerWindowL(const CCoeControl& aContainer);
	
private:
	CRsfwMountConfBioControl(
		MMsgBioControlObserver& aObserver,
		CMsvSession* aSession,
		TMsvId aId,
		TMsgBioMode aEditorOrViewerMode,
		const RFile* aFile);
	void ConstructL();

	void DoMountL(CRsfwMountEntry*);
	void EncodeMounterEntry(CRsfwMountEntry&, TDes&);
	TBool isNameUniqueL(const TDesC& aFriendlyName);
	
	/* returns true when user has selected an unique name for the new drive
	 *
	 */
    TBool GetNameForNewMountL(TDes& aName);
	
	/**
      * Fills the viewer with data from the mount entry
      */
    void FillViewerWithDataL();

	/**
      * Helper for adding to viewer.
      * @param aLabelRes Resource id for label
      * @param aValue Value text
      */
	void AddItemL(TInt aLabelRes, const TDesC& aValue);

	/**
      * Resolve the file handle of the data file that is used as input.
      * @param aFile A reference that gets the file handle.
      */
    void ResolveFileL( RFile& aFile );
    
    /**
      * This is needed because the menuPane adding is done in a different
      * way in BVA than in SMS Editor/Viewer.
      * @param aMenuPane Reference to the menu pane.
      * @param aStringRes String resource ID of the command text.
      * @param aCommandOffset Offset in the Options list.
      */
    void FileBasedAddMenuItemL(CEikMenuPane& aMenuPane,
            TInt aStringRes, TInt aCommandOffset);

private:
    CRichBio* iViewer; 	// The viewer control
    
	TBool iIsFileBased;	// ETrue if BIO Control is lauched through BVA
    
    CRsfwMountEntry* iMountEntry;  // Contains the imported mount entry
   					 		   // only one because the list in GS is not markable
	CRsfwMountMan* iMountMan; // mount manager
	};

#endif // CRSFWMOUNTCONFBIOCONTROL_H