ipsservices/ipssossettings/inc/ipssetui.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 02 Feb 2010 00:02:40 +0200
changeset 4 e7aa27f58ae1
parent 0 8466d47a6819
permissions -rw-r--r--
Revision: 201003 Kit: 201005

/*
* Copyright (c) 2007 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:  Decleares main dialog class.
 *
*/


#ifndef IPSSETUI_H
#define IPSSETUI_H


#include <AknForm.h> // CAknDialog
#include <msvapi.h>
#include <ConeResLoader.h>  // RConeResourceLoader

/**
 * Flags to control the UI.
 */
enum TIpsSetUiFlags
    {
    // Indicates that the settings should be closed
    EIpsSetUiShouldClose    = 0x01,
    // Indicates if the settings should be exitted
    EIpsSetUiShouldExit     = 0x02,
    // Indicates the need of query in exit
    EIpsSetUiQueryClose     = 0x04,
    // Indicates the need of opening settings menu
    EIpsSetUiOpenOptionsMenu = 0x08,
    // Indicates if the submenu item is currently selected
    EIpsSetUiPositionSubMenu = 0x10,
    // Indicates, if the main settings view is open
    EIpsSetUiMainSettingsMenu = 0x20,
    // Allow saving
    EIpsSetUiAllowSave        = 0x40,
    // Indicates if settings item is currently selected
    //<cmail>    
    EIpsSetUiSettingsMenuItem = 0x80,
    // Indicates if account data should be hidden
    EIpsSetUiHideAccountData = 0x100
    //</cmail>    
    };

class CEikFormattedCellListBox;
class CIpsSetDataManager;
class CAknTitlePane;
class CEikEdwin;
class CEikRichTextEditor;
class CIpsSetData;
class CIpsSetUiDialogCtrl;



/**
 * Main dialog class.
 *
 * @since FS v1.0
 * @lib IpsSosSettings.lib
 */
class CIpsSetUi :
    public CAknDialog,
    public MMsvSessionObserver
    {
public:  // Constructors and destructor

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

    /**
     * 2 phase construction.
     *
     * @return Ui object with client ownership.
     */
    static CIpsSetUi* NewL( const TMsvId aMailboxId, TBool aFolderSettingView = EFalse ); //<cmail>

    /**
     * 2 phase construction with stack push.
     *
     * @return Ui object with client ownership.
     */
    static CIpsSetUi* NewLC( const TMsvId aMailboxId, TBool aFolderSettingView = EFalse  ); //<cmail>

// New Functions

    /**
     * Launches help dialog.
     */
    void LaunchHelpL();
    
    /**
     * Launches menu
     */
    void LaunchMenuL();

    /**
     * Returns the id of the mailbox
     *
     * @return Current mailbox Id
     */
    TMsvId MailboxId();

// From base class CAknDialog

    /**
     * Processes command
     *
     * @param aCommandId Command id
     */
    void ProcessCommandL( TInt aCommandId );

    /**
     * Used here to handle exit event from subsettings
     *
     * @param aKeyEvent event id
     * @param aType event type
     * @return Information of event handling.
     */
    TKeyResponse OfferKeyEventL(
        const TKeyEvent& aKeyEvent,
        TEventCode aType );

    /**
     * Handles invoked commands.
     *
     * @param aCommand Invoked command.
     */
    void HandleCommandL( TInt aCommand );

    /**
     * Handles resource changes, such as screen switch.
     *
     * @param aType Change type.
     */
    virtual void HandleResourceChange( TInt aType );

    /**
     * Gets outta here.
     */
    void DoQuitL();

    //<cmail>    
    /**
     * Setter for iIgnoreOneBackKey. See iIgnoreOneBackKey for more info.
     *  
     *  @param aIgnoreBackKey iIgnoreOneBackKey value
     */
    void SetIgnoreOneBackKey(TBool aIgnoreBackKey);
    //</cmail>    
    
protected: // Functions from base classes

    //From CEikDialog

    /**
     * Check wheter its ok to exit or not.
     *
     * @param aButtonId, button id
     * @return ETrue, when exit is ok.
     */
    virtual TBool OkToExitL( TInt aButtonId );

    /**
     * Dialog initialization.
     */
    virtual void PreLayoutDynInitL();

    /**
     * Initializes menu pane.
     *
     * @param aResourceId Type of id.
     * @param aMenuPane Menupane object
     */
    virtual void DynInitMenuPaneL(
        TInt aResourceId,
        CEikMenuPane* aMenuPane );

    /**
     * Retrieves current help context.
     *
     * @param aContext Return parameter for context.
     */
    virtual void GetHelpContext(
        TCoeHelpContext& aContext ) const;

    // From MMsvSessionObserver
    
    /*
     * 
     */
    virtual void HandleSessionEventL(
            TMsvSessionEvent aEvent, 
            TAny* aArg1, TAny* aArg2, TAny* aArg3 );

private: // Constructors

    /**
     * C++ default constructor.
     *
     * @param aMailboxd Currently edited mailbox
     */
    CIpsSetUi( const TMsvId aMailboxId, TBool aFolderSettingView = EFalse  ); //<cmail>

    /**
     * 2nd phase of construction.
     */
    void ConstructL();

private: // New functions

    /**
     * Check to see if we are editing an existing
     * or a new account
     *
     * @return ETrue if editing, EFalse if creating new
     */
    inline TBool EditingAnAccount() const;

    /**
     * Change font color in startup and when skin is changed.
     */
    void SetFontAndSkin();

    /**
     * Opens the resource file.
     */
    void LoadResourceL();
    /*
     * Check mailbox online state or ask user for 
     * disconnection, leave in case of error or if user
     * choose not to disconnect
     */
    void DisconnectIfOnlineL( TBool aDoShowQuery = ETrue );

private:    // Data

    /**
     * Flags of settings
     */
    TUint64                 iFlags;

    /**
     * The listbox with skin support
     * Owned.
     */
    CEikFormattedCellListBox* iListBox;

    /**
     * Richtext editor.
     * Owned.
     */
    CEikRichTextEditor*     iTextEditor;

    /**
     * Setting dialog controller.
     * Owned.
     */
    CIpsSetUiDialogCtrl*    iSettings;

    /**
     * Used when loading settings
     */
    CMsvSession*            iSession;

    /**
     * Menubar resource.
     */
    TInt                    iResourceMenuBar;

    /**
     * Object to load the resources
     */
    RConeResourceLoader     iResourceLoader;

    /**
     * Stored mailbox ID
     */
    TMsvId                  iMailboxId;
    
    //<cmail>
    /**
     * This shows that settings are opened from folder list view.
     * When settings are opened from folder list view, we go directly to 
     * 'what to sync' dialog. Bypassing mailbox's main settings view
     */
    TBool                   iShowFolderSettings;
    
    /**
     * When settings are shown from folder list view, open returning we
     * need to ignore one back key. Logic is so that we go back from 'what to sync'
     * view to folder list view directly, bypassing mailbox's main settings view
     */    
    TBool                   iIgnoreOneBackKey;
    //<cmail>
    
    };

#endif      // IPSSETUI_H

// End of File