/*
* Copyright (c) 2007-2010 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:  Declatirion of CSCSettingsUiMainView
*
*/


#ifndef C_CSCSETTINGSUIMAINVIEW_H
#define C_CSCSETTINGSUIMAINVIEW_H

class CCSCSettingsUiModel;
class CAknRadioButtonSettingPage;

class CAknNavigationControlContainer;
class CAknNavigationDecorator;
#include "cscsettingsuimaincontainer.h"

/**
 *  CCSCSettingsUiMainView class
 *  Declarition of CCSCSettingsUiMainView.
 *
 *  @lib CSCSettingsUi.lib
 *  @since S60 v3.2
 */
NONSHARABLE_CLASS( CCSCSettingsUiMainView ) : public CAknView,
                                              public MEikListBoxObserver
    {
public: 

    /**
     * Two-phased constructor.
     *
     * @param aModel for reference to the model
     */
    static CCSCSettingsUiMainView* NewL( 
        CCSCSettingsUiModel& aModel );

    /**
     * Two-phased constructor.
     *
     * @param aModel for reference to the model
     */
    static CCSCSettingsUiMainView* NewLC( 
        CCSCSettingsUiModel& aModel );

    /**
     * Destructor.
     */
    virtual ~CCSCSettingsUiMainView();

    /**
     * Processes situation when softkeys need to be changed.
     *
     * @since S60 v3.2
     */
    void UpdateSoftkeysL();

    /**
     * Resets service settings when switching services.
     * 
     * @since S60 v5.2
     */
    void ResetViewL();

// from base class CAknView

    /**
     * From CAknView.
     */
    TUid Id() const;

private:

    CCSCSettingsUiMainView(
        CCSCSettingsUiModel& aModel );
    void ConstructL();

    /**
     * Changes given service name to title pane.
     *
     * @since S60 v3.2
     */   
    void SetTitleTextL();

    /**
     * For checking if editing of preferred service setting is allowed
     *
     * @since S60 v3.2
     * @return ETrue if editing allowed
     */
    TBool IsEditPreferredServiceSettingAllowedL();

    /**
     * Shows preferred service setting page.
     *
     * @since S60 v5.0
     */ 
    void ShowUsernameSettingPageL();

    /**
     * Shows preferred service setting page.
     *
     * @since S60 v3.2
     */ 
    void ShowPasswordSettingPageL();        

    /**
     * Shows preferred service setting page.
     *
     * @since S60 v3.2
     */ 
    void ShowPrefServiceSettingPageL();

    /**
     * Shows preferred service setting page when VCC is supported.
     *
     * @since S60 v5.0
     */ 
    void ShowVccPrefServiceSettingPageL();

    /**
     * Shows IM tone selection list.
     *
     * @since S60 v5.0
     */ 
    void ShowImToneSelectionListL();

    /**
     * Handles 'change' middle softkey selection.
     * 
     * @param aListBoxItem listbox item
     * @since S60 v5.0
     */ 
    void HandleMskChangeSelectionL( TMainListBoxItem aListBoxItem );

    /**
     * Changes preferred telephony setting value.
     * From VoIP(PS) to CS or vice versa.
     * @since S60 v3.2
     */ 
    void ChangePrefTelephonyValueL();

    /**
     * Changes handover notify tone value (on/off).
     * @since S60 v5.0
     */ 
    void ChangeHandoverNotifToneValueL();

    /**
     * Appends resource texts to the des array.
     *
     * @since S60 v3.2
     * @param aList Text array.
     * @param aItem Text resource id.
     */ 
    void AppendItemL(CDesCArrayFlat& aList, TInt aItem);

    /**
     * Launches Connection Method Settings Ui for editing destinations.
     *
     * @since S60 v5.0
     */   
    void LaunchCMSettingsUiL();

    /**
     * Handles returning to previous view where settingsui was launced.
     *
     * @since S60 v5.0
     */
    void HandleReturnToPreviousViewL();

    /**
     * Handles exist from settingsui.
     *
     * @since S60 v5.0
     */
    void HandleSettingsUiExitL();

// from base class CEikAppUi

    /**
     * From CEikAppUi.
     */
    void HandleCommandL( TInt aCommand );

// from base class CAknView

    /**
     * From CAknView.
     */
    void DoActivateL( 
        const TVwsViewId& aPrevViewId, 
        TUid aCustomMessageId, 
        const TDesC8& aCustomMessage );

    /**
     * From CAknView.
     */
    void DoDeactivate();

// from base class MEikListBoxObserver

    /**
     * From MEikListBoxObserver.
     */
    void HandleListBoxEventL( 
        CEikListBox* aListBox, 
        TListBoxEvent aEventType );

    /**
     * From MEikListBoxObserver.
     */
    void HandleListBoxSelectionL();

    /**
     * From MEikListBoxObserver.
     */
    void DynInitMenuPaneL(
        TInt aResourceId, 
        CEikMenuPane* aMenuPane );

private: // data  

    /**
     * Handle to model class for settings handling.
     */
    CCSCSettingsUiModel& iModel;

    /**
     * Handle to title pane.
     * Not own.
     */
    CAknTitlePane* iTitlePane;

    /**
     * Container class for main view.
     * Own.
     */
    CCSCSettingsUiMainContainer* iContainer;

    /**
     * Navigation pane.
     * Not own.
     */
    CAknNavigationControlContainer* iNaviPane;

    /**
     * Navigation decorator.
     * Own.
     */
    CAknNavigationDecorator* iNaviDecorator;

    /**
     * Flag for telling if IM tone selection list is open.
     */
    TBool iImToneSelectionListOpen;

    /**
     * Flag for telling if service is deleted.
     */
    TBool iDeleted;

    /**
     * Flag for telling if SNAP list is open.
     */
    TBool iSnapListOpen;

#ifdef _DEBUG
    friend class UT_cscsettingsui;
#endif

    };

#endif  // C_CSCSETTINGSUIMAINVIEW_H

