wvuing/IMPSServiceSettingsUI/Src/CWVSettingsUIDialogImp.h
changeset 0 094583676ce7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wvuing/IMPSServiceSettingsUI/Src/CWVSettingsUIDialogImp.h	Thu Dec 17 08:41:52 2009 +0200
@@ -0,0 +1,698 @@
+/*
+* Copyright (c) 2003 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:  Server settings dialog implementation
+*
+*/
+
+
+
+#ifndef CWVSETTINGSUIDIALOGIMP_H
+#define CWVSETTINGSUIDIALOGIMP_H
+
+
+//  INCLUDES
+#include "MWVSettingsObserverng.h"
+#include "CWVSettingsUINGDialog.h"
+#include "MIMPSSharedDataObserver.h"
+#include "MIMPSSharedData.h"
+
+#include "impscommonuibuilddefinitions.h"
+
+#include <aknform.h>
+#include <eiklbo.h>
+#include <MIMPSSAPObserver.h>
+
+
+//DATA TYPES
+
+
+// FORWARD DECLARATIONS
+class CAknSettingItemArray;
+class CAknSettingStyleListBox;
+class CIMPSSAPSettingsStore;
+class CWVSettingsUITlsHolder;
+class CWVSettingsUIDialogTitlePaneHandler;
+class CIMPSPresenceConnectionUi;
+class CAknSettingItem;
+class CWVSettingsUISettingItemEditor;
+class CSelectionItemList;
+class CSelectableItem;
+class CIMPSSAPSettingsList;
+class CIMPSSAPSettings;
+class CAknIconArray;
+class CWVSettingsUIServerListDialog;
+// CLASS DECLARATION
+
+/**
+*  Server settings dialog
+*  Basically this dialog gives that two links to other dialogs, to current
+*  server selection and to server list
+*
+*  @lib WVServiceSettingsUi.dll
+*  @since 2.1
+*/
+NONSHARABLE_CLASS( CWVSettingsUIDialogImp ) : public CWVSettingsUIDialog,
+        public MEikListBoxObserver,
+        public MIMPSSAPObserver,
+        public MIMPSSharedDataObserver
+    {
+
+public: // datatypes
+
+    // listbox items' indexes
+    enum TListboxItemIndex
+        {
+        EWVSettingsCASettings = 0,
+        EWVSettingsServers,
+        EWVSettingsServerInUse,
+        EWVSettingsIMLoginType,
+#ifdef RD_MULTIPLE_DRIVE
+        EWVSettingsSaveChatsTo,
+#endif
+        EWVSettingsIMConnDays,
+        EWVSettingsIMConnHours
+        };
+
+    enum TConnHoursPopUpValue
+        {
+        EWVSettingsAllDay,
+        EWVSettingsBetweenHours
+        };
+
+private: // datatypes
+
+    enum TConnHoursSetting
+        {
+        EWVSettingsConnStart,
+        EWVSettingsConnEnd
+        };
+
+public:  // Constructors and destructor
+    /**
+    * Destructor.
+    */
+    virtual ~CWVSettingsUIDialogImp();
+
+    /**
+    * Two-phased constructor.
+    */
+    static CWVSettingsUIDialogImp* NewL( );
+
+protected:
+    /**
+    * Runs the dialog.
+    * @since 2.1
+    * @param aSAPSettingsStore Pointer to SAP settings store
+    * @param aObserver Pointer to the UI observer
+    * @param aResourceFile The path to a branded resource file wanted to be used
+    * @param aExitReason The exit reason of the dialog
+    * @param aSelfPtr pointer to callers dialog pointer.
+    * @param aWhatToRun Tells whether to run the whole dialog or just the new server definition dialog
+    */
+    TWVSettingsDialogReturnValue RunDialogLD(	CIMPSSAPSettingsStore& aSAPSettingsStore,
+                                              MWVSettingsObserver* aObserver,
+                                              const TDesC& aResourceFile,
+                                              const TDesC& aResourceVariationFile,
+                                              TInt& aExitReason,
+                                              MWVSettingsCASettings* aCAServerSettings,
+                                              CWVSettingsUIDialog** aSelfPtr,
+                                              TBool aForcedLaunch /*= EFalse */,
+                                              TWVSettingsDialogType aDialogType );
+
+    /**
+    * Changes the resource file used
+    * @since 2.1
+    * @param aResourceFileName The path to the resource file wanted to be used
+    * @param aResourceVariationFile	The path to the variation file which contains the settings.
+    */
+    void ChangeResourceFileL( const TDesC& aResourceFileName,
+                              const TDesC& aResourceVariationFile );
+
+    /**
+    * C++ default constructor.
+    */
+    CWVSettingsUIDialogImp();
+
+public: // New functions
+
+    /**
+    * Tells the current Chat login type
+    * @since 2.1
+    * @return Chat login type
+    */
+    TInt GetChatLoginType() const;
+    
+    void ChangeToManualL();
+
+    void GetHelpContext( TCoeHelpContext& aContext ) const;
+private: // New functions
+
+    /**
+    * Updates "server in use"-item from listbox to current value
+    * @since 2.1
+    */
+    void UpdateServerInUseItemL();
+
+    /**
+    * Launches new server query
+    * @since 2.1
+    * @param aExitReason indicate if required to exit from IM application
+    */
+    void QueryNewServerL( TBool *aExitReason = NULL );
+
+    /**
+    * Launches server-list dialog
+    * @since 2.1
+    * @return a value from the enumeration
+    */
+    TWVSettingsDialogReturnValue ExecuteServerListDialogL();
+
+    /**
+    * Refreshs title
+    * @since 2.1
+    */
+    void RefreshTitleL();
+
+    /**
+    * Launches a correct dialog
+    * @since 2.1
+    */
+    void LaunchCorrectDialogL();
+
+    /**
+    * Launches a correct dialog
+    * @since 3.1
+    */
+    void LaunchCASettingsL();
+
+    /**
+     * Activates currently highlighted setting item
+     * @since 3.2
+     */
+    void ActivateCurrentItemL();
+
+    /**
+    * Launches the dialog for defining a new server
+    * @since 2.1
+    * @param aSAPSettingsStore Pointer to SAP settings store
+    * @param aCaller Pointer to the dialog observer
+    * @param aTitlePaneHandler Pointer to the title pane handler
+    * @param aExitReason This will hold the exit reason after this dialog
+    * has been dismissed
+    */
+    TInt LaunchDefineNewServerDialogL( CIMPSSAPSettingsStore& aSAPSettingsStore,
+                                       MWVSettingsObserver& aObserver,
+                                       CWVSettingsUIDialogTitlePaneHandler& aTitlePaneHandler,
+                                       TInt& aExitReason ) const;
+
+    /**
+    * Sets IM login type in the listbox
+    * @param aLoadedValue loaded login type
+    * @since 2.1
+    */
+    void SetIMLoginTypeL( TInt aLoadedValue );
+
+    /**
+    * Creates a list of selected days for scheduling
+    * @param aSelectionItemList selection item list
+    * @since 2.5
+    */
+    void CreateSelectedDaysArrayL( CSelectionItemList& aSelectionItemList );
+
+    /**
+    * Creates a selectable item
+    * @param aResourceId resource id for the text in the selectable item
+    * @since 2.5
+    * @return selectable item
+    */
+    CSelectableItem* CreateSelectableItemLC( TInt aResourceId );
+
+    /**
+    * Sets connection days setting to CSelectionItemList array
+    * @param aLoadedValue loaded login type
+    * @param aSelectionItemList selection item list
+    * @since 2.5
+    */
+    void SetConnectionDaysL( TInt aLoadedValue, CSelectionItemList& aSelectionItemList );
+
+    /**
+    * Gets connection days setting from CSelectionItemList array
+    * @param aSelectionItemList selection item list
+    * @since 2.5
+    * @return integer with the correct bits set
+    */
+    TInt GetConnectionDaysL( CSelectionItemList& aSelectionItemList );
+
+    /**
+    * Updates the connection days setting item value text in listbox
+    * @param aSelectionItemList selection item list
+    * @param aItem item identifier
+    * @since 2.5
+    */
+    void UpdateConnectionDaysL( CSelectionItemList& aSelectionItemList );
+
+    /**
+    * Updates the connection hours text in the listbox
+    * @param aItem item identifier
+    * @param aAllDay all day or not
+    * @since 2.5
+    */
+    void UpdateConnectionHoursTextL( TBool aAllDay );
+
+    /**
+    * Queries new connection times from user
+    * @param aItem item identifier
+    * @since 2.5
+    */
+    void QueryConnectionHoursL();
+
+    /**
+    * Changes login type to manual
+    * @since 2.5
+    */
+    void ChangeLoginTypeToManualL();
+
+    /**
+    * Updates the texts in the listbox
+    * @since 2.6
+    */
+    void UpdateListboxL();
+
+    /**
+    * Copies a selected days array
+    * @param aSelectedDaysArray an array to be copied
+    * @since 2.6
+    */
+    CSelectionItemList* CopySelectedDaysArrayL( CSelectionItemList* aSelectedDaysArray );
+
+    /**
+    * Returns the hour part of the saved time as integer.
+    * Returns the given default if parsing fails.
+    * @param aTime time to get the hour from
+    * @param aDefault default hour as integer
+    * @since 2.6
+    */
+    TInt Hour( const TDesC& aTime, TInt aDefault );
+
+    /**
+    * Returns the minute part of the saved time as integer
+    * Returns the given default if parsing fails.
+    * @param aTime time to get the minute from
+    * @param aDefault default minute as integer
+    * @since 2.6
+    */
+    TInt Minute( const TDesC& aTime, TInt aDefault );
+
+    /**
+    * Return current server's name
+    * @since 2.1
+    * Ownership is transferred to caller!!!
+    * @return Name, NOTE returns NULL if no default SAP
+    */
+    HBufC* CurrentServerNameL();
+
+    /*
+    * Updates necessary parts when resource file is changed.
+    * @since 2.1
+    */
+    void RefreshDialogL();
+
+    /**
+    * Loads the settings
+    * @since 2.1
+    */
+    void LoadSettingsL();
+
+    /**
+    * Loads a settings value
+    * @since 2.1
+    * @param aSettingsValueToLoad the setting value to load
+    * @param aNameKey the key name of the value
+    */
+    void LoadSettingValueL( TInt& aSettingValueToLoad, const TIMPSSharedKeys aNameKey );
+
+    /**
+    * Loads a string settings value
+    * @since 2.5
+    * @param aNameKey the key name of the value
+    * @return the loaded value
+    */
+    HBufC* LoadStringSettingValueL( const TIMPSSharedKeys aNameKey, TConnHoursSetting aSetting );
+
+#ifdef RD_MULTIPLE_DRIVE
+
+    /**
+    * Loads a memory drive string settings value
+    * @since 2.5
+    */
+    void LoadMemoryDriveSettingValueL();
+#endif
+
+    /**
+    * Loads connection hours settings values
+    * @since 2.5
+    */
+    void LoadConnectionHoursSettingValuesL();
+
+    /**
+    * Saves the settings
+    * @since 2.1
+    */
+    void SaveSettingsL();
+
+    /**
+    * Stores a settings value
+    * @since 2.1
+    * @param aSettingValueToStore the setting value to be saved
+    * @param aNameKey the key name of the value
+    */
+    void StoreSettingValueL( TInt aSettingValueToStore, const TIMPSSharedKeys aNameKey );
+
+    /**
+    * Stores a string settings value
+    * @since 2.5
+    * @param aSettingValueToStore the setting value to be saved
+    * @param aNameKey the key name of the value
+    */
+    void StoreStringSettingValueL( const TDesC& aSettingValueToStore, const TIMPSSharedKeys aNameKey );
+
+
+    /**
+    * Updates the login types in the listbox
+    * @since 2.1
+    */
+    void UpdateLoginTypesL ();
+
+    /**
+     * Gets server list and index which to highlight
+     * in selection list.
+     *
+     * @since 3.1
+     * @param aIndexToHighlight On the return contains the
+     * index that should be high lighted by default in the
+     * selection list, or KErrNotFound if default index should
+     * be ignored.
+     * @return SAP settings list. Ownership of list returned to client.
+     */
+    CIMPSSAPSettingsList* ServerListLC( TInt& aIndexToHighlight );
+
+    /**
+     * Loads the used login SAP based the SAP Settings list
+     * and index of selected server.
+     *
+     * @since 3.1
+     * @param aList Server list.
+     * @param aIndexOfSelectedServer The index of selected server.
+     * @param aSap
+     */
+    void LoadSapByServerListL( const CIMPSSAPSettingsList& aList,
+                               TInt aIndexOfSelectedServer,
+                               CIMPSSAPSettings& aSap );
+
+    /**
+     *
+     * @since 3.1
+     */
+    TBool ServerToUseQueryL( MDesCArray& aServers,
+                             TInt aIndexToHighlight,
+                             TInt& aSelectedIndex );
+
+    /**
+     * Loads the branded server icons to iIconArray
+     * @param aServers List of the server names
+     * @since 3.1
+     */
+    void LoadServerIconsL( MDesCArray& aServers );
+
+    /**
+    * Constructs complete path from parts and checks for correctness.
+    * @param aResult, the complete path.
+    * @param aModuleId, dll's (or app) id. For example "IM".
+    * @param aAlternative, id for alternative (for example operator "Oper1" ) files.
+    * @param aFileName, filename of the complete path
+    * @return ETrue if path was found from C or MMC card, otherwise false
+    * @since 3.1
+    */
+    TBool ConstructCompletePathAndCheck( TDes& aResult,
+                                         const TDesC& aModuleId,
+                                         const TDesC& aAlternative,
+                                         const TDesC& aFileName );
+
+    /**
+    * Returns MMC drive.
+    * @param aDrive, the result.
+    */
+    void MMCDrive( TDes& aDrive ) const;
+
+    /**
+     * Updates CBA.
+     * @since S60 v3.2
+     */
+    void UpdateCbaL();
+
+    /**
+     * Static TCallBack method which will call ActivateCurrentItemL when
+     * launched
+     * @see TCallBack
+     */
+    static TInt LaunchDlgCallback( TAny* aDlg );
+
+    /**
+     * Used for launching dialogs asynchronously.
+     */
+    void LaunchCorrectDialog();
+
+    /**
+     *
+     * set the iIsOpenedTargettDlg value.
+     * aFlag is ETrue while try to open target dialog, or is EFalse after target was closed.
+     */
+    void SetTargetDlgFlag( TBool aFlag );
+
+    /**
+     *
+     * get the flag value.
+     */
+    TBool GetTargetDlgFlag();
+
+    /**
+     *
+     * Check whether there are stored servers, otherwise show add new server query.
+     * @return ETrue there is at least one stored server.
+     * @return EFalse there is no stored server.
+     */
+    TBool CheckAnyStoredServers();
+private:
+    /**
+    * From MEikListBoxObserver Handles listbox events.
+    * @param aListBox Listbox's pointed
+    * @param aEventType Eventtype of listbox
+    */
+    void HandleListBoxEventL( CEikListBox* aListBox, TListBoxEvent aEventType );
+
+    /**
+    * Handles notify from permanent keys' changes
+    * @param aUid uid of the dll
+    * @param aKey the shared data key
+    * @param aValue the value of the key
+    */
+    void HandlePermanentKeyNotifyL( const TUid aUid,
+                                    const TIMPSSharedKeys aKey );
+
+    /**
+    * Handles notify from temporary keys' changes
+    * @param aUid uid of the dll
+    * @param aKey the shared data key
+    * @param aValue the value of the key
+    */
+    void HandleTemporaryKeyNotifyL( const TUid aUid,
+                                    const TIMPSSharedKeys aKey );
+    /**
+    * From MEikCommandObserver Command handler
+    * @since 1.2
+    * @param aCommand Command that was initiated
+    */
+    void ProcessCommandL( TInt aCommand );
+
+    /**
+    * From MEikMenuObserver, Gets called before menu is displayed
+    * @param aResourceId Id of a resource being built
+    * @param aMenuPane Handle to menupane that is about to be shown
+    */
+    void DynInitMenuPaneL( TInt aResourceId, CEikMenuPane* aMenuPane );
+
+    /**
+    * From CCoeControl. Handles the keyevents
+    * @param aKeyEvent The key event.
+    * @param aType The type of key event: EEventKey, EEventKeyUp or EEventKeyDown.
+    * @return Indicates whether or not the key event was used by this control
+    */
+    TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType );
+
+private: // From MIMPSSAPObserver
+
+    /**
+    * From MIMPSSAPObserver
+    * @see MIMPSSAPObserver for more information
+    */
+    void HandleSAPEvent( TSAPEvent aEvent );
+
+private:
+
+    // This function gets the setting value from the Cenrep or variation file, given the resource ID
+    TInt IntResourceValueL( TInt aResourceId );
+
+protected:  // Functions from CEikDialog
+
+    /**
+    * From CEikDialog, Gets called before form is displayed
+    */
+    void PreLayoutDynInitL();
+
+    /**
+    * From CEikDialog
+    * Gets called before the dialog is exited
+    * @param aKeyCode the key code used to exit the dialog
+    */
+    TBool OkToExitL( TInt aKeycode );
+
+private:    // Data
+    // Doesn't own: pointer to the sap settings store
+    CIMPSSAPSettingsStore* iSAPSettingsStore;
+
+    // server in use
+    TPtr iServerInUsePtr;
+
+    // Doesn't own: the user of this dialog
+    MWVSettingsObserver* iObserver;
+
+    // Owns: Settings items
+    CAknSettingItemArray* iSettingItemArray;
+
+    // Owns.: server in use
+    HBufC* iServerInUse;
+
+    // Doesn't own: listbox
+    CAknSettingStyleListBox* iListbox;
+
+    // Owns: the text on the titlepane
+    HBufC* iTitle;
+
+    // Owns: tls holder
+    CWVSettingsUITlsHolder* iTlsHolder;
+
+    // offset of the resource file
+    TInt iResourceFileOffset;
+
+    //offset of the variation based resource file
+    TInt iResourceVariationFileOffset;
+
+    // tells if the chat login type is edited
+    TBool iImLoginTypeEdited;
+    // chat login type
+    TInt iImLoginType;
+
+    // Owns: title pane handler. changes the title pane text
+    CWVSettingsUIDialogTitlePaneHandler* iTitlePaneHandler;
+
+    // Owns:: Pointer to a presence connection UI
+    CIMPSPresenceConnectionUi* iConnectionUI;
+
+    // Owns: Setting item editor
+    CWVSettingsUISettingItemEditor* iSettingItemEditor;
+
+    // IM Scheduling settings
+    // owns: Selection item list for scheduling support
+    CSelectionItemList* iSelectedDaysIM;
+    // Owns: connection days setting item value in listbox
+    HBufC* iConnDaysIM;
+    // Pointer to connection days setting item value in listbox
+    TPtr iConnDaysIMPtr;
+    // Owns: connection hours setting item value in listbox
+    HBufC* iConnHoursIM;
+    // Pointer to connection hours setting item value in listbox
+    TPtr iConnHoursIMPtr;
+    // The value of the connection hours pop-up setting item
+    TInt iConnHoursIMInt;
+    // Owns: connection start time setting item value
+    HBufC* iConnStartIM;
+    // pointer to connection start time setting item value
+    TPtr iConnStartIMPtr;
+    // Owns: connection end time setting item value
+    HBufC* iConnEndIM;
+    // pointer to connection end time setting item value
+    TPtr iConnEndIMPtr;
+
+#ifdef RD_MULTIPLE_DRIVE
+    // Owns.: memory drive selection
+    HBufC* iMemorySelection;
+
+    // memory drive selection
+    TPtr iMemorySelectionPtr;
+#endif // RD_MULTIPLE_DRIVE
+
+    // tells if scheduling is supported
+    TBool iSchedulingSupported;
+
+    TDay iStartDayOfWeek;
+
+    // Own: shared keys interface for permanent keys
+    MIMPSSharedData *iSharedData;
+
+    // Own: shared keys interface for temporary keys
+    MIMPSSharedData *iSettingsChangeNotifier;
+
+    // as a result of parsing problems of time values when changing
+    // time/date separators we must have these here
+    // connection end hour and minute values for PEC
+    TInt iConnEndHourPEC;
+    TInt iConnEndMinutePEC;
+    // connection start hour and minute values for IM
+    TInt iConnStartHourIM;
+    TInt iConnStartMinuteIM;
+    // connection end hour and minute values for IM
+    TInt iConnEndHourIM;
+    TInt iConnEndMinuteIM;
+
+    // Chat server settings
+    MWVSettingsCASettings* iCAServerSettings;
+
+    // Icon array for server list query, owned
+    CAknIconArray* iIconArray;
+
+    // Self pointer. This pointer can be used to inform the
+    // caller that dialog is destroyed.
+    CWVSettingsUIDialog** iSelfPtr;
+
+    // Async dialog launcher
+    CAsyncCallBack* iDlgLauncher;
+
+    // Is forced login made before activating automatic login mode
+    TBool iForcedLoginMade;
+
+    // Is dialog re-launched after login procedure
+    TBool iForcedLaunch;
+
+    // Not owned. Valid pointer only when
+    // server list dialog is active.
+    CWVSettingsUIServerListDialog* iServListDialog;
+
+    //
+    // to avoid twice calling LaunchCorrectDialog()
+    TBool iIsOpenedTargettDlg;
+    };
+
+#endif      // CWVSETTINGSUIDIALOGIMP_H
+
+// End of File