diff -r 000000000000 -r 5e5d6b214f4f imstutils/imconversationview/imcvuiapp/src/cimcvappui.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/imstutils/imconversationview/imcvuiapp/src/cimcvappui.cpp Tue Feb 02 10:12:18 2010 +0200 @@ -0,0 +1,569 @@ +/* +* Copyright (c) 2007-2008 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: application ui +* +*/ + + +#include "cimcvappui.h" +#include +#include +#include "cimcvappview.h" +#include "imcvuiapp.hrh" +#include +#include +#include "cimcvapplayoutinfo.h" +#include "cimcvappmessageextensionshandler.h" +#include "cimcvengine.h" +#include "imcvuiliterals.h" +#include "cimcvappstatuspanehandler.h" +#include "mimcvenginemessagehandler.h" +// logs +#include "imcvlogger.h" +#include "mimcvapplayoutchangeobserver.h" +#include +#include +#include +#include +#include +#include +#include "imcvuicommonuids.h" +#include "cimcvuiappskinvariant.h" +#include "imcvuiparams.h" +#include +#include +#include +#include +#include + +#include "imcvuiliterals.h" +#include "conversations.h" +#include "imcvuiapp.h" +#include "cimcvenginefactory.h" +#include "mimcvenginefactory.h" +// imconnectionprovider +#include "cimcvappinputabsorber.h" +#include "cimcvengine.h" + +// ConstructL is called by the application framework +void CIMCVAppUi::ConstructL() + { + IM_CV_LOGS(TXT("CIMCVAppUi::ConstructL() start") ); + iDestructingFlag = EFalse; + + BaseConstructL( EAknEnableSkin | ENoAppResourceFile | + EAppOrientationAutomatic | EAknEnableMSK ); + //Message extension handler. This must be created before views. + + iChatMbmFullPath = Application()->BitmapStoreName(); + + // Input absorber + iInputAbsorber = CIMCVAppInputAbsorber::NewL(); + + /////////////////////////////// + + TDriveName drive( TParsePtrC( iChatMbmFullPath ).Drive( ) ); // solve drive + + // leave to stack, LC method + HBufC* resourceFilePath = HBufC::NewLC( KAMaxResourcePathLength ); + TPtr ptr( resourceFilePath->Des() ); + ptr.Append( KADefaultIconFile() ); // without drive + ptr.Insert( 0, drive ); // insert drive + + // NearestLanguageFile takes only TFileName + iChatMbmFullPath.Zero(); + iChatMbmFullPath.Append( *resourceFilePath ); + ///////////////////////////////// + CleanupStack::PopAndDestroy(); + + iSkinVariant = CIMCVUiAppSkinVariant::NewL(); + + iEngineFactory = CIMCVEngineFactory::InstanceL(); + + iMessageHandler = CIMCVAppMessageExtensionsHandler::NewL(*iSkinVariant, *this, *iEngineFactory ); + + + + iLayoutInfo = CIMCVAppLayoutInfo::NewL( TChatListBoxLayout::EWithoutEditor ); + iLayoutInfo->LayoutChangedL(); + CalculatePreviewPaneWidth(); + + // connected create view and activate it + iCIMCVAppView = new (ELeave) CIMCVAppView(); + iCIMCVAppView->ConstructL( R_CONVERSATIONVIEW_VIEW, KUidConversationView ,*iMessageHandler); + AddViewL( iCIMCVAppView ); // transfer ownership to CAknViewAppUi + + IM_CV_LOGS(TXT("CIMCVAppUi::ConstructL() end ") ); + } +// --------------------------------------------------------- +// CIMCVAppUi::CIMCVAppUi() +// --------------------------------------------------------- +// +CIMCVAppUi::CIMCVAppUi() : +iIsAppForeground(ETrue) + { + // no implementation required + } +// --------------------------------------------------------- +// CIMCVAppUi::CIMCVAppUi() +// --------------------------------------------------------- +// +CIMCVAppUi::~CIMCVAppUi() + { + iLayoutObservers.Close(); + + iResourceObservers.Close(); + + delete iLayoutInfo; + + delete iInputAbsorber; + + iDestructingFlag = ETrue; + + if( iSkinVariant ) + { + delete iSkinVariant; + } + + + delete iMessageHandler; + + CIMCVEngineFactory::Release(); + + } +// ----------------------------------------------------------------------------- +// CIMCVAppUi::IsAppInForeground +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TBool CIMCVAppUi::IsAppInForeground() + { + return iIsAppForeground; + } + + // ----------------------------------------------------------------------------- +// CIMCVAppUi::IsUnderDestruction +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TBool CIMCVAppUi::IsUnderDestruction() + { + return iDestructingFlag; + } +// --------------------------------------------------------- +// CIMCVAppUi::CIMCVAppUi() +// --------------------------------------------------------- +// handle any menu commands +void CIMCVAppUi::HandleCommandL(TInt aCommand) + { + IM_CV_LOGS(TXT("CIMCVAppUi::HandleCommandL() start") ); + switch(aCommand) + { + case EEikCmdExit: + case EAknSoftkeyExit: + case EIMCVCmdExit: + case EAknSoftkeyBack: + { + //Deactivate conversation is done in HandleForegroundEventL so that + //notification can be received in UI in case of new messages + if( iPbkApplicationUid != 0 ) + { + // activate previous application + BringToForeground( TUid::Uid(iPbkApplicationUid ) ); + } + TApaTask task(iEikonEnv->WsSession()); + task.SetWgId( CEikonEnv::Static()->RootWin().Identifier()); + task.SendToBackground(); + break; + } + + default: + break; + } + IM_CV_LOGS(TXT("CIMCVAppUi::HandleCommandL() end") ); + } +// ----------------------------------------------------------------------------- +// CIMCVAPPAppUi::HandleWsEventL +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CIMCVAppUi::HandleWsEventL( const TWsEvent& aEvent,CCoeControl* aDestination ) + { + IM_CV_LOGS(TXT("CIMCVAppUi::HandleWsEventL() start") ); + switch( aEvent.Type() ) + { + case KAknUidValueEndKeyCloseEvent: + { + + break; + } + default: + { + CAknViewAppUi::HandleWsEventL( aEvent, aDestination ); + break; + } + } + IM_CV_LOGS(TXT("CIMCVAppUi::HandleWsEventL() end") ); + } + +// ----------------------------------------------------------------------------- +// CIMCVAppUi::LayoutInfo +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +MIMCVAppLayoutInfo* CIMCVAppUi::LayoutInfo() + { + return iLayoutInfo; + } +// ----------------------------------------------------------------------------- +// CIMCVAppUi::LayoutInfo +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +CIMCVEngine& CIMCVAppUi::ActiveEngine() const + { + return iCIMCVAppView->ActiveEngine(); + } + +// --------------------------------------------------------- +// CIMCVAPPAppUi::AddLayoutChangeObserver +// (other items were commented in a header). +// --------------------------------------------------------- +// +void CIMCVAppUi::AddLayoutChangeObserver( MIMCVAppLayoutChangeObserver* aObserver ) + { + IM_CV_LOGS(TXT("CIMCVAppUi::AddLayoutChangeObserver() start") ); + TInt err( iLayoutObservers.Append( aObserver ) ); + if ( err ) + { + CActiveScheduler::Current()->Error( err ); + } + IM_CV_LOGS(TXT("CIMCVAppUi::AddLayoutChangeObserver() End") ); + } + +// --------------------------------------------------------- +// CIMCVAPPAppUi::RemoveLayoutChangeObserver +// (other items were commented in a header). +// --------------------------------------------------------- +// +void CIMCVAppUi::RemoveLayoutChangeObserver( MIMCVAppLayoutChangeObserver* aObserver ) + { + IM_CV_LOGS(TXT("CIMCVAppUi::RemoveLayoutChangeObserver() start") ); + // remove from end first (LIFO) to avoid + // tweaking the index while removing + TInt count( iLayoutObservers.Count() ); + for( TInt i( count - 1 ); i >= 0; i-- ) + { + if( iLayoutObservers[i] == aObserver ) + { + iLayoutObservers.Remove( i ); + } + } + iLayoutObservers.Compress(); + IM_CV_LOGS(TXT("CIMCVAppUi::RemoveLayoutChangeObserver() end") ); + } + +// --------------------------------------------------------- +// CIMCVAPPAppUi::AddResourceChangeObserver +// (other items were commented in a header). +// --------------------------------------------------------- +// +void CIMCVAppUi::AddResourceChangeObserver( MIMCVAppResourceChangeObserver* aObserver ) + { + IM_CV_LOGS(TXT("CIMCVAppUi::AddResourceChangeObserver() start") ); + TInt err( iResourceObservers.Append( aObserver ) ); + if ( err ) + { + CActiveScheduler::Current()->Error( err ); + } + IM_CV_LOGS(TXT("CIMCVAppUi::AddResourceChangeObserver() end") ); + } + +// --------------------------------------------------------- +// CIMCVAPPAppUi::RemoveResourceChangeObserver +// (other items were commented in a header). +// --------------------------------------------------------- +// +void CIMCVAppUi::RemoveResourceChangeObserver( MIMCVAppResourceChangeObserver* aObserver ) + { + IM_CV_LOGS(TXT("CIMCVAppUi::RemoveResourceChangeObserver() start") ); + // remove from end first (LIFO) to avoid + // tweaking the index while removing + TInt count( iResourceObservers.Count() ); + for( TInt i( count - 1 ); i >= 0; i-- ) + { + if( iResourceObservers[i] == aObserver ) + { + iResourceObservers.Remove( i ); + } + } + iResourceObservers.Compress(); + IM_CV_LOGS(TXT("CIMCVAppUi::RemoveResourceChangeObserver() start") ); + } + + +// --------------------------------------------------------- +// CIMCVAPPAppUi::MbmFullPath +// (other items were commented in a header). +// --------------------------------------------------------- +// +TDes& CIMCVAppUi::MbmFullPath() + { + return iChatMbmFullPath; + } +// --------------------------------------------------------- +// CIMCVAPPAppUi::StorePreviousViewDetails +// (other items were commented in a header). +// --------------------------------------------------------- +// +void CIMCVAppUi::StorePreviousViewDetails(TInt aPreviousApplicationUid,TInt aPreviousViewUid ) + { + IM_CV_LOGS(TXT("CIMCVAppUi::StorePreviousViewDetails() start") ); + iPbkApplicationUid = aPreviousApplicationUid; + iPbkActiveViewUid = aPreviousViewUid; + IM_CV_LOGS(TXT("CIMCVAppUi::StorePreviousViewDetails() end") ); + } + +// --------------------------------------------------------------------------- +//// CIMCVAPPAppUi::SendMeToBackground +// Send this application to background +// --------------------------------------------------------------------------- +// +void CIMCVAppUi::SendMeToBackground() + { + IM_CV_LOGS(TXT("CIMCVAppUi::SendMeToBackground() start") ); + TApaTaskList taskList( iEikonEnv->WsSession() ); + TApaTask xmppImApp = taskList.FindApp( TUid::Uid(KIMCVUIAPPEXEUID3 ) ); + xmppImApp.SendToBackground(); + IM_CV_LOGS(TXT("CIMCVAppUi::SendMeToBackground() end") ); + } + + // --------------------------------------------------------------------------- +//// CIMCVAppUi::ShutDownAndCloseApplicationL +// Send this application to background +// --------------------------------------------------------------------------- +// +void CIMCVAppUi::ShutDownAndCloseApplicationL() + { + IM_CV_LOGS(TXT("CIMCVAppUi::ShutDownAndCloseApplicationL() start") ); + TApaTaskList taskList( iEikonEnv->WsSession() ); + TApaTask xmppImApp = taskList.FindApp( TUid::Uid(KIMCVUIAPPEXEUID3 ) ); + xmppImApp.KillTask(); + IM_CV_LOGS(TXT("CIMCVAppUi::ShutDownAndCloseApplicationL() end") ); + } +// --------------------------------------------------------- +// CIMCVAppUi::HandleResourceChangeL +// (other items were commented in a header). +// --------------------------------------------------------- +// +void CIMCVAppUi::HandleResourceChangeL( TInt aType ) + { + IM_CV_LOGS(TXT("CIMCVAppUi::HandleResourceChangeL() Start") ); + CAknViewAppUi::HandleResourceChangeL( aType ); + if ( aType == KEikDynamicLayoutVariantSwitch ) + { + // skin change for this app ui class + iLayoutInfo->LayoutChangedL( aType ); + + CalculatePreviewPaneWidth(); + + iSkinVariant->UpdateLayout(); + } + + + if ( aType == KEikDynamicLayoutVariantSwitch || + aType == KAknsMessageSkinChange ) + { + TInt count( iLayoutObservers.Count() ); + for( TInt i( 0 ); i < count; ++i ) + { + iLayoutObservers[i]->LayoutChangedL( aType ); + } + } + IM_CV_LOGS(TXT("CIMCVAppUi::HandleResourceChangeL() end") ); + } +// --------------------------------------------------------- +// CIMCVAppUi::CalculatePreviewPaneWidth() +// --------------------------------------------------------- +// +void CIMCVAppUi::CalculatePreviewPaneWidth() + { + IM_CV_LOGS(TXT("CIMCVAppUi::CalculatePreviewPaneWidth() Start") ); + // Get parameter and table limits for popup preview text window + TAknLayoutScalableParameterLimits limits = + AknLayoutScalable_Avkon::popup_preview_text_window_ParamLimits(); + + TAknLayoutScalableTableLimits tableLimits = + AknLayoutScalable_Avkon::popup_preview_text_window_t_Limits(); + + // Get layout rects + TRect rectScreen = iAvkonAppUi->ApplicationRect(); + TRect rectMainPane = rectScreen; + + // Use first variety to be able to get the font for text parsing + TInt firstVariety = SelectWindowVariety( 1, limits ); + + TRect rectPopupWindow = RectFromLayout( rectMainPane, + AknLayoutScalable_Avkon::popup_preview_text_window( firstVariety ) ); + + TInt firstIndex = tableLimits.FirstIndex(); + TInt firstLineVariety = AknLayoutScalable_Avkon:: + popup_preview_text_window_t_ParamLimits( firstIndex ).FirstVariety(); + + TAknTextLineLayout popupTextLayout = + AknLayoutScalable_Avkon::popup_preview_text_window_t( + firstIndex, firstLineVariety ); + + TAknLayoutText layoutText; + layoutText.LayoutText( rectPopupWindow, popupTextLayout ); + + IM_CV_LOGS(TXT("CIMCVAppUi::CalculatePreviewPaneWidth() End") ); + } +// --------------------------------------------------------- +// CIMCVAppUi::SelectWindowVariety() +// --------------------------------------------------------- +// +TInt CIMCVAppUi::SelectWindowVariety( const TInt aNumberOfLines, + const TAknLayoutScalableParameterLimits& aLimits ) const + { + TInt index = aNumberOfLines - 1; + if ( Layout_Meta_Data::IsLandscapeOrientation() ) + { + index += 5; + } + + return Min( Max( index, aLimits.FirstVariety() ), + aLimits.LastVariety() ); + } + +// --------------------------------------------------------- +// CIMCVAppUi::RectFromLayout() +// --------------------------------------------------------- +// +TRect CIMCVAppUi::RectFromLayout( const TRect& aParent, + const TAknWindowComponentLayout& aComponentLayout ) const + { + TAknWindowLineLayout lineLayout = aComponentLayout.LayoutLine(); + TAknLayoutRect layoutRect; + layoutRect.LayoutRect(aParent, lineLayout); + return layoutRect.Rect(); + } + +// ----------------------------------------------------------------------------- +// CIMCVAppUi::SkinVariantL +// ----------------------------------------------------------------------------- +// +MIMCVUiAppSkinVariant* CIMCVAppUi::SkinVariantL() + { + return iSkinVariant; + } + +// --------------------------------------------------------------------------- +// Proceses message from external application +// Used from Phonebooks external tab (Buddylist) to start instant messaging +// or from xmpp server to show new messages +// --------------------------------------------------------------------------- +// +void CIMCVAppUi::ProcessMessageL( TUid /*aUid*/, const TDesC8& aParamData ) + { + IM_CV_LOGS(TXT("CIMCVAppUi::ProcessMessageL() Start") ); + + iCIMCVAppView->ShowMeL(aParamData); + + IM_CV_LOGS(TXT("CIMCVAppUi::ProcessMessageL() End ") ); + } + +/// ----------------------------------------------------------------------------- +// CIMCVAppUi::HandleServiceCloseExitL +// ----------------------------------------------------------------------------- +// +void CIMCVAppUi::HandleServiceCloseExitL(TInt /*aEventValue*/ ) + { + IM_CV_LOGS(TXT("CIMCVAppUi::HandleServiceCloseExitL() Start") ); + + IM_CV_LOGS(TXT("CIMCVAppUi::HandleServiceCloseExitL() Start") ); + } + +// --------------------------------------------------------- +// CIMCVAppUi::CaptureEventsL +// (other items were commented in a header). +// --------------------------------------------------------- +// +void CIMCVAppUi::CaptureEventsL() + { + if ( !AreEventsCaptured() ) + { + iInputAbsorber->CaptureEventsL(); + } + } + +// --------------------------------------------------------- +// CIMCVAppUi::ReleaseCapturingL() +// (other items were commented in a header). +// --------------------------------------------------------- +// +void CIMCVAppUi::ReleaseCapturingL() + { + if ( AreEventsCaptured() ) + { + iInputAbsorber->Release(); + } + } + +// --------------------------------------------------------- +// CIMCVAppUi::AreEventsCaptured +// (other items were commented in a header). +// --------------------------------------------------------- +// +TBool CIMCVAppUi::AreEventsCaptured() const + { + return iInputAbsorber->IsCaptured(); + } + +// --------------------------------------------------------- +// CIMCVAppUi::BringToForeground +// (other items were commented in a header). +// --------------------------------------------------------- +// +void CIMCVAppUi::BringToForeground( TUid aAppUid ) + { + + IM_CV_LOGS(TXT("CIMCVAppUi::BringToForeground() start") ); + TApaTaskList taskList( iEikonEnv->WsSession() ); + TApaTask task = taskList.FindApp( aAppUid ); + if ( task.Exists() ) + { + task.BringToForeground(); + } + IM_CV_LOGS(TXT("CIMCVAppUi::BringToForeground() end") ); + + } + + +// -------------------------------------------------------------------------- +// CIMCVAppUi::HandleForegroundEventL +// -------------------------------------------------------------------------- +// +void CIMCVAppUi::HandleForegroundEventL( TBool aForeground ) + { + iIsAppForeground = aForeground; + + if( !aForeground ) + { + ActiveEngine().MessageHandler().DeactivateConversationL(); + } + + CAknViewAppUi::HandleForegroundEventL( aForeground ); + } +// end of file