--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/imageeditor/ImageEditorUI/src/SingleParamControl.cpp Fri Jan 29 13:53:17 2010 +0200
@@ -0,0 +1,791 @@
+/*
+* 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 <fbs.h>
+#include <aknview.h>
+#include <aknutils.h>
+#include <AknIconUtils.h>
+#include <ImageEditorUi.mbg>
+#include <AknLayoutScalable_Avkon.cdl.h>
+#include <AknLayoutScalable_Apps.cdl.h>
+#include <eiklabel.h>
+
+#ifdef RD_TACTILE_FEEDBACK
+#include <touchfeedback.h>
+#endif /* RD_TACTILE_FEEDBACK */
+
+#include "ImageEditorUI.hrh"
+#include "ImageEditorUiDefs.h"
+#include "SingleParamControl.h"
+#include "PreviewControlBase.h"
+#include "SingleParamControlObserver.h"
+#include "PluginInfo.h"
+#include "CustomControlPanics.h"
+
+// constants
+const TReal KTouchSensitivity = 0.5;
+const TInt KBorderPartsNum = 9;
+const TInt KSliderPartsNum = 4;
+const TInt KTouchSliderPartsNum = 7;
+const TInt KSliderWidth = 20;
+const TInt KScrollRepeatTimeout = 250000; // 0.25 seconds
+
+//=============================================================================
+EXPORT_C CSingleParamControl * CSingleParamControl::NewL (
+ const TRect & aRect,
+ CCoeControl * aParent,
+ TBool aActionOnButtonRelease
+)
+ {
+ CSingleParamControl * self = new (ELeave) CSingleParamControl;
+ CleanupStack::PushL (self);
+ self->ConstructL (aRect, aParent, aActionOnButtonRelease);
+ CleanupStack::Pop (); // self
+ return self;
+ }
+
+//=============================================================================
+EXPORT_C CSingleParamControl::CSingleParamControl()
+: iDragging( EFalse ),
+iActionOnButtonRelease( EFalse ),
+iTouchRect(0,0,0,0),
+iMinimumValue(0),
+iMaximumValue(1),
+iStep(0),
+iStepInPixels(0),
+iNumberOfSteps(0),
+iPosition(0),
+iMarkerPressed( EFalse )
+ {
+ }
+
+//=============================================================================
+EXPORT_C void CSingleParamControl::ConstructL (
+ const TRect & /*aRect*/,
+ CCoeControl * aParent,
+ TBool aActionOnButtonRelease
+)
+ {
+ // Set parent
+ SetContainerWindowL (*aParent);
+
+ TFileName iconFile (KImageEditorUiMifFile);
+
+ // create popup and slider graphics
+ for ( TInt i = 0; i < KBorderPartsNum; ++i )
+ {
+ CEikImage* image = new (ELeave) CEikImage;
+
+ image->CreatePictureFromFileL(iconFile,
+ EMbmImageeditoruiQgn_graf_popup_trans_center + 2*i,
+ EMbmImageeditoruiQgn_graf_popup_trans_center_mask + 2*i);
+
+ CleanupStack::PushL( image );
+ image->SetContainerWindowL( *this );
+ iBorders.AppendL( image );
+ CleanupStack::Pop( image );
+ }
+ if( AknLayoutUtils::PenEnabled() )
+ {
+ for ( TInt i = 0; i < KTouchSliderPartsNum; ++i )
+ {
+ CEikImage* image = new (ELeave) CEikImage;
+
+ image->CreatePictureFromFileL(iconFile,
+ EMbmImageeditoruiQgn_graf_nslider_end_left + 2*i,
+ EMbmImageeditoruiQgn_graf_nslider_end_left_mask + 2*i);
+
+ CleanupStack::PushL( image );
+ image->SetContainerWindowL( *this );
+ iScrollBar.AppendL( image );
+ CleanupStack::Pop( image );
+ }
+ }
+ else
+ {
+ for ( TInt i = 0; i < KSliderPartsNum; ++i )
+ {
+ CEikImage* image = new (ELeave) CEikImage;
+
+ image->CreatePictureFromFileL(iconFile,
+ EMbmImageeditoruiQgn_graf_nslider_imed_end_left + 2*i,
+ EMbmImageeditoruiQgn_graf_nslider_imed_end_left_mask + 2*i);
+
+ CleanupStack::PushL( image );
+ image->SetContainerWindowL( *this );
+ iScrollBar.AppendL( image );
+ CleanupStack::Pop( image );
+ }
+ }
+
+ iText = new (ELeave) CEikLabel;
+ iText->SetContainerWindowL( *this );
+ iActionOnButtonRelease = aActionOnButtonRelease;
+
+#ifdef RD_TACTILE_FEEDBACK
+ iTouchFeedBack = MTouchFeedback::Instance();
+#endif /* RD_TACTILE_FEEDBACK */
+
+ EnableDragEvents();
+
+ // Activate control
+ ActivateL();
+ }
+
+//=============================================================================
+EXPORT_C CSingleParamControl::~CSingleParamControl()
+ {
+ iBorders.ResetAndDestroy();
+ iScrollBar.ResetAndDestroy();
+ if (iIcon)
+ {
+ delete iIcon;
+ }
+ delete iText;
+
+ iParObserver = NULL;
+ iItem = NULL;
+ iEditorView = NULL;
+ }
+
+//=============================================================================
+EXPORT_C void CSingleParamControl::SetView (CAknView * aView)
+ {
+ iEditorView = aView;
+ }
+
+EXPORT_C void CSingleParamControl::SetIcon(CEikImage* aIcon)
+ {
+ iIcon = aIcon;
+ }
+
+EXPORT_C void CSingleParamControl::SetCaption(const TDesC& aText)
+ {
+ iText->SetTextL( aText );
+ }
+
+//=============================================================================
+EXPORT_C void CSingleParamControl::SetSelectedUiItemL (CPluginInfo * aItem)
+ {
+ iItem = aItem;
+ }
+
+//=============================================================================
+EXPORT_C TKeyResponse CSingleParamControl::OfferKeyEventL (
+ const TKeyEvent & aKeyEvent,
+ TEventCode aType
+)
+ {
+ if ( Busy() )
+ {
+ return EKeyWasConsumed;
+ }
+ else
+ {
+ if (EEventKey == aType)
+ {
+ switch (aKeyEvent.iCode)
+ {
+
+ case EKeyRightArrow:
+ {
+ if ( iPosition == iMaximumValue )
+ {
+ return EKeyWasConsumed;
+ }
+ MoveSlider(1);
+ if( iActionOnButtonRelease )
+ {
+ iEditorView->HandleCommandL (EImageEditorCmdRender);
+ DrawDeferred();
+ }
+ return EKeyWasConsumed;
+ }
+ case EKeyLeftArrow:
+ {
+ if ( iPosition == iMinimumValue )
+ {
+ return EKeyWasConsumed;
+ }
+ MoveSlider(-1);
+ if( iActionOnButtonRelease )
+ {
+ iEditorView->HandleCommandL (EImageEditorCmdRender);
+ DrawDeferred();
+ }
+ return EKeyWasConsumed;
+ }
+
+ case EKeyOK:
+ case EKeyEnter:
+ {
+ // Cancel plug-in if no changes made
+ iEditorView->HandleCommandL (EImageEditorApplyPlugin);
+ return EKeyWasConsumed;
+ }
+
+ case EKeyDownArrow:
+ case EKeyUpArrow:
+ {
+ return EKeyWasConsumed;
+ }
+
+ default:
+ {
+ break;
+ }
+ }
+ }
+ return EKeyWasNotConsumed;
+ }
+ }
+
+//=============================================================================
+EXPORT_C void CSingleParamControl::HandlePointerEventL(const TPointerEvent &aPointerEvent)
+ {
+ if( AknLayoutUtils::PenEnabled() )
+ {
+ if( iTouchRect.Contains( aPointerEvent.iPosition ) )
+ {
+ TRect markerRect = iScrollBar[KSliderPartsNum - 1]->Rect();
+ markerRect.iTl.iX -= KSliderWidth / 2;
+ markerRect.iBr.iX += KSliderWidth / 2;
+ // marker pressed?
+ if( markerRect.Contains( aPointerEvent.iPosition ) )
+ {
+ if( aPointerEvent.iType == TPointerEvent::EButton1Down )
+ {
+ iDragging = ETrue;
+ iMarkerPressed = ETrue;
+
+#ifdef RD_TACTILE_FEEDBACK
+ if ( iTouchFeedBack )
+ {
+ iTouchFeedBack->InstantFeedback( ETouchFeedbackBasic );
+ RDebug::Printf( "ImageEditor::SingleParamControl: ETouchFeedback" );
+ }
+#endif /* RD_TACTILE_FEEDBACK */
+
+ DrawDeferred();
+ return;
+ }
+ }
+
+ // marker dragged?
+ if (iDragging)
+ {
+ if( aPointerEvent.iType == TPointerEvent::EButton1Up
+ || aPointerEvent.iType == TPointerEvent::EDrag )
+ {
+ TInt markerCenter = iScrollBar[KSliderPartsNum - 1]->Rect().iTl.iX
+ + (iScrollBar[KSliderPartsNum - 1]->Rect().iBr.iX
+ - iScrollBar[KSliderPartsNum - 1]->Rect().iTl.iX) / 2;
+
+ if(aPointerEvent.iPosition.iX> iScrollBar[KSliderPartsNum - 1]->Rect().iBr.iX)
+ {
+ MoveSlider((((TReal) (aPointerEvent.iPosition.iX
+ - markerCenter))
+ / iStepInPixels) + KTouchSensitivity);
+ }
+ else if(aPointerEvent.iPosition.iX < iScrollBar[KSliderPartsNum - 1]->Rect().iTl.iX)
+ {
+ MoveSlider((((TReal) (aPointerEvent.iPosition.iX
+ - markerCenter))
+ / iStepInPixels) - KTouchSensitivity);
+ }
+ }
+ if( aPointerEvent.iType == TPointerEvent::EButton1Up )
+ {
+ if( iActionOnButtonRelease )
+ {
+ iEditorView->HandleCommandL (EImageEditorCmdRender);
+ }
+ iDragging = EFalse;
+ iMarkerPressed = EFalse;
+ DrawDeferred();
+ }
+ if( iActionOnButtonRelease )
+ {
+ DrawDeferred();
+ }
+ return;
+ }
+
+ // normal moving
+ if( aPointerEvent.iType == TPointerEvent::EButton1Down
+ || aPointerEvent.iType == TPointerEvent::EButtonRepeat )
+ {
+ iMarkerPressed = ETrue;
+ if(aPointerEvent.iPosition.iX> iScrollBar[KSliderPartsNum - 1]->Rect().iBr.iX)
+ {
+ MoveSlider(1);
+ if( iActionOnButtonRelease )
+ {
+ iEditorView->HandleCommandL (EImageEditorCmdRender);
+ DrawDeferred();
+ }
+ }
+ else if(aPointerEvent.iPosition.iX < iScrollBar[KSliderPartsNum - 1]->Rect().iTl.iX)
+ {
+ MoveSlider(-1);
+ if( iActionOnButtonRelease )
+ {
+ iEditorView->HandleCommandL (EImageEditorCmdRender);
+ DrawDeferred();
+ }
+ }
+ Window().RequestPointerRepeatEvent( KScrollRepeatTimeout, iTouchRect );
+
+#ifdef RD_TACTILE_FEEDBACK
+ if ( iTouchFeedBack &&
+ ((aPointerEvent.iPosition.iX < markerRect.iTl.iX) ||
+ (aPointerEvent.iPosition.iX > markerRect.iBr.iX)) )
+ {
+ iTouchFeedBack->InstantFeedback( ETouchFeedbackBasic );
+ RDebug::Printf( "ImageEditor::SingleParamControl: ETouchFeedback" );
+ }
+#endif /* RD_TACTILE_FEEDBACK */
+
+ return;
+ }
+ }
+ if (iDragging && iMarkerPressed)
+ {
+ iEditorView->HandleCommandL (EImageEditorCmdRender);
+ }
+
+ iDragging = EFalse;
+ iMarkerPressed = EFalse;
+ DrawDeferred();
+ return;
+ }
+ }
+
+//=============================================================================
+EXPORT_C void CSingleParamControl::HandlePluginCommandL (const TInt aCommand)
+ {
+ // If soft key 1 pressed
+ if (aCommand == EAknSoftkeyOk)
+ {
+ // Cancel plug-in if no changes made
+ iEditorView->HandleCommandL (EImageEditorApplyPlugin);
+ }
+
+ // If soft key 2 pressed
+
+ else if (aCommand == EAknSoftkeyCancel)
+ {
+ iEditorView->HandleCommandL (EImageEditorCancelPlugin);
+ }
+
+ // Default functionality
+
+ else
+ {
+ CImageEditorControlBase::HandlePluginCommandL (aCommand);
+ }
+ }
+
+//=============================================================================
+EXPORT_C TInt CSingleParamControl::GetSoftkeyIndexL()
+ {
+ return 0;
+ }
+
+//=============================================================================
+EXPORT_C TPtrC CSingleParamControl::GetNaviPaneTextL (
+ TBool& aLeftNaviPaneScrollButtonVisibile,
+ TBool& aRightNaviPaneScrollButtonVisible )
+ {
+ aLeftNaviPaneScrollButtonVisibile = EFalse;
+ aRightNaviPaneScrollButtonVisible = EFalse;
+
+ // Don't show any text in navi pane
+ // The whole if-branch should probably be removed for good
+ TBool showNaviPaneText ( EFalse );
+
+ if ( iItem && showNaviPaneText )
+ {
+ return iItem->PluginName()->Des();
+ }
+ else
+ {
+ return TPtrC();
+ }
+ }
+
+//=============================================================================
+EXPORT_C void CSingleParamControl::SetParObserver (MSingleParControlObserver * aObserver)
+ {
+ iParObserver = aObserver;
+ }
+
+//=============================================================================
+EXPORT_C void CSingleParamControl::Draw (const TRect & aRect) const
+ {
+ TInt variety = 0;
+ if( AknLayoutUtils::PenEnabled() )
+ {
+ variety = 1;
+ }
+
+ TAknLayoutRect layoutRect;
+ layoutRect.LayoutRect( Rect(), AknLayoutScalable_Apps::popup_imed_adjust2_window(variety) );
+ TRect parentRect = layoutRect.Rect();
+
+ // centralize the slider
+ TPoint topLeft = parentRect.iTl;
+ topLeft.iX = (Rect().Width() - parentRect.Width()) / 2;
+ parentRect.SetRect(topLeft, parentRect.Size());
+
+ TAknWindowComponentLayout l = AknLayoutScalable_Apps::slider_imed_adjust_pane(variety);
+ TAknWindowLineLayout lineLayout = l.LayoutLine();
+ layoutRect.LayoutRect(parentRect, lineLayout);
+
+ TRect markerRect = layoutRect.Rect();
+ TUint sliderTabWidth = KSliderWidth;
+ TUint sliderBitmapWidth = layoutRect.Rect().Width() - sliderTabWidth;
+ if ( iMinimumValue < iMaximumValue )
+ {
+ if(AknLayoutUtils::LayoutMirrored())
+ {
+ markerRect.iTl.iX += (iPosition - iMinimumValue)
+ * sliderBitmapWidth
+ / (iMaximumValue - iMinimumValue);
+ }
+ else
+ {
+ markerRect.iTl.iX += (iPosition - iMinimumValue)
+ * sliderBitmapWidth
+ / (iMaximumValue - iMinimumValue);
+ }
+ iScrollBar[KSliderPartsNum - 1]->SetPosition(markerRect.iTl);
+ if( AknLayoutUtils::PenEnabled() )
+ {
+ iScrollBar[KTouchSliderPartsNum - 1]->SetPosition(markerRect.iTl);
+ }
+ }
+
+ if (iPreview)
+ {
+ CPreviewControlBase::DrawPreviewImage (aRect);
+ }
+ }
+
+//=============================================================================
+EXPORT_C TInt CSingleParamControl::CountComponentControls() const
+ {
+ TInt count = iBorders.Count();
+ count += iScrollBar.Count();
+
+ if( AknLayoutUtils::PenEnabled() )
+ {
+ count--;
+ }
+
+ if (iIcon)
+ {
+ count++;
+ }
+ count++;
+
+ return count;
+ }
+
+//=============================================================================
+EXPORT_C CCoeControl* CSingleParamControl::ComponentControl(TInt aIndex) const
+ {
+ if ( aIndex < iBorders.Count() )
+ {
+ return iBorders[aIndex];
+ }
+
+ TInt touchSelected = 0;
+ if( AknLayoutUtils::PenEnabled() )
+ {
+ touchSelected++;
+ }
+
+ if ( aIndex < iBorders.Count() + iScrollBar.Count() - touchSelected )
+ {
+ if ( iMarkerPressed && (aIndex - iBorders.Count() == 3) )
+ {
+ return iScrollBar[aIndex - iBorders.Count() + 3];
+ }
+ return iScrollBar[aIndex - iBorders.Count()];
+ }
+ if ( aIndex == iBorders.Count() + iScrollBar.Count() - touchSelected )
+ {
+ return iText;
+ }
+ return iIcon;
+ }
+
+//=============================================================================
+EXPORT_C void CSingleParamControl::SizeChanged()
+ {
+ CountImageSizesAndPositions();
+ }
+
+//=============================================================================
+EXPORT_C void CSingleParamControl::SetSliderMinimumAndMaximum(TInt aMin, TInt aMax)
+ {
+ iMinimumValue = aMin;
+ iMaximumValue = aMax;
+ }
+
+//=============================================================================
+EXPORT_C void CSingleParamControl::SetSliderPosition(TInt aPosition)
+ {
+ __ASSERT_ALWAYS( aPosition >= iMinimumValue, Panic(EHorizontalSliderPanicIndexUnderflow) );
+ __ASSERT_ALWAYS( aPosition <= iMaximumValue, Panic(EHorizontalSliderPanicIndexOverflow) );
+
+ iPosition = aPosition;
+ }
+
+//=============================================================================
+EXPORT_C void CSingleParamControl::SetSliderStep(TUint aStep)
+ {
+ iStep = aStep;
+
+ TInt variety = 0;
+ if( AknLayoutUtils::PenEnabled() )
+ {
+ variety = 1;
+ }
+
+ TAknLayoutRect layoutRect;
+ layoutRect.LayoutRect( Rect(), AknLayoutScalable_Apps::popup_imed_adjust2_window(variety) );
+ TRect parentRect = layoutRect.Rect();
+ TAknWindowComponentLayout l = AknLayoutScalable_Apps::slider_imed_adjust_pane(variety);
+ TAknWindowLineLayout lineLayout = l.LayoutLine();
+ layoutRect.LayoutRect(parentRect, lineLayout);
+
+ TUint sliderTabWidth = iScrollBar[KSliderPartsNum - 1]->Size().iWidth;
+ TUint sliderBitmapWidth = layoutRect.Rect().Width() - sliderTabWidth;
+
+ iStepInPixels = sliderBitmapWidth;
+ if ( iMinimumValue < iMaximumValue )
+ {
+ iStepInPixels = iStep * sliderBitmapWidth
+ / (iMaximumValue - iMinimumValue);
+ }
+ }
+
+//=============================================================================
+EXPORT_C void CSingleParamControl::SetSliderStepAmount(TUint8 aAmount)
+ {
+ {
+ iNumberOfSteps = aAmount;
+
+ if(aAmount == 0)
+ {
+ iStep = 0;
+ }
+ else
+ {
+ iStep = (iMaximumValue - iMinimumValue) / aAmount;
+ }
+ }
+ }
+
+//=============================================================================
+EXPORT_C TInt CSingleParamControl::Position() const
+ {
+ return iPosition;
+ }
+
+//=============================================================================
+EXPORT_C void CSingleParamControl::CountImageSizesAndPositions()
+ {
+ TInt variety = 0;
+ if( AknLayoutUtils::PenEnabled() )
+ {
+ variety = 1;
+ }
+
+ TAknLayoutRect layoutRect;
+ layoutRect.LayoutRect( Rect(), AknLayoutScalable_Apps::popup_imed_adjust2_window(variety) );
+ TRect parentRect = layoutRect.Rect();
+
+ // centralize the slider
+ TPoint topLeft = parentRect.iTl;
+ topLeft.iX = (Rect().Width() - parentRect.Width()) / 2;
+ parentRect.SetRect(topLeft, parentRect.Size());
+
+ // determine popup border layouts
+ if(AknLayoutUtils::LayoutMirrored())
+ {
+ AknLayoutUtils::LayoutControl( iBorders[1], parentRect, AknLayoutScalable_Avkon::bg_tb_trans_pane_g3().LayoutLine() );
+ AknLayoutUtils::LayoutControl( iBorders[2], parentRect, AknLayoutScalable_Avkon::bg_tb_trans_pane_g2().LayoutLine() );
+ AknLayoutUtils::LayoutControl( iBorders[3], parentRect, AknLayoutScalable_Avkon::bg_tb_trans_pane_g5().LayoutLine() );
+ AknLayoutUtils::LayoutControl( iBorders[4], parentRect, AknLayoutScalable_Avkon::bg_tb_trans_pane_g4().LayoutLine() );
+ AknLayoutUtils::LayoutControl( iBorders[5], parentRect, AknLayoutScalable_Avkon::bg_tb_trans_pane_g7().LayoutLine() );
+ AknLayoutUtils::LayoutControl( iBorders[6], parentRect, AknLayoutScalable_Avkon::bg_tb_trans_pane_g6().LayoutLine() );
+ }
+ else
+ {
+ AknLayoutUtils::LayoutControl( iBorders[1], parentRect, AknLayoutScalable_Avkon::bg_tb_trans_pane_g2().LayoutLine() );
+ AknLayoutUtils::LayoutControl( iBorders[2], parentRect, AknLayoutScalable_Avkon::bg_tb_trans_pane_g3().LayoutLine() );
+ AknLayoutUtils::LayoutControl( iBorders[3], parentRect, AknLayoutScalable_Avkon::bg_tb_trans_pane_g4().LayoutLine() );
+ AknLayoutUtils::LayoutControl( iBorders[4], parentRect, AknLayoutScalable_Avkon::bg_tb_trans_pane_g5().LayoutLine() );
+ AknLayoutUtils::LayoutControl( iBorders[5], parentRect, AknLayoutScalable_Avkon::bg_tb_trans_pane_g6().LayoutLine() );
+ AknLayoutUtils::LayoutControl( iBorders[6], parentRect, AknLayoutScalable_Avkon::bg_tb_trans_pane_g7().LayoutLine() );
+ }
+ AknLayoutUtils::LayoutControl( iBorders[0], parentRect, AknLayoutScalable_Avkon::bg_tb_trans_pane_g1().LayoutLine() );
+ AknLayoutUtils::LayoutControl( iBorders[7], parentRect, AknLayoutScalable_Avkon::bg_tb_trans_pane_g8().LayoutLine() );
+ AknLayoutUtils::LayoutControl( iBorders[8], parentRect, AknLayoutScalable_Avkon::bg_tb_trans_pane_g9().LayoutLine() );
+
+ // Images need to be resized separately, because the standard LayoutImage
+ // tries to preserve the aspect ratio and we don't want that.
+ //
+ for ( TInt i = 0; i < iBorders.Count(); ++i )
+ {
+ AknIconUtils::SetSize(
+ const_cast<CFbsBitmap*>( iBorders[i]->Bitmap() ),
+ iBorders[i]->Size(), EAspectRatioNotPreserved );
+ }
+
+ // determine icon layout
+ if (iIcon)
+ {
+ AknLayoutUtils::LayoutControl( iIcon, parentRect, AknLayoutScalable_Apps::popup_imed_adjust2_window_g1(variety).LayoutLine() );
+ AknIconUtils::SetSize(
+ const_cast<CFbsBitmap*>( iIcon->Bitmap() ),
+ iIcon->Size(), EAspectRatioNotPreserved );
+ }
+
+ // determine caption layout
+ TAknLayoutText layoutText;
+ layoutText.LayoutText( parentRect, AknLayoutScalable_Apps::popup_imed_adjust2_window_t1(variety) );
+ TRgb color = layoutText.Color();
+ iText->SetFont(layoutText.Font());
+ iText->OverrideColorL( EColorLabelText, color );
+ iText->SetExtent(layoutText.TextRect().iTl, layoutText.TextRect().Size());
+ if(AknLayoutUtils::LayoutMirrored())
+ {
+ iText->SetAlignment( EHRightVTop );
+ }
+ else
+ {
+ iText->SetAlignment( EHLeftVTop );
+ }
+
+ // determine scrollbar layouts
+ if( AknLayoutUtils::PenEnabled() )
+ {
+ if(AknLayoutUtils::LayoutMirrored())
+ {
+ AknLayoutUtils::LayoutControl( iScrollBar[4], parentRect, AknLayoutScalable_Apps::popup_imed_adjust2_window_g3(0).LayoutLine() );
+ AknLayoutUtils::LayoutControl( iScrollBar[5], parentRect, AknLayoutScalable_Apps::popup_imed_adjust2_window_g2(0).LayoutLine() );
+ }
+ else
+ {
+ AknLayoutUtils::LayoutControl( iScrollBar[4], parentRect, AknLayoutScalable_Apps::popup_imed_adjust2_window_g2(0).LayoutLine() );
+ AknLayoutUtils::LayoutControl( iScrollBar[5], parentRect, AknLayoutScalable_Apps::popup_imed_adjust2_window_g3(0).LayoutLine() );
+ }
+ }
+ TAknWindowComponentLayout l = AknLayoutScalable_Apps::slider_imed_adjust_pane(variety);
+ TAknWindowLineLayout lineLayout = l.LayoutLine();
+ layoutRect.LayoutRect(parentRect, lineLayout);
+ if(AknLayoutUtils::LayoutMirrored())
+ {
+ AknLayoutUtils::LayoutControl( iScrollBar[0], layoutRect.Rect(), AknLayoutScalable_Apps::slider_imed_adjust_pane_g2(variety).LayoutLine() );
+ AknLayoutUtils::LayoutControl( iScrollBar[1], layoutRect.Rect(), AknLayoutScalable_Apps::slider_imed_adjust_pane_g1(variety).LayoutLine() );
+ }
+ else
+ {
+ AknLayoutUtils::LayoutControl( iScrollBar[0], layoutRect.Rect(), AknLayoutScalable_Apps::slider_imed_adjust_pane_g1(variety).LayoutLine() );
+ AknLayoutUtils::LayoutControl( iScrollBar[1], layoutRect.Rect(), AknLayoutScalable_Apps::slider_imed_adjust_pane_g2(variety).LayoutLine() );
+ }
+ AknLayoutUtils::LayoutControl( iScrollBar[2], layoutRect.Rect(), AknLayoutScalable_Apps::slider_imed_adjust_pane_g3(variety).LayoutLine() );
+ AknLayoutUtils::LayoutControl( iScrollBar[3], layoutRect.Rect(), AknLayoutScalable_Apps::slider_imed_adjust_pane_g4(variety).LayoutLine() );
+ iScrollBar[3]->SetSize(TSize(KSliderWidth, iScrollBar[3]->Size().iHeight));
+ if( AknLayoutUtils::PenEnabled() )
+ {
+ AknLayoutUtils::LayoutControl( iScrollBar[6], layoutRect.Rect(), AknLayoutScalable_Apps::slider_imed_adjust_pane_g4(variety).LayoutLine() );
+ iScrollBar[6]->SetSize(TSize(KSliderWidth, iScrollBar[6]->Size().iHeight));
+ }
+ for ( TInt i = 0; i < iScrollBar.Count(); ++i )
+ {
+ AknIconUtils::SetSize(
+ const_cast<CFbsBitmap*>( iScrollBar[i]->Bitmap() ),
+ iScrollBar[i]->Size(), EAspectRatioNotPreserved );
+ }
+
+ // set touch area
+ if( AknLayoutUtils::PenEnabled() )
+ {
+ iTouchRect.iTl.iX = iScrollBar[4]->Rect().iTl.iX;
+ iTouchRect.iTl.iY = iScrollBar[0]->Rect().iTl.iY;
+ iTouchRect.iBr.iX = iScrollBar[5]->Rect().iBr.iX;
+ iTouchRect.iBr.iY = iScrollBar[1]->Rect().iBr.iY;
+ }
+
+ // slider tab width
+ TUint sliderTabWidth = KSliderWidth;
+ // slider bitmap is actually a bit longer but this resolves the problem
+ // where the tab is drawn outside of the slider when in maximum position
+ TUint sliderBitmapWidth = layoutRect.Rect().Width() - sliderTabWidth;
+ iStepInPixels = sliderBitmapWidth;
+ if ( iMinimumValue < iMaximumValue )
+ {
+ iStepInPixels = iStep * sliderBitmapWidth
+ / (iMaximumValue - iMinimumValue);
+ }
+ }
+
+EXPORT_C void CSingleParamControl::MoveSlider(TInt aSteps)
+ {
+ iPosition += iStep * aSteps;
+
+ if(iPosition> iMaximumValue)
+ {
+ iPosition = iMaximumValue;
+ }
+ if(iPosition < iMinimumValue)
+ {
+ iPosition = iMinimumValue;
+ }
+
+ if(aSteps < 0)
+ {
+ for ( TInt i = 0; i> aSteps; i-- )
+ {
+ iParObserver->ParamOperation(MSingleParControlObserver::EParamOperationSubtract);
+ }
+ }
+ else
+ {
+ for ( TInt i = 0; i < aSteps; i++ )
+ {
+ iParObserver->ParamOperation(MSingleParControlObserver::EParamOperationAdd);
+ }
+ }
+
+ if( !iActionOnButtonRelease )
+ {
+ iEditorView->HandleCommandL (EImageEditorCmdRender);
+ }
+ }
+
+// End of File
+
+