diff -r a3a1ae9acec6 -r da5135c61bad meetingrequest/mrgui/src/cmrtoolbar.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/meetingrequest/mrgui/src/cmrtoolbar.cpp Wed Mar 31 21:08:33 2010 +0300 @@ -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 +#include +#include +#include +#include + +// 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( + 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( + 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( + 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 = iToolbar->Rect(); + } + + return rect; + } + +// End of file