pkiutilities/SecModUI/src/SecModUIViewAccess.cpp
changeset 0 164170e6151a
child 5 3b17fc5c9564
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pkiutilities/SecModUI/src/SecModUIViewAccess.cpp	Tue Jan 26 15:20:08 2010 +0200
@@ -0,0 +1,503 @@
+/*
+* Copyright (c) 2005-2009 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 the CSecModUIViewAccess class
+*
+*/
+
+
+// INCLUDE FILES
+#include  "SecModUIContainerAccess.h"
+#include  "SecModUIViewAccess.h" 
+#include  "SecModUIModel.h"
+#include  "SecModUISyncWrapper.h"
+#include  "secmodui.hrh"
+#include  <SecModUI.rsg>
+#include  <aknViewAppUi.h>
+#include  <avkon.hrh>
+#include  <aknlists.h>
+#include  <eikmenup.h>
+#include  <featmgr.h>
+
+// CONSTANTS
+
+// ================= MEMBER FUNCTIONS =======================
+
+// -----------------------------------------------------------------------------
+// CSecModUIViewAccess::CSecModUIViewAccess
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CSecModUIViewAccess::CSecModUIViewAccess(CSecModUIModel& aModel):
+    CSecModUIViewBase(aModel)
+    {
+    }
+
+// ---------------------------------------------------------
+// CSecModUIViewAccess::ConstructL(const TRect& aRect)
+// EPOC two-phased constructor
+// ---------------------------------------------------------
+//
+void CSecModUIViewAccess::ConstructL()
+    {
+    BaseConstructL( R_SECMODUI_VIEW_ACCESS );
+    }
+
+// ---------------------------------------------------------
+// CSecModUIViewAccess::~CSecModUIViewAccess()
+// destructor
+// ---------------------------------------------------------
+//
+CSecModUIViewAccess::~CSecModUIViewAccess()
+    {
+    
+    }
+
+// ---------------------------------------------------------
+// CSecModUIViewCode::NewLC
+// Two-phased constructor.
+// ---------------------------------------------------------
+//
+CSecModUIViewAccess* CSecModUIViewAccess::NewLC(CSecModUIModel& aModel)
+    {
+    CSecModUIViewAccess* self = new (ELeave) CSecModUIViewAccess(aModel);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    return self;
+    }
+
+// ---------------------------------------------------------
+// TUid CSecModUIViewAccess::Id()
+//
+// ---------------------------------------------------------
+//
+TUid CSecModUIViewAccess::Id() const
+    {
+    return KSecModUIViewAccessId;
+    }
+
+// ---------------------------------------------------------
+// void CSecModUIViewCode::CreateContainerL()
+// Creates container
+// ---------------------------------------------------------
+//
+void CSecModUIViewAccess::CreateContainerL()
+    {
+    iContainer = new (ELeave) CSecModUIContainerAccess(iModel, this);
+    }
+
+// ---------------------------------------------------------
+// CSecModUIViewAccess::AddNavipaneLabelL()
+// Default implementation is empty
+// ---------------------------------------------------------
+//
+void CSecModUIViewAccess::AddNaviPaneLabelL()
+    { 
+    DoAddNaviPaneL(R_NAVIPANE_ACCESS_TEXT);   
+    }
+
+// ---------------------------------------------------------
+// CSecModUIViewAccess::HandleCommandL(TInt aCommand)
+// takes care of view command handling
+// ---------------------------------------------------------
+//
+void CSecModUIViewAccess::HandleCommandL(TInt aCommand)
+    {
+    if (iModel.Wrapper().IsActive())
+        {
+        return;
+        }   
+    switch ( aCommand )
+        {
+        case ESecModUICmdChange:
+            {
+            HandleChangeL();            
+            break;
+            }
+        case ESecModUICmdUnblock:
+            {
+            iModel.UnblockPinL(KPinGIndex);
+            UpdateListBoxItemL(EIndexCodeStatus);
+            UpdateListBoxItemL(EIndexCodeRequest);
+            UpdateCbaL();
+            break;
+            }
+        case ESecModUICmdClose:
+            {
+            iModel.CloseAuthObjL(KPinGIndex);
+            UpdateListBoxItemL(EIndexCodeStatus);
+            UpdateCbaL();
+            break;
+            }
+        case EAknSoftkeyChange:
+            {
+            HandleChangeL();	
+            break;	
+            }
+        case EAknSoftkeyClose:
+            {
+            iModel.CloseAuthObjL(KPinGIndex);
+            UpdateListBoxItemL(EIndexCodeStatus);
+            UpdateCbaL();
+            break;	
+            }
+            
+        case EAknSoftkeyUnlock:
+            {
+            iModel.UnblockPinL(KPinGIndex);
+            UpdateListBoxItemL(EIndexCodeStatus);
+            UpdateListBoxItemL(EIndexCodeRequest);
+            UpdateCbaL();
+            break;	
+            }
+        default:
+            {
+            CSecModUIViewBase::HandleCommandL( aCommand );
+            break;
+            }
+        }
+    }
+
+// ---------------------------------------------------------
+// CSecModUIViewAccess::HandleChangeL()
+// takes care of Change command handling
+// ---------------------------------------------------------
+//
+void CSecModUIViewAccess::HandleChangeL()
+    {
+    TInt currentItem = iContainer->ListBox().CurrentItemIndex();
+    
+    switch (currentItem)
+        {
+        case EIndexCodeLabel:
+            {
+            iModel.ChangeOrUnblockPinL(KPinGIndex);
+            UpdateListBoxItemL(EIndexCodeStatus);
+            UpdateCbaL();
+            break;
+            }
+        case EIndexCodeRequest:
+            {
+            if (KErrCancel != iModel.ChangeCodeRequestL(KPinGIndex))
+                {
+                UpdateListBoxItemL(EIndexCodeRequest);
+                UpdateListBoxItemL(EIndexCodeStatus);
+                UpdateCbaL();
+                }
+            break;
+            }
+        default:
+            {
+            break;
+            }                
+        }
+    }
+// ---------------------------------------------------------
+// CSecModUIViewAccess::HandleForegroundEventL()
+// ---------------------------------------------------------
+//
+void CSecModUIViewAccess::HandleForegroundEventL(TBool aForeground)
+    {
+	if( aForeground && !iModel.Wrapper().IsActive() )
+	    {
+	    UpdateListBoxItemL(EIndexCodeRequest);
+        UpdateListBoxItemL(EIndexCodeStatus);
+        UpdateCbaL();	
+	    }
+    }
+
+
+// ---------------------------------------------------------
+// CSecModUIViewAccess::UpdateListBoxItemL(TInt aIndex)
+// Updates listbox item
+// ---------------------------------------------------------
+//
+void CSecModUIViewAccess::UpdateListBoxItemL(TInt aIndex)
+    {
+    TBuf<KMaxSettItemSize> item; 
+        CDesCArray* itemArray = STATIC_CAST(CDesCArray*, 
+            iContainer->ListBox().Model()->ItemTextArray());
+    switch(aIndex)
+        {
+        case EIndexCodeRequest:
+            {
+            iModel.PINRequestItemL(KPinGIndex, item);
+            break;
+            }
+        case EIndexCodeStatus:
+            {
+            iModel.PINStatusItemL(KPinGIndex, item, EFalse);
+            break;
+            }
+        default: 
+            {
+            return;
+            }
+        }
+    itemArray->Delete(aIndex);    
+    itemArray->InsertL(aIndex, item);
+    iContainer->ListBox().HandleItemAdditionL();
+    iContainer->DrawNow();
+    }
+
+// ---------------------------------------------------------
+// CSecModUIViewAccess::UpdateCbaL()
+// Updates Cba area
+// ---------------------------------------------------------
+//    
+void CSecModUIViewAccess::UpdateCbaL()
+    {
+    TInt currentItem = iContainer->ListBox().CurrentItemIndex();
+    switch (currentItem)
+            {
+            case EIndexCodeLabel:
+                {
+                 if( iModel.PinChangeable(KPinGIndex) )
+                     {
+                     SetCbaL(R_SECMODUI_SOFTKEYS_OPTIONS_BACK_CHANGE);
+                     }   
+                 else
+                     {
+                     if( !iModel.PinUnblockable(KPinGIndex) )
+                         {
+                         SetCbaL(R_SECMODUI_SOFTKEYS_OPTIONS_BACK);
+                         } 
+                     else
+                         {
+                         SetCbaL(R_SECMODUI_SOFTKEYS_OPTIONS_BACK_UNBLOCK);	
+                         }     
+                     }    	    
+                break;
+                }
+            case EIndexCodeRequest:
+                {
+                if( iModel.PinRequestChangeable(KPinGIndex) )
+                     {
+                     SetCbaL(R_SECMODUI_SOFTKEYS_OPTIONS_BACK_CHANGE);
+                     }   
+                 else
+                     {
+                     if( !iModel.PinUnblockable(KPinGIndex) )
+                         {
+                         SetCbaL(R_SECMODUI_SOFTKEYS_OPTIONS_BACK);
+                         } 
+                     else
+                         {
+                         SetCbaL(R_SECMODUI_SOFTKEYS_OPTIONS_BACK_UNBLOCK);	
+                         }     
+                     }     
+                break;
+                }
+            case EIndexCodeStatus:
+                {
+                if( !iModel.PinChangeable(KPinGIndex) && iModel.PinUnblockable(KPinGIndex))
+                    {
+                    SetCbaL(R_SECMODUI_SOFTKEYS_OPTIONS_BACK_UNBLOCK);	
+                    }     
+                else if(iModel.PinOpen(KPinGIndex))  
+                    {
+                	SetCbaL(R_SECMODUI_SOFTKEYS_OPTIONS_BACK_CLOSE);
+                    }
+                else
+                    {
+                    SetCbaL(R_SECMODUI_SOFTKEYS_OPTIONS_BACK);	
+                    }    
+                
+                break;
+                }
+            default:
+                {
+                break;
+                }
+            }    	
+    }
+
+
+// ---------------------------------------------------------
+// CSecModUIViewAccess::SetCbaL( TInt aCbaResourceId )
+// Sets Cba area
+// ---------------------------------------------------------
+//  
+void CSecModUIViewAccess::SetCbaL( TInt aCbaResourceId )
+    {
+	CEikButtonGroupContainer*  cba = Cba();
+    cba->SetCommandSetL(aCbaResourceId);
+    cba->DrawNow();
+    }
+    
+    
+// ---------------------------------------------------------
+// TUid CSecModUIViewAccess::DynInitMenuPaneL(
+//      TInt aResourceId, CEikMenuPane* aMenuPane)
+//
+// ---------------------------------------------------------
+//
+void CSecModUIViewAccess::DynInitMenuPaneL(
+    TInt aResourceId, 
+    CEikMenuPane* aMenuPane)
+    {
+    if( R_SECMODUI_VIEW_ACCESS_MENU == aResourceId )
+        {        
+        if( aResourceId == !FeatureManager::FeatureSupported( KFeatureIdHelp ) )
+            {
+            aMenuPane->DeleteMenuItem( EAknCmdHelp ); //remove help
+            }     
+
+        TInt currentItem = iContainer->ListBox().CurrentItemIndex();
+        if( currentItem == EIndexCodeLabel )
+            {
+            if( !iModel.PinChangeable(KPinGIndex) )
+                {
+                aMenuPane->SetItemDimmed( ESecModUICmdChange, ETrue );
+                }
+            }
+        else if( currentItem == EIndexCodeRequest )
+            {
+            if( !iModel.PinRequestChangeable(KPinGIndex) )
+                {
+                aMenuPane->SetItemDimmed( ESecModUICmdChange, ETrue );
+                }
+            }
+        else // it is EIndexCodeStatus
+            {
+            aMenuPane->SetItemDimmed( ESecModUICmdChange, ETrue );
+            }
+
+        if( !iModel.PinUnblockable(KPinGIndex) )
+            {
+            aMenuPane->SetItemDimmed( ESecModUICmdUnblock, ETrue );
+            }
+        if( !iModel.PinOpen(KPinGIndex) )
+            {
+            aMenuPane->SetItemDimmed( ESecModUICmdClose, ETrue );
+            }
+        }
+    }
+
+// ---------------------------------------------------------
+// CSecModUIViewAccess::HandleEnterKeyL(TInt aIndex)
+//     
+// ---------------------------------------------------------
+//   
+void CSecModUIViewAccess::HandleEnterKeyL(TInt aIndex)
+    {
+    switch(aIndex)
+        {        
+        case EIndexCodeLabel:
+            {
+            HandleChangeL();
+            break;
+            }
+        case EIndexCodeRequest:
+            {
+            HandleChangeL();
+            break;
+            }
+        case EIndexCodeStatus:
+            {
+            iModel.CloseAuthObjL(KPinGIndex);
+            UpdateListBoxItemL(EIndexCodeStatus);
+            UpdateCbaL();
+            break;
+            }
+        default:
+            {
+            break;
+            }
+        }
+    }
+
+// ---------------------------------------------------------
+// CSecModUIViewAccess::HandleListBoxEventL(
+//     CEikListBox* aListBox, TListBoxEvent aEventType)
+// ---------------------------------------------------------
+//   
+void CSecModUIViewAccess::HandleListBoxEventL(
+    CEikListBox* aListBox, 
+    TListBoxEvent aEventType)
+    {
+    if(iModel.Wrapper().IsActive())
+        {
+        return;	
+        }
+        
+    TInt index = aListBox->CurrentItemIndex();
+
+    switch( aEventType )
+		{
+		case EEventEnterKeyPressed:
+		case EEventItemDoubleClicked:
+		case EEventItemSingleClicked:
+			{
+			HandleEnterKeyL(index);
+            break;
+			}
+        default:
+            {
+			break;
+            }
+		}           
+    }
+
+
+// ---------------------------------------------------------
+// CSecModUIViewAccess::DoDeactivate()
+// 
+// ---------------------------------------------------------
+//
+void CSecModUIViewAccess::DoActivateL(
+   const TVwsViewId& aPrevViewId,TUid /*aCustomMessageId*/,
+   const TDesC8& /*aCustomMessage*/)
+    {
+  
+    if (KNullUid == iPrevViewId.iViewUid)
+        {
+        iPrevViewId = aPrevViewId;
+        }
+    SetTitlePaneL();
+    AddNaviPaneLabelL();
+                    
+    if (!iContainer)
+        {
+        CreateContainerL();
+        iContainer->SetMopParent(this);
+        iContainer->ConstructL(ClientRect());
+        iContainer->ListBox().SetListBoxObserver(this);
+        AppUi()->AddToStackL(*this, iContainer);
+        }         
+   iContainer->MakeVisible(ETrue);
+   iContainer->SetRect(ClientRect());
+   iContainer->ActivateL();
+   
+   UpdateCbaL();  
+   }
+
+// ---------------------------------------------------------
+// CSecModUIViewAccess::DoDeactivate()
+// 
+// ---------------------------------------------------------
+//
+void CSecModUIViewAccess::DoDeactivate()
+    {
+    if ( iContainer )
+        {
+        AppUi()->RemoveFromViewStack( *this, iContainer );
+        }
+    
+    delete iContainer;
+    iContainer = NULL;    
+    }    
+    
+// End of File
+