--- a/imageeditor/plugins/DrawPlugin/src/selectionpopup.cpp Fri Jan 29 13:53:17 2010 +0200
+++ b/imageeditor/plugins/DrawPlugin/src/selectionpopup.cpp Thu Jun 03 18:57:10 2010 +0800
@@ -1,792 +1,799 @@
-/*
-* Copyright (c) 2010 Ixonos Plc.
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the "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:
-* Ixonos Plc
-*
-* Description:
-* Selection popup dialog.
-*
-*/
-
-
-// INCLUDES
-
-#include <avkon.hrh>
-#include <AknLayoutScalable_Avkon.cdl.h>
-#include <AknLayoutScalable_Apps.cdl.h>
-#include <fbs.h>
-#include <AknIconUtils.h>
-#include <AknUtils.h>
-
-#include <AknBidiTextUtils.h>
-#include <BidiText.h>
-
-#include <ImageEditorUi.mbg>
-#include <ImageEditorUI.rsg>
-#include <draw.rsg>
-
-#include "ResolutionUtil.h"
-#include "selectionpopup.h"
-#include "ImageEditorUiDefs.h"
-
-// CONSTANTS
-const TInt KGridColumnCount = 5;
-const TInt KGridRowCount = 1;
-
-
-//=============================================================================
-CSelectionPopup::CSelectionPopup()
- {
- // Set values into an array
- iItemArray.Append( 4 );
- iItemArray.Append( 8 );
- iItemArray.Append( 16 );
- iItemArray.Append( 32 );
- iItemArray.Append( 64 );
- }
-
-//=============================================================================
-CSelectionPopup::~CSelectionPopup()
- {
- delete iPopupCenter;
- delete iPopupCenterMask;
- delete iPopupCornerTL;
- delete iPopupCornerTLMask;
- delete iPopupCornerTR;
- delete iPopupCornerTRMask;
- delete iPopupCornerBL;
- delete iPopupCornerBLMask;
- delete iPopupCornerBR;
- delete iPopupCornerBRMask;
- delete iPopupSideL;
- delete iPopupSideLMask;
- delete iPopupSideR;
- delete iPopupSideRMask;
- delete iPopupSideT;
- delete iPopupSideTMask;
- delete iPopupSideB;
- delete iPopupSideBMask;
-
- iHighlightRectsArray.Close();
- iGridRectsArray.Close();
- iColorBitmapsArray.ResetAndDestroy();
- iItemArray.Close();
- }
-
-//=============================================================================
-void CSelectionPopup::ConstructL ( CCoeControl* aParent )
- {
- // Set parent
- SetContainerWindowL( *aParent );
- TFileName iconFile( KImageEditorUiMifFile );
-
- // Create trans popup window graphics
- // Center
- AknIconUtils::CreateIconL( iPopupCenter, iPopupCenterMask, iconFile,
- EMbmImageeditoruiQgn_graf_popup_trans_center,
- EMbmImageeditoruiQgn_graf_popup_trans_center_mask );
-
- // Top-left corner
- AknIconUtils::CreateIconL( iPopupCornerTL, iPopupCornerTLMask, iconFile,
- EMbmImageeditoruiQgn_graf_popup_trans_corner_tl,
- EMbmImageeditoruiQgn_graf_popup_trans_corner_tl_mask );
-
- // Top-right corner
- AknIconUtils::CreateIconL( iPopupCornerTR, iPopupCornerTRMask, iconFile,
- EMbmImageeditoruiQgn_graf_popup_trans_corner_tr,
- EMbmImageeditoruiQgn_graf_popup_trans_corner_tr_mask );
-
- // Bottom-left corner
- AknIconUtils::CreateIconL( iPopupCornerBL, iPopupCornerBLMask, iconFile,
- EMbmImageeditoruiQgn_graf_popup_trans_corner_bl,
- EMbmImageeditoruiQgn_graf_popup_trans_corner_bl_mask );
-
- // Bottom-right corner
- AknIconUtils::CreateIconL( iPopupCornerBR, iPopupCornerBRMask, iconFile,
- EMbmImageeditoruiQgn_graf_popup_trans_corner_br,
- EMbmImageeditoruiQgn_graf_popup_trans_corner_br_mask );
-
- // left side
- AknIconUtils::CreateIconL( iPopupSideL, iPopupSideLMask, iconFile,
- EMbmImageeditoruiQgn_graf_popup_trans_side_l,
- EMbmImageeditoruiQgn_graf_popup_trans_side_l_mask );
-
- // left side
- AknIconUtils::CreateIconL( iPopupSideR, iPopupSideRMask, iconFile,
- EMbmImageeditoruiQgn_graf_popup_trans_side_r,
- EMbmImageeditoruiQgn_graf_popup_trans_side_r_mask );
-
- // top side
- AknIconUtils::CreateIconL( iPopupSideT, iPopupSideTMask, iconFile,
- EMbmImageeditoruiQgn_graf_popup_trans_side_t,
- EMbmImageeditoruiQgn_graf_popup_trans_side_t_mask );
-
- // bottom side
- AknIconUtils::CreateIconL( iPopupSideB, iPopupSideBMask, iconFile,
- EMbmImageeditoruiQgn_graf_popup_trans_side_b,
- EMbmImageeditoruiQgn_graf_popup_trans_side_b_mask );
-
- // Activate control
- ActivateL();
-
- }
-
-//=============================================================================
-void CSelectionPopup::CreateColorBitmapsL( TSize aSize )
- {
- // Generate color bitmaps
- iColorBitmapsArray.Reset();
- for( TInt i = 0; i < iItemArray.Count(); i++ )
- {
- CFbsBitmap* bitmap = new ( ELeave ) CFbsBitmap;
- CleanupStack::PushL( bitmap );
- User::LeaveIfError ( bitmap->Create ( aSize, EColor64K ) );
-
- // Compute color for bitmap
- TRgb color( KRgbBlack );//iRGBArray[i] );
-
- // Fill the bitmap with the correct color
- TUint16 color_64k = ( TUint16 )
- (0 |
- ((( TUint8 )color.Red() >> 3) << 11) |
- ((( TUint8 )color.Green() >> 2) << 5) |
- (( TUint8 )color.Blue() >> 3));
-
- bitmap->LockHeapLC();
- TUint16 * pd = (TUint16 *)bitmap->DataAddress();
- TSize size = bitmap->SizeInPixels();
- TInt w = (bitmap->ScanLineLength(size.iWidth, EColor64K) >> 1)
- * size.iHeight;
- for( TInt k = w; k != 0; --k)
- {
- *pd++ = color_64k;
- }
-
- iColorBitmapsArray.Append( bitmap );
-
- CleanupStack::PopAndDestroy(); // LockHeapLC()
- CleanupStack::Pop(); // bitmap
-
- }
-
- }
-
-//=============================================================================
-void CSelectionPopup::Draw( const TRect& /*aRect*/ ) const
- {
- const TRgb KHighlightCenterColor (229, 229, 229);
-
- CWindowGc& gc = SystemGc();
-
- CPreviewControlBase::DrawPreviewImage (Rect());
-
- // Change brush to null to enable transparent drawing
- gc.SetBrushStyle (CGraphicsContext::ENullBrush);
-
- // draw center of the borders
- gc.BitBltMasked( iPopupCenterRect.iTl, iPopupCenter,
- iPopupCenterRect.Size(), iPopupCenterMask, EFalse );
- // draw Top left corner
- gc.BitBltMasked( iPopupCornerTLRect.iTl, iPopupCornerTL,
- iPopupCornerTLRect.Size(), iPopupCornerTLMask, EFalse );
- // draw Top right corner
- gc.BitBltMasked( iPopupCornerTRRect.iTl, iPopupCornerTR,
- iPopupCornerTRRect.Size(), iPopupCornerTRMask, EFalse );
- // draw Bottom left corner
- gc.BitBltMasked( iPopupCornerBLRect.iTl, iPopupCornerBL,
- iPopupCornerBLRect.Size(), iPopupCornerBLMask, EFalse );
- // draw Bottom right corner
- gc.BitBltMasked( iPopupCornerBRRect.iTl, iPopupCornerBR,
- iPopupCornerBRRect.Size(), iPopupCornerBRMask, EFalse );
- // draw Left side
- gc.BitBltMasked( iPopupSideLRect.iTl, iPopupSideL,
- iPopupSideLRect.Size(), iPopupSideLMask, EFalse );
- // draw Right side
- gc.BitBltMasked( iPopupSideRRect.iTl, iPopupSideR,
- iPopupSideRRect.Size(), iPopupSideRMask, EFalse );
- // draw Top side
- gc.BitBltMasked( iPopupSideTRect.iTl, iPopupSideT,
- iPopupSideTRect.Size(), iPopupSideTMask, EFalse );
- // draw Bottom side
- gc.BitBltMasked( iPopupSideBRect.iTl, iPopupSideB,
- iPopupSideBRect.Size(), iPopupSideBMask, EFalse );
-
- // Draw color items and selection indicator
- for( TInt index = 0; index < iGridRectsArray.Count(); index++ )
- {
- // Draw selection indicator for current item
- if( index == iCurrentItem )
- {
- gc.SetBrushStyle( CGraphicsContext::ESolidBrush );
- gc.SetBrushColor( KHighlightCenterColor );
- gc.SetPenColor( KRgbBlack );
- gc.SetPenSize( TSize(2,2) );
- gc.DrawRect( iHighlightRectsArray[ iCurrentItem ] );
-
- gc.SetBrushStyle (CGraphicsContext::ENullBrush);
- }
-
- // draw color bitmap
- TRect currentRect = iGridRectsArray[index];
- gc.BitBlt(currentRect.iTl, iColorBitmapsArray[index]);
- }
-
- // Draw heading
- // Convert the plug-in name to visual representation
- // (in case would be right-to-left)
- const CFont* font = NULL;
- font = AknLayoutUtils::FontFromId( EAknLogicalFontPrimaryFont );
- TBuf<256> visual;
- // Text to be converted
- HBufC * heading = ControlEnv()->AllocReadResourceLC ( R_TITLE_LINE_WEIGHT );
-
- AknBidiTextUtils::ConvertToVisualAndClip(
- heading->Des(),
- visual,
- *font,
- iHeadingRect.Width(),
- iHeadingRect.Width()
- );
-
- CleanupStack::PopAndDestroy( heading );
-
- gc.UseFont( font );
- gc.SetBrushStyle ( CGraphicsContext::ENullBrush );
-
- TInt baseline = iHeadingRect.Height() / 2 + font->AscentInPixels() / 2;
-
- // Check the directionality of the current language and set the alignment
- // according the directionality
- TBidiText::TDirectionality dir = TBidiText::ScriptDirectionality(User::Language());
- CGraphicsContext::TTextAlign align = CGraphicsContext::ELeft;
-
- if( dir == TBidiText::ERightToLeft )
- {
- align = CGraphicsContext::ERight;
- }
- gc.SetPenColor(KRgbWhite);
- gc.DrawText(
- visual,
- iHeadingRect,
- baseline,
- align,
- 0);
- }
-
-//=============================================================================
-void CSelectionPopup::SizeChanged()
- {
-
- TAknLayoutRect layoutRect;
- layoutRect.LayoutRect( Rect(), AknLayoutScalable_Apps::popup_imed_trans_window(0) );
- TRect parentRect = layoutRect.Rect();
-
- TAknLayoutRect iconLayout;
- iconLayout.LayoutRect( parentRect, AknLayoutScalable_Avkon::bg_tb_trans_pane_g1());
- iPopupCenterRect = iconLayout.Rect();
-
- iconLayout.LayoutRect( parentRect, AknLayoutScalable_Avkon::bg_tb_trans_pane_g2());
- iPopupCornerTLRect = iconLayout.Rect();
-
- iconLayout.LayoutRect( parentRect, AknLayoutScalable_Avkon::bg_tb_trans_pane_g3());
- iPopupCornerTRRect = iconLayout.Rect();
-
- iconLayout.LayoutRect( parentRect, AknLayoutScalable_Avkon::bg_tb_trans_pane_g4());
- iPopupCornerBLRect = iconLayout.Rect();
-
- iconLayout.LayoutRect( parentRect, AknLayoutScalable_Avkon::bg_tb_trans_pane_g5());
- iPopupCornerBRRect = iconLayout.Rect();
-
- iconLayout.LayoutRect( parentRect, AknLayoutScalable_Avkon::bg_tb_trans_pane_g6());
- iPopupSideLRect = iconLayout.Rect();
-
- iconLayout.LayoutRect( parentRect, AknLayoutScalable_Avkon::bg_tb_trans_pane_g7());
- iPopupSideRRect = iconLayout.Rect();
-
- iconLayout.LayoutRect( parentRect, AknLayoutScalable_Avkon::bg_tb_trans_pane_g8());
- iPopupSideTRect = iconLayout.Rect();
-
- iconLayout.LayoutRect( parentRect, AknLayoutScalable_Avkon::bg_tb_trans_pane_g9());
- iPopupSideBRect = iconLayout.Rect();
-
- iconLayout.LayoutRect( parentRect, AknLayoutScalable_Apps::listscroll_imed_pane());
- TRect listscrollPaneRect = iconLayout.Rect();
-
- iconLayout.LayoutRect( listscrollPaneRect, AknLayoutScalable_Apps::grid_imed_colour_35_pane( 1 ));
- TRect gridPaneRect = iconLayout.Rect();
-
- // Calculate grid's cell rects
- iHighlightRectsArray.Reset();
- iGridRectsArray.Reset();
- for( TInt row = 0; row < KGridRowCount; row++ )
- {
- for( TInt column = 0; column < KGridColumnCount; column++ )
- {
- iconLayout.LayoutRect( gridPaneRect,
- AknLayoutScalable_Apps::cell_imed_colour_pane(0 , column, row ));
- TRect highlightRect = iconLayout.Rect();
- iHighlightRectsArray.Append( highlightRect );
-
- iconLayout.LayoutRect( highlightRect,
- AknLayoutScalable_Apps::cell_imed_colour_pane_g1(0) );
-
- iGridRectsArray.Append( iconLayout.Rect() );
-
- }
- }
-
- CreateColorBitmapsL( iconLayout.Rect().Size() );
-
- //Heading rect
- iconLayout.LayoutRect( parentRect, AknLayoutScalable_Apps::heading_imed_pane());
- TRect heading = iconLayout.Rect();
-
- TAknLayoutText layoutText;
- layoutText.LayoutText( heading, AknLayoutScalable_Apps::heading_imed_pane_t1() );
- iHeadingRect = layoutText.TextRect();
- iLayoutTextHeading = layoutText;
-
- // Resize graphics to correct size
- AknIconUtils::SetSize( iPopupCenter, iPopupCenterRect.Size(), EAspectRatioNotPreserved);
- AknIconUtils::SetSize( iPopupCornerTL, iPopupCornerTLRect.Size(), EAspectRatioNotPreserved);
- AknIconUtils::SetSize( iPopupCornerTR, iPopupCornerTRRect.Size(), EAspectRatioNotPreserved);
- AknIconUtils::SetSize( iPopupCornerBL, iPopupCornerBLRect.Size(), EAspectRatioNotPreserved);
- AknIconUtils::SetSize( iPopupCornerBR, iPopupCornerBRRect.Size(), EAspectRatioNotPreserved);
- AknIconUtils::SetSize( iPopupSideL, iPopupSideLRect.Size(), EAspectRatioNotPreserved);
- AknIconUtils::SetSize( iPopupSideR, iPopupSideRRect.Size(), EAspectRatioNotPreserved);
- AknIconUtils::SetSize( iPopupSideT, iPopupSideTRect.Size(), EAspectRatioNotPreserved);
- AknIconUtils::SetSize( iPopupSideB, iPopupSideBRect.Size(), EAspectRatioNotPreserved);
-
- }
-
-//=============================================================================
-TKeyResponse CSelectionPopup::OfferKeyEventL( const TKeyEvent& aKeyEvent,
- TEventCode aType )
- {
- TKeyResponse res = EKeyWasNotConsumed;
-
- if (aType == EEventKey)
- {
- // If in landscape mode, do different mapping for the number keys.
- TUint keyCode = aKeyEvent.iCode;
- TBool landscape = CResolutionUtil::Self()->GetLandscape();
- if (landscape)
- {
- switch (keyCode)
- {
- case 49: // numeric keypad '1'
- keyCode = 55;
- break;
- case 50: // numeric keypad '2'
- keyCode = 52;
- break;
- case 51: // numeric keypad '3'
- keyCode = 49;
- break;
- case 52: // numeric keypad '4'
- keyCode = 56;
- break;
- case 54: // numeric keypad '6'
- keyCode = 50;
- break;
- case 55: // numeric keypad '7'
- keyCode = 57;
- break;
- case 56: // numeric keypad '8'
- keyCode = 54;
- break;
- case 57: // numeric keypad '9'
- keyCode = 51;
- break;
- default:
- break;
- }
- }
-
- switch (keyCode)
- {
- case EKeyLeftArrow:
- case 52: // numeric keypad '4'
- {
- if (iCurrentItem == 0)
- {
- iCurrentItem = iGridRectsArray.Count() - 1;
- }
- else
- {
- iCurrentItem--;
- }
-
- res = EKeyWasConsumed;
- break;
- }
-
- case EKeyRightArrow:
- case 54: // numeric keypad '6'
- {
- iCurrentItem++;
- if (iCurrentItem >= iGridRectsArray.Count())
- {
- iCurrentItem = 0;
- }
-
- res = EKeyWasConsumed;
- break;
- }
-
- case EKeyDownArrow:
- case 56: // numeric keypad '8'
- {
- iCurrentItem += KGridColumnCount;
- if (iCurrentItem >= iGridRectsArray.Count())
- {
- iCurrentItem = iCurrentItem - iGridRectsArray.Count();
- }
-
- res = EKeyWasConsumed;
- break;
- }
-
- case EKeyUpArrow:
- case 50: // numeric keypad '2'
- {
- iCurrentItem -= KGridColumnCount;
- if (iCurrentItem < 0)
- {
- iCurrentItem = iGridRectsArray.Count() + iCurrentItem;
- }
-
- res = EKeyWasConsumed;
- break;
- }
-
- case 49: // numeric keypad '1'
- {
- // Move up and left
- iCurrentItem -= KGridColumnCount;
- iCurrentItem --;
- if (iCurrentItem < 0)
- {
- iCurrentItem = iGridRectsArray.Count() + iCurrentItem;
- }
- res = EKeyWasConsumed;
- break;
- }
-
- case 51: // numeric keypad '3'
- {
- // Move up and right
- iCurrentItem -= KGridColumnCount;
- iCurrentItem ++;
- if (iCurrentItem < 0)
- {
- iCurrentItem = iGridRectsArray.Count() + iCurrentItem;
- }
- res = EKeyWasConsumed;
- break;
- }
-
- case 55: // numeric keypad '7'
- {
- // Move down and left
- iCurrentItem += KGridColumnCount;
- iCurrentItem--;
- if (iCurrentItem >= iGridRectsArray.Count())
- {
- iCurrentItem = iCurrentItem - iGridRectsArray.Count();
- }
- res = EKeyWasConsumed;
- break;
- }
-
- case 57: // numeric keypad '9'
- {
- // Move down and left
- iCurrentItem += KGridColumnCount;
- iCurrentItem++;
- if (iCurrentItem >= iGridRectsArray.Count())
- {
- iCurrentItem = iCurrentItem - iGridRectsArray.Count();
- }
- res = EKeyWasConsumed;
- break;
- }
-
- default:
- {
- break;
- }
- }
- }
-
- return res;
-
- }
-
-//=============================================================================
-void CSelectionPopup::HandlePointerEventL( const TPointerEvent &aPointerEvent )
- {
- if( AknLayoutUtils::PenEnabled() )
- {
- switch( aPointerEvent.iType )
- {
- case TPointerEvent::EButton1Down:
- case TPointerEvent::EDrag:
- {
- // calculate which one of the grid items was pressed by
- // by comparing item rects and pressed position
- for (TInt i = 0; i < iHighlightRectsArray.Count(); ++i)
- {
- TRect iconRect( iHighlightRectsArray[i] );
-
- if( iconRect.Contains( aPointerEvent.iPosition ) )
- {
- // set new highlighted item
- iCurrentItem = i;
- break;
- }
- }
- break;
- }
- case TPointerEvent::EButton1Up:
- {
- break;
- }
- default:
- {
- break;
- }
- }
- }
- }
-
-//=============================================================================
-TRect CSelectionPopup::GridRect() const
- {
- return iPopupCenterRect;
- }
-
-//=============================================================================
-TBool CSelectionPopup::HighlightedItemPressed( TPoint aPosition ) const
- {
- TRect iconRect = iHighlightRectsArray[ iCurrentItem ];
-
- if (iconRect.Contains( aPosition ))
- {
- return ETrue;
- }
- else
- {
- return EFalse;
- }
- }
-
-//=============================================================================
-void CSelectionPopup::SetSelectedValue( TInt aSelected )
- {
- ASSERT( aSelected >= 0 );
- iCurrentItem = iItemArray.Find( aSelected );
- }
-
-//=============================================================================
-TInt CSelectionPopup::GetSelectedValue() const
- {
- ASSERT( iCurrentItem >= 0 && iCurrentItem < iItemArray.Count() );
- return iItemArray[iCurrentItem];
- }
-
-
-//=============================================================================
-// DIALOG
-//=============================================================================
-TInt CSelectionDialog::RunDlgLD( const CFbsBitmap* aBitmap,
- const TRect& aRect,
- TInt& aSelection )
- {
- CSelectionDialog* dialog =
- new (ELeave) CSelectionDialog ( aSelection );
- dialog->ConstructL( aBitmap, aRect);
- return dialog->ExecuteLD( R_IMAGE_EDITOR_COLOR_DIALOG );
- }
-
-//=============================================================================
-CSelectionDialog::CSelectionDialog( TInt& aSelection )
-: iCurrentValue( aSelection )
- {
- }
-
-//=============================================================================
-CSelectionDialog::~CSelectionDialog()
- {
- delete iPopup;
- }
-
-//=============================================================================
-
-void CSelectionDialog::ConstructL( const CFbsBitmap* aBitmap,
- const TRect& aRect )
- {
- iPopup = new ( ELeave ) CSelectionPopup();
- iPopup->SetSelectedValue( iCurrentValue);
- iPopup->ConstructL( this );
-
- SetRect(aRect);
-
- // Not drawn correctly if calling SetRect()
- iPopup->SetSize(aRect.Size());
- iPopup->SetPosition(TPoint(0,0));
- iPopup->SetImageL( aBitmap );
- }
-
-//=============================================================================
-TBool CSelectionDialog::OkToExitL( TInt aButtonId )
- {
- if ( aButtonId == EAknSoftkeyOk || aButtonId == EAknSoftkeySelect)
- {
- iCurrentValue = iPopup->GetSelectedValue();
- return ETrue;
- }
- else
- {
- return EFalse;
- }
- }
-
-//=============================================================================
-void CSelectionDialog::Draw(const TRect& /*aRect*/) const
- {
- }
-
-//=============================================================================
-void CSelectionDialog::SizeChanged()
- {
- }
-
-//=============================================================================
-void CSelectionDialog::PreLayoutDynInitL()
- {
- }
-
-
-//=============================================================================
-TInt CSelectionDialog::CountComponentControls() const
- {
- return 1;
- }
-
-//=============================================================================
-CCoeControl* CSelectionDialog::ComponentControl(TInt /*aIndex*/) const
- {
- return iPopup;
- }
-
-//=============================================================================
-TKeyResponse CSelectionDialog::OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType)
- {
- // Selection key or numeric keypad '5' close the dialog
- TKeyResponse res = EKeyWasNotConsumed;
- if (aType == EEventKey &&
- (aKeyEvent.iCode == EKeyOK || aKeyEvent.iCode == 53 || aKeyEvent.iScanCode == EStdKeyEnter) )
- {
- TryExitL (EAknSoftkeyOk);
- res = EKeyWasConsumed;
- }
- else if (aType == EEventKey && aKeyEvent.iCode == EKeyNo || aKeyEvent.iCode == EKeyEscape) // Do not exit if dialog active
- {
- TryExitL (EAknSoftkeyCancel);
- res = EKeyWasNotConsumed;
- }
-#ifdef FULLSCREEN_AVAILABLE
- else if (aType == EEventKey && aKeyEvent.iCode == 48 ) // 0
- {
- // Switch normal screen / full screen
- if (CResolutionUtil::Self()->GetFullScreen())
- {
- iEikonEnv->EikAppUi()->HandleCommandL(EImageEditorMenuCmdNormalScreen);
- SetRect(iEikonEnv->EikAppUi()->ClientRect());
- SizeChanged();
- DrawNow();
- }
- else
- {
- iEikonEnv->EikAppUi()->HandleCommandL(EImageEditorMenuCmdFullScreen);
- SetExtentToWholeScreen();
- SizeChanged();
- DrawNow();
- }
- res = EKeyWasConsumed;
- }
-#endif // FULLSCREEN_AVAILABLE
- else
- {
- res = iPopup->OfferKeyEventL(aKeyEvent, aType);
- if (res == EKeyWasConsumed)
- {
- DrawDeferred();
- }
- }
-
- return res;
- }
-
-//=============================================================================
-void CSelectionDialog::HandlePointerEventL(
- const TPointerEvent &aPointerEvent )
- {
- if( AknLayoutUtils::PenEnabled() )
- {
- TBool draw( EFalse );
- switch( aPointerEvent.iType )
- {
- case TPointerEvent::EButton1Down:
- {
- // forward event only if grid area was pressed
- if ( iPopup->GridRect().Contains( aPointerEvent.iPosition ) )
- {
- iPopup->HandlePointerEventL( aPointerEvent );
- draw = ETrue;
- }
- break;
- }
- case TPointerEvent::EDrag:
- {
- if ( iPopup->GridRect().Contains( aPointerEvent.iPosition ) )
- {
- iPopup->HandlePointerEventL( aPointerEvent );
- draw = ETrue;
- }
- break;
- }
- case TPointerEvent::EButton1Up:
- {
- // already highlighted item is pressed
- if ( iPopup->HighlightedItemPressed( aPointerEvent.iPosition ) )
- {
- TryExitL (EAknSoftkeyOk);
- }
- break;
- }
- default:
- {
- break;
- }
- }
-
- if ( draw )
- {
- DrawDeferred();
- }
- }
- }
-
-// End of file
-
+/*
+* Copyright (c) 2010 Ixonos Plc.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the "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:
+* Ixonos Plc
+*
+* Description:
+* Selection popup dialog.
+*
+*/
+
+
+// INCLUDES
+
+#include <avkon.hrh>
+#include <AknLayoutScalable_Avkon.cdl.h>
+#include <AknLayoutScalable_Apps.cdl.h>
+#include <fbs.h>
+#include <AknIconUtils.h>
+#include <AknUtils.h>
+
+#include <AknBidiTextUtils.h>
+#include <BidiText.h>
+
+#include <ImageEditorUi.mbg>
+#include <ImageEditorUI.rsg>
+#include <draw.rsg>
+#include <drawpath.h>
+
+#include "ResolutionUtil.h"
+#include "selectionpopup.h"
+#include "ImageEditorUiDefs.h"
+
+// CONSTANTS
+const TInt KGridColumnCount = 5;
+const TInt KGridRowCount = 1;
+const TInt KPenSizeOffset = 153;
+
+
+//=============================================================================
+CSelectionPopup::CSelectionPopup(TRgb& aCurrentColor, const TRect& aImageRect)
+ {
+ // Set values into an array
+ iItemArray.Append( 2 ); //default: 4
+ iItemArray.Append( 4 );
+ iItemArray.Append( 8 );
+ iItemArray.Append( 16 );
+ iItemArray.Append( 32 );
+
+ //set defalut color
+ iCurrentColor = aCurrentColor;
+
+ iImageRect = aImageRect;
+ }
+
+//=============================================================================
+CSelectionPopup::~CSelectionPopup()
+ {
+ delete iPopupCenter;
+ delete iPopupCenterMask;
+ delete iPopupCornerTL;
+ delete iPopupCornerTLMask;
+ delete iPopupCornerTR;
+ delete iPopupCornerTRMask;
+ delete iPopupCornerBL;
+ delete iPopupCornerBLMask;
+ delete iPopupCornerBR;
+ delete iPopupCornerBRMask;
+ delete iPopupSideL;
+ delete iPopupSideLMask;
+ delete iPopupSideR;
+ delete iPopupSideRMask;
+ delete iPopupSideT;
+ delete iPopupSideTMask;
+ delete iPopupSideB;
+ delete iPopupSideBMask;
+
+ iHighlightRectsArray.Close();
+ iGridRectsArray.Close();
+ iColorBitmapsArray.ResetAndDestroy();
+ iItemArray.Close();
+ }
+
+//=============================================================================
+void CSelectionPopup::ConstructL ( CCoeControl* aParent )
+ {
+ // Set parent
+ SetContainerWindowL( *aParent );
+
+ TFileName iconFile( KImageEditorUiMifFile );
+
+ // Create trans popup window graphics
+ // Center
+ AknIconUtils::CreateIconL( iPopupCenter, iPopupCenterMask, iconFile,
+ EMbmImageeditoruiQgn_graf_popup_trans_center,
+ EMbmImageeditoruiQgn_graf_popup_trans_center_mask );
+
+ // Top-left corner
+ AknIconUtils::CreateIconL( iPopupCornerTL, iPopupCornerTLMask, iconFile,
+ EMbmImageeditoruiQgn_graf_popup_trans_corner_tl,
+ EMbmImageeditoruiQgn_graf_popup_trans_corner_tl_mask );
+
+ // Top-right corner
+ AknIconUtils::CreateIconL( iPopupCornerTR, iPopupCornerTRMask, iconFile,
+ EMbmImageeditoruiQgn_graf_popup_trans_corner_tr,
+ EMbmImageeditoruiQgn_graf_popup_trans_corner_tr_mask );
+
+ // Bottom-left corner
+ AknIconUtils::CreateIconL( iPopupCornerBL, iPopupCornerBLMask, iconFile,
+ EMbmImageeditoruiQgn_graf_popup_trans_corner_bl,
+ EMbmImageeditoruiQgn_graf_popup_trans_corner_bl_mask );
+
+ // Bottom-right corner
+ AknIconUtils::CreateIconL( iPopupCornerBR, iPopupCornerBRMask, iconFile,
+ EMbmImageeditoruiQgn_graf_popup_trans_corner_br,
+ EMbmImageeditoruiQgn_graf_popup_trans_corner_br_mask );
+
+ // left side
+ AknIconUtils::CreateIconL( iPopupSideL, iPopupSideLMask, iconFile,
+ EMbmImageeditoruiQgn_graf_popup_trans_side_l,
+ EMbmImageeditoruiQgn_graf_popup_trans_side_l_mask );
+
+ // left side
+ AknIconUtils::CreateIconL( iPopupSideR, iPopupSideRMask, iconFile,
+ EMbmImageeditoruiQgn_graf_popup_trans_side_r,
+ EMbmImageeditoruiQgn_graf_popup_trans_side_r_mask );
+
+ // top side
+ AknIconUtils::CreateIconL( iPopupSideT, iPopupSideTMask, iconFile,
+ EMbmImageeditoruiQgn_graf_popup_trans_side_t,
+ EMbmImageeditoruiQgn_graf_popup_trans_side_t_mask );
+
+ // bottom side
+ AknIconUtils::CreateIconL( iPopupSideB, iPopupSideBMask, iconFile,
+ EMbmImageeditoruiQgn_graf_popup_trans_side_b,
+ EMbmImageeditoruiQgn_graf_popup_trans_side_b_mask );
+
+ // Activate control
+ ActivateL();
+
+ }
+
+//=============================================================================
+void CSelectionPopup::CreateColorBitmapsL( TSize /* aSize */ )
+ {
+ //TODO: to set icon here
+ // Generate color bitmaps
+ iColorBitmapsArray.Reset();
+
+ TSize size(2,2);
+ for( TInt i = iItemArray.Count(); i > 0 ; i-- )
+ {
+ CFbsBitmap* bitmap = new ( ELeave ) CFbsBitmap;
+ CleanupStack::PushL( bitmap );
+ User::LeaveIfError ( bitmap->Create ( size, EColor64K ) );
+ size.iHeight*=2;
+ size.iWidth*=2;
+ // Compute color for bitmap
+ TRgb color( iCurrentColor );//iRGBArray[i] );
+
+ // Fill the bitmap with the correct color
+ TUint16 color_64k = ( TUint16 )
+ (0 |
+ ((( TUint8 )color.Red() >> 3) << 11) |
+ ((( TUint8 )color.Green() >> 2) << 5) |
+ (( TUint8 )color.Blue() >> 3));
+
+ bitmap->LockHeapLC();
+ TUint16 * pd = (TUint16 *)bitmap->DataAddress();
+ TSize size = bitmap->SizeInPixels();
+ TInt w = (bitmap->ScanLineLength(size.iWidth, EColor64K) >> 1)
+ * size.iHeight;
+ for( TInt k = w; k != 0; --k)
+ {
+ *pd++ = color_64k;
+ }
+
+ iColorBitmapsArray.Append( bitmap );
+
+ CleanupStack::PopAndDestroy(); // LockHeapLC()
+ CleanupStack::Pop(); // bitmap
+
+ }
+
+ }
+
+//=============================================================================
+void CSelectionPopup::Draw( const TRect& aRect ) const
+ {
+ const TRgb KHighlightCenterColor (229, 229, 229);
+
+ CWindowGc& gc = SystemGc();
+
+ // Change brush to null to enable transparent drawing
+ gc.SetBrushStyle (CGraphicsContext::ENullBrush);
+
+ // draw center of the borders
+ gc.BitBltMasked( iPopupCenterRect.iTl, iPopupCenter,
+ iPopupCenterRect.Size(), iPopupCenterMask, EFalse );
+ // draw Top left corner
+ gc.BitBltMasked( iPopupCornerTLRect.iTl, iPopupCornerTL,
+ iPopupCornerTLRect.Size(), iPopupCornerTLMask, EFalse );
+ // draw Top right corner
+ gc.BitBltMasked( iPopupCornerTRRect.iTl, iPopupCornerTR,
+ iPopupCornerTRRect.Size(), iPopupCornerTRMask, EFalse );
+ // draw Bottom left corner
+ gc.BitBltMasked( iPopupCornerBLRect.iTl, iPopupCornerBL,
+ iPopupCornerBLRect.Size(), iPopupCornerBLMask, EFalse );
+ // draw Bottom right corner
+ gc.BitBltMasked( iPopupCornerBRRect.iTl, iPopupCornerBR,
+ iPopupCornerBRRect.Size(), iPopupCornerBRMask, EFalse );
+ // draw Left side
+ gc.BitBltMasked( iPopupSideLRect.iTl, iPopupSideL,
+ iPopupSideLRect.Size(), iPopupSideLMask, EFalse );
+ // draw Right side
+ gc.BitBltMasked( iPopupSideRRect.iTl, iPopupSideR,
+ iPopupSideRRect.Size(), iPopupSideRMask, EFalse );
+ // draw Top side
+ gc.BitBltMasked( iPopupSideTRect.iTl, iPopupSideT,
+ iPopupSideTRect.Size(), iPopupSideTMask, EFalse );
+ // draw Bottom side
+ gc.BitBltMasked( iPopupSideBRect.iTl, iPopupSideB,
+ iPopupSideBRect.Size(), iPopupSideBMask, EFalse );
+
+ // Draw color items and selection indicator
+ for( TInt index = 0; index < iGridRectsArray.Count(); index++ )
+ {
+ // Draw selection indicator for current item
+ if( index == iCurrentItem )
+ {
+ gc.SetBrushStyle( CGraphicsContext::ESolidBrush );
+ gc.SetBrushColor( KHighlightCenterColor );
+ gc.SetPenColor( KRgbBlack );
+ gc.SetPenSize( TSize(2,2) );
+ gc.DrawRect( iHighlightRectsArray[ iCurrentItem ] );
+
+ gc.SetBrushStyle (CGraphicsContext::ENullBrush);
+ }
+
+ // draw color bitmap
+ TRect currentRect = iGridRectsArray[index];
+ currentRect.iTl.iX = currentRect.iTl.iX + (currentRect.iBr.iX - currentRect.iTl.iX)/2 - iItemArray[index]/2;
+ currentRect.iTl.iY = currentRect.iTl.iY + (currentRect.iBr.iY - currentRect.iTl.iY)/2 - iItemArray[index]/2;
+ gc.BitBlt(currentRect.iTl, iColorBitmapsArray[index]);
+ }
+
+ // Draw heading
+ // Convert the plug-in name to visual representation
+ // (in case would be right-to-left)
+ const CFont* font = NULL;
+ font = AknLayoutUtils::FontFromId( EAknLogicalFontPrimaryFont );
+ TBuf<256> visual;
+ // Text to be converted
+ HBufC * heading = ControlEnv()->AllocReadResourceLC ( R_TITLE_LINE_WEIGHT );
+
+ AknBidiTextUtils::ConvertToVisualAndClip(
+ heading->Des(),
+ visual,
+ *font,
+ iHeadingRect.Width(),
+ iHeadingRect.Width()
+ );
+
+ CleanupStack::PopAndDestroy( heading );
+
+ gc.UseFont( font );
+ gc.SetBrushStyle ( CGraphicsContext::ENullBrush );
+
+ TInt baseline = iHeadingRect.Height() / 2 + font->AscentInPixels() / 2;
+
+ // Check the directionality of the current language and set the alignment
+ // according the directionality
+ TBidiText::TDirectionality dir = TBidiText::ScriptDirectionality(User::Language());
+ CGraphicsContext::TTextAlign align = CGraphicsContext::ELeft;
+
+ if (dir == TBidiText::ERightToLeft)
+ {
+ align = CGraphicsContext::ERight;
+ }
+ gc.SetPenColor(KRgbWhite);
+ gc.DrawText(visual, iHeadingRect, baseline, align, 0);
+
+ }
+
+//=============================================================================
+void CSelectionPopup::SizeChanged()
+ {
+
+ TAknLayoutRect layoutRect;
+ layoutRect.LayoutRect( Rect(), AknLayoutScalable_Apps::popup_imed_trans_window(0) );
+ TRect parentRect = layoutRect.Rect();
+
+ if(parentRect.iTl.iX > parentRect.iTl.iY)
+ {
+ parentRect.SetRect(parentRect.iTl.iX-KPenSizeOffset,parentRect.iTl.iY,parentRect.iBr.iX-KPenSizeOffset,parentRect.iBr.iY);
+ }
+
+ TAknLayoutRect iconLayout;
+ iconLayout.LayoutRect( parentRect, AknLayoutScalable_Avkon::bg_tb_trans_pane_g1());
+ iPopupCenterRect = iconLayout.Rect();
+
+ iconLayout.LayoutRect( parentRect, AknLayoutScalable_Avkon::bg_tb_trans_pane_g2());
+ iPopupCornerTLRect = iconLayout.Rect();
+
+ iconLayout.LayoutRect( parentRect, AknLayoutScalable_Avkon::bg_tb_trans_pane_g3());
+ iPopupCornerTRRect = iconLayout.Rect();
+
+ iconLayout.LayoutRect( parentRect, AknLayoutScalable_Avkon::bg_tb_trans_pane_g4());
+ iPopupCornerBLRect = iconLayout.Rect();
+
+ iconLayout.LayoutRect( parentRect, AknLayoutScalable_Avkon::bg_tb_trans_pane_g5());
+ iPopupCornerBRRect = iconLayout.Rect();
+
+ iconLayout.LayoutRect( parentRect, AknLayoutScalable_Avkon::bg_tb_trans_pane_g6());
+ iPopupSideLRect = iconLayout.Rect();
+
+ iconLayout.LayoutRect( parentRect, AknLayoutScalable_Avkon::bg_tb_trans_pane_g7());
+ iPopupSideRRect = iconLayout.Rect();
+
+ iconLayout.LayoutRect( parentRect, AknLayoutScalable_Avkon::bg_tb_trans_pane_g8());
+ iPopupSideTRect = iconLayout.Rect();
+
+ iconLayout.LayoutRect( parentRect, AknLayoutScalable_Avkon::bg_tb_trans_pane_g9());
+ iPopupSideBRect = iconLayout.Rect();
+
+ iconLayout.LayoutRect( parentRect, AknLayoutScalable_Apps::listscroll_imed_pane());
+ TRect listscrollPaneRect = iconLayout.Rect();
+
+ iconLayout.LayoutRect( listscrollPaneRect, AknLayoutScalable_Apps::grid_imed_colour_35_pane( 1 ));
+ TRect gridPaneRect = iconLayout.Rect();
+
+ iHighlightRectsArray.Reset();
+ iGridRectsArray.Reset();
+ for( TInt row = 0; row < KGridRowCount; row++ )
+ {
+ for( TInt column = 0; column < KGridColumnCount; column++ )
+ {
+ iconLayout.LayoutRect( gridPaneRect,
+ AknLayoutScalable_Apps::cell_imed_colour_pane(0 , column, row ));
+ TRect highlightRect = iconLayout.Rect();
+ iHighlightRectsArray.Append( highlightRect );
+
+ iconLayout.LayoutRect( highlightRect,
+ AknLayoutScalable_Apps::cell_imed_colour_pane_g1(0) );
+
+ iGridRectsArray.Append(iconLayout.Rect());
+ }
+ }
+
+ CreateColorBitmapsL( iconLayout.Rect().Size() );
+
+ //Heading rect
+ iconLayout.LayoutRect( parentRect, AknLayoutScalable_Apps::heading_imed_pane());
+ TRect heading = iconLayout.Rect();
+
+ TAknLayoutText layoutText;
+ layoutText.LayoutText( heading, AknLayoutScalable_Apps::heading_imed_pane_t1() );
+ iHeadingRect = layoutText.TextRect();
+ iLayoutTextHeading = layoutText;
+
+ // Resize graphics to correct size
+ AknIconUtils::SetSize( iPopupCenter, iPopupCenterRect.Size(), EAspectRatioNotPreserved);
+ AknIconUtils::SetSize( iPopupCornerTL, iPopupCornerTLRect.Size(), EAspectRatioNotPreserved);
+ AknIconUtils::SetSize( iPopupCornerTR, iPopupCornerTRRect.Size(), EAspectRatioNotPreserved);
+ AknIconUtils::SetSize( iPopupCornerBL, iPopupCornerBLRect.Size(), EAspectRatioNotPreserved);
+ AknIconUtils::SetSize( iPopupCornerBR, iPopupCornerBRRect.Size(), EAspectRatioNotPreserved);
+ AknIconUtils::SetSize( iPopupSideL, iPopupSideLRect.Size(), EAspectRatioNotPreserved);
+ AknIconUtils::SetSize( iPopupSideR, iPopupSideRRect.Size(), EAspectRatioNotPreserved);
+ AknIconUtils::SetSize( iPopupSideT, iPopupSideTRect.Size(), EAspectRatioNotPreserved);
+ AknIconUtils::SetSize( iPopupSideB, iPopupSideBRect.Size(), EAspectRatioNotPreserved);
+
+ }
+
+//=============================================================================
+TKeyResponse CSelectionPopup::OfferKeyEventL( const TKeyEvent& aKeyEvent,
+ TEventCode aType )
+ {
+ TKeyResponse res = EKeyWasNotConsumed;
+
+ if (aType == EEventKey)
+ {
+ // If in landscape mode, do different mapping for the number keys.
+ TUint keyCode = aKeyEvent.iCode;
+ TBool landscape = CResolutionUtil::Self()->GetLandscape();
+ if (landscape)
+ {
+ switch (keyCode)
+ {
+ case 49: // numeric keypad '1'
+ keyCode = 55;
+ break;
+ case 50: // numeric keypad '2'
+ keyCode = 52;
+ break;
+ case 51: // numeric keypad '3'
+ keyCode = 49;
+ break;
+ case 52: // numeric keypad '4'
+ keyCode = 56;
+ break;
+ case 54: // numeric keypad '6'
+ keyCode = 50;
+ break;
+ case 55: // numeric keypad '7'
+ keyCode = 57;
+ break;
+ case 56: // numeric keypad '8'
+ keyCode = 54;
+ break;
+ case 57: // numeric keypad '9'
+ keyCode = 51;
+ break;
+ default:
+ break;
+ }
+ }
+
+ switch (keyCode)
+ {
+ case EKeyLeftArrow:
+ case 52: // numeric keypad '4'
+ {
+ if (iCurrentItem == 0)
+ {
+ iCurrentItem = iGridRectsArray.Count() - 1;
+ }
+ else
+ {
+ iCurrentItem--;
+ }
+
+ res = EKeyWasConsumed;
+ break;
+ }
+
+ case EKeyRightArrow:
+ case 54: // numeric keypad '6'
+ {
+ iCurrentItem++;
+ if (iCurrentItem >= iGridRectsArray.Count())
+ {
+ iCurrentItem = 0;
+ }
+
+ res = EKeyWasConsumed;
+ break;
+ }
+
+ case EKeyDownArrow:
+ case 56: // numeric keypad '8'
+ {
+ iCurrentItem += KGridColumnCount;
+ if (iCurrentItem >= iGridRectsArray.Count())
+ {
+ iCurrentItem = iCurrentItem - iGridRectsArray.Count();
+ }
+
+ res = EKeyWasConsumed;
+ break;
+ }
+
+ case EKeyUpArrow:
+ case 50: // numeric keypad '2'
+ {
+ iCurrentItem -= KGridColumnCount;
+ if (iCurrentItem < 0)
+ {
+ iCurrentItem = iGridRectsArray.Count() + iCurrentItem;
+ }
+
+ res = EKeyWasConsumed;
+ break;
+ }
+
+ case 49: // numeric keypad '1'
+ {
+ // Move up and left
+ iCurrentItem -= KGridColumnCount;
+ iCurrentItem --;
+ if (iCurrentItem < 0)
+ {
+ iCurrentItem = iGridRectsArray.Count() + iCurrentItem;
+ }
+ res = EKeyWasConsumed;
+ break;
+ }
+
+ case 51: // numeric keypad '3'
+ {
+ // Move up and right
+ iCurrentItem -= KGridColumnCount;
+ iCurrentItem ++;
+ if (iCurrentItem < 0)
+ {
+ iCurrentItem = iGridRectsArray.Count() + iCurrentItem;
+ }
+ res = EKeyWasConsumed;
+ break;
+ }
+
+ case 55: // numeric keypad '7'
+ {
+ // Move down and left
+ iCurrentItem += KGridColumnCount;
+ iCurrentItem--;
+ if (iCurrentItem >= iGridRectsArray.Count())
+ {
+ iCurrentItem = iCurrentItem - iGridRectsArray.Count();
+ }
+ res = EKeyWasConsumed;
+ break;
+ }
+
+ case 57: // numeric keypad '9'
+ {
+ // Move down and left
+ iCurrentItem += KGridColumnCount;
+ iCurrentItem++;
+ if (iCurrentItem >= iGridRectsArray.Count())
+ {
+ iCurrentItem = iCurrentItem - iGridRectsArray.Count();
+ }
+ res = EKeyWasConsumed;
+ break;
+ }
+
+ default:
+ {
+ break;
+ }
+ }
+ }
+
+ return res;
+
+ }
+
+//=============================================================================
+void CSelectionPopup::HandlePointerEventL( const TPointerEvent &aPointerEvent )
+ {
+ if( AknLayoutUtils::PenEnabled() )
+ {
+ switch( aPointerEvent.iType )
+ {
+ case TPointerEvent::EButton1Down:
+ case TPointerEvent::EDrag:
+ {
+ // calculate which one of the grid items was pressed by
+ // by comparing item rects and pressed position
+ for (TInt i = 0; i < iHighlightRectsArray.Count(); ++i)
+ {
+ TRect iconRect( iHighlightRectsArray[i] );
+
+ if( iconRect.Contains( aPointerEvent.iPosition ) )
+ {
+ // set new highlighted item
+ iCurrentItem = i;
+ break;
+ }
+ }
+ break;
+ }
+ case TPointerEvent::EButton1Up:
+ {
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+ }
+ }
+
+//=============================================================================
+TRect CSelectionPopup::GridRect() const
+ {
+ return iPopupCenterRect;
+ }
+
+//=============================================================================
+TBool CSelectionPopup::HighlightedItemPressed( TPoint aPosition ) const
+ {
+ TRect iconRect = iHighlightRectsArray[ iCurrentItem ];
+
+ if (iconRect.Contains( aPosition ))
+ {
+ return ETrue;
+ }
+ else
+ {
+ return EFalse;
+ }
+ }
+
+//=============================================================================
+void CSelectionPopup::SetSelectedValue( TInt aSelected )
+ {
+ ASSERT( aSelected >= 0 );
+ iCurrentItem = iItemArray.Find( aSelected );
+ }
+
+//=============================================================================
+TInt CSelectionPopup::GetSelectedValue() const
+ {
+ ASSERT( iCurrentItem >= 0 && iCurrentItem < iItemArray.Count() );
+ return iItemArray[iCurrentItem];
+ }
+
+
+//=============================================================================
+// DIALOG
+//=============================================================================
+TInt CSelectionDialog::RunDlgLD( const CFbsBitmap* aBitmap,
+ const TRect& aRect,
+ TInt& aSelection,
+ TRgb& aCurrentColor,
+ const TRect& aImageRect)
+ {
+ CSelectionDialog* dialog =
+ new (ELeave) CSelectionDialog ( aSelection);
+ dialog->ConstructL( aBitmap, aRect, aCurrentColor, aImageRect);
+ return dialog->ExecuteLD( R_IMAGE_EDITOR_COLOR_DIALOG );
+ }
+
+//=============================================================================
+CSelectionDialog::CSelectionDialog( TInt& aSelection)
+: iCurrentValue( aSelection )
+ {
+ }
+
+//=============================================================================
+CSelectionDialog::~CSelectionDialog()
+ {
+ delete iPopup;
+ }
+
+//=============================================================================
+
+void CSelectionDialog::ConstructL( const CFbsBitmap* aBitmap,
+ const TRect& aRect,
+ TRgb& aCurrentColor,
+ const TRect& aImageRect)
+ {
+ iPopup = new ( ELeave ) CSelectionPopup(aCurrentColor, aImageRect);
+ iPopup->SetSelectedValue(iCurrentValue);
+ iPopup->ConstructL(this);
+
+ SetRect(aRect);
+
+ // Not drawn correctly if calling SetRect()
+ iPopup->SetSize(aRect.Size());
+ iPopup->SetPosition(TPoint(0,0));
+ iPopup->SetImageL( aBitmap ); // set the image which we are editing
+ }
+
+//=============================================================================
+TBool CSelectionDialog::OkToExitL( TInt aButtonId )
+ {
+ if ( aButtonId == EAknSoftkeyOk || aButtonId == EAknSoftkeySelect)
+ {
+ iCurrentValue = iPopup->GetSelectedValue();
+ return ETrue;
+ }
+ else
+ {
+ return EFalse;
+ }
+ }
+
+//=============================================================================
+void CSelectionDialog::Draw(const TRect& /*aRect*/) const
+ {
+ }
+
+//=============================================================================
+void CSelectionDialog::SizeChanged()
+ {
+ }
+
+//=============================================================================
+void CSelectionDialog::PreLayoutDynInitL()
+ {
+ }
+
+
+//=============================================================================
+TInt CSelectionDialog::CountComponentControls() const
+ {
+ return 1;
+ }
+
+//=============================================================================
+CCoeControl* CSelectionDialog::ComponentControl(TInt /*aIndex*/) const
+ {
+ return iPopup;
+ }
+
+//=============================================================================
+TKeyResponse CSelectionDialog::OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType)
+ {
+ // Selection key or numeric keypad '5' close the dialog
+ TKeyResponse res = EKeyWasNotConsumed;
+ if (aType == EEventKey &&
+ (aKeyEvent.iCode == EKeyOK || aKeyEvent.iCode == 53 || aKeyEvent.iScanCode == EStdKeyEnter) )
+ {
+ TryExitL (EAknSoftkeyOk);
+ res = EKeyWasConsumed;
+ }
+ else if (aType == EEventKey && aKeyEvent.iCode == EKeyNo || aKeyEvent.iCode == EKeyEscape) // Do not exit if dialog active
+ {
+ TryExitL (EAknSoftkeyCancel);
+ res = EKeyWasNotConsumed;
+ }
+#ifdef FULLSCREEN_AVAILABLE
+ else if (aType == EEventKey && aKeyEvent.iCode == 48 ) // 0
+ {
+ // Switch normal screen / full screen
+ if (CResolutionUtil::Self()->GetFullScreen())
+ {
+ iEikonEnv->EikAppUi()->HandleCommandL(EImageEditorMenuCmdNormalScreen);
+ SetRect(iEikonEnv->EikAppUi()->ClientRect());
+ SizeChanged();
+ DrawNow();
+ }
+ else
+ {
+ iEikonEnv->EikAppUi()->HandleCommandL(EImageEditorMenuCmdFullScreen);
+ SetExtentToWholeScreen();
+ SizeChanged();
+ DrawNow();
+ }
+ res = EKeyWasConsumed;
+ }
+#endif // FULLSCREEN_AVAILABLE
+ else
+ {
+ res = iPopup->OfferKeyEventL(aKeyEvent, aType);
+ if (res == EKeyWasConsumed)
+ {
+ DrawDeferred();
+ }
+ }
+
+ return res;
+ }
+
+//=============================================================================
+void CSelectionDialog::HandlePointerEventL(
+ const TPointerEvent &aPointerEvent )
+ {
+ if( AknLayoutUtils::PenEnabled() )
+ {
+ switch( aPointerEvent.iType )
+ {
+ case TPointerEvent::EButton1Down:
+ {
+ // forward event only if grid area was pressed
+ if ( iPopup->GridRect().Contains( aPointerEvent.iPosition ) )
+ {
+ iPopup->HandlePointerEventL( aPointerEvent );
+ }
+ break;
+ }
+ case TPointerEvent::EDrag:
+ {
+ if ( iPopup->GridRect().Contains( aPointerEvent.iPosition ) )
+ {
+ iPopup->HandlePointerEventL( aPointerEvent );
+ }
+ break;
+ }
+ case TPointerEvent::EButton1Up:
+ {
+ // already highlighted item is pressed
+ if ( iPopup->HighlightedItemPressed( aPointerEvent.iPosition ) )
+ {
+ TryExitL (EAknSoftkeyOk);
+ }
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+ }
+ }
+
+// End of file
+