diff -r 000000000000 -r 2f259fa3e83a uifw/AvKon/aknhlist/src/aknsinglestyletreelist.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uifw/AvKon/aknhlist/src/aknsinglestyletreelist.cpp Tue Feb 02 01:00:49 2010 +0200 @@ -0,0 +1,465 @@ +/* +* Copyright (c) 2006, 2007 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 CAknSingleStyleTreeList class. +* +*/ + + +#include "aknsinglestyletreelist.h" +#include "aknsinglestyletreenode.h" +#include "aknsinglestyletreeleaf.h" +#include "aknsinglestyletreeordering.h" +#include "akntree.h" +#include "aknhlistlib.h" +#include "akntreelistinternalconstants.h" +#include "akntreelistview.h" + +#include // for testability hooks +/** Set of flags that cannot be set for single style hierarchical list. */ +const TInt KRestrictedListFlags = KAknTreeListMarkable; + + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// Two-phased constructor. +// --------------------------------------------------------------------------- +// +EXPORT_C CAknSingleStyleTreeList* CAknSingleStyleTreeList::NewL() + { + CAknSingleStyleTreeList* self = CAknSingleStyleTreeList::NewLC(); + CleanupStack::Pop( self ); + return self; + } + + +// --------------------------------------------------------------------------- +// Two-phased constructor. +// --------------------------------------------------------------------------- +// +EXPORT_C CAknSingleStyleTreeList* CAknSingleStyleTreeList::NewLC() + { + CAknSingleStyleTreeList* self = new( ELeave ) CAknSingleStyleTreeList; + CleanupStack::PushL( self ); + self->ConstructL(); + AKNTASHOOK_ADDL( self, "CAknSingleStyleTreeList" ); + return self; + } + + +// --------------------------------------------------------------------------- +// Two-phased constructor. +// --------------------------------------------------------------------------- +// +EXPORT_C CAknSingleStyleTreeList* CAknSingleStyleTreeList::NewL( + const CCoeControl& aContainer ) + { + CAknSingleStyleTreeList* self + = CAknSingleStyleTreeList::NewLC( aContainer ); + CleanupStack::Pop( self ); + return self; + } + + +// --------------------------------------------------------------------------- +// Two-phased constructor. +// --------------------------------------------------------------------------- +// +EXPORT_C CAknSingleStyleTreeList* CAknSingleStyleTreeList::NewLC( + const CCoeControl& aContainer ) + { + CAknSingleStyleTreeList* self = new ( ELeave ) CAknSingleStyleTreeList; + CleanupStack::PushL( self ); + self->ConstructL( aContainer ); + AKNTASHOOK_ADDL( self, "CAknSingleStyleTreeList" ); + return self; + } + + +// --------------------------------------------------------------------------- +// Destructor. +// --------------------------------------------------------------------------- +// +CAknSingleStyleTreeList::~CAknSingleStyleTreeList() + { + AKNTASHOOK_REMOVE(); + } + + +// --------------------------------------------------------------------------- +// Construct and add new leaf to the tree. +// --------------------------------------------------------------------------- +// +EXPORT_C TAknTreeItemID CAknSingleStyleTreeList::AddLeafL( + TAknTreeItemID aParent, const TDesC& aText, TUint32 aFlags, + TBool aDrawNow ) + { + TUint32 flags = NULL; + if ( aFlags & EPersistent ) + { + flags |= CAknSingleStyleTreeLeaf::EPersistent; + } + if ( aFlags & EMarked ) + { + flags |= CAknSingleStyleTreeLeaf::EMarked; + } + + CAknSingleStyleTreeLeaf* leaf = + CAknSingleStyleTreeLeaf::NewLC( aText, flags ); + TAknTreeItemID id = Tree().AddItemL( leaf, aParent, aDrawNow ); + CleanupStack::Pop( leaf ); + return id; + } + + +// --------------------------------------------------------------------------- +// Construct and add new node to the tree. +// --------------------------------------------------------------------------- +// +EXPORT_C TAknTreeItemID CAknSingleStyleTreeList::AddNodeL( + TAknTreeItemID aParent, const TDesC& aText, TUint32 aFlags, + TBool aDrawNow ) + { + TUint32 flags = NULL; + if ( aFlags & EPersistent ) + { + flags |= CAknSingleStyleTreeNode::EPersistent; + } + if ( aFlags & EMarked ) + { + flags |= CAknSingleStyleTreeNode::EMarked; + } + if ( aFlags & EExpanded ) + { + flags |= CAknSingleStyleTreeNode::EExpanded; + } + if ( aFlags & ENonEmpty ) + { + flags |= CAknSingleStyleTreeNode::ENonEmpty; + } + + CAknSingleStyleTreeNode* node = + CAknSingleStyleTreeNode::NewLC( aText, flags ); + TAknTreeItemID id = Tree().AddItemL( node, aParent, aDrawNow ); + CleanupStack::Pop( node ); + return id; + } + + +// --------------------------------------------------------------------------- +// Sorts the list. +// --------------------------------------------------------------------------- +// +EXPORT_C void CAknSingleStyleTreeList::SortL( TOrdering aOrdering, + TBool aDrawNow ) + { + CAknSingleStyleTreeOrdering::TOrderingType type = + CAknSingleStyleTreeOrdering::EAscending; + if ( aOrdering == EDescendingAlphabeticalOrdering ) + { + type = CAknSingleStyleTreeOrdering::EDescending; + } + + CAknSingleStyleTreeOrdering* ordering = + CAknSingleStyleTreeOrdering::NewL( type ); + Tree().SetOrdering( ordering, aDrawNow ); + } + + +// --------------------------------------------------------------------------- +// Sets the given text for specified tree item. +// --------------------------------------------------------------------------- +// +EXPORT_C void CAknSingleStyleTreeList::SetTextL( TAknTreeItemID aItem, + const TDesC& aText, TBool aDrawNow ) + { + CAknTreeItem* item = Tree().Item( aItem ); + if ( item->Type() == AknTreeList::KSingleStyleTreeLeaf ) + { + static_cast( item )->SetTextL( aText, + aDrawNow ); + } + else if ( item->Type() == AknTreeList::KSingleStyleTreeNode ) + { + static_cast( item )->SetTextL( aText, + aDrawNow ); + } + else + { + Panic( EAknHListPanicInvalidItemType ); + } + } + + +// --------------------------------------------------------------------------- +// Return text for the specified tree item. +// --------------------------------------------------------------------------- +// +EXPORT_C const TDesC& CAknSingleStyleTreeList::Text( TAknTreeItemID aItem ) const + { + CAknTreeItem* item = Tree().Item( aItem ); + if ( item->Type() == AknTreeList::KSingleStyleTreeLeaf ) + { + __ASSERT_DEBUG( item->IsLeaf(), User::Invariant() ); + return static_cast( item )->Text(); + } + else if ( item->Type() == AknTreeList::KSingleStyleTreeNode ) + { + __ASSERT_DEBUG( item->IsNode(), User::Invariant() ); + return static_cast( item )->Text(); + } + else + { + return KNullDesC; + } + } + + +// --------------------------------------------------------------------------- +// Set icon for specified item. +// --------------------------------------------------------------------------- +// +EXPORT_C void CAknSingleStyleTreeList::SetIcon( const TAknTreeItemID aItem, + const TIconType aType, const TInt aIconId, const TBool aDrawNow ) + { + CAknTreeItem* item = Tree().Item( aItem ); + if ( item->Type() == AknTreeList::KSingleStyleTreeLeaf ) + { + CAknSingleStyleTreeLeaf::TIconType type; + switch ( aType ) + { + case ELeaf: + type = CAknSingleStyleTreeLeaf::EIcon; + break; + + case EHighlightedLeaf: + type = CAknSingleStyleTreeLeaf::EHighlightedIcon; + break; + + case EOptionalIcon1: + type = CAknSingleStyleTreeLeaf::EOptIcon1; + break; + + case EHighlightedOptionalIcon1: + type = CAknSingleStyleTreeLeaf::EHighlightedOptIcon1; + break; + + case EOptionalIcon2: + type = CAknSingleStyleTreeLeaf::EOptIcon2; + break; + + case EHighlightedOptionalIcon2: + type = CAknSingleStyleTreeLeaf::EHighlightedOptIcon2; + break; + + default: + // Invalid icon type for tree leaf. + Panic( EAknHListPanicInvalidItemType ); + return; + } + static_cast( item )->SetIcon( type, + aIconId, aDrawNow ); + } + + else if ( item->Type() == AknTreeList::KSingleStyleTreeNode ) + { + __ASSERT_DEBUG( item->IsNode(), User::Invariant() ); + CAknSingleStyleTreeNode::TIconType type; + switch ( aType ) + { + case EExpandedNode: + type = CAknSingleStyleTreeNode::EExpandedIcon; + break; + + case EHighlightedExpandedNode: + type = CAknSingleStyleTreeNode::EHighlightedExpandedIcon; + break; + + case ECollapsedNode: + type = CAknSingleStyleTreeNode::ECollapsedIcon; + break; + + case EHighlightedCollapsedNode: + type = CAknSingleStyleTreeNode::EHighlightedCollapsedIcon; + break; + + case EOptionalIcon1: + type = CAknSingleStyleTreeNode::EOptIcon1; + break; + + case EHighlightedOptionalIcon1: + type = CAknSingleStyleTreeNode::EHighlightedOptIcon1; + break; + + case EOptionalIcon2: + type = CAknSingleStyleTreeNode::EOptIcon2; + break; + + case EHighlightedOptionalIcon2: + type = CAknSingleStyleTreeNode::EHighlightedOptIcon2; + break; + + default: + // Invalid icon type for tree node. + Panic( EAknHListPanicInvalidItemType ); + return; + } + static_cast( item )->SetIcon( type, + aIconId, aDrawNow ); + } + + else + { + // Invalid item type. + Panic( EAknHListPanicInvalidItemType ); + } + } + + +// --------------------------------------------------------------------------- +// Returns the icon ID set for the specified tree item. +// --------------------------------------------------------------------------- +// +EXPORT_C TInt CAknSingleStyleTreeList::Icon( TAknTreeItemID aItem, + TIconType aType ) const + { + CAknTreeItem* item = Tree().Item( aItem ); + if ( item->Type() == AknTreeList::KSingleStyleTreeLeaf ) + { + CAknSingleStyleTreeLeaf::TIconType type; + switch ( aType ) + { + case ELeaf: + type = CAknSingleStyleTreeLeaf::EIcon; + break; + + case EHighlightedLeaf: + type = CAknSingleStyleTreeLeaf::EHighlightedIcon; + break; + + case EOptionalIcon1: + type = CAknSingleStyleTreeLeaf::EOptIcon1; + break; + + case EHighlightedOptionalIcon1: + type = CAknSingleStyleTreeLeaf::EHighlightedOptIcon1; + break; + + case EOptionalIcon2: + type = CAknSingleStyleTreeLeaf::EOptIcon2; + break; + + case EHighlightedOptionalIcon2: + type = CAknSingleStyleTreeLeaf::EHighlightedOptIcon2; + break; + + default: + // Invalid icon type for tree leaf. + return KErrNotFound; + } + return static_cast( item )->Icon( type ); + } + + else if ( item->Type() == AknTreeList::KSingleStyleTreeNode ) + { + __ASSERT_DEBUG( item->IsNode(), User::Invariant() ); + CAknSingleStyleTreeNode::TIconType type; + switch ( aType ) + { + case EExpandedNode: + type = CAknSingleStyleTreeNode::EExpandedIcon; + break; + + case EHighlightedExpandedNode: + type = CAknSingleStyleTreeNode::EHighlightedExpandedIcon; + break; + + case ECollapsedNode: + type = CAknSingleStyleTreeNode::ECollapsedIcon; + break; + + case EHighlightedCollapsedNode: + type = CAknSingleStyleTreeNode::EHighlightedCollapsedIcon; + break; + + case EOptionalIcon1: + type = CAknSingleStyleTreeNode::EOptIcon1; + break; + + case EHighlightedOptionalIcon1: + type = CAknSingleStyleTreeNode::EHighlightedOptIcon1; + break; + + case EOptionalIcon2: + type = CAknSingleStyleTreeNode::EOptIcon2; + break; + + case EHighlightedOptionalIcon2: + type = CAknSingleStyleTreeNode::EHighlightedOptIcon2; + break; + + default: + // Invalid icon type for tree node. + return KErrNotFound; + } + return static_cast( item )->Icon( type ); + } + + else + { + return KErrNotFound; + } + } + + +// --------------------------------------------------------------------------- +// From class CAknTreeList. +// Sets flags for the list. +// --------------------------------------------------------------------------- +// +void CAknSingleStyleTreeList::SetFlags( TUint32 aFlags ) + { + aFlags &= ~KRestrictedListFlags; + CAknTreeList::SetFlags( aFlags ); + } + + +// --------------------------------------------------------------------------- +// Default C++ constructor. +// --------------------------------------------------------------------------- +// +CAknSingleStyleTreeList::CAknSingleStyleTreeList() + { + } + + +// --------------------------------------------------------------------------- +// Second phase constructor. +// --------------------------------------------------------------------------- +// +void CAknSingleStyleTreeList::ConstructL() + { + BaseConstructL(); + } + + +// --------------------------------------------------------------------------- +// Second phase constructor. +// --------------------------------------------------------------------------- +// +void CAknSingleStyleTreeList::ConstructL( const CCoeControl& aContainer ) + { + BaseConstructL( aContainer ); + } +