diff -r 63be7eb3fc78 -r f28ada11abbf wlanutilities/wlansniffer/wlaninfo/src/wsfwlaninfoarraysortkey.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wlanutilities/wlansniffer/wlaninfo/src/wsfwlaninfoarraysortkey.cpp Wed Sep 01 12:20:32 2010 +0100 @@ -0,0 +1,173 @@ +/* +* Copyright (c) 2007-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 of CWsfWlanInfoArraySortKey +* +*/ + + +// CLASS HEADER +#include "wsfwlaninfoarraysortkey.h" + +// INTERNAL INCLUDES +#include "wsfwlaninfoarray.h" + + +// CONSTANTS +static const TInt KLeftFirst = -1; +static const TInt KRightFirst = 1; + + + +// --------------------------------------------------------------------------- +// CWsfWlanInfoArraySortKey::NewL +// --------------------------------------------------------------------------- +// +CWsfWlanInfoArraySortKey* CWsfWlanInfoArraySortKey::NewLC( + CWsfWlanInfoArray& aArray ) + { + CWsfWlanInfoArraySortKey* thisPtr = new (ELeave) CWsfWlanInfoArraySortKey( + aArray ); + CleanupStack::PushL( thisPtr ); + // no ConstructL at this stage required + return thisPtr; + } + + +// --------------------------------------------------------------------------- +// CWsfWlanInfoArraySortKey::NewL +// --------------------------------------------------------------------------- +// +CWsfWlanInfoArraySortKey::CWsfWlanInfoArraySortKey( CWsfWlanInfoArray& aArray ) + : TKeyArrayFix( 0, ECmpNormal ) + { + iArray = &aArray; + } + + +// --------------------------------------------------------------------------- +// CWsfWlanInfoArraySortKey::NewL +// --------------------------------------------------------------------------- +// +CWsfWlanInfoArraySortKey::~CWsfWlanInfoArraySortKey() + { + iArray = NULL; // not owning + } + + +// --------------------------------------------------------------------------- +// CWsfWlanInfoArraySortKey::NewL +// --------------------------------------------------------------------------- +// +TInt CWsfWlanInfoArraySortKey::Compare( TInt aLeft, TInt aRight ) const + { + TWsfWlanInfo* left = iArray->At( aLeft ); + TWsfWlanInfo* right = iArray->At( aRight ); + TBool uiPrioritySort = iArray->GetUIPrioritySort(); + + TInt ret( 0 ); + + // connected goes first + if ( left->Connected() ) + { + ret = KLeftFirst; + } + else if ( right->Connected() ) + { + ret = KRightFirst; + } + + // then network with connecting status + else if ( left->ConnectionStatus() == EConnecting ) + { + ret = KLeftFirst; + } + else if ( right->ConnectionStatus() == EConnecting ) + { + ret = KRightFirst; + } + + // then customer favourite networks + else if ( left->BrandId() ) + { + if ( right->BrandId() ) + { + // smaller brand id first + ret = left->BrandId() - right->BrandId(); + } + else + { + ret = KLeftFirst; + } + } + else if ( right->BrandId() ) + { + ret = KRightFirst; + } + + // then ui priority networks + else if ( uiPrioritySort && left->Priority() && !right->Priority() ) + { + ret = KLeftFirst; + } + else if ( uiPrioritySort && !left->Priority() && right->Priority() ) + { + ret = KRightFirst; + } + else if ( uiPrioritySort && left->Priority() && right->Priority() ) + { + if ( left->Priority() < right->Priority() ) + { + ret = KLeftFirst; + } + else + { + ret = KRightFirst; + } + } + + // then known networks + else if ( left->Known() && !right->Known() ) + { + ret = KLeftFirst; + } + else if ( !left->Known() && right->Known() ) + { + ret = KRightFirst; + } + + // finally SSID alphabetic order decides + else + { + if ( ( left->iNetworkName.Length() ) && + ( right->iNetworkName.Length() ) ) + { + ret = left->iNetworkName.CompareC( right->iNetworkName ); + } + else if ( left->iNetworkName.Length() ) + { + ret = left->iNetworkName.CompareC( right->iSsid ); + } + else if ( right->iNetworkName.Length() ) + { + ret = left->iSsid.CompareC( right->iNetworkName ); + } + else + { + ret = left->iSsid.CompareC( right->iSsid ); + } + } + + return ret; + } +