diff -r 57d4cdd99204 -r edfc90759b9f imageeditor/plugins/ResizePlugin/src/ResizeControl.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/imageeditor/plugins/ResizePlugin/src/ResizeControl.cpp Fri Jan 29 13:53:17 2010 +0200 @@ -0,0 +1,625 @@ +/* +* 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: +* +*/ + + +/// INCLUDES +#include +#include +#include +#include +#include +#include +#include "SingleParamControl.h" +#include "SystemParameters.h" +#include "ResizeControl.h" +#include "ImageEditorResizePlugin.h" +#include "PluginInfo.h" + +/// CONSTANTS +_LIT (KPgnResourceFile, "resize.rsc"); +_LIT (KResourceDir, "\\resource\\apps\\"); + +const TInt KResizeHSTitleIndex = 0; +const TInt KMinDimension = 25; +const TInt KMaxCaptionLength = 50; + +//============================================================================= +CResizeControl * CResizeControl::NewL (const TRect& aRect, CCoeControl* aParent) +{ + CResizeControl * self = new (ELeave) CResizeControl; + CleanupStack::PushL (self); + self->ConstructL (aRect, aParent); + CleanupStack::Pop (); // self + return self; +} + +//============================================================================= +CResizeControl::CResizeControl() +{ + // EMPTY +} + +//============================================================================= +CResizeControl::~CResizeControl() +{ + delete iControl; + iControl = NULL; + iParamArray.Reset(); +// iEditorView = NULL; + iSysPars = NULL; + iPluginInfo = NULL; + iParameters = NULL; + delete iBufBitmap; +} + +//============================================================================= +void CResizeControl::ConstructL ( + const TRect & aRect, + CCoeControl * aParent + ) +{ + // Set parent + SetContainerWindowL (*aParent); + + + iControl = CSingleParamControl::NewL (aRect, aParent); + ((CSingleParamControl *)iControl)->SetParObserver ( (MSingleParControlObserver*)this ); +// aPluginControl = iControl; + + // Activate control + ActivateL(); +} + +//============================================================================= +void CResizeControl::SetView (CAknView * aView) +{ + ((CSingleParamControl *)iControl)->SetView(aView); +// iEditorView = aView; +} + +//============================================================================= +void CResizeControl::SetSelectedUiItemL (CPluginInfo * aItem) +{ + iPluginInfo = aItem; +} + +//============================================================================= +void CResizeControl::PrepareL () +{ + +} + +//============================================================================= +TKeyResponse CResizeControl::OfferKeyEventL ( + const TKeyEvent & aKeyEvent, + TEventCode aType + ) +{ + TKeyResponse response = EKeyWasNotConsumed; + + if ( Busy() ) + { + response = EKeyWasConsumed; + } + else if (aType != EEventKey ) + { + switch (aKeyEvent.iScanCode) + { + // Just consume these keys (No EEventKey type event delivered for + // these keys so this must be done here) + case EStdKeyRightShift: + case EStdKeyLeftShift: + { + response = EKeyWasConsumed; + break; + } + } + } + else if (EEventKey == aType) + { + switch (aKeyEvent.iCode) + { + // Just consume the keys + case 0x31: // 1 + case 0x32: // 2 + case 0x33: // 3 + case 0x37: // 7 + case 0x38: // 8 + case 0x39: // 9 + case EKeyDownArrow: + case EStdKeyDecVolume: + case 0x30: + case EKeyUpArrow: + case EStdKeyIncVolume: + case 0x35: + case 0x2a: // * + case 0x23: // # +// case EKeyLeftArrow: +// case EKeyRightArrow: + { + response = EKeyWasConsumed; + break; + } + case 0x34: // 4 + { + TKeyEvent kevent; + TEventCode ecode = EEventKey; + kevent.iCode = EKeyLeftArrow; + iControl->OfferKeyEventL(kevent, ecode); + + response = EKeyWasConsumed; + break; + } + case 0x36: // 6 + { + TKeyEvent kevent; + TEventCode ecode = EEventKey; + kevent.iCode = EKeyRightArrow; + iControl->OfferKeyEventL(kevent, ecode); + + response = EKeyWasConsumed; + break; + } + default: + { + response = iControl->OfferKeyEventL(aKeyEvent, aType); + } + } + } + return response; +} + +//============================================================================= +void CResizeControl::HandlePointerEventL( const TPointerEvent &aPointerEvent ) +{ + return iControl->HandlePointerEventL( aPointerEvent ); +} + +//============================================================================= +TInt CResizeControl::CountComponentControls() const +{ + TInt count(0); + if (iControl) + { + ++count; + } + return count; +} + +//============================================================================= +CCoeControl * CResizeControl::ComponentControl (TInt aIndex) const +{ + switch (aIndex) + { + case 0: + { + return iControl; + } + default: + { + return 0; + } + } +} + + +//============================================================================= +void CResizeControl::HandlePluginCommandL (const TInt aCommand) + { + return ((CSingleParamControl *)iControl)->HandlePluginCommandL(aCommand); + +/* + switch(aCommand) + { + case EPgnSoftkeyIdCancel: + { + iEditorView->HandleCommandL (EImageEditorCancelPlugin); + break; + } + case EPgnSoftkeyIdOk: + { + if ( iControl->Position() != iInitPosition ) + { + ((CImageEditorUIView*)iEditorView)-> + ShowConfirmationNoteL(iPluginInfo->Parameters()[KResolutionChangedTextIndex] ); + iEditorView->HandleCommandL (EImageEditorApplyPlugin); + + } + else + { + iEditorView->HandleCommandL (EImageEditorCancelPlugin); + } + } + } +*/ + } + + +//============================================================================= +TInt CResizeControl::GetSoftkeyIndexL () +{ + return 0; +} + +/* +//============================================================================= +TPtrC CResizeControl::GetNaviPaneTextL ( + TBool& aLeftNaviPaneScrollButtonVisibile, + TBool& aRightNaviPaneScrollButtonVisible ) +{ + aLeftNaviPaneScrollButtonVisibile = EFalse; + aRightNaviPaneScrollButtonVisible = EFalse; + + // .loc file parameter format strings + _LIT(KParameter1, "%0N"); + _LIT(KParameter2, "%1N"); + + // Getting string from resources + TPtrC ptr = iPluginInfo->Parameters()[KStatusPaneTextIndex]; + + // Finding format patterns + TInt pos1 = ptr.Find(KParameter1); + TInt pos2 = ptr.Find(KParameter2); + + if(pos1 == KErrNotFound || pos2 == KErrNotFound) + { + User::Leave(KSIEEInternal); + } + + // Clear navi pane + iNaviPaneText.Zero(); + + // Add new text and replace format strings with new resolution + iNaviPaneText.Append(ptr.Left(pos1)); + iNaviPaneText.AppendNum (iSize.iWidth); + iNaviPaneText.Append (ptr.Mid(pos1 + 3, pos2 - (pos1 + 3))); + iNaviPaneText.AppendNum (iSize.iHeight); + iNaviPaneText.Append (ptr.Mid(pos2 + 3)); + + return iNaviPaneText; + } +*/ + +//============================================================================= +TBitField CResizeControl::GetDimmedMenuItems () +{ + return TBitField(); +} + +//============================================================================= +void CResizeControl::SetSystemParameters (CSystemParameters * aSysPars, CImageEditorResizePlugin* aParent) +{ + iSysPars = aSysPars; + ComputeAndSetSliderParameters(aParent); +} + +//============================================================================= +void CResizeControl::SizeChanged() +{ + iControl->SetRect(Rect()); +} + +//============================================================================= +void CResizeControl::Draw (const TRect & aRect) const +{ + // Fill the background with black + CWindowGc & gc = SystemGc(); + gc.SetPenStyle (CGraphicsContext::ESolidPen); + gc.SetPenColor (KRgbBlack); + gc.SetBrushStyle (CGraphicsContext::ESolidBrush); + gc.SetBrushColor (KRgbBlack); + + if ( iPreview && iPreview->Handle() ) + { + + if ( ((CSingleParamControl *)iControl)->Position() == iInitPosition ) + { + gc.BitBlt ( TPoint(0,0), iPreview ); + } + else + { + gc.Clear (aRect); + + TReal ratio = (TReal)iSize.iHeight / (TReal)iOrigSize.iHeight; + TInt w = (TInt)(ratio * (TReal)Rect().Width()); + TInt h = (TInt)(ratio * (TReal)Rect().Height()); + + TRect target; + target.iTl.iX = ((Rect().Width() - w) >> 1); + target.iTl.iY = ((Rect().Height() - h) >> 1); + target.iBr.iX = ((Rect().Width() + w) >> 1) + 1; + target.iBr.iY = ((Rect().Height() + h) >> 1) + 1; + TRect rect ( iPreview->SizeInPixels() ); + //rect.iBr.iX++; + //rect.iBr.iY++; + + gc.DrawBitmap (target, iPreview, rect); + } + } +} + + +//============================================================================= +void CResizeControl::ComputeAndSetSliderParameters (CImageEditorResizePlugin* aParent) +{ + // Store image size + TInt width = + (iSysPars->ViewPortRect().iBr.iX - + iSysPars->ViewPortRect().iTl.iX); + + TInt height = + (iSysPars->ViewPortRect().iBr.iY - + iSysPars->ViewPortRect().iTl.iY); + + iOrigSize = TSize ( + (TInt)(iSysPars->Scale() * width + 0.5), + (TInt)(iSysPars->Scale() * height + 0.5) + ); + + ComputeImageSizes(); + + // Set slider properties + TInt count = iParamArray.Count(); + if ( count > 0 ) + { + ((CSingleParamControl *)iControl)->SetSliderMinimumAndMaximum(0, iParamArray.Count() - 1); + } + else + { + ((CSingleParamControl *)iControl)->SetSliderMinimumAndMaximum(0, 0); + } + ((CSingleParamControl *)iControl)->SetSliderStep(1); + + iInitPosition = 0; + width = (TInt)(iSysPars->Scale() * width + 0.5); + height = (TInt)(iSysPars->Scale() * height + 0.5); + for (TInt i = 0; i < iParamArray.Count(); ++i) + { + if ( (width == iParamArray[i]) || ((height == iParamArray[i])) ) + { + ((CSingleParamControl *)iControl)->SetSliderPosition(i); + iInitPosition = i; + } + } + + ComputeSizeAndScale(); + + TFileName iconFile (KResourceDir); + TBuf<256> readbuf; + User::LeaveIfError ( aParent->GetProperty (KCapIconName, readbuf) ); + iconFile.Append(readbuf); + CEikImage* icon = new (ELeave) CEikImage; + icon->CreatePictureFromFileL(iconFile, + EMbmResizeQgn_indi_imed_downple_super); + + ((CSingleParamControl *)iControl)->SetIcon(icon); + + // Get caption from plugin properties + User::LeaveIfError ( aParent->GetProperty (KCapPluginParamNames, readbuf) ); + TLex parser; + parser.Assign (readbuf); + TInt tempval = 0; + parser.Val ( tempval ); + iParameters = (CDesCArray *)tempval; + + // Format the resolutions + TBuf< KMaxCaptionLength > caption_temp; + TBuf< KMaxCaptionLength > caption; + StringLoader::Format( caption_temp, (*iParameters)[KResizeHSTitleIndex], 0, iSize.iWidth ); + StringLoader::Format( caption, caption_temp, 1, iSize.iHeight ); + ((CSingleParamControl *)iControl)->SetCaption( caption ); +} + + +//============================================================================= +void CResizeControl::ComputeSizeAndScale() +{ + // Compute current image size and scale + TReal ar = (TReal)iOrigSize.iWidth / (TReal)iOrigSize.iHeight; + if ( iOrigSize.iHeight < iOrigSize.iWidth ) + { + iSize.iHeight = iParamArray[ ((CSingleParamControl *)iControl)->Position() ]; + iSize.iWidth = (TReal)(ar * iSize.iHeight) + 0.5; + } + else + { + iSize.iWidth = iParamArray[ ((CSingleParamControl *)iControl)->Position() ]; + iSize.iHeight = (TReal)(iSize.iWidth / ar) + 0.5; + + } + + iSysPars->Scale() = + (TReal)iSize.iHeight / + (TReal)((iSysPars->ViewPortRect().iBr.iY - + iSysPars->ViewPortRect().iTl.iY)); +} + +//============================================================================= +void CResizeControl::ComputeImageSizes() +{ + + const TSize KQSXGASize(2592, 1944); + const TSize KQXGASize(2048, 1536); + const TSize KUXGASize(1600, 1200); + const TSize KSXGASize(1280, 960); + const TSize KSVGASize(800, 600); + const TSize KVGASize(640, 480); + const TSize KQVGASize(320, 240); + +#ifdef RESIZE_CIF_SIZES_SUPPORTED + const TSize KCIFSize(352, 288); + const TSize KQCIFSize(176, 144); + const TSize KSubQCIFSize(128, 96); +#endif + +#ifdef RESIZE_CIF_SIZES_SUPPORTED + PopulateParamArray(KSubQCIFSize); + PopulateParamArray(KQCIFSize); +#endif + + PopulateParamArray(KQVGASize); + +#ifdef RESIZE_CIF_SIZES_SUPPORTED + PopulateParamArray(KCIFSize); +#endif + + PopulateParamArray(KVGASize); + PopulateParamArray(KSVGASize); + PopulateParamArray(KSXGASize); + PopulateParamArray(KUXGASize); + PopulateParamArray(KQSXGASize); + + // Landscape + if (iOrigSize.iHeight < iOrigSize.iWidth) + { + iParamArray.Append(iOrigSize.iHeight); + } + else + { + iParamArray.Append(iOrigSize.iWidth); + } +} + +//============================================================================= +void CResizeControl::PopulateParamArray(const TSize& aTargetSize ) +{ + + TReal origRatio = 0.0; + if (iOrigSize.iWidth < iOrigSize.iHeight) + { + origRatio = (TReal)iOrigSize.iHeight / iOrigSize.iWidth; + } + else + { + origRatio = (TReal)iOrigSize.iWidth / iOrigSize.iHeight; + + } + + TReal targetRatio = (TReal)aTargetSize.iWidth / aTargetSize.iHeight; + + if (aTargetSize.iWidth < iOrigSize.iWidth && aTargetSize.iHeight < iOrigSize.iHeight) + { + + // Landscape + if (iOrigSize.iHeight < iOrigSize.iWidth) + { + if (origRatio > targetRatio) + { + TInt h = (TReal)(aTargetSize.iWidth * iOrigSize.iHeight) / iOrigSize.iWidth + 0.5; + + if (h > KMinDimension) + { + iParamArray.Append(h); + } + + + } + else + { + iParamArray.Append(aTargetSize.iHeight); + + } + } + // Portrait + else + { + if (origRatio > targetRatio) + { + TInt w = (TReal)(aTargetSize.iWidth * iOrigSize.iWidth) / iOrigSize.iHeight + 0.5; + + if (w > KMinDimension) + { + iParamArray.Append(w); + } + } + else + { + iParamArray.Append(aTargetSize.iHeight); + + } + } + } +} + +//============================================================================= +void CResizeControl::ParamOperation (const TParamOperation aOperation) +{ + switch (aOperation) + { + case EParamOperationSubtract: + case EParamOperationAdd: + { + ComputeSizeAndScale(); + + // Format the resolutions to caption text + TBuf< KMaxCaptionLength > caption_temp; + TBuf< KMaxCaptionLength > caption; + StringLoader::Format( caption_temp, (*iParameters)[KResizeHSTitleIndex], 0, iSize.iWidth ); + StringLoader::Format( caption, caption_temp, 1, iSize.iHeight ); + ((CSingleParamControl *)iControl)->SetCaption( caption ); + + break; + } + case EParamOperationDefault: + { + break; + } + default: + { + break; + } + } +} + +TReal CResizeControl::GetParam () const +{ + return 0; +} + +void CResizeControl::ShowPopupNote () + { + if (iOrigSize != iSize) + { + // Read resource + TFileName resourcefile; + resourcefile.Append(KPgnResourcePath); + resourcefile.Append(KPgnResourceFile); + User::LeaveIfError( CompleteWithAppPath( resourcefile ) ); + + // Get reference to application file session + RFs & fs = CEikonEnv::Static()->FsSession(); + + // Implementation of RConeResourceLoader uses BaflUtils::NearestLanguageFile + // to search for a localised resource in proper search order + RConeResourceLoader resLoader( *CEikonEnv::Static() ); + resLoader.OpenL ( resourcefile ); + CleanupClosePushL(resLoader); + + TBuf<256> readbuf; + CEikonEnv::Static()->ReadResourceAsDes16L(readbuf, R_SIE_RESIZE_RESOLUTION_CHANGED); + CleanupStack::PopAndDestroy(); // resLoader + + + CAknGlobalNote * globalnote = CAknGlobalNote::NewLC(); + globalnote->ShowNoteL (EAknGlobalConfirmationNote, readbuf); + CleanupStack::PopAndDestroy(); // globalnote + } + } + + +// End of File