uifw/AvKon/aknhlist/src/aknsinglecolumnstyletreelist.cpp
changeset 0 2f259fa3e83a
child 15 08e69e956a8c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/uifw/AvKon/aknhlist/src/aknsinglecolumnstyletreelist.cpp	Tue Feb 02 01:00:49 2010 +0200
@@ -0,0 +1,780 @@
+/*
+* Copyright (c) 2007-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:  Implementation for CAknSingleColumnStyleTreeList class.
+*
+*/
+
+
+#include <AknDef.h>
+#include <AknUtils.h>
+#include <aknlayoutscalable_avkon.cdl.h>
+
+#include <AknTasHook.h> // for testability hooks
+#include "aknhlistlib.h"
+#include "akntree.h"
+#include "akntreelistview.h"
+#include "akntreelistinternalconstants.h"
+#include "aknsinglecolumnstylecoredatarow.h"
+#include "aknsinglecolumnstylesimpledatarow.h"
+#include "aknsinglecolumnstylesubtitlerow.h"
+#include "aknsinglecolumnstyletreelist.h"
+
+
+/** Set of flags that are always set on for hierarchical column list. */
+const TInt KMandatoryListFlags = NULL;
+
+/** Set of flags that cannot be set for hierarchical column list. */
+const TInt KRestrictedListFlags = NULL;
+
+/** Set of default flags for hieararchical column list. */
+const TInt KDefaultListFlags = KAknTreeListNoStructureLines;
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CAknSingleColumnStyleTreeList* CAknSingleColumnStyleTreeList::NewL()
+    {
+    CAknSingleColumnStyleTreeList* self
+        = CAknSingleColumnStyleTreeList::NewLC();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CAknSingleColumnStyleTreeList* CAknSingleColumnStyleTreeList::NewL(
+    const CCoeControl& aContainer )
+    {
+    CAknSingleColumnStyleTreeList* self
+        = CAknSingleColumnStyleTreeList::NewLC( aContainer );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CAknSingleColumnStyleTreeList* CAknSingleColumnStyleTreeList::NewLC()
+    {
+    CAknSingleColumnStyleTreeList* self =
+        new( ELeave ) CAknSingleColumnStyleTreeList;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    AKNTASHOOK_ADDL( self, "CAknSingleColumnStyleTreeList" );
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// Two-phased constructor.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CAknSingleColumnStyleTreeList* CAknSingleColumnStyleTreeList::NewLC(
+    const CCoeControl& aContainer )
+    {
+    CAknSingleColumnStyleTreeList* self =
+        new( ELeave ) CAknSingleColumnStyleTreeList;
+    CleanupStack::PushL( self );
+    self->ConstructL( aContainer );
+    AKNTASHOOK_ADDL( self, "CAknSingleColumnStyleTreeList" );
+    return self;
+    }
+
+
+// ---------------------------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+CAknSingleColumnStyleTreeList::~CAknSingleColumnStyleTreeList()
+    {
+    AKNTASHOOK_REMOVE();
+    }
+
+
+// ---------------------------------------------------------------------------
+// Creates simple data row instance and adds it to the specified node.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TAknTreeItemID CAknSingleColumnStyleTreeList::AddSimpleDataRowL(
+    TAknTreeItemID aParent, const TDesC& aText, TUint32 aFlags,
+    TBool aDrawNow )
+    {
+    // Get flags relevant to simple data row.
+    TUint32 flags = NULL;
+    if ( aFlags & EPersistent )
+        {
+        flags |= CAknTreeLeaf::EPersistent;
+        }
+    if ( aFlags & EMarked )
+        {
+        flags |= CAknTreeLeaf::EMarked;
+        }
+    if ( aFlags & EMarkingDisabled )
+        {
+        flags |= CAknTreeLeaf::EMarkingDisabled;
+        }
+
+    CAknSingleColumnStyleSimpleDataRow* row =
+        CAknSingleColumnStyleSimpleDataRow::NewLC( aText, flags );
+    TAknTreeItemID id = Tree().AddItemL( row, aParent, aDrawNow );
+    CleanupStack::Pop( row );
+    return id;
+    }
+
+
+// ---------------------------------------------------------------------------
+// Creates core data row instance with two text columns and adds it to the
+// specified parent node.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TAknTreeItemID CAknSingleColumnStyleTreeList::AddCoreDataRowL(
+    TAknTreeItemID aParent, const TDesC& aFirstColumn,
+    const TDesC& aSecondColumn, TUint32 aFlags, TBool aDrawNow )
+    {
+    // Get flags relevant to core data row.
+    TUint32 flags = NULL;
+    if ( aFlags & EPersistent )
+        {
+        flags |= CAknTreeLeaf::EPersistent;
+        }
+    if ( aFlags & EMarked )
+        {
+        flags |= CAknTreeLeaf::EMarked;
+        }
+    if ( aFlags & EMarkingDisabled )
+        {
+        flags |= CAknTreeLeaf::EMarkingDisabled;
+        }
+    if ( aFlags & EEmphasis )
+        {
+        flags |= CAknSingleColumnStyleCoreDataRow::EEmphasis;
+        }
+
+    CAknSingleColumnStyleCoreDataRow* row =
+        CAknSingleColumnStyleCoreDataRow::NewLC( aFirstColumn,
+            aSecondColumn, flags );
+    TAknTreeItemID id = Tree().AddItemL( row, aParent, aDrawNow );
+    CleanupStack::Pop( row );
+    return id;
+    }
+
+
+// ---------------------------------------------------------------------------
+// Creates core data row instance with three text columns and adds it to the
+// specified parent node.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TAknTreeItemID CAknSingleColumnStyleTreeList::AddCoreDataRowL(
+    TAknTreeItemID aParent, const TDesC& aFirstColumn,
+    const TDesC& aSecondColumn, const TDesC& aThirdColumn, TUint32 aFlags,
+    TBool aDrawNow )
+    {
+    // Get flags relevant to core data row.
+    TUint32 flags = NULL;
+    if ( aFlags & EPersistent )
+        {
+        flags |= CAknTreeLeaf::EPersistent;
+        }
+    if ( aFlags & EMarked )
+        {
+        flags |= CAknTreeLeaf::EMarked;
+        }
+    if ( aFlags & EMarkingDisabled )
+        {
+        flags |= CAknTreeLeaf::EMarkingDisabled;
+        }
+    if ( aFlags & EEmphasis )
+        {
+        flags |= CAknSingleColumnStyleCoreDataRow::EEmphasis;
+        }
+
+    CAknSingleColumnStyleCoreDataRow* row =
+        CAknSingleColumnStyleCoreDataRow::NewLC( aFirstColumn,
+            aSecondColumn, aThirdColumn, flags );
+    TAknTreeItemID id = Tree().AddItemL( row, aParent, aDrawNow );
+    CleanupStack::Pop( row );
+    return id;
+    }
+
+
+// ---------------------------------------------------------------------------
+// Creates subtitle row instance and adds it to the specified node.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TAknTreeItemID CAknSingleColumnStyleTreeList::AddSubtitleRowL(
+    TAknTreeItemID aParent, const TDesC& aText, TUint32 aFlags,
+    TBool aDrawNow )
+    {
+    // Get flags relevant to subtitle row.
+    TUint32 flags = NULL;
+    if ( aFlags & EPersistent )
+        {
+        flags |= CAknTreeNode::EPersistent;
+        }
+    if ( aFlags & EMarked )
+        {
+        flags |= CAknTreeNode::EMarked;
+        }
+    if ( aFlags & EMarkingDisabled )
+        {
+        flags |= CAknTreeNode::EMarkingDisabled;
+        }
+    if ( aFlags & EExpanded )
+        {
+        flags |= CAknTreeNode::EExpanded;
+        }
+    if ( aFlags & ENonEmpty )
+        {
+        flags |= CAknTreeNode::ENonEmpty;
+        }
+
+    CAknSingleColumnStyleSubtitleRow* row =
+        CAknSingleColumnStyleSubtitleRow::NewLC( aText, flags );
+    TAknTreeItemID id = Tree().AddItemL( row, aParent, aDrawNow );
+    CleanupStack::Pop( row );
+    return id;
+    }
+
+
+// ---------------------------------------------------------------------------
+// Returns the text field of the specified list item.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const TDesC& CAknSingleColumnStyleTreeList::Text(
+    TAknTreeItemID aItem ) const
+    {
+    return Text( aItem, 0 );
+    }
+    
+
+// ---------------------------------------------------------------------------
+// Returns the specified text column of specified list item. Null descriptor
+// is returned if column with non-zero index is requested from simple data
+// row or subtitle row.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const TDesC& CAknSingleColumnStyleTreeList::Text(
+    TAknTreeItemID aItem, TInt aColumnIndex ) const
+    {
+    CAknTreeItem* item = Tree().Item( aItem );
+    TInt type = item->Type();
+
+    if ( type == AknTreeList::KSingleColumnStyleCoreDataRow )
+        {
+        CAknSingleColumnStyleCoreDataRow* coreDataRow =
+            static_cast<CAknSingleColumnStyleCoreDataRow*>( item );
+        return coreDataRow->Text( aColumnIndex );
+        }
+
+    else if ( type == AknTreeList::KSingleColumnStyleSimpleDataRow &&
+        !aColumnIndex )
+        {
+        CAknSingleColumnStyleSimpleDataRow* simpleDataRow =
+            static_cast<CAknSingleColumnStyleSimpleDataRow*>( item );
+        return simpleDataRow->Text();
+        }
+
+    else if ( type == AknTreeList::KSingleColumnStyleSubtitleRow &&
+        !aColumnIndex )
+        {
+        CAknSingleColumnStyleSubtitleRow* subtitleRow = 
+            static_cast<CAknSingleColumnStyleSubtitleRow*>( item );
+        return subtitleRow->Text();
+        }
+
+    else
+        {
+        return KNullDesC;
+        }
+    }
+
+
+// ---------------------------------------------------------------------------
+// Set text for specified item.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CAknSingleColumnStyleTreeList::SetTextL( TAknTreeItemID aItem,
+    const TDesC& aText, TBool aDrawNow )
+    {
+    SetTextL( aItem, aText, 0, aDrawNow );
+    }
+
+
+// ---------------------------------------------------------------------------
+// Set text for specified column of specified list item.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CAknSingleColumnStyleTreeList::SetTextL( TAknTreeItemID aItem,
+    const TDesC& aText, TInt aColumnIndex, TBool aDrawNow )
+    {
+    CAknTreeItem* item = Tree().Item( aItem );
+    TInt type = item->Type();
+
+    if ( type == AknTreeList::KSingleColumnStyleCoreDataRow )
+        {
+        CAknSingleColumnStyleCoreDataRow* coreDataRow =
+            static_cast<CAknSingleColumnStyleCoreDataRow*>( item );
+        coreDataRow->SetTextL( aText, aColumnIndex, aDrawNow );
+        }
+
+    else if ( type == AknTreeList::KSingleColumnStyleSimpleDataRow )
+        {
+        if ( !aColumnIndex )
+            {
+            CAknSingleColumnStyleSimpleDataRow* simpleDataRow =
+                static_cast<CAknSingleColumnStyleSimpleDataRow*>( item );
+            simpleDataRow->SetTextL( aText, aDrawNow );
+            }
+        else
+            {
+            User::Leave( KErrNotFound );
+            }
+        }
+
+    else if ( type == AknTreeList::KSingleColumnStyleSubtitleRow )
+        {
+        if ( !aColumnIndex )
+            {
+            CAknSingleColumnStyleSubtitleRow* subtitleRow =
+                static_cast<CAknSingleColumnStyleSubtitleRow*>( item );
+            subtitleRow->SetTextL( aText, aDrawNow );
+            }
+        else
+            {
+            User::Leave( KErrNotFound );
+            }
+        }
+
+    else
+        {
+        // Invalid item type.
+        Panic( EAknHListPanicInvalidItemType );
+        }
+    }
+
+
+// ---------------------------------------------------------------------------
+// Checks whether the specified core data row is emphasised.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool CAknSingleColumnStyleTreeList::IsEmphasised(
+    TAknTreeItemID aItem ) const
+    {
+    TBool emphasis = EFalse;
+    CAknTreeItem* item = Tree().Item( aItem );
+    if ( item->Type() == AknTreeList::KSingleColumnStyleCoreDataRow )
+        {
+        CAknSingleColumnStyleCoreDataRow* coreDataRow =
+            static_cast<CAknSingleColumnStyleCoreDataRow*>( item );
+        emphasis = coreDataRow->IsEmphasised();
+        }
+    return emphasis;
+    }
+
+
+// ---------------------------------------------------------------------------
+// Set emphasis for core data row.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CAknSingleColumnStyleTreeList::SetEmphasis(
+    TAknTreeItemID aItem, TBool aEmphasis, TBool aDrawNow )
+    {
+    CAknTreeItem* item = Tree().Item( aItem );
+    if ( item->Type() == AknTreeList::KSingleColumnStyleCoreDataRow )
+        {
+        CAknSingleColumnStyleCoreDataRow* coreDataRow =
+            static_cast<CAknSingleColumnStyleCoreDataRow*>( item );
+        coreDataRow->SetEmphasis( aEmphasis, aDrawNow );
+        }
+    else
+        {
+        // Invalid item type. Set emphasis supported only for core data rows.
+        Panic( EAknHListPanicInvalidItemType );
+        }
+    }
+
+
+// ---------------------------------------------------------------------------
+// Checks whether the third text column is enabled.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool CAknSingleColumnStyleTreeList::IsThirdColumnEnabled(
+    TAknTreeItemID aItem ) const
+    {
+    TBool thirdColumn = EFalse;
+    CAknTreeItem* item = Tree().Item( aItem );
+    if ( item->Type() == AknTreeList::KSingleColumnStyleCoreDataRow )
+        {
+        CAknSingleColumnStyleCoreDataRow* coreDataRow =
+            static_cast<CAknSingleColumnStyleCoreDataRow*>( item );
+        thirdColumn = coreDataRow->IsThirdColumnEnabled();
+        }
+    return thirdColumn;
+    }
+
+
+// ---------------------------------------------------------------------------
+// Enables or disables third text column for specified item.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CAknSingleColumnStyleTreeList::EnableThirdColumn(
+    TAknTreeItemID aItem, TBool aEnable, TBool aDrawNow )
+    {
+    CAknTreeItem* item = Tree().Item( aItem );
+    if ( item->Type() == AknTreeList::KSingleColumnStyleCoreDataRow )
+        {
+        CAknSingleColumnStyleCoreDataRow* coreDataRow =
+            static_cast<CAknSingleColumnStyleCoreDataRow*>( item );
+        coreDataRow->EnableThirdColumn( aEnable, aDrawNow );
+        }
+    else
+        {
+        // Invalid item type.
+        Panic( EAknHListPanicInvalidItemType );
+        }
+    }
+
+
+// ---------------------------------------------------------------------------
+// Get icon ID set for specified item.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt CAknSingleColumnStyleTreeList::Icon( TAknTreeItemID aItem,
+    TIconType aType ) const
+    {
+    CAknTreeItem* item = Tree().Item( aItem );
+    if ( item->Type() == AknTreeList::KSingleColumnStyleCoreDataRow )
+        {
+        CAknSingleColumnStyleCoreDataRow::TIconType type;
+        switch ( aType )
+            {
+            case ELeaf:
+                type = CAknSingleColumnStyleCoreDataRow::EIcon;
+                break;
+            case EHighlightedLeaf:
+                type = CAknSingleColumnStyleCoreDataRow::EHighlightedIcon;
+                break;
+            case EOptionalIcon1:
+                type = CAknSingleColumnStyleCoreDataRow::EOptIcon1;
+                break;
+            case EHighlightedOptionalIcon1:
+                type = CAknSingleColumnStyleCoreDataRow::EHighlightedOptIcon1;
+                break;
+            case EOptionalIcon2:
+                type = CAknSingleColumnStyleCoreDataRow::EOptIcon2;
+                break;
+            case EHighlightedOptionalIcon2:
+                type = CAknSingleColumnStyleCoreDataRow::EHighlightedOptIcon2;
+                break;
+            default:
+                // Invalid icon type for core data row.
+                return KErrNotFound;
+            }
+        return static_cast<CAknSingleColumnStyleCoreDataRow*>( item )->
+            Icon( type );
+        }
+
+    else if ( item->Type() == AknTreeList::KSingleColumnStyleSimpleDataRow )
+        {
+        CAknSingleColumnStyleSimpleDataRow::TIconType type;
+        switch ( aType )
+            {
+            case ELeaf:
+                type = CAknSingleColumnStyleSimpleDataRow::EIcon;
+                break;
+            case EHighlightedLeaf:
+                type = CAknSingleColumnStyleSimpleDataRow::EHighlightedIcon;
+                break;
+            case EOptionalIcon1:
+                type = CAknSingleColumnStyleSimpleDataRow::EOptIcon;
+                break;
+            case EHighlightedOptionalIcon1:
+                type = CAknSingleColumnStyleSimpleDataRow::EHighlightedOptIcon;
+                break;
+            default:
+                // Invalid icon type for simple data row.
+                return KErrNotFound;
+            }
+        return static_cast<CAknSingleColumnStyleSimpleDataRow*>( item )->
+            Icon( type );
+        }
+
+    else if ( item->Type() == AknTreeList::KSingleColumnStyleSubtitleRow )
+        {
+        CAknSingleColumnStyleSubtitleRow::TIconType type;
+        switch ( aType )
+            {
+            case EExpandedNode:
+                type = CAknSingleColumnStyleSubtitleRow::EExpandedIcon;
+                break;
+            case EHighlightedExpandedNode:
+                type = CAknSingleColumnStyleSubtitleRow::EHighlightedExpandedIcon;
+                break;
+            case ECollapsedNode:
+                type = CAknSingleColumnStyleSubtitleRow::ECollapsedIcon;
+                break;
+            case EHighlightedCollapsedNode:
+                type = CAknSingleColumnStyleSubtitleRow::EHighlightedCollapsedIcon;
+                break;
+            case EOptionalIcon1:
+                type = CAknSingleColumnStyleSubtitleRow::EOptIcon;
+                break;
+            case EHighlightedOptionalIcon1:
+                type = CAknSingleColumnStyleSubtitleRow::EHighlightedOptIcon;
+                break;
+            default:
+                // Invalid icon type for subtitle row.
+                return KErrNotFound;
+            }
+        return static_cast<CAknSingleColumnStyleSubtitleRow*>( item )->
+            Icon( type );
+        }
+
+    else
+        {
+        return KErrNotFound;
+        }
+    }
+
+
+// ---------------------------------------------------------------------------
+// Set icon for specified item.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CAknSingleColumnStyleTreeList::SetIcon(
+    const TAknTreeItemID aItem, const TIconType aType, const TInt aIconId,
+    const TBool aDrawNow )
+    {
+    CAknTreeItem* item = Tree().Item( aItem );
+    if ( item->Type() == AknTreeList::KSingleColumnStyleCoreDataRow )
+        {
+        CAknSingleColumnStyleCoreDataRow::TIconType type
+            = CAknSingleColumnStyleCoreDataRow::EIcon;
+        switch ( aType )
+            {
+            case ELeaf:
+                type = CAknSingleColumnStyleCoreDataRow::EIcon;
+                break;
+            case EHighlightedLeaf:
+                type = CAknSingleColumnStyleCoreDataRow::EHighlightedIcon;
+                break;
+            case EOptionalIcon1:
+                type = CAknSingleColumnStyleCoreDataRow::EOptIcon1;
+                break;
+            case EHighlightedOptionalIcon1:
+                type = CAknSingleColumnStyleCoreDataRow::EHighlightedOptIcon1;
+                break;
+            case EOptionalIcon2:
+                type = CAknSingleColumnStyleCoreDataRow::EOptIcon2;
+                break;
+            case EHighlightedOptionalIcon2:
+                type = CAknSingleColumnStyleCoreDataRow::EHighlightedOptIcon2;
+                break;
+            default:
+                // Invalid icon type for core data row.
+                Panic( EAknHListPanicInvalidItemType );
+                break;
+            }
+        static_cast<CAknSingleColumnStyleCoreDataRow*>( item )->
+            SetIcon( type, aIconId, aDrawNow );
+        }
+
+    else if ( item->Type() == AknTreeList::KSingleColumnStyleSimpleDataRow )
+        {
+        CAknSingleColumnStyleSimpleDataRow::TIconType type
+            = CAknSingleColumnStyleSimpleDataRow::EIcon;
+        switch ( aType )
+            {
+            case ELeaf:
+                type = CAknSingleColumnStyleSimpleDataRow::EIcon;
+                break;
+            case EHighlightedLeaf:
+                type  = CAknSingleColumnStyleSimpleDataRow::EHighlightedIcon;
+                break;
+            case EOptionalIcon1:
+                type = CAknSingleColumnStyleSimpleDataRow::EOptIcon;
+                break;
+            case EHighlightedOptionalIcon1:
+                type = CAknSingleColumnStyleSimpleDataRow::EHighlightedOptIcon;
+                break;
+            default:
+                // Invalid icon type for simple data row.
+                Panic( EAknHListPanicInvalidItemType );
+                break;
+            }
+        static_cast<CAknSingleColumnStyleSimpleDataRow*>( item )->
+            SetIcon( type, aIconId, aDrawNow );
+        }
+
+    else if ( item->Type() == AknTreeList::KSingleColumnStyleSubtitleRow )
+        {
+        CAknSingleColumnStyleSubtitleRow::TIconType type
+            = CAknSingleColumnStyleSubtitleRow::EExpandedIcon;
+        switch ( aType )
+            {
+            case EExpandedNode:
+                type = CAknSingleColumnStyleSubtitleRow::EExpandedIcon;
+                break;
+            case EHighlightedExpandedNode:
+                type = CAknSingleColumnStyleSubtitleRow::
+                    EHighlightedExpandedIcon;
+                break;
+            case ECollapsedNode:
+                type = CAknSingleColumnStyleSubtitleRow::ECollapsedIcon;
+                break;
+            case EHighlightedCollapsedNode:
+                type = CAknSingleColumnStyleSubtitleRow::
+                    EHighlightedCollapsedIcon;
+                break;
+            case EOptionalIcon1:
+                type = CAknSingleColumnStyleSubtitleRow::EOptIcon;
+                break;
+            case EHighlightedOptionalIcon1:
+                type = CAknSingleColumnStyleSubtitleRow::EHighlightedOptIcon;
+                break;
+            default:
+                // Invalid icon type for subtitle row.
+                Panic( EAknHListPanicInvalidItemType );
+                break;
+            }
+        static_cast<CAknSingleColumnStyleSubtitleRow*>( item )->
+            SetIcon( type, aIconId, aDrawNow );
+        }
+
+    else
+        {
+        // Invalid item type.
+        Panic( EAknHListPanicInvalidItemType );
+        }
+    }
+
+
+// ---------------------------------------------------------------------------
+// Returns the type of the specified item.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CAknSingleColumnStyleTreeList::TItemType
+    CAknSingleColumnStyleTreeList::ItemType( TAknTreeItemID aItem ) const
+    {
+    TItemType type = ENone;
+    if ( aItem != KAknTreeIIDNone )
+        {
+        CAknTreeItem* item = Tree().Item( aItem );
+        switch ( item->Type() )
+            {
+            case AknTreeList::KTree:
+                type = ETreeRoot;
+                break;
+            case AknTreeList::KSingleColumnStyleSimpleDataRow:
+                type = ESimpleDataRow;
+                break;
+            case AknTreeList::KSingleColumnStyleCoreDataRow:
+                type = ECoreDataRow;
+                break;
+            case AknTreeList::KSingleColumnStyleSubtitleRow:
+                type = ESubtitleRow;
+                break;
+            default:
+                break;
+            }
+        }
+    return type;
+    }
+
+
+// ---------------------------------------------------------------------------
+// From class CAknTreeList.
+// Sets flags for the list.
+// ---------------------------------------------------------------------------
+//
+void CAknSingleColumnStyleTreeList::SetFlags( TUint32 aFlags )
+    {
+    TUint32 flags = ( aFlags | KMandatoryListFlags ) & ~KRestrictedListFlags;
+    CAknTreeList::SetFlags( flags );
+    }
+
+
+// ---------------------------------------------------------------------------
+// From class CAknTreeList.
+// Handles resource changes.
+// ---------------------------------------------------------------------------
+//
+void CAknSingleColumnStyleTreeList::HandleResourceChange( TInt aType )
+    {
+    if ( aType == KEikDynamicLayoutVariantSwitch )
+        {
+        UpdateIndention();
+        }
+    CAknTreeList::HandleResourceChange( aType );
+    }
+
+
+
+// ---------------------------------------------------------------------------
+// Default C++ constructor.
+// ---------------------------------------------------------------------------
+//
+CAknSingleColumnStyleTreeList::CAknSingleColumnStyleTreeList()
+    {
+    }
+
+
+// ---------------------------------------------------------------------------
+// Second phase constructor.
+// ---------------------------------------------------------------------------
+//
+void CAknSingleColumnStyleTreeList::ConstructL()
+    {
+    BaseConstructL();
+    UpdateIndention();
+
+    // Set default flags on.
+    SetFlags( KDefaultListFlags );
+    }
+
+// ---------------------------------------------------------------------------
+// Second phase constructor.
+// ---------------------------------------------------------------------------
+//
+void CAknSingleColumnStyleTreeList::ConstructL( const CCoeControl& aContainer )
+    {
+    BaseConstructL( aContainer );
+    UpdateIndention();
+
+    // Sets default flags on.
+    SetFlags( KDefaultListFlags );
+    }
+
+
+// ---------------------------------------------------------------------------
+// Updates the width of single indentation step.
+// ---------------------------------------------------------------------------
+//
+void CAknSingleColumnStyleTreeList::UpdateIndention()
+    {
+    TAknLayoutRect layoutRect;
+    layoutRect.LayoutRect( Rect(),
+        AknLayoutScalable_Avkon::aid_indentation_list_msg().LayoutLine() );
+    TInt indentationWidth = layoutRect.Rect().Width();
+    View().SetIndentionWidth( indentationWidth );
+    }