imageeditor/plugins/ClipartPlugin/inc/ImageEditorClipartControl.h
changeset 1 edfc90759b9f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/imageeditor/plugins/ClipartPlugin/inc/ImageEditorClipartControl.h	Fri Jan 29 13:53:17 2010 +0200
@@ -0,0 +1,623 @@
+/*
+* 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: 
+* Control class for Clipart plugin.
+*
+*/
+
+
+#ifndef IMAGEEDITORCROPCONTROL_H
+#define IMAGEEDITORCROPCONTROL_H
+
+//  INCLUDES
+#include <coecntrl.h>
+#include <eiklbo.h>
+#include <coecobs.h>
+#include <ConeResLoader.h>
+
+#include "PreviewControlBase.h"
+#include "MTimerCallBack.h"
+#include "ClipartSelectionDialog.h"
+
+//  FORWARD DECLARATIONS
+class CAknView;
+class CFbsBitmap;
+class CPluginInfo;
+class CSystemParameters;
+class CClipartSelectionGrid;
+class CJPTimer;
+class CAknInfoPopupNoteController; 
+
+#ifdef RD_TACTILE_FEEDBACK 
+class MTouchFeedback;
+#endif /* RD_TACTILE_FEEDBACK  */
+
+/*	CLASS: CImageEditorClipartControl
+*
+*   CImageEditorClipartControl is a control for clipart insertion plug-in.
+*
+*/
+class CImageEditorClipartControl : public CPreviewControlBase,
+                                   public MCoeControlObserver,  
+                                   public MEikListBoxObserver,
+                                   public MTimerCallBack
+                                   
+{
+
+public:
+
+/** @name Methods:*/
+//@{
+
+	/** NewL factory method, pops cleanupstack
+	*
+	*	@param aRect - control rectangle
+	*	@param aParent - pointer to window owning control
+	*	@return pointer to created CImageEditorClipartControl object
+	*/
+	static CImageEditorClipartControl * NewL (
+		const TRect &		aRect,
+		CCoeControl	*		aParent
+		);
+
+	/** Destructor
+	*
+	*	@param -
+	*	@return -
+	*/
+	virtual ~CImageEditorClipartControl ();
+
+	/** Second phase constructor
+	*
+	*	@see CImageEditorControlBase
+	*
+    */
+	virtual void ConstructL (
+		const TRect &		aRect,
+		CCoeControl	*		aParent
+		);
+
+	/*	Setter for view reference
+	*
+	*	@see CImageEditorControlBase
+	*
+    */
+    virtual void SetView (CAknView * aView);
+
+    /*	SetSelectedUiItem
+	*
+	*	@see CImageEditorControlBase
+	*
+    */
+    virtual void SetSelectedUiItemL (CPluginInfo * aItem);
+
+	/** PrepareL
+	*
+	*	@see CImageEditorControlBase
+	*
+    */
+	virtual void PrepareL ();
+
+    /*	OfferKeyEventL
+	*
+	*	@see CImageEditorControlBase
+	*
+    */
+    virtual TKeyResponse OfferKeyEventL (
+        const TKeyEvent &   aKeyEvent,
+        TEventCode          aType
+        );   
+
+	/*	HandlePluginCommandL
+	*
+	*	@see CImageEditorControlBase
+	*
+    */
+    virtual void HandlePluginCommandL (const TInt aCommand);
+
+	/*	GetSoftkeyIndexL
+	*
+	*	@see CImageEditorControlBase
+    */
+    virtual TInt GetSoftkeyIndexL();
+    
+    /*	GetContextMenuResourceId
+	*
+	*	@see CImageEditorControlBase
+	*/
+    virtual TInt GetContextMenuResourceId();
+
+	/*	GetDimmedMenuItems
+	*
+	*	@see CImageEditorControlBase
+	*/
+	virtual TBitField GetDimmedMenuItems();
+    
+	/*	GetNaviPaneTextL
+	*
+	*	@see CImageEditorControlBase
+	*/
+	virtual TPtrC GetNaviPaneTextL (
+		TBool& aLeftNaviPaneScrollButtonVisibile, 
+		TBool& aRightNaviPaneScrollButtonVisible);
+
+	/*	GetParam
+	*
+	*	Gets pointer to the parameter struct.
+	*
+	*	@param -
+	*	@return - pointer to MIA parameter struct
+	*/
+    TDesC & GetParam ();
+
+	/*	SetSysteParameters
+	*
+	*	Sets reference to system parameters to plug-in.
+	*
+	*	@param aSysPars - System parameters instance
+	*	@return - 
+	*/
+    void SetSystemParameters (const CSystemParameters * aSysPars);
+
+	/**	IsReadyToRender
+	*
+    *   Return ETrue if all parameters have valid value and filter
+    *   can be rendered.
+	*
+	*	@param -
+	*	@return - ETrue if ready to render, otherwise EFalse
+	*/
+    TBool IsReadyToRender() const;
+
+    /*	GetHelpContext
+	*
+	*	@see CCoeControl
+	*
+    */
+	virtual void GetHelpContext(TCoeHelpContext& aContext) const;
+
+    /*	TimerCallBack
+	*
+	*	@see MTimerCallBack
+	*
+    */
+	virtual void TimerCallBack();
+
+//@}
+
+protected:
+
+/** @name Methods:*/
+//@{
+
+	/*	HandleListBoxEventL
+	*
+	*	@see CImageEditorControlBase
+	*
+    */
+    void HandleListBoxEventL(CEikListBox* aListBox, TListBoxEvent aEventType);
+
+	/*	HandleControlEventL
+	*
+	*	@see CImageEditorControlBase
+	*
+    */
+    void HandleControlEventL(CCoeControl* aControl,TCoeEvent aEventType);
+
+	/*	SetBitmapL
+	*
+	*	Sets clip-art bitmap to filter paramerters object
+	*
+    */
+    void SetBitmapL();
+
+	/*	SetBusy
+	*
+	*	@see CImageEditorControlBase
+	*
+    */
+    void SetBusy();
+
+    /*	ResetBusy
+	*
+	*	@see CImageEditorControlBase
+	*
+    */
+    void ResetBusy();
+    
+    /*	HandlePointerEventL
+	*
+	*	@see CImageEditorControlBase
+	*
+    */
+	virtual void HandlePointerEventL( const TPointerEvent &aPointerEvent );
+
+
+//@}
+
+/** @name Members:*/
+//@{
+
+//@}
+
+private:
+
+/** @name Methods:*/
+//@{
+
+	/** Default constructor
+	*
+	*	@param -
+	*	@return -
+	*/
+	CImageEditorClipartControl ();
+
+	/**	Draw
+	*
+	*	@see CImageEditorControlBase
+	*
+    */
+	virtual void Draw (const TRect & aRect) const;
+
+	/**	NaviDown
+	*
+	*	Handles navi key down event.
+	*
+	*	@param -
+	*	@return -
+	*/
+    void NaviDown();
+
+	/**	NaviUp
+	*
+	*	Handles nave key up event.
+	*
+	*	@param -
+	*	@return -
+	*/
+    void NaviUp();
+
+	/**	NaviRight
+	*
+	*	Handles nave key right event.
+	*
+	*	@param -
+	*	@return -
+	*/
+    void NaviRight();
+
+	/**	NaviLeft
+	*
+	*	Handles nave key left event.
+	*
+	*	@param -
+	*	@return -
+	*/
+    void NaviLeft();
+
+	/**	ToMoveState
+	*
+    *   Handles transition to Move state.
+	*
+	*	@param -
+	*	@return -
+	*/
+    void ToMoveStateL();
+
+	/**	ToResizeState
+	*
+    *   Handles transition to Resize state.
+	*
+	*	@param -
+	*	@return -
+	*/
+    void ToResizeStateL();
+
+	/**	ToRotateState
+	*
+    *   Handles transition to Rotate state.
+	*
+	*	@param -
+	*	@return -
+	*/
+    void ToRotateStateL();
+
+	/**	ToMainStateL
+	*
+    *   Handles transition to Main state.
+	*
+	*	@param -
+	*	@return -
+	*/
+    void ToMainStateL();
+  
+    /**	StoreTempParams
+	*
+    *   Store all parameters to temp variables.
+	*
+	*	@param -
+	*	@return -
+	*/
+    void StoreTempParams();
+
+    /**	RestoreTempParams
+	*
+    *   Restore parameters from temp variables.
+	*
+	*	@param -
+	*	@return -
+	*/
+    void RestoreTempParams();
+
+    /**	SelectClipartL
+	*
+	*	Select clipart and set to the parameter object
+	*
+	*	@param -
+	*	@return -
+	*/
+    void SelectClipartL();
+
+	/**	LoadIndicatorL
+	*
+	*	Loads indicator.
+	*
+	*	@param aBitmapInd - indicator bitmap MBM index
+	*	@param aMaskInd - indicator mask MBM index
+	*	@return -
+	*/
+    void LoadIndicatorL (
+        TInt    aBitmapInd,
+        TInt    aMaskInd
+        );
+
+	/**	ComputeIndicatorPosition
+	*
+	*	Computes indicator position.
+	*
+	*	@param -
+	*	@return -
+	*/
+    TPoint ComputeIndicatorPosition() const;
+
+	/**	StoreParameters
+	*
+	*	Stores parameters to command line.
+	*
+	*	@param -
+	*	@return -
+	*/
+	void StoreParameters();
+
+
+	/**	StorePosAndScaleRelScreen
+	*
+	*	Stores clipart position and scale relative to
+	*	screen.
+	*
+	*	@param -
+	*	@return -
+	*/
+	void StorePosAndScaleRelScreen();
+
+	/**	RestorePosAndScaleRelScreen
+	*
+	*	Restores clipart position and scale relative to
+	*	screen.
+	*
+	*	@param -
+	*	@return -
+	*/
+	void RestorePosAndScaleRelScreen();
+
+	/**	StorePosAndScaleRelImage
+	*
+	*	Stores scale and pan
+	*
+	*	@param -
+	*	@return -
+	*/
+	void StorePosAndScaleRelImage();
+
+	/**	RestorePosAndScaleRelImage
+	*
+	*	Stores scale and pan
+	*
+	*	@param -
+	*	@return -
+	*/
+	void RestorePosAndScaleRelImage();
+
+	/**	ClipPosition
+	*
+	*	Clips clipart position after screen mode change.
+	*
+	*	@param -
+	*	@return -
+	*/
+	void ClipPosition();
+    
+    /**	SetClipPosition
+	*
+	*	Sets current clipart to a new position
+	*
+	*	@param - aPointedPosition Middle point position on the screen where 
+	*                             clip art should should be moved
+	*	@return -
+	*/
+    void SetClipPosition( TPoint aPointedPosition );
+    
+    /** ShowTooltip
+    *
+    *   Show tooltip text on the screen. Tooltip text is set based 
+    *   on the current state.
+    *
+    *   @param -
+    *   @return -
+    */
+    void ShowTooltip();
+    
+    /** CalculateResize
+    *
+    *   Function is used to calculate a new scale value when clipart is resized
+    *   with touch. The value is calculated based on dragging start
+    *   and end points. This function also changes scale variable member after
+    *   calculation.
+    *
+    *   @param - aStartPoint - A position where dragging started
+    *   @param - aEndPoint - A position where dragging ended
+    *   @return - TBool - ETrue if scale value is changed in the function
+    */
+    TBool CalculateResize( TPoint aStartPoint, TPoint aEndPoint );
+    
+    /** CalculateRotation
+    *
+    *   Function is used to calculate rotation when clipart is rotated
+    *   with touch. Needed rotation is calculated based on dragging start
+    *   and end points. This function also changes rotation variables after
+    *   calculation.
+    *
+    *   @param - aStartPoint - A position where dragging started
+    *   @param - aEndPoint - A position where dragging ended
+    *   @return - TBool - ETrue if rotate value is changed in the function
+    */
+    TBool CalculateRotation( TPoint aStartPoint, TPoint aEndPoint );
+    
+//@}
+
+/** @name Typedefs:*/
+//@{
+    enum TInsertClipartState
+    {
+        //  Invalid
+        EInsertClipartStateMin      = 0,
+        //  Select clipart
+        EInsertClipartStateSelect   = 1<<1,
+        //  Convert
+        EInsertClipartStateConvert  = 1<<2,
+        //  First time in main
+        EInsertClipartStateFirst    = 1<<3,
+        //  Main view
+        EInsertClipartStateMain     = 1<<4,
+        //  Move
+        EInsertClipartStateMove     = 1<<5,
+        //  Rotate
+        EInsertClipartStateRotate   = 1<<6,
+        //  Resize
+        EInsertClipartStateResize   = 1<<7,
+        //  Invalid
+        EInsertClipartStateMax      = 1<<8
+    } iState;
+
+//@}
+
+
+/** @name Members:*/
+//@{
+
+    /// Editor view
+    CAknView *					iEditorView;
+
+    /// System parameters
+    const CSystemParameters*    iSysPars;
+
+    /// Plug-in info
+    CPluginInfo *               iItem;
+
+    /// Navigation pane text
+    TBuf<64>                    iNaviPaneText;
+    
+    /// Clipart x position
+    TInt						iX;
+    /// Clipart y position
+    TInt						iY;
+	/// Clipart scale	
+    TInt                        iScale;
+    /// Clipart scale minimum
+    TInt						iScaleMin;
+    /// Clipart scale maximum
+    TInt						iScaleMax;
+    /// Clipart angle 
+    TInt						iAngle;
+	///	Do we scale clipart to maximum height
+	TBool						iScaleToHeight;
+    
+    TInt						iScaleOld;
+    TInt						iPosXOld;
+    TInt						iPosYOld;
+    
+	/// Temp params
+    TInt						iTempX;
+    TInt						iTempY;
+    TInt                        iTempScale;
+    TInt                        iTempAngle;
+
+    /// Popup list
+    CClipartSelectionDialog*    iPopupList;
+	
+	/// Clipart filename
+	TFileName					iClipartFileName;
+	
+	/// Clipart filename index
+	TInt						iClipartFileNameIndex;
+	
+	/// Resource reader
+	RConeResourceLoader         iResLoader;
+
+    /// Timer for fast key events
+	CJPTimer *					iTimer;
+	TUint32						iKeyCode;
+    
+    /// Number of ticks since timer start
+    TInt						iTickCount;
+
+    /// Multiplier to control the navigation movement speed
+    TInt						iNaviStepMultiplier;
+
+    /// Showing Ok options menu, where some items are dimmed
+    TBool                       iDisplayingOkOptionsMenu;
+
+    /// Plug-in is ready to render the image
+    TBool                       iReadyToRender;
+
+    /// State indicator glyph
+    CFbsBitmap *                iIndicator;
+    CFbsBitmap *                iIndicatorMask;
+
+	/// Clipart parameter
+	TBuf<256>					iParam;
+	
+
+	// Popup controller
+	CAknInfoPopupNoteController* iPopupController;
+	// Tooltip texts
+	HBufC * 					iTooltipResize;
+	HBufC * 					iTooltipMove;	
+	HBufC * 					iTooltipRotate;	
+	
+	// Previous pen position. Make touch rotating and resizing possible
+	TPoint                      iPointerPosition;
+
+	// Feedback for screen touch:
+#ifdef RD_TACTILE_FEEDBACK 
+	MTouchFeedback* iTouchFeedBack;
+#endif /* RD_TACTILE_FEEDBACK  */
+		
+//@}
+
+};
+
+
+#endif