sipplugins/sippsipsettingsui/src/sipsettlistsipsrvsetitemlist.cpp
changeset 0 307788aac0a8
equal deleted inserted replaced
-1:000000000000 0:307788aac0a8
       
     1 /*
       
     2 * Copyright (c) 2005 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:  The item list of the proxy & registrar views
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 
       
    20 // INCLUDE FILES
       
    21 #include    "sipsettlistsipsrvsetitemlist.h"
       
    22 #include    "sipsettlistsipsrvsetmodel.h"
       
    23 #include    "sipsettlistsipsrvtextsetitem.h"
       
    24 #include    "sipupdatedpasswordsetitem.h"
       
    25 #include    "sipserversettingvalidator.h"
       
    26 #include    "tsipsettingsdata.h"
       
    27 #include 	"SIPSettListSIPSrvTakeOverCBAKeyPress.h"
       
    28 #include    "SipSettIntegerEditItem.h"
       
    29 #include    <gssipsettingspluginrsc.rsg> //GUI Resource
       
    30 #include    <StringLoader.h>
       
    31 #include    <sipprofiletypeinfo.h>
       
    32 #include    <aknnotewrappers.h>
       
    33 #include    <akntextsettingpage.h>
       
    34 #include    "gssippluginlogger.h"
       
    35 
       
    36 // CONSTANTS
       
    37 
       
    38 const TInt KSIPExtraPasswdChars = 4;
       
    39 const TInt KSIPRemovePasswdChars = 2;
       
    40 _LIT16( NULLString, " " );
       
    41 
       
    42 // ============================ MEMBER FUNCTIONS ===============================
       
    43 
       
    44 // -----------------------------------------------------------------------------
       
    45 // CSIPSettListSIPSrvSetItemList::CSIPSettListSIPSrvSetItemList
       
    46 // C++ default constructor can NOT contain any code, that
       
    47 // might leave.
       
    48 // -----------------------------------------------------------------------------
       
    49 //
       
    50 CSIPSettListSIPSrvSetItemList::CSIPSettListSIPSrvSetItemList( 
       
    51     CSIPSettListSIPSrvSetModel* aModel )
       
    52     : iModel( aModel )
       
    53     {
       
    54     __GSLOGSTRING("CSIPSettListSIPSrvSetItemList::CSIPSettListSIPSrvSetItemList" )
       
    55     }
       
    56 
       
    57 // -----------------------------------------------------------------------------
       
    58 // CSIPSettListSIPSrvSetItemList::ConstructL
       
    59 // Symbian 2nd phase constructor can leave.
       
    60 // -----------------------------------------------------------------------------
       
    61 //
       
    62 void CSIPSettListSIPSrvSetItemList::ConstructL( 
       
    63     CCoeControl* aParent,
       
    64     TInt aResourceID )
       
    65     {
       
    66     __GSLOGSTRING("CSIPSettListSIPSrvSetItemList::ConstructL" )
       
    67     // Set server type.
       
    68     if ( aResourceID == R_SIP_PROXY_SETTING_VIEW_ITEM_LIST )
       
    69         {
       
    70         iServerType = EGSItemProxyServer;
       
    71         }
       
    72     else
       
    73         {
       
    74         iServerType = EGSItemRegistrarServer;
       
    75         }
       
    76     
       
    77     // Fetch new settings before constructing the item list
       
    78     iServerData = iModel->Settings();
       
    79 
       
    80     // Continue with construction
       
    81     SetContainerWindowL( *aParent );	
       
    82     ConstructFromResourceL( aResourceID );
       
    83 
       
    84     ListBox()->CreateScrollBarFrameL( ETrue );
       
    85     ListBox()->ScrollBarFrame()->SetScrollBarVisibilityL(
       
    86         CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto );
       
    87  
       
    88     ListBox()->View()->ItemDrawer()->SetFlags( CTextListItemDrawer::ESingleClickEnabled );
       
    89     
       
    90     // Remove two asterisks from ListBoxText() descriptor if needed.
       
    91     if ( iServerData->iPassword.Length() )
       
    92         {
       
    93         TInt pos = iPassword->SettingName().Length() + KSIPExtraPasswdChars;
       
    94         TPtr ptr = iPassword->ListBoxText()->Des();
       
    95         ptr.Delete( pos, KSIPRemovePasswdChars );     
       
    96         }
       
    97 
       
    98     }
       
    99 
       
   100 // -----------------------------------------------------------------------------
       
   101 // CSIPSettListSIPSrvSetItemList::NewL
       
   102 // Two-phased constructor.
       
   103 // -----------------------------------------------------------------------------
       
   104 //
       
   105 CSIPSettListSIPSrvSetItemList* CSIPSettListSIPSrvSetItemList::NewL(
       
   106     CCoeControl* aParent, 
       
   107     CSIPSettListSIPSrvSetModel* aModel,
       
   108     TInt aResourceID )
       
   109     {
       
   110     __GSLOGSTRING("CSIPSettListSIPSrvSetItemList::NewL" )
       
   111     CSIPSettListSIPSrvSetItemList* self = 
       
   112         new ( ELeave ) CSIPSettListSIPSrvSetItemList( aModel );
       
   113     
       
   114     CleanupStack::PushL( self );
       
   115     self->ConstructL( aParent, aResourceID );
       
   116     CleanupStack::Pop( self );
       
   117 
       
   118     return self;
       
   119     }
       
   120 
       
   121     
       
   122 // Destructor
       
   123 CSIPSettListSIPSrvSetItemList::~CSIPSettListSIPSrvSetItemList()
       
   124     {
       
   125     
       
   126     }
       
   127 
       
   128 // -----------------------------------------------------------------------------
       
   129 // CSIPSettListSIPSrvSetItemList::CreateSettingItemL
       
   130 // Creates the items to the list
       
   131 // -----------------------------------------------------------------------------
       
   132 //
       
   133 CAknSettingItem* CSIPSettListSIPSrvSetItemList::CreateSettingItemL( 
       
   134     TInt aSettingId )
       
   135     {   
       
   136     __GSLOGSTRING("CSIPSettListSIPSrvSetItemList::CreateSettingItemL" )
       
   137     __GSLOGSTRING1("CSIPSettListSIPSrvSetItemList::CreateSettingItemL aSettingId: %d", aSettingId)
       
   138     CAknSettingItem* item = NULL;
       
   139 
       
   140     switch ( aSettingId )
       
   141         {
       
   142         case EGSServerItemAddr:
       
   143             iAddress = new ( ELeave ) CSIPSettListSIPSrvTextSetItem(
       
   144                 aSettingId, iServerData->iAddress,
       
   145                 SIPServerSettingValidator::ValidateServerAddressL );
       
   146             item = iAddress;
       
   147             break;
       
   148 
       
   149         case EGSServerItemRealm:
       
   150             iRealm = new ( ELeave ) CAknTextSettingItem(
       
   151                 aSettingId, iServerData->iRealm );
       
   152             iRealm->SetSettingPageFlags( 
       
   153                 CAknTextSettingPage::EZeroLengthAllowed );            
       
   154             item = iRealm;
       
   155             break;
       
   156 
       
   157         case EGSServerItemUsername:
       
   158             // If opening view is registrar server view, 
       
   159             // service profile type is IMS and private user identity 
       
   160             // is set, set provisioned text to the setting item.
       
   161             if ( iServerType == EGSItemRegistrarServer && 
       
   162                 iModel->ProfileType() == TSIPProfileTypeInfo::EIms &&
       
   163                 iServerData->iPrivateIdentity.Length() > KErrNone )
       
   164                 {
       
   165                 HBufC* provisionedText = 
       
   166                     StringLoader::LoadLC( R_QTN_SIP_IMS_UNAME_PROVISIONED );
       
   167                 iUName.Copy( *provisionedText );
       
   168                 CleanupStack::PopAndDestroy( provisionedText );    
       
   169                 
       
   170                 iUsername = new ( ELeave ) CAknTextSettingItem(
       
   171                     aSettingId, iUName ); 
       
   172                 }
       
   173             else
       
   174                 {
       
   175                 iUsername = new ( ELeave ) CAknTextSettingItem(
       
   176                     aSettingId, iServerData->iUsername );
       
   177                 }    
       
   178             
       
   179             iUsername->SetSettingPageFlags( 
       
   180                 CAknTextSettingPage::EZeroLengthAllowed );
       
   181             item = iUsername;
       
   182             break;
       
   183 
       
   184         case EGSServerItemPassword:
       
   185             iPassword = new ( ELeave ) CSIPUpdatedPasswordSetItem(
       
   186                 aSettingId, CAknPasswordSettingItem::EAlpha,
       
   187                 iServerData->iPassword );
       
   188             iPassword->SetSettingPageFlags(
       
   189                 CAknTextSettingPage::EZeroLengthAllowed );    
       
   190             item = iPassword;
       
   191             break;
       
   192 
       
   193         case EGSServerItemRouting:
       
   194             iLooseRouting = new ( ELeave ) CAknEnumeratedTextPopupSettingItem(
       
   195                 aSettingId, iServerData->iLooseRouting );
       
   196             item = iLooseRouting;
       
   197             break;      
       
   198 
       
   199         case EGSServerItemPort:
       
   200         	if( iServerData->iPortNumber == KDefaultPortNumber )
       
   201                 {
       
   202                 iPortValue.Copy(NULLString);
       
   203                 iPort = new ( ELeave ) CSipSettIntegerEditItem( 
       
   204                 aSettingId, iPortValue );
       
   205                 } 
       
   206             else
       
   207                 {
       
   208                 iPortValue.Alloc();
       
   209                 iPortValue.AppendNum( iServerData->iPortNumber );
       
   210                 iPort = new ( ELeave ) CSipSettIntegerEditItem( 
       
   211                 aSettingId, iPortValue );
       
   212                 }
       
   213             
       
   214 			iPort->SetEmptyItemTextL( NULLString );
       
   215             item = iPort;
       
   216             break;
       
   217 
       
   218         case EGSServerItemTransportProtocol:
       
   219             iTransportProtocol = 
       
   220                 new ( ELeave ) CAknEnumeratedTextPopupSettingItem(
       
   221                     aSettingId, iServerData->iTransportProtocol );
       
   222             item = iTransportProtocol;
       
   223             break;
       
   224                
       
   225         default:
       
   226             // Leave if no matching ID is found
       
   227             User::Leave( KErrNotSupported );
       
   228             break;
       
   229         }
       
   230     
       
   231     return item;
       
   232     }          
       
   233 
       
   234 // -----------------------------------------------------------------------------
       
   235 // CSIPSettListSIPSrvSetItemList::EditItemL
       
   236 // Manages list box events
       
   237 // -----------------------------------------------------------------------------
       
   238 //
       
   239 void CSIPSettListSIPSrvSetItemList::EditItemL( 
       
   240     TInt aIndex, 
       
   241     TBool aCalledFromMenu )
       
   242     {
       
   243     __GSLOGSTRING("CSIPSettListSIPSrvSetItemList::EditItemL Start" )
       
   244     TInt currentIndex = ListBox()->CurrentItemIndex();
       
   245 
       
   246     // If currently shown profile is locked, show a note and return.
       
   247     if ( iModel->ProfileLocked() )
       
   248         {
       
   249         HBufC* lockedText = 
       
   250             StringLoader::LoadLC( R_QTN_SIP_INFONOTE_PROFILE_LOCKED );
       
   251         CAknInformationNote* lockedNote = new (ELeave) CAknInformationNote();
       
   252         lockedNote->ExecuteLD( *lockedText );
       
   253         CleanupStack::PopAndDestroy( lockedText );
       
   254         return;
       
   255         }
       
   256 
       
   257 	switch ( currentIndex )	
       
   258 	{
       
   259     	case EGSServerItemUsername:	// Username
       
   260     		{
       
   261 		    // If service profile type is IMS and private user identity is set
       
   262     		// don't allow editing the setting item. 
       
   263     		// Information note is diplayed.    
       
   264 
       
   265 	        if ( iServerType == EGSItemRegistrarServer &&
       
   266 	            iModel->ProfileType() == TSIPProfileTypeInfo::EIms &&
       
   267 	            iServerData->iPrivateIdentity.Length() > KErrNone )
       
   268 	            {
       
   269 	            HBufC* provisionedText = StringLoader::LoadLC(
       
   270 	                R_QTN_SIP_IMS_UNAME_NOT_EDITABLE );
       
   271 	            CAknInformationNote* note = 
       
   272 	                new ( ELeave ) CAknInformationNote( ETrue );
       
   273 	            note->ExecuteLD( provisionedText->Des() );
       
   274 	            CleanupStack::PopAndDestroy( provisionedText );   
       
   275 	            }
       
   276 	        else 
       
   277 	            {
       
   278 	            CAknSettingItemList::EditItemL( aIndex, aCalledFromMenu );
       
   279 	            }
       
   280 	                			
       
   281 			iUsername->StoreL();
       
   282         
       
   283         	AknTextUtils::StripCharacters( 
       
   284             	iServerData->iUsername, KAknStripListControlChars );
       
   285 	        CheckSettingForSpaces( iServerData->iUsername );
       
   286 	        iUsername->LoadL();
       
   287 	        iUsername->UpdateListBoxTextL();
       
   288 			break;
       
   289     		} 
       
   290 
       
   291 		case EGSServerItemAddr:		// Address 
       
   292 			{
       
   293         	CAknSettingItemList::EditItemL( aIndex, aCalledFromMenu );    			
       
   294 
       
   295 	        iAddress->StoreL();
       
   296         
       
   297 	        AknTextUtils::StripCharacters( 
       
   298     	        iServerData->iAddress, KAknStripListControlChars );
       
   299         
       
   300         	CheckSettingForSpaces( iServerData->iAddress );
       
   301         	iAddress->LoadL();
       
   302         	iAddress->UpdateListBoxTextL();
       
   303 			break;
       
   304 			}
       
   305     	
       
   306 		case EGSServerItemRealm:	// Realm
       
   307 			{
       
   308         	CAknSettingItemList::EditItemL( aIndex, aCalledFromMenu );    			
       
   309 
       
   310 			iRealm->StoreL();
       
   311 	        
       
   312 	        AknTextUtils::StripCharacters( 
       
   313 	            iServerData->iRealm, KAknStripListControlChars );
       
   314 	        
       
   315 	        CheckSettingForSpaces( iServerData->iRealm );
       
   316 	        iRealm->LoadL();
       
   317 	        iRealm->UpdateListBoxTextL();	
       
   318 			break;
       
   319 			}
       
   320 			
       
   321 		case EGSServerItemPassword:	// // Password
       
   322 			{
       
   323 	    	// Catch right soft key press in password field to reject 
       
   324 	    	// password change, if cancel is pressed.	
       
   325 		    CSIPSettListSIPSrvTakeOverCBAKeyPress* takeOverCancelKey = 
       
   326 		    		CSIPSettListSIPSrvTakeOverCBAKeyPress::NewLC();			
       
   327             CAknSettingItemList::EditItemL( aIndex, aCalledFromMenu );
       
   328 			
       
   329 			// Accept password, if the cancel key hasn't pressed
       
   330 			if ( !takeOverCancelKey->BackCalled() )
       
   331 				{
       
   332 				iServerData->iPasswordChanged = ETrue;
       
   333 				}
       
   334  
       
   335 			CleanupStack::PopAndDestroy ( takeOverCancelKey );	
       
   336 
       
   337 	        iPassword->StoreL();
       
   338 	        
       
   339 	        AknTextUtils::StripCharacters( 
       
   340 	            iServerData->iPassword, KAknStripListControlChars );
       
   341 	        
       
   342 	        CheckSettingForSpaces( iServerData->iPassword );
       
   343 	        iPassword->LoadL();
       
   344 	        iPassword->UpdateListBoxTextL();
       
   345 	        
       
   346 	        // Remove two asterisks from ListBoxText() descriptor if needed.
       
   347 	        if ( iServerData->iPassword.Length() )
       
   348 	            {
       
   349 	            TInt pos = iPassword->SettingName().Length() + KSIPExtraPasswdChars;
       
   350 	            TPtr ptr = iPassword->ListBoxText()->Des();
       
   351 	            ptr.Delete( pos, KSIPRemovePasswdChars );     
       
   352 	            }
       
   353 
       
   354 			break;
       
   355 			}
       
   356 		case EGSRegisterServerItemPort:
       
   357 		    {
       
   358 			if( iServerType == EGSItemRegistrarServer )
       
   359 			    {
       
   360 				CAknSettingItemList::EditItemL( aIndex, aCalledFromMenu );
       
   361 				CSipSettIntegerEditItem *Port =  static_cast<CSipSettIntegerEditItem *>(iPort);
       
   362 				iServerData->iPortNumber = Port->iValue;	     
       
   363 			    Port->UpdateListBoxTextL();
       
   364 				}
       
   365 			else
       
   366 			    {
       
   367 			    CAknSettingItemList::EditItemL( aIndex, aCalledFromMenu ); 
       
   368 				}
       
   369 			}
       
   370 			break;	
       
   371 		case EGSServerItemPort:
       
   372 		    {
       
   373 			if( iServerType == EGSItemProxyServer )
       
   374 			    {
       
   375 				CAknSettingItemList::EditItemL( aIndex, aCalledFromMenu );
       
   376 				CSipSettIntegerEditItem *Port =  static_cast<CSipSettIntegerEditItem *>(iPort);
       
   377 				iServerData->iPortNumber = Port->iValue;	     
       
   378 			    Port->UpdateListBoxTextL();
       
   379 				}
       
   380 			else
       
   381 			    {
       
   382 			    CAknSettingItemList::EditItemL( aIndex, aCalledFromMenu ); 
       
   383 				}
       
   384 			}
       
   385 			break;
       
   386 		default:
       
   387 			{
       
   388         	CAknSettingItemList::EditItemL( aIndex, aCalledFromMenu );    			
       
   389 			break;
       
   390 			}
       
   391 		}
       
   392     __GSLOGSTRING("CSIPSettListSIPSrvSetItemList::EditItemL End" )
       
   393     }
       
   394 
       
   395 // -----------------------------------------------------------------------------
       
   396 // CSIPSettListSIPSrvSetItemList::HandleListBoxEventL
       
   397 // Manages list box events
       
   398 // -----------------------------------------------------------------------------
       
   399 //
       
   400 void CSIPSettListSIPSrvSetItemList::HandleListBoxEventL( 
       
   401     CEikListBox* aListBox,
       
   402     TListBoxEvent aEventType )
       
   403     {
       
   404     __GSLOGSTRING("CSIPSettListSIPSrvSetItemList::HandleListBoxEventL Start" )
       
   405     TInt currentIndex = aListBox->CurrentItemIndex();
       
   406  
       
   407     if ( aEventType == EEventEnterKeyPressed ||
       
   408     	aEventType == EEventItemSingleClicked  )
       
   409         {
       
   410     // If currently shown profile is locked, show a note and return.
       
   411     if ( iModel->ProfileLocked() )
       
   412         {
       
   413         HBufC* lockedText = 
       
   414             StringLoader::LoadLC( R_QTN_SIP_INFONOTE_PROFILE_LOCKED );
       
   415         CAknInformationNote* lockedNote = new (ELeave) CAknInformationNote();
       
   416         lockedNote->ExecuteLD( *lockedText );
       
   417         CleanupStack::PopAndDestroy( lockedText );
       
   418         return;
       
   419         }
       
   420         // Proxy server.
       
   421         if ( iServerType == EGSItemProxyServer )
       
   422             {
       
   423             // Loose routing.
       
   424             if ( currentIndex == EGSServerItemRouting )
       
   425                 {
       
   426                 iLooseRouting->StoreL();
       
   427                 if ( iServerData->iLooseRouting == EGSLooseRoutingOff )
       
   428                     {
       
   429                     iServerData->iLooseRouting = EGSLooseRoutingOn;
       
   430                     }
       
   431                 else
       
   432                     {
       
   433                     iServerData->iLooseRouting = EGSLooseRoutingOff;
       
   434                     }
       
   435                 iLooseRouting->LoadL();
       
   436                 iLooseRouting->UpdateListBoxTextL();    
       
   437                 aListBox->ActivateL();    
       
   438                 aListBox->HandleItemAdditionL();
       
   439                 return;
       
   440                 }
       
   441             }
       
   442         // Registrar server. (No loose routing option.)
       
   443         else
       
   444             {
       
   445             // Do nothing
       
   446             }
       
   447         }
       
   448                      
       
   449     CAknSettingItemList::HandleListBoxEventL( aListBox, aEventType );   
       
   450     __GSLOGSTRING("CSIPSettListSIPSrvSetItemList::HandleListBoxEventL End" )
       
   451     }
       
   452     
       
   453 // -----------------------------------------------------------------------------
       
   454 // CGSSettListSIPSrvSetItemList::CheckSettingForSpaces
       
   455 // Checks that does setting contains only spaces and removes them if needed.
       
   456 // -----------------------------------------------------------------------------
       
   457 //
       
   458 void CSIPSettListSIPSrvSetItemList::CheckSettingForSpaces( TDes& aSettingText )
       
   459     {
       
   460     __GSLOGSTRING("CSIPSettListSIPSrvSetItemList::CheckSettingForSpaces Start" )
       
   461     TBool onlySpaces( ETrue );
       
   462     
       
   463     // Check that is there other characters than spaces.
       
   464     for ( TInt i = 0; i < aSettingText.Length() && onlySpaces; i++ )
       
   465         {
       
   466         const TChar KSpaceCharacter = ' ';
       
   467         if ( aSettingText[ i ] != KSpaceCharacter )
       
   468             {
       
   469             onlySpaces = EFalse;
       
   470             }
       
   471         }
       
   472     
       
   473     // If only spaces, reset setting value.
       
   474     if ( onlySpaces )
       
   475         {
       
   476         aSettingText.Zero();
       
   477         }
       
   478     __GSLOGSTRING("CSIPSettListSIPSrvSetItemList::CheckSettingForSpaces End" )
       
   479     }
       
   480 
       
   481 //  End of File