diff -r 57d4cdd99204 -r edfc90759b9f imageeditor/ImageEditorUI/src/ImageEditorUIContainer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/imageeditor/ImageEditorUI/src/ImageEditorUIContainer.cpp Fri Jan 29 13:53:17 2010 +0200 @@ -0,0 +1,394 @@ +/* +* 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: +* Container class that handles/forwards keyevents and pointer +* events to other controls. +* +*/ + + +// INCLUDE FILES +#include +#include +#include +#include +#include + +#include "ImageEditorUIContainer.h" +#include "ImageEditorControlBase.h" +#include "ImageEditorUI.hrh" + +#include "WaitIndicator.h" + +#ifdef RD_TACTILE_FEEDBACK +#include +#endif /* RD_TACTILE_FEEDBACK */ + +const TInt KTouchPanTotalMoveThreshold = 5; + +//============================================================================= +void CImageEditorUIContainer::ConstructL(const TRect & aRect) + { + // Create window + CreateWindowL(); + + iWaitIndicator = CWaitIndicator::NewL(); + iWaitIndicator->SetParent( this); + +#ifdef RD_TACTILE_FEEDBACK + iTouchFeedBack = MTouchFeedback::Instance(); +#endif /* RD_TACTILE_FEEDBACK */ + + // Set window rectangle + SetRect(aRect); + + // Set busy + SetBusy(); + + SetCanDrawOutsideRect(); + iBgContext = CAknsBasicBackgroundControlContext::NewL( + KAknsIIDQsnBgAreaMain, Rect(), EFalse); + + EnableDragEvents(); + + // Activate container control + ActivateL(); + } + +//============================================================================= +CImageEditorUIContainer::~CImageEditorUIContainer() + { + delete iWaitIndicator; + delete iBgContext; + iEditorView = NULL; + iPreview = NULL; + iControl = NULL; + } + +//============================================================================= +void CImageEditorUIContainer::SetImageL(CFbsBitmap * aBitmap) + { + iPreview = aBitmap; + if (iControl) + { + ((CImageEditorControlBase*)iControl)->SetImageL(iPreview); + } + DrawDeferred(); + } + +//============================================================================= +void CImageEditorUIContainer::SetControl(CCoeControl * aControl) + { + iControl = aControl; + if (iControl) + { + ((CImageEditorControlBase *)iControl)->SetView(iEditorView); + iControl->SetRect(Rect() ); + } + DrawDeferred(); + } + +//============================================================================= +void CImageEditorUIContainer::SetView(CImageEditorUIView * aView) + { + if (iControl) + { + ((CImageEditorControlBase *)iControl)->SetView(aView); + } + iEditorView = aView; + } + +//============================================================================= +TKeyResponse CImageEditorUIContainer::OfferKeyEventL( + const TKeyEvent & aKeyEvent, TEventCode aType) + { + if (Busy() ) + { + return EKeyWasConsumed; + } + else + { + TKeyResponse res = EKeyWasNotConsumed; + if (iControl) + { + res = ((CCoeControl*)iControl)->OfferKeyEventL(aKeyEvent, + aType); + } + return res; + } + } + +//============================================================================= +void CImageEditorUIContainer::SizeChanged() + { + if (iBgContext) + { + iBgContext->SetRect(Rect() ); + } + + if (iControl) + { + iControl->SetRect(Rect() ); + } + + iWaitIndicator->SetItemRect(Rect() ); + } + +//============================================================================= +void CImageEditorUIContainer::HandlePointerEventL( + const TPointerEvent &aPointerEvent) + { + if (Busy() ) + { + return; + } + else + { + if (iControl) + { + ((CCoeControl*)iControl)->HandlePointerEventL(aPointerEvent); + } + else + { + + switch (aPointerEvent.iType) + { + case TPointerEvent::EButton1Down: + { + +#ifdef RD_TACTILE_FEEDBACK + if ( iTouchFeedBack ) + { + iTouchFeedBack->InstantFeedback( ETouchFeedbackBasic ); + RDebug::Printf( "ImageEditor::ImageEditorUIContainer: ETouchFeedback" ); + } +#endif /* RD_TACTILE_FEEDBACK */ + + if ( !iEditorView->InZoomingState() ) + { + iEditorView->HandleCommandL(EImageEditorMenuCmdApplyEffect); + } + else + { + iTappedPosition = aPointerEvent.iPosition; + } + break; + } + case TPointerEvent::EDrag: + { + iXDirChange = iTappedPosition.iX + - aPointerEvent.iPosition.iX; + iYDirChange = iTappedPosition.iY + - aPointerEvent.iPosition.iY; + + // Compare total change in pixels (absolute value) to + // threshold value. This is to prevent calling engine's + // Pan-function in every minimal movement + if ( (Abs(iXDirChange) + Abs(iYDirChange) ) + > KTouchPanTotalMoveThreshold) + { + iTappedPosition = aPointerEvent.iPosition; + iEditorView->HandleCommandL(EImageEditorCmdTouchPan); + } + + break; + } + case TPointerEvent::EButton1Up: + { + iTappedPosition = aPointerEvent.iPosition; + break; + } + + default: + { + break; + } + } + + } + + } + + } + +//============================================================================= +TInt CImageEditorUIContainer::CountComponentControls() const + { + TInt count = 0; + if (iControl) + { + ++count; + } + return count; + } + +//============================================================================= +CCoeControl * CImageEditorUIContainer::ComponentControl(TInt aIndex) const + { + switch (aIndex) + { + case 0: + { + return iControl; + } + default: + { + return 0; + } + } + } + +//============================================================================= +void CImageEditorUIContainer::SetBusy() + { + if (iControl) + { + ((CImageEditorControlBase *)iControl)->SetBusy(); + } + iBusy = ETrue; + } + +//============================================================================= +void CImageEditorUIContainer::ResetBusy() + { + if (iControl) + { + ((CImageEditorControlBase *)iControl)->ResetBusy(); + } + iBusy = EFalse; + } + +//============================================================================= +TBool CImageEditorUIContainer::Busy() const + { + return iBusy; + } + +//============================================================================= +void CImageEditorUIContainer::SetFullScreen() + { + iFullScreen = ETrue; + } + +//============================================================================= +void CImageEditorUIContainer::ResetFullScreen() + { + iFullScreen = EFalse; + } + +//============================================================================= +void CImageEditorUIContainer::Draw(const TRect & /*aRect*/) const + { + // Get graphics context + CWindowGc & gc = SystemGc(); + + // If there is a plug-in control, it is responsible + // for drawing the preview image (to avoid flicker) + if (!iControl) + { + gc.SetBrushStyle(CGraphicsContext::ESolidBrush); + gc.SetBrushColor(KRgbWhite); + gc.SetPenStyle(CGraphicsContext::ESolidPen); + gc.SetPenColor(KRgbWhite); + + if (iPreview && iPreview->Handle() ) + { + gc.DrawBitmap(Rect(), iPreview); + } + else + { + // Draw skin background + MAknsSkinInstance* skin = AknsUtils::SkinInstance(); + MAknsControlContext* cc = AknsDrawUtils::ControlContext( this); + AknsDrawUtils::DrawBackground(skin, cc, this, gc, TPoint(0, 0), + Rect(), KAknsDrawParamDefault); + + } + } + + iWaitIndicator->DrawItem(gc); + } + +//============================================================================= +void CImageEditorUIContainer::HandleControlEventL(CCoeControl * /*aControl*/, + TCoeEvent /*aEventType*/ +) + { + + } + +//============================================================================= +void CImageEditorUIContainer::GetHelpContext(TCoeHelpContext& aContext) const + { + if (iControl) + { + iControl->GetHelpContext(aContext); + } + } + +//============================================================================= +void CImageEditorUIContainer::GetDragDirections(TInt& xMovement, TInt& yMovement) + { + xMovement = iXDirChange; + yMovement = iYDirChange; + } + +//============================================================================= +void CImageEditorUIContainer::HandleNaviDecoratorEventL(TInt aEventID) + { + if (aEventID == EAknNaviDecoratorEventRightTabArrow) + { + // A right arrow key event is simulated + TKeyEvent key; + key.iRepeats = 0; + key.iCode = EKeyRightArrow; + key.iModifiers = 0; + CEikonEnv::Static()->SimulateKeyEventL(key, EEventKey); + } + else + if (aEventID == EAknNaviDecoratorEventLeftTabArrow) + { + // A left arrow key event is simulated + TKeyEvent key; + key.iRepeats = 0; + key.iCode = EKeyLeftArrow; + key.iModifiers = 0; + CEikonEnv::Static()->SimulateKeyEventL(key, EEventKey); + } + } + +//============================================================================= +TTypeUid::Ptr CImageEditorUIContainer::MopSupplyObject(TTypeUid aId) + { + if (aId.iUid == MAknsControlContext::ETypeId && iBgContext) + { + return MAknsControlContext::SupplyMopObject(aId, iBgContext); + } + return CCoeControl::MopSupplyObject(aId); + } + +//============================================================================= +void CImageEditorUIContainer::HideWaitNote() + { + iWaitIndicator->Hide(); + } + +//============================================================================= +void CImageEditorUIContainer::ShowWaitNote() + { + iWaitIndicator->Show(); + } + +// End of File