diff -r 63be7eb3fc78 -r f28ada11abbf wlanutilities/wlansniffer/mainapplication/src/wsfdetailsviewmodel.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wlanutilities/wlansniffer/mainapplication/src/wsfdetailsviewmodel.cpp Wed Sep 01 12:20:32 2010 +0100 @@ -0,0 +1,721 @@ +/* +* 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: Implementation of CWsfDetailsViewModel. +* +*/ + +// EXTERNAL INCLUDES +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// INTERNAL INCLUDES +#include "wsfwlaninfo.h" +#include "wsfdetailsviewmodel.h" +#include "wsfwlaninfoarray.h" +#include "wsflogger.h" + +// LOCAL DEFINITIONS +using namespace CMManager; + +#ifdef _DEBUG + _LIT( KDetailsViewModelPanic, "CWsfDetailsViewModel" ); + #define _ASSERTD( cond ) __ASSERT_DEBUG( (cond), \ + User::Panic( KDetailsViewModelPanic, __LINE__) ) +#else + #define _ASSERTD( cond ) {} +#endif //_DEBUG + +// the size of the Details Listbox's array +const TInt KWlanInfoGranularity = 8; +// the size of the numbers in the NaviPane +const TInt KNumberLegth = 5; +// Listbox elements format string +_LIT( KListItemFormat, "%S\t%S" ); +// NaviPane elements format string +_LIT( KPaneFormater, "%i/%i" ); + +// --------------------------------------------------------------------------- +// CWsfDetailsViewModel::CWsfDetailsViewModel() +// --------------------------------------------------------------------------- +// +CWsfDetailsViewModel::CWsfDetailsViewModel():iCoeEnv( CCoeEnv::Static() ) + { + } + +// --------------------------------------------------------------------------- +// CWsfDetailsViewModel::ConstructL() +// --------------------------------------------------------------------------- +// +void CWsfDetailsViewModel::ConstructL() + { + LOG_ENTERFN( "CWsfDetailsViewModel::ConstructL" ); + iFormattedWlanInfo = new (ELeave) CDesCArrayFlat( KWlanInfoGranularity ); + } + +// --------------------------------------------------------------------------- +// CWsfDetailsViewModel::NewL() +// --------------------------------------------------------------------------- +// +EXPORT_C CWsfDetailsViewModel* CWsfDetailsViewModel::NewL() + { + LOG_ENTERFN( "CWsfDetailsViewModel::NewL" ); + CWsfDetailsViewModel* self = CWsfDetailsViewModel::NewLC(); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// CWsfDetailsViewModel::NewLC() +// --------------------------------------------------------------------------- +// +EXPORT_C CWsfDetailsViewModel* CWsfDetailsViewModel::NewLC() + { + LOG_ENTERFN( "CWsfDetailsViewModel::NewLC" ); + CWsfDetailsViewModel* self = new( ELeave ) CWsfDetailsViewModel; + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + +// --------------------------------------------------------------------------- +// CWsfDetailsViewModel::~CWsfDetailsViewModel() +// --------------------------------------------------------------------------- +// +CWsfDetailsViewModel::~CWsfDetailsViewModel() + { + LOG_ENTERFN( "CWsfDetailsViewModel::~CWsfDetailsViewModel" ); + delete iFormattedWlanInfo; + } + +// --------------------------------------------------------------------------- +// CWsfDetailsViewModel::FormatWlanInfoL() +// --------------------------------------------------------------------------- +// +CDesCArrayFlat* CWsfDetailsViewModel::FormatWlanInfoL( + TWsfWlanInfo* aWlanInfo, + CWsfWlanInfoArray* aWlanArray ) + { + LOG_ENTERFN( "CWsfDetailsViewModel::FormatWlanInfoL" ); + _ASSERTD( aWlanArray ); + + for( TInt i = 0; i < iFormattedWlanInfo->MdcaCount(); i++) + { + TPtrC temp = iFormattedWlanInfo->MdcaPoint( i ); + TBuf<100> tempElement = temp; + LOG_WRITEF( "(1)iFormattedWlanInfo: %S", &tempElement ); + } + + iWlanArray = aWlanArray; + iFormattedWlanInfo->Reset(); + + TInt visibleWlans = VisibleWlans( *iWlanArray ); + if ( aWlanInfo && visibleWlans ) + { + iWlanInfo = *aWlanInfo; + TWsfWlanInfo* temp = iWlanArray->Match( aWlanInfo->iSsid, + visibleWlans ); + if ( temp ) + { + iIndex = iWlanArray->GetArrayIndex( temp ); + } + else + { + iIndex = iWlanArray->GetArrayIndex( &iWlanInfo ); + } + + // create array of not-connected WLAN data + FormatAndAppenWlanIapNameL(); + FormatAndAppenWlanSsidL(); + FormatAndAppenSingnalL(); + FormatAndAppenModeL(); + FormatAndAppenSecurityL(); + FormatAndAppenCoverageL(); + FormatAndAppenSpeedL(); + } + else if ( !aWlanInfo )// Current Wlan info has no signal + { + iWlanInfo.iStrengthLevel = EWlanSignalUnavailable; + FormatAndAppenWlanIapNameL(); + FormatAndAppenWlanSsidL(); + FormatAndAppenSingnalL(); + } + + for( TInt i = 0; i < iFormattedWlanInfo->MdcaCount(); i++) + { + TPtrC temp = iFormattedWlanInfo->MdcaPoint( i ); + TBuf<100> tempElement = temp; + LOG_WRITEF( "(2)iFormattedWlanInfo: %S", &tempElement ); + } + + return iFormattedWlanInfo; + } + +// --------------------------------------------------------------------------- +// CWsfDetailsViewModel::FormatNextWlanInfoL() +// --------------------------------------------------------------------------- +// + +CDesCArrayFlat* CWsfDetailsViewModel::FormatNextWlanInfoL() + { + LOG_ENTERFN( "CWsfDetailsViewModel::FormatNextWlanInfoL" ); + _ASSERTD( iWlanArray ); + + TInt visibleWlans = VisibleWlans( *iWlanArray ); + + if( iIndex < visibleWlans - 1 ) + { + iFormattedWlanInfo->Reset(); + iIndex++; + + if( iIndex >= visibleWlans - 1 ) + { + // Set the index to point to the last visible in the array. + iIndex = visibleWlans - 1; + } + else if ( iWlanInfo.SignalStrength() == ENoSignal ) + { + iIndex = 0; + } + + // (Array bounds check is done in the first if sentence.) + iWlanInfo = *(iWlanArray->At( iIndex ) ); + FormatAndAppenWlanIapNameL(); + FormatAndAppenWlanSsidL(); + FormatAndAppenSingnalL(); + FormatAndAppenModeL(); + FormatAndAppenSecurityL(); + FormatAndAppenCoverageL(); + FormatAndAppenSpeedL(); + } + + return iFormattedWlanInfo; + } + + + +// --------------------------------------------------------------------------- +// CWsfDetailsViewModel::FormatPreviousWlanInfoL() +// --------------------------------------------------------------------------- +// + +CDesCArrayFlat* CWsfDetailsViewModel::FormatPreviousWlanInfoL() + { + LOG_ENTERFN( "CWsfDetailsViewModel::FormatPreviousWlanInfoL" ); + _ASSERTD( iWlanArray ); + + if( VisibleWlans( *iWlanArray ) ) + { + iFormattedWlanInfo->Reset(); + iIndex--; + + if ( iIndex < 0 || iWlanInfo.SignalStrength() == ENoSignal ) + { + iIndex = 0; + } + + // Just in case the iIndex would somehow point out of iWlanArray... + if( iIndex >= (TInt)iWlanArray->Count() ) + { + iIndex = 0; + } + iWlanInfo = *(iWlanArray->At( iIndex ) ); + FormatAndAppenWlanIapNameL(); + FormatAndAppenWlanSsidL(); + FormatAndAppenSingnalL(); + FormatAndAppenModeL(); + FormatAndAppenSecurityL(); + FormatAndAppenCoverageL(); + FormatAndAppenSpeedL(); + } + return iFormattedWlanInfo; + } + +// --------------------------------------------------------------------------- +// CWsfDetailsViewModel::FormatPaneTextLC() +// --------------------------------------------------------------------------- +// +HBufC* CWsfDetailsViewModel::FormatPaneTextLC() + { + LOG_ENTERFN( "CWsfDetailsViewModel::FormatPaneTextLC" ); + + HBufC* paneText = NULL; + + if ( iWlanInfo.SignalStrength() == ENoSignal ) + { + paneText = KNullDesC().AllocLC(); + } + else + { + TInt visibleWlans = VisibleWlans( *iWlanArray ); + if( visibleWlans ) + { + paneText = HBufC::NewLC( KPaneFormater().Length() + + KNumberLegth + + KNumberLegth ); + + TPtr paneTextPrt = paneText->Des(); + + // Format string ( KListItemFormat = %i/%i ) + paneTextPrt.Format( KPaneFormater, + iIndex + 1, + visibleWlans ); + } + else + { + paneText = KNullDesC().AllocLC(); + } + } + + return paneText; + } + +// --------------------------------------------------------------------------- +// CWsfDetailsViewModel::FormatLeftScrollButton() +// --------------------------------------------------------------------------- +// +TBool CWsfDetailsViewModel::FormatLeftScrollButton() + { + LOG_ENTERFN( "CWsfDetailsViewModel::FormatLeftScrollButton" ); + TBool leftButton( EFalse ); + + if ( iIndex == 0 ) + { + leftButton = ETrue; + } + + return leftButton; + } + +// --------------------------------------------------------------------------- +// CWsfDetailsViewModel::FormatRightScrollButton() +// --------------------------------------------------------------------------- +// +TBool CWsfDetailsViewModel::FormatRightScrollButton() + { + LOG_ENTERFN( "CWsfDetailsViewModel::FormatRightScrollButton" ); + TBool rightButton( EFalse ); + TInt count = iWlanArray->Count(); + + if ( iIndex + 1 >= count ) + { + rightButton = ETrue; + } + + return rightButton; + } + +// --------------------------------------------------------------------------- +// CWsfDetailsViewModel::GetWlanDetails() +// --------------------------------------------------------------------------- +// +CDesCArrayFlat* CWsfDetailsViewModel::GetWlanDetails() + { + return iFormattedWlanInfo; + } + +// --------------------------------------------------------------------------- +// CWsfDetailsViewModel::WlanSsid() +// --------------------------------------------------------------------------- +// +const TDesC8& CWsfDetailsViewModel::WlanSsid() const + { + return iWlanInfo.iSsid; + } + +// --------------------------------------------------------------------------- +// CWsfDetailsViewModel::FormatListBoxItemLC +// --------------------------------------------------------------------------- +// +HBufC* CWsfDetailsViewModel::FormatListBoxItemLC( + const TUint aResourceId, + const TDesC& aValueText ) const + { + LOG_ENTERFN( "CWsfDetailsViewModel::FormatListBoxItemLC" ); + // hold the column name on list item + HBufC* columnName = NULL; + + if ( aResourceId ) + { + columnName = StringLoader::LoadLC( aResourceId ); + } + else + { + columnName = KNullDesC().AllocLC(); + } + + + // Holds the list box item + HBufC* listBoxItem = HBufC::NewL( KListItemFormat().Length()+ + columnName->Length() + + aValueText.Length() ); + + // For formating needs + TPtr listBoxItemPrt = listBoxItem->Des(); + + // Format string ( KListItemFormat = %S\t%S ) + listBoxItemPrt.Format( KListItemFormat, columnName, &aValueText ); + CleanupStack::PopAndDestroy( columnName ); + CleanupStack::PushL( listBoxItem ); + return listBoxItem; + } + +// --------------------------------------------------------------------------- +// CWsfDetailsViewModel::FormatAndAppenWlanIapNameL() +// --------------------------------------------------------------------------- +// +void CWsfDetailsViewModel::FormatAndAppenWlanIapNameL() + { + LOG_ENTERFN( "CWsfDetailsViewModel::FormatAndAppenWlanIapNameL" ); + if ( iWlanInfo.iNetworkName.Length() ) + { + HBufC* wlanIapName = iWlanInfo.GetIapNameAsUnicodeLC(); + HBufC* listBoxItem = FormatListBoxItemLC( + R_QTN_CMON_HEADING_CONN_NAME, + *wlanIapName ); + + iFormattedWlanInfo->AppendL( *listBoxItem ); + CleanupStack::PopAndDestroy( listBoxItem ); + CleanupStack::PopAndDestroy( wlanIapName ); + } + } + +// --------------------------------------------------------------------------- +// CWsfDetailsViewModel::FormatAndAppenWlanSsidL() +// --------------------------------------------------------------------------- +// +void CWsfDetailsViewModel::FormatAndAppenWlanSsidL() + { + LOG_ENTERFN( "CWsfDetailsViewModel::FormatAndAppenWlanSsidL" ); + HBufC* wlanSsid = iWlanInfo.GetSsidAsUnicodeLC(); + HBufC* listBoxItem = FormatListBoxItemLC( + R_QTN_SNIFFER_HEADING_WLAN_NETWORK_NAME, + *wlanSsid ); + + iFormattedWlanInfo->AppendL( *listBoxItem ); + CleanupStack::PopAndDestroy( listBoxItem ); + CleanupStack::PopAndDestroy( wlanSsid ); + } + +// --------------------------------------------------------------------------- +// CWsfDetailsViewModel::FormatAndAppenSingnalL() +// --------------------------------------------------------------------------- +// +void CWsfDetailsViewModel::FormatAndAppenSingnalL() + { + LOG_ENTERFN( "CWsfDetailsViewModel::FormatAndAppenSingnalL" ); + HBufC* singnalStrength = FormatSingnalStrenghtLC(); + HBufC* listBoxItem = FormatListBoxItemLC( + R_QTN_SNIFFER_HEADING_WLAN_SIGNAL_STRENGTH, + *singnalStrength ); + + iFormattedWlanInfo->AppendL( *listBoxItem ); + CleanupStack::PopAndDestroy( listBoxItem ); + CleanupStack::PopAndDestroy( singnalStrength ); + } + +// --------------------------------------------------------------------------- +// CWsfDetailsViewModel::FormatAndAppenModeL() +// --------------------------------------------------------------------------- +// +void CWsfDetailsViewModel::FormatAndAppenModeL() + { + LOG_ENTERFN( "CWsfDetailsViewModel::FormatAndAppenModeL" ); + HBufC* mode = FormatModeLC(); + HBufC* listBoxItem = FormatListBoxItemLC( + R_QTN_SNIFFER_HEADING_WLAN_NETWORK_MODE, + *mode ); + + iFormattedWlanInfo->AppendL( *listBoxItem ); + CleanupStack::PopAndDestroy( listBoxItem ); + CleanupStack::PopAndDestroy( mode ); + } + +// --------------------------------------------------------------------------- +// CWsfDetailsViewModel::FormatAndAppenSecurityL() +// --------------------------------------------------------------------------- +// +void CWsfDetailsViewModel::FormatAndAppenSecurityL() + { + LOG_ENTERFN( "CWsfDetailsViewModel::FormatAndAppenSecurityL" ); + HBufC* security = FormatSecurityLC(); + HBufC* listBoxItem = FormatListBoxItemLC( + R_QTN_SNIFFER_HEADING_WLAN_SECURITY_MODE, + *security ); + + iFormattedWlanInfo->AppendL( *listBoxItem ); + CleanupStack::PopAndDestroy( listBoxItem ); + CleanupStack::PopAndDestroy( security ); + } + +// --------------------------------------------------------------------------- +// CWsfDetailsViewModel::FormatAndAppenCoverageL() +// --------------------------------------------------------------------------- +// +void CWsfDetailsViewModel::FormatAndAppenCoverageL() + { + LOG_ENTERFN( "CWsfDetailsViewModel::FormatAndAppenCoverageL" ); + HBufC* coverage = FormatCoverageLC(); + HBufC* listBoxItem = FormatListBoxItemLC( + R_QTN_SNIFFER_HEADING_WLAN_NW_AP_AMOUNT, + *coverage ); + + iFormattedWlanInfo->AppendL( *listBoxItem ); + CleanupStack::PopAndDestroy( listBoxItem ); + CleanupStack::PopAndDestroy( coverage ); + } + +// --------------------------------------------------------------------------- +// CWsfDetailsViewModel::FormatAndAppenSpeedL() +// --------------------------------------------------------------------------- +// +void CWsfDetailsViewModel::FormatAndAppenSpeedL() + { + LOG_ENTERFN( "CWsfDetailsViewModel::FormatAndAppenSpeedL" ); + HBufC* speed = FormatTechnologyLC(); + HBufC* listBoxItem = FormatListBoxItemLC( + R_QTN_SNIFFER_HEADING_WLAN_NW_MAX_RATE, + *speed ); + + iFormattedWlanInfo->AppendL( *listBoxItem ); + CleanupStack::PopAndDestroy( listBoxItem ); + CleanupStack::PopAndDestroy( speed ); + } + +// --------------------------------------------------------------------------- +// CWsfDetailsViewModel::FormatSingnalStrenghtLC() +// --------------------------------------------------------------------------- +// +HBufC* CWsfDetailsViewModel::FormatSingnalStrenghtLC() + { + LOG_ENTERFN( "CWsfDetailsViewModel::FormatSingnalStrenghtLC" ); + // Holds the showed signal strenth string + HBufC* singnalStrengthString = NULL; + + // Get string + switch( iWlanInfo.SignalStrength() ) + { + case ENoSignal: + { + singnalStrengthString = StringLoader::LoadLC( + R_QTN_SNIFFER_WLAN_SIGNAL_STRENGTH_NO_SIGNAL, iCoeEnv ); + break; + } + case EPoor: + { + singnalStrengthString = StringLoader::LoadLC ( + R_QTN_SNIFFER_WLAN_SIGNAL_STRENGTH_LOW, + iWlanInfo.SignalStrengthPercentage(), + iCoeEnv ); + break; + } + case EAverage: + { + singnalStrengthString = StringLoader::LoadLC ( + R_QTN_SNIFFER_WLAN_SIGNAL_STRENGTH_MEDIUM, + iWlanInfo.SignalStrengthPercentage(), + iCoeEnv ); + break; + } + case EExcelent: + { + singnalStrengthString = StringLoader::LoadLC ( + R_QTN_SNIFFER_WLAN_SIGNAL_STRENGTH_STRONG, + iWlanInfo.SignalStrengthPercentage(), + iCoeEnv ); + break; + } + default: + { + return KNullDesC().AllocLC(); + } + + } + return singnalStrengthString; + } + +// --------------------------------------------------------- +// CWsfDetailsViewModel::FormatModeLC +// --------------------------------------------------------- +// +HBufC* CWsfDetailsViewModel::FormatModeLC() + { + LOG_ENTERFN( "CWsfDetailsViewModel::FormatModeLC" ); + TInt resourceId(0); + + switch( iWlanInfo.iNetMode ) + { + case EAdhoc: + { + resourceId = R_QTN_SNIFFER_WLAN_SETT_NEWTWORK_MODE_ADHOC; + break; + } + + case EInfra: + { + resourceId = R_QTN_SNIFFER_WLAN_SETT_NEWTWORK_MODE_INFRA; + break; + } + default: + { + return KNullDesC().AllocLC(); + } + + } + + return StringLoader::LoadLC( resourceId ); + } + +// --------------------------------------------------------- +// CWsfDetailsViewModel::FormatSecurityLC +// --------------------------------------------------------- +// +HBufC* CWsfDetailsViewModel::FormatSecurityLC() + { + LOG_ENTERFN( "CWsfDetailsViewModel::FormatSecurityLC" ); + TInt resourceId(0); + + switch( iWlanInfo.iSecurityMode ) + { + + case EWlanSecModeOpen: + { + resourceId = R_QTN_SNIFFER_WLAN_SETT_SECURITY_MODE_OPEN; + break; + } + case EWlanSecModeWep: + { + resourceId = R_QTN_SNIFFER_WLAN_SETT_SECURITY_MODE_WEP; + break; + } + case EWlanSecMode802_1x: + { + resourceId = R_QTN_SNIFFER_WLAN_SETT_SECURITY_MODE_802_1X; + break; + } + case EWlanSecModeWpa: + case EWlanSecModeWpa2: + { + resourceId = R_QTN_SNIFFER_WLAN_SETT_SECURITY_MODE_WPA; + break; + } + case EWlanSecModeWAPI: + { + resourceId = R_QTN_SNIFFER_WLAN_SETT_SECURITY_MODE_WAPI; + break; + } + default: + { + return KNullDesC().AllocLC(); + } + } + + return StringLoader::LoadLC( resourceId ); + } + +// --------------------------------------------------------------------------- +// CWsfDetailsViewModel::FormatCoverageLC +// --------------------------------------------------------------------------- +// +HBufC* CWsfDetailsViewModel::FormatCoverageLC() + { + LOG_ENTERFN( "CWsfDetailsViewModel::FormatCoverageLC" ); + if ( iWlanInfo.iCoverage == 1) + { + return StringLoader::LoadLC( + R_QTN_SNIFFER_WLAN_AP_AMOUNT_IN_RANGE, iCoeEnv ); + } + else + { + return StringLoader::LoadLC( + R_QTN_SNIFFER_WLAN_AP_AMOUNT_IN_RANGE_MANY, + iWlanInfo.iCoverage, iCoeEnv ); + } + } + +// --------------------------------------------------------- +// CWsfDetailsViewModel::FormatTechnologyLC +// --------------------------------------------------------- +// +HBufC* CWsfDetailsViewModel::FormatTechnologyLC() + { + LOG_ENTERFN( "CWsfDetailsViewModel::FormatTechnologyLC" ); + TInt resourceId( 0 ); + + switch( iWlanInfo.iTransferRate ) + { + + case 1: + { + resourceId = R_QTN_SNIFFER_WLAN_SETT_TECHNOLOGY_802_11B; + break; + } + case 2: + { + resourceId = R_QTN_SNIFFER_WLAN_SETT_TECHNOLOGY_802_11G; + break; + } + case 4: + { + resourceId = R_QTN_SNIFFER_WLAN_SETT_TECHNOLOGY_802_11BG; + break; + } + case 8: + { + resourceId = R_QTN_SNIFFER_WLAN_SETT_TECHNOLOGY_802_11N; + break; + } + default: + { + return KNullDesC().AllocLC(); + } + } + + return StringLoader::LoadLC( resourceId ); + } + +// --------------------------------------------------------------------------- +// CWsfDetailsViewModel::VisibleWlans +// --------------------------------------------------------------------------- +// +TInt CWsfDetailsViewModel::VisibleWlans( CWsfWlanInfoArray& aArray ) + { + LOG_ENTERFN( "CWsfDetailsViewModel::VisibleWlans" ); + TUint i = 0; + TWsfWlanInfo* wlanInfo; + LOG_WRITEF( "Number of Wlans: %d", aArray.Count() ); + // The hidden WLAN should be in the end of the aArray. + while ( i < aArray.Count() ) + { + wlanInfo = aArray[i]; + if ( wlanInfo->Hidden() && !wlanInfo->Known() ) + { + break; // Hidden was found. Break to exit the while-loop. + } + ++i; + } + + LOG_WRITEF( "VisibleWlans: %d", i ); + return i; + } + +// END OF FILE +