--- /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 <fbs.h>
+#include <eikenv.h>
+#include <eikspane.h>
+#include <aknsbasicbackgroundcontrolcontext.h>
+#include <aknsdrawutils.h>
+
+#include "ImageEditorUIContainer.h"
+#include "ImageEditorControlBase.h"
+#include "ImageEditorUI.hrh"
+
+#include "WaitIndicator.h"
+
+#ifdef RD_TACTILE_FEEDBACK
+#include <touchfeedback.h>
+#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