--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/imageeditor/plugins/CropPlugin/src/ImageEditorCropPlugin.cpp Fri Jan 29 13:53:17 2010 +0200
@@ -0,0 +1,361 @@
+/*
+* Copyright (c) 2010 Ixonos Plc.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the "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:
+* Ixonos Plc
+*
+* Description:
+*
+*/
+
+
+
+#include <eikenv.h>
+#include <aknenv.h>
+#include <coneresloader.h>
+#include <barsread.h>
+#include <bautils.h>
+
+#include <aknutils.h>
+
+#include <crop.rsg>
+#include "ImageEditorCropPlugin.h"
+#include "ImageEditorCropControl.h"
+#include "ImageEditorPluginBaseDefs.h"
+#include "DrawUtils.h"
+#include "ResolutionUtil.h"
+#include "definitions.def"
+
+//#include "platform_security_literals.hrh"
+
+
+// CONSTANTS
+_LIT (KPgnResourceFile, "crop.rsc");
+
+const TInt KManualCropQueryIndex = 3;
+
+
+//=============================================================================
+EXPORT_C CImageEditorPluginBase * CreateImageEditorPlugin ()
+{
+ CImageEditorCropPlugin * plugin = new (ELeave) CImageEditorCropPlugin;
+ CleanupStack::PushL(plugin);
+ plugin->ConstructL();
+ CleanupStack::Pop(); // plugin
+ return plugin;
+}
+
+//=============================================================================
+CImageEditorCropPlugin::CImageEditorCropPlugin ()
+{
+
+}
+
+//=============================================================================
+void CImageEditorCropPlugin::ConstructL ()
+{
+ CImageEditorPluginBase::ConstructL (KPgnResourcePath, KPgnResourceFile);
+}
+
+//=============================================================================
+CImageEditorCropPlugin::~CImageEditorCropPlugin ()
+{
+ iSysPars = NULL;
+ ReleasePlugin();
+}
+
+//=============================================================================
+TInt CImageEditorCropPlugin::SetProperty (
+ TInt aPropertyId,
+ TDesC & aPropertyValue
+ )
+{
+
+ TLex parser;
+
+ // Copy data
+ switch (aPropertyId)
+ {
+ case KCapSystemParameters:
+ {
+ parser.Assign (aPropertyValue);
+ TInt tempval = 0;
+ parser.Val (tempval);
+ iSysPars = (const CSystemParameters *)tempval;
+ return KErrNone;
+ }
+ default:
+ {
+ return CImageEditorPluginBase::SetProperty (aPropertyId, aPropertyValue);
+ }
+ }
+}
+
+//=============================================================================
+TInt CImageEditorCropPlugin::GetProperty (
+ TInt aPropertyId,
+ TDes & aPropertyValue
+ )
+{
+ // Clean buffer
+ aPropertyValue.Zero();
+
+ // Copy data
+ switch (aPropertyId)
+ {
+ case KCapParamStruct:
+ {
+ // Control found
+ if (iControl)
+ {
+ aPropertyValue.Copy ( ((CImageEditorCropControl *)iControl)->GetParam() );
+ return KErrNone;
+ }
+
+ // Control not found, return KErrNotReady
+ else
+ {
+ return KErrNotReady;
+ }
+ }
+ case KCapReadyToRender:
+ {
+ TBool readyToRender = EFalse;
+ if (iControl)
+ {
+ readyToRender = ((CImageEditorCropControl *)iControl)->IsReadyToRender();
+ }
+ aPropertyValue.AppendNum ((TInt)readyToRender);
+ return KErrNone;
+ }
+ default:
+ {
+ return CImageEditorPluginBase::GetProperty (aPropertyId, aPropertyValue);
+ }
+ }
+}
+
+//=============================================================================
+TInt CImageEditorCropPlugin::InitPluginL (
+ const TRect & aRect,
+ CCoeControl * aParent,
+ CCoeControl *& aPluginControl
+ )
+{
+ // Delete previous control
+ ReleasePlugin();
+
+ // Query dialog texts
+ CDesCArray * queries = new (ELeave) CDesCArraySeg (8);
+ CleanupStack::PushL (queries);
+
+ // Aspect ratio definition array
+ RArray<TInt> aspect_ratios;
+
+ // Get pointer to the parameter descriptor array
+ TBuf<256> readbuf;
+ TLex parser;
+ User::LeaveIfError ( CImageEditorPluginBase::GetProperty (KCapPluginParamNames, readbuf) );
+ parser.Assign (readbuf);
+ TInt tempval = 0;
+ parser.Val ( tempval );
+ CDesCArray * pars = (CDesCArraySeg *)tempval;
+
+ // Append manual crop query
+ queries->AppendL( (*pars)[KManualCropQueryIndex] );
+
+ ReadWallPaperCropDefinitionsL(*queries, aspect_ratios);
+
+#ifdef __SHOW_OPTIONAL_ASPECT_RATIOS__
+ ReadCropDefinitionsL (*queries, aspect_ratios);
+#endif
+
+ // Create new control
+ iControl = CImageEditorCropControl::NewL (aRect, aParent);
+
+ // Set system parameters
+ ((CImageEditorCropControl*)iControl)->SetSystemParameters (iSysPars);
+
+ // Show selection dialog
+ TPtrC query = (*pars)[0];
+ TInt index = SDrawUtils::LaunchListQueryDialogL (queries, query);
+
+ // If canceled, return with NULL pointer and error value
+ TInt ret = KErrNone;
+ if (index <= -1)
+ {
+ // Relasing created plugin if canceled
+ ReleasePlugin();
+ ret = KErrNotSupported;
+ }
+ else
+ {
+ // Compute and set crop mode and aspect ratio
+ float ar = 1.0F;
+ if (index != 0)
+ {
+ TInt index2 = (index - 1) * 2;
+ ar = (float)aspect_ratios[index2] / (float)aspect_ratios[index2 + 1];
+ }
+
+ ((CImageEditorCropControl*)iControl)->SetCropModeL (index, ar);
+ }
+
+ if (queries)
+ {
+ for (TInt i = 0; i < queries->Count(); ++i)
+ {
+ queries->Delete(i);
+ }
+ queries->Reset();
+ }
+ aspect_ratios.Reset();
+ CleanupStack::PopAndDestroy(); // queries
+ aPluginControl = iControl;
+ return ret;
+}
+
+//=============================================================================
+void CImageEditorCropPlugin::ProcessImageL (CEditorImage * /*aImage*/ )
+{
+
+}
+
+//=============================================================================
+void CImageEditorCropPlugin::ReleasePlugin ()
+{
+ delete iControl;
+ iControl = 0;
+}
+
+//=============================================================================
+void CImageEditorCropPlugin::ReadWallPaperCropDefinitionsL (
+ CDesCArray & aCropTexts,
+ RArray<TInt> & aCropRatios
+ ) const
+{
+ // find out screen resolution
+ TRect screenRect;
+ CResolutionUtil::Self()->GetScreenRect(screenRect);
+ TInt screenWidth = screenRect.Width();
+ TInt screenHeight = screenRect.Height();
+
+ // Read resource
+ TFileName resourcefile;
+ resourcefile.Append(KPgnResourcePath);
+ resourcefile.Append(KPgnResourceFile);
+ User::LeaveIfError( CompleteWithAppPath( resourcefile ) );
+
+ // Read aspect ratio definitions from resource file
+ // (RConeResourceLoader selects the language using BaflUtils::NearestLanguageFile)
+ CEikonEnv *env = CEikonEnv::Static();
+ RConeResourceLoader resLoader ( *env );
+ CleanupClosePushL ( resLoader );
+ resLoader.OpenL ( resourcefile );
+
+ // To find out if in landscape or in portrait mode
+ TInt shortSize;
+ TInt longSize;
+ if ( screenHeight > screenWidth )
+ {
+ shortSize = screenWidth;
+ longSize = screenHeight;
+ }
+ else
+ {
+ longSize = screenWidth;
+ shortSize = screenHeight;
+ }
+
+#ifndef __SHOW_TWO_WALLPAPER_ASPECT_RATIOS__
+
+ // If only this one wallpaper option is shown crop ratio is set as portrait
+ HBufC * wallpaperText =
+ env->AllocReadResourceL( R_CROP_ASPECT_RATIO_WALLPAPER );
+ CleanupStack::PushL( wallpaperText );
+ aCropTexts.AppendL( wallpaperText->Des() );
+ CleanupStack::PopAndDestroy();
+ aCropRatios.Append( shortSize );
+ aCropRatios.Append( longSize );
+
+#else
+
+ HBufC * wallpaperText2 =
+ env->AllocReadResourceL( R_CROP_ASPECT_RATIO_WALLPAPER_PRT );
+ CleanupStack::PushL( wallpaperText2 );
+ aCropTexts.AppendL( wallpaperText2->Des() );
+ CleanupStack::PopAndDestroy();
+ aCropRatios.Append( shortSize );
+ aCropRatios.Append( longSize );
+
+
+ HBufC * wallpaperText3 =
+ env->AllocReadResourceL( R_CROP_ASPECT_RATIO_WALLPAPER_LNDS );
+ CleanupStack::PushL( wallpaperText3 );
+ aCropTexts.AppendL( wallpaperText3->Des() );
+ CleanupStack::PopAndDestroy();
+ aCropRatios.Append( longSize );
+ aCropRatios.Append( shortSize );
+
+#endif
+
+ CleanupStack::PopAndDestroy(1); //resLoader
+}
+
+
+//=============================================================================
+void CImageEditorCropPlugin::ReadCropDefinitionsL (
+ CDesCArray & aCropTexts,
+ RArray<TInt> & aCropRatios
+ ) const
+{
+
+ // Read resource
+ TFileName resourcefile;
+ resourcefile.Append(KPgnResourcePath);
+ resourcefile.Append(KPgnResourceFile);
+ User::LeaveIfError( CompleteWithAppPath( resourcefile ) );
+
+ // Read aspect ratio definitions from resource file
+ // (RConeResourceLoader selects the language using BaflUtils::NearestLanguageFile)
+ CEikonEnv *env = CEikonEnv::Static();
+ RConeResourceLoader resLoader ( *env );
+ CleanupClosePushL ( resLoader );
+ resLoader.OpenL ( resourcefile );
+
+ HBufC8 * res8 = env->AllocReadResourceAsDes8LC (R_CROP_MODES);
+ TResourceReader resource;
+ resource.SetBuffer (res8);
+
+ TInt16 arraycount = (TInt16)resource.ReadInt16();
+ if (arraycount > 0)
+ {
+ // Read extra parameters to array
+ for (TInt i = 0; i < arraycount; ++i)
+ {
+ // Read the crop ratio text
+ HBufC * crop_text = resource.ReadHBufCL();
+ CleanupStack::PushL(crop_text);
+ aCropTexts.AppendL ( crop_text->Des() );
+ CleanupStack::PopAndDestroy();
+
+ // Add width
+ aCropRatios.Append ( resource.ReadInt32() );
+
+ // Add height
+ aCropRatios.Append ( resource.ReadInt32() );
+ }
+ }
+
+ CleanupStack::PopAndDestroy(2); // res8, resLoader
+}
+
+// End of File