--- a/browserui/browser/BrowserAppSrc/BrowserShortcutKeyMap.cpp Tue Feb 02 00:12:41 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,854 +0,0 @@
-/*
-* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "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: Browser View
-*
-*/
-
-// INCLUDE FILES
-#include <aknutils.h>
-#include <gulicon.h>
-#include <StringLoader.h>
-#include <data_caging_path_literals.hrh>
-#include <eikbtgpc.h>
-#include <eikapp.h>
-#include <AknsUtils.h>
-#include <e32math.h>
-#include <browser.mbg>
-#include "BrowserShortcutKeyMap.h"
-#include "BrowserContentViewContainer.h"
-#include "BrowserPreferences.h"
-#include "BrowserWindowManager.h"
-#include "BrowserWindow.h"
-#include "ApiProvider.h"
-#include "BrowserUIVariant.hrh"
-#include "BrowserAppUi.h"
-#include <AknBidiTextUtils.h>
-
-// CONSTANTS
-_LIT( KKeyMapSvgFile, "browser.mif" );
-
-// Value table for 70% Transparency
-const TInt KTransparency[256] =
- {
- 0, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 7, 7, 7,
- 8, 8, 8, 8, 9, 9, 9, 10, 10, 10, 11, 11, 11, 11, 12, 12, 12, 13, 13, 13,
- 14, 14, 14, 14, 15, 15, 15, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 19,
- 19, 19, 20, 20, 20, 20, 21, 21, 21, 22, 22, 22, 23, 23, 23, 23, 24, 24,
- 24, 25, 25, 25, 26, 26, 26, 26, 27, 27, 27, 28, 28, 28, 29, 29, 29, 29,
- 30, 30, 30, 31, 31, 31, 32, 32, 32, 32, 33, 33, 33, 34, 34, 34, 35, 35,
- 35, 35, 36, 36, 36, 37, 37, 37, 38, 38, 38, 38, 39, 39, 39, 40, 40, 40,
- 41, 41, 41, 41, 42, 42, 42, 43, 43, 43, 44, 44, 44, 44, 45, 45, 45, 46,
- 46, 46, 47, 47, 47, 47, 48, 48, 48, 49, 49, 49, 50, 50, 50, 50, 51, 51,
- 51, 52, 52, 52, 53, 53, 53, 53, 54, 54, 54, 55, 55, 55, 56, 56, 56, 56,
- 57, 57, 57, 58, 58, 58, 59, 59, 59, 59, 60, 60, 60, 61, 61, 61, 62, 62,
- 62, 62, 63, 63, 63, 64, 64, 64, 65, 65, 65, 65, 66, 66, 66, 67, 67, 67,
- 68, 68, 68, 68, 69, 69, 69, 70, 70, 70, 71, 71, 71, 71, 72, 72, 72, 73,
- 73, 73, 74, 74, 74, 74, 75, 75, 75, 76, 76, 76, 77, 77
- };
-
-
-// keymap is 3x4
-#define KNumCellsX 3
-#define KNumCellsY 4
-#define KNumCells 12
-
-// spacing in pixels for scroll bars
-#define KKeymapHScrollbarSize 4
-#define KKeymapVScrollbarSize 4
-
-// sizing for entire keymap (not counting scrollbar)
-// as a percentage of vertical and horizontal screen size
-#define KKeymapVSize 0.90
-#define KKeymapHSize 0.90
-
-// margins for each cell
-#define KCellTopMargin 2
-#define KCellRightMargin 5
-#define KCellBotMargin 2
-#define KCellLeftMargin 5
-
-// Create constant icon assignments for each command
-// note that this follows TShortcutsCommandDecodeEntry in BrowserPreferences.h
-
-typedef const TInt TShortcutsIconAndTextDecodeEntry[2];
-
-#define KShortcutsIconAndTextAssignmentSize 22
-#define KShortcutsIconAndTextDecodeMatrixText 0 // First entry is the Text
-#define KShortcutsIconAndTextDecodeMatrixIcon 1 // Second entry is the Icon
-
-static const TShortcutsIconAndTextDecodeEntry KShortcutsIconAndTextAssignmentMatrix[] =
-{
- /* 0 EWmlNoCmd, */ { R_BROWSER_KEYMAP_TEXT_NONE, EMbmBrowserQgn_indi_browser_tb_key_map },
- /* 1 EWmlCmdHelp, */ { R_BROWSER_KEYMAP_TEXT_SHOW_HELP, EMbmBrowserQgn_indi_browser_tb_help },
- /* 2 EWmlCmdSwitchWindow, */ { R_BROWSER_KEYMAP_TEXT_SWITCH_WINDOW, EMbmBrowserQgn_indi_browser_tb_switch_win },
- /* 3 EWmlCmdSavePage, */ { R_BROWSER_KEYMAP_TEXT_SAVE_PAGE, EMbmBrowserQgn_indi_browser_tb_save_page },
- /* 4 EWmlCmdShowImages, */ { R_BROWSER_KEYMAP_TEXT_VIEW_IMAGES, EMbmBrowserQgn_indi_browser_tb_view_images },
- /* 5 EWmlCmdHistory, */ { R_BROWSER_KEYMAP_TEXT_VISUAL_HISTORY, EMbmBrowserQgn_indi_browser_tb_view_pages },
- /* 6 EWmlCmdFavourites, */ { R_BROWSER_KEYMAP_TEXT_MANAGE_BOOKMARKS, EMbmBrowserQgn_indi_browser_tb_bm },
- /* 7 EWmlCmdShowSubscribeList, */ { R_BROWSER_KEYMAP_TEXT_SUBSCRIBE_TO_FEEDS, EMbmBrowserQgn_indi_browser_tb_rss },
- /* 8 EWmlCmdRotateDisplay, */ { R_BROWSER_KEYMAP_TEXT_ROTATE_SCREEN, EMbmBrowserQgn_indi_browser_tb_rotate },
- /* 9 EWmlCmdPreferences, */ { R_BROWSER_KEYMAP_TEXT_SETTINGS, EMbmBrowserQgn_indi_browser_tb_settings },
- /* 10 EWmlCmdZoomOut, */ { R_BROWSER_KEYMAP_TEXT_ZOOM_OUT, EMbmBrowserQgn_indi_browser_tb_zoom_out },
- /* 11 EWmlCmdZoomIn, */ { R_BROWSER_KEYMAP_TEXT_ZOOM_IN, EMbmBrowserQgn_indi_browser_tb_zoom_in },
- /* 12 EWmlCmdLaunchHomePage, */ { R_BROWSER_KEYMAP_TEXT_GO_TO_HOMEPAGE, EMbmBrowserQgn_indi_browser_tb_home },
- /* 13 EWmlCmdOneStepBack, */ { R_BROWSER_KEYMAP_TEXT_PREVIOUS_PAGE, EMbmBrowserQgn_indi_browser_tb_back },
- /* 14 EWmlCmdShowMiniature, */ { R_BROWSER_KEYMAP_TEXT_MINIATURE_SHOW, EMbmBrowserQgn_indi_browser_tb_page },
- /* 15 EWmlCmdReload, */ { R_BROWSER_KEYMAP_TEXT_RELOAD, EMbmBrowserQgn_indi_browser_tb_reload },
- /* 16 EWmlCmdFindKeyword, */ { R_BROWSER_KEYMAP_TEXT_FIND_KEYWORD, EMbmBrowserQgn_indi_browser_tb_find_kw },
- /* 17 EWmlCmdSaveAsBookmark, */ { R_BROWSER_KEYMAP_TEXT_SAVE_AS_BOOKMARK, EMbmBrowserQgn_indi_browser_tb_save_bm },
- /* 18 EWmlCmdGoToAddress, */ { R_BROWSER_KEYMAP_TEXT_GO_TO_WEB_ADDRESS, EMbmBrowserQgn_indi_browser_tb_goto },
- /* 19 EWmlCmdShowToolBar, */ { R_BROWSER_KEYMAP_TEXT_SHOW_TOOLBAR, EMbmBrowserQgn_indi_browser_tb_tb },
- /* 20 EWmlCmdShowShortcutKeymap, */ { R_BROWSER_KEYMAP_TEXT_SHOW_KEYMAP, EMbmBrowserQgn_indi_browser_tb_key_map },
- /* 21 EWmlCmdEnterFullScreenBrowsing, */ { R_BROWSER_KEYMAP_TEXT_FULL_SCREEN, EMbmBrowserQgn_indi_button_exit_fs },
-};
-
-// key assignments
-static const TInt KDialpadAssignments[] =
-{
- /* 0 */ R_BROWSER_KEYMAP_KEY0,
- /* 1 */ R_BROWSER_KEYMAP_KEY1,
- /* 2 */ R_BROWSER_KEYMAP_KEY2,
- /* 3 */ R_BROWSER_KEYMAP_KEY3,
- /* 4 */ R_BROWSER_KEYMAP_KEY4,
- /* 5 */ R_BROWSER_KEYMAP_KEY5,
- /* 6 */ R_BROWSER_KEYMAP_KEY6,
- /* 7 */ R_BROWSER_KEYMAP_KEY7,
- /* 8 */ R_BROWSER_KEYMAP_KEY8,
- /* 9 */ R_BROWSER_KEYMAP_KEY9,
- /* 10 */ R_BROWSER_KEYMAP_KEY10,
- /* 11 */ R_BROWSER_KEYMAP_KEY11
-};
-
-// ============================= LOCAL FUNCTIONS ===============================
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-// -----------------------------------------------------------------------------
-// TKeymapCellData::TKeymapCellData
-// TKeymapCellData Utility Class constructor
-// -----------------------------------------------------------------------------
-
-TKeymapCellData::TKeymapCellData() :
- keyText(NULL),
- lineText(NULL),
- cmdRscId(NULL),
- keyBitmapImage(NULL),
- keyBitmapMask(NULL)
- {
- }
-
-
-// -----------------------------------------------------------------------------
-// TKeymapCellData::TKeymapCellData
-// TKeymapCellData Utility Class destructor
-// -----------------------------------------------------------------------------
-TKeymapCellData::~TKeymapCellData()
- {
- if(keyText) delete keyText;
- if(lineText) delete lineText;
- if(keyBitmapImage) delete keyBitmapImage;
- if(keyBitmapMask) delete keyBitmapMask;
- }
-
-// -----------------------------------------------------------------------------
-// CBrowserShortcutKeyMap::NewL
-// The two-phase Symbian constructor
-// -----------------------------------------------------------------------------
-//
-CBrowserShortcutKeyMap* CBrowserShortcutKeyMap::NewL( CBrowserContentViewContainer* aContentViewContainer, MApiProvider& aApiProvider )
- {
- CBrowserShortcutKeyMap* self = new (ELeave) CBrowserShortcutKeyMap( aContentViewContainer, aApiProvider );
- CleanupStack::PushL(self);
- self->ConstructL();
- CleanupStack::Pop(); //self
- return self;
- }
-
-
-
-// -----------------------------------------------------------------------------
-// Destructor
-// -----------------------------------------------------------------------------
-CBrowserShortcutKeyMap::~CBrowserShortcutKeyMap()
- {
- // Close out array and delete data members
- iCellData.Close();
-
- // cleanup svg mbm file name
- if(iSvgMbmFile)
- {
- delete iSvgMbmFile;
- iSvgMbmFile = NULL;
- }
-
- // Cleanup Sprite data
- iSprite.Close();
- if(iSpriteBitmapDevice)
- {
- delete iSpriteBitmapDevice;
- iSpriteBitmapDevice = NULL;
- }
- if(iSpriteBitmapContext)
- {
- delete iSpriteBitmapContext;
- iSpriteBitmapContext = NULL;
- }
- if(iSpriteBitmap)
- {
- delete iSpriteBitmap;
- iSpriteBitmap = NULL;
- }
-
- if(iSpriteMaskBitmapDevice)
- {
- delete iSpriteMaskBitmapDevice;
- iSpriteMaskBitmapDevice = NULL;
- }
- if(iSpriteMaskBitmapContext)
- {
- delete iSpriteMaskBitmapContext;
- iSpriteMaskBitmapContext = NULL;
- }
- if(iSpriteMaskBitmap)
- {
- delete iSpriteMaskBitmap;
- iSpriteMaskBitmap = NULL;
- }
-
- }
-
-
-
-// -----------------------------------------------------------------------------
-// CBrowserShortcutKeyMap::CBrowserShortcutKeyMap
-// C++ default constructor can NOT contain any code, that
-// might leave.
-// -----------------------------------------------------------------------------
-//
-CBrowserShortcutKeyMap::CBrowserShortcutKeyMap( CBrowserContentViewContainer* aContentViewContainer, MApiProvider& aApiProvider )
- : iContentViewContainer( aContentViewContainer ), iApiProvider( aApiProvider )
- {
- }
-
-
-
-// -----------------------------------------------------------------------------
-// CBrowserShortcutKeyMap::ConstructL
-// The constructor that can contain code that might leave.
-// -----------------------------------------------------------------------------
-//
-void CBrowserShortcutKeyMap::ConstructL()
- {
- //LoadResourceFileL();
- iSvgMbmFile = GetCannedImageDirL();
- iSvgMbmFile->Des().Append( KKeyMapSvgFile );
-
- InitKeymap();
- CreateBitmapAndContextL();
- ConstructSprite();
- }
-
-
-
-// -----------------------------------------------------------------------------
-// CBrowserShortcutKeyMap::InitKeymap
-// Initialize Keymap properties
-// -----------------------------------------------------------------------------
-//
-void CBrowserShortcutKeyMap::InitKeymap()
- {
- // derive keymap's size from the container's size
- iTargetRect = iContentViewContainer->Rect();
-
- // resize it to account for scrollbar width/height
- iTargetRect.Resize(-TSize(KKeymapHScrollbarSize,KKeymapVScrollbarSize));
-
- TBool landscape = iTargetRect.Size().iWidth > iTargetRect.Size().iHeight ;
-
- //
- // derive shrink amounts based on keymap size constants and shrink the rect
- //
- TInt newHeight = (KKeymapVSize * iTargetRect.Size().iHeight);
- TInt newWidth = (KKeymapHSize * iTargetRect.Size().iWidth);
-
- if(newWidth > KKeymapHSize * iTargetRect.Size().iWidth)
- {
- newWidth = (KKeymapHSize * iTargetRect.Size().iWidth);
- }
-
- // shrink the height and width slightly
- // as necessary to be evenly divisible by the rows/cols later on
- TReal remainder;
- TInt result;
- result = Math::Mod(remainder,newWidth,KNumCellsX);
- if((result == KErrNone) && (remainder != 0))
- {
- newWidth -= remainder;
- }
- result = Math::Mod(remainder,newHeight,KNumCellsY);
- if((result == KErrNone) && (remainder != 0))
- {
- newHeight -= remainder;
- }
- TInt hShrink = (iTargetRect.Size().iWidth - newWidth)/2;
- TInt vShrink = (iTargetRect.Size().iHeight - newHeight)/2;
- iTargetRect.Shrink(TSize(hShrink,vShrink));
-
- // Set font types
- iLineFont = LatinPlain12();
-
- if (landscape)
- { // in landscape need to shrink the font or else it gets clipped
- iKeyFont = LatinBold13();
- }
- else
- {
- iKeyFont = LatinBold16();
- }
-
- // init cell data
- InitCellDataL();
- }
-
-
-
-// -----------------------------------------------------------------------------
-// CBrowserShortcutKeyMap::InitCellDataL
-// Initialize Keymap data kept for each cell of the map
-// -----------------------------------------------------------------------------
-
-void CBrowserShortcutKeyMap::InitCellDataL()
- {
- for(TInt i = 0; i < KNumCells; i++)
- {
- TKeymapCellData* cellData = new (ELeave) TKeymapCellData();
-
- TInt shortcutAssign;
-
- // get the shortcut assignment from Browser Prefs
- switch(i)
- {
- case 0:
- shortcutAssign = iApiProvider.Preferences().ShortcutKey1Cmd();
- break;
- case 1:
- shortcutAssign = iApiProvider.Preferences().ShortcutKey2Cmd();
- break;
- case 2:
- shortcutAssign = iApiProvider.Preferences().ShortcutKey3Cmd();
- break;
- case 3:
- shortcutAssign = iApiProvider.Preferences().ShortcutKey4Cmd();
- break;
- case 4:
- shortcutAssign = iApiProvider.Preferences().ShortcutKey5Cmd();
- break;
- case 5:
- shortcutAssign = iApiProvider.Preferences().ShortcutKey6Cmd();
- break;
- case 6:
- shortcutAssign = iApiProvider.Preferences().ShortcutKey7Cmd();
- break;
- case 7:
- shortcutAssign = iApiProvider.Preferences().ShortcutKey8Cmd();
- break;
- case 8:
- shortcutAssign = iApiProvider.Preferences().ShortcutKey9Cmd();
- break;
- case 9:
- shortcutAssign = iApiProvider.Preferences().ShortcutKeyStarCmd();
- break;
- case 10:
- shortcutAssign = iApiProvider.Preferences().ShortcutKey0Cmd();
- break;
- case 11:
- shortcutAssign = iApiProvider.Preferences().ShortcutKeyHashCmd();
- break;
- default:
- shortcutAssign = iApiProvider.Preferences().ShortcutKey1Cmd();
- break;
- }
-
- cellData->cmdRscId = KShortcutsIconAndTextAssignmentMatrix[shortcutAssign][KShortcutsIconAndTextDecodeMatrixText];
- cellData->lineText = StringLoader::LoadLC(cellData->cmdRscId);
-
- // get shortcut key assignments and set dialpad assignments
- cellData->keyText = StringLoader::LoadLC(KDialpadAssignments[i]);
-
- // load the icon its mask (use a default if we're out of range)
- TInt iconId = EMbmBrowserQgn_indi_browser_tb_key_map;
- if(shortcutAssign < KShortcutsIconAndTextAssignmentSize)
- {
- iconId = KShortcutsIconAndTextAssignmentMatrix[shortcutAssign][KShortcutsIconAndTextDecodeMatrixIcon];
- }
-
- if(shortcutAssign == NULL)
- {
- cellData->keyBitmapImage = NULL;
- cellData->keyBitmapMask = NULL;
- }
- else
- {
- LoadSvg(iconId,
- *iSvgMbmFile,
- cellData->keyBitmapImage,
- cellData->keyBitmapMask);
- }
-
- // add to the data array
- iCellData.Append(cellData);
-
- // remove keytext, linetext from stack
- CleanupStack::Pop(2);
- }
- }
-
-
-
-// -----------------------------------------------------------------------------
-// CBrowserShortcutKeyMap::CreateBitmapAndContextL
-// Create the bitmap and context that will be used for the sprite
-// -----------------------------------------------------------------------------
-//
-void CBrowserShortcutKeyMap::CreateBitmapAndContextL()
- {
- // Create Sprite Bitmap
- iSpriteBitmap = new (ELeave) CFbsBitmap;
- User::LeaveIfError( iSpriteBitmap->Create( iTargetRect.Size(), EColor16MA ) );
-
- iSpriteBitmapDevice = CFbsBitmapDevice::NewL( iSpriteBitmap );
- User::LeaveIfError( iSpriteBitmapDevice->CreateContext( iSpriteBitmapContext ) );
-
- // Create Mask Bitmap
- iSpriteMaskBitmap = new (ELeave) CFbsBitmap;
- User::LeaveIfError( iSpriteMaskBitmap->Create( iTargetRect.Size(), EColor16MA ) );
- iSpriteMaskBitmapDevice = CFbsBitmapDevice::NewL( iSpriteMaskBitmap );
- User::LeaveIfError( iSpriteMaskBitmapDevice->CreateContext( iSpriteMaskBitmapContext ) );
-
- TRect r( TPoint( 0, 0 ), iSpriteMaskBitmap->SizeInPixels());
-
- iSpriteMaskBitmapContext->SetBrushStyle( CGraphicsContext::ESolidBrush );
- iSpriteMaskBitmapContext->SetPenStyle( CGraphicsContext::ESolidPen );
- iSpriteMaskBitmapContext->SetBrushColor( TRgb( 0, 0, 0) );
- iSpriteMaskBitmapContext->SetPenColor( TRgb( 0, 0, 0) );
- iSpriteMaskBitmapContext->DrawRect(r);
-
- // Draw the rectangular outline
- iSpriteBitmapContext->SetBrushStyle( CGraphicsContext::ESolidBrush );
- iSpriteBitmapContext->SetPenStyle( CGraphicsContext::ESolidPen );
- iSpriteBitmapContext->SetBrushColor( TRgb( 242, 244, 242) );
- iSpriteBitmapContext->SetPenColor( TRgb( 100, 100, 0) );
- iSpriteBitmapContext->SetPenSize( TSize(2,2) );
- iSpriteBitmapContext->DrawRect(r);
-
- TSize cellSize(r.Width()/KNumCellsX,r.Height()/KNumCellsY);
-
- for(TInt i = 0; i < KNumCellsY; i++)
- {
- for(TInt j = 0; j < KNumCellsX; j++)
- {
- TInt cellIndex(i*KNumCellsX + j);
- CreateCellLayout( cellIndex, TPoint(j*cellSize.iWidth,i*cellSize.iHeight),cellSize);
- CreateSpriteCellL( cellIndex );
- }
- }
- }
-
-
-
-// -----------------------------------------------------------------------------
-// CBrowserShortcutKeyMap::CreateCellLayout
-// Calculate the layout of the sprite rects for a given cell
-// -----------------------------------------------------------------------------
-
-void CBrowserShortcutKeyMap::CreateCellLayout(const TInt& aCellIndex, const TPoint& aUpperL, const TSize& aSize)
- {
- // Create pointer for easy access curr Cell
- TKeymapCellData* pCurrCell = iCellData[aCellIndex];
-
- // Create rect for Cell
- pCurrCell->r.SetRect(aUpperL, aSize);
-
- // Internally, Our Cell is sized accounting for margin
- // Setup this
- TPoint marginOffset(KCellLeftMargin, KCellTopMargin);
- TSize marginSize(KCellLeftMargin + KCellRightMargin, KCellTopMargin + KCellBotMargin);
- pCurrCell->rCell.SetRect( aUpperL + marginOffset, aSize - marginSize );
-
- // Upper LH key indicator
- TInt keyFontHeight = iKeyFont->HeightInPixels() + iKeyFont->DescentInPixels();
- pCurrCell->rKey.SetRect( pCurrCell->rCell.iTl, TSize(keyFontHeight, iKeyFont->MaxCharWidthInPixels()) );
-
- // Prep the line rects, calculating the position based upon the font size
- TInt lineFontHeight = iLineFont->HeightInPixels() + iLineFont->DescentInPixels();
- TSize lineSize(pCurrCell->rCell.Width(),lineFontHeight);
- TPoint lineAreaUpperLH(pCurrCell->rCell.iTl.iX, pCurrCell->rCell.iBr.iY - (2*lineSize.iHeight));
-
- // Set this point to be the upper left of the line(s) of text.
- // If we have two lines, this will be the upperLH of Line1
- // If we have one line, this will be the upperLH of Line2
- // This, we will use to set the rect size of the icon later
- pCurrCell->rLine1.SetRect(lineAreaUpperLH,lineSize);
- pCurrCell->rLine2.SetRect(lineAreaUpperLH + TPoint(0,lineSize.iHeight),lineSize);
- TPoint linesUpperLH = pCurrCell->rLine1.iTl;
-
- // CREATE the icon area from what is left over
- TPoint iconUpperLH(pCurrCell->rCell.iTl + TPoint(pCurrCell->rKey.Size().iWidth,0));
- TPoint iconLowerRH(pCurrCell->rCell.iBr.iX,linesUpperLH.iY);
- pCurrCell->rIcon.SetRect(iconUpperLH,iconLowerRH);
-
- // resize the icon rect to be square if its not already... according to its smallest dimension
- if(pCurrCell->rIcon.Height() > pCurrCell->rIcon.Width())
- {
- TSize sizeChange(0,pCurrCell->rIcon.Width() - pCurrCell->rIcon.Height());
- pCurrCell->rIcon.Resize(sizeChange);
- pCurrCell->rIcon.Move(TPoint(0,-sizeChange.iHeight/2));
- }
- else if(pCurrCell->rIcon.Width() > pCurrCell->rIcon.Height())
- {
- TSize sizeChange(pCurrCell->rIcon.Height() - pCurrCell->rIcon.Width(),0);
- pCurrCell->rIcon.Resize(sizeChange);
- pCurrCell->rIcon.Move(TPoint(-sizeChange.iWidth/2,0));
- }
- }
-
-
-
-// -----------------------------------------------------------------------------
-// CBrowserShortcutKeyMap::CreateSpriteCellL
-// Draw the sprite rects to the sprite bitmap
-// ----------------------------------------------------------------------------
-
-void CBrowserShortcutKeyMap::CreateSpriteCellL(const TInt& aCellIndex)
- {
- // Create pointer for easy access curr Cell
- TKeymapCellData* pCurrCell = iCellData[aCellIndex];
-
- TBool ShowDim = EFalse;
-
-
- // Draw rect for Cell
- iSpriteBitmapContext->SetPenSize( TSize(1,1) );
- iSpriteBitmapContext->SetPenStyle( CGraphicsContext::ESolidPen );
- iSpriteBitmapContext->SetPenColor( TRgb( 0, 0, 0) );
- iSpriteBitmapContext->DrawRect(pCurrCell->r);
-
-
-
- // DRAW TEXT
- iSpriteBitmapContext->SetPenColor( TRgb( 0, 0, 0) );
-
- // Draw key text
- if(pCurrCell->keyText)
- {
- iSpriteBitmapContext->UseFont( iKeyFont );
- iSpriteBitmapContext->DrawText(pCurrCell->keyText->Des(),
- pCurrCell->rKey, iKeyFont->FontMaxHeight(), CGraphicsContext::ECenter, 0);
- }
-
- // For line1, line2 text, we need to first wrap them
- // based upon the width of their enclosing rectangles
- if(pCurrCell->lineText)
- {
- CArrayFixFlat<TInt> *lineWidthArray = new( ELeave ) CArrayFixFlat<TInt>(2);
- lineWidthArray->AppendL(pCurrCell->rLine1.Width());
- lineWidthArray->AppendL(pCurrCell->rLine2.Width());
-
- CArrayFixFlat<TPtrC> *WrappedArray = new( ELeave ) CArrayFixFlat<TPtrC>(3);
- pCurrCell->lineText = pCurrCell->lineText->ReAllocL(pCurrCell->lineText->Length() + lineWidthArray->Count() * KAknBidiExtraSpacePerLine);
- TPtr ptr(pCurrCell->lineText->Des());
- AknBidiTextUtils::ConvertToVisualAndWrapToArrayL( ptr,*lineWidthArray, *iLineFont, *WrappedArray, EFalse );
- iSpriteBitmapContext->UseFont( iLineFont );
- iSpriteBitmapContext->DrawText(WrappedArray->At(0),
- pCurrCell->rLine2, iLineFont->FontMaxHeight(), CGraphicsContext::ECenter, 0);
-
- if(WrappedArray->Count() >= 2)
- {
- iSpriteBitmapContext->DrawText(WrappedArray->At(0),
- pCurrCell->rLine1, iLineFont->FontMaxHeight(), CGraphicsContext::ECenter, 0);
- iSpriteBitmapContext->DrawText(WrappedArray->At(1),
- pCurrCell->rLine2, iLineFont->FontMaxHeight(), CGraphicsContext::ECenter, 0);
- }
-
-
- // Set dim flag if needed
- switch (pCurrCell->cmdRscId)
- {
- case R_BROWSER_KEYMAP_TEXT_SWITCH_WINDOW:
- { //EWmlCmdSwitchWindow;
- ShowDim = ( !iApiProvider.Preferences().UiLocalFeatureSupported( KBrowserMultipleWindows ) ||
- iApiProvider.IsEmbeddedModeOn() ||
- iApiProvider.WindowMgr().WindowCount() < 2);
- break;
- }
-
- case R_BROWSER_KEYMAP_TEXT_VIEW_IMAGES:
- { //EWmlCmdShowImages;
- ShowDim = ( !iApiProvider.BrCtlInterface().ImageCountL() );
- break;
- }
-
- case R_BROWSER_KEYMAP_TEXT_SUBSCRIBE_TO_FEEDS:
- { // EWmlCmdShowSubscribeList
- CBrCtlInterface& brctl = iApiProvider.BrCtlInterface();
- TBool subscribeToItems(EFalse);
- TRAPD(err, const RPointerArray<TBrCtlSubscribeTo>& items = brctl.SubscribeToMenuItemsL();
- subscribeToItems = (err == KErrNone && items.Count() > 0));
- ShowDim = !subscribeToItems;
- break;
- }
-
- case R_BROWSER_KEYMAP_TEXT_GO_TO_HOMEPAGE:
- { // EWmlCmdLaunchHomePage
- ShowDim = iApiProvider.IsLaunchHomePageDimmedL();
- break;
- }
-
- case R_BROWSER_KEYMAP_TEXT_PREVIOUS_PAGE:
- { // EWmlCmdOneStepBack
- ShowDim = (!iApiProvider.BrCtlInterface().NavigationAvailable(TBrCtlDefs::ENavigationBack ) );
- break;
- }
-
- case R_BROWSER_KEYMAP_TEXT_MINIATURE_SHOW:
- { //EWmlCmdShowMiniature;
- ShowDim = ( !iApiProvider.Preferences().UiLocalFeatureSupported( KBrowserGraphicalPage ) ||
- iApiProvider.WindowMgr().CurrentWindow()->HasWMLContent(ETrue) );
- break;
- }
-
- case R_BROWSER_KEYMAP_TEXT_SHOW_TOOLBAR:
- { //EWmlCmdShowToolBar;
- if ( !AknLayoutUtils::PenEnabled() && iApiProvider.Preferences().ShowToolbarOnOff() )
- {
- ShowDim = iApiProvider.WindowMgr().CurrentWindow()->WMLMode();
- }
- else
- {
- ShowDim = ETrue;
- }
- break;
- }
-
- case R_BROWSER_KEYMAP_TEXT_SAVE_AS_BOOKMARK:
- { //EWmlCmdSaveAsBookmark;
- if ( iApiProvider.IsEmbeddedModeOn() && CBrowserAppUi::Static()->IsEmbeddedInOperatorMenu() )
- {
- ShowDim = ETrue;
- }
- else
- {
- HBufC *pageUrl = iApiProvider.BrCtlInterface().PageInfoLC( TBrCtlDefs::EPageInfoUrl );
- if( ( pageUrl == NULL ) || ( pageUrl->Length() == 0 ) )
- {
- ShowDim = ETrue;
- }
- CleanupStack::PopAndDestroy( pageUrl );
- }
- break;
- }
-
- /* Zoom Mode currently disabled
- case R_BROWSER_KEYMAP_TEXT_ZOOM_MODE:
- { //EWmlCmdZoomMode;
-
- ShowDim = ( iApiProvider.WindowMgr().CurrentWindow()->WMLMode() ||
- !iApiProvider.ContentDisplayed() ||
- AknLayoutUtils::PenEnabled() );
- break;
- }
- */
-
- default:
- break;
- }
- }
-
- // DRAW the icon,
- // setting the icon size according to iconRect
- if(pCurrCell->keyBitmapImage != NULL && pCurrCell->keyBitmapMask != NULL)
- {
- AknIconUtils::SetSize(pCurrCell->keyBitmapImage, pCurrCell->rIcon.Size() );
- AknIconUtils::SetSize(pCurrCell->keyBitmapMask, pCurrCell->rIcon.Size() );
-
- if (ShowDim)
- {
- CFbsBitmap* keyBitmapDimImage;
- CFbsBitmap* keyBitmapDimMask;
-
- CreateDimBitmapL(pCurrCell->keyBitmapImage,
- pCurrCell->keyBitmapMask,
- keyBitmapDimImage,
- keyBitmapDimMask);
-
- iSpriteBitmapContext->BitBltMasked(pCurrCell->rIcon.iTl,
- keyBitmapDimImage,
- TRect(TPoint(0, 0),pCurrCell->rIcon.Size() ),
- keyBitmapDimMask,
- ETrue);
-
- delete keyBitmapDimImage;
- delete keyBitmapDimMask;
- }
- else
- {
- iSpriteBitmapContext->BitBltMasked(pCurrCell->rIcon.iTl,
- pCurrCell->keyBitmapImage,
- TRect(TPoint(0, 0),pCurrCell->rIcon.Size() ),
- pCurrCell->keyBitmapMask,
- ETrue);
- }
- }
- }
-
-
-
-// -----------------------------------------------------------------------------
-// CBrowserShortcutKeyMap::ConstructSprite
-// Construct the Sprite from the bitmap and context
-// -----------------------------------------------------------------------------
-//
-void CBrowserShortcutKeyMap::ConstructSprite()
- {
- iSprite = RWsSprite( CEikonEnv::Static()->WsSession() );
- RWindowTreeNode *window = iContentViewContainer->DrawableWindow();
- iSprite.Construct(*window,iTargetRect.iTl,ESpriteNoChildClip);
-
- TSpriteMember spriteMem;
- spriteMem.iBitmap = iSpriteBitmap;
- spriteMem.iMaskBitmap = iSpriteMaskBitmap;
- spriteMem.iInvertMask = ETrue;
- iSprite.AppendMember(spriteMem);
-
- iSprite.SetPosition(iTargetRect.iTl);
- iSprite.Activate();
- }
-
-
-
-// -----------------------------------------------------------------------------
-// CBrowserShortcutKeyMap::GetCannedImageDirL
-// Utility: Get the folder where the canned image is located
-// -----------------------------------------------------------------------------
-//
-HBufC* CBrowserShortcutKeyMap::GetCannedImageDirL( )
- {
- HBufC* mbmFile = NULL;
- TParse parse;
-
- // Get the drive letter where mbm resides.. it will be the same
- // as this AppUi (browser ng)
- CEikAppUi* pAppUI = (CEikAppUi*)(CCoeEnv::Static()->AppUi());
- TFileName mbmDrive = pAppUI->Application()->DllName();
-
- parse.Set( mbmDrive, NULL, NULL );
- mbmDrive = parse.Drive();
-
- // allocate memory for MBM file name
- mbmFile = HBufC::NewL( KMaxFileName );
-
- // assemble the MBM file name
- TPtr ptr( mbmFile->Des() );
- ptr.SetLength( 0 );
- ptr.Append( mbmDrive );
- ptr.Append( KDC_APP_BITMAP_DIR );
- return mbmFile;
- }
-
-
-
-// -----------------------------------------------------------------------------
-// CBrowserShortcutKeyMap::LoadSvg
-// Utility: get the SVG bitmaps, etc, given its filename
-// -----------------------------------------------------------------------------
-//
-void CBrowserShortcutKeyMap::LoadSvg(
- TInt aImageId,
- const TDesC& aFileName,
- CFbsBitmap*& aImage ,
- CFbsBitmap*& aImageMask )
- {
- // Don't skin icons--at least for now.
- TRAPD(error, AknIconUtils::CreateIconL( aImage,
- aImageMask,
- aFileName,
- aImageId,
- aImageId+1));
-
- if (error!=KErrNone)
- {
- return;
- }
- }
-
-// -----------------------------------------------------------------------------
-// CBrowserShortcutKeyMap::CreateDimBitmap
-// Utility: Create Dimmed version of Bitmap
-// -----------------------------------------------------------------------------
-//
-void CBrowserShortcutKeyMap::CreateDimBitmapL(
- CFbsBitmap* aImage,
- CFbsBitmap* aImageMask,
- CFbsBitmap*& aDimImage,
- CFbsBitmap*& aDimImageMask)
- {
-
- aDimImage = new ( ELeave ) CFbsBitmap;
- CleanupStack::PushL( aDimImage );
-
- aDimImage->Duplicate( aImage->Handle() );
-
- aDimImageMask = new ( ELeave ) CFbsBitmap;
-
- User::LeaveIfError( aDimImageMask->Create(aDimImage->SizeInPixels(),
- EGray256 ) );
-
- CleanupStack::PushL( aDimImageMask );
-
- CFbsBitmapDevice* bitmapDevice = CFbsBitmapDevice::NewL( aDimImageMask );
- CleanupStack::PushL( bitmapDevice );
-
- CFbsBitGc* bitGc( NULL );
- User::LeaveIfError( bitmapDevice->CreateContext( bitGc ) );
- CleanupStack::PushL( bitGc );
-
- bitGc->SetPenStyle( CGraphicsContext::ESolidPen );
- bitGc->BitBlt( TPoint( 0, 0 ), aImageMask );
-
-
- aDimImageMask->LockHeap();
- TInt w = aImageMask->SizeInPixels().iWidth;
- TInt h = aImageMask->SizeInPixels().iHeight;
- TInt dataStride = aImageMask->DataStride() - w;
- unsigned char* address = (unsigned char *)aDimImageMask->DataAddress();
-
- for ( TInt i = 0; i < h; ++i )
- {
- for ( TInt j = 0; j < w; ++j )
- {
- *address = KTransparency[*address];
- ++address;
- }
- address += dataStride;
- }
-
- aDimImageMask->UnlockHeap();
-
- CleanupStack::PopAndDestroy( 2 ); // bitmapDevice, bitGc
- CleanupStack::Pop( 2 ); // aDimImage, aDimImageMask
-
-
- }
-
-// End of File