--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emailuis/emailui/src/FreestyleEmailUiGlobalSettingsList.cpp Thu Dec 17 08:39:21 2009 +0200
@@ -0,0 +1,398 @@
+/*
+* Copyright (c) 2005-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: Freestyle Email source file
+*
+*/
+
+
+// SYSTEM INCLUDES
+#include "emailtrace.h"
+#include <avkon.hrh>
+#include <avkon.rsg>
+#include <eikmenup.h>
+#include <aknappui.h>
+#include <eikcmobs.h>
+#include <barsread.h>
+#include <StringLoader.h>
+#include <AknPopupFieldText.h>
+#include <eikenv.h>
+#include <eikappui.h>
+#include <aknViewAppUi.h>
+#include <apgcli.h>
+#include <FreestyleEmailUi.rsg>
+
+// LOCAL INCLUDES
+#include "FreestyleEmailUiGlobalSettingsData.h"
+#include "FreestyleEmailUiGlobalSettings.hrh"
+#include "FreestyleEmailUiGlobalSettingsListView.h"
+#include "FreestyleEmailUiGlobalSettingsList.h"
+#include "FreestyleEmailUiAppui.h"
+#include "FreestyleEmailCenRepHandler.h"
+#include "FreestyleEmailUiShortcutBinding.h"
+#include "FreestyleEmailUiConstants.h"
+
+/**
+ * Constructor
+ * @param aCommandObserver command observer
+ */
+CFsEmailUiGlobalSettingsList::CFsEmailUiGlobalSettingsList(
+ CFsEmailUiGlobalSettingsData& aSettings,
+ MEikCommandObserver* aCommandObserver )
+ : iSettings( aSettings ), iCommandObserver( aCommandObserver )
+ {
+ FUNC_LOG;
+ }
+
+/**
+ * Destructor
+ * Destroy any instance variables
+ */
+CFsEmailUiGlobalSettingsList::~CFsEmailUiGlobalSettingsList()
+ {
+ FUNC_LOG;
+ }
+
+/**
+ * Handle system notification that the container's size has changed.
+ */
+void CFsEmailUiGlobalSettingsList::SizeChanged()
+ {
+ FUNC_LOG;
+
+ if ( ListBox() )
+ {
+ ListBox()->SetRect( Rect() );
+ }
+
+ }
+
+/**
+ * Create one setting item at a time, identified by id.
+ * CAknSettingItemList calls this method and takes ownership
+ * of the returned value. The CAknSettingItem object owns
+ * a reference to the underlying data, which EditItemL() uses
+ * to edit and store the value.
+ */
+CAknSettingItem* CFsEmailUiGlobalSettingsList::CreateSettingItemL( TInt aId )
+ {
+ FUNC_LOG;
+
+ switch ( aId )
+ {
+ case EGlobalSettingsTitleDividers:
+ {
+ CAknBinaryPopupSettingItem* item = new ( ELeave )
+ CAknBinaryPopupSettingItem(
+ aId,
+ iSettings.TitleDividers() );
+ return item;
+ }
+ case EGlobalSettingsDownloadNotifications:
+ {
+ CAknBinaryPopupSettingItem* item = new ( ELeave )
+ CAknBinaryPopupSettingItem(
+ aId,
+ iSettings.DownloadNotifications() );
+ return item;
+ }
+ case EGlobalSettingsWarnBeforeDelete:
+ {
+ CAknBinaryPopupSettingItem* item = new ( ELeave )
+ CAknBinaryPopupSettingItem(
+ aId,
+ iSettings.WarnBeforeDelete() );
+ return item;
+ }/*
+ case EGlobalSettingsDownloadHTMLImages:
+ {
+ CAknBinaryPopupSettingItem* item = new ( ELeave )
+ CAknBinaryPopupSettingItem(
+ aId,
+ iSettings.DownloadHTMLImages() );
+ return item;
+ }*/
+ case EGlobalSettingsActiveIdle:
+ {
+ CAknBigSettingItemBase* item = new ( ELeave )
+ CAknBigSettingItemBase( aId );
+ TBool hideHsSetting = !IsHsModesAppAvailable(); // handling other HS types to be added later
+ item->SetHidden( hideHsSetting );
+ return item;
+ }
+ }
+
+ return NULL;
+ }
+
+/**
+ * Edit the setting item identified by the given id and store
+ * the changes into the store.
+ * @param aIndex the index of the setting item in SettingItemArray()
+ * @param aCalledFromMenu true: a menu item invoked editing, thus
+ * always show the edit page and interactively edit the item;
+ * false: change the item in place if possible, else show the edit page
+ */
+void CFsEmailUiGlobalSettingsList::EditItemL ( TInt aIndex, TBool aCalledFromMenu )
+ {
+ FUNC_LOG;
+
+ CAknSettingItem* item = ( *SettingItemArray() )[aIndex];
+ CAknSettingItemList::EditItemL( aIndex, aCalledFromMenu );
+
+ item->StoreL();
+ SaveSettingValuesL();
+ }
+
+/**
+ * Handle the "Change" option on the Options menu or on the MSK.
+ * The argument tells which one is the case.
+ */
+void CFsEmailUiGlobalSettingsList::ChangeSelectedItemL( TBool aCalledFromMenu )
+ {
+ FUNC_LOG;
+
+ TInt idx = ListBox()->CurrentItemIndex();
+ if ( idx >= 0 )
+ {
+ CAknSettingItem* item = ( *SettingItemArray() )[idx];
+
+ if ( item->Identifier() == EGlobalSettingsActiveIdle )
+ {
+ if ( IsHsModesAppAvailable() )
+ {
+ ActivateHsModesEmailViewL();
+ }
+ else
+ {
+ // opening of Email widget settings or settings of non-Eseries
+ // S60 3.2 home screen plugin to be added here later
+ }
+ }
+ else
+ {
+ EditItemL( idx, aCalledFromMenu );
+ }
+ }
+ }
+
+/**
+ * Load the initial contents of the setting items. By default,
+ * the setting items are populated with the default values from
+ * the design. You can override those values here.
+ *
+ */
+void CFsEmailUiGlobalSettingsList::LoadSettingValuesL()
+ {
+ FUNC_LOG;
+
+ CFSEmailCRHandler *crHandler = CFSEmailCRHandler::InstanceL();
+
+ // Layout setting item has values 1 (1 line) and 0 (2 lines) because no other values are allowed in binary items.
+ // CenRep, on the other hand, uses values 1 (1 line) and 2 (2 lines).
+ iSettings.SetMessageListLayout( crHandler->MessageListLayout() == 1 ? 1 : 0 );
+
+ iSettings.SetBodyPreview( crHandler->BodyPreview() );
+ iSettings.SetTitleDividers( crHandler->TitleDividers() );
+ iSettings.SetDownloadNotifications( crHandler->DownloadNotifications() );
+ iSettings.SetActiveIdle( crHandler->ActiveIdle() );
+ iSettings.SetWarnBeforeDelete( crHandler->WarnBeforeDelete() );
+ //iSettings.SetDownloadHTMLImages( crHandler->DownloadHTMLImages() );
+ }
+
+/**
+ * Save the contents of the setting items. Note, this is called
+ * whenever an item is changed and stored to the model, so it
+ * may be called multiple times or not at all.
+ */
+void CFsEmailUiGlobalSettingsList::SaveSettingValuesL()
+ {
+ FUNC_LOG;
+
+ CFSEmailCRHandler *crHandler = CFSEmailCRHandler::InstanceL();
+
+ // Layout setting item has values 1 (1 line) and 0 (2 lines) because no other values are allowed in binary items.
+ // CenRep, on the other hand, uses values 1 (1 line) and 2 (2 lines).
+ crHandler->SetMessageListLayout( iSettings.MessageListLayout() ? 1 : 2 );
+
+ crHandler->SetBodyPreview( iSettings.BodyPreview() );
+ crHandler->SetTitleDividers( iSettings.TitleDividers() );
+ crHandler->SetDownloadNotifications( iSettings.DownloadNotifications() );
+ crHandler->SetActiveIdle( iSettings.ActiveIdle() );
+ crHandler->SetWarnBeforeDelete( iSettings.WarnBeforeDelete() );
+ //crHandler->SetDownloadHTMLImages( iSettings.DownloadHTMLImages() );
+ }
+
+/**
+ * Get ID of the focused setting list item
+ */
+TInt CFsEmailUiGlobalSettingsList::FocusedItemId()
+ {
+ FUNC_LOG;
+ TInt id = KErrNotFound;
+
+ if ( ListBox() && SettingItemArray() )
+ {
+ TInt curIdx = ListBox()->CurrentItemIndex();
+ CAknSettingItem* item = ( *SettingItemArray() )[curIdx];
+ id = item->Identifier();
+ }
+
+ return id;
+ }
+
+/**
+ * Handle global resource changes, such as scalable UI or skin events (override)
+ */
+void CFsEmailUiGlobalSettingsList::HandleResourceChange( TInt aType )
+ {
+ FUNC_LOG;
+
+ CAknSettingItemList::HandleResourceChange( aType );
+ SetRect( iAvkonViewAppUi->View( GlobalSettingsViewId )->ClientRect() );
+
+ }
+
+/**
+ * Handle key event (override)
+ * @param aKeyEvent key event
+ * @param aType event code
+ * @return EKeyWasConsumed if the event was handled, else EKeyWasNotConsumed
+ */
+TKeyResponse CFsEmailUiGlobalSettingsList::OfferKeyEventL(
+ const TKeyEvent& aKeyEvent,
+ TEventCode aType )
+ {
+ FUNC_LOG;
+ TKeyResponse retVal = EKeyWasNotConsumed;
+
+ // Check keyboard shortcuts.
+ if ( aType == EEventKey )
+ {
+ CFreestyleEmailUiAppUi* appUi = static_cast<CFreestyleEmailUiAppUi*>(iAvkonViewAppUi);
+ TInt shortcutCommand =
+ appUi->ShortcutBinding().CommandForShortcutKey( aKeyEvent,
+ CFSEmailUiShortcutBinding::EContextSettings );
+ if ( shortcutCommand != KErrNotFound )
+ {
+ appUi->View( GlobalSettingsViewId )->HandleCommandL( shortcutCommand );
+ retVal = EKeyWasConsumed;
+ }
+ }
+
+ if ( retVal == EKeyWasNotConsumed )
+ {
+ retVal = CAknSettingItemList::OfferKeyEventL( aKeyEvent, aType );
+ }
+
+ // Update MSK label after key has been consumed
+ if ( retVal == EKeyWasConsumed )
+ {
+ CFsEmailUiGlobalSettingsListView* view =
+ static_cast<CFsEmailUiGlobalSettingsListView*>(
+ iAvkonViewAppUi->View(GlobalSettingsViewId) );
+ view->SetMskL();
+ }
+
+ return retVal;
+ }
+
+// ---------------------------------------------------------------------------
+// Move list focus to top
+// ---------------------------------------------------------------------------
+//
+void CFsEmailUiGlobalSettingsList::GoToTop()
+ {
+ FUNC_LOG;
+ TInt count = ListBox()->Model()->NumberOfItems();
+ if ( count )
+ {
+ ListBox()->SetCurrentItemIndexAndDraw( 0 );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Move list focus to bottom
+// ---------------------------------------------------------------------------
+//
+void CFsEmailUiGlobalSettingsList::GoToBottom()
+ {
+ FUNC_LOG;
+ TInt count = ListBox()->Model()->NumberOfItems();
+ if ( count )
+ {
+ ListBox()->SetCurrentItemIndexAndDraw( count-1 );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Move selector one page up
+// ---------------------------------------------------------------------------
+//
+void CFsEmailUiGlobalSettingsList::PageUp()
+ {
+ FUNC_LOG;
+ TInt itemsOnPage = ListBox()->BottomItemIndex() - ListBox()->TopItemIndex();
+ TInt currentIdx = ListBox()->CurrentItemIndex();
+ TInt newIdx = Max( 0, currentIdx - itemsOnPage );
+ ListBox()->SetCurrentItemIndexAndDraw( newIdx );
+ }
+
+// ---------------------------------------------------------------------------
+// Move selector one page down
+// ---------------------------------------------------------------------------
+//
+void CFsEmailUiGlobalSettingsList::PageDown()
+ {
+ FUNC_LOG;
+ TInt count = ListBox()->Model()->NumberOfItems();
+ TInt itemsOnPage = ListBox()->BottomItemIndex() - ListBox()->TopItemIndex();
+ TInt currentIdx = ListBox()->CurrentItemIndex();
+ TInt newIdx = Min( count-1, currentIdx + itemsOnPage );
+ ListBox()->SetCurrentItemIndexAndDraw( newIdx );
+ }
+
+// ---------------------------------------------------------------------------
+// Checks if the Homescreen Modes application is available on the device
+// ---------------------------------------------------------------------------
+//
+TBool CFsEmailUiGlobalSettingsList::IsHsModesAppAvailable() const
+ {
+ FUNC_LOG;
+ TBool available = EFalse;
+ RApaLsSession apaSession;
+ TInt err = apaSession.Connect();
+ if ( !err )
+ {
+ TApaAppInfo appInfo;
+ err = apaSession.GetAppInfo( appInfo, KHsModesAppUid );
+ apaSession.Close();
+ if ( !err )
+ {
+ available = ETrue;
+ }
+ }
+ return available;
+ }
+
+// ---------------------------------------------------------------------------
+// Activates the email view of the Homescreen Modes application
+// ---------------------------------------------------------------------------
+//
+void CFsEmailUiGlobalSettingsList::ActivateHsModesEmailViewL()
+ {
+ FUNC_LOG;
+ const TVwsViewId KModesEmailView( KHsModesAppUid, KHsModesPrimaryEmailViewId );
+ iAvkonViewAppUi->ActivateViewL( KModesEmailView );
+ }
+