--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emailuis/emailui/src/FreestyleEmailUiSendAttachmentsListVisualiser.cpp Thu Dec 17 08:39:21 2009 +0200
@@ -0,0 +1,406 @@
+/*
+* 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: Implements visualiser for the attachment list view
+*
+*/
+
+
+
+// SYSTEM INCLUDES
+#include "emailtrace.h"
+#include <freestyleemailui.mbg>
+#include <AknUtils.h>
+#include <gulicon.h>
+#include <StringLoader.h>
+#include <FreestyleEmailUi.rsg>
+#include <aknlistquerydialog.h>
+#include <e32cmn.h>
+#include <featmgr.h> // For FeatureManager
+#include <alf/alfcontrolgroup.h>
+
+#include <csxhelp/cmail.hlp.hrh>
+
+// INTERNAL INCLUDES
+#include "FreestyleEmailUiUtilities.h"
+#include "FreestyleEmailUiLayoutHandler.h"
+#include "FreestyleEmailUiSendAttachmentsListVisualiser.h"
+#include "FreestyleEmailUiSendAttachmentsListControl.h"
+#include "FreestyleEmailUiSendAttachmentsListModel.h"
+#include "FreestyleEmailUiFileSystemInfo.h"
+#include "FreestyleEmailUi.hrh"
+#include "FreestyleEmailUiTextureManager.h"
+#include "FreestyleEmailUiShortcutBinding.h"
+
+
+// CLASS IMPLEMENTATION
+
+// ---------------------------------------------------------------------------
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+CFSEmailUiSendAttachmentsListVisualiser* CFSEmailUiSendAttachmentsListVisualiser::NewL(
+ CAlfEnv& aEnv,
+ CFreestyleEmailUiAppUi* aAppUi,
+ CAlfControlGroup& aMailListControlGroup )
+ {
+ FUNC_LOG;
+ CFSEmailUiSendAttachmentsListVisualiser* self = CFSEmailUiSendAttachmentsListVisualiser::NewLC(aEnv, aAppUi, aMailListControlGroup );
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+CFSEmailUiSendAttachmentsListVisualiser* CFSEmailUiSendAttachmentsListVisualiser::NewLC(
+ CAlfEnv& aEnv,
+ CFreestyleEmailUiAppUi* aAppUi,
+ CAlfControlGroup& aMailListControlGroup )
+ {
+ FUNC_LOG;
+ CFSEmailUiSendAttachmentsListVisualiser* self = new (ELeave) CFSEmailUiSendAttachmentsListVisualiser(aAppUi, aEnv, aMailListControlGroup);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+void CFSEmailUiSendAttachmentsListVisualiser::ConstructL()
+ {
+ FUNC_LOG;
+
+ BaseConstructL( R_FSEMAILUI_SENDATTACHMENTS_VIEW );
+
+ // Create list screen (list) control and screen anchor layout
+ iScreenControl = CFreestyleEmailUiSendAttachmentsListControl::NewL( *iEnv, this, &iAppUi );
+ // insert control to control group given from AppUi
+ // owner transferred
+ //<cmail> Compared to S60 3.2.3 in S60 5.0 Alf offers the key events in
+ // opposite order.
+ ControlGroup().AppendL( iScreenControl );
+ ControlGroup().AppendL( iScreenControl->Model()->AttachmentList()->TreeControl() );
+ //</cmail>
+
+ }
+
+
+// ---------------------------------------------------------------------------
+// c++ constructor.
+// ---------------------------------------------------------------------------
+//
+CFSEmailUiSendAttachmentsListVisualiser::CFSEmailUiSendAttachmentsListVisualiser(
+ CFreestyleEmailUiAppUi* aAppUi,
+ CAlfEnv& aEnv,
+ CAlfControlGroup& aAttachmentsListControlGroup )
+ : CFsEmailUiViewBase( aAttachmentsListControlGroup, *aAppUi ),
+ iEnv( &aEnv )
+ {
+ FUNC_LOG;
+ }
+
+// ---------------------------------------------------------------------------
+// c++ destructor.
+// ---------------------------------------------------------------------------
+//
+CFSEmailUiSendAttachmentsListVisualiser::~CFSEmailUiSendAttachmentsListVisualiser()
+ {
+ FUNC_LOG;
+ if ( iScreenControl->Model() )
+ {
+ iScreenControl->DeleteModel();
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// Id
+// from aknview
+// ---------------------------------------------------------------------------
+//
+TUid CFSEmailUiSendAttachmentsListVisualiser::Id() const
+ {
+ FUNC_LOG;
+ return SendAttachmentMngrViewId;
+ }
+
+// ---------------------------------------------------------------------------
+// DoActivateL
+// From aknview
+// ---------------------------------------------------------------------------
+//
+// <cmail> Toolbar
+/*void CFSEmailUiSendAttachmentsListVisualiser::DoActivateL(
+ const TVwsViewId& aPrevViewId,
+ TUid aCustomMessageId,
+ const TDesC8& aCustomMessage )*/
+void CFSEmailUiSendAttachmentsListVisualiser::ChildDoActivateL(
+ const TVwsViewId& aPrevViewId,
+ TUid aCustomMessageId,
+ const TDesC8& aCustomMessage )
+// </cmail> Toolbar
+ {
+ FUNC_LOG;
+
+ if ( aCustomMessageId == TUid::Uid( KEditorCmdOpenAttachmentsList ) )
+ {
+ TPckgBuf<TEditorLaunchParams> buf( iEditorParams );
+ buf.Copy( aCustomMessage );
+ iEditorParams = buf();
+
+ iPrevViewId = aPrevViewId;
+
+ RefreshL();
+ }
+ SetMskL();
+ }
+
+// ---------------------------------------------------------------------------
+// ChildDoDeactivate
+// From CFsEmailUiViewBase
+// ---------------------------------------------------------------------------
+//
+void CFSEmailUiSendAttachmentsListVisualiser::ChildDoDeactivate()
+ {
+ FUNC_LOG;
+ if ( !iAppUi.AppUiExitOngoing() )
+ {
+ iScreenControl->Model()->GetVisualizer()->NotifyControlVisibilityChange( EFalse );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// DynInitMenuPaneL
+// From aknview
+// ---------------------------------------------------------------------------
+//
+void CFSEmailUiSendAttachmentsListVisualiser::DynInitMenuPaneL(
+ TInt aResourceId,
+ CEikMenuPane* aMenuPane )
+ {
+ FUNC_LOG;
+ if ( aResourceId == R_FS_EMAILUI_SENDATTACHMENTS_MENU_PANE )
+ {
+ // if there are read-only attachments or there's no multiple attachments,
+ // remove all functionality is disabled
+ if ( iScreenControl->Model()->Count() <= 1 ||
+ iScreenControl->Model()->HasReadOnlyAttachments() )
+ {
+ aMenuPane->SetItemDimmed( ESendAttachmentMenuRemoveAllAttachments, ETrue );
+ }
+
+ // if no attachment is focused then disable open and remove
+ CFSEmailUiSendAttachmentsListModelItem* item = iScreenControl->Model()->GetSelectedItem();
+ if ( !item || item->IsRemote() )
+ {
+ aMenuPane->SetItemDimmed( ESendAttachmentMenuOpen, ETrue );
+ }
+
+ if ( !item || item->IsReadOnly() )
+ {
+ aMenuPane->SetItemDimmed( ESendAttachmentMenuRemoveAttachment, ETrue );
+ }
+
+ // remove help support in pf5250
+ if ( FeatureManager::FeatureSupported( KFeatureIdFfCmailIntegration ) )
+ {
+ aMenuPane->SetItemDimmed( ESendAttachmentMenuHelp, ETrue);
+ }
+ }
+
+ // Add shortcut hints
+ iAppUi.ShortcutBinding().AppendShortcutHintsL( *aMenuPane,
+ CFSEmailUiShortcutBinding::EContextSendAttachmentList );
+ }
+
+// ---------------------------------------------------------------------------
+// RefreshL
+// Refreshes list items
+// ---------------------------------------------------------------------------
+//
+void CFSEmailUiSendAttachmentsListVisualiser::RefreshL()
+ {
+ FUNC_LOG;
+ iScreenControl->Model()->ReFreshListL();
+ }
+
+
+// ---------------------------------------------------------------------------
+// HandleDynamicVariantSwitchL
+// from aknview
+// ---------------------------------------------------------------------------
+//
+void CFSEmailUiSendAttachmentsListVisualiser::HandleDynamicVariantSwitchL( CFsEmailUiViewBase::TDynamicSwitchType /*aType*/ )
+ {
+ FUNC_LOG;
+ ReScaleUiL();
+ }
+
+// ---------------------------------------------------------------------------
+// GetParentLayoutsL
+// From CFsEmailUiViewBase
+// ---------------------------------------------------------------------------
+//
+void CFSEmailUiSendAttachmentsListVisualiser::GetParentLayoutsL(
+ RPointerArray<CAlfVisual>& aLayoutArray ) const
+ {
+ aLayoutArray.AppendL( iScreenControl->Model()->GetParentLayout() );
+ }
+
+// ---------------------------------------------------------------------------
+// HandleCommandL
+// from aknview
+// ---------------------------------------------------------------------------
+//
+void CFSEmailUiSendAttachmentsListVisualiser::HandleCommandL( TInt aCommand )
+ {
+ FUNC_LOG;
+ switch ( aCommand )
+ {
+ case EAknSoftkeyOpen:
+ case ESendAttachmentMenuOpen:
+ // open file in suitable program
+ iScreenControl->OpenHighlightedFileL();
+ break;
+ case EFsEmailUiCmdCollapse:
+ iScreenControl->HandleCommandL(EFsEmailUiCmdCollapse);
+ break;
+ case EFsEmailUiCmdExpand:
+ iScreenControl->HandleCommandL(EFsEmailUiCmdExpand);
+ break;
+ case ESendAttachmentMenuAddAttachment:
+ iScreenControl->AppendAttachmentToListL();
+ break;
+ case ESendAttachmentMenuRemoveAttachment:
+ iScreenControl->RemoveAttachmentFromListL();
+ break;
+ case ESendAttachmentMenuRemoveAllAttachments:
+ iScreenControl->RemoveAllAttachmentsL();
+ break;
+ case ESendAttachmentMenuExit:
+ iAppUi.Exit();
+ break;
+ case ESendAttachmentMenuHelp:
+ TFsEmailUiUtility::LaunchHelpL( KFSE_HLP_LAUNCHER_GRID );
+ break;
+ case EAknSoftkeyBack:
+ {
+ TPckgBuf<TEditorLaunchParams> buf( iEditorParams );
+ iAppUi.ReturnToPreviousViewL( buf );
+ break;
+ }
+ case EFsEmailUiCmdPageUp:
+ {
+ TKeyEvent simEvent = { EKeyPageUp, EStdKeyPageUp, 0, 0 };
+ iCoeEnv->SimulateKeyEventL( simEvent, EEventKey );
+ }
+ break;
+ case EFsEmailUiCmdPageDown:
+ {
+ TKeyEvent simEvent = { EKeyPageDown, EStdKeyPageDown, 0, 0 };
+ iCoeEnv->SimulateKeyEventL( simEvent, EEventKey );
+ }
+ break;
+ default:
+ break;
+ }
+
+ // Handling the command may have changed the focused item
+ SetMskL();
+ }
+
+
+// ---------------------------------------------------------------------------
+// SetViewSoftkeysL
+//
+// ---------------------------------------------------------------------------
+//
+void CFSEmailUiSendAttachmentsListVisualiser::SetViewSoftkeysL( TInt aResourceId )
+ {
+ FUNC_LOG;
+ Cba()->SetCommandSetL( aResourceId );
+ Cba()->DrawDeferred();
+ }
+
+void CFSEmailUiSendAttachmentsListVisualiser::SetMskL()
+ {
+ FUNC_LOG;
+ TFsTreeItemId curId = iScreenControl->Model()->AttachmentList()->FocusedItem();
+
+ if ( curId != KFsTreeNoneID )
+ {
+ if ( (iScreenControl->Model()->AttachmentList()->IsNode( curId )) )
+ {
+ if ( iScreenControl->Model()->AttachmentList()->IsExpanded( curId ) )
+ {
+ ChangeMskCommandL( R_FSE_QTN_MSK_COLLAPSE );
+ }
+ else
+ {
+ ChangeMskCommandL( R_FSE_QTN_MSK_EXPAND );
+ }
+ }
+ else // non-node item
+ {
+ CFSEmailUiSendAttachmentsListModelItem* item =
+ iScreenControl->Model()->GetSelectedItem();
+ if ( item && !item->IsRemote() )
+ {
+ ChangeMskCommandL( R_FSE_QTN_MSK_OPEN );
+ }
+ else
+ { // Open command is inavailable for remote attachments
+ ChangeMskCommandL( R_FSE_QTN_MSK_EMPTY );
+ }
+ }
+ }
+ else
+ {
+ // No item in focus
+ ChangeMskCommandL( R_FSE_QTN_MSK_EMPTY );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// OfferEventL
+//
+// ---------------------------------------------------------------------------
+//
+TBool CFSEmailUiSendAttachmentsListVisualiser::OfferEventL( const TAlfEvent& /*aEvent*/ )
+ {
+ FUNC_LOG;
+ return EFalse;
+ }
+
+void CFSEmailUiSendAttachmentsListVisualiser::ReScaleUiL()
+ {
+ FUNC_LOG;
+ iScreenControl->Model()->ReScaleUiL();
+ }
+
+CAlfControl* CFSEmailUiSendAttachmentsListVisualiser::ViewerControl()
+ {
+ FUNC_LOG;
+ return iScreenControl;
+ }
+
+TEditorLaunchParams CFSEmailUiSendAttachmentsListVisualiser::EditorParams()
+ {
+ FUNC_LOG;
+ return iEditorParams;
+ }
+