--- /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 );
+ }