uifw/AvKon/aknhlist/src/aknsinglestyletreelist.cpp
changeset 0 2f259fa3e83a
--- /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 <AknTasHook.h> // 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<CAknSingleStyleTreeLeaf*>( item )->SetTextL( aText,
+            aDrawNow );
+        }
+    else if ( item->Type() == AknTreeList::KSingleStyleTreeNode )
+        {
+        static_cast<CAknSingleStyleTreeNode*>( 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<CAknSingleStyleTreeLeaf*>( item )->Text();
+        }
+    else if ( item->Type() == AknTreeList::KSingleStyleTreeNode )
+        {
+        __ASSERT_DEBUG( item->IsNode(), User::Invariant() );
+        return static_cast<CAknSingleStyleTreeNode*>( 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<CAknSingleStyleTreeLeaf*>( 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<CAknSingleStyleTreeNode*>( 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<CAknSingleStyleTreeLeaf*>( 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<CAknSingleStyleTreeNode*>( 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 );
+    }
+