wlanutilities/wlansniffer/mainapplication/src/wsfmainviewmodel.cpp
branchRCL_3
changeset 25 f28ada11abbf
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wlanutilities/wlansniffer/mainapplication/src/wsfmainviewmodel.cpp	Wed Sep 01 12:20:32 2010 +0100
@@ -0,0 +1,376 @@
+/*
+* 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 CWsfMainViewModel.
+*
+*/
+
+//  EXTERNAL INCLUDES
+#include <badesca.h>
+#include <coemain.h>
+#include <StringLoader.h>
+#include <wlansniffer.rsg>
+
+//  CLASS HEADER
+#include "wsfmainviewmodel.h"
+
+//  INTERNAL INCLUDES
+#include "wsfwlaninfo.h"
+#include "wsfwlaninfoarray.h"
+#include "wsfmainviewinternals.h"
+
+#include "wsflogger.h"
+
+
+//  LOCAL DEFINITIONS
+
+// Listbox item format for open networks
+_LIT( KVisibleItemFormat1Icon, "%d\t%S\t%S\t%d" );
+
+// Listbox item format for secured networks
+_LIT( KVisibleItemFormat2Icons, "%d\t%S\t%S\t%d\t%d" );
+
+// Listbox item format for "Other (unlisted)" item
+_LIT( KHiddenItemFormat, "\t%S" );
+
+// Maximal length of listbox item strings
+const TInt KListBoxItemMaxLength = 128;
+
+// Listbox granularity
+const TUint KWlanListGranularity = 4;
+
+
+
+//  CONSTRUCTION AND DESTRUCTION
+// ---------------------------------------------------------------------------
+// CWsfMainViewModel::NewL
+// ---------------------------------------------------------------------------
+//
+CWsfMainViewModel* CWsfMainViewModel::NewL()
+    {
+    LOG_ENTERFN( "CWsfMainViewModel::NewL" );
+    CWsfMainViewModel* self = CWsfMainViewModel::NewLC();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CWsfMainViewModel::NewLC
+// ---------------------------------------------------------------------------
+//
+CWsfMainViewModel* CWsfMainViewModel::NewLC()
+    {
+    LOG_ENTERFN( "CWsfMainViewModel::NewLC" );
+    CWsfMainViewModel* self = new( ELeave ) CWsfMainViewModel;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CWsfMainViewModel::~CWsfMainViewModel
+// ---------------------------------------------------------------------------
+//
+CWsfMainViewModel::~CWsfMainViewModel()
+    {
+    LOG_ENTERFN( "CWsfMainViewModel::~CWsfMainViewModel" );
+    delete iFormattedWlanList;
+    delete iSelectedWlan;
+    }
+
+// ---------------------------------------------------------------------------
+// CWsfMainViewModel::CWsfMainViewModel
+// ---------------------------------------------------------------------------
+//
+CWsfMainViewModel::CWsfMainViewModel(): iCoeEnv( CCoeEnv::Static() )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// CWsfMainViewModel::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CWsfMainViewModel::ConstructL()
+    {
+    LOG_ENTERFN( "CWsfMainViewModel::ConstructL" );
+    iFormattedWlanList = new (ELeave) CDesCArrayFlat( KWlanListGranularity );
+    iSelectedWlan = KNullDesC8().AllocL();
+    
+    // add the hidden wlan item to the list by default
+    TWsfWlanInfo dummy;
+    HBufC* hidden = HBufC::NewLC( KListBoxItemMaxLength );
+    TPtr ptr( hidden->Des() );
+
+    FormatHiddenWlanItemL( dummy, ptr );
+    iFormattedWlanList->AppendL( *hidden );
+    
+    CleanupStack::PopAndDestroy( hidden );
+    }
+
+// ---------------------------------------------------------------------------
+// CWsfMainViewModel::GetWlanList
+// ---------------------------------------------------------------------------
+//
+CDesCArrayFlat* CWsfMainViewModel::GetWlanList()
+    {
+    return iFormattedWlanList;
+    }
+
+// ---------------------------------------------------------------------------
+// CWsfMainViewModel::GetInfoArray
+// ---------------------------------------------------------------------------
+//
+CWsfWlanInfoArray* CWsfMainViewModel::GetInfoArray()
+    {
+    return iWlanInfoArray;
+    }
+
+// ---------------------------------------------------------------------------
+// CWsfMainViewModel::SetSelectedWlan
+// ---------------------------------------------------------------------------
+//
+void CWsfMainViewModel::SetSelectedWlan( HBufC8* aSsid )
+    {
+    delete iSelectedWlan;
+    iSelectedWlan = aSsid;
+    }
+
+// ---------------------------------------------------------------------------
+// CWsfMainViewModel::SelectedWlan
+// ---------------------------------------------------------------------------
+//
+const TDesC8& CWsfMainViewModel::SelectedWlan()
+    {
+    return *iSelectedWlan;
+    }
+
+// ---------------------------------------------------------------------------
+// CWsfMainViewModel::SetSelectedIndex
+// ---------------------------------------------------------------------------
+//
+void CWsfMainViewModel::SetSelectedIndex( TInt aIndex )
+    {
+    iListboxIndex = aIndex;
+    }
+
+// ---------------------------------------------------------------------------
+// CWsfMainViewModel::SelectedIndex
+// ---------------------------------------------------------------------------
+//
+TInt CWsfMainViewModel::SelectedIndex()
+    {
+    return iListboxIndex;
+    }
+
+// ---------------------------------------------------------------------------
+// CWsfMainViewModel::FormatNaviPaneLC
+// ---------------------------------------------------------------------------
+//
+HBufC* CWsfMainViewModel::FormatNaviPaneLC()
+    {
+    LOG_ENTERFN( "CWsfMainViewModel::FormatNaviPaneLC" );
+    HBufC* textOfNaviPane = NULL;
+
+    if ( !iVisibleWlans )
+        {
+        textOfNaviPane =  KNullDesC().AllocLC();
+        }
+
+    else if ( iVisibleWlans == 1 )
+        {
+        textOfNaviPane = StringLoader::LoadLC(
+            R_QTN_SNIFFER_NAVI_ONE_WLAN_NW_AVAILABLE, iCoeEnv );
+        }
+    else
+        {
+        textOfNaviPane = StringLoader::LoadLC(
+                                R_QTN_SNIFFER_NAVI_MANY_WLAN_NWS_AVAILABLE, 
+                                iVisibleWlans, 
+                                iCoeEnv );
+        }
+    return textOfNaviPane;
+    }
+
+// ---------------------------------------------------------------------------
+// CWsfMainViewModel::FormatWlanListL
+// ---------------------------------------------------------------------------
+//
+void CWsfMainViewModel::FormatWlanListL( CWsfWlanInfoArray* aWlanList )
+    {
+    LOG_ENTERFN( "CWsfMainViewModel::FormatWlanListL" );
+    //Function expects that items in list are already in proper order
+    iVisibleWlans = 0;
+    iWlanInfoArray = aWlanList;
+    iFormattedWlanList->Reset();
+    HBufC* item = HBufC::NewLC( KListBoxItemMaxLength );
+    TPtr ptr( item->Des() );
+    for (TInt i = 0; i < aWlanList->Count(); ++i )
+        {
+        TWsfWlanInfo* wlanInfo = aWlanList->At( i );
+
+        // Hidden WLAN item is appended later for unknown hidden networks
+        if ( wlanInfo->Hidden() && !wlanInfo->iIapId )
+            {
+            continue;
+            }
+        else
+            {
+            ++iVisibleWlans;
+            }
+
+        // known hidden wlans are also "visible"
+        ptr.Zero();
+        FormatVisibleWlanItemL( *wlanInfo, ptr );
+        iFormattedWlanList->AppendL( ptr );
+        }
+
+    // now add "Other (unlisted)..." for hidden networks (always visible)
+    // make up a dummy wlaninfo
+    TWsfWlanInfo dummy;
+    
+    ptr.Zero();
+    FormatHiddenWlanItemL( dummy, ptr );
+    iFormattedWlanList->AppendL( ptr );
+
+    CleanupStack::PopAndDestroy ( item );
+    }
+
+// ---------------------------------------------------------------------------
+// CWsfMainViewModel::FormatHiddenWlanItemL
+// ---------------------------------------------------------------------------
+//
+void CWsfMainViewModel::FormatHiddenWlanItemL( TWsfWlanInfo& /*aWlan*/, 
+                                               TDes& aItem )
+    {
+    LOG_ENTERFN( "CWsfMainViewModel::FormatHiddenWlanItemL" );
+    HBufC* primaryText = StringLoader::LoadLC( R_QTN_SNIFFER_HIDDEN_WLAN );
+
+    // Only Hidden WLAN text is shown.
+    // All icons are transparent
+    aItem.Format( KHiddenItemFormat, primaryText );
+
+    CleanupStack::PopAndDestroy( primaryText );
+    }
+
+// ---------------------------------------------------------------------------
+// CWsfMainViewModel::FormatVisibleWlanItemL
+// ---------------------------------------------------------------------------
+//
+void CWsfMainViewModel::FormatVisibleWlanItemL( TWsfWlanInfo& aWlan, 
+                                                TDes& aItem )
+    {
+    LOG_ENTERFN( "CWsfMainViewModel::FormatVisibleWlanItemL" );
+    // Icon in first column is transparent by default
+    // Known / Connected / None
+    TInt column1Icon = KTransparentIcon;   // qgn_transparent.svg
+
+    if ( aWlan.BrandId() )
+           {
+           column1Icon = KTransparentIcon + aWlan.BrandId();
+           }
+    else if ( aWlan.Connected() )
+        {
+        column1Icon = KConnectedNWIcon;    // qgn_prop_cmon_wlan_conn.svg
+        }
+    else if ( aWlan.Known() )
+        {
+        column1Icon = KKnownNWIcon;        // qgn_prop_wlan_bearer.svg
+        }
+
+    //Ssid as primary text
+    HBufC* primaryText( NULL );
+    
+    if ( aWlan.iNetworkName.Length() ) // If there is IAP
+        {
+        primaryText = aWlan.GetIapNameAsUnicodeLC();
+        }
+    else // If there no IAP
+        {
+        primaryText = aWlan.GetSsidAsUnicodeLC();
+        }
+
+    //Secondary Text, "Known" if IAP is already defined. Else "Unknown"
+    TInt resId = R_QTN_SNIFFER_UNKNOWN;
+    if ( aWlan.ConnectionStatus() == EConnected )
+        {
+        resId = R_QTN_SNIFFER_CONNECTED;
+        }
+    else if ( aWlan.ConnectionStatus() == EConnecting ) 
+        {
+        resId = R_QTN_SNIFFER_CONNECTING;
+        }
+    else if ( aWlan.Known() ) 
+        {
+        resId = R_QTN_SNIFFER_KNOWN;
+        }
+
+    HBufC* secondaryText = StringLoader::LoadLC( resId );
+
+
+    //Column 3
+    //Show secure icon if network is secure. By default show transparant icon.
+    TInt column4Icon = aWlan.Secure() ? KSecureNetworkIcon : KTransparentIcon;
+
+
+    // Signal strenght for column 4
+    // No signal icon is set by default
+    TInt column3Icon = KNoSignalIcon;    //qgn_transparent.svg
+
+    switch ( aWlan.SignalStrength() )
+        {
+        case EPoor:
+            {
+            column3Icon = KPoorSignal;      //qgn_indi_wlan_signal_low_add.svg
+            break;
+            }
+        case EAverage:
+            {
+            column3Icon = KAverageSignal;   //qgn_indi_wlan_signal_med_add.svg
+            break;
+            }
+        case EExcelent:
+            {
+            column3Icon = KExcelentSignal;  //qgn_indi_wlan_signal_good_add.svg
+            break;
+            }
+
+        case ENoSignal:
+        default:
+            {
+            column3Icon = KNoSignalIcon;     //qgn_indi_wlan_signal_no_wlan.svg
+            break;
+            }
+        }
+
+    if ( column4Icon == KTransparentIcon )
+        {
+        aItem.Format( KVisibleItemFormat1Icon, column1Icon,
+                                        primaryText,
+                                        secondaryText,
+                                        column3Icon );
+        }
+    else
+        {
+        aItem.Format( KVisibleItemFormat2Icons, column1Icon,
+                                        primaryText,
+                                        secondaryText,
+                                        column3Icon,
+                                        column4Icon );
+        }
+
+    CleanupStack::PopAndDestroy( secondaryText );
+    CleanupStack::PopAndDestroy( primaryText );
+    }
+
+// End of file
+