--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/wvuing/ImUtils/Src/IMDialogUtils.cpp Thu Dec 17 08:41:52 2009 +0200
@@ -0,0 +1,607 @@
+/*
+* Copyright (c) 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: Utility class for dialogs
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "IMDialogUtils.h"
+#include "ccatextquerydialog.h"
+#include "ChatDebugPrint.h"
+#include "ChatDebugAssert.h"
+#include "ChatDefinitions.h"
+#include <aknlists.h>
+#include <aknpopup.h>
+#include <aknnotedialog.h>
+#include <aknmessagequerydialog.h>
+#include <aknnotewrappers.h>
+#include <stringloader.h>
+#include <ChatNG.rsg>
+
+// ---------------------------------------------------------
+// IMDialogUtils::DisplayInformationNoteL
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+EXPORT_C void IMDialogUtils::DisplayInformationNoteL( const TDesC& aText )
+ {
+ CAknInformationNote* note = new( ELeave ) CAknInformationNote( ETrue );
+ note->ExecuteLD( aText );
+ }
+
+// ---------------------------------------------------------
+// IMDialogUtils::DisplayInformationNoteL
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+EXPORT_C void IMDialogUtils::DisplayInformationNoteL( TInt aTextResource,
+ const TDesC& aParameter )
+ {
+ HBufC* text = NULL;
+ if ( aParameter == KNullDesC )
+ {
+ text = CEikonEnv::Static()->AllocReadResourceLC( aTextResource );
+ }
+ else
+ {
+ text = StringLoader::LoadLC( aTextResource, aParameter );
+ }
+
+ DisplayInformationNoteL( *text );
+ CleanupStack::PopAndDestroy( text );
+ }
+
+// ---------------------------------------------------------
+// IMDialogUtils::DisplayPopupListL()
+// Displays popup list
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+EXPORT_C void IMDialogUtils::DisplayPopupListL( MDesCArray* aItemList,
+ const TInt aTitleResourceId,
+ TListBoxModelItemArrayOwnership aOwnerShipType,
+ const TInt aEmptyListPrompt /*=-1*/
+ )
+ {
+ CAknSinglePopupMenuStyleListBox* listBox =
+ new ( ELeave ) CAknSinglePopupMenuStyleListBox;
+ CleanupStack::PushL( listBox );
+ CAknPopupList* popUpList = CAknPopupList::NewL( listBox,
+ R_AVKON_SOFTKEYS_OK_EMPTY, AknPopupLayouts::EMenuWindow );
+ CleanupStack::PushL( popUpList );
+ listBox->ConstructL( popUpList,
+ CEikListBox::ELeftDownInViewRect | CEikListBox::EDisableHighlight );
+ listBox->CreateScrollBarFrameL( ETrue );
+ listBox->ScrollBarFrame()->SetScrollBarVisibilityL(
+ CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto );
+
+
+ CTextListBoxModel* model = listBox->Model();
+ model->SetItemTextArray( aItemList );
+ model->SetOwnershipType( aOwnerShipType );
+
+ if ( aEmptyListPrompt != KErrNotFound )
+ {
+ HBufC* emptyText = CEikonEnv::Static()->AllocReadResourceLC(
+ aEmptyListPrompt );
+ popUpList->ListBox()->View()->SetListEmptyTextL( *emptyText );
+ CleanupStack::PopAndDestroy( emptyText );
+ }
+ HBufC* prompt = CEikonEnv::Static()->AllocReadResourceLC(
+ aTitleResourceId );
+ popUpList->SetTitleL( *prompt );
+ CleanupStack::PopAndDestroy( prompt );
+
+
+ popUpList->ExecuteLD();
+ CleanupStack::Pop( popUpList );
+ CleanupStack::PopAndDestroy( listBox );
+
+ }
+
+// ---------------------------------------------------------
+// IMDialogUtils::DisplayPopupListL()
+// Displays popup list
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+EXPORT_C void IMDialogUtils::DisplayPopupListL( TInt& aSelectedIndex, MDesCArray* aItemList,
+ const TDesC& aTitle,
+ TListBoxModelItemArrayOwnership aOwnerShipType,
+ const TInt aEmptyListPrompt /*=-1*/ )
+ {
+ CAknSinglePopupMenuStyleListBox* listBox =
+ new ( ELeave ) CAknSinglePopupMenuStyleListBox;
+ CleanupStack::PushL( listBox );
+ CAknPopupList* popUpList = CAknPopupList::NewL( listBox,
+ R_AVKON_SOFTKEYS_SELECT_BACK, AknPopupLayouts::EMenuWindow );
+ CleanupStack::PushL( popUpList );
+ listBox->ConstructL( popUpList,
+ CEikListBox::ELeftDownInViewRect/*|CEikListBox::EDisableHighlight */ );
+ listBox->CreateScrollBarFrameL( ETrue );
+ listBox->ScrollBarFrame()->SetScrollBarVisibilityL(
+ CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto );
+
+
+ CTextListBoxModel* model = listBox->Model();
+ model->SetItemTextArray( aItemList );
+ model->SetOwnershipType( aOwnerShipType );
+
+ if ( aEmptyListPrompt != KErrNotFound )
+ {
+ HBufC* emptyText = CEikonEnv::Static()->AllocReadResourceLC(
+ aEmptyListPrompt );
+ popUpList->ListBox()->View()->SetListEmptyTextL( *emptyText );
+ CleanupStack::PopAndDestroy( emptyText );
+ }
+
+ popUpList->SetTitleL( aTitle );
+
+
+
+ TInt ret = popUpList->ExecuteLD();
+ CleanupStack::Pop( popUpList );
+
+ if ( ret )
+ {
+ aSelectedIndex = listBox->CurrentItemIndex();
+ }
+
+ CleanupStack::PopAndDestroy( listBox );
+ }
+
+// ---------------------------------------------------------
+// IMDialogUtils::DisplayTextQueryDialogL()
+// Displays text query dialog
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+EXPORT_C TInt IMDialogUtils::DisplayTextQueryDialogL(
+ TDes& aDataText,
+ const TInt aTitleResourceId,
+ const TInt aDialogResourceId,
+ TBool aPredictiveInput /* = EFalse */,
+ TBool aLeftSoftkeyAlwaysVisible /* = EFalse */,
+ TLeftSoftkey aLeftSoftkey /* = EDefault */,
+ TInitialSelectionMode aSelectionMode /* = ESelectAll */,
+ TBool aDomainSelectionQuery /* = EFalse */ )
+ {
+ // CodeScanner warning ignored because CS does not
+ // notice that PrepareLC puts the dialog to cleanupstack
+ CAknTextQueryDialog* dlg = CCATextQueryDialog::NewL( aDataText, // CSI: 35 # See comment above
+ CAknQueryDialog::ENoTone,
+ aLeftSoftkeyAlwaysVisible,
+ aDomainSelectionQuery );
+
+ dlg->PrepareLC( aDialogResourceId );
+ HBufC* text = CEikonEnv::Static()->AllocReadResourceLC( aTitleResourceId );
+ dlg->SetPromptL( *text );
+ dlg->SetPredictiveTextInputPermitted( aPredictiveInput );
+
+ CleanupStack::PopAndDestroy( text );
+
+ // Change cba
+ if ( aLeftSoftkey == ESend )
+ {
+ CEikButtonGroupContainer& cba = dlg->ButtonGroupContainer();
+ cba.SetCommandSetL( R_CHAT_INVITE_CBA_BUTTONS_SEND );
+ }
+
+ // Set correct selection mode
+ switch ( aSelectionMode )
+ {
+ case ESelectNone:
+ {
+ CCoeControl* ctrl = dlg->ControlOrNull( EGeneralQuery );
+ if ( ctrl )
+ {
+ CAknQueryControl* query = static_cast<CAknQueryControl*>( ctrl );
+ ctrl = query->ControlByLayoutOrNull( EDataLayout );
+ if ( ctrl )
+ {
+ CEikEdwin* edwin = static_cast<CEikEdwin*>( ctrl );
+ edwin->AddFlagToUserFlags( CEikEdwin::ENoAutoSelection );
+ }
+ }
+ break;
+ }
+ default:
+ {
+ // Use default flags in edwin
+ break;
+ }
+ }
+ return ( dlg->RunLD() );
+ }
+
+// ---------------------------------------------------------
+// IMDialogUtils::DisplayMessageQueryDialogL
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+EXPORT_C TInt IMDialogUtils::DisplayMessageQueryDialogL( const TInt aDialogResourceId,
+ const TDesC& aMsgText,
+ const TDesC& aHeaderText,
+ TBool aPredictiveInput )
+ {
+ // CodeScanner warning ignored because CS does not
+ // notice that PrepareLC puts the dialog to cleanupstack
+ CAknMessageQueryDialog* dlg = new( ELeave )CAknMessageQueryDialog(); // CSI: 35 # See comment above
+ dlg->PrepareLC( aDialogResourceId );
+ if ( aMsgText != KNullDesC )
+ {
+ dlg->SetMessageTextL( aMsgText );
+ }
+ if ( aHeaderText != KNullDesC )
+ {
+ dlg->SetHeaderTextL( aHeaderText );
+ }
+ dlg->SetPredictiveTextInputPermitted( aPredictiveInput ); // T9
+ return ( dlg->RunLD() );
+ }
+
+// ---------------------------------------------------------
+// IMDialogUtils::MultiselectionListQueryDialogLC
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+EXPORT_C CDesCArray* IMDialogUtils::MultiselectionListQueryDialogL(
+ const MDesCArray& aItemList,
+ const TDesC& aTitle )
+ {
+ TInt count( aItemList.MdcaCount() );
+ if ( count == 0 )
+ {
+ // empty list
+ return NULL;
+ }
+
+ // array for indices
+ CArrayFixFlat<TInt>* selectedIndices =
+ new( ELeave ) CArrayFixFlat<TInt>( count );
+ CleanupStack::PushL( selectedIndices );
+
+ // append icon formatting
+ CDesCArray* lst = new( ELeave )CDesCArrayFlat( count );
+ CleanupStack::PushL( lst );
+ for ( TInt i( 0 ); i < count; ++i )
+ {
+ TPtrC item( aItemList.MdcaPoint( i ) );
+ HBufC* text = HBufC::NewMaxLC( item.Length() +
+ KIconTabulator().Length() );
+ TPtr txt( text->Des() );
+ txt.Copy( KIconTabulator );
+ txt.Append( item );
+
+ CHAT_DP( D_CHAT_LIT( "appending '%S' to list" ), &txt );
+
+ lst->AppendL( *text );
+ CleanupStack::PopAndDestroy( text );
+ }
+
+ // show the query
+ TInt retVal( IMDialogUtils::DisplayListQueryDialogL(
+ selectedIndices, lst, R_CHATVIEW_RECIPIENT_QUERY, NULL,
+ KNullDesC, aTitle ) );
+ // CAknListQueryDialog returns 0 if user cancels the query
+ if ( !retVal )
+ {
+ // query cancelled
+ CleanupStack::PopAndDestroy( 2, selectedIndices ); // lst, selectedIndices
+ return NULL;
+ }
+
+ // selected items array
+ CDesCArray* selected = NULL;
+
+ count = selectedIndices->Count();
+ if ( count == 0 )
+ {
+ // nothing selected, return empty array
+ CleanupStack::PopAndDestroy( 2, selectedIndices ); // lst, selectedIndices
+ selected = new( ELeave )CDesCArrayFlat( 1 );
+ }
+ else
+ {
+ // specified items selected
+ selected = new( ELeave )CDesCArrayFlat( count );
+ CleanupStack::PushL( selected );
+ for ( TInt i( 0 ); i < count; ++i )
+ {
+ // take out the icon formatting ("0\t")
+ TPtrC item( lst->MdcaPoint( selectedIndices->At( i ) ).Mid(
+ KIconTabulator().Length() ) );
+ selected->AppendL( item );
+ CHAT_DP( D_CHAT_LIT( "selected %S from list" ), &item );
+ }
+ CleanupStack::Pop( selected );
+ CleanupStack::PopAndDestroy( 2, selectedIndices ); // lst, selectedIndices
+ }
+ return selected;
+ }
+
+// ---------------------------------------------------------
+// IMDialogUtils::DisplayListQueryDialogL()
+// This method displays ListQueryDialog
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+EXPORT_C TInt IMDialogUtils::DisplayListQueryDialogL( CArrayFix< TInt >* aIndexArray,
+ MDesCArray* aItemList,
+ const TInt aDialogResourceId,
+ CArrayFix< TInt >* aArrayOfSelectionIndexes /*NULL*/,
+ const TDesC& aListEmptyText /*= KNullDesC*/,
+ const TDesC& aAlternativeTitle /*= KNullDesC*/ )
+ {
+ CAknListQueryDialog* dlg = new ( ELeave ) CAknListQueryDialog( aIndexArray );
+ dlg->PrepareLC( aDialogResourceId );
+ dlg->SetItemTextArray( aItemList );
+ dlg->SetOwnershipType( ELbmDoesNotOwnItemArray );
+
+ if ( aArrayOfSelectionIndexes )
+ {
+ dlg->ListBox()->SetSelectionIndexesL( aArrayOfSelectionIndexes );
+ if ( aArrayOfSelectionIndexes->Count() == 1 )
+ {
+ dlg->ListBox()->SetCurrentItemIndexAndDraw(
+ aArrayOfSelectionIndexes->At( 0 ) );
+ }
+
+ }
+ if ( aItemList->MdcaCount() == 0 )
+ {
+ CEikButtonGroupContainer& cba = dlg->ButtonGroupContainer();
+ cba.SetCommandSetL( R_AVKON_SOFTKEYS_CANCEL );
+ }
+
+ if ( aListEmptyText != KNullDesC )
+ {
+ dlg->ListBox()->View()->SetListEmptyTextL( aListEmptyText );
+ }
+
+ if ( aAlternativeTitle != KNullDesC )
+ {
+ dlg->SetHeaderTextL( aAlternativeTitle );
+ }
+
+ return ( dlg->RunLD() );
+ }
+
+// ---------------------------------------------------------
+// IMDialogUtils::DisplayListQueryDialogL
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+EXPORT_C TInt IMDialogUtils::DisplayListQueryDialogL( TInt* aSelectedIndex,
+ MDesCArray* aItemList,
+ const TInt aDialogResourceId,
+ const TDesC& aAlternativeTitle /*KNullDesC*/,
+ const TDesC& aListEmptyText /*= KNullDesC*/,
+ const TBool aIsForwardQuery /* EFalse */,
+ const TBool aIsOnlySelect /* = EFalse */ )
+
+ {
+ CAknListQueryDialog* dlg = new ( ELeave ) CAknListQueryDialog(
+ aSelectedIndex );
+ dlg->PrepareLC( aDialogResourceId );
+ dlg->SetItemTextArray( aItemList );
+ dlg->SetOwnershipType( ELbmDoesNotOwnItemArray );
+
+ if ( aAlternativeTitle != KNullDesC )
+ {
+ dlg->SetHeaderTextL( aAlternativeTitle );
+ }
+
+ if ( aItemList->MdcaCount() == 0 )
+ {
+ CEikButtonGroupContainer& cba = dlg->ButtonGroupContainer();
+ cba.SetCommandSetL( R_AVKON_SOFTKEYS_CANCEL );
+ }
+ else
+ {
+ if ( aIsForwardQuery )
+ {
+ CEikButtonGroupContainer& cba = dlg->ButtonGroupContainer();
+ cba.SetCommandSetL( R_AVKON_SOFTKEYS_SELECT_CANCEL__SELECT );
+ }
+ }
+
+ if ( aIsOnlySelect )
+ {
+ CEikButtonGroupContainer& cba = dlg->ButtonGroupContainer();
+ cba.SetCommandSetL( R_CHAT_SOFTKEYS_SELECT_EMPTY );
+ }
+
+ dlg->ListBox()->SetCurrentItemIndex( *aSelectedIndex );
+
+ if ( aListEmptyText != KNullDesC )
+ {
+ dlg->ListBox()->View()->SetListEmptyTextL( aListEmptyText );
+ }
+
+ return ( dlg->RunLD() );
+ }
+
+// ---------------------------------------------------------
+// IMDialogUtils::DisplayNoteDialogL
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+EXPORT_C TInt IMDialogUtils::DisplayNoteDialogL( const TInt aResourceId )
+ {
+ CAknNoteDialog* dlg = new ( ELeave ) CAknNoteDialog( CAknNoteDialog::
+ EConfirmationTone, CAknNoteDialog::EShortTimeout );
+ return dlg->ExecuteLD( aResourceId );
+ }
+
+// ---------------------------------------------------------
+// IMDialogUtils::DisplayNoteDialogL
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+EXPORT_C TInt IMDialogUtils::DisplayNoteDialogL( const TDesC& aText,
+ const TInt aButtonsResourceId, /*= R_AVKON_SOFTKEYS_EMPTY*/
+ const CAknNoteDialog::TTimeout& aTimeout /*= CAknNoteDialog::EShortTimeout*/ )
+ {
+ // CodeScanner warning ignored because CS does not
+ // notice that PrepareLC puts the dialog to cleanupstack
+ CAknNoteDialog* dlg = new ( ELeave ) CAknNoteDialog( // CSI: 35 # See comment above
+ CAknNoteDialog::EConfirmationTone , aTimeout );
+
+ dlg->PrepareLC( R_CHAT_INFO_NOTE_TEMPLATE );
+ dlg->SetTextL( aText );
+
+ CEikButtonGroupContainer& cba = dlg->ButtonGroupContainer();
+ cba.SetCommandSetL( aButtonsResourceId );
+
+ return dlg->RunLD();
+ }
+
+// ---------------------------------------------------------
+// IMDialogUtils::DisplayErrorNoteL
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+EXPORT_C TInt IMDialogUtils::DisplayErrorNoteL( const TInt aResourceId )
+ {
+ CAknNoteDialog* dlg = new ( ELeave ) CAknNoteDialog(
+ CAknNoteDialog::EErrorTone , CAknNoteDialog::ELongTimeout );
+
+ return dlg->ExecuteLD( aResourceId );
+ }
+
+// ---------------------------------------------------------
+// IMDialogUtils::DisplayErrorNoteL
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+EXPORT_C TInt IMDialogUtils::DisplayErrorNoteL( const TDesC& aText, TBool aSoftkeyOk /*= EFalse*/ )
+ {
+ if ( aSoftkeyOk )
+ {
+ return IMDialogUtils::DisplayQueryDialogL( R_CHAT_ERROR_NOTE_TEMPLATE_WITH_OK, aText );
+ }
+ else
+ {
+ // CodeScanner warning ignored because CS does not
+ // notice that PrepareLC puts the dialog to cleanupstack
+ CAknNoteDialog* dlg = // CSI: 35 # See comment above
+ new ( ELeave ) CAknNoteDialog( CAknNoteDialog::EErrorTone ,
+ CAknNoteDialog::ELongTimeout );
+ dlg->PrepareLC( R_CHAT_ERROR_NOTE_TEMPLATE );
+ dlg->SetTextL( aText );
+ return dlg->RunLD();
+ }
+ }
+
+// ---------------------------------------------------------
+// IMDialogUtils::DisplayQueryDialogL
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+EXPORT_C TInt IMDialogUtils::DisplayQueryDialogL( TInt aDialogResourceId,
+ TInt aTextResourceId )
+ {
+ HBufC* prompt = CEikonEnv::Static()->AllocReadResourceLC( aTextResourceId );
+ TInt ret( DisplayQueryDialogL( aDialogResourceId, *prompt ) );
+ CleanupStack::PopAndDestroy( prompt );
+
+ return ret;
+ }
+
+// ---------------------------------------------------------
+// IMDialogUtils::DisplayQueryDialogL
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+EXPORT_C TInt IMDialogUtils::DisplayQueryDialogL( TInt aDialogResourceId,
+ const TDesC& aPrompt )
+ {
+ CAknQueryDialog* dlg = new ( ELeave ) CAknQueryDialog(
+ CAknQueryDialog::ENoTone );
+ if ( aPrompt != KNullDesC )
+ {
+ CleanupStack::PushL( dlg );
+ dlg->SetPromptL( aPrompt );
+ CleanupStack::Pop( dlg );
+ }
+
+ return dlg->ExecuteLD( aDialogResourceId );
+ }
+
+// ---------------------------------------------------------
+// IMDialogUtils::DisplayQueryDialogL
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+EXPORT_C TInt IMDialogUtils::DisplayYesNoConfirmationDialogL( TInt aTextResourceId )
+ {
+ return IMDialogUtils::DisplayQueryDialogL(
+ R_GENERIC_YES_NO_CONFIRMATION_QUERY,
+ aTextResourceId );
+ }
+
+// ---------------------------------------------------------
+// IMDialogUtils::DisplayQueryDialogL
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+EXPORT_C TInt IMDialogUtils::DisplayYesNoConfirmationDialogL( const TDesC& aPrompt )
+ {
+ return IMDialogUtils::DisplayQueryDialogL(
+ R_GENERIC_YES_NO_CONFIRMATION_QUERY,
+ aPrompt );
+ }
+
+// ---------------------------------------------------------
+// IMDialogUtils::DisplayOKErrorNoteL
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+EXPORT_C TInt IMDialogUtils::DisplayErrorConfirmationNoteL( TInt aTextResourceId )
+ {
+ return IMDialogUtils::DisplayQueryDialogL(
+ R_GENERIC_OK_ERROR_NOTE,
+ aTextResourceId );
+ }
+
+// ---------------------------------------------------------
+// IMDialogUtils::DisplayErrorConfirmationNoteL
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+EXPORT_C TInt IMDialogUtils::DisplayErrorConfirmationNoteL( const TDesC& aPrompt )
+ {
+ return IMDialogUtils::DisplayQueryDialogL(
+ R_GENERIC_OK_ERROR_NOTE,
+ aPrompt );
+ }
+
+// ---------------------------------------------------------
+// IMDialogUtils::DisplayConfirmationNoteL
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+EXPORT_C TInt IMDialogUtils::DisplayConfirmationNoteL( TInt aTextResourceId )
+ {
+ HBufC* prompt = CEikonEnv::Static()->AllocReadResourceLC( aTextResourceId );
+ CAknConfirmationNote* dlg = new( ELeave )CAknConfirmationNote();
+ TInt ret = dlg->ExecuteLD( *prompt );
+ CleanupStack::PopAndDestroy( prompt );
+ return ret;
+ }
+
+// End of File