📄 s60uicodeexcontrol.cpp
字号:
/*
* ==============================================================================
* Name : S60UICodeExControl.cpp
* Part of : S60UICodeEx
* Interface :
* Description :
* Version :
*
* Copyright (c) 2005-2006 Nokia Corporation.
* This material, including documentation and any related
* computer programs, is protected by copyright controlled by
* Nokia Corporation.
* ==============================================================================
*/
// INCLUDE FILES
#include <eikenv.h>
#include <aknutils.h>
#include "akndef.h"
#include <e32svr.h>
#include "S60UICodeExControl.h"
#include "S60UICodeExRotateControl.h"
#include "S60UICodeExTextControl.h"
#include "S60UICodeEx.hrh"
// ============================ MEMBER FUNCTIONS ==============================
// ----------------------------------------------------------------------------
// CS60UICodeExControl::ConstructL
// Symbian 2nd phase constructor.
// ----------------------------------------------------------------------------
//
void CS60UICodeExControl::ConstructL(const TRect& aRect, CAknViewAppUi* /*aAppUi*/)
{
CreateWindowL();
iRotateButtonBox = TRect( 0,0,0,0 );
#ifndef __WINS__
_LIT(KMBMFileName,"c:\\private\\8000ABBA\\pictures.mbm");
#else
_LIT(KMBMFileName,"c:\\pictures.mbm");
#endif
iBitmap = new (ELeave) CFbsBitmap();
// Load the bitmap from an .mbm file
TInt result = iBitmap->Load(KMBMFileName, 0);
iTextBox = TRect( 0,0,0,0 );
iScaler = CMdaBitmapScaler::NewL();
iRotateControl = CS60UICodeExRotateControl::NewL( iRotateButtonBox, this );
iTextControl = CS60UICodeExTextControl::NewL( iTextBox, this );
// Calculates initial position for the controls
TInt textBoxX = STATIC_CAST( TInt, aRect.iBr.iX*0.05 );
TInt textBoxY = STATIC_CAST( TInt, aRect.iBr.iY*0.3 );
TSize textBoxSize( STATIC_CAST( TInt, aRect.iBr.iX*0.9 ),
STATIC_CAST( TInt, aRect.iBr.iY*0.16 ) );
iTextBox = TRect( TPoint( textBoxX, textBoxY ), textBoxSize );
iTextControl->SetRect( iTextBox );
TInt rotateButtonX = STATIC_CAST( TInt, aRect.iBr.iX*0.33 );
TInt rotateButtonY = STATIC_CAST( TInt, aRect.iBr.iY*0.6 );
TSize rotateButtonSize( STATIC_CAST( TInt, aRect.iBr.iX*0.225 ),
STATIC_CAST( TInt, aRect.iBr.iY*0.16 ) );
iRotateButtonBox = TRect( TPoint( rotateButtonX, rotateButtonY ), rotateButtonSize );
iRotateControl->SetRect( iRotateButtonBox );
iControlFocus = ERotateButton;
SetRect( aRect );
ActivateL();
// Scales the background picture without using aspect ratio. Set the last parameter to ETrue,
// if using aspect ratio when scaling is wanted.
iScaler->ScaleL( *this, *iBitmap, iSize, EFalse );
}
// ----------------------------------------------------------------------------
// CS60UICodeExControl::~CS60UICodeExControl
// Destructor.
// ----------------------------------------------------------------------------
//
CS60UICodeExControl::~CS60UICodeExControl()
{
delete iRotateControl;
delete iTextControl;
delete iScaler;
delete iBitmap;
}
// ----------------------------------------------------------------------------
// CS60UICodeExControl::CountComponentControls
//
// ----------------------------------------------------------------------------
//
TInt CS60UICodeExControl::CountComponentControls() const
{
return 2;
}
// ----------------------------------------------------------------------------
// CS60UICodeExControl::ComponentControl
//
// ----------------------------------------------------------------------------
//
CCoeControl* CS60UICodeExControl::ComponentControl(TInt aIndex) const
{
switch ( aIndex )
{
case 0:
return iRotateControl;
break;
case 1:
return iTextControl;
break;
default:
return NULL;
}
}
// ----------------------------------------------------------------------------
// CS60UICodeExControl::SetText
//
// ----------------------------------------------------------------------------
//
void CS60UICodeExControl::SetText( TDes* aText )
{
iText = aText;
iTextControl->SetText( *iText );
}
// ----------------------------------------------------------------------------
// CS60UICodeExControl::HandleControlEventL
//
// ----------------------------------------------------------------------------
//
void CS60UICodeExControl::HandleControlEventL(CCoeControl* /*aControl*/, TCoeEvent /*aEventType*/)
{
}
// ----------------------------------------------------------------------------
// CS60UICodeExControl::HandleResourceChange
// Sets new rect for this control everytime when some resource changes.
// Also, background picture is rescaled.
// ----------------------------------------------------------------------------
//
void CS60UICodeExControl::HandleResourceChange(TInt aType)
{
CCoeControl::HandleResourceChange(aType);
SetRect(iEikonEnv->EikAppUi()->ClientRect());
if( aType == KEikDynamicLayoutVariantSwitch || aType == KAknHardwareLayoutSwitch)
{
iScaler->ScaleL( *this, *iBitmap, iSize, EFalse );
}
}
// ----------------------------------------------------------------------------
// CS60UICodeExControl::MiuoCreateComplete
//
// ----------------------------------------------------------------------------
//
void CS60UICodeExControl::MiuoCreateComplete( TInt /*aError*/ )
{
}
// ----------------------------------------------------------------------------
// CS60UICodeExControl::MiuoOpenComplete
//
// ----------------------------------------------------------------------------
//
void CS60UICodeExControl::MiuoOpenComplete( TInt /*aError*/ )
{
}
// ----------------------------------------------------------------------------
// CS60UICodeExControl::MiuoConvertComplete
//
// ----------------------------------------------------------------------------
//
void CS60UICodeExControl::MiuoConvertComplete( TInt /*aError*/ )
{
DrawNow();
}
// ----------------------------------------------------------------------------
// CS60UICodeExControl::OfferKeyEventL
//
// ----------------------------------------------------------------------------
//
TKeyResponse CS60UICodeExControl::OfferKeyEventL(const TKeyEvent &aKeyEvent, TEventCode aType)
{
if(aType == EEventKey)
{
//If in Landscape mode, then Left/Right changes controls focus
if ( iEikonEnv->ScreenDevice()->CurrentScreenMode() )
{
if( aKeyEvent.iScanCode == EStdKeyLeftArrow )
{
if( iControlFocus == ETextBox )
{
iRotateControl->ControlFocusGained( ETrue );
iTextControl->ControlFocusGained( EFalse );
iControlFocus = ERotateButton;
}
else
{
iRotateControl->ControlFocusGained( EFalse );
iTextControl->ControlFocusGained( ETrue );
iControlFocus = ETextBox;
}
return EKeyWasConsumed;
}
else if(aKeyEvent.iScanCode == EStdKeyRightArrow)
{
if( iControlFocus == ETextBox )
{
iRotateControl->ControlFocusGained( ETrue );
iTextControl->ControlFocusGained( EFalse );
iControlFocus = ERotateButton;
}
else
{
iRotateControl->ControlFocusGained( EFalse );
iTextControl->ControlFocusGained( ETrue );
iControlFocus = ETextBox;
}
return EKeyWasConsumed;
}
else if( aKeyEvent.iScanCode == EStdKeyEnter || aKeyEvent.iScanCode == EStdKeyDevice3 )
{
if( iControlFocus == ETextBox )
{
iEikonEnv->EikAppUi()->HandleCommandL( ES60ExCmdInsertText );
}
if( iControlFocus == ERotateButton )
{
iEikonEnv->EikAppUi()->HandleCommandL( ES60ExCmdRotate );
}
return EKeyWasConsumed;
}
}
//If in portrait mode, then Up/Down changes controls focus
if ( !iEikonEnv->ScreenDevice()->CurrentScreenMode() )
{
if( aKeyEvent.iScanCode == EStdKeyUpArrow )
{
if( iControlFocus == ETextBox )
{
iRotateControl->ControlFocusGained( ETrue );
iTextControl->ControlFocusGained( EFalse );
iControlFocus = ERotateButton;
}
else
{
iRotateControl->ControlFocusGained( EFalse );
iTextControl->ControlFocusGained( ETrue );
iControlFocus = ETextBox;
}
return EKeyWasConsumed;
}
else if(aKeyEvent.iScanCode == EStdKeyDownArrow)
{
if( iControlFocus == ETextBox )
{
iRotateControl->ControlFocusGained( ETrue );
iTextControl->ControlFocusGained( EFalse );
iControlFocus = ERotateButton;
}
else
{
iRotateControl->ControlFocusGained( EFalse );
iTextControl->ControlFocusGained( ETrue );
iControlFocus = ETextBox;
}
return EKeyWasConsumed;
}
else if( aKeyEvent.iScanCode == EStdKeyEnter || aKeyEvent.iScanCode == EStdKeyDevice3 )
{
if( iControlFocus == ETextBox )
{
iEikonEnv->EikAppUi()->HandleCommandL( ES60ExCmdInsertText );
}
if( iControlFocus == ERotateButton )
{
iEikonEnv->EikAppUi()->HandleCommandL( ES60ExCmdRotate );
}
return EKeyWasConsumed;
}
}
}
return EKeyWasNotConsumed;
}
// ----------------------------------------------------------------------------
// CS60UICodeExControl::SizeChanged
// Called by framework when the view size is changed
// ---------------------------------------------------------
//
void CS60UICodeExControl::SizeChanged()
{
TRect rect = Rect();
iScaler->ScaleL( *this, *iBitmap, iSize, EFalse );
if ( iEikonEnv->ScreenDevice()->CurrentScreenMode() ) //Landscape
{
TInt textBoxX = STATIC_CAST( TInt, rect.iBr.iX*0.05 );
TInt textBoxY = STATIC_CAST( TInt, rect.iBr.iY*0.33 );
TSize textBoxSize( STATIC_CAST( TInt, rect.iBr.iX*0.5 ),
STATIC_CAST( TInt, rect.iBr.iY*0.225 ) );
iTextBox = TRect( TPoint( textBoxX, textBoxY ), textBoxSize );
iTextControl->SetRect( iTextBox );
TInt rotateButtonX = STATIC_CAST( TInt, rect.iBr.iX*0.6 );
TInt rotateButtonY = STATIC_CAST( TInt, rect.iBr.iY*0.33 );
TSize rotateButtonSize( STATIC_CAST( TInt, rect.iBr.iX*0.16 ),
STATIC_CAST( TInt, rect.iBr.iY*0.225 ) );
iRotateButtonBox = TRect( TPoint( rotateButtonX, rotateButtonY ), rotateButtonSize );
iRotateControl->SetRect( iRotateButtonBox );
}
else // portrait
{
TInt textBoxX = STATIC_CAST( TInt, rect.iBr.iX*0.05 );
TInt textBoxY = STATIC_CAST( TInt, rect.iBr.iY*0.3 );
TSize textBoxSize( STATIC_CAST( TInt, rect.iBr.iX*0.9 ),
STATIC_CAST( TInt, rect.iBr.iY*0.16 ) );
iTextBox = TRect( TPoint( textBoxX, textBoxY ), textBoxSize );
iTextControl->SetRect( iTextBox );
TInt rotateButtonX = STATIC_CAST( TInt, rect.iBr.iX/2 );
TInt rotateButtonY = STATIC_CAST( TInt, rect.iBr.iY*0.6 );
TSize rotateButtonSize( STATIC_CAST( TInt, rect.iBr.iX*0.225 ),
STATIC_CAST( TInt, rect.iBr.iY*0.16 ) );
rotateButtonX = rotateButtonX - rotateButtonSize.iWidth / 2;
iRotateButtonBox = TRect( TPoint( rotateButtonX, rotateButtonY ), rotateButtonSize );
iRotateControl->SetRect( iRotateButtonBox );
}
}
// ----------------------------------------------------------------------------
// CS60UICodeExControl::Draw
//
// ----------------------------------------------------------------------------
//
void CS60UICodeExControl::Draw( const TRect& /*aRect*/ ) const
{
CWindowGc& gc = SystemGc();
gc.Clear( Rect() );
gc.BitBlt( TPoint( 0, 0 ), iBitmap );
}
// End of file.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -