meetingrequest/mrgui/src/cmrtoolbar.cpp
branchRCL_3
changeset 64 3533d4323edc
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/meetingrequest/mrgui/src/cmrtoolbar.cpp	Wed Sep 01 12:28:57 2010 +0100
@@ -0,0 +1,256 @@
+/*
+* Copyright (c) 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:  MR Toolbar impl
+*
+*/
+
+#include "cmrtoolbar.h"
+
+#include "esmrcommands.h"
+#include "cmrasynchcmd.h"
+#include <esmrgui.rsg>
+#include <eikenv.h>
+#include <eikcolib.h>
+#include <akntoolbar.h>
+#include <aknbutton.h>
+
+// LOCAL DEFINITIONS
+namespace // codescanner::namespace
+    {
+    const TInt KFirstItemIndex( 0 );
+    const TInt KSecondItemIndex( 1 );
+    const TInt KThirdItemIndex( 2 );    
+    }
+        
+// CLASS MEMBERS DEFINITIONS
+// ---------------------------------------------------------------------------
+// CMRToolbar::CMRToolbar
+// ---------------------------------------------------------------------------
+//
+CMRToolbar::CMRToolbar()
+    {
+    // Do nothing
+    }
+
+// ---------------------------------------------------------------------------
+// CMRToolbar::NewL
+// ---------------------------------------------------------------------------
+//
+CMRToolbar* CMRToolbar::NewL()
+    {
+    CMRToolbar* self = new ( ELeave ) CMRToolbar();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CMRToolbar::~CMRToolbar
+// ---------------------------------------------------------------------------
+//
+CMRToolbar::~CMRToolbar()
+    {
+    if( iToolbar )
+        {
+        RemovePreviousItems();
+        delete iToolbar;
+        }
+    if( iPreviousToolbar )
+        {
+        iPreviousToolbar->SetToolbarVisibility( iPreviousVisibility ); 
+        static_cast<CEikAppUiFactory*>( 
+        		 CEikonEnv::Static()->AppUiFactory() )->SetViewFixedToolbar( iPreviousToolbar );// codescanner::eikonenvstatic
+        }
+
+    iItemIdArray.Close();   
+    delete iAsyncCmd;
+    }
+
+// ---------------------------------------------------------------------------
+// CMRToolbar::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CMRToolbar::ConstructL()
+    {
+    // This does not guarantee that the iPreviousToolbar is constructed
+	iPreviousToolbar = static_cast<CEikAppUiFactory*>( 
+			CEikonEnv::Static()->AppUiFactory() )->CurrentFixedToolbar();// codescanner::eikonenvstatic
+	if ( iPreviousToolbar )
+	    {
+	    iPreviousVisibility = iPreviousToolbar->IsShown();
+	    iPreviousToolbar->SetToolbarVisibility( EFalse );
+	    }
+    }
+
+// ---------------------------------------------------------------------------
+// CMRToolbar::InitializeToolbar
+// ---------------------------------------------------------------------------
+//
+void CMRToolbar::InitializeToolbarL( 
+        TToolbarContext aCntx,
+        CAknToolbar* aNativeToolbar )
+    {	
+    if( aNativeToolbar )
+        {
+        iToolbar = aNativeToolbar;
+        }
+    else
+        {
+        iToolbar = CAknToolbar::NewL( R_GLOBAL_TOOLBAR );
+        }
+    
+    iToolbar->SetToolbarObserver( this );
+    static_cast<CEikAppUiFactory*>( 
+    			CEikonEnv::Static()->AppUiFactory() )->SetViewFixedToolbar( iToolbar );// codescanner::eikonenvstatic
+    // Construct the correct toolbar for the context
+	TInt error( KErrNone );
+	TRAP( error, ConstructToolbarL( aCntx ) );
+	if ( error != KErrNone )
+			{
+			CEikonEnv::Static()->HandleError( error );// codescanner::eikonenvstatic
+			}
+    }
+
+// ---------------------------------------------------------------------------
+// CMRToolbar::SetObserver
+// ---------------------------------------------------------------------------
+//
+void CMRToolbar::ShowToolbar( TBool aShowToolbar )
+    {           
+    if( iToolbar )
+        {
+        iToolbar->SetToolbarVisibility( aShowToolbar );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CMRToolbar::SetObserver
+// ---------------------------------------------------------------------------
+//
+void CMRToolbar::SetObserver( MAknToolbarObserver* aObserver )
+    {
+    iObserver = aObserver;
+    }
+
+// ---------------------------------------------------------------------------
+// CMRToolbar::ConstructToolbarL
+// ---------------------------------------------------------------------------
+//
+void CMRToolbar::ConstructToolbarL( TToolbarContext aCntx )
+    {
+    RemovePreviousItems();
+    
+    switch( aCntx )
+        {
+        case EMRViewerFromMailApp:
+        case EMRViewerAttendee:
+        	{
+            iItemIdArray.Append( EESMRCmdAcceptMR );
+            iItemIdArray.Append( EESMRCmdTentativeMR );
+            iItemIdArray.Append( EESMRCmdDeclineMR );
+            
+            ConstructButtonL( 
+                    R_TOOLBAR_BUTTON_ACCEPT, 
+                    KFirstItemIndex );
+            ConstructButtonL( 
+                    R_TOOLBAR_BUTTON_TENTATIVE, 
+                    KSecondItemIndex );
+            ConstructButtonL( 
+                    R_TOOLBAR_BUTTON_DECLINE, 
+                    KThirdItemIndex );       	        	                        
+        	break;
+        	}
+        default:
+            break;
+        }    
+    }
+
+// ---------------------------------------------------------------------------
+// CMRToolbar::ConstructButtonL
+// ---------------------------------------------------------------------------
+//
+void CMRToolbar::ConstructButtonL( TInt aResId, TInt aIndex )
+    {    
+    TInt flags( 0 );
+    CAknButton* newButton = 
+        CAknButton::NewL( aResId );
+    // Ownership of the button is taken right away, no need for CleanupStack
+    iToolbar->AddItemL( 
+            newButton, EAknCtButton, iItemIdArray[aIndex], 
+            flags, aIndex );
+    }
+        
+// ---------------------------------------------------------------------------
+// CMRToolbar::DynInitToolbarL
+// ---------------------------------------------------------------------------
+//
+void CMRToolbar::DynInitToolbarL ( TInt aResourceId, CAknToolbar *aToolbar )
+    {
+    if( iObserver )
+        {
+        iObserver->DynInitToolbarL( aResourceId, aToolbar );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CMRToolbar::OfferToolbarEventL
+// ---------------------------------------------------------------------------
+//
+void CMRToolbar::OfferToolbarEventL ( TInt aCommand )
+    {
+    // Handle commands here
+    if( iObserver )
+        {
+        // Lazy init
+        if( !iAsyncCmd )
+            {
+            iAsyncCmd = CMRAsynchCmd::NewL();
+            }
+        // This will notify observer asynchronously
+        iAsyncCmd->NotifyObserver( aCommand, iObserver );
+        }    
+    }
+
+// ---------------------------------------------------------------------------
+// CMRToolbar::RemovePreviousItems
+// ---------------------------------------------------------------------------
+//
+void CMRToolbar::RemovePreviousItems()
+    {
+    TInt count( iItemIdArray.Count() );
+    for( TInt i = 0; i < count; ++i )
+        {
+        iToolbar->RemoveItem( iItemIdArray[ i ] );
+        }    
+    iItemIdArray.Reset();
+    }
+
+// ---------------------------------------------------------------------------
+// CMRToolbar::Rect
+// ---------------------------------------------------------------------------
+//
+TRect CMRToolbar::Rect()
+    {
+    TRect rect( 0, 0, 0, 0 );
+    
+    if( iToolbar && iToolbar->IsShown() )
+        {
+        rect.SetRect( iToolbar->PositionRelativeToScreen(), iToolbar->Rect().Size() );
+        }
+    
+    return rect;
+    }
+
+// End of file