diff -r 2b7283837edb -r 3104fc151679 imstutils/imconversationview/imcvuiapp/src/cimcvappsmileicondialog.cpp --- a/imstutils/imconversationview/imcvuiapp/src/cimcvappsmileicondialog.cpp Thu Aug 19 09:41:53 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,516 +0,0 @@ -/* -* 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: Dialog for selecting smile icon. -* -*/ - - - - -// INCLUDE FILES - -#include "cimcvappsmileicondialog.h" -#include "cimcvappsmileicongrid.h" -#include "imcvappsmileutility.hrh" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "imcvlogger.h" -#include "imcvuiapputils.h" - -#include "e32property.h" -// CONSTANTS - -const TInt KAknSctCBaButtonDirections = 3; // bottom, right and left - - - - - -// ================= MEMBER FUNCTIONS ======================= - - -// --------------------------------------------------------- -// CIMCVAppSmileIconDialog::NewL -// (other items were commented in a header). -// --------------------------------------------------------- -CIMCVAppSmileIconDialog* CIMCVAppSmileIconDialog::NewL( - const RPointerArray& aIconArray, - TInt& aSelectedIconId ) - { - IM_CV_LOGS(TXT("CIMCVAppSmileIconDialog::NewL() start") ); - CIMCVAppSmileIconDialog* self = - new (ELeave) CIMCVAppSmileIconDialog( aIconArray, aSelectedIconId ); - IM_CV_LOGS(TXT("CIMCVAppSmileIconDialog::NewL() end") ); - return self; - } - - - -// --------------------------------------------------------- -// CIMCVAppSmileIconDialog::~CIMCVAppSmileIconDialog -// --------------------------------------------------------- -// -CIMCVAppSmileIconDialog::~CIMCVAppSmileIconDialog() - { - - } - - -// --------------------------------------------------------- -// CIMCVAppSmileIconDialog::CIMCVAppSmileIconDialog -// (other items were commented in a header). -// --------------------------------------------------------- -// -CIMCVAppSmileIconDialog::CIMCVAppSmileIconDialog( - const RPointerArray& aIconArray, - TInt& aSelectedIconId ) -:iIconArray( aIconArray ), iIconId( aSelectedIconId ), iLayoutChanged(EFalse) - { - - } - - - -// --------------------------------------------------------- -// CIMCVAppSmileIconDialog::OfferKeyEventL -// Handle key event. -// If key code is other than OK and arrow key, no action. -// (other items were commented in a header). -// --------------------------------------------------------- -// -TKeyResponse CIMCVAppSmileIconDialog::OfferKeyEventL( - const TKeyEvent& aKeyEvent, TEventCode aType) - { - IM_CV_LOGS(TXT("CIMCVAppSmileIconDialog::OfferKeyEventL() start") ); - TKeyResponse response( EKeyWasConsumed ); - switch( aKeyEvent.iCode ) - { - // fall through - case EKeyLeftArrow: - case EKeyRightArrow: - case EKeyUpArrow: - case EKeyDownArrow: - { - CIMCVAppSmileIconGrid* grid = - static_cast< CIMCVAppSmileIconGrid*>( - Control( EIMIdSelectSmileGrid ) ); - grid->MoveCursor( aKeyEvent.iCode ); - break; - } - case EKeyEscape: // handle dialog shutdown. - { - TryExitL( EAknSoftkeyExit ); - return EKeyWasNotConsumed; - } - default: - { - response = CAknDialog::OfferKeyEventL(aKeyEvent, aType); - break; - } - } - IM_CV_LOGS(TXT("CIMCVAppSmileIconDialog::OfferKeyEventL() end") ); - return response; - } - -// --------------------------------------------------------- -// CIMCVAppSmileIconDialog::OkToExitL -// Called when CBA-key or OK-key is pressed. -// (other items were commented in a header). -// --------------------------------------------------------- -// -void CIMCVAppSmileIconDialog::HandleResourceChange( TInt aType ) - { - IM_CV_LOGS(TXT("CIMCVAppSmileIconDialog::HandleResourceChange() start") ); - if( aType == KEikDynamicLayoutVariantSwitch ) - { - iLayoutChanged = ETrue; - SetLayout(); - } - CAknDialog::HandleResourceChange( aType ); - IM_CV_LOGS(TXT("CIMCVAppSmileIconDialog::HandleResourceChange() end") ); - } - -// --------------------------------------------------------- -// CIMCVAppSmileIconDialog::OkToExitL -// Called when CBA-key or OK-key is pressed. -// (other items were commented in a header). -// --------------------------------------------------------- -// -TBool CIMCVAppSmileIconDialog::OkToExitL( TInt aButtonId ) - { - IM_CV_LOGS(TXT("CIMCVAppSmileIconDialog::OkToExitL() start") ); - if( aButtonId == EAknSoftkeySelect || - aButtonId == EEikBidOk ) - { - CIMCVAppSmileIconGrid* grid = - static_cast< CIMCVAppSmileIconGrid*>( - Control( EIMIdSelectSmileGrid ) ); - iIconId = grid->SelectedBitmapId(); - } - IM_CV_LOGS(TXT("CIMCVAppSmileIconDialog::OkToExitL() end") ); - return ETrue; - } - - - -// --------------------------------------------------------- -// CIMCVAppSmileIconDialog::PreLayoutDynInitL -// Prepare for drawing dialog. -// (other items were commented in a header). -// --------------------------------------------------------- -// -void CIMCVAppSmileIconDialog::PreLayoutDynInitL() - { - SetLineNonFocusing( EIMIdSelectSmileLabel ); - EnableDragEvents(); - } - -// --------------------------------------------------------- -// CIMCVAppSmileIconDialog::SetSizeAndPosition -// Control size is set. This is called just after PreLayoutDynInitL(). -// (other items were commented in a header). -// --------------------------------------------------------- -// -void CIMCVAppSmileIconDialog::SetSizeAndPosition(const TSize& /*aSize*/) - { - IM_CV_LOGS(TXT("CIMCVAppSmileIconDialog::SetSizeAndPosition() start") ); - SetLayout(); - IM_CV_LOGS(TXT("CIMCVAppSmileIconDialog::SetSizeAndPosition() end") ); - } - - - -// --------------------------------------------------------- -// CIMCVAppSmileIconDialog::CalculatePopupVariety -// (other items were commented in a header). -// --------------------------------------------------------- -// - -TInt CIMCVAppSmileIconDialog::CalculatePopupVariety() - { - IM_CV_LOGS(TXT("CIMCVAppSmileIconDialog::CalculatePopupVariety() start") ); - - TAknLayoutScalableParameterLimits smileyDialogVariety = - AknLayoutScalable_Avkon::popup_grid_graphic_window_ParamLimits(); - TInt maxVariety = smileyDialogVariety.LastVariety(); - - // CBA location affects popup layout - AknLayoutUtils::TAknCbaLocation cbaLocation = AknLayoutUtils::CbaLocation(); - - // bottom variety - TInt maxVarietyOffset = 0; - TInt varietyOffset = maxVariety + 1; - // right variety - if (cbaLocation == AknLayoutUtils::EAknCbaLocationRight) - { - varietyOffset = (maxVariety + 1)/KAknSctCBaButtonDirections; - maxVarietyOffset = varietyOffset; - } - - // left variety - else if (cbaLocation == AknLayoutUtils::EAknCbaLocationLeft) - { - varietyOffset = (maxVariety + 1)/KAknSctCBaButtonDirections; - maxVarietyOffset = varietyOffset + varietyOffset; - } - IM_CV_LOGS(TXT("CIMCVAppSmileIconDialog::CalculatePopupVariety() end") ); - - if ((maxVarietyOffset + varietyOffset)>maxVariety) - return maxVariety; - else - return maxVarietyOffset + varietyOffset; - - } - - - -// --------------------------------------------------------- -// CIMCVAppSmileIconDialog::SetLayout -// Set dialog layout. -// (other items were commented in a header). -// --------------------------------------------------------- -// -void CIMCVAppSmileIconDialog::SetLayout() - { - IM_CV_LOGS(TXT("CIMCVAppSmileIconDialog::SetLayout() start")); - iIsMirrored = AknLayoutUtils::LayoutMirrored(); - TRect clientRect; - //check LAF docs for constants - //AknLayoutUtils::LayoutMetricsRect - AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EApplicationWindow, - clientRect); - CIMCVAppSmileIconGrid* grid = - - static_cast ( - - Control(EIMIdSelectSmileGrid)); - - // Select correct popup layout - - TInt varietyNumber = CalculatePopupVariety(); - TRect rect = grid->GetFirstCellRect(); - - TInt iconCount = iIconArray.Count(); - // calculating the number of rows required by the icon grid. - - TInt viewableWidth = 0; - - for (TInt i = varietyNumber; i >= 0; i--) - { - - TAknWindowLineLayout popupGridDialogLayout( - AknLayoutScalable_Avkon::popup_grid_graphic_window(i)); - - TAknLayoutRect dialogRect; - - dialogRect.LayoutRect(clientRect, popupGridDialogLayout); - - viewableWidth = CheckDialog(dialogRect, rect); - if (viewableWidth) - { - varietyNumber = i; - break; - } - } - if (viewableWidth) - { - TAknWindowLineLayout popupGridDialogLayout( - AknLayoutScalable_Avkon::popup_grid_graphic_window( - varietyNumber)); - TAknLayoutRect dialogRect; - dialogRect.LayoutRect(clientRect, popupGridDialogLayout); - grid->SetViewableWindowWidth(viewableWidth); - SetRect(dialogRect.Rect()); - } - // If there is no suitable solution for the smiley dialog layout - else - { - // No variety of the popup_grid_graphic_window has provided sufficient area - // for the grid display. Hence selecting 0 variety for displaying the grid - // because it has the greatest area. - varietyNumber = 0; - TAknWindowLineLayout popupGridDialogLayout( - AknLayoutScalable_Avkon::popup_grid_graphic_window( - varietyNumber)); - - TAknLayoutRect dialogRect; - - dialogRect.LayoutRect(clientRect, popupGridDialogLayout); - - if (!iIsMirrored) - { - // Right Margin of the top left (top right) icon's X - TInt leftMargin = rect.iTl.iX; - - // Use the max viewable width - viewableWidth = dialogRect.Rect().iBr.iX - - dialogRect.Rect().iTl.iX - leftMargin; - } - else - { - // Left Margin of the top left (top right) icon's X - TInt rightMargin = rect.iBr.iX; - - // Use the max viewable width - viewableWidth = dialogRect.Rect().iBr.iX - - dialogRect.Rect().iTl.iX + rightMargin; - } - - grid->SetViewableWindowWidth(viewableWidth); - - if (!iIsMirrored) - SetRect(dialogRect.Rect()); - // When the Hebrew is the language as well as the Arb languages - // The align is not right - else - { - TRect mirroredDialogRect; - - // Align to right. - mirroredDialogRect = dialogRect.Rect(); - - // Get the rect of the cba pane. - TRect controlPaneRect; - AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EControlPane, - controlPaneRect); - - TInt cbaWidth = controlPaneRect.iBr.iX - controlPaneRect.iTl.iX; - - mirroredDialogRect.iTl.iX -= cbaWidth; - mirroredDialogRect.iBr.iX -= cbaWidth; - - SetRect(mirroredDialogRect); - } - } - } - - - -// --------------------------------------------------------- - -// CIMCVAppSmileIconDialog::CheckDialog - -// Check if Dialog is suitable to fit all smile icon - -// (other items were commented in a header). - -// --------------------------------------------------------- - -TInt CIMCVAppSmileIconDialog::CheckDialog(TAknLayoutRect aDialogRect,TRect aRect) - { - // topMargin is the height of the margin which the smiley grid has - // above its top horizontal line and bottom horizontal line. - TInt topMargin = aRect.Height(); - - TRect dialogRect = aDialogRect.Rect(); - - TInt vWidth = 0; - TInt vheight = 0; - TInt vArea = 0; - vheight = dialogRect.iBr.iY - dialogRect.iTl.iY - 2*topMargin; - if ( !iIsMirrored ) - { - vWidth = dialogRect.iBr.iX - dialogRect.iTl.iX - 2*aRect.iTl.iX;; - } - else - { - // Patch fix for mirrored layout when mode changes from portrait to - // landscape or vice versa the width calculation differs to adjust the correct width - if (iLayoutChanged) // mode change like portrait to landscape or vice versa - { - vWidth = (2*aRect.iBr.iX) - (dialogRect.iBr.iX - dialogRect.iTl.iX); - } - else - { - vWidth = dialogRect.iBr.iX - dialogRect.iTl.iX + 2*aRect.iBr.iX; - } - } - vArea = vWidth*vheight; - - TInt iconCount = iIconArray.Count(); - - TInt areaOfIcon = iconCount * aRect.Width() * aRect.Height(); - - if(areaOfIcon > vArea) - { - return 0; - } - else - { - return vWidth; - } - } - - -// --------------------------------------------------------- -// CIMCVAppSmileIconDialog::CreateCustomControlL -// Create CIMCVAppSmileIconGrid class in order to display -// icons in grid. -// This is called when dialog is created. -// (other items were commented in a header). -// --------------------------------------------------------- -// -SEikControlInfo CIMCVAppSmileIconDialog::CreateCustomControlL( - TInt aControlType ) - { - IM_CV_LOGS(TXT("CIMCVAppSmileIconDialog::SetLayout() start") ); - SEikControlInfo controlInfo; - controlInfo.iControl = NULL; - controlInfo.iTrailerTextId = 0; - controlInfo.iFlags = 0; - if( aControlType == EIMCtrlSelectSmileGrid ) - { - controlInfo.iControl = CIMCVAppSmileIconGrid::NewL( this, iIconArray ); - - static_cast - - (controlInfo.iControl)->SetTapObserver( this, 0 ); - - } - IM_CV_LOGS(TXT("CIMCVAppSmileIconDialog::SetLayout() end") ); - return controlInfo; - } - - - -// --------------------------------------------------------- - -// CIMCVAppSmileIconDialog::HandleDialogPageEventL - -// (other items were commented in a header). - -// --------------------------------------------------------- - -// - -void CIMCVAppSmileIconDialog::HandleDialogPageEventL( TInt aEventID ) - - { - if( IMCVUiAppUtils::PenEnabled() ) - { - if ( iSmileyPointed && - aEventID == MEikDialogPageObserver::EDialogPageTapped ) - { - // Exit requested, exit with ok. - TryExitL( EAknSoftkeyOk ); - } - - //else keep dialog as it is do not exit. - } - } - -// --------------------------------------------------------- - -// CIMCVAppSmileIconDialog::HandleTapEventL - -// (other items were commented in a header). - -// --------------------------------------------------------- - -// - -void CIMCVAppSmileIconDialog::HandleTapEventL( TTapEvent aEvent, - - TUint /*aControlId*/ ) - - { - - // User tapped on smiley. - - if( aEvent == MIMCVTapEventObserver::ESingleTap ) - - { - - // Smiley was selected but we can't exit directly from here. - - // Instead we put the flag on and wait for - - // HandleDialogPageEventL. - - iSmileyPointed = ETrue; - - } - - } - - - -// End of File