📄 imageconverterappui.cpp
字号:
/*
* ============================================================================
* Name : CImageConverterAppUi from ImageConverterAppUi.cpp
* Part of : ImageConverter
* Created : 25.11.2003 by Forum Nokia
* Implementation notes:
* Initial content was generated by Series 60 AppWizard.
* Version :
* Copyright: Nokia Corporation
* ============================================================================
*/
// INCLUDE FILES
#include "ImageConverterAppUi.h"
#include "ImageConverterContainer.h"
#include "ImageConverterEngine.h"
#include <ImageConverter.rsg>
#include "imageconverter.hrh"
#include "encoderselectiondialog.h"
#include "showinfodialog.h"
#include <avkon.hrh>
#include <caknfileselectiondialog.h>
#include <akncommondialogs.h>
#include <imageconversion.h>
#include <eikmenup.h>
void CleanupRArray( TAny* object )
{
((RImageTypeDescriptionArray*)object)->ResetAndDestroy();
}
// ================= MEMBER FUNCTIONS =======================
//
// ----------------------------------------------------------
// CImageConverterAppUi::ConstructL()
//
// ----------------------------------------------------------
//
void CImageConverterAppUi::ConstructL()
{
BaseConstructL();
iAppContainer = new (ELeave) CImageConverterContainer;
iAppContainer->SetMopParent( this );
iAppContainer->ConstructL( ClientRect() );
AddToStackL( iAppContainer );
iImageLoaded = false;
iConverter = CImageConverterEngine::NewL( this );
}
// ----------------------------------------------------
// CImageConverterAppUi::~CImageConverterAppUi()
// Destructor
// Frees reserved resources
// ----------------------------------------------------
//
CImageConverterAppUi::~CImageConverterAppUi()
{
if (iAppContainer)
{
RemoveFromStack( iAppContainer );
delete iAppContainer;
}
iConverter->Cancel();
delete iConverter;
}
void CImageConverterAppUi::DynInitMenuPaneL(
TInt aResourceId,CEikMenuPane* aMenuPane)
{
if( aResourceId == R_IMAGECONVERTER_MENU )
{
if( !iImageLoaded )
{
// if there is no image loaded do not show "save as" and
// "info" menu entries
aMenuPane->SetItemDimmed( EImageConverterCmdSaveAs, true );
aMenuPane->SetItemDimmed( EImageConverterCmdInfo, true );
}
else
{
aMenuPane->SetItemDimmed( EImageConverterCmdSaveAs, false );
aMenuPane->SetItemDimmed( EImageConverterCmdInfo, false );
}
}
}
// ----------------------------------------------------
// CImageConverterAppUi::HandleKeyEventL(
// const TKeyEvent& aKeyEvent,TEventCode /*aType*/)
// takes care of key event handling
// ----------------------------------------------------
//
TKeyResponse CImageConverterAppUi::HandleKeyEventL(
const TKeyEvent& aKeyEvent,TEventCode aType)
{
// if there is an image loaded, pressing arrow keys causes
// scale and rotate
if( iImageLoaded &&
(aType == EEventKey) )
{
if( aKeyEvent.iCode == EKeyLeftArrow )
{
iImageLoaded = false;
iConverter->RotateL( CImageConverterEngine::EAntiClockwise90 );
return EKeyWasConsumed;
}
else if( aKeyEvent.iCode == EKeyRightArrow )
{
iImageLoaded = false;
iConverter->RotateL( CImageConverterEngine::EClockwise90 );
return EKeyWasConsumed;
}
else if( aKeyEvent.iCode == EKeyUpArrow )
{
iImageLoaded = false;
iConverter->ScaleL( 110 ); // scale up
return EKeyWasConsumed;
}
else if( aKeyEvent.iCode == EKeyDownArrow )
{
iImageLoaded = false;
iConverter->ScaleL( 90 ); // scale down
return EKeyWasConsumed;
}
}
return EKeyWasNotConsumed;
}
// ----------------------------------------------------
// CImageConverterAppUi::HandleCommandL(TInt aCommand)
// takes care of command handling
// ----------------------------------------------------
//
void CImageConverterAppUi::HandleCommandL(TInt aCommand)
{
switch ( aCommand )
{
case EAknSoftkeyBack:
case EEikCmdExit:
{
Exit();
break;
}
case EImageConverterCmdOpen:
{
HandleOpen();
break;
}
case EImageConverterCmdSaveAs:
{
HandleSaveAs();
break;
}
case EImageConverterCmdInfo:
{
HandleInfo();
break;
}
default:
break;
}
}
void CImageConverterAppUi::HandleOpen( )
{
TFileName fileToOpen;
_LIT( KFileSelectionTitle, "Select image to open" );
// show fileopen dialog from akncommondialogs
if( !AknCommonDialogs::RunSelectDlgLD(fileToOpen,
R_MEMORY_SELECTION_DIALOG, KFileSelectionTitle) )
{
return;
}
iImageLoaded = false;
iAppContainer->iBitmap = NULL;
// request the actuall open/decode
// asynchronous, the result is reported via callback
// NotifyCompletion
TRAPD( err, iConverter->StartToDecodeL(fileToOpen) );
// report errors in issuing the asynchronous call
if( err != KErrNone )
{
_LIT( KMsg, "Error when starting to decode:%d" );
TBuf<50> buf;
buf.Format( KMsg, err );
iEikonEnv->InfoMsg( buf );
}
}
void CImageConverterAppUi::HandleSaveAs()
{
// get encoder types from engine
RImageTypeDescriptionArray imageTypes;
iConverter->GetEncoderImageTypesL( imageTypes);
CleanupStack::PushL( TCleanupItem(CleanupRArray, &imageTypes) );
TInt selectedIdx = 0;
// show the encoder types in a dialog
CEncoderSelectionDialog* dialog =
new(ELeave) CEncoderSelectionDialog( imageTypes,
selectedIdx );
if( dialog->ExecuteLD(R_IMAGECONVERTER_TYPESELECTION_DIALOG) )
{
TFileName fileToSave;
if( AknCommonDialogs::RunSaveDlgLD(fileToSave,
R_MEMORY_SELECTION_DIALOG) )
{
// request the actuall save/encode
// asynchronous, the result is reported via callback
// NotifyCompletion
TRAPD( err, iConverter->StartToEncodeL(fileToSave,
imageTypes[selectedIdx]->ImageType(),
imageTypes[selectedIdx]->SubType()) );
// report errors in issuing the asynchronous call
if( err != KErrNone )
{
_LIT( KMsg, "Error when starting to decode:%d" );
TBuf<50> buf;
buf.Format( KMsg, err );
iEikonEnv->InfoMsg( buf );
}
}
}
CleanupStack::PopAndDestroy();
}
void CImageConverterAppUi::HandleInfo()
{
// get the info strings
CFrameInfoStrings* infoStrings = iConverter->GetImageInfoL();
CleanupStack::PushL( infoStrings );
// show the info strings in a separate dialog
CShowInfoDialog* dialog = new(ELeave) CShowInfoDialog( infoStrings );
dialog->ExecuteLD( R_IMAGECONVERTER_SHOWINFO_DIALOG );
CleanupStack::PopAndDestroy(); // infoStrings
}
void CImageConverterAppUi::NotifyCompletion( TInt aErr )
{
if( aErr == KErrNone )
{
// we have succesfully decoded an image, now make the view
// to display it
iAppContainer->iBitmap = iConverter->iBitmap;
iImageLoaded = true;
}
else
{
iAppContainer->iBitmap = NULL;
iImageLoaded = false;
// show a simple error msg
_LIT( KMsg, "Error:%d" );
TBuf<50> buf;
buf.Format( KMsg, aErr );
iEikonEnv->InfoMsg( buf );
}
iAppContainer->DrawNow();
}
// End of File
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -