--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/email/mail/EditorSrc/CMsgAddMailHeadersDlg.cpp Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,195 @@
+/*
+* Copyright (c) 2002-2006 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: View for setting additional mail headers
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "CMsgAddMailHeadersDlg.h"
+#include "MsgMailPreferences.h"
+#include <StringLoader.h>
+#include <MsgMailEditor.rsg>
+#include <akncheckboxsettingpage.h>
+#include <aknsettingitemlist.h>
+#include <aknlistquerydialog.h>
+#include "MailUtils.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CMsgAddMailHeadersDlg::CMsgAddMailHeadersDlg
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CMsgAddMailHeadersDlg::CMsgAddMailHeadersDlg(
+ RPointerArray<TAdditionalHeaderStatus>& aHeaders): iHeaders(aHeaders)
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CMsgAddMailHeadersDlg::NewLC
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CMsgAddMailHeadersDlg* CMsgAddMailHeadersDlg::NewLC(
+ RPointerArray<TAdditionalHeaderStatus>& aHeaders)
+ {
+ CMsgAddMailHeadersDlg* self = new(ELeave) CMsgAddMailHeadersDlg(aHeaders);
+ CleanupStack::PushL(self);
+ return self;
+ }
+
+
+// Destructor
+CMsgAddMailHeadersDlg::~CMsgAddMailHeadersDlg()
+ {
+ }
+
+
+// -----------------------------------------------------------------------------
+// CMsgAddMailHeadersDlg::ExecuteDialogL
+// Constructs a CSelectionList array and launches the setting view
+// Collects the changed values to iHeaders array
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TBool CMsgAddMailHeadersDlg::ExecuteDialogL()
+ {
+ TBool rc(EFalse);
+
+ CArrayFixFlat<TInt>* arrayChoices =
+ new(ELeave) CArrayFixFlat<TInt>( iHeaders.Count() );
+ CleanupStack::PushL(arrayChoices);
+
+ CAknListQueryDialog* dlg = new(ELeave) CAknListQueryDialog(arrayChoices);
+ dlg->PrepareLC( R_ADDITIONAL_HEADERS_LIST_QUERY );
+
+ CDesCArrayFlat* headersArray = CreateItemTextArrayLC( arrayChoices );
+
+ dlg->SetItemTextArray( headersArray );
+ dlg->SetOwnershipType( ELbmOwnsItemArray );
+ CleanupStack::Pop( headersArray );
+
+ CEikListBox* listbox = dlg->ListBox();
+ listbox->SetSelectionIndexesL(arrayChoices);
+
+ if(dlg->RunLD())
+ {
+ UpdateHeadersArrayL( arrayChoices );
+ rc = ETrue;
+ }
+
+ CleanupStack::PopAndDestroy(arrayChoices);
+ return rc;
+ }
+
+// -----------------------------------------------------------------------------
+// CMsgAddMailHeadersDlg::CreateItemTextArrayLC
+// -----------------------------------------------------------------------------
+//
+CDesCArrayFlat* CMsgAddMailHeadersDlg::CreateItemTextArrayLC(
+ CArrayFixFlat<TInt>* aVisibleItems )
+ {
+ ASSERT( aVisibleItems );
+ CDesCArrayFlat* headersArray =
+ new ( ELeave ) CDesCArrayFlat( iHeaders.Count() );
+ CleanupStack::PushL( headersArray );
+
+ for ( TInt index(0); index<iHeaders.Count(); ++index )
+ {
+ if( iHeaders[index]->iStatus == EHeaderVisible )
+ {
+ aVisibleItems->AppendL( index );
+ }
+ TInt resource(0);
+ switch (iHeaders[index]->iHeaderValue)
+ {
+ case EMsgComponentIdCc:
+ resource = R_QTN_MSG_HEADERS_CC;
+ break;
+ case EMsgComponentIdBcc:
+ resource = R_QTN_MSG_HEADERS_BCC;
+ break;
+ case EMsgComponentIdSubject:
+ resource = R_QTN_MSG_HEADERS_SUBJECT;
+ break;
+ default:
+ __ASSERT_DEBUG( EFalse, User::Invariant() );
+ }
+ HBufC* headerText = StringLoader::LoadLC( resource );
+ headersArray->AppendL( * headerText );
+ CleanupStack::PopAndDestroy(headerText); // headerText
+ }
+ return headersArray;
+ }
+
+// -----------------------------------------------------------------------------
+// CMsgAddMailHeadersDlg::UpdateHeadersArrayL
+// -----------------------------------------------------------------------------
+//
+void CMsgAddMailHeadersDlg::UpdateHeadersArrayL(
+ CArrayFixFlat<TInt>* aSelectedItems )
+ {
+ ASSERT( aSelectedItems );
+ // Reset visibility
+ for ( TInt index(0); index<iHeaders.Count(); ++index )
+ {
+ iHeaders[index]->iStatus = EHeaderHidden;
+ }
+ // Set selected items visible
+ for ( TInt ii=0; ii<aSelectedItems->Count(); ii++ )
+ {
+ iHeaders[aSelectedItems->At(ii)]->iStatus = EHeaderVisible;
+ }
+ // Find invisible items that has some content
+ TInt contentCount(0);
+ for ( TInt xx=0;xx<iHeaders.Count();xx++ )
+ {
+ if( iHeaders[xx]->iStatus ==
+ EHeaderHidden && iHeaders[xx]->iHasContent )
+ {
+ contentCount++;
+ }
+ }
+ // We are removing control that has some content
+ if( contentCount )
+ {
+ // plural?
+ TUint queryString = (contentCount > 1) ?
+ R_QTN_MSG_QRY_HEADERS_REMOVE :
+ R_QTN_MSG_QRY_HEADER_REMOVE;
+
+ TInt queryResult = MailUtils::ConfirmationQueryL(
+ queryString,
+ R_MAIL_EDITOR_DELETE_MESSAGE);
+
+ // Do not remove control, only save visibility of controls
+ if( !queryResult )
+ {
+ for ( TInt yy=0;yy<iHeaders.Count();yy++ )
+ {
+ if( iHeaders[yy]->iStatus ==
+ EHeaderHidden && iHeaders[yy]->iHasContent )
+ {
+ iHeaders[yy]->iStatus = EHeaderOnlySave;
+ }
+ }
+ }
+ }
+
+ }
+// End of File