memana/analyzetoolclient/configurationappgui/src/atconfigurationappguiprocessview.cpp
changeset 0 f0f2b8682603
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/memana/analyzetoolclient/configurationappgui/src/atconfigurationappguiprocessview.cpp	Thu Feb 11 15:51:35 2010 +0200
@@ -0,0 +1,601 @@
+/*
+* Copyright (c) 2009 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: 
+*
+*/
+
+#include <aknviewappui.h>
+#include <eikmenub.h>
+#include <avkon.hrh>
+#include <barsread.h>
+#include <stringloader.h>
+#include <aknlists.h>
+#include <eikenv.h>
+#include <akniconarray.h>
+#include <eikclbd.h>
+#include <akncontext.h>
+#include <akntitle.h>
+#include <aknnavide.h>
+#include <aknnavi.h>
+#include <eikbtgpc.h>
+#include <aknlistquerydialog.h>
+#include <atconfigurationappgui.rsg>
+
+#include "atconfigurationappgui.hrh"
+#include "atconfigurationappguiprocessview.h"
+#include "atconfigurationappguiprocesscontainer.hrh"
+#include "atconfigurationappguilistbox.hrh"
+#include "atconfigurationappguiprocesscontainer.h"
+#include "atconfigurationappguiappui.h"
+#include "atlog.h"
+
+// -----------------------------------------------------------------------------
+// CATConfigurationAppGuiProcessView::CATConfigurationAppGuiProcessView()
+// First phase of Symbian two-phase construction.
+// -----------------------------------------------------------------------------
+//
+CATConfigurationAppGuiProcessView::CATConfigurationAppGuiProcessView() :
+    iLogOption( EATUseDefault )
+    {
+    LOGSTR1( "ATCU CATConfigurationAppGuiProcessView::CATConfigurationAppGuiProcessView()" );
+    
+    iNaviDecorator_ = NULL;
+    iProcessContainer = NULL;
+    }
+
+// -----------------------------------------------------------------------------
+// CATConfigurationAppGuiProcessView::~CATConfigurationAppGuiProcessView()
+// Destructor.
+// -----------------------------------------------------------------------------
+//
+CATConfigurationAppGuiProcessView::~CATConfigurationAppGuiProcessView()
+    {
+    LOGSTR1( "ATCU CATConfigurationAppGuiProcessView::~CATConfigurationAppGuiProcessView()" );
+    
+    if ( iNaviDecorator_ != NULL )
+        {
+        delete iNaviDecorator_;
+        iNaviDecorator_ = NULL;
+        }
+    delete iProcessContainer;
+    iProcessContainer = NULL;
+    
+    // Closes the array and frees all memory allocated to the array.
+    iLibraries.Close();
+    }
+
+// -----------------------------------------------------------------------------
+// CATConfigurationAppGuiProcessView::NewL()
+// Symbian two-phase constructor.
+// -----------------------------------------------------------------------------
+//
+CATConfigurationAppGuiProcessView* CATConfigurationAppGuiProcessView::NewL()
+    {
+    LOGSTR1( "ATCU CATConfigurationAppGuiProcessView::NewL()" );
+    
+    CATConfigurationAppGuiProcessView* self = CATConfigurationAppGuiProcessView::NewLC();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CATConfigurationAppGuiProcessView::NewLC()
+// Symbian two-phase constructor.
+// -----------------------------------------------------------------------------
+//
+CATConfigurationAppGuiProcessView* CATConfigurationAppGuiProcessView::NewLC()
+    {
+    LOGSTR1( "ATCU CATConfigurationAppGuiProcessView::NewLC()" );
+    
+    CATConfigurationAppGuiProcessView* self = new ( ELeave ) CATConfigurationAppGuiProcessView();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CATConfigurationAppGuiProcessView::ConstructL()
+// Second-phase constructor for view.
+// -----------------------------------------------------------------------------
+//
+void CATConfigurationAppGuiProcessView::ConstructL()
+    {
+    LOGSTR1( "ATCU CATConfigurationAppGuiProcessView::ConstructL()" );
+    
+    BaseConstructL( R_ATCONFIGURATION_APP_GUI_PROCESSCONTAINER_VIEW );
+    }
+
+// -----------------------------------------------------------------------------
+// CATConfigurationAppGuiProcessView::Id()
+// Returns the UID for this view.
+// -----------------------------------------------------------------------------
+//
+TUid CATConfigurationAppGuiProcessView::Id() const
+    {
+    LOGSTR1( "ATCU CATConfigurationAppGuiProcessView::Id()" );
+    
+    return TUid::Uid( EATConfigurationAppGuiProcessViewId );
+    }
+
+// -----------------------------------------------------------------------------
+// CATConfigurationAppGuiProcessView::HandleCommandL()
+// Handle a command for this view.
+// -----------------------------------------------------------------------------
+//
+void CATConfigurationAppGuiProcessView::HandleCommandL( TInt aCommand )
+    {
+    LOGSTR1( "ATCU CATConfigurationAppGuiProcessView::HandleCommandL()" );
+    
+    // [[[ begin generated region: do not modify [Generated Code]
+    TBool commandHandled = EFalse;
+    switch ( aCommand )
+        { // Code to dispatch to the AknView's menu and CBA commands is generated here
+        case EATConfigurationAppGuiProcessView_librariesMenuItemCommand:
+        	RunListQueryL();
+            commandHandled = ETrue;
+            break;
+        case EAknSoftkeyBack:
+            {
+            AppUi()->ActivateLocalViewL( TUid::Uid( EATConfigurationAppGuiListBoxViewId ) );
+            commandHandled = ETrue;
+            break;
+            }
+        case EATConfigurationAppGuiProcessViewSettingsMenuItemCommand:
+            {
+            AppUi()->ActivateLocalViewL( TUid::Uid( EATConfigurationAppGuiSettingItemListViewId ),
+                    TUid::Uid( EATConfigurationAppGuiProcessViewId ), KNullDesC8 );
+            commandHandled = ETrue;
+            break;
+            }
+        case EATConfigurationAppGuiProcessViewEXTILogOption:
+            {
+            iLogOption = EATLogToXti;
+            commandHandled = ETrue;
+            break;
+            }
+        case EATConfigurationAppGuiProcessViewES60LogOption:
+            {
+            iLogOption = EATLogToFile;
+            commandHandled = ETrue;
+            break;
+            }
+        case EATConfigurationAppGuiProcessViewENoneLogOption:
+            {
+            iLogOption = EATLoggingOff;
+            commandHandled = ETrue;
+            break;
+            }
+        case EATConfigurationAppGuiProcessViewStart_subtestMenuItemCommand:
+            {
+            CATConfigurationAppGuiAppUi* appUi = ( CATConfigurationAppGuiAppUi* )iEikonEnv->AppUi();
+            appUi->SetProcessSubTestStartL( iProcessId );
+            SetupStatusPaneL();
+            if ( iProcessContainer )
+                {
+                iProcessContainer->UpdateViewL();
+                }
+            break;
+            }
+        case EATConfigurationAppGuiProcessViewStop_subtestMenuItemCommand:
+            {
+            CATConfigurationAppGuiAppUi* appUi = ( CATConfigurationAppGuiAppUi* )iEikonEnv->AppUi();
+            appUi->SetProcessSubTestStopL( iProcessId );
+            SetupStatusPaneL();
+            if ( iProcessContainer )
+                {
+                iProcessContainer->UpdateViewL();
+                }
+            break;
+            }
+        default:
+            break;
+        }
+        
+    if ( !commandHandled ) 
+        {
+
+        if ( aCommand == EAknSoftkeyBack || 
+             aCommand == EATConfigurationAppGuiProcessViewExitMenuItemCommand )
+            {
+            AppUi()->HandleCommandL( EEikCmdExit );
+            }
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CATConfigurationAppGuiProcessView::DynInitMenuPaneL()
+// Handles dynamically dimming the menu items.
+// -----------------------------------------------------------------------------
+//
+void CATConfigurationAppGuiProcessView::DynInitMenuPaneL( TInt aResourceId, 
+	CEikMenuPane* aMenuPane )
+    {
+    LOGSTR1( "ATCU CATConfigurationAppGuiProcessView::DynInitMenuPaneL()" );
+    
+    if ( aResourceId == R_ATCONFIGURATION_APP_GUI_PROCESS_MENU_PANE )
+        {
+        if( iProcessContainer->GetCurrentItemIndex() < 0 ) 
+            {
+            aMenuPane->SetItemDimmed( EATConfigurationAppGuiProcessViewStart_subtestMenuItemCommand, ETrue );
+            aMenuPane->SetItemDimmed( EATConfigurationAppGuiProcessViewStop_subtestMenuItemCommand, ETrue );
+            aMenuPane->SetItemDimmed( EATConfigurationAppGuiProcessView_librariesMenuItemCommand, ETrue );
+            aMenuPane->SetItemDimmed( EATConfigurationAppGuiProcessViewSet_logging_modeMenuItemCommand, ETrue );
+            } 
+        else {
+            CATConfigurationAppGuiAppUi* appUi = ( CATConfigurationAppGuiAppUi* )iEikonEnv->AppUi();
+            TInt subTest = appUi->IsSubTestRunning( iProcessId );
+            if ( subTest > KErrNotFound )
+                {
+                aMenuPane->SetItemDimmed( EATConfigurationAppGuiProcessViewStart_subtestMenuItemCommand, ETrue );
+                aMenuPane->SetItemDimmed( EATConfigurationAppGuiProcessViewStop_subtestMenuItemCommand, EFalse );
+                }
+            else
+                {
+                aMenuPane->SetItemDimmed( EATConfigurationAppGuiProcessViewStart_subtestMenuItemCommand, EFalse );
+                aMenuPane->SetItemDimmed( EATConfigurationAppGuiProcessViewStop_subtestMenuItemCommand, ETrue );
+                }
+
+            aMenuPane->SetItemDimmed( EATConfigurationAppGuiProcessView_librariesMenuItemCommand, EFalse );
+            aMenuPane->SetItemDimmed( EATConfigurationAppGuiProcessViewSet_logging_modeMenuItemCommand, ETrue );
+            aMenuPane->SetItemDimmed( EATConfigurationAppGuiProcessViewHelpMenuItemCommand, ETrue );
+            aMenuPane->SetItemDimmed( EATConfigurationAppGuiProcessViewSettingsMenuItemCommand, ETrue );
+            }
+        }
+        
+    if ( aResourceId == R_ATCONFIGURATION_APP_GUI_RADIOBUTTON_MENUPANE )
+        {
+        if ( iLogOption == EATUseDefault )
+            aMenuPane->SetItemButtonState( EATConfigurationAppGuiProcessViewEXTILogOption, 
+                                           EEikMenuItemSymbolOn );
+        else if ( iLogOption == EATLogToFile )
+            aMenuPane->SetItemButtonState( EATConfigurationAppGuiProcessViewES60LogOption, 
+                                           EEikMenuItemSymbolOn );
+        else if ( iLogOption == EATLogToXti )
+            aMenuPane->SetItemButtonState( EATConfigurationAppGuiProcessViewEXTILogOption, 
+                                           EEikMenuItemSymbolOn );
+        else if ( iLogOption == EATLoggingOff )
+            aMenuPane->SetItemButtonState( EATConfigurationAppGuiProcessViewENoneLogOption, 
+                                           EEikMenuItemSymbolOn );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CATConfigurationAppGuiProcessView::DoActivateL()
+// Handles user actions during activation of the view.
+// -----------------------------------------------------------------------------
+//
+void CATConfigurationAppGuiProcessView::DoActivateL( 
+    const TVwsViewId& /*aPrevViewId*/, TUid /*aCustomMessageId*/,
+    const TDesC8& /*aCustomMessage*/ )
+    {
+    LOGSTR1( "ATCU CATConfigurationAppGuiProcessView::DoActivateL()" );
+    
+    CATConfigurationAppGuiAppUi* appUi = ( CATConfigurationAppGuiAppUi* )AppUi();
+    iProcessId = appUi->GetCurrentProcessId();
+    iProcessStartTime = appUi->GetCurrentProcessStartTime();
+
+    SetupStatusPaneL();
+
+    if ( iProcessContainer == NULL )
+        {
+        iProcessContainer = CreateContainerL();
+        iProcessContainer->SetMopParent( this );
+        AppUi()->AddToStackL( *this, iProcessContainer );
+        // For supporting MSK context menu
+        MenuBar()->SetContextMenuTitleResourceId( R_ATCONFIGURATION_PROCESS_OPTIONS_MENU );
+        } 
+    }
+
+// -----------------------------------------------------------------------------
+// CATConfigurationAppGuiProcessView::DoDeactivate()
+// Handles user actions during deactivation of the view.
+// -----------------------------------------------------------------------------
+//
+void CATConfigurationAppGuiProcessView::DoDeactivate()
+    {
+    LOGSTR1( "ATCU CATConfigurationAppGuiProcessView::DoDeactivate()" );
+    
+    TRAP_IGNORE( CleanupStatusPaneL() );
+
+    if ( iProcessContainer != NULL )
+        {
+        AppUi()->RemoveFromViewStack( *this, iProcessContainer );
+        delete iProcessContainer;
+        iProcessContainer = NULL;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CATConfigurationAppGuiProcessView::HandleStatusPaneSizeChange()
+// Handle status pane size change for this view.
+// -----------------------------------------------------------------------------
+//
+void CATConfigurationAppGuiProcessView::HandleStatusPaneSizeChange()
+    {
+    LOGSTR1( "ATCU CATConfigurationAppGuiProcessView::HandleStatusPaneSizeChange()" );
+    
+    CAknView::HandleStatusPaneSizeChange();
+
+    // This may fail, but we're not able to propagate exceptions here
+    TInt result;
+    TRAP( result, SetupStatusPaneL() ); 
+    }
+
+// -----------------------------------------------------------------------------
+// CATConfigurationAppGuiProcessView::SetupStatusPaneL()
+// -----------------------------------------------------------------------------
+//
+void CATConfigurationAppGuiProcessView::SetupStatusPaneL()
+    {
+    LOGSTR1( "ATCU CATConfigurationAppGuiProcessView::SetupStatusPaneL()" );
+    
+    // Reset the context pane
+    TUid contextPaneUid = TUid::Uid( EEikStatusPaneUidContext );
+    CEikStatusPaneBase::TPaneCapabilities subPaneContext = 
+        StatusPane()->PaneCapabilities( contextPaneUid );
+    if ( subPaneContext.IsPresent() && subPaneContext.IsAppOwned() )
+        {
+        CAknContextPane* context = static_cast< CAknContextPane* > ( 
+            StatusPane()->ControlL( contextPaneUid ) );
+        context->SetPictureToDefaultL();
+        }
+
+    // Setup the title pane
+    TUid titlePaneUid = TUid::Uid( EEikStatusPaneUidTitle );
+    CEikStatusPaneBase::TPaneCapabilities subPaneTitle = 
+        StatusPane()->PaneCapabilities( titlePaneUid );
+    if ( subPaneTitle.IsPresent() && subPaneTitle.IsAppOwned() )
+        {
+        CAknTitlePane* title = static_cast< CAknTitlePane* >( 
+            StatusPane()->ControlL( titlePaneUid ) );
+        //TResourceReader reader;
+        //iEikonEnv->CreateResourceReaderLC( reader, R_ATCONFIGURATION_APP_GUI_TITLE_RESOURCE );
+        //title->SetFromResourceL( reader );
+        //CleanupStack::PopAndDestroy(); // reader internal state
+        
+        // Get process's name
+        RArray<TATProcessInfo> processes;
+        CATConfigurationAppGuiAppUi* appUi = ( CATConfigurationAppGuiAppUi* )iEikonEnv->AppUi();
+        appUi->StorageServer().GetProcessesL( processes );
+
+        for ( TInt find = 0 ; find < processes.Count() ; find++ )
+            {
+            TATProcessInfo processInfo = processes[ find ];
+            if ( processInfo.iProcessId == iProcessId )
+                {
+                HBufC* name = HBufC::NewLC( processInfo.iProcessName.Length() );
+                name->Des().Copy( processInfo.iProcessName );
+                title->SetTextL( name->Des(), ETrue );
+                CleanupStack::PopAndDestroy( name );
+                break;
+                }
+            }
+		// Closes the array and frees all memory allocated to the array.
+        processes.Close();
+        }
+        
+    // Set the navi pane content
+    TUid naviPaneUid = TUid::Uid( EEikStatusPaneUidNavi );
+    CEikStatusPaneBase::TPaneCapabilities subPaneNavi = 
+        StatusPane()->PaneCapabilities( naviPaneUid );
+    if ( subPaneNavi.IsPresent() && subPaneNavi.IsAppOwned() )
+        {
+        CAknNavigationControlContainer* naviPane = 
+            static_cast< CAknNavigationControlContainer* >( 
+                StatusPane()->ControlL( naviPaneUid ) );
+        if ( iNaviDecorator_ != NULL )
+            {
+            delete iNaviDecorator_;
+            iNaviDecorator_ = NULL;
+            }
+        // Check if subtest is running
+        CATConfigurationAppGuiAppUi* appUi = ( CATConfigurationAppGuiAppUi* )iEikonEnv->AppUi();
+        TInt subTest = appUi->IsSubTestRunning( iProcessId );
+        if ( subTest > KErrNotFound )
+            {
+            HBufC* labelText = StringLoader::LoadLC( R_ATCONFIGURATION_APP_GUI_NAVI_TEXT1 );
+            iNaviDecorator_ = naviPane->CreateNavigationLabelL( labelText->Des() );  
+            CleanupStack::PopAndDestroy( labelText );
+            }
+        else
+            {
+            iNaviDecorator_ = naviPane->CreateNavigationLabelL( KNullDesC ); 
+            }
+        naviPane->PushL( *iNaviDecorator_ );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CATConfigurationAppGuiProcessView::CleanupStatusPaneL()
+// -----------------------------------------------------------------------------
+//
+void CATConfigurationAppGuiProcessView::CleanupStatusPaneL()
+    {
+    LOGSTR1( "ATCU CATConfigurationAppGuiProcessView::CleanupStatusPaneL()" );
+    
+    // Reset the navi pane 
+    TUid naviPaneUid = TUid::Uid( EEikStatusPaneUidNavi );
+    CEikStatusPaneBase::TPaneCapabilities subPaneNavi = 
+        StatusPane()->PaneCapabilities( naviPaneUid );
+    if ( subPaneNavi.IsPresent() && subPaneNavi.IsAppOwned() )
+        {
+        CAknNavigationControlContainer* naviPane = 
+            static_cast< CAknNavigationControlContainer* >( 
+                StatusPane()->ControlL( naviPaneUid ) );
+        if ( iNaviDecorator_ != NULL )
+            {
+            naviPane->Pop( iNaviDecorator_ );
+            delete iNaviDecorator_;
+            iNaviDecorator_ = NULL;
+            }
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CATConfigurationAppGuiProcessView::CreateContainerL()
+// Creates the top-level container for the view.
+// -----------------------------------------------------------------------------
+//
+CATConfigurationAppGuiProcessContainer* CATConfigurationAppGuiProcessView::CreateContainerL()
+    {
+    LOGSTR1( "ATCU CATConfigurationAppGuiProcessView::CreateContainerL()" );
+    
+    return CATConfigurationAppGuiProcessContainer::NewL( 
+    		ClientRect(), this, this, iProcessId, iProcessStartTime );
+    }
+
+// -----------------------------------------------------------------------------
+// CATConfigurationAppGuiProcessView::CreateListQuery1ItemL()
+// Create a list box item with the given column values.
+// -----------------------------------------------------------------------------
+//
+void CATConfigurationAppGuiProcessView::CreateListQuery1ItemL( 
+    TDes& aBuffer, const TDesC& aMainText )
+    {
+    LOGSTR1( "ATCU CATConfigurationAppGuiProcessView::CreateListQuery1ItemL()" );
+    
+    _LIT ( KStringHeader, "%S" );
+
+    aBuffer.Format( KStringHeader(), &aMainText );
+    }
+
+// -----------------------------------------------------------------------------
+// CATConfigurationAppGuiProcessView::CreateListQuery1ResourceArrayItemL()
+// Add an item to the list by reading the text items from resource.
+// -----------------------------------------------------------------------------
+//
+void CATConfigurationAppGuiProcessView::CreateListQuery1ResourceArrayItemL( 
+        TDes& aBuffer, 
+        TInt aResourceId )
+    {
+    LOGSTR1( "ATCU CATConfigurationAppGuiProcessView::CreateListQuery1ResourceArrayItemL()" );
+    
+    CDesCArray* array = CCoeEnv::Static()->ReadDesCArrayResourceL( aResourceId );
+    CleanupStack::PushL( array );
+    CreateListQuery1ItemL( aBuffer, ( *array ) [ 0 ] );
+    CleanupStack::PopAndDestroy( array );
+    }
+
+// -----------------------------------------------------------------------------
+// CATConfigurationAppGuiProcessView::InitializeListQuery1LC()
+// Initialize contents of the popup item list.
+// -----------------------------------------------------------------------------
+//
+CDesCArray* CATConfigurationAppGuiProcessView::InitializeListQuery1LC()
+    {
+    LOGSTR1( "ATCU CATConfigurationAppGuiProcessView::InitializeListQuery1LC()" );
+    
+    ( ( CATConfigurationAppGuiAppUi* )AppUi() )->StorageServer().GetLoadedDllsL( iProcessId, iLibraries );
+    const int KNumItems = iLibraries.Count();
+    CDesCArray* itemArray = new ( ELeave ) CDesCArrayFlat( KNumItems ? KNumItems : 1 );
+    CleanupStack::PushL( itemArray );
+    // This is intended to be large enough, but if you get 
+    // a USER 11 panic, consider reducing string sizes.
+
+    for ( TInt count = 0 ; count < KNumItems ; count++ )
+        {
+        TBuf<512> des;
+        TBuf<KMaxLibraryName> library;
+        library.Copy( iLibraries[ count ] );
+        CreateListQuery1ItemL( des, library );
+        itemArray->AppendL( des );
+        }
+    
+    // Empties the array, so that it is ready to be reused.
+    iLibraries.Reset();
+    return itemArray;
+    }
+
+// -----------------------------------------------------------------------------
+// CATConfigurationAppGuiProcessView::SetupListQuery1IconsLC()
+// Set up the list query's icon array.
+// -----------------------------------------------------------------------------
+//
+CArrayPtr< CGulIcon >* CATConfigurationAppGuiProcessView::SetupListQuery1IconsLC()
+    {
+    LOGSTR1( "ATCU CATConfigurationAppGuiProcessView::SetupListQuery1IconsLC()" );
+    
+    CArrayPtr< CGulIcon >* icons = NULL;
+    return icons;
+    }
+
+// -----------------------------------------------------------------------------
+// CATConfigurationAppGuiProcessView::RunListQueryL()
+// Show the popup list query dialog for listQuery.
+// -----------------------------------------------------------------------------
+//
+TInt CATConfigurationAppGuiProcessView::RunListQueryL( 
+    const TDesC* aOverrideText, CDesCArray* aOverrideItemArray,
+    CArrayPtr< CGulIcon >* aOverrideIconArray )
+    {
+    LOGSTR1( "ATCU CATConfigurationAppGuiProcessView::RunListQueryL()" );
+    
+    TInt index = 0;
+    CAknListQueryDialog* queryDialog = NULL;
+    queryDialog = new ( ELeave ) CAknListQueryDialog( &index );
+    CleanupStack::PushL( queryDialog );
+
+    queryDialog->PrepareLC( R_ATCONFIGURATION_APP_GUI_LIST_QUERY1 );
+    if ( aOverrideText != NULL )
+        {
+        queryDialog->SetHeaderTextL( *aOverrideText );
+        }
+        
+    // Initialize list items
+    CDesCArray* itemArray = NULL;
+
+    if ( aOverrideItemArray != NULL ) 
+        {
+        CleanupStack::PushL( aOverrideItemArray );
+        itemArray = aOverrideItemArray;
+        }
+    else
+        {
+        itemArray = InitializeListQuery1LC();
+        }
+        
+    queryDialog->SetItemTextArray( itemArray );
+    queryDialog->SetOwnershipType( ELbmOwnsItemArray );
+    CleanupStack::Pop( itemArray );
+
+    // Initialize list icons
+    CArrayPtr< CGulIcon >* iconArray = NULL;
+
+    if ( aOverrideIconArray != NULL )
+        {
+        CleanupStack::PushL( aOverrideIconArray );
+        iconArray = aOverrideIconArray;
+        }
+    else
+        {
+        iconArray = SetupListQuery1IconsLC();
+        }
+        
+    if ( iconArray != NULL ) 
+        {
+        queryDialog->SetIconArrayL( iconArray ); // Passes ownership
+        CleanupStack::Pop( iconArray );
+        }
+    // Enable text scrolling
+    queryDialog->ListControl()->Listbox()->ItemDrawer()->ColumnData()->EnableMarqueeL( ETrue );
+    // Run dialog
+    TInt result = queryDialog->RunLD();
+
+    // Clean up
+    CleanupStack::Pop( queryDialog );
+
+    return result == 0 ? -1 : index;
+    }
+
+// End of File