diff -r f72a12da539e -r 5315654608de widgetmanager/src/wmdetailsdlg.cpp --- a/widgetmanager/src/wmdetailsdlg.cpp Thu Dec 17 08:40:49 2009 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,525 +0,0 @@ -/* -* Copyright (c) 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: -* Implementation of the widget details dlg for WidgetManager -* -*/ - -// INCLUDE FILES -#include -#include // for CRichTextEditor -#include // for CRichText -#include // for AknUtils -#include // MAknsSkinInstance -#include // AknsDrawUtils -#include //layout -#include -#include -#include -#include - -#include -#include "widgetmanager.hrh" -#include "wmdetailsdlg.h" - - -// CONSTANTS - - -// MEMBER FUNCTIONS - -// --------------------------------------------------------- -// FullScreenRect -// rectangle representing the screen -// --------------------------------------------------------- -// -TRect FullScreenRect() - { - TRect screen; - CCoeEnv* env = CCoeEnv::Static(); - if ( env ) - { - CWsScreenDevice* screenDevice = env->ScreenDevice(); - if ( screenDevice ) - screen.SetRect( TPoint(0,0), screenDevice->SizeInPixels() ); - } - return screen; - } - -// --------------------------------------------------------- -// CWmDetailsDlg::NewL -// --------------------------------------------------------- -// -CWmDetailsDlg* CWmDetailsDlg::NewL( - const TDesC& aName, - const TDesC& aDescription, - TBool aCanBeAdded, - const CFbsBitmap* aLogoBmp, - const CFbsBitmap* aLogoMask, - CAknsBasicBackgroundControlContext* aBgContext ) - { - CWmDetailsDlg* self = new ( ELeave ) CWmDetailsDlg( aCanBeAdded ); - CleanupStack::PushL( self ); - self->ConstructL( aName, aDescription, aLogoBmp, aLogoMask, aBgContext ); - CleanupStack::Pop( self ); - return self; - } - -// --------------------------------------------------------- -// CWmDetailsDlg::CWmDetailsDlg -// --------------------------------------------------------- -// -CWmDetailsDlg::CWmDetailsDlg( TBool aCanBeAdded ) - : CAknDialog(), - iCanBeAdded( aCanBeAdded ) - { - iBorder = TGulBorder::ERaisedControl; - } - -// --------------------------------------------------------- -// CWmDetailsDlg::~CWmDetailsDlg -// --------------------------------------------------------- -// -CWmDetailsDlg::~CWmDetailsDlg() - { - iEikonEnv->RemoveFromStack( iRtEditor ); - iEikonEnv->RemoveFromStack( this ); - delete iRtEditor; - delete iName; - delete iDescription; - delete iLogoBmp; - delete iLogoMask; - } - -// ----------------------------------------------------------------------------- -// CWmDetailsDlg::ExecuteLD -// ----------------------------------------------------------------------------- -// -TInt CWmDetailsDlg::ExecuteLD() - { - if ( iCanBeAdded ) - { - return CAknDialog::ExecuteLD( R_WM_DETAILS_ADD_DIALOG ); - } - else - { - return CAknDialog::ExecuteLD( R_WM_DETAILS_ONLY_DIALOG ); - } - } - -// --------------------------------------------------------- -// CWmDetailsDlg::ConstructL -// --------------------------------------------------------- -// -void CWmDetailsDlg::ConstructL( - const TDesC& aName, - const TDesC& aDescription, - const CFbsBitmap* aLogoBmp, - const CFbsBitmap* aLogoMask, - CAknsBasicBackgroundControlContext* aBgContext ) - { - if ( !aLogoBmp ) - { - User::Leave( KErrArgument ); - } - - CAknDialog::ConstructL( R_AVKON_DIALOG_EMPTY_MENUBAR ); - - iBgContext = aBgContext; - iName = aName.AllocL(); - iDescription = aDescription.AllocL(); - - // create bitmap and duplicate handle - iLogoBmp = new ( ELeave ) CFbsBitmap; - TSize newSize = TSize( aLogoBmp->SizeInPixels().iWidth , - aLogoBmp->SizeInPixels().iHeight ); - User::LeaveIfError( iLogoBmp->Create( newSize, aLogoBmp->DisplayMode() ) ); - User::LeaveIfError( iLogoBmp->Duplicate( aLogoBmp->Handle() ) ); - - if ( aLogoMask ) - { - iLogoMask = new ( ELeave ) CFbsBitmap; - newSize = TSize( aLogoMask->SizeInPixels().iWidth , - aLogoMask->SizeInPixels().iHeight ); - User::LeaveIfError( iLogoMask->Create( newSize, aLogoMask->DisplayMode() ) ); - User::LeaveIfError( iLogoMask->Duplicate( aLogoMask->Handle() ) ); - } - - iEikonEnv->AddWindowShadow( static_cast(this) ); - } - -// ----------------------------------------------------------------------------- -// CWmDetailsDlg::OkToExitL -// ----------------------------------------------------------------------------- -// -TBool CWmDetailsDlg::OkToExitL( TInt aButtonId ) - { - if ( aButtonId == ECbaAddToHs || - aButtonId == EAknSoftkeyClose ) - { - // Close dlg - return ETrue; - } - return EFalse; - } - -// ----------------------------------------------------------------------------- -// CWmDetailsDlg::PreLayoutDynInitL -// ----------------------------------------------------------------------------- -// -void CWmDetailsDlg::PreLayoutDynInitL() - { - iRtEditor = new(ELeave) CEikRichTextEditor(); - iRtEditor->ConstructL( this, - 0, - 0, - CEikEdwin::EReadOnly | - CEikEdwin::ENoAutoSelection | - CEikEdwin::EAvkonDisableCursor | - CEikEdwin::EDisplayOnly ); - iRtEditor->SetContainerWindowL(*this); - iRtEditor->SetAknEditorFlags( - EAknEditorFlagEnableScrollBars | - EEikEdwinAvkonDisableCursor | - EEikEdwinDisplayOnly | - EEikEdwinReadOnly ); - - iRtEditor->SetSkinBackgroundControlContextL( iBgContext ); - - CEikScrollBarFrame* scrollBarFrame = iRtEditor->CreateScrollBarFrameL(); - scrollBarFrame->SetScrollBarVisibilityL( CEikScrollBarFrame::EOff, - CEikScrollBarFrame::EOff ); - - InsertAndFormatContentL(); - iRtEditor->UpdateScrollBarsL(); - } - -//------------------------------------------------------------------------------ -// CWmDetailsDlg::InsertAndFormatContentL -//------------------------------------------------------------------------------ -// -void CWmDetailsDlg::InsertAndFormatContentL() - { - CRichText* richText = iRtEditor->RichText(); - const TInt KMinTxtLength = 100; - - richText->Reset(); - if ( iDescription->Des().Length() <= KMinTxtLength ) - { - richText->InsertL( richText->DocumentLength(), - CEditableText::ELineBreak ); - } - richText->InsertL( richText->DocumentLength(), *iDescription ); - - // change the color of the text according to the skin color - TRgb color = KRgbBlack; - MAknsSkinInstance* skin = AknsUtils::SkinInstance(); - AknsUtils::GetCachedColor(skin, color, KAknsIIDQsnTextColors, - EAknsCIQsnTextColorsCG6 ); - - // Format text - iRtEditor->SetSelectionL( 0, richText->DocumentLength() ); - - // Get a logical font to base my font on: - const CFont* logicalFont = AknLayoutUtils::FontFromId(EAknLogicalFontPrimarySmallFont); - // Extract font information - TFontSpec fontspec = logicalFont->FontSpecInTwips(); - TCharFormat charFormat(fontspec.iTypeface.iName, fontspec.iHeight); - TCharFormatMask charFormatMask; - CParaFormat paraFormat; - TParaFormatMask paraFormatMask; - paraFormat.iHorizontalAlignment = CParaFormat::EJustifiedAlign; - charFormat.iFontPresentation.iTextColor = color; - paraFormatMask.SetAttrib(EAttAlignment); - charFormatMask.SetAttrib(EAttFontTypeface); - charFormatMask.SetAttrib(EAttFontHeight); - charFormatMask.SetAttrib(EAttColor); - iRtEditor->ApplyParaFormatL(¶Format, paraFormatMask); - iRtEditor->ApplyCharFormatL(charFormat, charFormatMask); - iRtEditor->ClearSelectionL(); - } - -//------------------------------------------------------------------------------ -// CWmDetailsDlg::CountComponentControls -//------------------------------------------------------------------------------ -// -TInt CWmDetailsDlg::CountComponentControls() const - { - return iRtEditor ? 1 : 0; - } - -//------------------------------------------------------------------------------ -// CWmDetailsDlg::ComponentControl -//------------------------------------------------------------------------------ -// -CCoeControl* CWmDetailsDlg::ComponentControl(TInt aIndex) const - { - switch (aIndex) - { - case 0: - return iRtEditor; - default: - return NULL; - } - } - -//------------------------------------------------------------------------------ -// CWmDetailsDlg::ActivateL -//------------------------------------------------------------------------------ -// -void CWmDetailsDlg::ActivateL() - { - CAknDialog::ActivateL(); - iEikonEnv->EikAppUi()->AddToStackL( this, ECoeStackPriorityDialog ); - iEikonEnv->EikAppUi()->AddToStackL( iRtEditor ); - iRtEditor->SetFocus( ETrue ); - } - -// ----------------------------------------------------------------------------- -// CWmDetailsDlg::WmDetailsDialogRect -// ----------------------------------------------------------------------------- -// -TRect CWmDetailsDlg::WmDetailsDialogRect() - { - TRect mainPane, dlgRect; - TPoint topLeft; - TInt desiredW, desiredH; - AknLayoutUtils::LayoutMetricsRect( - AknLayoutUtils::EApplicationWindow, mainPane ); - - if ( Layout_Meta_Data::IsLandscapeOrientation() ) - { - desiredW = ( mainPane.Width() - (mainPane.Width()/4) ); - desiredH = ( mainPane.Height() - (mainPane.Height()/5) ); - topLeft.iX = ( ( mainPane.Width() - desiredW ) /2); - topLeft.iY = ( ( mainPane.Height() - desiredH ) /2); - dlgRect.SetRect( topLeft, TSize( desiredW, desiredH ) ); - } - else - { - desiredH = ( mainPane.Height() - (mainPane.Height()/4) ); - desiredW = ( mainPane.Width() - (mainPane.Width()/5) ); - topLeft.iX = ( ( mainPane.Width() - desiredW ) /2); - topLeft.iY = ( ( mainPane.Height() - desiredH ) /2); - dlgRect.SetRect( topLeft, TSize( desiredW, desiredH ) ); - } - return dlgRect; - } - -// ----------------------------------------------------------------------------- -// CWmDetailsDlg::SetSizeAndPosition -// ----------------------------------------------------------------------------- -// -void CWmDetailsDlg::SetSizeAndPosition( const TSize& /*aSize*/ ) - { - SetRect( WmDetailsDialogRect() ); - } - -// ----------------------------------------------------------------------------- -// CWmDetailsDlg::SizeChanged -// ----------------------------------------------------------------------------- -// -void CWmDetailsDlg::SizeChanged() - { - CAknDialog::SizeChanged(); - TRect rect = Rect(); - if ( iBgContext ) { iBgContext->SetRect( FullScreenRect() ); } - if ( iRtEditor ) - { - const TInt offSet = 5; - TRect cbaRect; - AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EControlPane, cbaRect ); - - TInt logoH = iLogoBmp->SizeInPixels().iHeight; - - TInt height, width; - if ( Layout_Meta_Data::IsLandscapeOrientation() ) - { - height = ( (rect.Height() - logoH) - (cbaRect.Height() * 2) - offSet ); - } - else - { - height = ( (rect.Height() - logoH) - (cbaRect.Height() * 1.5) - offSet ); - } - - width = ( rect.Width() - (CEikScrollBar::DefaultScrollBarBreadth() * 4 ) - offSet ); - TPoint point = TPoint( rect.iTl.iX + offSet, rect.iTl.iY + logoH + offSet ); - TSize size = TSize( width, height ); - iRtEditor->SetRect( TRect( point, size ) ); - TRAP_IGNORE( - iRtEditor->SetSkinBackgroundControlContextL( iBgContext ); - InsertAndFormatContentL(); ); - } - } - -// ---------------------------------------------------------------------------- -// CWmDetailsDlg::SupplyMopObject -// ---------------------------------------------------------------------------- -// -TTypeUid::Ptr CWmDetailsDlg::MopSupplyObject( TTypeUid aId ) - { - if ( aId.iUid == MAknsControlContext::ETypeId ) - { - return MAknsControlContext::SupplyMopObject( aId, iBgContext ); - } - return CAknDialog::MopSupplyObject( aId ); - } - -// ---------------------------------------------------------------------------- -// CWmDetailsDlg::OfferKeyEventL -// ---------------------------------------------------------------------------- -// -TKeyResponse CWmDetailsDlg::OfferKeyEventL( const TKeyEvent& aKeyEvent,TEventCode aType ) - { - if (aType == EEventKey) - { - switch (aKeyEvent.iCode) - { - case EKeyEscape: - { - // framework calls this when dialog must shut down - return CAknDialog::OfferKeyEventL( aKeyEvent, aType ); - } - case EKeyDownArrow: - { - if ( iRtEditor ) - { - iRtEditor->MoveCursorL(TCursorPosition::EFPageDown, EFalse); - return EKeyWasConsumed; - } - } - case EKeyUpArrow: - { - if ( iRtEditor ) - { - iRtEditor->MoveCursorL(TCursorPosition::EFPageUp, EFalse); - return EKeyWasConsumed; - } - } - default: - { - if ( iRtEditor ) - { - return iRtEditor->OfferKeyEventL( aKeyEvent, aType ); - } - break; - } - } - } - return CAknDialog::OfferKeyEventL( aKeyEvent, aType); - } - -// ----------------------------------------------------------------------------- -// CWmDetailsDlg::Draw -// ----------------------------------------------------------------------------- -// -void CWmDetailsDlg::Draw( const TRect& /*aRect*/ ) const - { - CWindowGc& gc = SystemGc(); - TRect rect = Rect(); - TRect innerRect( rect ); - TRgb color = KRgbBlack; - const TInt offSet = 5; - - MAknsSkinInstance* skin = AknsUtils::SkinInstance(); - MAknsControlContext* cc = AknsDrawUtils::ControlContext( this ); - - // draw background - if ( !AknsDrawUtils::Background( skin, cc, this, gc, innerRect ) ) - { - gc.SetPenStyle( CGraphicsContext::ENullPen ); - gc.SetBrushStyle( CGraphicsContext::ENullBrush ); - gc.SetBrushColor( AKN_LAF_COLOR( 0 ) ); - gc.SetBrushStyle( CGraphicsContext::ESolidBrush ); - gc.DrawRect( innerRect ); - gc.SetBrushStyle( CGraphicsContext::ENullBrush ); - } - - // to fix scrollbar background issue in richtext editor - if ( iRtEditor ) - { - MAknsControlContext* ccRte = AknsDrawUtils::ControlContext( iRtEditor ); - AknsDrawUtils::Background( skin, ccRte, iRtEditor, gc, iRtEditor->Rect() ); - } - - // draw logo - TRect bmpRect( TPoint(0,0), TSize( iLogoBmp->SizeInPixels() ) ); - TPoint point = TPoint( innerRect.iTl.iX + offSet, - innerRect.iTl.iY + offSet ); - - if ( iLogoBmp && iLogoMask ) - { - gc.BitBltMasked( point, iLogoBmp, - bmpRect, iLogoMask, ETrue ); - } - else - { - gc.BitBlt( point, iLogoBmp, bmpRect ); - } - - // draw name - point.iX += (bmpRect.Width() + offSet); - - AknsUtils::GetCachedColor( - skin, color, - KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG6 ); - - // DRAW TEXT - const CFont* font = AknLayoutUtils::FontFromId( EAknLogicalFontPrimaryFont ); - gc.UseFont( font ); - gc.SetPenColor( color ); - gc.SetPenStyle( CGraphicsContext::ESolidPen ); - point.iY += (bmpRect.Height() - (font->HeightInPixels() /2 ) ); - CGraphicsContext::TDrawTextParam param; - - HBufC* buf = iName->Des().Alloc(); - if ( buf ) - { - TPtr bufPtr = buf->Des(); - TextUtils::ClipToFit( bufPtr, *font, (innerRect.Width() - point.iX ) ); - gc.DrawText( bufPtr ,point, param ); - delete buf; - } - else - { - gc.DrawText( *iName ,point, param ); - } - - gc.DiscardFont(); - - // draw the rounded rectangle as border - const TInt KFrameRoundRadius = 3; - const TInt KBorderWidth = 2; - gc.SetPenSize( TSize( KBorderWidth, KBorderWidth ) ); - gc.DrawRoundRect( innerRect, TSize( KFrameRoundRadius, KFrameRoundRadius ) ); - - // draw shadow - gc.SetBrushStyle(CGraphicsContext::ESolidBrush); - gc.SetPenStyle( CGraphicsContext::ESolidPen ); - gc.SetBrushColor( color ); - gc.SetPenColor( color ); - TRect rightShadowArea = Rect(); - rightShadowArea.iTl.iX = rightShadowArea.iBr.iX - offSet; - rightShadowArea.iTl.iY += offSet/2; - gc.DrawRect(rightShadowArea); - TRect bottomShadowArea = Rect(); - bottomShadowArea.iTl.iX += offSet/2; - bottomShadowArea.iTl.iY += bottomShadowArea.iBr.iY - offSet; - gc.DrawRect( bottomShadowArea ); - gc.SetBrushStyle( CGraphicsContext::ENullBrush ); - gc.SetPenStyle( CGraphicsContext::ENullPen ); - } - -// End of File -