diff -r cad71a31b7fc -r e36f3802f733 voiceui/pbkinfoviewimpl/src/pbkinfoviewdialogutil.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/voiceui/pbkinfoviewimpl/src/pbkinfoviewdialogutil.cpp Wed Sep 01 12:29:17 2010 +0100 @@ -0,0 +1,295 @@ +/* +* Copyright (c) 2005 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: Utility class for info view dialog. +* +*/ + + +// INCLUDE FILES + +#include "pbkinfoviewdialogutil.h" +#include "pbkinfoviewutil.h" +#include "pbkinfoviewdefines.h" + +#include // CAknTitlePane +#include // CAknTitlePane +#include // CAknInformationNote +#include // CEikMenuPane +#include // CAknSingleHeadingPopupMenuStyleListBox + +#include + +#include "rubydebug.h" + + +// ============================ MEMBER FUNCTIONS =============================== + + +/******************************************************************************* + * class TDialogUtil + *******************************************************************************/ + +// ----------------------------------------------------------------------------- +// TDialogUtil::ConstructListBoxItemL +// @param aID Item ID of the masked bitmap to be created. +// @param aFilename Filename to be used to construct the item, +// @param aFileBitmapId Id (for bitmap) in the file. +// @param aFileMaskId Id (for mask) in the file. +// @return CGulIcon* Pointer to the newly created CGulIcon object. +// Ownership of the object is transferred to the caller. +// ----------------------------------------------------------------------------- +// +HBufC* TDialogUtil::ConstructListBoxItemLC( const TDesC& aFirstLine, + const TDesC& aSecondLine, + TInt aIndex1 ) + { + _LIT( KFormat, "%d\t%S\t%S" ); + + TInt len = aFirstLine.Length() + aSecondLine.Length() + KBufSize16; + + HBufC* hBuf = HBufC::NewLC( len ); + TPtr ptr = hBuf->Des(); + + ptr.Format( KFormat , aIndex1, &aFirstLine, &aSecondLine ); + + return hBuf; + } + +// ----------------------------------------------------------------------------- +// TDialogUtil::CreateIconL +// +// Constructs an independent CGulIcon object with fallback support. +// If no matching item (aId) is found in the currently active skin, +// attempts to construct the item using the given file (last 3 parameters). +// @param aID Item ID of the masked bitmap to be created. +// @param aFilename Filename to be used to construct the item, +// @param aFileBitmapId Id (for bitmap) in the file. +// @param aFileMaskId Id (for mask) in the file. +// @return CGulIcon* Pointer to the newly created CGulIcon object. +// Ownership of the object is transferred to the caller. +// ----------------------------------------------------------------------------- +// +CGulIcon* TDialogUtil::CreateIconL( TAknsItemID aId, const TDesC& aFileName, TInt aFileBitmapId, TInt aFileMaskId ) + { + CGulIcon* icon = AknsUtils::CreateGulIconL( AknsUtils::SkinInstance(), aId, aFileName, aFileBitmapId, aFileMaskId); + return icon; + } + +/******************************************************************************* + * class CStatusPaneHandler + *******************************************************************************/ + +// ----------------------------------------------------------------------------- +// CStatusPaneHandler::NewLC +// +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CStatusPaneHandler* CStatusPaneHandler::NewL(CAknAppUi* aAppUi) + { + CStatusPaneHandler* self = new (ELeave) CStatusPaneHandler(aAppUi); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +// ----------------------------------------------------------------------------- +// Destructor +// +// ----------------------------------------------------------------------------- +// +CStatusPaneHandler::~CStatusPaneHandler() + { + TInt error( KErrNone ); + + TRAP( error, RestorePreviousTitleL() ); + if ( error != KErrNone ) + { + RUBY_DEBUG1( "RestoreOriginalTitleL() error: %d", error ); + } + + TRAP( error, RestoreOriginalImageL() ); + if ( error != KErrNone ) + { + RUBY_DEBUG1( "RestoreOriginalImageL() error: %d", error ); + } + } + +// ----------------------------------------------------------------------------- +// CStatusPaneHandler::ConstructL +// +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CStatusPaneHandler::ConstructL(void) + { + } + +// ----------------------------------------------------------------------------- +// CStatusPaneHandler::CStatusPaneHandler +// +// ----------------------------------------------------------------------------- +// +CStatusPaneHandler::CStatusPaneHandler( CAknAppUi* aAppUi ) : iAppUi( aAppUi ) + { + __ASSERT_ALWAYS( iAppUi, TPbkInfoViewUtil::Panic( KErrGeneral ) ); + + iOriginalTitleStored = EFalse; + iOriginalTitle = KNullDesC; + } + +// ---------------------------------------------------------------------------- +// CStatusPaneHandler::GetPreviousTitleL +// Gets the title from previous view. +// @param aAppUi Pointer to UI class. +// @param aText Title will be put to this variable. +// @return TBool ETrue: success / EFalse: failure. +// ---------------------------------------------------------------------------- +// +TBool CStatusPaneHandler::GetPreviousTitleL( CAknAppUi* aAppUi, TDes& aTitle ) + { + aTitle = KNullDesC; + + CEikStatusPane* statusPane = aAppUi->StatusPane(); + if ( statusPane && + statusPane->PaneCapabilities + ( TUid::Uid( EEikStatusPaneUidTitle) ).IsPresent() ) + { + CAknTitlePane* titlePane = static_cast + (statusPane->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) ) ); + if ( titlePane->Text() ) + { + TPbkInfoViewUtil::StrCopy( aTitle, *titlePane->Text() ); + return ETrue; + } + } + return EFalse; + } + +// ---------------------------------------------------------------------------- +// CStatusPaneHandler::SetTitleL +// Sets the dialog title. +// @param aAppUi Pointer to the UI class. +// @param aText Title text. +// ---------------------------------------------------------------------------- +// +void CStatusPaneHandler::SetTitleL( CAknAppUi* aAppUi, const TDesC& aTitle ) + { + CEikStatusPane* statusPane = aAppUi->StatusPane(); + if ( statusPane && + statusPane->PaneCapabilities + (TUid::Uid(EEikStatusPaneUidTitle)).IsPresent()) + { + CAknTitlePane* titlePane = static_cast + (statusPane->ControlL(TUid::Uid(EEikStatusPaneUidTitle))); + if ( titlePane->Text() ) + { + titlePane->SetTextL(aTitle); + } + } + } + +// ---------------------------------------------------------------------------- +// CStatusPaneHandler::StoreOriginalTitleL +// Sets the member variable for previous title. +// ---------------------------------------------------------------------------- +// +void CStatusPaneHandler::StoreOriginalTitleL() + { + TBool ret = GetPreviousTitleL( iAppUi, iOriginalTitle ); + + if ( ret ) + { + iOriginalTitleStored = ETrue; + } + } + +// ---------------------------------------------------------------------------- +// CStatusPaneHandler::RestorePreviousTitleL +// Restores previous title when returning to previous view. +// ---------------------------------------------------------------------------- +// +void CStatusPaneHandler::RestorePreviousTitleL() + { + if ( iOriginalTitleStored ) + { + SetTitleL( iAppUi, iOriginalTitle ); + } + } + +// ---------------------------------------------------------------------------- +// CStatusPaneHandler::SetTitleL +// Sets the dialog title. +// @param aResourceId Resource id from resource file. +// ---------------------------------------------------------------------------- +// +void CStatusPaneHandler::SetTitleL( TInt aResourceId ) + { + // Get title from resource file + HBufC* dialogTitle = StringLoader::LoadLC( aResourceId ); + + SetTitleL( iAppUi, dialogTitle->Des() ); + CleanupStack::PopAndDestroy( dialogTitle ); + } + +// ---------------------------------------------------------------------------- +// CStatusPaneHandler::RestoreOriginalImageL +// Restores previous image when returning to previous view. +// ---------------------------------------------------------------------------- +// +void CStatusPaneHandler::RestoreOriginalImageL() + { + if (!iOriginalImage) + { + return; // image has not been replaced + } + + CEikImage* image = NULL; + TRAPD(err, image = SetImageL( iAppUi, iOriginalImage ) ); + + if (err == KErrNone && image) + { + delete image; // delete our own image + } + else + { + delete iOriginalImage; // delete original image (could not restore it) + iOriginalImage = NULL; + } + } + +// ---------------------------------------------------------------------------- +// CStatusPaneHandler::SetImageL +// Sets dialog image. +// ---------------------------------------------------------------------------- +// +CEikImage* CStatusPaneHandler::SetImageL( CAknAppUi* aAppUi, CEikImage* aIcon ) + { + CEikStatusPane* statusPane = aAppUi->StatusPane(); + if ( statusPane && statusPane->PaneCapabilities + (TUid::Uid(EEikStatusPaneUidContext)).IsPresent() ) + { + CAknContextPane* contextPane = static_cast + ( statusPane->ControlL( TUid::Uid( EEikStatusPaneUidContext ) ) ); + if ( contextPane ) + { + return contextPane->SwapPicture( aIcon ); + } + } + + return NULL; + } + +// End of File