diff -r 4526337fb576 -r 3eca7e70b1b8 mulwidgets/muldatamodel/src/multree.cpp --- a/mulwidgets/muldatamodel/src/multree.cpp Tue Feb 02 00:28:09 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,321 +0,0 @@ -/* -* Copyright (c) 2007-2008 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: MulTree Implementaiton -* -*/ - - -#include "multree.h" - -#include - -#include "mulassert.h" -#include "mulmodeldef.h" -#include "muldatapath.h" - -namespace Alf - { - -// ============================ MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// AddNode -// ----------------------------------------------------------------------------- -// -void MulTree::AddNode(const MulDataPath& aPath,int aIndex) - { - //Find parent node - MulTreeNode* node = FindNode( aPath ); - - //update index of other child - for( int i = 0 ; i < node->ChildCount() ; i++ ) - { - MulTreeNode* childNode = node->Child(i); - int index = childNode->Index(); - if( childNode->Index() >= aIndex ) - { - childNode->SetIndex( childNode->Index()+1 ); - } - } - - //insert node in to parent node - std::auto_ptr childNode( new (EMM) MulTreeNode(aIndex)); - node->InsertChild(childNode,aIndex); - } - -// ----------------------------------------------------------------------------- -// RemoveNode -// ----------------------------------------------------------------------------- -// -void MulTree::RemoveNode(const MulDataPath& aPath, int aIndex ) - { - MulTreeNode* node = FindNode( aPath ); - node->RemoveChild(aIndex); - - //update index of other child - for( int i = 0 ; i < node->ChildCount() ; i++ ) - { - MulTreeNode* childNode = node->Child(i); - int index = childNode->Index(); - if( childNode->Index() > aIndex ) - { - childNode->SetIndex( childNode->Index()-1 ); - } - } - } - -// ----------------------------------------------------------------------------- -// FindNode -// ----------------------------------------------------------------------------- -// -MulTreeNode* MulTree::FindNode( const MulDataPath& aPath ) const - { - MulTreeNode* currentNode = mRootNode.get(); - for( int i = 0; i < aPath.Depth() ;i++ ) - { - int index = aPath[i]; - if( currentNode->HasChild() ) - { - currentNode = FindChildNode( currentNode,index); - } - else - { - __MUL_ASSERT_DEBUG( false , KLInvalidArgument ); - } - } - return currentNode; - } - -// ----------------------------------------------------------------------------- -// FindNode -// ----------------------------------------------------------------------------- -// -MulTreeNode* MulTree::FindChildNode(MulTreeNode* aParentNode,int aIndex) const - { - MulTreeNode* currentNode = aParentNode; - MulTreeNode* foundNode = NULL; - int index = 0; - bool found(false); - int childCount = currentNode->ChildCount(); - while( !found && index < childCount ) - { - MulTreeNode* childNode = currentNode->Child(index); - if( aIndex == childNode->Index() ) - { - found = true; - foundNode = childNode; - } - index++; - } - - if( found == false ) - { - __MUL_ASSERT_DEBUG( false , KLInvalidArgument ); - } - - return foundNode; - } - -// ----------------------------------------------------------------------------- -// FindNode -// ----------------------------------------------------------------------------- -// -MulDataPath MulTree::FindNode( int aIndex ) const - { - int absoluteIndex = -1; - return FindNode( mRootNode.get(), absoluteIndex, aIndex ); - } - -// ----------------------------------------------------------------------------- -// FindNode -// ----------------------------------------------------------------------------- -// -MulDataPath MulTree::FindNode( MulTreeNode* aNode, int& aAbsoluteIndex, int aIndex ) const - { - MulTreeNode* currentNode = aNode; - if( currentNode->HasChild() ) - { - for(int i = 0 ; i < currentNode->ChildCount() ; i++ ) - { - aAbsoluteIndex++; - MulTreeNode* childNode = currentNode->Child(i); - -#ifdef _DEBUG - bool hasChild = childNode->HasChild(); - int count = childNode->ChildCount(); - bool isExpanded = childNode->IsExpanded(); -#endif //_DEBUG - - if( aAbsoluteIndex == aIndex ) - { - MulDataPath path= Path(*childNode); - path.SetIndex(i); - return path; - } - else if( childNode->HasChild() && childNode->IsExpanded() ) - { - MulDataPath path = FindNode( childNode, aAbsoluteIndex , aIndex ); - if(path.Index() != KNotInitialized ) - { - return path; - } - } - } - } - //__MUL_ASSERT_DEBUG( false , KLInvalidArgument ); - MulDataPath path; - path.SetIndex(KNotInitialized); - return path; - } - -// ----------------------------------------------------------------------------- -// Path -// ----------------------------------------------------------------------------- -// -MulDataPath MulTree::Path(MulTreeNode& aNode) const - { - MulTreeNode* parentNode = aNode.Parent(); - std::vector pathArray; - while( parentNode && parentNode != mRootNode.get() ) - { - int index = parentNode->Index(); - pathArray.push_back( parentNode->Index() ); - parentNode = parentNode->Parent(); - } - - int count = pathArray.size(); - - MulDataPath path; - for( int i= pathArray.size()- 1 ; i >=0 ; i-- ) - { - path.Append( pathArray[i] ); - } - pathArray.clear(); - return path; - } - -// ----------------------------------------------------------------------------- -// NodeCount -// ----------------------------------------------------------------------------- -// -int MulTree::NodeCount() const - { - int nodeCount =NodeCount( mRootNode.get() ); - return nodeCount; - } - -// ----------------------------------------------------------------------------- -// NodeCount -// ----------------------------------------------------------------------------- -// -int MulTree::NodeCount(MulTreeNode* aCurrentNode ) const - { - int nodeCount = 0; - if(aCurrentNode->HasChild()) - { - nodeCount = aCurrentNode->ChildCount(); - for(int i=0;i< aCurrentNode->ChildCount();i++) - { - nodeCount+= NodeCount(aCurrentNode->Child(i)); - } - } - return nodeCount; - } - -// ----------------------------------------------------------------------------- -// ExpandedNodeCount -// ----------------------------------------------------------------------------- -// -int MulTree::ExpandedNodeCount() const - { - int nodeCount = ExpandedNodeCount( mRootNode.get() ); - return nodeCount; - } - -// ----------------------------------------------------------------------------- -// ExpandedNodeCount -// ----------------------------------------------------------------------------- -// -int MulTree::ExpandedNodeCount(MulTreeNode* aCurrentNode ) const - { - int nodeCount = 0; - if( aCurrentNode->HasChild() && aCurrentNode->IsExpanded() ) - { - nodeCount = aCurrentNode->ChildCount(); - for( int i=0; i< aCurrentNode->ChildCount() ; i++ ) - { - nodeCount+= ExpandedNodeCount( aCurrentNode->Child(i) ); - } - } - return nodeCount; - } - -// ----------------------------------------------------------------------------- -// NodeIndex -// ----------------------------------------------------------------------------- -// -int MulTree::NodeIndex( const MulDataPath& aPath, int aIndex ) const - { - MulDataPath path( aPath ); - path.SetIndex( aIndex ); - - int absoluteIndex = -1; - int index = NodeIndex( mRootNode.get(), path, absoluteIndex ); - - return index; - } - -// ----------------------------------------------------------------------------- -// NodeIndex -// ----------------------------------------------------------------------------- -// -int MulTree::NodeIndex( MulTreeNode* aCurrentNode, const MulDataPath& aPath, int& aAbsoluteIndex ) const - { - MulTreeNode* currentNode = aCurrentNode; - if( currentNode->HasChild() ) - { - for(int i = 0 ; i < currentNode->ChildCount() ; i++ ) - { - aAbsoluteIndex++; - MulTreeNode* childNode = currentNode->Child(i); - -#ifdef _DEBUG - bool hasChild = childNode->HasChild(); - int count = childNode->ChildCount(); - bool isExpanded = childNode->IsExpanded(); -#endif //_DEBUG - - MulDataPath path = Path(*childNode); - path.SetIndex(i); - - if( path.IsEqual(aPath) ) - { - return aAbsoluteIndex; - } - else if( childNode->HasChild() && childNode->IsExpanded() ) - { - int index = NodeIndex( childNode, aPath, aAbsoluteIndex ); - if( index != KNotInitialized ) - { - return index; - } - } - } - } - return KNotInitialized; - } - - } //namespace Alf - - //End of file