wlanutilities/wlansniffer/wlaninfo/src/wsfwlaninfoarraysortkey.cpp
branchRCL_3
changeset 25 f28ada11abbf
parent 0 56b72877c1cb
equal deleted inserted replaced
24:63be7eb3fc78 25:f28ada11abbf
       
     1 /*
       
     2 * Copyright (c) 2007-2007 Nokia Corporation and/or its subsidiary(-ies). 
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  Implementation of CWsfWlanInfoArraySortKey
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 // CLASS HEADER
       
    20 #include "wsfwlaninfoarraysortkey.h"
       
    21 
       
    22 // INTERNAL INCLUDES
       
    23 #include "wsfwlaninfoarray.h"
       
    24 
       
    25 
       
    26 // CONSTANTS
       
    27 static const TInt KLeftFirst = -1;
       
    28 static const TInt KRightFirst = 1;
       
    29 
       
    30 
       
    31 
       
    32 // ---------------------------------------------------------------------------
       
    33 // CWsfWlanInfoArraySortKey::NewL
       
    34 // ---------------------------------------------------------------------------
       
    35 //    
       
    36 CWsfWlanInfoArraySortKey* CWsfWlanInfoArraySortKey::NewLC( 
       
    37                                                     CWsfWlanInfoArray& aArray )
       
    38 	{
       
    39 	CWsfWlanInfoArraySortKey* thisPtr = new (ELeave) CWsfWlanInfoArraySortKey( 
       
    40 	                                                                  aArray );
       
    41 	CleanupStack::PushL( thisPtr );
       
    42 	// no ConstructL at this stage required
       
    43 	return thisPtr;
       
    44 	}
       
    45 
       
    46 
       
    47 // ---------------------------------------------------------------------------
       
    48 // CWsfWlanInfoArraySortKey::NewL
       
    49 // ---------------------------------------------------------------------------
       
    50 //    
       
    51 CWsfWlanInfoArraySortKey::CWsfWlanInfoArraySortKey( CWsfWlanInfoArray& aArray )
       
    52 	: TKeyArrayFix( 0, ECmpNormal )
       
    53 	{
       
    54 	iArray = &aArray;
       
    55 	}
       
    56 
       
    57 
       
    58 // ---------------------------------------------------------------------------
       
    59 // CWsfWlanInfoArraySortKey::NewL
       
    60 // ---------------------------------------------------------------------------
       
    61 //    
       
    62 CWsfWlanInfoArraySortKey::~CWsfWlanInfoArraySortKey()
       
    63 	{
       
    64 	iArray = NULL; // not owning
       
    65 	}
       
    66 
       
    67 
       
    68 // ---------------------------------------------------------------------------
       
    69 // CWsfWlanInfoArraySortKey::NewL
       
    70 // ---------------------------------------------------------------------------
       
    71 //    
       
    72 TInt CWsfWlanInfoArraySortKey::Compare( TInt aLeft, TInt aRight ) const
       
    73 	{
       
    74 	TWsfWlanInfo* left = iArray->At( aLeft );
       
    75 	TWsfWlanInfo* right = iArray->At( aRight );
       
    76 	TBool uiPrioritySort = iArray->GetUIPrioritySort();
       
    77 
       
    78     TInt ret( 0 );
       
    79     
       
    80     // connected goes first 
       
    81  	if ( left->Connected() )
       
    82  	    {
       
    83  	    ret = KLeftFirst;
       
    84  	    }
       
    85  	else if ( right->Connected() )
       
    86  	    {
       
    87  	    ret = KRightFirst;
       
    88  	    }
       
    89  	
       
    90  	// then network with connecting status
       
    91  	else if ( left->ConnectionStatus() == EConnecting )
       
    92  	    {
       
    93  	    ret = KLeftFirst;
       
    94  	    }
       
    95  	else if ( right->ConnectionStatus() == EConnecting )
       
    96         {
       
    97         ret = KRightFirst;
       
    98         }
       
    99  	
       
   100  	// then customer favourite networks
       
   101  	else if ( left->BrandId() )
       
   102  	    {
       
   103  	    if ( right->BrandId() )
       
   104  	        {
       
   105  	        // smaller brand id first
       
   106  	        ret = left->BrandId() - right->BrandId();
       
   107  	        }
       
   108  	    else
       
   109  	        {
       
   110  	        ret = KLeftFirst;
       
   111  	        }
       
   112  	    }
       
   113  	else if ( right->BrandId() )
       
   114  	    {
       
   115  	    ret = KRightFirst;
       
   116  	    }
       
   117  	
       
   118  	// then ui priority networks 
       
   119     else if ( uiPrioritySort && left->Priority() && !right->Priority() )
       
   120         {
       
   121         ret = KLeftFirst;
       
   122         }
       
   123     else if ( uiPrioritySort && !left->Priority() && right->Priority() )
       
   124         {
       
   125         ret = KRightFirst;
       
   126         }
       
   127     else if ( uiPrioritySort && left->Priority() && right->Priority() )
       
   128         {
       
   129         if ( left->Priority() < right->Priority() )
       
   130             {
       
   131             ret = KLeftFirst;
       
   132             }
       
   133         else
       
   134             {
       
   135             ret = KRightFirst;
       
   136             }
       
   137         }
       
   138  	
       
   139  	// then known networks
       
   140  	else if ( left->Known() && !right->Known() )
       
   141  	    {
       
   142  	    ret = KLeftFirst;
       
   143  	    }
       
   144  	else if ( !left->Known() && right->Known() )
       
   145  	    {
       
   146  	    ret = KRightFirst;
       
   147  	    }
       
   148  	    
       
   149  	// finally SSID alphabetic order decides
       
   150  	else
       
   151  	    {
       
   152  	    if ( ( left->iNetworkName.Length() ) && 
       
   153  	         ( right->iNetworkName.Length() ) )
       
   154  	        {
       
   155  	        ret = left->iNetworkName.CompareC( right->iNetworkName );
       
   156  	        }
       
   157  	    else if ( left->iNetworkName.Length() )
       
   158  	        {
       
   159  	        ret = left->iNetworkName.CompareC( right->iSsid );
       
   160  	        }
       
   161  	    else if ( right->iNetworkName.Length() )
       
   162  	        {
       
   163  	        ret = left->iSsid.CompareC( right->iNetworkName );
       
   164  	        }
       
   165         else
       
   166             {
       
   167             ret = left->iSsid.CompareC( right->iSsid );
       
   168             }
       
   169  	    }
       
   170  	    
       
   171  	return ret;
       
   172 	}
       
   173