uifw/AvKon/aknhlist/src/akntreeitem.cpp
changeset 0 2f259fa3e83a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/uifw/AvKon/aknhlist/src/akntreeitem.cpp	Tue Feb 02 01:00:49 2010 +0200
@@ -0,0 +1,207 @@
+/*
+* Copyright (c) 2006 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 the CAknTreeItem class.
+*
+*/
+
+
+#include <aknappui.h>
+#include <AknUtils.h>
+#include <aknlayoutscalable_avkon.cdl.h>
+
+#include "akntreeitem.h"
+#include "akntreenode.h"
+#include "akntree.h"
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+CAknTreeItem::~CAknTreeItem()
+    {
+    iParent = NULL;
+    }
+
+
+// ---------------------------------------------------------------------------
+// Returns pointer to the parent node.
+// ---------------------------------------------------------------------------
+//
+const CAknTreeNode* CAknTreeItem::Parent() const
+    {
+    return iParent;
+    }
+
+
+CAknTreeNode* CAknTreeItem::Parent()
+    {
+    return iParent;
+    }
+
+
+// ---------------------------------------------------------------------------
+// Sets the parent node.
+// ---------------------------------------------------------------------------
+//
+void CAknTreeItem::SetParent( CAknTreeNode* aParent )
+    {
+    __ASSERT_DEBUG( aParent != this, User::Invariant() );
+    iParent = aParent;
+    }
+
+
+// ---------------------------------------------------------------------------
+// Returns pointer to the tree root.
+// ---------------------------------------------------------------------------
+//
+CAknTree* CAknTreeItem::Root() const
+    {
+    return iParent ? iParent->Root() : NULL;
+    }
+
+
+TInt CAknTreeItem::Level() const
+    {
+    return iParent ? iParent->Level() + 1 : 0;
+    }
+
+
+// ---------------------------------------------------------------------------
+// These virtual functions are intended for compensating the absence of
+// dynamic casting. Default implementations return null pointers.
+// ---------------------------------------------------------------------------
+//
+CAknTreeLeaf* CAknTreeItem::Leaf()
+    {
+    return NULL;
+    }
+
+
+const CAknTreeLeaf* CAknTreeItem::Leaf() const
+    {
+    return NULL;
+    }
+
+
+CAknTreeNode* CAknTreeItem::Node()
+    {
+    return NULL;
+    }
+
+
+const CAknTreeNode* CAknTreeItem::Node() const
+    {
+    return NULL;
+    }
+
+
+// ---------------------------------------------------------------------------
+// Determines whether the object is an intance of CAknTreeLeaf with the
+// virtual Leaf() method that should be overriden by CAknTreeLeaf class to
+// return pointer to the object instead of null pointer.
+// ---------------------------------------------------------------------------
+//
+TBool CAknTreeItem::IsLeaf() const
+    {
+    return Leaf() != NULL;
+    }
+
+
+// ---------------------------------------------------------------------------
+// Determines whether the object is an instance of CAknTreeNode with the
+// virtual Node() method, that should be overriden by CAknTreeNode class to
+// return pointer to the object instead of null pointer.
+// ---------------------------------------------------------------------------
+//
+TBool CAknTreeItem::IsNode() const
+    {
+    return Node() != NULL;
+    }
+
+
+// ---------------------------------------------------------------------------
+// Gets the minimum size for the hierarchical list item from the layout data.
+// ---------------------------------------------------------------------------
+//
+TSize CAknTreeItem::MinimumSize() const
+    {
+    TAknWindowLineLayout lineLayout = 
+        AknLayoutScalable_Avkon::aid_size_min_hl_cp1().LayoutLine();
+    TRect parentRect = iAvkonAppUi->ApplicationRect(); // Not according to LAF!
+    TAknLayoutRect layoutRect;
+    layoutRect.LayoutRect( parentRect, lineLayout );
+    TRect minimumSize = layoutRect.Rect();
+    return minimumSize.Size();
+    }
+
+
+// ---------------------------------------------------------------------------
+// Empty implementation for pointer event handling.
+// ---------------------------------------------------------------------------
+//
+void CAknTreeItem::HandlePointerEventL( const TPointerEvent& /*aPointerEvent*/,
+    const TRect& /*aItemRect*/ )
+    {
+    }
+
+
+// ---------------------------------------------------------------------------
+// Static comparison function.
+// ---------------------------------------------------------------------------
+//
+TInt CAknTreeItem::Compare( const CAknTreeItem& aFirst,
+    const CAknTreeItem& aSecond )
+    {
+    CAknTree* root = aFirst.Root();
+    if ( !root )
+        {
+        root = aSecond.Root();
+        }
+
+    if ( root )
+        {
+        return root->Compare( aFirst, aSecond );
+        }
+    else
+        {
+        return NULL;
+        }
+    }
+
+
+// ---------------------------------------------------------------------------
+// Default C++ constructor.
+// ---------------------------------------------------------------------------
+//
+CAknTreeItem::CAknTreeItem()
+    {
+    }
+
+
+// ---------------------------------------------------------------------------
+// Gets specified rectangle from the layout data.
+// ---------------------------------------------------------------------------
+//
+TRect CAknTreeItem::RectFromLayout( const TRect& aParent,
+    const TAknWindowComponentLayout& aComponentLayout ) const
+    {
+    TAknLayoutRect layoutRect;
+    layoutRect.LayoutRect( aParent, aComponentLayout.LayoutLine() );
+    return layoutRect.Rect();
+    }
+
+