diff -r 2b7283837edb -r 3104fc151679 imstutils/imconversationview/imcvuiapp/src/cimcvappsmileicongrid.cpp --- a/imstutils/imconversationview/imcvuiapp/src/cimcvappsmileicongrid.cpp Thu Aug 19 09:41:53 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,684 +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: Grid for smile icons -* -*/ - - -// INCLUDE FILES -#include "cimcvappsmileicongrid.h" -#include "imcvappsmileutility.hrh" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "imcvlogger.h" -#include "imcvuiapputils.h" -#include "mimcvtapeventobserver.h" - - -// CONSTANTS -// The (KTopLeft_x,KTopLeft_y) and (KBottomRight_x,KBottomRight_y) are the co ordinates of the -// topleft and bottomright points of the first cell in the grid. -// These co-ordinates to draw the grid lines and the logic to draw the grid lines is based on the topleft -// and bottomright points of the first cell in the grid. -#define KTopLeft_x 56 -#define KTopLeft_y 55 -#define KBottomRight_x 105 -#define KBottomRight_y 104 - - -// ================= MEMBER FUNCTIONS ======================= - -// ----------------------------------------------------------------------------- -// CIMCVAppSmileIconGrid::NewL -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// Two-phased constructor. -CIMCVAppSmileIconGrid* CIMCVAppSmileIconGrid::NewL( CEikDialog* aParent, - const RPointerArray& aIconArray ) - { - IM_CV_LOGS(TXT("CIMCVAppSmileIconGrid::NewL() start") ); - CIMCVAppSmileIconGrid* self = new (ELeave) CIMCVAppSmileIconGrid( aParent, - aIconArray ); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - IM_CV_LOGS(TXT("CIMCVAppSmileIconGrid::NewL() end") ); - return self; - } - -// ----------------------------------------------------------------------------- -// CIMCVAppSmileIconGrid::~CIMCVAppSmileIconGrid -// ----------------------------------------------------------------------------- -CIMCVAppSmileIconGrid::~CIMCVAppSmileIconGrid() - { - } - -// ----------------------------------------------------------------------------- -// CIMCVAppSmileIconGrid::CIMCVAppSmileIconGrid -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// C++ constructor can NOT contain any code, that -// might leave. -// -CIMCVAppSmileIconGrid::CIMCVAppSmileIconGrid( CEikDialog* aParent, - const RPointerArray& aIconArray ) -:iParent( aParent ), iIconArray( aIconArray ) - { - } - -// ----------------------------------------------------------------------------- -// CIMCVAppSmileIconGrid::ConstructL -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -// default constructor can leave. -void CIMCVAppSmileIconGrid::ConstructL() - { - IM_CV_LOGS(TXT("CIMCVAppSmileIconGrid::ConstructL() start") ); - iIconCount = iIconArray.Count(); - - iIsMirrored = ETrue ; - SetContainerWindowL( *iParent ); - IM_CV_LOGS(TXT("CIMCVAppSmileIconGrid::ConstructL() end") ); - } - - -// --------------------------------------------------------- -// CIMCVAppSmileIconGrid::MoveCursor -// Move cursor and redraw highlight. -// Called when arrow-key is pressed. -// (other items were commented in a header). -// --------------------------------------------------------- -// -void CIMCVAppSmileIconGrid::MoveCursor( TInt aKeyCode ) - { - IM_CV_LOGS(TXT("CIMCVAppSmileIconGrid::MoveCursor() start") ); - iPrevCursorPos = iCursorPos; - - switch( aKeyCode ) - { - case EKeyLeftArrow: - { - if( AknLayoutUtils::LayoutMirrored() ) - { - iCursorPos++; - if( iCursorPos >= iIconCount ) - { - iCursorPos = 0; - } - } - else - { - iCursorPos--; - if( iCursorPos < 0 ) - { - iCursorPos = iIconCount - 1; - } - } - break; - } - case EKeyRightArrow: - { - if( AknLayoutUtils::LayoutMirrored() ) - { - iCursorPos--; - if( iCursorPos < 0 ) - { - iCursorPos = iIconCount - 1; - } - } - else - { - iCursorPos++; - if( iCursorPos >= iIconCount ) - { - iCursorPos = 0; - } - } - break; - } - case EKeyUpArrow: - { - if( iCursorPos < iMaxColumns ) - { - iCursorPos += ( iRowCount * iMaxColumns ) - 1; - - if( iCursorPos >= iIconCount ) - { - iCursorPos -= iMaxColumns; - } - - if( iCursorPos < 0 ) - { - iCursorPos = iIconCount - 1; - } - } - else - { - iCursorPos -= iMaxColumns; - } - break; - } - case EKeyDownArrow: - { - if( iCursorPos < ( iIconCount - iMaxColumns ) ) - { - iCursorPos += iMaxColumns; - } - else - { - iCursorPos %= iMaxColumns; - iCursorPos++; - if( iCursorPos >= iMaxColumns || - iCursorPos >= iIconCount ) - { - iCursorPos = 0; - } - } - break; - } - default: - { - return; - } - } - - DrawDeferred(); - IM_CV_LOGS(TXT("CIMCVAppSmileIconGrid::MoveCursor() end") ); - } - -// --------------------------------------------------------- -// CIMCVAppSmileIconGrid::SelectedBitmapId -// Called when OK-key or Select-softkey is pressed. -// (other items were commented in a header). -// --------------------------------------------------------- -// -TInt CIMCVAppSmileIconGrid::SelectedBitmapId() - { - return iCursorPos; - } - -// --------------------------------------------------------- -// CIMCVAppSmileIconGrid::HeightInRows -// Return row count of grid. -// (other items were commented in a header). -// --------------------------------------------------------- -// -TInt CIMCVAppSmileIconGrid::HeightInRows() - { - return iRowCount; - } - -// --------------------------------------------------------- -// CIMCVAppSmileIconGrid::SetLayout -// Set layout of identifier grid. -// (other items were commented in a header). -// --------------------------------------------------------- -// -void CIMCVAppSmileIconGrid::SetLayout() - { - IM_CV_LOGS(TXT("CIMCVAppSmileIconGrid::SetLayout() start")); - iIsMirrored = AknLayoutUtils::LayoutMirrored(); - - // popup_grid_graphic_window (Parent) - TRect parentRect(iParent->Rect()); - - // listscroll_popup_graphic_pane (this compoment) - TAknLayoutRect listLayoutRect; - listLayoutRect.LayoutRect(parentRect, - AknLayoutScalable_Avkon::listscroll_popup_graphic_pane(0)); - - // grid_graphic_popup_pane - TAknLayoutRect gridLayoutRect; - gridLayoutRect.LayoutRect(listLayoutRect.Rect(), - AknLayoutScalable_Avkon::grid_graphic_popup_pane(0)); - - // cell_graphic_popup_pane (upper left cell) - TAknLayoutRect oneCellRect; - oneCellRect.LayoutRect(gridLayoutRect.Rect(), - AknLayoutScalable_Avkon::cell_graphic_popup_pane(0, 0, 0)); - - iFirstCell = oneCellRect.Rect(); - iCellWidth = iFirstCell.Width(); - iCellHeight = iFirstCell.Height(); - - // cell_graphic_popup_pane_g1 (icon size) - TAknLayoutRect myIconRect; - myIconRect.LayoutRect(iFirstCell, - AknLayoutScalable_Avkon::cell_graphic_popup_pane_g1(0)); - iIconSize = myIconRect.Rect().Size(); - IM_CV_LOGS(TXT("CIMCVAppSmileIconGrid::SetLayout() end") ); - } - -// --------------------------------------------------------- -// CIMCVAppSmileIconGrid::MinimumSize -// Return minimum size to use the control. -// (other items were commented in a header). -// --------------------------------------------------------- -// -TSize CIMCVAppSmileIconGrid::MinimumSize() - { - TAknLayoutRect gridRect; - gridRect.LayoutRect( - iParent->Rect(), - AknLayoutScalable_Avkon::listscroll_popup_graphic_pane() ); - return gridRect.Rect().Size(); - } - -// --------------------------------------------------------- -// CIMCVAppSmileIconGrid::SizeChanged -// Control rectangle is set. -// (other items were commented in a header). -// --------------------------------------------------------- -// -void CIMCVAppSmileIconGrid::SizeChanged() - { - IM_CV_LOGS(TXT("CIMCVAppSmileIconGrid::SizeChanged() start") ); - SetLayout(); - - TInt iconCount( iIconArray.Count() ); - for ( TInt i = 0; i < iconCount; i++ ) - { - AknIconUtils::SetSize( iIconArray[i]->Bitmap(), - iIconSize ); - } - IM_CV_LOGS(TXT("CIMCVAppSmileIconGrid::SizeChanged() end") ); - } - -// --------------------------------------------------------- -// CIMCVAppSmileIconGrid::HandleResourceChange -// Notifier for changing layout -// (other items were commented in a header). -// --------------------------------------------------------- -// - -void CIMCVAppSmileIconGrid::HandleResourceChange( TInt aType ) - { - IM_CV_LOGS(TXT("CIMCVAppSmileIconGrid::HandleResourceChange() start") ); - if( aType == KEikDynamicLayoutVariantSwitch ) - { - SetLayout(); - } - else - { - CCoeControl::HandleResourceChange( aType ); - } - IM_CV_LOGS(TXT("CIMCVAppSmileIconGrid::HandleResourceChange() end") ); - } - - -// --------------------------------------------------------- -// CIMCVAppSmileIconGrid::Draw -// Drawing control. -// (other items were commented in a header). -// --------------------------------------------------------- -// -void CIMCVAppSmileIconGrid::Draw( const TRect& /* aRect */ ) const - { - IM_CV_LOGS(TXT("CIMCVAppSmileIconGrid::Draw() start") ); - CWindowGc& gc = SystemGc(); - MAknsSkinInstance* skin = AknsUtils::SkinInstance(); - MAknsControlContext* cc = AknsDrawUtils::ControlContext( this ); - - if( !iDragEvent ) - { - // Draw the grid - gc.SetPenStyle(CGraphicsContext::ESolidPen); - gc.SetBrushStyle(CGraphicsContext::ENullBrush); - gc.SetPenSize(TSize(1,1)); - gc.SetPenColor(AKN_LAF_COLOR(215)); - - // For some reason the dialog does not draw it's background - // completely, so we'll have to do it here. - // This should work with bgRect = Rect(), but it doesn't. - // Change this if you know how it should be done. - TRect bgRect = iParent->Rect(); - bgRect.iTl.iY = Rect().iTl.iY; - // --- - - TBool skins = AknsDrawUtils::Background( skin, cc, this, gc, bgRect ); - - if ( !skins ) - { - TRgb color = AKN_LAF_COLOR( 0 ); - AknsUtils::GetCachedColor(skin,color,KAknsIIDQsnIconColors,EAknsCIQsnIconColorsCG1); - gc.SetBrushColor(color); - gc.Clear( bgRect ); - } - - TInt lastRowIconsCount = iIconCount % iMaxColumns; - if( lastRowIconsCount == 0 && iIconCount > 0 ) - { - // Last row is full - lastRowIconsCount = iMaxColumns; - } - - TInt i( 0 ); - TPoint cellLeftTop( KTopLeft_x,KTopLeft_y ); - TPoint cellBottomRight( KBottomRight_x,KBottomRight_y ); - if(!iIsMirrored) - { - // Draw horizontal lines - for( i = 0; i <= iRowCount; ++i ) - { - TPoint startPoint( cellLeftTop ); - TPoint endPoint( cellLeftTop ); - startPoint.iY += i * iCellHeight; - endPoint.iY += i * iCellHeight; - endPoint.iX += ( ( i == iRowCount ) || ( i == 0 && iRowCount == 1 ) - ? ( lastRowIconsCount ) - * iCellWidth : iMaxColumns * iCellWidth ); - // add 1 pixel to remove the gap from bottom right corners - ++endPoint.iX; - gc.DrawLine( startPoint, endPoint ); - } - - // Draw vertical lines - for( i = 0; i <= iMaxColumns; ++i ) - { - TPoint startPoint( cellLeftTop ); - TPoint endPoint( cellLeftTop ); - startPoint.iX += i * iCellWidth; - endPoint.iX += i * iCellWidth; - endPoint.iY += ( i <= lastRowIconsCount ? - iCellHeight * iRowCount : iCellHeight * ( iRowCount - 1 ) ); - gc.DrawLine( startPoint, endPoint ); - } - } - else - { - // Draw horizontal lines - for( i = 0; i <= iRowCount; ++i ) - { - TPoint startPoint( cellLeftTop ); - TPoint endPoint( cellLeftTop ); - startPoint.iY += i * iCellHeight; - endPoint.iY += i * iCellHeight; - endPoint.iX += ( ( i == iRowCount ) || ( i == 0 && iRowCount == 1 ) - ? ( lastRowIconsCount ) - * iCellWidth : iMaxColumns * iCellWidth ); - // subtract one pixel to remove the gap from bottom left corners - --endPoint.iX; - gc.DrawLine( startPoint, endPoint ); - } - - // Draw vertical lines - for( i = 0; i <= iMaxColumns; ++i ) - { - TPoint startPoint( cellLeftTop ); - TPoint endPoint( cellLeftTop ); - startPoint.iX += i * iCellWidth; - endPoint.iX += i * iCellWidth; - endPoint.iY += ( i <= lastRowIconsCount ? - iCellHeight * iRowCount : iCellHeight * ( iRowCount - 1 ) ); - gc.DrawLine( startPoint, endPoint ); - } - - } - - // Draw icons - for( i = 0; i < iIconCount; ++i ) - { - DrawItem( gc, skins, skin, cc, i, i == iCursorPos ); - } - } - else - { - // Only selection changed, highlight new pos - DrawItem( gc, cc != NULL, skin, cc, iCursorPos, ETrue ); - // And clear old - DrawItem( gc, cc != NULL, skin, cc, iPrevCursorPos, EFalse ); - } - IM_CV_LOGS(TXT("CIMCVAppSmileIconGrid::Draw() end") ); - } - -// --------------------------------------------------------- -// CIMCVAppSmileIconGrid::DrawItem -// (other items were commented in a header). -// --------------------------------------------------------- -void CIMCVAppSmileIconGrid::DrawItem( CWindowGc& aGc, - TBool aSkinEnabled, - MAknsSkinInstance* aSkin, - MAknsControlContext* aSkinCc, - TInt aIndex, TBool aSelected ) const - { - IM_CV_LOGS(TXT("CIMCVAppSmileIconGrid::DrawItem() start") ); - //lets count current cell - TPoint cellLeftTop( KTopLeft_x,KTopLeft_y ); - TPoint cellBottomRight( KBottomRight_x,KBottomRight_y ); - - TRect myRect; - myRect.SetRect( cellLeftTop, cellBottomRight ); - TPoint offset; - - offset.iX = ( aIndex % iMaxColumns ) * iCellWidth; - offset.iY = aIndex / iMaxColumns * iCellHeight; - - myRect.Move( offset ); - - // don't draw bg/highlight over borderlines - TRect myHighLightRect = myRect; - myHighLightRect.iTl.iX++; - myHighLightRect.iTl.iY++; - - if( aSelected ) - { - // HIGHLIGHT - if( !aSkinEnabled ) - { - aGc.SetBrushStyle( CGraphicsContext::ESolidBrush ); - } - - TRgb color = AKN_LAF_COLOR(210); - AknsUtils::GetCachedColor( aSkin, color, KAknsIIDQsnIconColors, - EAknsCIQsnComponentColorsCG17 ); - aGc.SetBrushColor( color ); - aGc.Clear( myHighLightRect ); - } - else - { - TRgb color = AKN_LAF_COLOR( 0 ); - AknsUtils::GetCachedColor( aSkin, color, KAknsIIDQsnIconColors, - EAknsCIQsnIconColorsCG1 ); - aGc.SetBrushColor( color ); - if ( aSkinEnabled ) - { - AknsDrawUtils::Background( aSkin, aSkinCc, aGc, myHighLightRect ); - } - else - { - aGc.DrawRect( myHighLightRect ); - } - } - - - TAknWindowLineLayout myIconLayout( AknLayoutScalable_Avkon::cell_graphic_popup_pane_g1(0) ); - - TAknLayoutRect myIconRect; - myIconRect.LayoutRect( myRect, myIconLayout ); - - if( aIndex < iIconArray.Count() ) - { - myIconRect.DrawImage( aGc, - iIconArray[ aIndex ]->Bitmap(), - iIconArray[ aIndex ]->Mask() ); - } - IM_CV_LOGS(TXT("CIMCVAppSmileIconGrid::DrawItem() end") ); - } - -// --------------------------------------------------------- -// CIMCVAppSmileIconGrid::HandlePointerEventL -// (other items were commented in a header). -// --------------------------------------------------------- -// -void CIMCVAppSmileIconGrid::HandlePointerEventL( - const TPointerEvent& aPointerEvent ) - { - IM_CV_LOGS(TXT("CIMCVAppSmileIconGrid::HandlePointerEventL() start") ); - if( !IMCVUiAppUtils::PenEnabled() ) - { - // Ignore event - //return; - } - - TInt oldSelection = iCursorPos; - TPoint hitPos = aPointerEvent.iPosition; - - // Convert XY position to linear cursor position - TPoint cellLeftTop( KTopLeft_x,KTopLeft_y ); - hitPos -= cellLeftTop; - - TInt xPos = hitPos.iX / iCellWidth; - TInt yPos = hitPos.iY / iCellHeight; - TInt newSelection = yPos * iMaxColumns + xPos; - - // Check that the selection is inside the grid - TBool validItem = xPos <= iMaxColumns - 1 && - Rng( 0, newSelection, iIconCount - 1 ) && - hitPos.iX >= 0 && - hitPos.iY >= 0; - if( !validItem ) - { - // not valid point --> ignore event - return; - } - - // Only update if something new was selected - if( newSelection != oldSelection ) - { - // New valid item - iPrevCursorPos = iCursorPos; - iCursorPos = newSelection; - iDragEvent = ETrue; - DrawDeferred(); - iDragEvent = EFalse; - } - - // Notify observer - if( iTapObserver && - aPointerEvent.iType == TPointerEvent::EButton1Up ) - { - // Smiley was tapped - iTapObserver->HandleTapEventL( MIMCVTapEventObserver::ESingleTap, - iTapControlId ); - } - - if( aPointerEvent.iType == TPointerEvent::EButton1Down ) - { - // enable dragging when button1 is down - EnableDragEvents(); - // single tap has to insert the smiley. - // this code is not required - // Window().SetPointerGrab( ETrue ); - - // and make sure that we get the dragging events - // ClaimPointerGrab( ETrue ); - } - - CCoeControl::HandlePointerEventL( aPointerEvent ); - IM_CV_LOGS(TXT("CIMCVAppSmileIconGrid::HandlePointerEventL() end") ); - } - -// ----------------------------------------------------------------------------- -// CIMCVAppSmileIconGrid::SetTapObserver -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CIMCVAppSmileIconGrid::SetTapObserver( MIMCVTapEventObserver* aObserver, - TUint aId ) - { - iTapObserver = aObserver; - iTapControlId = aId; - } - -// ----------------------------------------------------------------------------- -// CIMCVAppSmileIconGrid::SetViewableWindowWidth -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CIMCVAppSmileIconGrid::SetViewableWindowWidth(TInt aViewableWidth) -{ - TRect parentRect( iParent->Rect() ); - - // listscroll_popup_graphic_pane (this compoment) - TAknLayoutRect listLayoutRect; - listLayoutRect.LayoutRect( - parentRect, - AknLayoutScalable_Avkon::listscroll_popup_graphic_pane() ); - - // grid_graphic_popup_pane - TAknLayoutRect gridLayoutRect; - gridLayoutRect.LayoutRect( - listLayoutRect.Rect(), - AknLayoutScalable_Avkon::grid_graphic_popup_pane( 0 ) ); - - // cell_graphic_popup_pane (upper left cell) - TAknLayoutRect oneCellRect; - oneCellRect.LayoutRect( - gridLayoutRect.Rect(), - AknLayoutScalable_Avkon::cell_graphic_popup_pane( 0, 0, 0 ) ); - - TInt cellWidth = oneCellRect.Rect().Width(); - - iMaxColumns = aViewableWidth/cellWidth; - - iRowCount = iIconCount / iMaxColumns; - - if (iIconCount % iMaxColumns) - { - iRowCount++; - } - -} - -// ----------------------------------------------------------------------------- -// CIMCVAppSmileIconGrid::GetFirstCellRect -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -TRect CIMCVAppSmileIconGrid::GetFirstCellRect() - { - // popup_grid_graphic_window (Parent) - TRect parentRect( iParent->Rect() ); - - // listscroll_popup_graphic_pane (this compoment) - TAknLayoutRect listLayoutRect; - listLayoutRect.LayoutRect( - parentRect, - AknLayoutScalable_Avkon::listscroll_popup_graphic_pane() ); - - // grid_graphic_popup_pane - TAknLayoutRect gridLayoutRect; - gridLayoutRect.LayoutRect( - listLayoutRect.Rect(), - AknLayoutScalable_Avkon::grid_graphic_popup_pane( 0 ) ); - - // cell_graphic_popup_pane (upper left cell) - TAknLayoutRect oneCellRect; - oneCellRect.LayoutRect( - gridLayoutRect.Rect(), - AknLayoutScalable_Avkon::cell_graphic_popup_pane( 0, 0, 0 ) ); - - return oneCellRect.Rect(); - //return iFirstCell; - - } -// End of File