⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 imageconverterappui.cpp

📁 Symbian OS 图片转换程序源代码 可以学习一下
💻 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 + -