remotestoragefw/gsplugin/inc/rsfwgsplugindrivelistcontainer.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 17 Dec 2009 09:07:59 +0200
changeset 0 3ad9d5175a89
permissions -rw-r--r--
Revision: 200949 Kit: 200951

/*
* Copyright (c) 2003 - 2005 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:  The control container (view) of the remote drives list view
*
*/


#ifndef CRSFWGSPLUGINDRIVELISTCONTAINER_H
#define CRSFWGSPLUGINDRIVELISTCONTAINER_H

// INCLUDES
// System includes
#include <eikclb.h>
#include <akntitle.h>

#include "rsfwgsplugin.hrh"
#include "rsfwgspropertywatch.h"

// FORWARD DECLARATIONS

class CRsfwGsPlugin;
class CRsfwMountMan;
class CEikButtonGroupContainer;
class CAknColumnListBox;

// CLASS DECLARATION

/**
*  CRsfwGsPluginDriveListContainer container class
*  @since 3.1
*  container class for Remote Drives view
*/
class CRsfwGsPluginDriveListContainer : public CCoeControl, 
                                               MEikListBoxObserver,
                                               MCoeForegroundObserver
    {
    public:  // Constructors and destructor
    
    	/**
        * Constructor
        */
        CRsfwGsPluginDriveListContainer(CRsfwGsPlugin* aView);
        
        
         /**
        * Symbian OS default constructor.
        *
        * @param aRect gives the correct TRect for construction.
        */
        void ConstructL( const TRect& aRect, CRsfwMountMan* aMountMan );

        /**
        * Destructor.
        */
        ~CRsfwGsPluginDriveListContainer();    
 
  public: // From CCoeControl
        
        /**
        * See CCoeControl
        */
        TInt CountComponentControls() const;
        
        /**
        * See CCoeControl
        */
        CCoeControl* ComponentControl( TInt aIndex ) const;

        /**
        * See CCoeControl
        */
        TKeyResponse OfferKeyEventL( 
            const TKeyEvent& aKeyEvent, TEventCode aType );

        /**
        * See CCoeControl
        */
        void SizeChanged();         

        /**
        * See CCoeControl
        */
        void HandleResourceChange( TInt aType );
        
        /**
         * Gets help context
         */
        void GetHelpContext( TCoeHelpContext& aContext ) const;

        /**
         * See CCoeControl
         */
        void FocusChanged(TDrawNow aDrawNow);
        
 public: // MCoeForegroundObserver

        /** Handles the drive list view coming to the foreground. */
        void HandleGainingForeground();
        /** Handles the drive list view going into the background. */
        void HandleLosingForeground();

        
 public: // own methods
        
        /**
        * Invokes editing on current item, in response to UI Edit command
        */
        void EditCurrentItemL();
        
        /**
        * See MEikListBoxObserver
        */
        void HandleListBoxEventL(CEikListBox* aListBox, TListBoxEvent aEventType);
        
        /**
        * Finds whether main list is empty
        * @return ETrue if main list is empty.
        */
        TBool IsListEmpty();
        
        /**
        * Finds whether the current item is the last item in main list
        * @return ETrue if current item is last in main list.
        */
        TBool IsLastItem();
        
        /**
        * Delete the currently focused drive. Also deletes it from CentRep
        */
        void DeleteCurrentRemoteDriveL();
        
        /**
        * Is drive connected?
        * Fetches the information from RFE
        * @param the Friendly name of the drive
        */
        TBool IsDriveConnectedL(const TDesC& aName);
        
        /**
        * Sets drive in the list to 'connected' or 'disconnected'
        * (modifies the icon)
        * @param the Friendly name of the drive
        */
        void SetDriveConnectedStateL(const TDesC& aName, TBool aConnected);
        
        /**
        * Connects the currently chose remote drive
        */
        void ConnectCurrentRemoteDriveL();
                 
        /**
        * Disconnects the remote drive
        */
        void DisconnectCurrentRemoteDriveL();
        
        /**
        * Loads remote drives from Central Repository
        * @return TInt the number of remote drives
        */
        TInt LoadRemoteDriveListArrayL();
        
        /**
        * Suggests next new remote drive name, this usually called by UI when
        * user create a new remote drive.
        * @return TDesC& new remote drive name
        */
        TDesC& GetNextRemoteDriveNameL();
        
        /**
        * Get the name of currently focused drive. Usually called by UI.
        * The pointer to buffer remains on heap, which is deleted by caller.
        * @return HBufC* pointer to currently focused remote drive name
        */
        HBufC* GetCurrentRemoteDriveNameLC();
        
         /**
        * Get the name of remote drive at index aIndex. Usually called by UI
        * @return TPtrC16 Pointer to a buffer owned by the list array
        */
        TPtrC GetRemoteDriveNameL(TInt aIndex);
        
         /**
        * Sets the model
        */   
        void SetModel(CRsfwMountMan* iMountMan);
      
         /**
        * Returns the number of remote drives in the list
        */  		
		TInt RemoteDriveCount();
		
        /**
        * Sets the focus
        */
        void SetFocus();

        /**
        * Sets the focus to given drive
        */
        void SetFocusL(const TDes& aDriveName);       

        /**
        * Get the ID of the current remote drive. 
        * ID is the drive letter under which the drive is mounted
        * @return TInt ID of the current remote drive
        */
       TChar GetCurrentRemoteDriveIdL();

		
		void HandleResourceChangeManual(TInt aType);

    private: // own methods
    
        /**
        * Perform the initial setup of the main list. Called by Constructor
        */
      void SetupListL();
          
      
        /**
        * Get Remote drive names 
        * @return CDesCArray remote drives
        */
      CDesCArray* GetRemoteDriveNamesL();

        /**
        * Handles the drive list view coming to the foreground.
        * Leaving variant
        */
      void HandleGainingForegroundL();

    public:  // data
      
      // model, not owned	
      CRsfwMountMan*           iMountMan;
      
           // for setting focus
      TInt iCurrentItemIndex;
    
    private: // data
    
    // Pointer to the main list, owned
      CAknColumnListBox* iMainList;

      // Pointer to the application view, not owned
      CRsfwGsPlugin* iView; // not owned
      
      // The remote drive names list array, not owned
      CDesCArray* iRemoteDriveListArray;
      
      // Buffer for holding remote drive setting name
      TBuf<KMaxFriendlyNameLength>  iSettingNewName;
      
      // Title for menu pane
      TBuf<KMaxMenuPaneTitleLength>  iTitle;
      
      // Pointer to title pane, not owned
      CAknTitlePane* iTitlePane;
      
      // P&S notifier about changes in drive connection state
      CRsfwGsPropertyWatch* iDriveConnectObserver;
      
 
    
    };

#endif //CRSFWGSPLUGINDRIVELISTCONTAINER_H
            
// End of File